import { createRequire as ___createRequire } from 'module'; const require = ___createRequire(import.meta.url); import { __commonJS, __toDynamicImportESM, __toESM } from "./dep-Drtntmtt.js"; import { CLIENT_DIR, CLIENT_ENTRY, CLIENT_PUBLIC_PATH, CSS_LANGS_RE, DEFAULT_ASSETS_INLINE_LIMIT, DEFAULT_ASSETS_RE, DEFAULT_CLIENT_CONDITIONS, DEFAULT_CLIENT_MAIN_FIELDS, DEFAULT_CONFIG_FILES, DEFAULT_DEV_PORT, DEFAULT_PREVIEW_PORT, DEFAULT_SERVER_CONDITIONS, DEFAULT_SERVER_MAIN_FIELDS, DEP_VERSION_RE, DEV_PROD_CONDITION, ENV_ENTRY, ENV_PUBLIC_PATH, ERR_FILE_NOT_FOUND_IN_OPTIMIZED_DEP_DIR, ERR_OPTIMIZE_DEPS_PROCESSING_ERROR, ESBUILD_BASELINE_WIDELY_AVAILABLE_TARGET, FS_PREFIX, JS_TYPES_RE, KNOWN_ASSET_TYPES, METADATA_FILENAME, OPTIMIZABLE_ENTRY_RE, ROLLUP_HOOKS, SPECIAL_QUERY_RE, VERSION, VITE_PACKAGE_DIR, defaultAllowedOrigins, loopbackHosts, wildcardHosts } from "./dep-Ctugieod.js"; import { builtinModules, createRequire } from "node:module"; import { parseAst, parseAstAsync } from "rollup/parseAst"; import * as fs$1 from "node:fs"; import fs, { existsSync, promises, readFileSync } from "node:fs"; import path, { basename, dirname, extname, isAbsolute, join, normalize, posix, relative, resolve } from "node:path"; import fsp, { constants } from "node:fs/promises"; import { URL as URL$1, fileURLToPath, pathToFileURL } from "node:url"; import util, { format, inspect, promisify, stripVTControlCharacters } from "node:util"; import { performance as performance$1 } from "node:perf_hooks"; import crypto from "node:crypto"; import picomatch from "picomatch"; import esbuild, { build, formatMessages, transform } from "esbuild"; import os from "node:os"; import net from "node:net"; import childProcess, { exec, execFile, execSync } from "node:child_process"; import { promises as promises$1 } from "node:dns"; import path$1, { basename as basename$1, dirname as dirname$1, extname as extname$1, isAbsolute as isAbsolute$1, join as join$1, posix as posix$1, relative as relative$1, resolve as resolve$1, sep, win32 } from "path"; import { existsSync as existsSync$1, readFileSync as readFileSync$1, readdirSync, statSync } from "fs"; import { fdir } from "fdir"; import { gzip } from "node:zlib"; import readline from "node:readline"; import { createRequire as createRequire$1 } from "module"; import { MessageChannel, Worker } from "node:worker_threads"; import { Buffer as Buffer$1 } from "node:buffer"; import { escapePath, glob, globSync, isDynamicPattern } from "tinyglobby"; import assert from "node:assert"; import process$1 from "node:process"; import v8 from "node:v8"; import { EventEmitter } from "node:events"; import { STATUS_CODES, createServer, get } from "node:http"; import { createServer as createServer$1, get as get$1 } from "node:https"; import { ESModulesEvaluator, ModuleRunner } from "vite/module-runner"; import zlib from "zlib"; import * as qs from "node:querystring"; //#region ../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js var require_picocolors = __commonJS({ "../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js"(exports, module) { let p = process || {}, argv = p.argv || [], env$1 = p.env || {}; let isColorSupported = !(!!env$1.NO_COLOR || argv.includes("--no-color")) && (!!env$1.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env$1.TERM !== "dumb" || !!env$1.CI); let formatter = (open$2, close$1, replace = open$2) => (input) => { let string = "" + input, index = string.indexOf(close$1, open$2.length); return ~index ? open$2 + replaceClose(string, close$1, replace, index) + close$1 : open$2 + string + close$1; }; let replaceClose = (string, close$1, replace, index) => { let result = "", cursor = 0; do { result += string.substring(cursor, index) + replace; cursor = index + close$1.length; index = string.indexOf(close$1, cursor); } while (~index); return result + string.substring(cursor); }; let createColors = (enabled$1 = isColorSupported) => { let f$1 = enabled$1 ? formatter : () => String; return { isColorSupported: enabled$1, reset: f$1("\x1B[0m", "\x1B[0m"), bold: f$1("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"), dim: f$1("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"), italic: f$1("\x1B[3m", "\x1B[23m"), underline: f$1("\x1B[4m", "\x1B[24m"), inverse: f$1("\x1B[7m", "\x1B[27m"), hidden: f$1("\x1B[8m", "\x1B[28m"), strikethrough: f$1("\x1B[9m", "\x1B[29m"), black: f$1("\x1B[30m", "\x1B[39m"), red: f$1("\x1B[31m", "\x1B[39m"), green: f$1("\x1B[32m", "\x1B[39m"), yellow: f$1("\x1B[33m", "\x1B[39m"), blue: f$1("\x1B[34m", "\x1B[39m"), magenta: f$1("\x1B[35m", "\x1B[39m"), cyan: f$1("\x1B[36m", "\x1B[39m"), white: f$1("\x1B[37m", "\x1B[39m"), gray: f$1("\x1B[90m", "\x1B[39m"), bgBlack: f$1("\x1B[40m", "\x1B[49m"), bgRed: f$1("\x1B[41m", "\x1B[49m"), bgGreen: f$1("\x1B[42m", "\x1B[49m"), bgYellow: f$1("\x1B[43m", "\x1B[49m"), bgBlue: f$1("\x1B[44m", "\x1B[49m"), bgMagenta: f$1("\x1B[45m", "\x1B[49m"), bgCyan: f$1("\x1B[46m", "\x1B[49m"), bgWhite: f$1("\x1B[47m", "\x1B[49m"), blackBright: f$1("\x1B[90m", "\x1B[39m"), redBright: f$1("\x1B[91m", "\x1B[39m"), greenBright: f$1("\x1B[92m", "\x1B[39m"), yellowBright: f$1("\x1B[93m", "\x1B[39m"), blueBright: f$1("\x1B[94m", "\x1B[39m"), magentaBright: f$1("\x1B[95m", "\x1B[39m"), cyanBright: f$1("\x1B[96m", "\x1B[39m"), whiteBright: f$1("\x1B[97m", "\x1B[39m"), bgBlackBright: f$1("\x1B[100m", "\x1B[49m"), bgRedBright: f$1("\x1B[101m", "\x1B[49m"), bgGreenBright: f$1("\x1B[102m", "\x1B[49m"), bgYellowBright: f$1("\x1B[103m", "\x1B[49m"), bgBlueBright: f$1("\x1B[104m", "\x1B[49m"), bgMagentaBright: f$1("\x1B[105m", "\x1B[49m"), bgCyanBright: f$1("\x1B[106m", "\x1B[49m"), bgWhiteBright: f$1("\x1B[107m", "\x1B[49m") }; }; module.exports = createColors(); module.exports.createColors = createColors; } }); //#endregion //#region src/shared/constants.ts /** * Prefix for resolved Ids that are not valid browser import specifiers */ const VALID_ID_PREFIX = `/@id/`; /** * Plugins that use 'virtual modules' (e.g. for helper functions), prefix the * module ID with `\0`, a convention from the rollup ecosystem. * This prevents other plugins from trying to process the id (like node resolution), * and core features like sourcemaps can use this info to differentiate between * virtual modules and regular files. * `\0` is not a permitted char in import URLs so we have to replace them during * import analysis. The id will be decoded back before entering the plugins pipeline. * These encoded virtual ids are also prefixed by the VALID_ID_PREFIX, so virtual * modules in the browser end up encoded as `/@id/__x00__{id}` */ const NULL_BYTE_PLACEHOLDER = `__x00__`; let SOURCEMAPPING_URL = "sourceMa"; SOURCEMAPPING_URL += "ppingURL"; const MODULE_RUNNER_SOURCEMAPPING_SOURCE = "//# sourceMappingSource=vite-generated"; const ERR_OUTDATED_OPTIMIZED_DEP = "ERR_OUTDATED_OPTIMIZED_DEP"; //#endregion //#region src/shared/utils.ts const isWindows = typeof process !== "undefined" && process.platform === "win32"; /** * Prepend `/@id/` and replace null byte so the id is URL-safe. * This is prepended to resolved ids that are not valid browser * import specifiers by the importAnalysis plugin. */ function wrapId(id) { return id.startsWith(VALID_ID_PREFIX) ? id : VALID_ID_PREFIX + id.replace("\0", NULL_BYTE_PLACEHOLDER); } /** * Undo {@link wrapId}'s `/@id/` and null byte replacements. */ function unwrapId(id) { return id.startsWith(VALID_ID_PREFIX) ? id.slice(VALID_ID_PREFIX.length).replace(NULL_BYTE_PLACEHOLDER, "\0") : id; } const windowsSlashRE = /\\/g; function slash(p$1) { return p$1.replace(windowsSlashRE, "/"); } const postfixRE = /[?#].*$/; function cleanUrl(url$6) { return url$6.replace(postfixRE, ""); } function splitFileAndPostfix(path$13) { const file = cleanUrl(path$13); return { file, postfix: path$13.slice(file.length) }; } function withTrailingSlash(path$13) { if (path$13[path$13.length - 1] !== "/") return `${path$13}/`; return path$13; } const AsyncFunction$1 = async function() {}.constructor; function promiseWithResolvers() { let resolve$4; let reject; const promise = new Promise((_resolve, _reject) => { resolve$4 = _resolve; reject = _reject; }); return { promise, resolve: resolve$4, reject }; } //#endregion //#region ../../node_modules/.pnpm/@jridgewell+sourcemap-codec@1.5.0/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs const comma = ",".charCodeAt(0); const semicolon = ";".charCodeAt(0); const chars$1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; const intToChar = new Uint8Array(64); const charToInt = new Uint8Array(128); for (let i$1 = 0; i$1 < 64; i$1++) { const c = chars$1.charCodeAt(i$1); intToChar[i$1] = c; charToInt[c] = i$1; } function decodeInteger(reader, relative$3) { let value$1 = 0; let shift = 0; let integer = 0; do { const c = reader.next(); integer = charToInt[c]; value$1 |= (integer & 31) << shift; shift += 5; } while (integer & 32); const shouldNegate = value$1 & 1; value$1 >>>= 1; if (shouldNegate) value$1 = -2147483648 | -value$1; return relative$3 + value$1; } function encodeInteger(builder, num, relative$3) { let delta = num - relative$3; delta = delta < 0 ? -delta << 1 | 1 : delta << 1; do { let clamped = delta & 31; delta >>>= 5; if (delta > 0) clamped |= 32; builder.write(intToChar[clamped]); } while (delta > 0); return num; } function hasMoreVlq(reader, max) { if (reader.pos >= max) return false; return reader.peek() !== comma; } const bufLength = 1024 * 16; const td = typeof TextDecoder !== "undefined" ? /* @__PURE__ */ new TextDecoder() : typeof Buffer !== "undefined" ? { decode(buf) { const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength); return out.toString(); } } : { decode(buf) { let out = ""; for (let i$1 = 0; i$1 < buf.length; i$1++) out += String.fromCharCode(buf[i$1]); return out; } }; var StringWriter = class { constructor() { this.pos = 0; this.out = ""; this.buffer = new Uint8Array(bufLength); } write(v) { const { buffer } = this; buffer[this.pos++] = v; if (this.pos === bufLength) { this.out += td.decode(buffer); this.pos = 0; } } flush() { const { buffer, out, pos } = this; return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out; } }; var StringReader = class { constructor(buffer) { this.pos = 0; this.buffer = buffer; } next() { return this.buffer.charCodeAt(this.pos++); } peek() { return this.buffer.charCodeAt(this.pos); } indexOf(char) { const { buffer, pos } = this; const idx = buffer.indexOf(char, pos); return idx === -1 ? buffer.length : idx; } }; function decode(mappings) { const { length } = mappings; const reader = new StringReader(mappings); const decoded = []; let genColumn = 0; let sourcesIndex = 0; let sourceLine = 0; let sourceColumn = 0; let namesIndex = 0; do { const semi = reader.indexOf(";"); const line = []; let sorted = true; let lastCol = 0; genColumn = 0; while (reader.pos < semi) { let seg; genColumn = decodeInteger(reader, genColumn); if (genColumn < lastCol) sorted = false; lastCol = genColumn; if (hasMoreVlq(reader, semi)) { sourcesIndex = decodeInteger(reader, sourcesIndex); sourceLine = decodeInteger(reader, sourceLine); sourceColumn = decodeInteger(reader, sourceColumn); if (hasMoreVlq(reader, semi)) { namesIndex = decodeInteger(reader, namesIndex); seg = [ genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex ]; } else seg = [ genColumn, sourcesIndex, sourceLine, sourceColumn ]; } else seg = [genColumn]; line.push(seg); reader.pos++; } if (!sorted) sort(line); decoded.push(line); reader.pos = semi + 1; } while (reader.pos <= length); return decoded; } function sort(line) { line.sort(sortComparator$1); } function sortComparator$1(a, b) { return a[0] - b[0]; } function encode$1(decoded) { const writer = new StringWriter(); let sourcesIndex = 0; let sourceLine = 0; let sourceColumn = 0; let namesIndex = 0; for (let i$1 = 0; i$1 < decoded.length; i$1++) { const line = decoded[i$1]; if (i$1 > 0) writer.write(semicolon); if (line.length === 0) continue; let genColumn = 0; for (let j = 0; j < line.length; j++) { const segment = line[j]; if (j > 0) writer.write(comma); genColumn = encodeInteger(writer, segment[0], genColumn); if (segment.length === 1) continue; sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex); sourceLine = encodeInteger(writer, segment[2], sourceLine); sourceColumn = encodeInteger(writer, segment[3], sourceColumn); if (segment.length === 4) continue; namesIndex = encodeInteger(writer, segment[4], namesIndex); } } return writer.flush(); } //#endregion //#region ../../node_modules/.pnpm/@jridgewell+resolve-uri@3.1.2/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs const schemeRegex = /^[\w+.-]+:\/\//; /** * Matches the parts of a URL: * 1. Scheme, including ":", guaranteed. * 2. User/password, including "@", optional. * 3. Host, guaranteed. * 4. Port, including ":", optional. * 5. Path, including "/", optional. * 6. Query, including "?", optional. * 7. Hash, including "#", optional. */ const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/; /** * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive). * * 1. Host, optional. * 2. Path, which may include "/", guaranteed. * 3. Query, including "?", optional. * 4. Hash, including "#", optional. */ const fileRegex = /^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i; function isAbsoluteUrl(input) { return schemeRegex.test(input); } function isSchemeRelativeUrl(input) { return input.startsWith("//"); } function isAbsolutePath(input) { return input.startsWith("/"); } function isFileUrl(input) { return input.startsWith("file:"); } function isRelative(input) { return /^[.?#]/.test(input); } function parseAbsoluteUrl(input) { const match = urlRegex.exec(input); return makeUrl(match[1], match[2] || "", match[3], match[4] || "", match[5] || "/", match[6] || "", match[7] || ""); } function parseFileUrl(input) { const match = fileRegex.exec(input); const path$13 = match[2]; return makeUrl("file:", "", match[1] || "", "", isAbsolutePath(path$13) ? path$13 : "/" + path$13, match[3] || "", match[4] || ""); } function makeUrl(scheme, user, host, port, path$13, query, hash$1) { return { scheme, user, host, port, path: path$13, query, hash: hash$1, type: 7 }; } function parseUrl$3(input) { if (isSchemeRelativeUrl(input)) { const url$7 = parseAbsoluteUrl("http:" + input); url$7.scheme = ""; url$7.type = 6; return url$7; } if (isAbsolutePath(input)) { const url$7 = parseAbsoluteUrl("http://foo.com" + input); url$7.scheme = ""; url$7.host = ""; url$7.type = 5; return url$7; } if (isFileUrl(input)) return parseFileUrl(input); if (isAbsoluteUrl(input)) return parseAbsoluteUrl(input); const url$6 = parseAbsoluteUrl("http://foo.com/" + input); url$6.scheme = ""; url$6.host = ""; url$6.type = input ? input.startsWith("?") ? 3 : input.startsWith("#") ? 2 : 4 : 1; return url$6; } function stripPathFilename(path$13) { if (path$13.endsWith("/..")) return path$13; const index = path$13.lastIndexOf("/"); return path$13.slice(0, index + 1); } function mergePaths(url$6, base) { normalizePath$4(base, base.type); if (url$6.path === "/") url$6.path = base.path; else url$6.path = stripPathFilename(base.path) + url$6.path; } /** * The path can have empty directories "//", unneeded parents "foo/..", or current directory * "foo/.". We need to normalize to a standard representation. */ function normalizePath$4(url$6, type) { const rel = type <= 4; const pieces = url$6.path.split("/"); let pointer = 1; let positive = 0; let addTrailingSlash = false; for (let i$1 = 1; i$1 < pieces.length; i$1++) { const piece = pieces[i$1]; if (!piece) { addTrailingSlash = true; continue; } addTrailingSlash = false; if (piece === ".") continue; if (piece === "..") { if (positive) { addTrailingSlash = true; positive--; pointer--; } else if (rel) pieces[pointer++] = piece; continue; } pieces[pointer++] = piece; positive++; } let path$13 = ""; for (let i$1 = 1; i$1 < pointer; i$1++) path$13 += "/" + pieces[i$1]; if (!path$13 || addTrailingSlash && !path$13.endsWith("/..")) path$13 += "/"; url$6.path = path$13; } /** * Attempts to resolve `input` URL/path relative to `base`. */ function resolve$3(input, base) { if (!input && !base) return ""; const url$6 = parseUrl$3(input); let inputType = url$6.type; if (base && inputType !== 7) { const baseUrl = parseUrl$3(base); const baseType = baseUrl.type; switch (inputType) { case 1: url$6.hash = baseUrl.hash; case 2: url$6.query = baseUrl.query; case 3: case 4: mergePaths(url$6, baseUrl); case 5: url$6.user = baseUrl.user; url$6.host = baseUrl.host; url$6.port = baseUrl.port; case 6: url$6.scheme = baseUrl.scheme; } if (baseType > inputType) inputType = baseType; } normalizePath$4(url$6, inputType); const queryHash = url$6.query + url$6.hash; switch (inputType) { case 2: case 3: return queryHash; case 4: { const path$13 = url$6.path.slice(1); if (!path$13) return queryHash || "."; if (isRelative(base || input) && !isRelative(path$13)) return "./" + path$13 + queryHash; return path$13 + queryHash; } case 5: return url$6.path + queryHash; default: return url$6.scheme + "//" + url$6.user + url$6.host + url$6.port + url$6.path + queryHash; } } //#endregion //#region ../../node_modules/.pnpm/@jridgewell+trace-mapping@0.3.26/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs function stripFilename(path$13) { if (!path$13) return ""; const index = path$13.lastIndexOf("/"); return path$13.slice(0, index + 1); } function resolver(mapUrl, sourceRoot) { const from = stripFilename(mapUrl); const prefix$1 = sourceRoot ? sourceRoot + "/" : ""; return (source) => resolve$3(prefix$1 + (source || ""), from); } var COLUMN$1 = 0; var SOURCES_INDEX$1 = 1; var SOURCE_LINE$1 = 2; var SOURCE_COLUMN$1 = 3; var NAMES_INDEX$1 = 4; function maybeSort(mappings, owned) { const unsortedIndex = nextUnsortedSegmentLine(mappings, 0); if (unsortedIndex === mappings.length) return mappings; if (!owned) mappings = mappings.slice(); for (let i$1 = unsortedIndex; i$1 < mappings.length; i$1 = nextUnsortedSegmentLine(mappings, i$1 + 1)) mappings[i$1] = sortSegments(mappings[i$1], owned); return mappings; } function nextUnsortedSegmentLine(mappings, start) { for (let i$1 = start; i$1 < mappings.length; i$1++) if (!isSorted(mappings[i$1])) return i$1; return mappings.length; } function isSorted(line) { for (let j = 1; j < line.length; j++) if (line[j][COLUMN$1] < line[j - 1][COLUMN$1]) return false; return true; } function sortSegments(line, owned) { if (!owned) line = line.slice(); return line.sort(sortComparator); } function sortComparator(a, b) { return a[COLUMN$1] - b[COLUMN$1]; } var found = false; function binarySearch(haystack, needle, low, high) { while (low <= high) { const mid = low + (high - low >> 1); const cmp = haystack[mid][COLUMN$1] - needle; if (cmp === 0) { found = true; return mid; } if (cmp < 0) low = mid + 1; else high = mid - 1; } found = false; return low - 1; } function upperBound(haystack, needle, index) { for (let i$1 = index + 1; i$1 < haystack.length; index = i$1++) if (haystack[i$1][COLUMN$1] !== needle) break; return index; } function lowerBound(haystack, needle, index) { for (let i$1 = index - 1; i$1 >= 0; index = i$1--) if (haystack[i$1][COLUMN$1] !== needle) break; return index; } function memoizedState() { return { lastKey: -1, lastNeedle: -1, lastIndex: -1 }; } function memoizedBinarySearch(haystack, needle, state, key) { const { lastKey, lastNeedle, lastIndex } = state; let low = 0; let high = haystack.length - 1; if (key === lastKey) { if (needle === lastNeedle) { found = lastIndex !== -1 && haystack[lastIndex][COLUMN$1] === needle; return lastIndex; } if (needle >= lastNeedle) low = lastIndex === -1 ? 0 : lastIndex; else high = lastIndex; } state.lastKey = key; state.lastNeedle = needle; return state.lastIndex = binarySearch(haystack, needle, low, high); } function parse$16(map$1) { return typeof map$1 === "string" ? JSON.parse(map$1) : map$1; } var LINE_GTR_ZERO = "`line` must be greater than 0 (lines start at line 1)"; var COL_GTR_EQ_ZERO = "`column` must be greater than or equal to 0 (columns start at column 0)"; var LEAST_UPPER_BOUND = -1; var GREATEST_LOWER_BOUND = 1; var TraceMap = class { constructor(map$1, mapUrl) { const isString$1 = typeof map$1 === "string"; if (!isString$1 && map$1._decodedMemo) return map$1; const parsed = parse$16(map$1); const { version: version$2, file, names, sourceRoot, sources, sourcesContent } = parsed; this.version = version$2; this.file = file; this.names = names || []; this.sourceRoot = sourceRoot; this.sources = sources; this.sourcesContent = sourcesContent; this.ignoreList = parsed.ignoreList || parsed.x_google_ignoreList || void 0; const resolve$4 = resolver(mapUrl, sourceRoot); this.resolvedSources = sources.map(resolve$4); const { mappings } = parsed; if (typeof mappings === "string") { this._encoded = mappings; this._decoded = void 0; } else if (Array.isArray(mappings)) { this._encoded = void 0; this._decoded = maybeSort(mappings, isString$1); } else if (parsed.sections) throw new Error(`TraceMap passed sectioned source map, please use FlattenMap export instead`); else throw new Error(`invalid source map: ${JSON.stringify(parsed)}`); this._decodedMemo = memoizedState(); this._bySources = void 0; this._bySourceMemos = void 0; } }; function cast$2(map$1) { return map$1; } function encodedMappings(map$1) { var _a, _b; return (_b = (_a = cast$2(map$1))._encoded) != null ? _b : _a._encoded = encode$1(cast$2(map$1)._decoded); } function decodedMappings(map$1) { var _a; return (_a = cast$2(map$1))._decoded || (_a._decoded = decode(cast$2(map$1)._encoded)); } function traceSegment(map$1, line, column) { const decoded = decodedMappings(map$1); if (line >= decoded.length) return null; const segments = decoded[line]; const index = traceSegmentInternal(segments, cast$2(map$1)._decodedMemo, line, column, GREATEST_LOWER_BOUND); return index === -1 ? null : segments[index]; } function originalPositionFor(map$1, needle) { let { line, column, bias } = needle; line--; if (line < 0) throw new Error(LINE_GTR_ZERO); if (column < 0) throw new Error(COL_GTR_EQ_ZERO); const decoded = decodedMappings(map$1); if (line >= decoded.length) return OMapping(null, null, null, null); const segments = decoded[line]; const index = traceSegmentInternal(segments, cast$2(map$1)._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND); if (index === -1) return OMapping(null, null, null, null); const segment = segments[index]; if (segment.length === 1) return OMapping(null, null, null, null); const { names, resolvedSources } = map$1; return OMapping(resolvedSources[segment[SOURCES_INDEX$1]], segment[SOURCE_LINE$1] + 1, segment[SOURCE_COLUMN$1], segment.length === 5 ? names[segment[NAMES_INDEX$1]] : null); } function decodedMap(map$1) { return clone(map$1, decodedMappings(map$1)); } function encodedMap(map$1) { return clone(map$1, encodedMappings(map$1)); } function clone(map$1, mappings) { return { version: map$1.version, file: map$1.file, names: map$1.names, sourceRoot: map$1.sourceRoot, sources: map$1.sources, sourcesContent: map$1.sourcesContent, mappings, ignoreList: map$1.ignoreList || map$1.x_google_ignoreList }; } function OMapping(source, line, column, name) { return { source, line, column, name }; } function traceSegmentInternal(segments, memo, line, column, bias) { let index = memoizedBinarySearch(segments, column, memo, line); if (found) index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index); else if (bias === LEAST_UPPER_BOUND) index++; if (index === -1 || index === segments.length) return -1; return index; } //#endregion //#region ../../node_modules/.pnpm/@jridgewell+set-array@1.2.1/node_modules/@jridgewell/set-array/dist/set-array.mjs /** * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the * index of the `key` in the backing array. * * This is designed to allow synchronizing a second array with the contents of the backing array, * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`, * and there are never duplicates. */ var SetArray = class { constructor() { this._indexes = { __proto__: null }; this.array = []; } }; /** * Typescript doesn't allow friend access to private fields, so this just casts the set into a type * with public access modifiers. */ function cast$1(set) { return set; } /** * Gets the index associated with `key` in the backing array, if it is already present. */ function get$2(setarr, key) { return cast$1(setarr)._indexes[key]; } /** * Puts `key` into the backing array, if it is not already present. Returns * the index of the `key` in the backing array. */ function put(setarr, key) { const index = get$2(setarr, key); if (index !== void 0) return index; const { array, _indexes: indexes } = cast$1(setarr); const length = array.push(key); return indexes[key] = length - 1; } /** * Removes the key, if it exists in the set. */ function remove(setarr, key) { const index = get$2(setarr, key); if (index === void 0) return; const { array, _indexes: indexes } = cast$1(setarr); for (let i$1 = index + 1; i$1 < array.length; i$1++) { const k = array[i$1]; array[i$1 - 1] = k; indexes[k]--; } indexes[key] = void 0; array.pop(); } //#endregion //#region ../../node_modules/.pnpm/@jridgewell+gen-mapping@0.3.8/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs const COLUMN = 0; const SOURCES_INDEX = 1; const SOURCE_LINE = 2; const SOURCE_COLUMN = 3; const NAMES_INDEX = 4; const NO_NAME = -1; /** * Provides the state to generate a sourcemap. */ var GenMapping = class { constructor({ file, sourceRoot } = {}) { this._names = new SetArray(); this._sources = new SetArray(); this._sourcesContent = []; this._mappings = []; this.file = file; this.sourceRoot = sourceRoot; this._ignoreList = new SetArray(); } }; /** * Typescript doesn't allow friend access to private fields, so this just casts the map into a type * with public access modifiers. */ function cast(map$1) { return map$1; } /** * Same as `addSegment`, but will only add the segment if it generates useful information in the * resulting map. This only works correctly if segments are added **in order**, meaning you should * not add a segment with a lower generated line/column than one that came before. */ const maybeAddSegment = (map$1, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => { return addSegmentInternal(true, map$1, genLine, genColumn, source, sourceLine, sourceColumn, name, content); }; /** * Adds/removes the content of the source file to the source map. */ function setSourceContent(map$1, source, content) { const { _sources: sources, _sourcesContent: sourcesContent } = cast(map$1); const index = put(sources, source); sourcesContent[index] = content; } function setIgnore(map$1, source, ignore = true) { const { _sources: sources, _sourcesContent: sourcesContent, _ignoreList: ignoreList } = cast(map$1); const index = put(sources, source); if (index === sourcesContent.length) sourcesContent[index] = null; if (ignore) put(ignoreList, index); else remove(ignoreList, index); } /** * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects * a sourcemap, or to JSON.stringify. */ function toDecodedMap(map$1) { const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, _ignoreList: ignoreList } = cast(map$1); removeEmptyFinalLines(mappings); return { version: 3, file: map$1.file || void 0, names: names.array, sourceRoot: map$1.sourceRoot || void 0, sources: sources.array, sourcesContent, mappings, ignoreList: ignoreList.array }; } /** * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects * a sourcemap, or to JSON.stringify. */ function toEncodedMap(map$1) { const decoded = toDecodedMap(map$1); return Object.assign(Object.assign({}, decoded), { mappings: encode$1(decoded.mappings) }); } function addSegmentInternal(skipable, map$1, genLine, genColumn, source, sourceLine, sourceColumn, name, content) { const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names } = cast(map$1); const line = getLine(mappings, genLine); const index = getColumnIndex(line, genColumn); if (!source) { if (skipable && skipSourceless(line, index)) return; return insert(line, index, [genColumn]); } const sourcesIndex = put(sources, source); const namesIndex = name ? put(names, name) : NO_NAME; if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content !== null && content !== void 0 ? content : null; if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) return; return insert(line, index, name ? [ genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex ] : [ genColumn, sourcesIndex, sourceLine, sourceColumn ]); } function getLine(mappings, index) { for (let i$1 = mappings.length; i$1 <= index; i$1++) mappings[i$1] = []; return mappings[index]; } function getColumnIndex(line, genColumn) { let index = line.length; for (let i$1 = index - 1; i$1 >= 0; index = i$1--) { const current = line[i$1]; if (genColumn >= current[COLUMN]) break; } return index; } function insert(array, index, value$1) { for (let i$1 = array.length; i$1 > index; i$1--) array[i$1] = array[i$1 - 1]; array[index] = value$1; } function removeEmptyFinalLines(mappings) { const { length } = mappings; let len = length; for (let i$1 = len - 1; i$1 >= 0; len = i$1, i$1--) if (mappings[i$1].length > 0) break; if (len < length) mappings.length = len; } function skipSourceless(line, index) { if (index === 0) return true; const prev = line[index - 1]; return prev.length === 1; } function skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) { if (index === 0) return false; const prev = line[index - 1]; if (prev.length === 1) return false; return sourcesIndex === prev[SOURCES_INDEX] && sourceLine === prev[SOURCE_LINE] && sourceColumn === prev[SOURCE_COLUMN] && namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME); } //#endregion //#region ../../node_modules/.pnpm/@ampproject+remapping@2.3.0/node_modules/@ampproject/remapping/dist/remapping.mjs const SOURCELESS_MAPPING = /* @__PURE__ */ SegmentObject("", -1, -1, "", null, false); const EMPTY_SOURCES = []; function SegmentObject(source, line, column, name, content, ignore) { return { source, line, column, name, content, ignore }; } function Source(map$1, sources, source, content, ignore) { return { map: map$1, sources, source, content, ignore }; } /** * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes * (which may themselves be SourceMapTrees). */ function MapSource(map$1, sources) { return Source(map$1, sources, "", null, false); } /** * A "leaf" node in the sourcemap tree, representing an original, unmodified source file. Recursive * segment tracing ends at the `OriginalSource`. */ function OriginalSource(source, content, ignore) { return Source(null, EMPTY_SOURCES, source, content, ignore); } /** * traceMappings is only called on the root level SourceMapTree, and begins the process of * resolving each mapping in terms of the original source files. */ function traceMappings(tree) { const gen = new GenMapping({ file: tree.map.file }); const { sources: rootSources, map: map$1 } = tree; const rootNames = map$1.names; const rootMappings = decodedMappings(map$1); for (let i$1 = 0; i$1 < rootMappings.length; i$1++) { const segments = rootMappings[i$1]; for (let j = 0; j < segments.length; j++) { const segment = segments[j]; const genCol = segment[0]; let traced = SOURCELESS_MAPPING; if (segment.length !== 1) { const source$1 = rootSources[segment[1]]; traced = originalPositionFor$1(source$1, segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : ""); if (traced == null) continue; } const { column, line, name, content, source, ignore } = traced; maybeAddSegment(gen, i$1, genCol, source, line, column, name); if (source && content != null) setSourceContent(gen, source, content); if (ignore) setIgnore(gen, source, true); } } return gen; } /** * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own * child SourceMapTrees, until we find the original source map. */ function originalPositionFor$1(source, line, column, name) { if (!source.map) return SegmentObject(source.source, line, column, name, source.content, source.ignore); const segment = traceSegment(source.map, line, column); if (segment == null) return null; if (segment.length === 1) return SOURCELESS_MAPPING; return originalPositionFor$1(source.sources[segment[1]], segment[2], segment[3], segment.length === 5 ? source.map.names[segment[4]] : name); } function asArray(value$1) { if (Array.isArray(value$1)) return value$1; return [value$1]; } /** * Recursively builds a tree structure out of sourcemap files, with each node * being either an `OriginalSource` "leaf" or a `SourceMapTree` composed of * `OriginalSource`s and `SourceMapTree`s. * * Every sourcemap is composed of a collection of source files and mappings * into locations of those source files. When we generate a `SourceMapTree` for * the sourcemap, we attempt to load each source file's own sourcemap. If it * does not have an associated sourcemap, it is considered an original, * unmodified source file. */ function buildSourceMapTree(input, loader$1) { const maps = asArray(input).map((m$2) => new TraceMap(m$2, "")); const map$1 = maps.pop(); for (let i$1 = 0; i$1 < maps.length; i$1++) if (maps[i$1].sources.length > 1) throw new Error(`Transformation map ${i$1} must have exactly one source file.\nDid you specify these with the most recent transformation maps first?`); let tree = build$2(map$1, loader$1, "", 0); for (let i$1 = maps.length - 1; i$1 >= 0; i$1--) tree = MapSource(maps[i$1], [tree]); return tree; } function build$2(map$1, loader$1, importer, importerDepth) { const { resolvedSources, sourcesContent, ignoreList } = map$1; const depth = importerDepth + 1; const children = resolvedSources.map((sourceFile, i$1) => { const ctx = { importer, depth, source: sourceFile || "", content: void 0, ignore: void 0 }; const sourceMap = loader$1(ctx.source, ctx); const { source, content, ignore } = ctx; if (sourceMap) return build$2(new TraceMap(sourceMap, source), loader$1, source, depth); const sourceContent = content !== void 0 ? content : sourcesContent ? sourcesContent[i$1] : null; const ignored = ignore !== void 0 ? ignore : ignoreList ? ignoreList.includes(i$1) : false; return OriginalSource(source, sourceContent, ignored); }); return MapSource(map$1, children); } /** * A SourceMap v3 compatible sourcemap, which only includes fields that were * provided to it. */ var SourceMap$1 = class { constructor(map$1, options$1) { const out = options$1.decodedMappings ? toDecodedMap(map$1) : toEncodedMap(map$1); this.version = out.version; this.file = out.file; this.mappings = out.mappings; this.names = out.names; this.ignoreList = out.ignoreList; this.sourceRoot = out.sourceRoot; this.sources = out.sources; if (!options$1.excludeContent) this.sourcesContent = out.sourcesContent; } toString() { return JSON.stringify(this); } }; /** * Traces through all the mappings in the root sourcemap, through the sources * (and their sourcemaps), all the way back to the original source location. * * `loader` will be called every time we encounter a source file. If it returns * a sourcemap, we will recurse into that sourcemap to continue the trace. If * it returns a falsey value, that source file is treated as an original, * unmodified source file. * * Pass `excludeContent` to exclude any self-containing source file content * from the output sourcemap. * * Pass `decodedMappings` to receive a SourceMap with decoded (instead of * VLQ encoded) mappings. */ function remapping(input, loader$1, options$1) { const opts = typeof options$1 === "object" ? options$1 : { excludeContent: !!options$1, decodedMappings: false }; const tree = buildSourceMapTree(input, loader$1); return new SourceMap$1(traceMappings(tree), opts); } //#endregion //#region ../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js var require_ms$1 = __commonJS({ "../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js"(exports, module) { /** * Helpers. */ var s$1 = 1e3; var m$1 = s$1 * 60; var h$1 = m$1 * 60; var d$1 = h$1 * 24; var w = d$1 * 7; var y$1 = d$1 * 365.25; /** * Parse or format the given `val`. * * Options: * * - `long` verbose formatting [false] * * @param {String|Number} val * @param {Object} [options] * @throws {Error} throw an error if val is not a non-empty string or a number * @return {String|Number} * @api public */ module.exports = function(val, options$1) { options$1 = options$1 || {}; var type = typeof val; if (type === "string" && val.length > 0) return parse$15(val); else if (type === "number" && isFinite(val)) return options$1.long ? fmtLong$1(val) : fmtShort$1(val); throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val)); }; /** * Parse the given `str` and return milliseconds. * * @param {String} str * @return {Number} * @api private */ function parse$15(str) { str = String(str); if (str.length > 100) return; var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str); if (!match) return; var n$2 = parseFloat(match[1]); var type = (match[2] || "ms").toLowerCase(); switch (type) { case "years": case "year": case "yrs": case "yr": case "y": return n$2 * y$1; case "weeks": case "week": case "w": return n$2 * w; case "days": case "day": case "d": return n$2 * d$1; case "hours": case "hour": case "hrs": case "hr": case "h": return n$2 * h$1; case "minutes": case "minute": case "mins": case "min": case "m": return n$2 * m$1; case "seconds": case "second": case "secs": case "sec": case "s": return n$2 * s$1; case "milliseconds": case "millisecond": case "msecs": case "msec": case "ms": return n$2; default: return void 0; } } /** * Short format for `ms`. * * @param {Number} ms * @return {String} * @api private */ function fmtShort$1(ms) { var msAbs = Math.abs(ms); if (msAbs >= d$1) return Math.round(ms / d$1) + "d"; if (msAbs >= h$1) return Math.round(ms / h$1) + "h"; if (msAbs >= m$1) return Math.round(ms / m$1) + "m"; if (msAbs >= s$1) return Math.round(ms / s$1) + "s"; return ms + "ms"; } /** * Long format for `ms`. * * @param {Number} ms * @return {String} * @api private */ function fmtLong$1(ms) { var msAbs = Math.abs(ms); if (msAbs >= d$1) return plural$1(ms, msAbs, d$1, "day"); if (msAbs >= h$1) return plural$1(ms, msAbs, h$1, "hour"); if (msAbs >= m$1) return plural$1(ms, msAbs, m$1, "minute"); if (msAbs >= s$1) return plural$1(ms, msAbs, s$1, "second"); return ms + " ms"; } /** * Pluralization helper. */ function plural$1(ms, msAbs, n$2, name) { var isPlural = msAbs >= n$2 * 1.5; return Math.round(ms / n$2) + " " + name + (isPlural ? "s" : ""); } } }); //#endregion //#region ../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/common.js var require_common$1 = __commonJS({ "../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/common.js"(exports, module) { /** * This is the common logic for both the Node.js and web browser * implementations of `debug()`. */ function setup(env$2) { createDebug$1.debug = createDebug$1; createDebug$1.default = createDebug$1; createDebug$1.coerce = coerce$1; createDebug$1.disable = disable$1; createDebug$1.enable = enable$1; createDebug$1.enabled = enabled$1; createDebug$1.humanize = require_ms$1(); createDebug$1.destroy = destroy$1; Object.keys(env$2).forEach((key) => { createDebug$1[key] = env$2[key]; }); /** * The currently active debug mode names, and names to skip. */ createDebug$1.names = []; createDebug$1.skips = []; /** * Map of special "%n" handling functions, for the debug "format" argument. * * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". */ createDebug$1.formatters = {}; /** * Selects a color for a debug namespace * @param {String} namespace The namespace string for the debug instance to be colored * @return {Number|String} An ANSI color code for the given namespace * @api private */ function selectColor$1(namespace) { let hash$1 = 0; for (let i$1 = 0; i$1 < namespace.length; i$1++) { hash$1 = (hash$1 << 5) - hash$1 + namespace.charCodeAt(i$1); hash$1 |= 0; } return createDebug$1.colors[Math.abs(hash$1) % createDebug$1.colors.length]; } createDebug$1.selectColor = selectColor$1; /** * Create a debugger with the given `namespace`. * * @param {String} namespace * @return {Function} * @api public */ function createDebug$1(namespace) { let prevTime$1; let enableOverride = null; let namespacesCache; let enabledCache; function debug$19(...args) { if (!debug$19.enabled) return; const self$1 = debug$19; const curr = Number(/* @__PURE__ */ new Date()); const ms = curr - (prevTime$1 || curr); self$1.diff = ms; self$1.prev = prevTime$1; self$1.curr = curr; prevTime$1 = curr; args[0] = createDebug$1.coerce(args[0]); if (typeof args[0] !== "string") args.unshift("%O"); let index = 0; args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format$3) => { if (match === "%%") return "%"; index++; const formatter$1 = createDebug$1.formatters[format$3]; if (typeof formatter$1 === "function") { const val = args[index]; match = formatter$1.call(self$1, val); args.splice(index, 1); index--; } return match; }); createDebug$1.formatArgs.call(self$1, args); const logFn = self$1.log || createDebug$1.log; logFn.apply(self$1, args); } debug$19.namespace = namespace; debug$19.useColors = createDebug$1.useColors(); debug$19.color = createDebug$1.selectColor(namespace); debug$19.extend = extend; debug$19.destroy = createDebug$1.destroy; Object.defineProperty(debug$19, "enabled", { enumerable: true, configurable: false, get: () => { if (enableOverride !== null) return enableOverride; if (namespacesCache !== createDebug$1.namespaces) { namespacesCache = createDebug$1.namespaces; enabledCache = createDebug$1.enabled(namespace); } return enabledCache; }, set: (v) => { enableOverride = v; } }); if (typeof createDebug$1.init === "function") createDebug$1.init(debug$19); return debug$19; } function extend(namespace, delimiter) { const newDebug = createDebug$1(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace); newDebug.log = this.log; return newDebug; } /** * Enables a debug mode by namespaces. This can include modes * separated by a colon and wildcards. * * @param {String} namespaces * @api public */ function enable$1(namespaces) { createDebug$1.save(namespaces); createDebug$1.namespaces = namespaces; createDebug$1.names = []; createDebug$1.skips = []; const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(/\s+/g, ",").split(",").filter(Boolean); for (const ns of split) if (ns[0] === "-") createDebug$1.skips.push(ns.slice(1)); else createDebug$1.names.push(ns); } /** * Checks if the given string matches a namespace template, honoring * asterisks as wildcards. * * @param {String} search * @param {String} template * @return {Boolean} */ function matchesTemplate(search, template) { let searchIndex = 0; let templateIndex = 0; let starIndex = -1; let matchIndex = 0; while (searchIndex < search.length) if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) if (template[templateIndex] === "*") { starIndex = templateIndex; matchIndex = searchIndex; templateIndex++; } else { searchIndex++; templateIndex++; } else if (starIndex !== -1) { templateIndex = starIndex + 1; matchIndex++; searchIndex = matchIndex; } else return false; while (templateIndex < template.length && template[templateIndex] === "*") templateIndex++; return templateIndex === template.length; } /** * Disable debug output. * * @return {String} namespaces * @api public */ function disable$1() { const namespaces = [...createDebug$1.names, ...createDebug$1.skips.map((namespace) => "-" + namespace)].join(","); createDebug$1.enable(""); return namespaces; } /** * Returns true if the given mode name is enabled, false otherwise. * * @param {String} name * @return {Boolean} * @api public */ function enabled$1(name) { for (const skip of createDebug$1.skips) if (matchesTemplate(name, skip)) return false; for (const ns of createDebug$1.names) if (matchesTemplate(name, ns)) return true; return false; } /** * Coerce `val`. * * @param {Mixed} val * @return {Mixed} * @api private */ function coerce$1(val) { if (val instanceof Error) return val.stack || val.message; return val; } /** * XXX DO NOT USE. This is a temporary stub function. * XXX It WILL be removed in the next major release. */ function destroy$1() { console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); } createDebug$1.enable(createDebug$1.load()); return createDebug$1; } module.exports = setup; } }); //#endregion //#region ../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/node.js var require_node$1 = __commonJS({ "../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/node.js"(exports, module) { /** * Module dependencies. */ const tty$1 = require("tty"); const util$3 = require("util"); /** * This is the Node.js implementation of `debug()`. */ exports.init = init$2; exports.log = log$1; exports.formatArgs = formatArgs$1; exports.save = save$1; exports.load = load$2; exports.useColors = useColors$1; exports.destroy = util$3.deprecate(() => {}, "Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); /** * Colors. */ exports.colors = [ 6, 2, 3, 4, 5, 1 ]; try { const supportsColor = require("supports-color"); if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) exports.colors = [ 20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68, 69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134, 135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 214, 215, 220, 221 ]; } catch (error$1) {} /** * Build up the default `inspectOpts` object from the environment variables. * * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js */ exports.inspectOpts = Object.keys(process.env).filter((key) => { return /^debug_/i.test(key); }).reduce((obj, key) => { const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => { return k.toUpperCase(); }); let val = process.env[key]; if (/^(yes|on|true|enabled)$/i.test(val)) val = true; else if (/^(no|off|false|disabled)$/i.test(val)) val = false; else if (val === "null") val = null; else val = Number(val); obj[prop] = val; return obj; }, {}); /** * Is stdout a TTY? Colored output is enabled when `true`. */ function useColors$1() { return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty$1.isatty(process.stderr.fd); } /** * Adds ANSI color escape codes if enabled. * * @api public */ function formatArgs$1(args) { const { namespace: name, useColors: useColors$2 } = this; if (useColors$2) { const c = this.color; const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c); const prefix$1 = ` ${colorCode};1m${name} \u001B[0m`; args[0] = prefix$1 + args[0].split("\n").join("\n" + prefix$1); args.push(colorCode + "m+" + module.exports.humanize(this.diff) + "\x1B[0m"); } else args[0] = getDate() + name + " " + args[0]; } function getDate() { if (exports.inspectOpts.hideDate) return ""; return (/* @__PURE__ */ new Date()).toISOString() + " "; } /** * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr. */ function log$1(...args) { return process.stderr.write(util$3.formatWithOptions(exports.inspectOpts, ...args) + "\n"); } /** * Save `namespaces`. * * @param {String} namespaces * @api private */ function save$1(namespaces) { if (namespaces) process.env.DEBUG = namespaces; else delete process.env.DEBUG; } /** * Load `namespaces`. * * @return {String} returns the previously persisted debug modes * @api private */ function load$2() { return process.env.DEBUG; } /** * Init logic for `debug` instances. * * Create a new `inspectOpts` object in case `useColors` is set * differently for a particular `debug` instance. */ function init$2(debug$19) { debug$19.inspectOpts = {}; const keys = Object.keys(exports.inspectOpts); for (let i$1 = 0; i$1 < keys.length; i$1++) debug$19.inspectOpts[keys[i$1]] = exports.inspectOpts[keys[i$1]]; } module.exports = require_common$1()(exports); const { formatters } = module.exports; /** * Map %o to `util.inspect()`, all on a single line. */ formatters.o = function(v) { this.inspectOpts.colors = this.useColors; return util$3.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" "); }; /** * Map %O to `util.inspect()`, allowing multiple lines if needed. */ formatters.O = function(v) { this.inspectOpts.colors = this.useColors; return util$3.inspect(v, this.inspectOpts); }; } }); //#endregion //#region ../../node_modules/.pnpm/estree-walker@2.0.2/node_modules/estree-walker/dist/esm/estree-walker.js /** @typedef { import('estree').BaseNode} BaseNode */ /** @typedef {{ skip: () => void; remove: () => void; replace: (node: BaseNode) => void; }} WalkerContext */ var WalkerBase$1 = class { constructor() { /** @type {boolean} */ this.should_skip = false; /** @type {boolean} */ this.should_remove = false; /** @type {BaseNode | null} */ this.replacement = null; /** @type {WalkerContext} */ this.context = { skip: () => this.should_skip = true, remove: () => this.should_remove = true, replace: (node) => this.replacement = node }; } /** * * @param {any} parent * @param {string} prop * @param {number} index * @param {BaseNode} node */ replace(parent, prop, index, node) { if (parent) if (index !== null) parent[prop][index] = node; else parent[prop] = node; } /** * * @param {any} parent * @param {string} prop * @param {number} index */ remove(parent, prop, index) { if (parent) if (index !== null) parent[prop].splice(index, 1); else delete parent[prop]; } }; /** @typedef { import('estree').BaseNode} BaseNode */ /** @typedef { import('./walker.js').WalkerContext} WalkerContext */ /** @typedef {( * this: WalkerContext, * node: BaseNode, * parent: BaseNode, * key: string, * index: number * ) => void} SyncHandler */ var SyncWalker$1 = class extends WalkerBase$1 { /** * * @param {SyncHandler} enter * @param {SyncHandler} leave */ constructor(enter, leave) { super(); /** @type {SyncHandler} */ this.enter = enter; /** @type {SyncHandler} */ this.leave = leave; } /** * * @param {BaseNode} node * @param {BaseNode} parent * @param {string} [prop] * @param {number} [index] * @returns {BaseNode} */ visit(node, parent, prop, index) { if (node) { if (this.enter) { const _should_skip = this.should_skip; const _should_remove = this.should_remove; const _replacement = this.replacement; this.should_skip = false; this.should_remove = false; this.replacement = null; this.enter.call(this.context, node, parent, prop, index); if (this.replacement) { node = this.replacement; this.replace(parent, prop, index, node); } if (this.should_remove) this.remove(parent, prop, index); const skipped = this.should_skip; const removed = this.should_remove; this.should_skip = _should_skip; this.should_remove = _should_remove; this.replacement = _replacement; if (skipped) return node; if (removed) return null; } for (const key in node) { const value$1 = node[key]; if (typeof value$1 !== "object") continue; else if (Array.isArray(value$1)) { for (let i$1 = 0; i$1 < value$1.length; i$1 += 1) if (value$1[i$1] !== null && typeof value$1[i$1].type === "string") { if (!this.visit(value$1[i$1], node, key, i$1)) i$1--; } } else if (value$1 !== null && typeof value$1.type === "string") this.visit(value$1, node, key, null); } if (this.leave) { const _replacement = this.replacement; const _should_remove = this.should_remove; this.replacement = null; this.should_remove = false; this.leave.call(this.context, node, parent, prop, index); if (this.replacement) { node = this.replacement; this.replace(parent, prop, index, node); } if (this.should_remove) this.remove(parent, prop, index); const removed = this.should_remove; this.replacement = _replacement; this.should_remove = _should_remove; if (removed) return null; } } return node; } }; /** @typedef { import('estree').BaseNode} BaseNode */ /** @typedef { import('./sync.js').SyncHandler} SyncHandler */ /** @typedef { import('./async.js').AsyncHandler} AsyncHandler */ /** * * @param {BaseNode} ast * @param {{ * enter?: SyncHandler * leave?: SyncHandler * }} walker * @returns {BaseNode} */ function walk$2(ast, { enter, leave }) { const instance = new SyncWalker$1(enter, leave); return instance.visit(ast, null); } //#endregion //#region ../../node_modules/.pnpm/@rollup+pluginutils@5.2.0_rollup@4.40.1/node_modules/@rollup/pluginutils/dist/es/index.js const extractors = { ArrayPattern(names, param) { for (const element of param.elements) if (element) extractors[element.type](names, element); }, AssignmentPattern(names, param) { extractors[param.left.type](names, param.left); }, Identifier(names, param) { names.push(param.name); }, MemberExpression() {}, ObjectPattern(names, param) { for (const prop of param.properties) if (prop.type === "RestElement") extractors.RestElement(names, prop); else extractors[prop.value.type](names, prop.value); }, RestElement(names, param) { extractors[param.argument.type](names, param.argument); } }; const extractAssignedNames = function extractAssignedNames$1(param) { const names = []; extractors[param.type](names, param); return names; }; const blockDeclarations = { const: true, let: true }; var Scope = class { constructor(options$1 = {}) { this.parent = options$1.parent; this.isBlockScope = !!options$1.block; this.declarations = Object.create(null); if (options$1.params) options$1.params.forEach((param) => { extractAssignedNames(param).forEach((name) => { this.declarations[name] = true; }); }); } addDeclaration(node, isBlockDeclaration, isVar) { if (!isBlockDeclaration && this.isBlockScope) this.parent.addDeclaration(node, isBlockDeclaration, isVar); else if (node.id) extractAssignedNames(node.id).forEach((name) => { this.declarations[name] = true; }); } contains(name) { return this.declarations[name] || (this.parent ? this.parent.contains(name) : false); } }; const attachScopes = function attachScopes$1(ast, propertyName = "scope") { let scope = new Scope(); walk$2(ast, { enter(n$2, parent) { const node = n$2; if (/(?:Function|Class)Declaration/.test(node.type)) scope.addDeclaration(node, false, false); if (node.type === "VariableDeclaration") { const { kind } = node; const isBlockDeclaration = blockDeclarations[kind]; node.declarations.forEach((declaration) => { scope.addDeclaration(declaration, isBlockDeclaration, true); }); } let newScope; if (node.type.includes("Function")) { const func = node; newScope = new Scope({ parent: scope, block: false, params: func.params }); if (func.type === "FunctionExpression" && func.id) newScope.addDeclaration(func, false, false); } if (/For(?:In|Of)?Statement/.test(node.type)) newScope = new Scope({ parent: scope, block: true }); if (node.type === "BlockStatement" && !parent.type.includes("Function")) newScope = new Scope({ parent: scope, block: true }); if (node.type === "CatchClause") newScope = new Scope({ parent: scope, params: node.param ? [node.param] : [], block: true }); if (newScope) { Object.defineProperty(node, propertyName, { value: newScope, configurable: true }); scope = newScope; } }, leave(n$2) { const node = n$2; if (node[propertyName]) scope = scope.parent; } }); return scope; }; function isArray(arg) { return Array.isArray(arg); } function ensureArray(thing) { if (isArray(thing)) return thing; if (thing == null) return []; return [thing]; } const normalizePathRegExp = new RegExp(`\\${win32.sep}`, "g"); const normalizePath$3 = function normalizePath$5(filename) { return filename.replace(normalizePathRegExp, posix$1.sep); }; function getMatcherString$1(id, resolutionBase) { if (resolutionBase === false || isAbsolute$1(id) || id.startsWith("**")) return normalizePath$3(id); const basePath = normalizePath$3(resolve$1(resolutionBase || "")).replace(/[-^$*+?.()|[\]{}]/g, "\\$&"); return posix$1.join(basePath, normalizePath$3(id)); } const createFilter$2 = function createFilter$3(include, exclude, options$1) { const resolutionBase = options$1 && options$1.resolve; const getMatcher = (id) => id instanceof RegExp ? id : { test: (what) => { const pattern = getMatcherString$1(id, resolutionBase); const fn = picomatch(pattern, { dot: true }); const result = fn(what); return result; } }; const includeMatchers = ensureArray(include).map(getMatcher); const excludeMatchers = ensureArray(exclude).map(getMatcher); if (!includeMatchers.length && !excludeMatchers.length) return (id) => typeof id === "string" && !id.includes("\0"); return function result(id) { if (typeof id !== "string") return false; if (id.includes("\0")) return false; const pathId = normalizePath$3(id); for (let i$1 = 0; i$1 < excludeMatchers.length; ++i$1) { const matcher = excludeMatchers[i$1]; if (matcher instanceof RegExp) matcher.lastIndex = 0; if (matcher.test(pathId)) return false; } for (let i$1 = 0; i$1 < includeMatchers.length; ++i$1) { const matcher = includeMatchers[i$1]; if (matcher instanceof RegExp) matcher.lastIndex = 0; if (matcher.test(pathId)) return true; } return !includeMatchers.length; }; }; const reservedWords = "break case class catch const continue debugger default delete do else export extends finally for function if import in instanceof let new return super switch this throw try typeof var void while with yield enum await implements package protected static interface private public"; const builtins = "arguments Infinity NaN undefined null true false eval uneval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Symbol Error EvalError InternalError RangeError ReferenceError SyntaxError TypeError URIError Number Math Date String RegExp Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array Map Set WeakMap WeakSet SIMD ArrayBuffer DataView JSON Promise Generator GeneratorFunction Reflect Proxy Intl"; const forbiddenIdentifiers = new Set(`${reservedWords} ${builtins}`.split(" ")); forbiddenIdentifiers.add(""); const makeLegalIdentifier = function makeLegalIdentifier$1(str) { let identifier = str.replace(/-(\w)/g, (_, letter) => letter.toUpperCase()).replace(/[^$_a-zA-Z0-9]/g, "_"); if (/\d/.test(identifier[0]) || forbiddenIdentifiers.has(identifier)) identifier = `_${identifier}`; return identifier || "_"; }; function stringify$4(obj) { return (JSON.stringify(obj) || "undefined").replace(/[\u2028\u2029]/g, (char) => `\\u${`000${char.charCodeAt(0).toString(16)}`.slice(-4)}`); } function serializeArray(arr, indent, baseIndent) { let output = "["; const separator = indent ? `\n${baseIndent}${indent}` : ""; for (let i$1 = 0; i$1 < arr.length; i$1++) { const key = arr[i$1]; output += `${i$1 > 0 ? "," : ""}${separator}${serialize(key, indent, baseIndent + indent)}`; } return `${output}${indent ? `\n${baseIndent}` : ""}]`; } function serializeObject(obj, indent, baseIndent) { let output = "{"; const separator = indent ? `\n${baseIndent}${indent}` : ""; const entries = Object.entries(obj); for (let i$1 = 0; i$1 < entries.length; i$1++) { const [key, value$1] = entries[i$1]; const stringKey = makeLegalIdentifier(key) === key ? key : stringify$4(key); output += `${i$1 > 0 ? "," : ""}${separator}${stringKey}:${indent ? " " : ""}${serialize(value$1, indent, baseIndent + indent)}`; } return `${output}${indent ? `\n${baseIndent}` : ""}}`; } function serialize(obj, indent, baseIndent) { if (typeof obj === "object" && obj !== null) { if (Array.isArray(obj)) return serializeArray(obj, indent, baseIndent); if (obj instanceof Date) return `new Date(${obj.getTime()})`; if (obj instanceof RegExp) return obj.toString(); return serializeObject(obj, indent, baseIndent); } if (typeof obj === "number") { if (obj === Infinity) return "Infinity"; if (obj === -Infinity) return "-Infinity"; if (obj === 0) return 1 / obj === Infinity ? "0" : "-0"; if (obj !== obj) return "NaN"; } if (typeof obj === "symbol") { const key = Symbol.keyFor(obj); if (key !== void 0) return `Symbol.for(${stringify$4(key)})`; } if (typeof obj === "bigint") return `${obj}n`; return stringify$4(obj); } const hasStringIsWellFormed = "isWellFormed" in String.prototype; function isWellFormedString(input) { if (hasStringIsWellFormed) return input.isWellFormed(); return !/\p{Surrogate}/u.test(input); } const dataToEsm = function dataToEsm$1(data, options$1 = {}) { var _a, _b; const t$1 = options$1.compact ? "" : "indent" in options$1 ? options$1.indent : " "; const _ = options$1.compact ? "" : " "; const n$2 = options$1.compact ? "" : "\n"; const declarationType = options$1.preferConst ? "const" : "var"; if (options$1.namedExports === false || typeof data !== "object" || Array.isArray(data) || data instanceof Date || data instanceof RegExp || data === null) { const code = serialize(data, options$1.compact ? null : t$1, ""); const magic = _ || (/^[{[\-\/]/.test(code) ? "" : " "); return `export default${magic}${code};`; } let maxUnderbarPrefixLength = 0; for (const key of Object.keys(data)) { const underbarPrefixLength = (_b = (_a = /^(_+)/.exec(key)) === null || _a === void 0 ? void 0 : _a[0].length) !== null && _b !== void 0 ? _b : 0; if (underbarPrefixLength > maxUnderbarPrefixLength) maxUnderbarPrefixLength = underbarPrefixLength; } const arbitraryNamePrefix = `${"_".repeat(maxUnderbarPrefixLength + 1)}arbitrary`; let namedExportCode = ""; const defaultExportRows = []; const arbitraryNameExportRows = []; for (const [key, value$1] of Object.entries(data)) if (key === makeLegalIdentifier(key)) { if (options$1.objectShorthand) defaultExportRows.push(key); else defaultExportRows.push(`${key}:${_}${key}`); namedExportCode += `export ${declarationType} ${key}${_}=${_}${serialize(value$1, options$1.compact ? null : t$1, "")};${n$2}`; } else { defaultExportRows.push(`${stringify$4(key)}:${_}${serialize(value$1, options$1.compact ? null : t$1, "")}`); if (options$1.includeArbitraryNames && isWellFormedString(key)) { const variableName = `${arbitraryNamePrefix}${arbitraryNameExportRows.length}`; namedExportCode += `${declarationType} ${variableName}${_}=${_}${serialize(value$1, options$1.compact ? null : t$1, "")};${n$2}`; arbitraryNameExportRows.push(`${variableName} as ${JSON.stringify(key)}`); } } const arbitraryExportCode = arbitraryNameExportRows.length > 0 ? `export${_}{${n$2}${t$1}${arbitraryNameExportRows.join(`,${n$2}${t$1}`)}${n$2}};${n$2}` : ""; const defaultExportCode = `export default${_}{${n$2}${t$1}${defaultExportRows.join(`,${n$2}${t$1}`)}${n$2}};${n$2}`; return `${namedExportCode}${arbitraryExportCode}${defaultExportCode}`; }; //#endregion //#region src/node/packages.ts let pnp; if (process.versions.pnp) try { pnp = createRequire( /** #__KEEP__ */ import.meta.url )("pnpapi"); } catch {} function invalidatePackageData(packageCache, pkgPath) { const pkgDir = normalizePath(path.dirname(pkgPath)); packageCache.forEach((pkg, cacheKey) => { if (pkg.dir === pkgDir) packageCache.delete(cacheKey); }); } function resolvePackageData(pkgName, basedir, preserveSymlinks = false, packageCache) { if (pnp) { const cacheKey = getRpdCacheKey(pkgName, basedir, preserveSymlinks); if (packageCache?.has(cacheKey)) return packageCache.get(cacheKey); try { const pkg = pnp.resolveToUnqualified(pkgName, basedir, { considerBuiltins: false }); if (!pkg) return null; const pkgData = loadPackageData(path.join(pkg, "package.json")); packageCache?.set(cacheKey, pkgData); return pkgData; } catch { return null; } } const originalBasedir = basedir; while (basedir) { if (packageCache) { const cached = getRpdCache(packageCache, pkgName, basedir, originalBasedir, preserveSymlinks); if (cached) return cached; } const pkg = path.join(basedir, "node_modules", pkgName, "package.json"); try { if (fs.existsSync(pkg)) { const pkgPath = preserveSymlinks ? pkg : safeRealpathSync(pkg); const pkgData = loadPackageData(pkgPath); if (packageCache) setRpdCache(packageCache, pkgData, pkgName, basedir, originalBasedir, preserveSymlinks); return pkgData; } } catch {} const nextBasedir = path.dirname(basedir); if (nextBasedir === basedir) break; basedir = nextBasedir; } return null; } function findNearestPackageData(basedir, packageCache) { const originalBasedir = basedir; while (basedir) { if (packageCache) { const cached = getFnpdCache(packageCache, basedir, originalBasedir); if (cached) return cached; } const pkgPath = path.join(basedir, "package.json"); if (tryStatSync(pkgPath)?.isFile()) try { const pkgData = loadPackageData(pkgPath); if (packageCache) setFnpdCache(packageCache, pkgData, basedir, originalBasedir); return pkgData; } catch {} const nextBasedir = path.dirname(basedir); if (nextBasedir === basedir) break; basedir = nextBasedir; } return null; } function findNearestMainPackageData(basedir, packageCache) { const nearestPackage = findNearestPackageData(basedir, packageCache); return nearestPackage && (nearestPackage.data.name ? nearestPackage : findNearestMainPackageData(path.dirname(nearestPackage.dir), packageCache)); } function loadPackageData(pkgPath) { const data = JSON.parse(stripBomTag(fs.readFileSync(pkgPath, "utf-8"))); const pkgDir = normalizePath(path.dirname(pkgPath)); const { sideEffects } = data; let hasSideEffects; if (typeof sideEffects === "boolean") hasSideEffects = () => sideEffects; else if (Array.isArray(sideEffects)) if (sideEffects.length <= 0) hasSideEffects = () => false; else { const finalPackageSideEffects = sideEffects.map((sideEffect) => { if (sideEffect.includes("/")) return sideEffect; return `**/${sideEffect}`; }); hasSideEffects = createFilter(finalPackageSideEffects, null, { resolve: pkgDir }); } else hasSideEffects = () => null; const resolvedCache = {}; const pkg = { dir: pkgDir, data, hasSideEffects, setResolvedCache(key, entry, options$1) { resolvedCache[getResolveCacheKey(key, options$1)] = entry; }, getResolvedCache(key, options$1) { return resolvedCache[getResolveCacheKey(key, options$1)]; } }; return pkg; } function getResolveCacheKey(key, options$1) { return [ key, options$1.isRequire ? "1" : "0", options$1.conditions.join("_"), options$1.extensions.join("_"), options$1.mainFields.join("_") ].join("|"); } function findNearestNodeModules(basedir) { while (basedir) { const pkgPath = path.join(basedir, "node_modules"); if (tryStatSync(pkgPath)?.isDirectory()) return pkgPath; const nextBasedir = path.dirname(basedir); if (nextBasedir === basedir) break; basedir = nextBasedir; } return null; } function watchPackageDataPlugin(packageCache) { const watchQueue = /* @__PURE__ */ new Set(); const watchedDirs = /* @__PURE__ */ new Set(); const watchFileStub = (id) => { watchQueue.add(id); }; let watchFile = watchFileStub; const setPackageData = packageCache.set.bind(packageCache); packageCache.set = (id, pkg) => { if (!isInNodeModules(pkg.dir) && !watchedDirs.has(pkg.dir)) { watchedDirs.add(pkg.dir); watchFile(path.join(pkg.dir, "package.json")); } return setPackageData(id, pkg); }; return { name: "vite:watch-package-data", buildStart() { watchFile = this.addWatchFile.bind(this); watchQueue.forEach(watchFile); watchQueue.clear(); }, buildEnd() { watchFile = watchFileStub; }, watchChange(id) { if (id.endsWith("/package.json")) invalidatePackageData(packageCache, path.normalize(id)); } }; } /** * Get cached `resolvePackageData` value based on `basedir`. When one is found, * and we've already traversed some directories between `basedir` and `originalBasedir`, * we cache the value for those in-between directories as well. * * This makes it so the fs is only read once for a shared `basedir`. */ function getRpdCache(packageCache, pkgName, basedir, originalBasedir, preserveSymlinks) { const cacheKey = getRpdCacheKey(pkgName, basedir, preserveSymlinks); const pkgData = packageCache.get(cacheKey); if (pkgData) { traverseBetweenDirs(originalBasedir, basedir, (dir) => { packageCache.set(getRpdCacheKey(pkgName, dir, preserveSymlinks), pkgData); }); return pkgData; } } function setRpdCache(packageCache, pkgData, pkgName, basedir, originalBasedir, preserveSymlinks) { packageCache.set(getRpdCacheKey(pkgName, basedir, preserveSymlinks), pkgData); traverseBetweenDirs(originalBasedir, basedir, (dir) => { packageCache.set(getRpdCacheKey(pkgName, dir, preserveSymlinks), pkgData); }); } function getRpdCacheKey(pkgName, basedir, preserveSymlinks) { return `rpd_${pkgName}_${basedir}_${preserveSymlinks}`; } /** * Get cached `findNearestPackageData` value based on `basedir`. When one is found, * and we've already traversed some directories between `basedir` and `originalBasedir`, * we cache the value for those in-between directories as well. * * This makes it so the fs is only read once for a shared `basedir`. */ function getFnpdCache(packageCache, basedir, originalBasedir) { const cacheKey = getFnpdCacheKey(basedir); const pkgData = packageCache.get(cacheKey); if (pkgData) { traverseBetweenDirs(originalBasedir, basedir, (dir) => { packageCache.set(getFnpdCacheKey(dir), pkgData); }); return pkgData; } } function setFnpdCache(packageCache, pkgData, basedir, originalBasedir) { packageCache.set(getFnpdCacheKey(basedir), pkgData); traverseBetweenDirs(originalBasedir, basedir, (dir) => { packageCache.set(getFnpdCacheKey(dir), pkgData); }); } function getFnpdCacheKey(basedir) { return `fnpd_${basedir}`; } /** * Traverse between `longerDir` (inclusive) and `shorterDir` (exclusive) and call `cb` for each dir. * @param longerDir Longer dir path, e.g. `/User/foo/bar/baz` * @param shorterDir Shorter dir path, e.g. `/User/foo` */ function traverseBetweenDirs(longerDir, shorterDir, cb) { while (longerDir !== shorterDir) { cb(longerDir); longerDir = path.dirname(longerDir); } } //#endregion //#region src/node/utils.ts var import_picocolors$33 = __toESM(require_picocolors(), 1); var import_node = __toESM(require_node$1(), 1); const createFilter = createFilter$2; const replaceSlashOrColonRE = /[/:]/g; const replaceDotRE = /\./g; const replaceNestedIdRE = /\s*>\s*/g; const replaceHashRE = /#/g; const flattenId = (id) => { const flatId = limitFlattenIdLength(id.replace(replaceSlashOrColonRE, "_").replace(replaceDotRE, "__").replace(replaceNestedIdRE, "___").replace(replaceHashRE, "____")); return flatId; }; const FLATTEN_ID_HASH_LENGTH = 8; const FLATTEN_ID_MAX_FILE_LENGTH = 170; const limitFlattenIdLength = (id, limit = FLATTEN_ID_MAX_FILE_LENGTH) => { if (id.length <= limit) return id; return id.slice(0, limit - (FLATTEN_ID_HASH_LENGTH + 1)) + "_" + getHash(id); }; const normalizeId = (id) => id.replace(replaceNestedIdRE, " > "); const NODE_BUILTIN_NAMESPACE = "node:"; const NPM_BUILTIN_NAMESPACE = "npm:"; const BUN_BUILTIN_NAMESPACE = "bun:"; const nodeBuiltins = builtinModules.filter((id) => !id.includes(":")); const isBuiltinCache = /* @__PURE__ */ new WeakMap(); function isBuiltin(builtins$1, id) { let isBuiltin$1 = isBuiltinCache.get(builtins$1); if (!isBuiltin$1) { isBuiltin$1 = createIsBuiltin(builtins$1); isBuiltinCache.set(builtins$1, isBuiltin$1); } return isBuiltin$1(id); } function createIsBuiltin(builtins$1) { const plainBuiltinsSet = new Set(builtins$1.filter((builtin) => typeof builtin === "string")); const regexBuiltins = builtins$1.filter((builtin) => typeof builtin !== "string"); return (id) => plainBuiltinsSet.has(id) || regexBuiltins.some((regexp) => regexp.test(id)); } const nodeLikeBuiltins = [ ...nodeBuiltins, /* @__PURE__ */ new RegExp(`^${NODE_BUILTIN_NAMESPACE}`), /* @__PURE__ */ new RegExp(`^${NPM_BUILTIN_NAMESPACE}`), /* @__PURE__ */ new RegExp(`^${BUN_BUILTIN_NAMESPACE}`) ]; function isNodeLikeBuiltin(id) { return isBuiltin(nodeLikeBuiltins, id); } function isNodeBuiltin(id) { if (id.startsWith(NODE_BUILTIN_NAMESPACE)) return true; return nodeBuiltins.includes(id); } function isInNodeModules(id) { return id.includes("node_modules"); } function moduleListContains(moduleList, id) { return moduleList?.some((m$2) => m$2 === id || id.startsWith(withTrailingSlash(m$2))); } function isOptimizable(id, optimizeDeps$1) { const { extensions: extensions$1 } = optimizeDeps$1; return OPTIMIZABLE_ENTRY_RE.test(id) || (extensions$1?.some((ext) => id.endsWith(ext)) ?? false); } const bareImportRE = /^(?![a-zA-Z]:)[\w@](?!.*:\/\/)/; const deepImportRE = /^([^@][^/]*)\/|^(@[^/]+\/[^/]+)\//; const _require$1 = createRequire( /** #__KEEP__ */ import.meta.url ); const _dirname = path.dirname(fileURLToPath( /** #__KEEP__ */ import.meta.url )); const rollupVersion = resolvePackageData("rollup", _dirname, true)?.data.version ?? ""; const filter = process.env.VITE_DEBUG_FILTER; const DEBUG = process.env.DEBUG; function createDebugger(namespace, options$1 = {}) { const log$2 = (0, import_node.default)(namespace); const { onlyWhenFocused, depth } = options$1; if (depth && log$2.inspectOpts && log$2.inspectOpts.depth == null) log$2.inspectOpts.depth = options$1.depth; let enabled$1 = log$2.enabled; if (enabled$1 && onlyWhenFocused) { const ns = typeof onlyWhenFocused === "string" ? onlyWhenFocused : namespace; enabled$1 = !!DEBUG?.includes(ns); } if (enabled$1) return (...args) => { if (!filter || args.some((a) => a?.includes?.(filter))) log$2(...args); }; } function testCaseInsensitiveFS() { if (!CLIENT_ENTRY.endsWith("client.mjs")) throw new Error(`cannot test case insensitive FS, CLIENT_ENTRY const doesn't contain client.mjs`); if (!fs.existsSync(CLIENT_ENTRY)) throw new Error("cannot test case insensitive FS, CLIENT_ENTRY does not point to an existing file: " + CLIENT_ENTRY); return fs.existsSync(CLIENT_ENTRY.replace("client.mjs", "cLiEnT.mjs")); } const isCaseInsensitiveFS = testCaseInsensitiveFS(); const VOLUME_RE = /^[A-Z]:/i; function normalizePath(id) { return path.posix.normalize(isWindows ? slash(id) : id); } function fsPathFromId(id) { const fsPath = normalizePath(id.startsWith(FS_PREFIX) ? id.slice(FS_PREFIX.length) : id); return fsPath[0] === "/" || VOLUME_RE.test(fsPath) ? fsPath : `/${fsPath}`; } function fsPathFromUrl(url$6) { return fsPathFromId(cleanUrl(url$6)); } /** * Check if dir is a parent of file * * Warning: parameters are not validated, only works with normalized absolute paths * * @param dir - normalized absolute path * @param file - normalized absolute path * @returns true if dir is a parent of file */ function isParentDirectory(dir, file) { dir = withTrailingSlash(dir); return file.startsWith(dir) || isCaseInsensitiveFS && file.toLowerCase().startsWith(dir.toLowerCase()); } /** * Check if 2 file name are identical * * Warning: parameters are not validated, only works with normalized absolute paths * * @param file1 - normalized absolute path * @param file2 - normalized absolute path * @returns true if both files url are identical */ function isSameFileUri(file1, file2) { return file1 === file2 || isCaseInsensitiveFS && file1.toLowerCase() === file2.toLowerCase(); } const externalRE = /^([a-z]+:)?\/\//; const isExternalUrl = (url$6) => externalRE.test(url$6); const dataUrlRE = /^\s*data:/i; const isDataUrl = (url$6) => dataUrlRE.test(url$6); const virtualModuleRE = /^virtual-module:.*/; const virtualModulePrefix = "virtual-module:"; const knownJsSrcRE = /\.(?:[jt]sx?|m[jt]s|vue|marko|svelte|astro|imba|mdx)(?:$|\?)/; const isJSRequest = (url$6) => { url$6 = cleanUrl(url$6); if (knownJsSrcRE.test(url$6)) return true; if (!path.extname(url$6) && url$6[url$6.length - 1] !== "/") return true; return false; }; const isCSSRequest = (request) => CSS_LANGS_RE.test(request); const importQueryRE = /(\?|&)import=?(?:&|$)/; const directRequestRE$1 = /(\?|&)direct=?(?:&|$)/; const internalPrefixes = [ FS_PREFIX, VALID_ID_PREFIX, CLIENT_PUBLIC_PATH, ENV_PUBLIC_PATH ]; const InternalPrefixRE = /* @__PURE__ */ new RegExp(`^(?:${internalPrefixes.join("|")})`); const trailingSeparatorRE = /[?&]$/; const isImportRequest = (url$6) => importQueryRE.test(url$6); const isInternalRequest = (url$6) => InternalPrefixRE.test(url$6); function removeImportQuery(url$6) { return url$6.replace(importQueryRE, "$1").replace(trailingSeparatorRE, ""); } function removeDirectQuery(url$6) { return url$6.replace(directRequestRE$1, "$1").replace(trailingSeparatorRE, ""); } const urlRE = /(\?|&)url(?:&|$)/; const rawRE = /(\?|&)raw(?:&|$)/; function removeUrlQuery(url$6) { return url$6.replace(urlRE, "$1").replace(trailingSeparatorRE, ""); } function injectQuery(url$6, queryToInject) { const { file, postfix } = splitFileAndPostfix(url$6); const normalizedFile = isWindows ? slash(file) : file; return `${normalizedFile}?${queryToInject}${postfix[0] === "?" ? `&${postfix.slice(1)}` : postfix}`; } const timestampRE = /\bt=\d{13}&?\b/; function removeTimestampQuery(url$6) { return url$6.replace(timestampRE, "").replace(trailingSeparatorRE, ""); } async function asyncReplace(input, re, replacer) { let match; let remaining = input; let rewritten = ""; while (match = re.exec(remaining)) { rewritten += remaining.slice(0, match.index); rewritten += await replacer(match); remaining = remaining.slice(match.index + match[0].length); } rewritten += remaining; return rewritten; } function timeFrom(start, subtract = 0) { const time = performance$1.now() - start - subtract; const timeString = (time.toFixed(2) + `ms`).padEnd(5, " "); if (time < 10) return import_picocolors$33.default.green(timeString); else if (time < 50) return import_picocolors$33.default.yellow(timeString); else return import_picocolors$33.default.red(timeString); } /** * pretty url for logging. */ function prettifyUrl(url$6, root) { url$6 = removeTimestampQuery(url$6); const isAbsoluteFile = url$6.startsWith(root); if (isAbsoluteFile || url$6.startsWith(FS_PREFIX)) { const file = path.posix.relative(root, isAbsoluteFile ? url$6 : fsPathFromId(url$6)); return import_picocolors$33.default.dim(file); } else return import_picocolors$33.default.dim(url$6); } function isObject(value$1) { return Object.prototype.toString.call(value$1) === "[object Object]"; } function isDefined(value$1) { return value$1 != null; } function tryStatSync(file) { try { return fs.statSync(file, { throwIfNoEntry: false }); } catch {} } function lookupFile(dir, fileNames) { while (dir) { for (const fileName of fileNames) { const fullPath = path.join(dir, fileName); if (tryStatSync(fullPath)?.isFile()) return fullPath; } const parentDir$1 = path.dirname(dir); if (parentDir$1 === dir) return; dir = parentDir$1; } } function isFilePathESM(filePath, packageCache) { if (/\.m[jt]s$/.test(filePath)) return true; else if (/\.c[jt]s$/.test(filePath)) return false; else try { const pkg = findNearestPackageData(path.dirname(filePath), packageCache); return pkg?.data.type === "module"; } catch { return false; } } const splitRE = /\r?\n/g; const range = 2; function pad$1(source, n$2 = 2) { const lines = source.split(splitRE); return lines.map((l) => ` `.repeat(n$2) + l).join(`\n`); } function posToNumber(source, pos) { if (typeof pos === "number") return pos; const lines = source.split(splitRE); const { line, column } = pos; let start = 0; for (let i$1 = 0; i$1 < line - 1 && i$1 < lines.length; i$1++) start += lines[i$1].length + 1; return start + column; } function numberToPos(source, offset$1) { if (typeof offset$1 !== "number") return offset$1; if (offset$1 > source.length) throw new Error(`offset is longer than source length! offset ${offset$1} > length ${source.length}`); const lines = source.slice(0, offset$1).split(splitRE); return { line: lines.length, column: lines[lines.length - 1].length }; } function generateCodeFrame(source, start = 0, end) { start = Math.max(posToNumber(source, start), 0); end = Math.min(end !== void 0 ? posToNumber(source, end) : start, source.length); const lines = source.split(splitRE); let count = 0; const res = []; for (let i$1 = 0; i$1 < lines.length; i$1++) { count += lines[i$1].length; if (count >= start) { for (let j = i$1 - range; j <= i$1 + range || end > count; j++) { if (j < 0 || j >= lines.length) continue; const line = j + 1; res.push(`${line}${" ".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`); const lineLength = lines[j].length; if (j === i$1) { const pad$2 = Math.max(start - (count - lineLength), 0); const length = Math.max(1, end > count ? lineLength - pad$2 : end - start); res.push(` | ` + " ".repeat(pad$2) + "^".repeat(length)); } else if (j > i$1) { if (end > count) { const length = Math.max(Math.min(end - count, lineLength), 1); res.push(` | ` + "^".repeat(length)); } count += lineLength + 1; } } break; } count++; } return res.join("\n"); } function isFileReadable(filename) { if (!tryStatSync(filename)) return false; try { fs.accessSync(filename, fs.constants.R_OK); return true; } catch { return false; } } const splitFirstDirRE = /(.+?)[\\/](.+)/; /** * Delete every file and subdirectory. **The given directory must exist.** * Pass an optional `skip` array to preserve files under the root directory. */ function emptyDir(dir, skip) { const skipInDir = []; let nested = null; if (skip?.length) for (const file of skip) if (path.dirname(file) !== ".") { const matched = splitFirstDirRE.exec(file); if (matched) { nested ??= /* @__PURE__ */ new Map(); const [, nestedDir, skipPath] = matched; let nestedSkip = nested.get(nestedDir); if (!nestedSkip) { nestedSkip = []; nested.set(nestedDir, nestedSkip); } if (!nestedSkip.includes(skipPath)) nestedSkip.push(skipPath); } } else skipInDir.push(file); for (const file of fs.readdirSync(dir)) { if (skipInDir.includes(file)) continue; if (nested?.has(file)) emptyDir(path.resolve(dir, file), nested.get(file)); else fs.rmSync(path.resolve(dir, file), { recursive: true, force: true }); } } function copyDir(srcDir, destDir) { fs.mkdirSync(destDir, { recursive: true }); for (const file of fs.readdirSync(srcDir)) { const srcFile = path.resolve(srcDir, file); if (srcFile === destDir) continue; const destFile = path.resolve(destDir, file); const stat$4 = fs.statSync(srcFile); if (stat$4.isDirectory()) copyDir(srcFile, destFile); else fs.copyFileSync(srcFile, destFile); } } const ERR_SYMLINK_IN_RECURSIVE_READDIR = "ERR_SYMLINK_IN_RECURSIVE_READDIR"; async function recursiveReaddir(dir) { if (!fs.existsSync(dir)) return []; let dirents; try { dirents = await fsp.readdir(dir, { withFileTypes: true }); } catch (e$1) { if (e$1.code === "EACCES") return []; throw e$1; } if (dirents.some((dirent) => dirent.isSymbolicLink())) { const err$2 = /* @__PURE__ */ new Error("Symbolic links are not supported in recursiveReaddir"); err$2.code = ERR_SYMLINK_IN_RECURSIVE_READDIR; throw err$2; } const files = await Promise.all(dirents.map((dirent) => { const res = path.resolve(dir, dirent.name); return dirent.isDirectory() ? recursiveReaddir(res) : normalizePath(res); })); return files.flat(1); } let safeRealpathSync = isWindows ? windowsSafeRealPathSync : fs.realpathSync.native; const windowsNetworkMap = /* @__PURE__ */ new Map(); function windowsMappedRealpathSync(path$13) { const realPath = fs.realpathSync.native(path$13); if (realPath.startsWith("\\\\")) { for (const [network, volume] of windowsNetworkMap) if (realPath.startsWith(network)) return realPath.replace(network, volume); } return realPath; } const parseNetUseRE = /^\w* +(\w:) +([^ ]+)\s/; let firstSafeRealPathSyncRun = false; function windowsSafeRealPathSync(path$13) { if (!firstSafeRealPathSyncRun) { optimizeSafeRealPathSync(); firstSafeRealPathSyncRun = true; } return fs.realpathSync(path$13); } function optimizeSafeRealPathSync() { try { fs.realpathSync.native(path.resolve("./")); } catch (error$1) { if (error$1.message.includes("EISDIR: illegal operation on a directory")) { safeRealpathSync = fs.realpathSync; return; } } exec("net use", (error$1, stdout) => { if (error$1) return; const lines = stdout.split("\n"); for (const line of lines) { const m$2 = parseNetUseRE.exec(line); if (m$2) windowsNetworkMap.set(m$2[2], m$2[1]); } if (windowsNetworkMap.size === 0) safeRealpathSync = fs.realpathSync.native; else safeRealpathSync = windowsMappedRealpathSync; }); } function ensureWatchedFile(watcher, file, root) { if (file && !file.startsWith(withTrailingSlash(root)) && !file.includes("\0") && fs.existsSync(file)) watcher.add(path.resolve(file)); } function joinSrcset(ret) { return ret.map(({ url: url$6, descriptor }) => url$6 + (descriptor ? ` ${descriptor}` : "")).join(", "); } /** This regex represents a loose rule of an “image candidate string” and "image set options". @see https://html.spec.whatwg.org/multipage/images.html#srcset-attribute @see https://drafts.csswg.org/css-images-4/#image-set-notation The Regex has named capturing groups `url` and `descriptor`. The `url` group can be: * any CSS function * CSS string (single or double-quoted) * URL string (unquoted) The `descriptor` is anything after the space and before the comma. */ const imageCandidateRegex = /(?:^|\s|(?<=,))(?[\w-]+\([^)]*\)|"[^"]*"|'[^']*'|[^,]\S*[^,])\s*(?:\s(?\w[^,]+))?(?:,|$)/g; const escapedSpaceCharacters = /(?: |\\t|\\n|\\f|\\r)+/g; function parseSrcset(string) { const matches$2 = string.trim().replace(escapedSpaceCharacters, " ").replace(/\r?\n/, "").replace(/,\s+/, ", ").replaceAll(/\s+/g, " ").matchAll(imageCandidateRegex); return Array.from(matches$2, ({ groups: groups$1 }) => ({ url: groups$1?.url?.trim() ?? "", descriptor: groups$1?.descriptor?.trim() ?? "" })).filter(({ url: url$6 }) => !!url$6); } function processSrcSet(srcs, replacer) { return Promise.all(parseSrcset(srcs).map(async ({ url: url$6, descriptor }) => ({ url: await replacer({ url: url$6, descriptor }), descriptor }))).then(joinSrcset); } function processSrcSetSync(srcs, replacer) { return joinSrcset(parseSrcset(srcs).map(({ url: url$6, descriptor }) => ({ url: replacer({ url: url$6, descriptor }), descriptor }))); } const windowsDriveRE = /^[A-Z]:/; const replaceWindowsDriveRE = /^([A-Z]):\//; const linuxAbsolutePathRE = /^\/[^/]/; function escapeToLinuxLikePath(path$13) { if (windowsDriveRE.test(path$13)) return path$13.replace(replaceWindowsDriveRE, "/windows/$1/"); if (linuxAbsolutePathRE.test(path$13)) return `/linux${path$13}`; return path$13; } const revertWindowsDriveRE = /^\/windows\/([A-Z])\//; function unescapeToLinuxLikePath(path$13) { if (path$13.startsWith("/linux/")) return path$13.slice(6); if (path$13.startsWith("/windows/")) return path$13.replace(revertWindowsDriveRE, "$1:/"); return path$13; } const nullSourceMap = { names: [], sources: [], mappings: "", version: 3 }; /** * Combines multiple sourcemaps into a single sourcemap. * Note that the length of sourcemapList must be 2. */ function combineSourcemaps(filename, sourcemapList) { if (sourcemapList.length === 0 || sourcemapList.every((m$2) => m$2.sources.length === 0)) return { ...nullSourceMap }; sourcemapList = sourcemapList.map((sourcemap) => { const newSourcemaps = { ...sourcemap }; newSourcemaps.sources = sourcemap.sources.map((source) => source ? escapeToLinuxLikePath(source) : null); if (sourcemap.sourceRoot) newSourcemaps.sourceRoot = escapeToLinuxLikePath(sourcemap.sourceRoot); return newSourcemaps; }); const escapedFilename = escapeToLinuxLikePath(filename); let map$1; let mapIndex = 1; const useArrayInterface = sourcemapList.slice(0, -1).find((m$2) => m$2.sources.length !== 1) === void 0; if (useArrayInterface) map$1 = remapping(sourcemapList, () => null); else map$1 = remapping(sourcemapList[0], function loader$1(sourcefile) { if (sourcefile === escapedFilename && sourcemapList[mapIndex]) return sourcemapList[mapIndex++]; else return null; }); if (!map$1.file) delete map$1.file; map$1.sources = map$1.sources.map((source) => source ? unescapeToLinuxLikePath(source) : source); map$1.file = filename; return map$1; } function unique(arr) { return Array.from(new Set(arr)); } /** * Returns resolved localhost address when `dns.lookup` result differs from DNS * * `dns.lookup` result is same when defaultResultOrder is `verbatim`. * Even if defaultResultOrder is `ipv4first`, `dns.lookup` result maybe same. * For example, when IPv6 is not supported on that machine/network. */ async function getLocalhostAddressIfDiffersFromDNS() { const [nodeResult, dnsResult] = await Promise.all([promises$1.lookup("localhost"), promises$1.lookup("localhost", { verbatim: true })]); const isSame = nodeResult.family === dnsResult.family && nodeResult.address === dnsResult.address; return isSame ? void 0 : nodeResult.address; } function diffDnsOrderChange(oldUrls, newUrls) { return !(oldUrls === newUrls || oldUrls && newUrls && arrayEqual(oldUrls.local, newUrls.local) && arrayEqual(oldUrls.network, newUrls.network)); } async function resolveHostname(optionsHost) { let host; if (optionsHost === void 0 || optionsHost === false) host = "localhost"; else if (optionsHost === true) host = void 0; else host = optionsHost; let name = host === void 0 || wildcardHosts.has(host) ? "localhost" : host; if (host === "localhost") { const localhostAddr = await getLocalhostAddressIfDiffersFromDNS(); if (localhostAddr) name = localhostAddr; } return { host, name }; } async function resolveServerUrls(server, options$1, httpsOptions, config$2) { const address = server.address(); const isAddressInfo = (x) => x?.address; if (!isAddressInfo(address)) return { local: [], network: [] }; const local = []; const network = []; const hostname = await resolveHostname(options$1.host); const protocol = options$1.https ? "https" : "http"; const port = address.port; const base = config$2.rawBase === "./" || config$2.rawBase === "" ? "/" : config$2.rawBase; if (hostname.host !== void 0 && !wildcardHosts.has(hostname.host)) { let hostnameName = hostname.name; if (hostnameName.includes(":")) hostnameName = `[${hostnameName}]`; const address$1 = `${protocol}://${hostnameName}:${port}${base}`; if (loopbackHosts.has(hostname.host)) local.push(address$1); else network.push(address$1); } else Object.values(os.networkInterfaces()).flatMap((nInterface) => nInterface ?? []).filter((detail) => detail.address && detail.family === "IPv4").forEach((detail) => { let host = detail.address.replace("127.0.0.1", hostname.name); if (host.includes(":")) host = `[${host}]`; const url$6 = `${protocol}://${host}:${port}${base}`; if (detail.address.includes("127.0.0.1")) local.push(url$6); else network.push(url$6); }); const cert = httpsOptions?.cert && !Array.isArray(httpsOptions.cert) ? new crypto.X509Certificate(httpsOptions.cert) : void 0; const hostnameFromCert = cert?.subjectAltName ? extractHostnamesFromSubjectAltName(cert.subjectAltName) : []; if (hostnameFromCert.length > 0) { const existings = new Set([...local, ...network]); local.push(...hostnameFromCert.map((hostname$1) => `https://${hostname$1}:${port}${base}`).filter((url$6) => !existings.has(url$6))); } return { local, network }; } function extractHostnamesFromSubjectAltName(subjectAltName) { const hostnames = []; let remaining = subjectAltName; while (remaining) { const nameEndIndex = remaining.indexOf(":"); const name = remaining.slice(0, nameEndIndex); remaining = remaining.slice(nameEndIndex + 1); if (!remaining) break; const isQuoted = remaining[0] === "\""; let value$1; if (isQuoted) { const endQuoteIndex = remaining.indexOf("\"", 1); value$1 = JSON.parse(remaining.slice(0, endQuoteIndex + 1)); remaining = remaining.slice(endQuoteIndex + 1); } else { const maybeEndIndex = remaining.indexOf(","); const endIndex = maybeEndIndex === -1 ? remaining.length : maybeEndIndex; value$1 = remaining.slice(0, endIndex); remaining = remaining.slice(endIndex); } remaining = remaining.slice(1).trimStart(); if (name === "DNS" && value$1 !== "[::1]" && !(value$1.startsWith("*.") && net.isIPv4(value$1.slice(2)))) hostnames.push(value$1.replace("*", "vite")); } return hostnames; } function arraify(target) { return Array.isArray(target) ? target : [target]; } const multilineCommentsRE = /\/\*[^*]*\*+(?:[^/*][^*]*\*+)*\//g; const singlelineCommentsRE = /\/\/.*/g; const requestQuerySplitRE = /\?(?!.*[/|}])/; const requestQueryMaybeEscapedSplitRE = /\\?\?(?!.*[/|}])/; const blankReplacer = (match) => " ".repeat(match.length); function getHash(text, length = 8) { const h$2 = crypto.hash("sha256", text, "hex").substring(0, length); if (length <= 64) return h$2; return h$2.padEnd(length, "_"); } const requireResolveFromRootWithFallback = (root, id) => { const found$1 = resolvePackageData(id, root) || resolvePackageData(id, _dirname); if (!found$1) { const error$1 = /* @__PURE__ */ new Error(`${JSON.stringify(id)} not found.`); error$1.code = "MODULE_NOT_FOUND"; throw error$1; } return _require$1.resolve(id, { paths: [root, _dirname] }); }; function emptyCssComments(raw) { return raw.replace(multilineCommentsRE, blankReplacer); } function backwardCompatibleWorkerPlugins(plugins$1) { if (Array.isArray(plugins$1)) return plugins$1; if (typeof plugins$1 === "function") return plugins$1(); return []; } function deepClone(value$1) { if (Array.isArray(value$1)) return value$1.map((v) => deepClone(v)); if (isObject(value$1)) { const cloned = {}; for (const key in value$1) cloned[key] = deepClone(value$1[key]); return cloned; } if (typeof value$1 === "function") return value$1; if (value$1 instanceof RegExp) return new RegExp(value$1); if (typeof value$1 === "object" && value$1 != null) throw new Error("Cannot deep clone non-plain object"); return value$1; } function mergeWithDefaultsRecursively(defaults, values) { const merged = defaults; for (const key in values) { const value$1 = values[key]; if (value$1 === void 0) continue; const existing = merged[key]; if (existing === void 0) { merged[key] = value$1; continue; } if (isObject(existing) && isObject(value$1)) { merged[key] = mergeWithDefaultsRecursively(existing, value$1); continue; } merged[key] = value$1; } return merged; } const environmentPathRE = /^environments\.[^.]+$/; function mergeWithDefaults(defaults, values) { const clonedDefaults = deepClone(defaults); return mergeWithDefaultsRecursively(clonedDefaults, values); } function mergeConfigRecursively(defaults, overrides, rootPath) { const merged = { ...defaults }; for (const key in overrides) { const value$1 = overrides[key]; if (value$1 == null) continue; const existing = merged[key]; if (existing == null) { merged[key] = value$1; continue; } if (key === "alias" && (rootPath === "resolve" || rootPath === "")) { merged[key] = mergeAlias(existing, value$1); continue; } else if (key === "assetsInclude" && rootPath === "") { merged[key] = [].concat(existing, value$1); continue; } else if ((key === "noExternal" && (rootPath === "ssr" || rootPath === "resolve") || key === "allowedHosts" && rootPath === "server") && (existing === true || value$1 === true)) { merged[key] = true; continue; } else if (key === "plugins" && rootPath === "worker") { merged[key] = () => [...backwardCompatibleWorkerPlugins(existing), ...backwardCompatibleWorkerPlugins(value$1)]; continue; } else if (key === "server" && rootPath === "server.hmr") { merged[key] = value$1; continue; } if (Array.isArray(existing) || Array.isArray(value$1)) { merged[key] = [...arraify(existing), ...arraify(value$1)]; continue; } if (isObject(existing) && isObject(value$1)) { merged[key] = mergeConfigRecursively(existing, value$1, rootPath && !environmentPathRE.test(rootPath) ? `${rootPath}.${key}` : key); continue; } merged[key] = value$1; } return merged; } function mergeConfig(defaults, overrides, isRoot = true) { if (typeof defaults === "function" || typeof overrides === "function") throw new Error(`Cannot merge config in form of callback`); return mergeConfigRecursively(defaults, overrides, isRoot ? "" : "."); } function mergeAlias(a, b) { if (!a) return b; if (!b) return a; if (isObject(a) && isObject(b)) return { ...a, ...b }; return [...normalizeAlias(b), ...normalizeAlias(a)]; } function normalizeAlias(o$1 = []) { return Array.isArray(o$1) ? o$1.map(normalizeSingleAlias) : Object.keys(o$1).map((find$1) => normalizeSingleAlias({ find: find$1, replacement: o$1[find$1] })); } function normalizeSingleAlias({ find: find$1, replacement, customResolver }) { if (typeof find$1 === "string" && find$1.endsWith("/") && replacement.endsWith("/")) { find$1 = find$1.slice(0, find$1.length - 1); replacement = replacement.slice(0, replacement.length - 1); } const alias$2 = { find: find$1, replacement }; if (customResolver) alias$2.customResolver = customResolver; return alias$2; } /** * Transforms transpiled code result where line numbers aren't altered, * so we can skip sourcemap generation during dev */ function transformStableResult(s$2, id, config$2) { return { code: s$2.toString(), map: config$2.command === "build" && config$2.build.sourcemap ? s$2.generateMap({ hires: "boundary", source: id }) : null }; } async function asyncFlatten(arr) { do arr = (await Promise.all(arr)).flat(Infinity); while (arr.some((v) => v?.then)); return arr; } function stripBomTag(content) { if (content.charCodeAt(0) === 65279) return content.slice(1); return content; } const windowsDrivePathPrefixRE = /^[A-Za-z]:[/\\]/; /** * path.isAbsolute also returns true for drive relative paths on windows (e.g. /something) * this function returns false for them but true for absolute paths (e.g. C:/something) */ const isNonDriveRelativeAbsolutePath = (p$1) => { if (!isWindows) return p$1[0] === "/"; return windowsDrivePathPrefixRE.test(p$1); }; /** * Determine if a file is being requested with the correct case, to ensure * consistent behavior between dev and prod and across operating systems. */ function shouldServeFile(filePath, root) { if (!isCaseInsensitiveFS) return true; return hasCorrectCase(filePath, root); } /** * Note that we can't use realpath here, because we don't want to follow * symlinks. */ function hasCorrectCase(file, assets) { if (file === assets) return true; const parent = path.dirname(file); if (fs.readdirSync(parent).includes(path.basename(file))) return hasCorrectCase(parent, assets); return false; } function joinUrlSegments(a, b) { if (!a || !b) return a || b || ""; if (a.endsWith("/")) a = a.substring(0, a.length - 1); if (b[0] !== "/") b = "/" + b; return a + b; } function removeLeadingSlash(str) { return str[0] === "/" ? str.slice(1) : str; } function stripBase(path$13, base) { if (path$13 === base) return "/"; const devBase = withTrailingSlash(base); return path$13.startsWith(devBase) ? path$13.slice(devBase.length - 1) : path$13; } function arrayEqual(a, b) { if (a === b) return true; if (a.length !== b.length) return false; for (let i$1 = 0; i$1 < a.length; i$1++) if (a[i$1] !== b[i$1]) return false; return true; } function evalValue(rawValue) { const fn = new Function(` var console, exports, global, module, process, require return (\n${rawValue}\n) `); return fn(); } function getNpmPackageName(importPath) { const parts = importPath.split("/"); if (parts[0][0] === "@") { if (!parts[1]) return null; return `${parts[0]}/${parts[1]}`; } else return parts[0]; } function getPkgName(name) { return name[0] === "@" ? name.split("/")[1] : name; } const escapeRegexRE = /[-/\\^$*+?.()|[\]{}]/g; function escapeRegex(str) { return str.replace(escapeRegexRE, "\\$&"); } function getPackageManagerCommand(type = "install") { const packageManager = process.env.npm_config_user_agent?.split(" ")[0].split("/")[0] || "npm"; switch (type) { case "install": return packageManager === "npm" ? "npm install" : `${packageManager} add`; case "uninstall": return packageManager === "npm" ? "npm uninstall" : `${packageManager} remove`; case "update": return packageManager === "yarn" ? "yarn upgrade" : `${packageManager} update`; default: throw new TypeError(`Unknown command type: ${type}`); } } function isDevServer(server) { return "pluginContainer" in server; } function createSerialPromiseQueue() { let previousTask; return { async run(f$1) { const thisTask = f$1(); const depTasks = Promise.all([previousTask, thisTask]); previousTask = depTasks; const [, result] = await depTasks; if (previousTask === depTasks) previousTask = void 0; return result; } }; } function sortObjectKeys(obj) { const sorted = {}; for (const key of Object.keys(obj).sort()) sorted[key] = obj[key]; return sorted; } function displayTime(time) { if (time < 1e3) return `${time}ms`; time = time / 1e3; if (time < 60) return `${time.toFixed(2)}s`; const mins = Math.floor(time / 60); const seconds = Math.round(time % 60); if (seconds === 60) return `${mins + 1}m`; return `${mins}m${seconds < 1 ? "" : ` ${seconds}s`}`; } /** * Encodes the URI path portion (ignores part after ? or #) */ function encodeURIPath(uri) { if (uri.startsWith("data:")) return uri; const filePath = cleanUrl(uri); const postfix = filePath !== uri ? uri.slice(filePath.length) : ""; return encodeURI(filePath) + postfix; } /** * Like `encodeURIPath`, but only replacing `%` as `%25`. This is useful for environments * that can handle un-encoded URIs, where `%` is the only ambiguous character. */ function partialEncodeURIPath(uri) { if (uri.startsWith("data:")) return uri; const filePath = cleanUrl(uri); const postfix = filePath !== uri ? uri.slice(filePath.length) : ""; return filePath.replaceAll("%", "%25") + postfix; } const sigtermCallbacks = /* @__PURE__ */ new Set(); const parentSigtermCallback = async (signal, exitCode) => { await Promise.all([...sigtermCallbacks].map((cb) => cb(signal, exitCode))); }; const setupSIGTERMListener = (callback) => { if (sigtermCallbacks.size === 0) { process.once("SIGTERM", parentSigtermCallback); if (process.env.CI !== "true") process.stdin.on("end", parentSigtermCallback); } sigtermCallbacks.add(callback); }; const teardownSIGTERMListener = (callback) => { sigtermCallbacks.delete(callback); if (sigtermCallbacks.size === 0) { process.off("SIGTERM", parentSigtermCallback); if (process.env.CI !== "true") process.stdin.off("end", parentSigtermCallback); } }; function getServerUrlByHost(resolvedUrls, host) { if (typeof host === "string") { const matchedUrl = [...resolvedUrls?.local ?? [], ...resolvedUrls?.network ?? []].find((url$6) => url$6.includes(host)); if (matchedUrl) return matchedUrl; } return resolvedUrls?.local[0] ?? resolvedUrls?.network[0]; } let lastDateNow = 0; /** * Similar to `Date.now()`, but strictly monotonically increasing. * * This function will never return the same value. * Thus, the value may differ from the actual time. * * related: https://github.com/vitejs/vite/issues/19804 */ function monotonicDateNow() { const now = Date.now(); if (now > lastDateNow) { lastDateNow = now; return lastDateNow; } lastDateNow++; return lastDateNow; } //#endregion //#region src/node/plugin.ts async function resolveEnvironmentPlugins(environment) { const environmentPlugins = []; for (const plugin of environment.getTopLevelConfig().plugins) { if (plugin.applyToEnvironment) { const applied = await plugin.applyToEnvironment(environment); if (!applied) continue; if (applied !== true) { environmentPlugins.push(...(await asyncFlatten(arraify(applied))).filter(Boolean)); continue; } } environmentPlugins.push(plugin); } return environmentPlugins; } /** * @experimental */ function perEnvironmentPlugin(name, applyToEnvironment) { return { name, applyToEnvironment }; } //#endregion //#region ../../node_modules/.pnpm/commondir@1.0.1/node_modules/commondir/index.js var require_commondir = __commonJS({ "../../node_modules/.pnpm/commondir@1.0.1/node_modules/commondir/index.js"(exports, module) { var path$12 = require("path"); module.exports = function(basedir, relfiles) { if (relfiles) var files = relfiles.map(function(r$2) { return path$12.resolve(basedir, r$2); }); else var files = basedir; var res = files.slice(1).reduce(function(ps, file) { if (!file.match(/^([A-Za-z]:)?\/|\\/)) throw new Error("relative path without a basedir"); var xs = file.split(/\/+|\\+/); for (var i$1 = 0; ps[i$1] === xs[i$1] && i$1 < Math.min(ps.length, xs.length); i$1++); return ps.slice(0, i$1); }, files[0].split(/\/+|\\+/)); return res.length > 1 ? res.join("/") : "/"; }; } }); //#endregion //#region ../../node_modules/.pnpm/magic-string@0.30.17/node_modules/magic-string/dist/magic-string.es.mjs var BitSet = class BitSet { constructor(arg) { this.bits = arg instanceof BitSet ? arg.bits.slice() : []; } add(n$2) { this.bits[n$2 >> 5] |= 1 << (n$2 & 31); } has(n$2) { return !!(this.bits[n$2 >> 5] & 1 << (n$2 & 31)); } }; var Chunk = class Chunk { constructor(start, end, content) { this.start = start; this.end = end; this.original = content; this.intro = ""; this.outro = ""; this.content = content; this.storeName = false; this.edited = false; { this.previous = null; this.next = null; } } appendLeft(content) { this.outro += content; } appendRight(content) { this.intro = this.intro + content; } clone() { const chunk = new Chunk(this.start, this.end, this.original); chunk.intro = this.intro; chunk.outro = this.outro; chunk.content = this.content; chunk.storeName = this.storeName; chunk.edited = this.edited; return chunk; } contains(index) { return this.start < index && index < this.end; } eachNext(fn) { let chunk = this; while (chunk) { fn(chunk); chunk = chunk.next; } } eachPrevious(fn) { let chunk = this; while (chunk) { fn(chunk); chunk = chunk.previous; } } edit(content, storeName, contentOnly) { this.content = content; if (!contentOnly) { this.intro = ""; this.outro = ""; } this.storeName = storeName; this.edited = true; return this; } prependLeft(content) { this.outro = content + this.outro; } prependRight(content) { this.intro = content + this.intro; } reset() { this.intro = ""; this.outro = ""; if (this.edited) { this.content = this.original; this.storeName = false; this.edited = false; } } split(index) { const sliceIndex = index - this.start; const originalBefore = this.original.slice(0, sliceIndex); const originalAfter = this.original.slice(sliceIndex); this.original = originalBefore; const newChunk = new Chunk(index, this.end, originalAfter); newChunk.outro = this.outro; this.outro = ""; this.end = index; if (this.edited) { newChunk.edit("", false); this.content = ""; } else this.content = originalBefore; newChunk.next = this.next; if (newChunk.next) newChunk.next.previous = newChunk; newChunk.previous = this; this.next = newChunk; return newChunk; } toString() { return this.intro + this.content + this.outro; } trimEnd(rx) { this.outro = this.outro.replace(rx, ""); if (this.outro.length) return true; const trimmed = this.content.replace(rx, ""); if (trimmed.length) { if (trimmed !== this.content) { this.split(this.start + trimmed.length).edit("", void 0, true); if (this.edited) this.edit(trimmed, this.storeName, true); } return true; } else { this.edit("", void 0, true); this.intro = this.intro.replace(rx, ""); if (this.intro.length) return true; } } trimStart(rx) { this.intro = this.intro.replace(rx, ""); if (this.intro.length) return true; const trimmed = this.content.replace(rx, ""); if (trimmed.length) { if (trimmed !== this.content) { const newChunk = this.split(this.end - trimmed.length); if (this.edited) newChunk.edit(trimmed, this.storeName, true); this.edit("", void 0, true); } return true; } else { this.edit("", void 0, true); this.outro = this.outro.replace(rx, ""); if (this.outro.length) return true; } } }; function getBtoa() { if (typeof globalThis !== "undefined" && typeof globalThis.btoa === "function") return (str) => globalThis.btoa(unescape(encodeURIComponent(str))); else if (typeof Buffer === "function") return (str) => Buffer.from(str, "utf-8").toString("base64"); else return () => { throw new Error("Unsupported environment: `window.btoa` or `Buffer` should be supported."); }; } const btoa$1 = /* @__PURE__ */ getBtoa(); var SourceMap = class { constructor(properties) { this.version = 3; this.file = properties.file; this.sources = properties.sources; this.sourcesContent = properties.sourcesContent; this.names = properties.names; this.mappings = encode$1(properties.mappings); if (typeof properties.x_google_ignoreList !== "undefined") this.x_google_ignoreList = properties.x_google_ignoreList; if (typeof properties.debugId !== "undefined") this.debugId = properties.debugId; } toString() { return JSON.stringify(this); } toUrl() { return "data:application/json;charset=utf-8;base64," + btoa$1(this.toString()); } }; function guessIndent(code) { const lines = code.split("\n"); const tabbed = lines.filter((line) => /^\t+/.test(line)); const spaced = lines.filter((line) => /^ {2,}/.test(line)); if (tabbed.length === 0 && spaced.length === 0) return null; if (tabbed.length >= spaced.length) return " "; const min$1 = spaced.reduce((previous, current) => { const numSpaces = /^ +/.exec(current)[0].length; return Math.min(numSpaces, previous); }, Infinity); return new Array(min$1 + 1).join(" "); } function getRelativePath(from, to) { const fromParts = from.split(/[/\\]/); const toParts = to.split(/[/\\]/); fromParts.pop(); while (fromParts[0] === toParts[0]) { fromParts.shift(); toParts.shift(); } if (fromParts.length) { let i$1 = fromParts.length; while (i$1--) fromParts[i$1] = ".."; } return fromParts.concat(toParts).join("/"); } const toString$1 = Object.prototype.toString; function isObject$2(thing) { return toString$1.call(thing) === "[object Object]"; } function getLocator(source) { const originalLines = source.split("\n"); const lineOffsets = []; for (let i$1 = 0, pos = 0; i$1 < originalLines.length; i$1++) { lineOffsets.push(pos); pos += originalLines[i$1].length + 1; } return function locate(index) { let i$1 = 0; let j = lineOffsets.length; while (i$1 < j) { const m$2 = i$1 + j >> 1; if (index < lineOffsets[m$2]) j = m$2; else i$1 = m$2 + 1; } const line = i$1 - 1; const column = index - lineOffsets[line]; return { line, column }; }; } const wordRegex = /\w/; var Mappings = class { constructor(hires) { this.hires = hires; this.generatedCodeLine = 0; this.generatedCodeColumn = 0; this.raw = []; this.rawSegments = this.raw[this.generatedCodeLine] = []; this.pending = null; } addEdit(sourceIndex, content, loc, nameIndex) { if (content.length) { const contentLengthMinusOne = content.length - 1; let contentLineEnd = content.indexOf("\n", 0); let previousContentLineEnd = -1; while (contentLineEnd >= 0 && contentLengthMinusOne > contentLineEnd) { const segment$1 = [ this.generatedCodeColumn, sourceIndex, loc.line, loc.column ]; if (nameIndex >= 0) segment$1.push(nameIndex); this.rawSegments.push(segment$1); this.generatedCodeLine += 1; this.raw[this.generatedCodeLine] = this.rawSegments = []; this.generatedCodeColumn = 0; previousContentLineEnd = contentLineEnd; contentLineEnd = content.indexOf("\n", contentLineEnd + 1); } const segment = [ this.generatedCodeColumn, sourceIndex, loc.line, loc.column ]; if (nameIndex >= 0) segment.push(nameIndex); this.rawSegments.push(segment); this.advance(content.slice(previousContentLineEnd + 1)); } else if (this.pending) { this.rawSegments.push(this.pending); this.advance(content); } this.pending = null; } addUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) { let originalCharIndex = chunk.start; let first$2 = true; let charInHiresBoundary = false; while (originalCharIndex < chunk.end) { if (original[originalCharIndex] === "\n") { loc.line += 1; loc.column = 0; this.generatedCodeLine += 1; this.raw[this.generatedCodeLine] = this.rawSegments = []; this.generatedCodeColumn = 0; first$2 = true; charInHiresBoundary = false; } else { if (this.hires || first$2 || sourcemapLocations.has(originalCharIndex)) { const segment = [ this.generatedCodeColumn, sourceIndex, loc.line, loc.column ]; if (this.hires === "boundary") if (wordRegex.test(original[originalCharIndex])) { if (!charInHiresBoundary) { this.rawSegments.push(segment); charInHiresBoundary = true; } } else { this.rawSegments.push(segment); charInHiresBoundary = false; } else this.rawSegments.push(segment); } loc.column += 1; this.generatedCodeColumn += 1; first$2 = false; } originalCharIndex += 1; } this.pending = null; } advance(str) { if (!str) return; const lines = str.split("\n"); if (lines.length > 1) { for (let i$1 = 0; i$1 < lines.length - 1; i$1++) { this.generatedCodeLine++; this.raw[this.generatedCodeLine] = this.rawSegments = []; } this.generatedCodeColumn = 0; } this.generatedCodeColumn += lines[lines.length - 1].length; } }; const n$1 = "\n"; const warned = { insertLeft: false, insertRight: false, storeName: false }; var MagicString = class MagicString { constructor(string, options$1 = {}) { const chunk = new Chunk(0, string.length, string); Object.defineProperties(this, { original: { writable: true, value: string }, outro: { writable: true, value: "" }, intro: { writable: true, value: "" }, firstChunk: { writable: true, value: chunk }, lastChunk: { writable: true, value: chunk }, lastSearchedChunk: { writable: true, value: chunk }, byStart: { writable: true, value: {} }, byEnd: { writable: true, value: {} }, filename: { writable: true, value: options$1.filename }, indentExclusionRanges: { writable: true, value: options$1.indentExclusionRanges }, sourcemapLocations: { writable: true, value: new BitSet() }, storedNames: { writable: true, value: {} }, indentStr: { writable: true, value: void 0 }, ignoreList: { writable: true, value: options$1.ignoreList }, offset: { writable: true, value: options$1.offset || 0 } }); this.byStart[0] = chunk; this.byEnd[string.length] = chunk; } addSourcemapLocation(char) { this.sourcemapLocations.add(char); } append(content) { if (typeof content !== "string") throw new TypeError("outro content must be a string"); this.outro += content; return this; } appendLeft(index, content) { index = index + this.offset; if (typeof content !== "string") throw new TypeError("inserted content must be a string"); this._split(index); const chunk = this.byEnd[index]; if (chunk) chunk.appendLeft(content); else this.intro += content; return this; } appendRight(index, content) { index = index + this.offset; if (typeof content !== "string") throw new TypeError("inserted content must be a string"); this._split(index); const chunk = this.byStart[index]; if (chunk) chunk.appendRight(content); else this.outro += content; return this; } clone() { const cloned = new MagicString(this.original, { filename: this.filename, offset: this.offset }); let originalChunk = this.firstChunk; let clonedChunk = cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone(); while (originalChunk) { cloned.byStart[clonedChunk.start] = clonedChunk; cloned.byEnd[clonedChunk.end] = clonedChunk; const nextOriginalChunk = originalChunk.next; const nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone(); if (nextClonedChunk) { clonedChunk.next = nextClonedChunk; nextClonedChunk.previous = clonedChunk; clonedChunk = nextClonedChunk; } originalChunk = nextOriginalChunk; } cloned.lastChunk = clonedChunk; if (this.indentExclusionRanges) cloned.indentExclusionRanges = this.indentExclusionRanges.slice(); cloned.sourcemapLocations = new BitSet(this.sourcemapLocations); cloned.intro = this.intro; cloned.outro = this.outro; return cloned; } generateDecodedMap(options$1) { options$1 = options$1 || {}; const sourceIndex = 0; const names = Object.keys(this.storedNames); const mappings = new Mappings(options$1.hires); const locate = getLocator(this.original); if (this.intro) mappings.advance(this.intro); this.firstChunk.eachNext((chunk) => { const loc = locate(chunk.start); if (chunk.intro.length) mappings.advance(chunk.intro); if (chunk.edited) mappings.addEdit(sourceIndex, chunk.content, loc, chunk.storeName ? names.indexOf(chunk.original) : -1); else mappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations); if (chunk.outro.length) mappings.advance(chunk.outro); }); return { file: options$1.file ? options$1.file.split(/[/\\]/).pop() : void 0, sources: [options$1.source ? getRelativePath(options$1.file || "", options$1.source) : options$1.file || ""], sourcesContent: options$1.includeContent ? [this.original] : void 0, names, mappings: mappings.raw, x_google_ignoreList: this.ignoreList ? [sourceIndex] : void 0 }; } generateMap(options$1) { return new SourceMap(this.generateDecodedMap(options$1)); } _ensureindentStr() { if (this.indentStr === void 0) this.indentStr = guessIndent(this.original); } _getRawIndentString() { this._ensureindentStr(); return this.indentStr; } getIndentString() { this._ensureindentStr(); return this.indentStr === null ? " " : this.indentStr; } indent(indentStr, options$1) { const pattern = /^[^\r\n]/gm; if (isObject$2(indentStr)) { options$1 = indentStr; indentStr = void 0; } if (indentStr === void 0) { this._ensureindentStr(); indentStr = this.indentStr || " "; } if (indentStr === "") return this; options$1 = options$1 || {}; const isExcluded = {}; if (options$1.exclude) { const exclusions = typeof options$1.exclude[0] === "number" ? [options$1.exclude] : options$1.exclude; exclusions.forEach((exclusion) => { for (let i$1 = exclusion[0]; i$1 < exclusion[1]; i$1 += 1) isExcluded[i$1] = true; }); } let shouldIndentNextCharacter = options$1.indentStart !== false; const replacer = (match) => { if (shouldIndentNextCharacter) return `${indentStr}${match}`; shouldIndentNextCharacter = true; return match; }; this.intro = this.intro.replace(pattern, replacer); let charIndex = 0; let chunk = this.firstChunk; while (chunk) { const end = chunk.end; if (chunk.edited) { if (!isExcluded[charIndex]) { chunk.content = chunk.content.replace(pattern, replacer); if (chunk.content.length) shouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === "\n"; } } else { charIndex = chunk.start; while (charIndex < end) { if (!isExcluded[charIndex]) { const char = this.original[charIndex]; if (char === "\n") shouldIndentNextCharacter = true; else if (char !== "\r" && shouldIndentNextCharacter) { shouldIndentNextCharacter = false; if (charIndex === chunk.start) chunk.prependRight(indentStr); else { this._splitChunk(chunk, charIndex); chunk = chunk.next; chunk.prependRight(indentStr); } } } charIndex += 1; } } charIndex = chunk.end; chunk = chunk.next; } this.outro = this.outro.replace(pattern, replacer); return this; } insert() { throw new Error("magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)"); } insertLeft(index, content) { if (!warned.insertLeft) { console.warn("magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead"); warned.insertLeft = true; } return this.appendLeft(index, content); } insertRight(index, content) { if (!warned.insertRight) { console.warn("magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead"); warned.insertRight = true; } return this.prependRight(index, content); } move(start, end, index) { start = start + this.offset; end = end + this.offset; index = index + this.offset; if (index >= start && index <= end) throw new Error("Cannot move a selection inside itself"); this._split(start); this._split(end); this._split(index); const first$2 = this.byStart[start]; const last = this.byEnd[end]; const oldLeft = first$2.previous; const oldRight = last.next; const newRight = this.byStart[index]; if (!newRight && last === this.lastChunk) return this; const newLeft = newRight ? newRight.previous : this.lastChunk; if (oldLeft) oldLeft.next = oldRight; if (oldRight) oldRight.previous = oldLeft; if (newLeft) newLeft.next = first$2; if (newRight) newRight.previous = last; if (!first$2.previous) this.firstChunk = last.next; if (!last.next) { this.lastChunk = first$2.previous; this.lastChunk.next = null; } first$2.previous = newLeft; last.next = newRight || null; if (!newLeft) this.firstChunk = first$2; if (!newRight) this.lastChunk = last; return this; } overwrite(start, end, content, options$1) { options$1 = options$1 || {}; return this.update(start, end, content, { ...options$1, overwrite: !options$1.contentOnly }); } update(start, end, content, options$1) { start = start + this.offset; end = end + this.offset; if (typeof content !== "string") throw new TypeError("replacement content must be a string"); if (this.original.length !== 0) { while (start < 0) start += this.original.length; while (end < 0) end += this.original.length; } if (end > this.original.length) throw new Error("end is out of bounds"); if (start === end) throw new Error("Cannot overwrite a zero-length range – use appendLeft or prependRight instead"); this._split(start); this._split(end); if (options$1 === true) { if (!warned.storeName) { console.warn("The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string"); warned.storeName = true; } options$1 = { storeName: true }; } const storeName = options$1 !== void 0 ? options$1.storeName : false; const overwrite = options$1 !== void 0 ? options$1.overwrite : false; if (storeName) { const original = this.original.slice(start, end); Object.defineProperty(this.storedNames, original, { writable: true, value: true, enumerable: true }); } const first$2 = this.byStart[start]; const last = this.byEnd[end]; if (first$2) { let chunk = first$2; while (chunk !== last) { if (chunk.next !== this.byStart[chunk.end]) throw new Error("Cannot overwrite across a split point"); chunk = chunk.next; chunk.edit("", false); } first$2.edit(content, storeName, !overwrite); } else { const newChunk = new Chunk(start, end, "").edit(content, storeName); last.next = newChunk; newChunk.previous = last; } return this; } prepend(content) { if (typeof content !== "string") throw new TypeError("outro content must be a string"); this.intro = content + this.intro; return this; } prependLeft(index, content) { index = index + this.offset; if (typeof content !== "string") throw new TypeError("inserted content must be a string"); this._split(index); const chunk = this.byEnd[index]; if (chunk) chunk.prependLeft(content); else this.intro = content + this.intro; return this; } prependRight(index, content) { index = index + this.offset; if (typeof content !== "string") throw new TypeError("inserted content must be a string"); this._split(index); const chunk = this.byStart[index]; if (chunk) chunk.prependRight(content); else this.outro = content + this.outro; return this; } remove(start, end) { start = start + this.offset; end = end + this.offset; if (this.original.length !== 0) { while (start < 0) start += this.original.length; while (end < 0) end += this.original.length; } if (start === end) return this; if (start < 0 || end > this.original.length) throw new Error("Character is out of bounds"); if (start > end) throw new Error("end must be greater than start"); this._split(start); this._split(end); let chunk = this.byStart[start]; while (chunk) { chunk.intro = ""; chunk.outro = ""; chunk.edit(""); chunk = end > chunk.end ? this.byStart[chunk.end] : null; } return this; } reset(start, end) { start = start + this.offset; end = end + this.offset; if (this.original.length !== 0) { while (start < 0) start += this.original.length; while (end < 0) end += this.original.length; } if (start === end) return this; if (start < 0 || end > this.original.length) throw new Error("Character is out of bounds"); if (start > end) throw new Error("end must be greater than start"); this._split(start); this._split(end); let chunk = this.byStart[start]; while (chunk) { chunk.reset(); chunk = end > chunk.end ? this.byStart[chunk.end] : null; } return this; } lastChar() { if (this.outro.length) return this.outro[this.outro.length - 1]; let chunk = this.lastChunk; do { if (chunk.outro.length) return chunk.outro[chunk.outro.length - 1]; if (chunk.content.length) return chunk.content[chunk.content.length - 1]; if (chunk.intro.length) return chunk.intro[chunk.intro.length - 1]; } while (chunk = chunk.previous); if (this.intro.length) return this.intro[this.intro.length - 1]; return ""; } lastLine() { let lineIndex = this.outro.lastIndexOf(n$1); if (lineIndex !== -1) return this.outro.substr(lineIndex + 1); let lineStr = this.outro; let chunk = this.lastChunk; do { if (chunk.outro.length > 0) { lineIndex = chunk.outro.lastIndexOf(n$1); if (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr; lineStr = chunk.outro + lineStr; } if (chunk.content.length > 0) { lineIndex = chunk.content.lastIndexOf(n$1); if (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr; lineStr = chunk.content + lineStr; } if (chunk.intro.length > 0) { lineIndex = chunk.intro.lastIndexOf(n$1); if (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr; lineStr = chunk.intro + lineStr; } } while (chunk = chunk.previous); lineIndex = this.intro.lastIndexOf(n$1); if (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr; return this.intro + lineStr; } slice(start = 0, end = this.original.length - this.offset) { start = start + this.offset; end = end + this.offset; if (this.original.length !== 0) { while (start < 0) start += this.original.length; while (end < 0) end += this.original.length; } let result = ""; let chunk = this.firstChunk; while (chunk && (chunk.start > start || chunk.end <= start)) { if (chunk.start < end && chunk.end >= end) return result; chunk = chunk.next; } if (chunk && chunk.edited && chunk.start !== start) throw new Error(`Cannot use replaced character ${start} as slice start anchor.`); const startChunk = chunk; while (chunk) { if (chunk.intro && (startChunk !== chunk || chunk.start === start)) result += chunk.intro; const containsEnd = chunk.start < end && chunk.end >= end; if (containsEnd && chunk.edited && chunk.end !== end) throw new Error(`Cannot use replaced character ${end} as slice end anchor.`); const sliceStart = startChunk === chunk ? start - chunk.start : 0; const sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length; result += chunk.content.slice(sliceStart, sliceEnd); if (chunk.outro && (!containsEnd || chunk.end === end)) result += chunk.outro; if (containsEnd) break; chunk = chunk.next; } return result; } snip(start, end) { const clone$1 = this.clone(); clone$1.remove(0, start); clone$1.remove(end, clone$1.original.length); return clone$1; } _split(index) { if (this.byStart[index] || this.byEnd[index]) return; let chunk = this.lastSearchedChunk; const searchForward = index > chunk.end; while (chunk) { if (chunk.contains(index)) return this._splitChunk(chunk, index); chunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start]; } } _splitChunk(chunk, index) { if (chunk.edited && chunk.content.length) { const loc = getLocator(this.original)(index); throw new Error(`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – "${chunk.original}")`); } const newChunk = chunk.split(index); this.byEnd[index] = chunk; this.byStart[index] = newChunk; this.byEnd[newChunk.end] = newChunk; if (chunk === this.lastChunk) this.lastChunk = newChunk; this.lastSearchedChunk = chunk; return true; } toString() { let str = this.intro; let chunk = this.firstChunk; while (chunk) { str += chunk.toString(); chunk = chunk.next; } return str + this.outro; } isEmpty() { let chunk = this.firstChunk; do if (chunk.intro.length && chunk.intro.trim() || chunk.content.length && chunk.content.trim() || chunk.outro.length && chunk.outro.trim()) return false; while (chunk = chunk.next); return true; } length() { let chunk = this.firstChunk; let length = 0; do length += chunk.intro.length + chunk.content.length + chunk.outro.length; while (chunk = chunk.next); return length; } trimLines() { return this.trim("[\\r\\n]"); } trim(charType) { return this.trimStart(charType).trimEnd(charType); } trimEndAborted(charType) { const rx = /* @__PURE__ */ new RegExp((charType || "\\s") + "+$"); this.outro = this.outro.replace(rx, ""); if (this.outro.length) return true; let chunk = this.lastChunk; do { const end = chunk.end; const aborted = chunk.trimEnd(rx); if (chunk.end !== end) { if (this.lastChunk === chunk) this.lastChunk = chunk.next; this.byEnd[chunk.end] = chunk; this.byStart[chunk.next.start] = chunk.next; this.byEnd[chunk.next.end] = chunk.next; } if (aborted) return true; chunk = chunk.previous; } while (chunk); return false; } trimEnd(charType) { this.trimEndAborted(charType); return this; } trimStartAborted(charType) { const rx = /* @__PURE__ */ new RegExp("^" + (charType || "\\s") + "+"); this.intro = this.intro.replace(rx, ""); if (this.intro.length) return true; let chunk = this.firstChunk; do { const end = chunk.end; const aborted = chunk.trimStart(rx); if (chunk.end !== end) { if (chunk === this.lastChunk) this.lastChunk = chunk.next; this.byEnd[chunk.end] = chunk; this.byStart[chunk.next.start] = chunk.next; this.byEnd[chunk.next.end] = chunk.next; } if (aborted) return true; chunk = chunk.next; } while (chunk); return false; } trimStart(charType) { this.trimStartAborted(charType); return this; } hasChanged() { return this.original !== this.toString(); } _replaceRegexp(searchValue, replacement) { function getReplacement(match, str) { if (typeof replacement === "string") return replacement.replace(/\$(\$|&|\d+)/g, (_, i$1) => { if (i$1 === "$") return "$"; if (i$1 === "&") return match[0]; const num = +i$1; if (num < match.length) return match[+i$1]; return `$${i$1}`; }); else return replacement(...match, match.index, str, match.groups); } function matchAll$1(re, str) { let match; const matches$2 = []; while (match = re.exec(str)) matches$2.push(match); return matches$2; } if (searchValue.global) { const matches$2 = matchAll$1(searchValue, this.original); matches$2.forEach((match) => { if (match.index != null) { const replacement$1 = getReplacement(match, this.original); if (replacement$1 !== match[0]) this.overwrite(match.index, match.index + match[0].length, replacement$1); } }); } else { const match = this.original.match(searchValue); if (match && match.index != null) { const replacement$1 = getReplacement(match, this.original); if (replacement$1 !== match[0]) this.overwrite(match.index, match.index + match[0].length, replacement$1); } } return this; } _replaceString(string, replacement) { const { original } = this; const index = original.indexOf(string); if (index !== -1) this.overwrite(index, index + string.length, replacement); return this; } replace(searchValue, replacement) { if (typeof searchValue === "string") return this._replaceString(searchValue, replacement); return this._replaceRegexp(searchValue, replacement); } _replaceAllString(string, replacement) { const { original } = this; const stringLength = string.length; for (let index = original.indexOf(string); index !== -1; index = original.indexOf(string, index + stringLength)) { const previous = original.slice(index, index + stringLength); if (previous !== replacement) this.overwrite(index, index + stringLength, replacement); } return this; } replaceAll(searchValue, replacement) { if (typeof searchValue === "string") return this._replaceAllString(searchValue, replacement); if (!searchValue.global) throw new TypeError("MagicString.prototype.replaceAll called with a non-global RegExp argument"); return this._replaceRegexp(searchValue, replacement); } }; //#endregion //#region ../../node_modules/.pnpm/is-reference@1.2.1/node_modules/is-reference/dist/is-reference.js var require_is_reference = __commonJS({ "../../node_modules/.pnpm/is-reference@1.2.1/node_modules/is-reference/dist/is-reference.js"(exports, module) { (function(global$1, factory) { typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global$1 = global$1 || self, global$1.isReference = factory()); })(void 0, function() { "use strict"; function isReference$1(node, parent) { if (node.type === "MemberExpression") return !node.computed && isReference$1(node.object, node); if (node.type === "Identifier") { if (!parent) return true; switch (parent.type) { case "MemberExpression": return parent.computed || node === parent.object; case "MethodDefinition": return parent.computed; case "FieldDefinition": return parent.computed || node === parent.value; case "Property": return parent.computed || node === parent.value; case "ExportSpecifier": case "ImportSpecifier": return node === parent.local; case "LabeledStatement": case "BreakStatement": case "ContinueStatement": return false; default: return true; } } return false; } return isReference$1; }); } }); //#endregion //#region ../../node_modules/.pnpm/@rollup+plugin-commonjs@28.0.6_rollup@4.40.1/node_modules/@rollup/plugin-commonjs/dist/es/index.js var import_commondir = __toESM(require_commondir(), 1); var import_is_reference = __toESM(require_is_reference(), 1); var version$1 = "28.0.6"; var peerDependencies = { rollup: "^2.68.0||^3.0.0||^4.0.0" }; function tryParse(parse$17, code, id) { try { return parse$17(code, { allowReturnOutsideFunction: true }); } catch (err$2) { err$2.message += ` in ${id}`; throw err$2; } } const firstpassGlobal = /\b(?:require|module|exports|global)\b/; const firstpassNoGlobal = /\b(?:require|module|exports)\b/; function hasCjsKeywords(code, ignoreGlobal) { const firstpass = ignoreGlobal ? firstpassNoGlobal : firstpassGlobal; return firstpass.test(code); } function analyzeTopLevelStatements(parse$17, code, id) { const ast = tryParse(parse$17, code, id); let isEsModule = false; let hasDefaultExport = false; let hasNamedExports = false; for (const node of ast.body) switch (node.type) { case "ExportDefaultDeclaration": isEsModule = true; hasDefaultExport = true; break; case "ExportNamedDeclaration": isEsModule = true; if (node.declaration) hasNamedExports = true; else for (const specifier of node.specifiers) if (specifier.exported.name === "default") hasDefaultExport = true; else hasNamedExports = true; break; case "ExportAllDeclaration": isEsModule = true; if (node.exported && node.exported.name === "default") hasDefaultExport = true; else hasNamedExports = true; break; case "ImportDeclaration": isEsModule = true; break; } return { isEsModule, hasDefaultExport, hasNamedExports, ast }; } function deconflict(scopes, globals, identifier) { let i$1 = 1; let deconflicted = makeLegalIdentifier(identifier); const hasConflicts = () => scopes.some((scope) => scope.contains(deconflicted)) || globals.has(deconflicted); while (hasConflicts()) { deconflicted = makeLegalIdentifier(`${identifier}_${i$1}`); i$1 += 1; } for (const scope of scopes) scope.declarations[deconflicted] = true; return deconflicted; } function getName(id) { const name = makeLegalIdentifier(basename$1(id, extname$1(id))); if (name !== "index") return name; return makeLegalIdentifier(basename$1(dirname$1(id))); } function normalizePathSlashes(path$13) { return path$13.replace(/\\/g, "/"); } const getVirtualPathForDynamicRequirePath = (path$13, commonDir) => `/${normalizePathSlashes(relative$1(commonDir, path$13))}`; function capitalize(name) { return name[0].toUpperCase() + name.slice(1); } function getStrictRequiresFilter({ strictRequires }) { switch (strictRequires) { case void 0: case true: return { strictRequiresFilter: () => true, detectCyclesAndConditional: false }; case "auto": case "debug": case null: return { strictRequiresFilter: () => false, detectCyclesAndConditional: true }; case false: return { strictRequiresFilter: () => false, detectCyclesAndConditional: false }; default: if (typeof strictRequires === "string" || Array.isArray(strictRequires)) return { strictRequiresFilter: createFilter$2(strictRequires), detectCyclesAndConditional: false }; throw new Error("Unexpected value for \"strictRequires\" option."); } } function getPackageEntryPoint(dirPath) { let entryPoint = "index.js"; try { if (existsSync$1(join$1(dirPath, "package.json"))) entryPoint = JSON.parse(readFileSync$1(join$1(dirPath, "package.json"), { encoding: "utf8" })).main || entryPoint; } catch (ignored) {} return entryPoint; } function isDirectory$1(path$13) { try { if (statSync(path$13).isDirectory()) return true; } catch (ignored) {} return false; } function getDynamicRequireModules(patterns, dynamicRequireRoot) { const dynamicRequireModules = /* @__PURE__ */ new Map(); const dirNames = /* @__PURE__ */ new Set(); for (const pattern of !patterns || Array.isArray(patterns) ? patterns || [] : [patterns]) { const isNegated = pattern.startsWith("!"); const modifyMap = (targetPath, resolvedPath) => isNegated ? dynamicRequireModules.delete(targetPath) : dynamicRequireModules.set(targetPath, resolvedPath); for (const path$13 of new fdir().withBasePath().withDirs().glob(isNegated ? pattern.substr(1) : pattern).crawl(relative$1(".", dynamicRequireRoot)).sync().sort((a, b) => a.localeCompare(b, "en"))) { const resolvedPath = resolve$1(path$13); const requirePath = normalizePathSlashes(resolvedPath); if (isDirectory$1(resolvedPath)) { dirNames.add(resolvedPath); const modulePath = resolve$1(join$1(resolvedPath, getPackageEntryPoint(path$13))); modifyMap(requirePath, modulePath); modifyMap(normalizePathSlashes(modulePath), modulePath); } else { dirNames.add(dirname$1(resolvedPath)); modifyMap(requirePath, resolvedPath); } } } return { commonDir: dirNames.size ? (0, import_commondir.default)([...dirNames, dynamicRequireRoot]) : null, dynamicRequireModules }; } const FAILED_REQUIRE_ERROR = `throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');`; const COMMONJS_REQUIRE_EXPORT = "commonjsRequire"; const CREATE_COMMONJS_REQUIRE_EXPORT = "createCommonjsRequire"; function getDynamicModuleRegistry(isDynamicRequireModulesEnabled, dynamicRequireModules, commonDir, ignoreDynamicRequires) { if (!isDynamicRequireModulesEnabled) return `export function ${COMMONJS_REQUIRE_EXPORT}(path) { ${FAILED_REQUIRE_ERROR} }`; const dynamicModuleImports = [...dynamicRequireModules.values()].map((id, index) => `import ${id.endsWith(".json") ? `json${index}` : `{ __require as require${index} }`} from ${JSON.stringify(id)};`).join("\n"); const dynamicModuleProps = [...dynamicRequireModules.keys()].map((id, index) => `\t\t${JSON.stringify(getVirtualPathForDynamicRequirePath(id, commonDir))}: ${id.endsWith(".json") ? `function () { return json${index}; }` : `require${index}`}`).join(",\n"); return `${dynamicModuleImports} var dynamicModules; function getDynamicModules() { return dynamicModules || (dynamicModules = { ${dynamicModuleProps} }); } export function ${CREATE_COMMONJS_REQUIRE_EXPORT}(originalModuleDir) { function handleRequire(path) { var resolvedPath = commonjsResolve(path, originalModuleDir); if (resolvedPath !== null) { return getDynamicModules()[resolvedPath](); } ${ignoreDynamicRequires ? "return require(path);" : FAILED_REQUIRE_ERROR} } handleRequire.resolve = function (path) { var resolvedPath = commonjsResolve(path, originalModuleDir); if (resolvedPath !== null) { return resolvedPath; } return require.resolve(path); } return handleRequire; } function commonjsResolve (path, originalModuleDir) { var shouldTryNodeModules = isPossibleNodeModulesPath(path); path = normalize(path); var relPath; if (path[0] === '/') { originalModuleDir = ''; } var modules = getDynamicModules(); var checkedExtensions = ['', '.js', '.json']; while (true) { if (!shouldTryNodeModules) { relPath = normalize(originalModuleDir + '/' + path); } else { relPath = normalize(originalModuleDir + '/node_modules/' + path); } if (relPath.endsWith('/..')) { break; // Travelled too far up, avoid infinite loop } for (var extensionIndex = 0; extensionIndex < checkedExtensions.length; extensionIndex++) { var resolvedPath = relPath + checkedExtensions[extensionIndex]; if (modules[resolvedPath]) { return resolvedPath; } } if (!shouldTryNodeModules) break; var nextDir = normalize(originalModuleDir + '/..'); if (nextDir === originalModuleDir) break; originalModuleDir = nextDir; } return null; } function isPossibleNodeModulesPath (modulePath) { var c0 = modulePath[0]; if (c0 === '/' || c0 === '\\\\') return false; var c1 = modulePath[1], c2 = modulePath[2]; if ((c0 === '.' && (!c1 || c1 === '/' || c1 === '\\\\')) || (c0 === '.' && c1 === '.' && (!c2 || c2 === '/' || c2 === '\\\\'))) return false; if (c1 === ':' && (c2 === '/' || c2 === '\\\\')) return false; return true; } function normalize (path) { path = path.replace(/\\\\/g, '/'); var parts = path.split('/'); var slashed = parts[0] === ''; for (var i = 1; i < parts.length; i++) { if (parts[i] === '.' || parts[i] === '') { parts.splice(i--, 1); } } for (var i = 1; i < parts.length; i++) { if (parts[i] !== '..') continue; if (i > 0 && parts[i - 1] !== '..' && parts[i - 1] !== '.') { parts.splice(--i, 2); i--; } } path = parts.join('/'); if (slashed && path[0] !== '/') path = '/' + path; else if (path.length === 0) path = '.'; return path; }`; } const isWrappedId = (id, suffix) => id.endsWith(suffix); const wrapId$1 = (id, suffix) => `\0${id}${suffix}`; const unwrapId$1 = (wrappedId, suffix) => wrappedId.slice(1, -suffix.length); const PROXY_SUFFIX = "?commonjs-proxy"; const WRAPPED_SUFFIX = "?commonjs-wrapped"; const EXTERNAL_SUFFIX = "?commonjs-external"; const EXPORTS_SUFFIX = "?commonjs-exports"; const MODULE_SUFFIX = "?commonjs-module"; const ENTRY_SUFFIX = "?commonjs-entry"; const ES_IMPORT_SUFFIX = "?commonjs-es-import"; const DYNAMIC_MODULES_ID = "\0commonjs-dynamic-modules"; const HELPERS_ID = "\0commonjsHelpers.js"; const IS_WRAPPED_COMMONJS = "withRequireFunction"; const HELPERS = ` export var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; export function getDefaultExportFromCjs (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } export function getDefaultExportFromNamespaceIfPresent (n) { return n && Object.prototype.hasOwnProperty.call(n, 'default') ? n['default'] : n; } export function getDefaultExportFromNamespaceIfNotNamed (n) { return n && Object.prototype.hasOwnProperty.call(n, 'default') && Object.keys(n).length === 1 ? n['default'] : n; } export function getAugmentedNamespace(n) { if (Object.prototype.hasOwnProperty.call(n, '__esModule')) return n; var f = n.default; if (typeof f == "function") { var a = function a () { var isInstance = false; try { isInstance = this instanceof a; } catch {} if (isInstance) { return Reflect.construct(f, arguments, this.constructor); } return f.apply(this, arguments); }; a.prototype = f.prototype; } else a = {}; Object.defineProperty(a, '__esModule', {value: true}); Object.keys(n).forEach(function (k) { var d = Object.getOwnPropertyDescriptor(n, k); Object.defineProperty(a, k, d.get ? d : { enumerable: true, get: function () { return n[k]; } }); }); return a; } `; function getHelpersModule() { return HELPERS; } function getUnknownRequireProxy(id, requireReturnsDefault) { if (requireReturnsDefault === true || id.endsWith(".json")) return `export { default } from ${JSON.stringify(id)};`; const name = getName(id); const exported = requireReturnsDefault === "auto" ? `import { getDefaultExportFromNamespaceIfNotNamed } from "${HELPERS_ID}"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfNotNamed(${name});` : requireReturnsDefault === "preferred" ? `import { getDefaultExportFromNamespaceIfPresent } from "${HELPERS_ID}"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfPresent(${name});` : !requireReturnsDefault ? `import { getAugmentedNamespace } from "${HELPERS_ID}"; export default /*@__PURE__*/getAugmentedNamespace(${name});` : `export default ${name};`; return `import * as ${name} from ${JSON.stringify(id)}; ${exported}`; } async function getStaticRequireProxy(id, requireReturnsDefault, loadModule) { const name = getName(id); const { meta: { commonjs: commonjsMeta } } = await loadModule({ id }); if (!commonjsMeta) return getUnknownRequireProxy(id, requireReturnsDefault); if (commonjsMeta.isCommonJS) return `export { __moduleExports as default } from ${JSON.stringify(id)};`; if (!requireReturnsDefault) return `import { getAugmentedNamespace } from "${HELPERS_ID}"; import * as ${name} from ${JSON.stringify(id)}; export default /*@__PURE__*/getAugmentedNamespace(${name});`; if (requireReturnsDefault !== true && (requireReturnsDefault === "namespace" || !commonjsMeta.hasDefaultExport || requireReturnsDefault === "auto" && commonjsMeta.hasNamedExports)) return `import * as ${name} from ${JSON.stringify(id)}; export default ${name};`; return `export { default } from ${JSON.stringify(id)};`; } function getEntryProxy(id, defaultIsModuleExports, getModuleInfo, shebang) { const { meta: { commonjs: commonjsMeta }, hasDefaultExport } = getModuleInfo(id); if (!commonjsMeta || commonjsMeta.isCommonJS !== IS_WRAPPED_COMMONJS) { const stringifiedId = JSON.stringify(id); let code = `export * from ${stringifiedId};`; if (hasDefaultExport) code += `export { default } from ${stringifiedId};`; return shebang + code; } const result = getEsImportProxy(id, defaultIsModuleExports, true); return { ...result, code: shebang + result.code }; } function getEsImportProxy(id, defaultIsModuleExports, moduleSideEffects) { const name = getName(id); const exportsName = `${name}Exports`; const requireModule = `require${capitalize(name)}`; let code = `import { getDefaultExportFromCjs } from "${HELPERS_ID}";\nimport { __require as ${requireModule} } from ${JSON.stringify(id)};\nvar ${exportsName} = ${moduleSideEffects ? "" : "/*@__PURE__*/ "}${requireModule}();\nexport { ${exportsName} as __moduleExports };`; if (defaultIsModuleExports === true) code += `\nexport { ${exportsName} as default };`; else if (defaultIsModuleExports === false) code += `\nexport default ${exportsName}.default;`; else code += `\nexport default /*@__PURE__*/getDefaultExportFromCjs(${exportsName});`; return { code, syntheticNamedExports: "__moduleExports" }; } function getCandidatesForExtension(resolved, extension$1) { return [resolved + extension$1, `${resolved}${sep}index${extension$1}`]; } function getCandidates(resolved, extensions$1) { return extensions$1.reduce((paths, extension$1) => paths.concat(getCandidatesForExtension(resolved, extension$1)), [resolved]); } function resolveExtensions(importee, importer, extensions$1) { if (importee[0] !== "." || !importer) return void 0; const resolved = resolve$1(dirname$1(importer), importee); const candidates = getCandidates(resolved, extensions$1); for (let i$1 = 0; i$1 < candidates.length; i$1 += 1) try { const stats = statSync(candidates[i$1]); if (stats.isFile()) return { id: candidates[i$1] }; } catch (err$2) {} return void 0; } function getResolveId(extensions$1, isPossibleCjsId) { const currentlyResolving = /* @__PURE__ */ new Map(); return { currentlyResolving, async resolveId(importee, importer, resolveOptions) { const customOptions = resolveOptions.custom; if (customOptions?.["node-resolve"]?.isRequire) return null; const currentlyResolvingForParent = currentlyResolving.get(importer); if (currentlyResolvingForParent && currentlyResolvingForParent.has(importee)) { this.warn({ code: "THIS_RESOLVE_WITHOUT_OPTIONS", message: "It appears a plugin has implemented a \"resolveId\" hook that uses \"this.resolve\" without forwarding the third \"options\" parameter of \"resolveId\". This is problematic as it can lead to wrong module resolutions especially for the node-resolve plugin and in certain cases cause early exit errors for the commonjs plugin.\nIn rare cases, this warning can appear if the same file is both imported and required from the same mixed ES/CommonJS module, in which case it can be ignored.", url: "https://rollupjs.org/guide/en/#resolveid" }); return null; } if (isWrappedId(importee, WRAPPED_SUFFIX)) return unwrapId$1(importee, WRAPPED_SUFFIX); if (importee.endsWith(ENTRY_SUFFIX) || isWrappedId(importee, MODULE_SUFFIX) || isWrappedId(importee, EXPORTS_SUFFIX) || isWrappedId(importee, PROXY_SUFFIX) || isWrappedId(importee, ES_IMPORT_SUFFIX) || isWrappedId(importee, EXTERNAL_SUFFIX) || importee.startsWith(HELPERS_ID) || importee === DYNAMIC_MODULES_ID) return importee; if (importer) { if (importer === DYNAMIC_MODULES_ID || isWrappedId(importer, PROXY_SUFFIX) || isWrappedId(importer, ES_IMPORT_SUFFIX) || importer.endsWith(ENTRY_SUFFIX)) return importee; if (isWrappedId(importer, EXTERNAL_SUFFIX)) { if (!await this.resolve(importee, importer, Object.assign({ skipSelf: true }, resolveOptions))) return null; return { id: importee, external: true }; } } if (importee.startsWith("\0")) return null; const resolved = await this.resolve(importee, importer, Object.assign({ skipSelf: true }, resolveOptions)) || resolveExtensions(importee, importer, extensions$1); if (!resolved || resolved.external || resolved.id.endsWith(ENTRY_SUFFIX) || isWrappedId(resolved.id, ES_IMPORT_SUFFIX) || !isPossibleCjsId(resolved.id)) return resolved; const moduleInfo = await this.load(resolved); const { meta: { commonjs: commonjsMeta } } = moduleInfo; if (commonjsMeta) { const { isCommonJS } = commonjsMeta; if (isCommonJS) { if (resolveOptions.isEntry) { moduleInfo.moduleSideEffects = true; return resolved.id + ENTRY_SUFFIX; } if (isCommonJS === IS_WRAPPED_COMMONJS) return { id: wrapId$1(resolved.id, ES_IMPORT_SUFFIX), meta: { commonjs: { resolved } } }; } } return resolved; } }; } function getRequireResolver(extensions$1, detectCyclesAndConditional, currentlyResolving) { const knownCjsModuleTypes = Object.create(null); const requiredIds = Object.create(null); const unconditionallyRequiredIds = Object.create(null); const dependencies = Object.create(null); const getDependencies = (id) => dependencies[id] || (dependencies[id] = /* @__PURE__ */ new Set()); const isCyclic = (id) => { const dependenciesToCheck = new Set(getDependencies(id)); for (const dependency of dependenciesToCheck) { if (dependency === id) return true; for (const childDependency of getDependencies(dependency)) dependenciesToCheck.add(childDependency); } return false; }; const fullyAnalyzedModules = Object.create(null); const getTypeForFullyAnalyzedModule = (id) => { const knownType = knownCjsModuleTypes[id]; if (knownType !== true || !detectCyclesAndConditional || fullyAnalyzedModules[id]) return knownType; if (isCyclic(id)) return knownCjsModuleTypes[id] = IS_WRAPPED_COMMONJS; return knownType; }; const setInitialParentType = (id, initialCommonJSType) => { if (fullyAnalyzedModules[id]) return; knownCjsModuleTypes[id] = initialCommonJSType; if (detectCyclesAndConditional && knownCjsModuleTypes[id] === true && requiredIds[id] && !unconditionallyRequiredIds[id]) knownCjsModuleTypes[id] = IS_WRAPPED_COMMONJS; }; const analyzeRequiredModule = async (parentId, resolved, isConditional, loadModule) => { const childId = resolved.id; requiredIds[childId] = true; if (!(isConditional || knownCjsModuleTypes[parentId] === IS_WRAPPED_COMMONJS)) unconditionallyRequiredIds[childId] = true; getDependencies(parentId).add(childId); if (!isCyclic(childId)) await loadModule(resolved); }; const getTypeForImportedModule = async (resolved, loadModule) => { if (resolved.id in knownCjsModuleTypes) return knownCjsModuleTypes[resolved.id]; const { meta: { commonjs: commonjs$1 } } = await loadModule(resolved); return commonjs$1 && commonjs$1.isCommonJS || false; }; return { getWrappedIds: () => Object.keys(knownCjsModuleTypes).filter((id) => knownCjsModuleTypes[id] === IS_WRAPPED_COMMONJS), isRequiredId: (id) => requiredIds[id], async shouldTransformCachedModule({ id: parentId, resolvedSources, meta: { commonjs: parentMeta } }) { if (!(parentMeta && parentMeta.isCommonJS)) knownCjsModuleTypes[parentId] = false; if (isWrappedId(parentId, ES_IMPORT_SUFFIX)) return false; const parentRequires = parentMeta && parentMeta.requires; if (parentRequires) { setInitialParentType(parentId, parentMeta.initialCommonJSType); await Promise.all(parentRequires.map(({ resolved, isConditional }) => analyzeRequiredModule(parentId, resolved, isConditional, this.load))); if (getTypeForFullyAnalyzedModule(parentId) !== parentMeta.isCommonJS) return true; for (const { resolved: { id } } of parentRequires) if (getTypeForFullyAnalyzedModule(id) !== parentMeta.isRequiredCommonJS[id]) return true; fullyAnalyzedModules[parentId] = true; for (const { resolved: { id } } of parentRequires) fullyAnalyzedModules[id] = true; } const parentRequireSet = new Set((parentRequires || []).map(({ resolved: { id } }) => id)); return (await Promise.all(Object.keys(resolvedSources).map((source) => resolvedSources[source]).filter(({ id, external }) => !(external || parentRequireSet.has(id))).map(async (resolved) => { if (isWrappedId(resolved.id, ES_IMPORT_SUFFIX)) return await getTypeForImportedModule((await this.load(resolved)).meta.commonjs.resolved, this.load) !== IS_WRAPPED_COMMONJS; return await getTypeForImportedModule(resolved, this.load) === IS_WRAPPED_COMMONJS; }))).some((shouldTransform) => shouldTransform); }, resolveRequireSourcesAndUpdateMeta: (rollupContext) => async (parentId, isParentCommonJS, parentMeta, sources) => { parentMeta.initialCommonJSType = isParentCommonJS; parentMeta.requires = []; parentMeta.isRequiredCommonJS = Object.create(null); setInitialParentType(parentId, isParentCommonJS); const currentlyResolvingForParent = currentlyResolving.get(parentId) || /* @__PURE__ */ new Set(); currentlyResolving.set(parentId, currentlyResolvingForParent); const requireTargets = await Promise.all(sources.map(async ({ source, isConditional }) => { if (source.startsWith("\0")) return { id: source, allowProxy: false }; currentlyResolvingForParent.add(source); const resolved = await rollupContext.resolve(source, parentId, { skipSelf: false, custom: { "node-resolve": { isRequire: true } } }) || resolveExtensions(source, parentId, extensions$1); currentlyResolvingForParent.delete(source); if (!resolved) return { id: wrapId$1(source, EXTERNAL_SUFFIX), allowProxy: false }; const childId = resolved.id; if (resolved.external) return { id: wrapId$1(childId, EXTERNAL_SUFFIX), allowProxy: false }; parentMeta.requires.push({ resolved, isConditional }); await analyzeRequiredModule(parentId, resolved, isConditional, rollupContext.load); return { id: childId, allowProxy: true }; })); parentMeta.isCommonJS = getTypeForFullyAnalyzedModule(parentId); fullyAnalyzedModules[parentId] = true; return requireTargets.map(({ id: dependencyId, allowProxy }, index) => { const isCommonJS = parentMeta.isRequiredCommonJS[dependencyId] = getTypeForFullyAnalyzedModule(dependencyId); const isWrappedCommonJS = isCommonJS === IS_WRAPPED_COMMONJS; fullyAnalyzedModules[dependencyId] = true; return { wrappedModuleSideEffects: isWrappedCommonJS && rollupContext.getModuleInfo(dependencyId).moduleSideEffects, source: sources[index].source, id: allowProxy ? wrapId$1(dependencyId, isWrappedCommonJS ? WRAPPED_SUFFIX : PROXY_SUFFIX) : dependencyId, isCommonJS }; }); }, isCurrentlyResolving(source, parentId) { const currentlyResolvingForParent = currentlyResolving.get(parentId); return currentlyResolvingForParent && currentlyResolvingForParent.has(source); } }; } function validateVersion(actualVersion, peerDependencyVersion, name) { const versionRegexp = /\^(\d+\.\d+\.\d+)/g; let minMajor = Infinity; let minMinor = Infinity; let minPatch = Infinity; let foundVersion; while (foundVersion = versionRegexp.exec(peerDependencyVersion)) { const [foundMajor, foundMinor, foundPatch] = foundVersion[1].split(".").map(Number); if (foundMajor < minMajor) { minMajor = foundMajor; minMinor = foundMinor; minPatch = foundPatch; } } if (!actualVersion) throw new Error(`Insufficient ${name} version: "@rollup/plugin-commonjs" requires at least ${name}@${minMajor}.${minMinor}.${minPatch}.`); const [major, minor, patch] = actualVersion.split(".").map(Number); if (major < minMajor || major === minMajor && (minor < minMinor || minor === minMinor && patch < minPatch)) throw new Error(`Insufficient ${name} version: "@rollup/plugin-commonjs" requires at least ${name}@${minMajor}.${minMinor}.${minPatch} but found ${name}@${actualVersion}.`); } const operators = { "==": (x) => equals(x.left, x.right, false), "!=": (x) => not(operators["=="](x)), "===": (x) => equals(x.left, x.right, true), "!==": (x) => not(operators["==="](x)), "!": (x) => isFalsy(x.argument), "&&": (x) => isTruthy(x.left) && isTruthy(x.right), "||": (x) => isTruthy(x.left) || isTruthy(x.right) }; function not(value$1) { return value$1 === null ? value$1 : !value$1; } function equals(a, b, strict) { if (a.type !== b.type) return null; if (a.type === "Literal") return strict ? a.value === b.value : a.value == b.value; return null; } function isTruthy(node) { if (!node) return false; if (node.type === "Literal") return !!node.value; if (node.type === "ParenthesizedExpression") return isTruthy(node.expression); if (node.operator in operators) return operators[node.operator](node); return null; } function isFalsy(node) { return not(isTruthy(node)); } function getKeypath(node) { const parts = []; while (node.type === "MemberExpression") { if (node.computed) return null; parts.unshift(node.property.name); node = node.object; } if (node.type !== "Identifier") return null; const { name } = node; parts.unshift(name); return { name, keypath: parts.join(".") }; } const KEY_COMPILED_ESM = "__esModule"; function getDefineCompiledEsmType(node) { const definedPropertyWithExports = getDefinePropertyCallName(node, "exports"); const definedProperty = definedPropertyWithExports || getDefinePropertyCallName(node, "module.exports"); if (definedProperty && definedProperty.key === KEY_COMPILED_ESM) return isTruthy(definedProperty.value) ? definedPropertyWithExports ? "exports" : "module" : false; return false; } function getDefinePropertyCallName(node, targetName) { const { callee: { object, property } } = node; if (!object || object.type !== "Identifier" || object.name !== "Object") return; if (!property || property.type !== "Identifier" || property.name !== "defineProperty") return; if (node.arguments.length !== 3) return; const targetNames = targetName.split("."); const [target, key, value$1] = node.arguments; if (targetNames.length === 1) { if (target.type !== "Identifier" || target.name !== targetNames[0]) return; } if (targetNames.length === 2) { if (target.type !== "MemberExpression" || target.object.name !== targetNames[0] || target.property.name !== targetNames[1]) return; } if (value$1.type !== "ObjectExpression" || !value$1.properties) return; const valueProperty = value$1.properties.find((p$1) => p$1.key && p$1.key.name === "value"); if (!valueProperty || !valueProperty.value) return; return { key: key.value, value: valueProperty.value }; } function isShorthandProperty(parent) { return parent && parent.type === "Property" && parent.shorthand; } function wrapCode(magicString, uses, moduleName, exportsName, indentExclusionRanges) { const args = []; const passedArgs = []; if (uses.module) { args.push("module"); passedArgs.push(moduleName); } if (uses.exports) { args.push("exports"); passedArgs.push(uses.module ? `${moduleName}.exports` : exportsName); } magicString.trim().indent(" ", { exclude: indentExclusionRanges }).prepend(`(function (${args.join(", ")}) {\n`).append(` \n} (${passedArgs.join(", ")}));`); } function rewriteExportsAndGetExportsBlock(magicString, moduleName, exportsName, exportedExportsName, wrapped, moduleExportsAssignments, firstTopLevelModuleExportsAssignment, exportsAssignmentsByName, topLevelAssignments, defineCompiledEsmExpressions, deconflictedExportNames, code, HELPERS_NAME, exportMode, defaultIsModuleExports, usesRequireWrapper, requireName) { const exports$1 = []; const exportDeclarations = []; if (usesRequireWrapper) getExportsWhenUsingRequireWrapper(magicString, wrapped, exportMode, exports$1, moduleExportsAssignments, exportsAssignmentsByName, moduleName, exportsName, requireName, defineCompiledEsmExpressions); else if (exportMode === "replace") getExportsForReplacedModuleExports(magicString, exports$1, exportDeclarations, moduleExportsAssignments, firstTopLevelModuleExportsAssignment, exportsName, defaultIsModuleExports, HELPERS_NAME); else { if (exportMode === "module") { exportDeclarations.push(`var ${exportedExportsName} = ${moduleName}.exports`); exports$1.push(`${exportedExportsName} as __moduleExports`); } else exports$1.push(`${exportsName} as __moduleExports`); if (wrapped) exportDeclarations.push(getDefaultExportDeclaration(exportedExportsName, defaultIsModuleExports, HELPERS_NAME)); else getExports(magicString, exports$1, exportDeclarations, moduleExportsAssignments, exportsAssignmentsByName, deconflictedExportNames, topLevelAssignments, moduleName, exportsName, exportedExportsName, defineCompiledEsmExpressions, HELPERS_NAME, defaultIsModuleExports, exportMode); } if (exports$1.length) exportDeclarations.push(`export { ${exports$1.join(", ")} }`); return `\n\n${exportDeclarations.join(";\n")};`; } function getExportsWhenUsingRequireWrapper(magicString, wrapped, exportMode, exports$1, moduleExportsAssignments, exportsAssignmentsByName, moduleName, exportsName, requireName, defineCompiledEsmExpressions) { exports$1.push(`${requireName} as __require`); if (wrapped) return; if (exportMode === "replace") rewriteModuleExportsAssignments(magicString, moduleExportsAssignments, exportsName); else { rewriteModuleExportsAssignments(magicString, moduleExportsAssignments, `${moduleName}.exports`); for (const [exportName, { nodes }] of exportsAssignmentsByName) for (const { node, type } of nodes) magicString.overwrite(node.start, node.left.end, `${exportMode === "module" && type === "module" ? `${moduleName}.exports` : exportsName}.${exportName}`); replaceDefineCompiledEsmExpressionsAndGetIfRestorable(defineCompiledEsmExpressions, magicString, exportMode, moduleName, exportsName); } } function getExportsForReplacedModuleExports(magicString, exports$1, exportDeclarations, moduleExportsAssignments, firstTopLevelModuleExportsAssignment, exportsName, defaultIsModuleExports, HELPERS_NAME) { for (const { left } of moduleExportsAssignments) magicString.overwrite(left.start, left.end, exportsName); magicString.prependRight(firstTopLevelModuleExportsAssignment.left.start, "var "); exports$1.push(`${exportsName} as __moduleExports`); exportDeclarations.push(getDefaultExportDeclaration(exportsName, defaultIsModuleExports, HELPERS_NAME)); } function getDefaultExportDeclaration(exportedExportsName, defaultIsModuleExports, HELPERS_NAME) { return `export default ${defaultIsModuleExports === true ? exportedExportsName : defaultIsModuleExports === false ? `${exportedExportsName}.default` : `/*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportedExportsName})`}`; } function getExports(magicString, exports$1, exportDeclarations, moduleExportsAssignments, exportsAssignmentsByName, deconflictedExportNames, topLevelAssignments, moduleName, exportsName, exportedExportsName, defineCompiledEsmExpressions, HELPERS_NAME, defaultIsModuleExports, exportMode) { let deconflictedDefaultExportName; for (const { left } of moduleExportsAssignments) magicString.overwrite(left.start, left.end, `${moduleName}.exports`); for (const [exportName, { nodes }] of exportsAssignmentsByName) { const deconflicted = deconflictedExportNames[exportName]; let needsDeclaration = true; for (const { node, type } of nodes) { let replacement = `${deconflicted} = ${exportMode === "module" && type === "module" ? `${moduleName}.exports` : exportsName}.${exportName}`; if (needsDeclaration && topLevelAssignments.has(node)) { replacement = `var ${replacement}`; needsDeclaration = false; } magicString.overwrite(node.start, node.left.end, replacement); } if (needsDeclaration) magicString.prepend(`var ${deconflicted};\n`); if (exportName === "default") deconflictedDefaultExportName = deconflicted; else exports$1.push(exportName === deconflicted ? exportName : `${deconflicted} as ${exportName}`); } const isRestorableCompiledEsm = replaceDefineCompiledEsmExpressionsAndGetIfRestorable(defineCompiledEsmExpressions, magicString, exportMode, moduleName, exportsName); if (defaultIsModuleExports === false || defaultIsModuleExports === "auto" && isRestorableCompiledEsm && moduleExportsAssignments.length === 0) exports$1.push(`${deconflictedDefaultExportName || exportedExportsName} as default`); else if (defaultIsModuleExports === true || !isRestorableCompiledEsm && moduleExportsAssignments.length === 0) exports$1.push(`${exportedExportsName} as default`); else exportDeclarations.push(getDefaultExportDeclaration(exportedExportsName, defaultIsModuleExports, HELPERS_NAME)); } function rewriteModuleExportsAssignments(magicString, moduleExportsAssignments, exportsName) { for (const { left } of moduleExportsAssignments) magicString.overwrite(left.start, left.end, exportsName); } function replaceDefineCompiledEsmExpressionsAndGetIfRestorable(defineCompiledEsmExpressions, magicString, exportMode, moduleName, exportsName) { let isRestorableCompiledEsm = false; for (const { node, type } of defineCompiledEsmExpressions) { isRestorableCompiledEsm = true; const moduleExportsExpression = node.type === "CallExpression" ? node.arguments[0] : node.left.object; magicString.overwrite(moduleExportsExpression.start, moduleExportsExpression.end, exportMode === "module" && type === "module" ? `${moduleName}.exports` : exportsName); } return isRestorableCompiledEsm; } function isRequireExpression(node, scope) { if (!node) return false; if (node.type !== "CallExpression") return false; if (node.arguments.length === 0) return false; return isRequire(node.callee, scope); } function isRequire(node, scope) { return node.type === "Identifier" && node.name === "require" && !scope.contains("require") || node.type === "MemberExpression" && isModuleRequire(node, scope); } function isModuleRequire({ object, property }, scope) { return object.type === "Identifier" && object.name === "module" && property.type === "Identifier" && property.name === "require" && !scope.contains("module"); } function hasDynamicArguments(node) { return node.arguments.length > 1 || node.arguments[0].type !== "Literal" && (node.arguments[0].type !== "TemplateLiteral" || node.arguments[0].expressions.length > 0); } const reservedMethod = { resolve: true, cache: true, main: true }; function isNodeRequirePropertyAccess(parent) { return parent && parent.property && reservedMethod[parent.property.name]; } function getRequireStringArg(node) { return node.arguments[0].type === "Literal" ? node.arguments[0].value : node.arguments[0].quasis[0].value.cooked; } function getRequireHandlers() { const requireExpressions = []; function addRequireExpression(sourceId, node, scope, usesReturnValue, isInsideTryBlock, isInsideConditional, toBeRemoved) { requireExpressions.push({ sourceId, node, scope, usesReturnValue, isInsideTryBlock, isInsideConditional, toBeRemoved }); } async function rewriteRequireExpressionsAndGetImportBlock(magicString, topLevelDeclarations, reassignedNames, helpersName, dynamicRequireName, moduleName, exportsName, id, exportMode, resolveRequireSourcesAndUpdateMeta, needsRequireWrapper, isEsModule, isDynamicRequireModulesEnabled, getIgnoreTryCatchRequireStatementMode, commonjsMeta) { const imports = []; imports.push(`import * as ${helpersName} from "${HELPERS_ID}"`); if (dynamicRequireName) imports.push(`import { ${isDynamicRequireModulesEnabled ? CREATE_COMMONJS_REQUIRE_EXPORT : COMMONJS_REQUIRE_EXPORT} as ${dynamicRequireName} } from "${DYNAMIC_MODULES_ID}"`); if (exportMode === "module") imports.push(`import { __module as ${moduleName} } from ${JSON.stringify(wrapId$1(id, MODULE_SUFFIX))}`, `var ${exportsName} = ${moduleName}.exports`); else if (exportMode === "exports") imports.push(`import { __exports as ${exportsName} } from ${JSON.stringify(wrapId$1(id, EXPORTS_SUFFIX))}`); const requiresBySource = collectSources(requireExpressions); const requireTargets = await resolveRequireSourcesAndUpdateMeta(id, needsRequireWrapper ? IS_WRAPPED_COMMONJS : !isEsModule, commonjsMeta, Object.keys(requiresBySource).map((source) => { return { source, isConditional: requiresBySource[source].every((require$1) => require$1.isInsideConditional) }; })); processRequireExpressions(imports, requireTargets, requiresBySource, getIgnoreTryCatchRequireStatementMode, magicString); return imports.length ? `${imports.join(";\n")};\n\n` : ""; } return { addRequireExpression, rewriteRequireExpressionsAndGetImportBlock }; } function collectSources(requireExpressions) { const requiresBySource = Object.create(null); for (const requireExpression of requireExpressions) { const { sourceId } = requireExpression; if (!requiresBySource[sourceId]) requiresBySource[sourceId] = []; const requires = requiresBySource[sourceId]; requires.push(requireExpression); } return requiresBySource; } function processRequireExpressions(imports, requireTargets, requiresBySource, getIgnoreTryCatchRequireStatementMode, magicString) { const generateRequireName = getGenerateRequireName(); for (const { source, id: resolvedId, isCommonJS, wrappedModuleSideEffects } of requireTargets) { const requires = requiresBySource[source]; const name = generateRequireName(requires); let usesRequired = false; let needsImport = false; for (const { node, usesReturnValue, toBeRemoved, isInsideTryBlock } of requires) { const { canConvertRequire, shouldRemoveRequire } = isInsideTryBlock && isWrappedId(resolvedId, EXTERNAL_SUFFIX) ? getIgnoreTryCatchRequireStatementMode(source) : { canConvertRequire: true, shouldRemoveRequire: false }; if (shouldRemoveRequire) if (usesReturnValue) magicString.overwrite(node.start, node.end, "undefined"); else magicString.remove(toBeRemoved.start, toBeRemoved.end); else if (canConvertRequire) { needsImport = true; if (isCommonJS === IS_WRAPPED_COMMONJS) magicString.overwrite(node.start, node.end, `${wrappedModuleSideEffects ? "" : "/*@__PURE__*/ "}${name}()`); else if (usesReturnValue) { usesRequired = true; magicString.overwrite(node.start, node.end, name); } else magicString.remove(toBeRemoved.start, toBeRemoved.end); } } if (needsImport) if (isCommonJS === IS_WRAPPED_COMMONJS) imports.push(`import { __require as ${name} } from ${JSON.stringify(resolvedId)}`); else imports.push(`import ${usesRequired ? `${name} from ` : ""}${JSON.stringify(resolvedId)}`); } } function getGenerateRequireName() { let uid = 0; return (requires) => { let name; const hasNameConflict = ({ scope }) => scope.contains(name); do { name = `require$$${uid}`; uid += 1; } while (requires.some(hasNameConflict)); return name; }; } const exportsPattern = /^(?:module\.)?exports(?:\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/; const functionType = /^(?:FunctionDeclaration|FunctionExpression|ArrowFunctionExpression)$/; async function transformCommonjs(parse$17, code, id, isEsModule, ignoreGlobal, ignoreRequire, ignoreDynamicRequires, getIgnoreTryCatchRequireStatementMode, sourceMap, isDynamicRequireModulesEnabled, dynamicRequireModules, commonDir, astCache, defaultIsModuleExports, needsRequireWrapper, resolveRequireSourcesAndUpdateMeta, isRequired, checkDynamicRequire, commonjsMeta) { const ast = astCache || tryParse(parse$17, code, id); const magicString = new MagicString(code); const uses = { module: false, exports: false, global: false, require: false }; const virtualDynamicRequirePath = isDynamicRequireModulesEnabled && getVirtualPathForDynamicRequirePath(dirname$1(id), commonDir); let scope = attachScopes(ast, "scope"); let lexicalDepth = 0; let programDepth = 0; let classBodyDepth = 0; let currentTryBlockEnd = null; let shouldWrap = false; const globals = /* @__PURE__ */ new Set(); let currentConditionalNodeEnd = null; const conditionalNodes = /* @__PURE__ */ new Set(); const { addRequireExpression, rewriteRequireExpressionsAndGetImportBlock } = getRequireHandlers(); const reassignedNames = /* @__PURE__ */ new Set(); const topLevelDeclarations = []; const skippedNodes = /* @__PURE__ */ new Set(); const moduleAccessScopes = new Set([scope]); const exportsAccessScopes = new Set([scope]); const moduleExportsAssignments = []; let firstTopLevelModuleExportsAssignment = null; const exportsAssignmentsByName = /* @__PURE__ */ new Map(); const topLevelAssignments = /* @__PURE__ */ new Set(); const topLevelDefineCompiledEsmExpressions = []; const replacedGlobal = []; const replacedThis = []; const replacedDynamicRequires = []; const importedVariables = /* @__PURE__ */ new Set(); const indentExclusionRanges = []; walk$2(ast, { enter(node, parent) { if (skippedNodes.has(node)) { this.skip(); return; } if (currentTryBlockEnd !== null && node.start > currentTryBlockEnd) currentTryBlockEnd = null; if (currentConditionalNodeEnd !== null && node.start > currentConditionalNodeEnd) currentConditionalNodeEnd = null; if (currentConditionalNodeEnd === null && conditionalNodes.has(node)) currentConditionalNodeEnd = node.end; programDepth += 1; if (node.scope) ({scope} = node); if (functionType.test(node.type)) lexicalDepth += 1; if (sourceMap) { magicString.addSourcemapLocation(node.start); magicString.addSourcemapLocation(node.end); } switch (node.type) { case "AssignmentExpression": if (node.left.type === "MemberExpression") { const flattened = getKeypath(node.left); if (!flattened || scope.contains(flattened.name)) return; const exportsPatternMatch = exportsPattern.exec(flattened.keypath); if (!exportsPatternMatch || flattened.keypath === "exports") return; const [, exportName] = exportsPatternMatch; uses[flattened.name] = true; if (flattened.keypath === "module.exports") { moduleExportsAssignments.push(node); if (programDepth > 3) moduleAccessScopes.add(scope); else if (!firstTopLevelModuleExportsAssignment) firstTopLevelModuleExportsAssignment = node; } else if (exportName === KEY_COMPILED_ESM) if (programDepth > 3) shouldWrap = true; else topLevelDefineCompiledEsmExpressions.push({ node, type: flattened.name }); else { const exportsAssignments = exportsAssignmentsByName.get(exportName) || { nodes: [], scopes: /* @__PURE__ */ new Set() }; exportsAssignments.nodes.push({ node, type: flattened.name }); exportsAssignments.scopes.add(scope); exportsAccessScopes.add(scope); exportsAssignmentsByName.set(exportName, exportsAssignments); if (programDepth <= 3) topLevelAssignments.add(node); } skippedNodes.add(node.left); } else for (const name of extractAssignedNames(node.left)) reassignedNames.add(name); return; case "CallExpression": { const defineCompiledEsmType = getDefineCompiledEsmType(node); if (defineCompiledEsmType) { if (programDepth === 3 && parent.type === "ExpressionStatement") { skippedNodes.add(node.arguments[0]); topLevelDefineCompiledEsmExpressions.push({ node, type: defineCompiledEsmType }); } else shouldWrap = true; return; } if (isDynamicRequireModulesEnabled && node.callee.object && isRequire(node.callee.object, scope) && node.callee.property.name === "resolve") { checkDynamicRequire(node.start); uses.require = true; const requireNode = node.callee.object; replacedDynamicRequires.push(requireNode); skippedNodes.add(node.callee); return; } if (!isRequireExpression(node, scope)) { const keypath = getKeypath(node.callee); if (keypath && importedVariables.has(keypath.name)) currentConditionalNodeEnd = Infinity; return; } skippedNodes.add(node.callee); uses.require = true; if (hasDynamicArguments(node)) { if (isDynamicRequireModulesEnabled) checkDynamicRequire(node.start); if (!ignoreDynamicRequires) replacedDynamicRequires.push(node.callee); return; } const requireStringArg = getRequireStringArg(node); if (!ignoreRequire(requireStringArg)) { const usesReturnValue = parent.type !== "ExpressionStatement"; const toBeRemoved = parent.type === "ExpressionStatement" && (!currentConditionalNodeEnd || currentTryBlockEnd !== null && currentTryBlockEnd < currentConditionalNodeEnd) ? parent : node; addRequireExpression(requireStringArg, node, scope, usesReturnValue, currentTryBlockEnd !== null, currentConditionalNodeEnd !== null, toBeRemoved); if (parent.type === "VariableDeclarator" && parent.id.type === "Identifier") for (const name of extractAssignedNames(parent.id)) importedVariables.add(name); } return; } case "ClassBody": classBodyDepth += 1; return; case "ConditionalExpression": case "IfStatement": if (isFalsy(node.test)) skippedNodes.add(node.consequent); else if (isTruthy(node.test)) { if (node.alternate) skippedNodes.add(node.alternate); } else { conditionalNodes.add(node.consequent); if (node.alternate) conditionalNodes.add(node.alternate); } return; case "ArrowFunctionExpression": case "FunctionDeclaration": case "FunctionExpression": if (currentConditionalNodeEnd === null && !(parent.type === "CallExpression" && parent.callee === node)) currentConditionalNodeEnd = node.end; return; case "Identifier": { const { name } = node; if (!(0, import_is_reference.default)(node, parent) || scope.contains(name) || parent.type === "PropertyDefinition" && parent.key === node) return; switch (name) { case "require": uses.require = true; if (isNodeRequirePropertyAccess(parent)) return; if (!ignoreDynamicRequires) { if (isShorthandProperty(parent)) { skippedNodes.add(parent.value); magicString.prependRight(node.start, "require: "); } replacedDynamicRequires.push(node); } return; case "module": case "exports": shouldWrap = true; uses[name] = true; return; case "global": uses.global = true; if (!ignoreGlobal) replacedGlobal.push(node); return; case "define": magicString.overwrite(node.start, node.end, "undefined", { storeName: true }); return; default: globals.add(name); return; } } case "LogicalExpression": if (node.operator === "&&") { if (isFalsy(node.left)) skippedNodes.add(node.right); else if (!isTruthy(node.left)) conditionalNodes.add(node.right); } else if (node.operator === "||") { if (isTruthy(node.left)) skippedNodes.add(node.right); else if (!isFalsy(node.left)) conditionalNodes.add(node.right); } return; case "MemberExpression": if (!isDynamicRequireModulesEnabled && isModuleRequire(node, scope)) { uses.require = true; replacedDynamicRequires.push(node); skippedNodes.add(node.object); skippedNodes.add(node.property); } return; case "ReturnStatement": if (lexicalDepth === 0) shouldWrap = true; return; case "ThisExpression": if (lexicalDepth === 0 && !classBodyDepth) { uses.global = true; if (!ignoreGlobal) replacedThis.push(node); } return; case "TryStatement": if (currentTryBlockEnd === null) currentTryBlockEnd = node.block.end; if (currentConditionalNodeEnd === null) currentConditionalNodeEnd = node.end; return; case "UnaryExpression": if (node.operator === "typeof") { const flattened = getKeypath(node.argument); if (!flattened) return; if (scope.contains(flattened.name)) return; if (!isEsModule && (flattened.keypath === "module.exports" || flattened.keypath === "module" || flattened.keypath === "exports")) magicString.overwrite(node.start, node.end, `'object'`, { storeName: false }); } return; case "VariableDeclaration": if (!scope.parent) topLevelDeclarations.push(node); return; case "TemplateElement": if (node.value.raw.includes("\n")) indentExclusionRanges.push([node.start, node.end]); } }, leave(node) { programDepth -= 1; if (node.scope) scope = scope.parent; if (functionType.test(node.type)) lexicalDepth -= 1; if (node.type === "ClassBody") classBodyDepth -= 1; } }); const nameBase = getName(id); const exportsName = deconflict([...exportsAccessScopes], globals, nameBase); const moduleName = deconflict([...moduleAccessScopes], globals, `${nameBase}Module`); const requireName = deconflict([scope], globals, `require${capitalize(nameBase)}`); const isRequiredName = deconflict([scope], globals, `hasRequired${capitalize(nameBase)}`); const helpersName = deconflict([scope], globals, "commonjsHelpers"); const dynamicRequireName = replacedDynamicRequires.length > 0 && deconflict([scope], globals, isDynamicRequireModulesEnabled ? CREATE_COMMONJS_REQUIRE_EXPORT : COMMONJS_REQUIRE_EXPORT); const deconflictedExportNames = Object.create(null); for (const [exportName, { scopes }] of exportsAssignmentsByName) deconflictedExportNames[exportName] = deconflict([...scopes], globals, exportName); for (const node of replacedGlobal) magicString.overwrite(node.start, node.end, `${helpersName}.commonjsGlobal`, { storeName: true }); for (const node of replacedThis) magicString.overwrite(node.start, node.end, exportsName, { storeName: true }); for (const node of replacedDynamicRequires) magicString.overwrite(node.start, node.end, isDynamicRequireModulesEnabled ? `${dynamicRequireName}(${JSON.stringify(virtualDynamicRequirePath)})` : dynamicRequireName, { contentOnly: true, storeName: true }); shouldWrap = !isEsModule && (shouldWrap || uses.exports && moduleExportsAssignments.length > 0); if (!(shouldWrap || isRequired || needsRequireWrapper || uses.module || uses.exports || uses.require || topLevelDefineCompiledEsmExpressions.length > 0) && (ignoreGlobal || !uses.global)) return { meta: { commonjs: { isCommonJS: false } } }; let leadingComment = ""; if (code.startsWith("/*")) { const commentEnd = code.indexOf("*/", 2) + 2; leadingComment = `${code.slice(0, commentEnd)}\n`; magicString.remove(0, commentEnd).trim(); } let shebang = ""; if (code.startsWith("#!")) { const shebangEndPosition = code.indexOf("\n") + 1; shebang = code.slice(0, shebangEndPosition); magicString.remove(0, shebangEndPosition).trim(); } const exportMode = isEsModule ? "none" : shouldWrap ? uses.module ? "module" : "exports" : firstTopLevelModuleExportsAssignment ? exportsAssignmentsByName.size === 0 && topLevelDefineCompiledEsmExpressions.length === 0 ? "replace" : "module" : moduleExportsAssignments.length === 0 ? "exports" : "module"; const exportedExportsName = exportMode === "module" ? deconflict([], globals, `${nameBase}Exports`) : exportsName; const importBlock = await rewriteRequireExpressionsAndGetImportBlock(magicString, topLevelDeclarations, reassignedNames, helpersName, dynamicRequireName, moduleName, exportsName, id, exportMode, resolveRequireSourcesAndUpdateMeta, needsRequireWrapper, isEsModule, isDynamicRequireModulesEnabled, getIgnoreTryCatchRequireStatementMode, commonjsMeta); const usesRequireWrapper = commonjsMeta.isCommonJS === IS_WRAPPED_COMMONJS; const exportBlock = isEsModule ? "" : rewriteExportsAndGetExportsBlock(magicString, moduleName, exportsName, exportedExportsName, shouldWrap, moduleExportsAssignments, firstTopLevelModuleExportsAssignment, exportsAssignmentsByName, topLevelAssignments, topLevelDefineCompiledEsmExpressions, deconflictedExportNames, code, helpersName, exportMode, defaultIsModuleExports, usesRequireWrapper, requireName); if (shouldWrap) wrapCode(magicString, uses, moduleName, exportsName, indentExclusionRanges); if (usesRequireWrapper) { magicString.trim().indent(" ", { exclude: indentExclusionRanges }); const exported = exportMode === "module" ? `${moduleName}.exports` : exportsName; magicString.prepend(`var ${isRequiredName}; function ${requireName} () { \tif (${isRequiredName}) return ${exported}; \t${isRequiredName} = 1; `).append(` \treturn ${exported}; }`); if (exportMode === "replace") magicString.prepend(`var ${exportsName};\n`); } magicString.trim().prepend(shebang + leadingComment + importBlock).append(exportBlock); return { code: magicString.toString(), map: sourceMap ? magicString.generateMap() : null, syntheticNamedExports: isEsModule || usesRequireWrapper ? false : "__moduleExports", meta: { commonjs: { ...commonjsMeta, shebang } } }; } const PLUGIN_NAME = "commonjs"; function commonjs(options$1 = {}) { const { ignoreGlobal, ignoreDynamicRequires, requireReturnsDefault: requireReturnsDefaultOption, defaultIsModuleExports: defaultIsModuleExportsOption, esmExternals } = options$1; const extensions$1 = options$1.extensions || [".js"]; const filter$1 = createFilter$2(options$1.include, options$1.exclude); const isPossibleCjsId = (id) => { const extName = extname$1(id); return extName === ".cjs" || extensions$1.includes(extName) && filter$1(id); }; const { strictRequiresFilter, detectCyclesAndConditional } = getStrictRequiresFilter(options$1); const getRequireReturnsDefault = typeof requireReturnsDefaultOption === "function" ? requireReturnsDefaultOption : () => requireReturnsDefaultOption; let esmExternalIds; const isEsmExternal = typeof esmExternals === "function" ? esmExternals : Array.isArray(esmExternals) ? (esmExternalIds = new Set(esmExternals), (id) => esmExternalIds.has(id)) : () => esmExternals; const getDefaultIsModuleExports = typeof defaultIsModuleExportsOption === "function" ? defaultIsModuleExportsOption : () => typeof defaultIsModuleExportsOption === "boolean" ? defaultIsModuleExportsOption : "auto"; const dynamicRequireRoot = typeof options$1.dynamicRequireRoot === "string" ? resolve$1(options$1.dynamicRequireRoot) : process.cwd(); const { commonDir, dynamicRequireModules } = getDynamicRequireModules(options$1.dynamicRequireTargets, dynamicRequireRoot); const isDynamicRequireModulesEnabled = dynamicRequireModules.size > 0; const ignoreRequire = typeof options$1.ignore === "function" ? options$1.ignore : Array.isArray(options$1.ignore) ? (id) => options$1.ignore.includes(id) : () => false; const getIgnoreTryCatchRequireStatementMode = (id) => { const mode = typeof options$1.ignoreTryCatch === "function" ? options$1.ignoreTryCatch(id) : Array.isArray(options$1.ignoreTryCatch) ? options$1.ignoreTryCatch.includes(id) : typeof options$1.ignoreTryCatch !== "undefined" ? options$1.ignoreTryCatch : true; return { canConvertRequire: mode !== "remove" && mode !== true, shouldRemoveRequire: mode === "remove" }; }; const { currentlyResolving, resolveId } = getResolveId(extensions$1, isPossibleCjsId); const sourceMap = options$1.sourceMap !== false; let requireResolver; function transformAndCheckExports(code, id) { const normalizedId = normalizePathSlashes(id); const { isEsModule, hasDefaultExport, hasNamedExports, ast } = analyzeTopLevelStatements(this.parse, code, id); const commonjsMeta = this.getModuleInfo(id).meta.commonjs || {}; if (hasDefaultExport) commonjsMeta.hasDefaultExport = true; if (hasNamedExports) commonjsMeta.hasNamedExports = true; if (!dynamicRequireModules.has(normalizedId) && (!(hasCjsKeywords(code, ignoreGlobal) || requireResolver.isRequiredId(id)) || isEsModule && !options$1.transformMixedEsModules)) { commonjsMeta.isCommonJS = false; return { meta: { commonjs: commonjsMeta } }; } const needsRequireWrapper = !isEsModule && (dynamicRequireModules.has(normalizedId) || strictRequiresFilter(id)); const checkDynamicRequire = (position) => { const normalizedDynamicRequireRoot = normalizePathSlashes(dynamicRequireRoot); if (normalizedId.indexOf(normalizedDynamicRequireRoot) !== 0) this.error({ code: "DYNAMIC_REQUIRE_OUTSIDE_ROOT", normalizedId, normalizedDynamicRequireRoot, message: `"${normalizedId}" contains dynamic require statements but it is not within the current dynamicRequireRoot "${normalizedDynamicRequireRoot}". You should set dynamicRequireRoot to "${dirname$1(normalizedId)}" or one of its parent directories.` }, position); }; return transformCommonjs(this.parse, code, id, isEsModule, ignoreGlobal || isEsModule, ignoreRequire, ignoreDynamicRequires && !isDynamicRequireModulesEnabled, getIgnoreTryCatchRequireStatementMode, sourceMap, isDynamicRequireModulesEnabled, dynamicRequireModules, commonDir, ast, getDefaultIsModuleExports(id), needsRequireWrapper, requireResolver.resolveRequireSourcesAndUpdateMeta(this), requireResolver.isRequiredId(id), checkDynamicRequire, commonjsMeta); } return { name: PLUGIN_NAME, version: version$1, options(rawOptions) { const plugins$1 = Array.isArray(rawOptions.plugins) ? [...rawOptions.plugins] : rawOptions.plugins ? [rawOptions.plugins] : []; plugins$1.unshift({ name: "commonjs--resolver", resolveId }); return { ...rawOptions, plugins: plugins$1 }; }, buildStart({ plugins: plugins$1 }) { validateVersion(this.meta.rollupVersion, peerDependencies.rollup, "rollup"); const nodeResolve = plugins$1.find(({ name }) => name === "node-resolve"); if (nodeResolve) validateVersion(nodeResolve.version, "^13.0.6", "@rollup/plugin-node-resolve"); if (options$1.namedExports != null) this.warn("The namedExports option from \"@rollup/plugin-commonjs\" is deprecated. Named exports are now handled automatically."); requireResolver = getRequireResolver(extensions$1, detectCyclesAndConditional, currentlyResolving); }, buildEnd() { if (options$1.strictRequires === "debug") { const wrappedIds = requireResolver.getWrappedIds(); if (wrappedIds.length) this.warn({ code: "WRAPPED_IDS", ids: wrappedIds, message: `The commonjs plugin automatically wrapped the following files:\n[\n${wrappedIds.map((id) => `\t${JSON.stringify(relative$1(process.cwd(), id))}`).join(",\n")}\n]` }); else this.warn({ code: "WRAPPED_IDS", ids: wrappedIds, message: "The commonjs plugin did not wrap any files." }); } }, async load(id) { if (id === HELPERS_ID) return getHelpersModule(); if (isWrappedId(id, MODULE_SUFFIX)) { const name = getName(unwrapId$1(id, MODULE_SUFFIX)); return { code: `var ${name} = {exports: {}}; export {${name} as __module}`, meta: { commonjs: { isCommonJS: false } } }; } if (isWrappedId(id, EXPORTS_SUFFIX)) { const name = getName(unwrapId$1(id, EXPORTS_SUFFIX)); return { code: `var ${name} = {}; export {${name} as __exports}`, meta: { commonjs: { isCommonJS: false } } }; } if (isWrappedId(id, EXTERNAL_SUFFIX)) { const actualId = unwrapId$1(id, EXTERNAL_SUFFIX); return getUnknownRequireProxy(actualId, isEsmExternal(actualId) ? getRequireReturnsDefault(actualId) : true); } if (id.endsWith(ENTRY_SUFFIX)) { const acutalId = id.slice(0, -15); const { meta: { commonjs: commonjsMeta } } = this.getModuleInfo(acutalId); const shebang = commonjsMeta?.shebang ?? ""; return getEntryProxy(acutalId, getDefaultIsModuleExports(acutalId), this.getModuleInfo, shebang); } if (isWrappedId(id, ES_IMPORT_SUFFIX)) { const actualId = unwrapId$1(id, ES_IMPORT_SUFFIX); return getEsImportProxy(actualId, getDefaultIsModuleExports(actualId), (await this.load({ id: actualId })).moduleSideEffects); } if (id === DYNAMIC_MODULES_ID) return getDynamicModuleRegistry(isDynamicRequireModulesEnabled, dynamicRequireModules, commonDir, ignoreDynamicRequires); if (isWrappedId(id, PROXY_SUFFIX)) { const actualId = unwrapId$1(id, PROXY_SUFFIX); return getStaticRequireProxy(actualId, getRequireReturnsDefault(actualId), this.load); } return null; }, shouldTransformCachedModule(...args) { return requireResolver.shouldTransformCachedModule.call(this, ...args); }, transform(code, id) { if (!isPossibleCjsId(id)) return null; try { return transformAndCheckExports.call(this, code, id); } catch (err$2) { return this.error(err$2, err$2.pos); } } }; } //#endregion //#region src/node/environment.ts /** * Creates a function that hides the complexities of a WeakMap with an initial value * to implement object metadata. Used by plugins to implement cross hooks per * environment metadata * * @experimental */ function perEnvironmentState(initial) { const stateMap = /* @__PURE__ */ new WeakMap(); return function(context) { const { environment } = context; let state = stateMap.get(environment); if (!state) { state = initial(environment); stateMap.set(environment, state); } return state; }; } //#endregion //#region src/node/logger.ts var import_picocolors$32 = __toESM(require_picocolors(), 1); const LogLevels = { silent: 0, error: 1, warn: 2, info: 3 }; let lastType; let lastMsg; let sameCount = 0; function clearScreen() { const repeatCount = process.stdout.rows - 2; const blank = repeatCount > 0 ? "\n".repeat(repeatCount) : ""; console.log(blank); readline.cursorTo(process.stdout, 0, 0); readline.clearScreenDown(process.stdout); } let timeFormatter; function getTimeFormatter() { timeFormatter ??= new Intl.DateTimeFormat(void 0, { hour: "numeric", minute: "numeric", second: "numeric" }); return timeFormatter; } function createLogger(level = "info", options$1 = {}) { if (options$1.customLogger) return options$1.customLogger; const loggedErrors = /* @__PURE__ */ new WeakSet(); const { prefix: prefix$1 = "[vite]", allowClearScreen = true, console: console$1 = globalThis.console } = options$1; const thresh = LogLevels[level]; const canClearScreen = allowClearScreen && process.stdout.isTTY && !process.env.CI; const clear = canClearScreen ? clearScreen : () => {}; function format$3(type, msg, options$2 = {}) { if (options$2.timestamp) { let tag = ""; if (type === "info") tag = import_picocolors$32.default.cyan(import_picocolors$32.default.bold(prefix$1)); else if (type === "warn") tag = import_picocolors$32.default.yellow(import_picocolors$32.default.bold(prefix$1)); else tag = import_picocolors$32.default.red(import_picocolors$32.default.bold(prefix$1)); const environment = options$2.environment ? options$2.environment + " " : ""; return `${import_picocolors$32.default.dim(getTimeFormatter().format(/* @__PURE__ */ new Date()))} ${tag} ${environment}${msg}`; } else return msg; } function output(type, msg, options$2 = {}) { if (thresh >= LogLevels[type]) { const method = type === "info" ? "log" : type; if (options$2.error) loggedErrors.add(options$2.error); if (canClearScreen) if (type === lastType && msg === lastMsg) { sameCount++; clear(); console$1[method](format$3(type, msg, options$2), import_picocolors$32.default.yellow(`(x${sameCount + 1})`)); } else { sameCount = 0; lastMsg = msg; lastType = type; if (options$2.clear) clear(); console$1[method](format$3(type, msg, options$2)); } else console$1[method](format$3(type, msg, options$2)); } } const warnedMessages = /* @__PURE__ */ new Set(); const logger = { hasWarned: false, info(msg, opts) { output("info", msg, opts); }, warn(msg, opts) { logger.hasWarned = true; output("warn", msg, opts); }, warnOnce(msg, opts) { if (warnedMessages.has(msg)) return; logger.hasWarned = true; output("warn", msg, opts); warnedMessages.add(msg); }, error(msg, opts) { logger.hasWarned = true; output("error", msg, opts); }, clearScreen(type) { if (thresh >= LogLevels[type]) clear(); }, hasErrorLogged(error$1) { return loggedErrors.has(error$1); } }; return logger; } function printServerUrls(urls, optionsHost, info) { const colorUrl = (url$6) => import_picocolors$32.default.cyan(url$6.replace(/:(\d+)\//, (_, port) => `:${import_picocolors$32.default.bold(port)}/`)); for (const url$6 of urls.local) info(` ${import_picocolors$32.default.green("➜")} ${import_picocolors$32.default.bold("Local")}: ${colorUrl(url$6)}`); for (const url$6 of urls.network) info(` ${import_picocolors$32.default.green("➜")} ${import_picocolors$32.default.bold("Network")}: ${colorUrl(url$6)}`); if (urls.network.length === 0 && optionsHost === void 0) info(import_picocolors$32.default.dim(` ${import_picocolors$32.default.green("➜")} ${import_picocolors$32.default.bold("Network")}: use `) + import_picocolors$32.default.bold("--host") + import_picocolors$32.default.dim(" to expose")); } //#endregion //#region src/node/plugins/reporter.ts var import_picocolors$31 = __toESM(require_picocolors(), 1); const groups = [ { name: "Assets", color: import_picocolors$31.default.green }, { name: "CSS", color: import_picocolors$31.default.magenta }, { name: "JS", color: import_picocolors$31.default.cyan } ]; const COMPRESSIBLE_ASSETS_RE = /\.(?:html|json|svg|txt|xml|xhtml|wasm)$/; function buildReporterPlugin(config$2) { const compress = promisify(gzip); const numberFormatter = new Intl.NumberFormat("en", { maximumFractionDigits: 2, minimumFractionDigits: 2 }); const displaySize = (bytes) => { return `${numberFormatter.format(bytes / 1e3)} kB`; }; const tty$2 = process.stdout.isTTY && !process.env.CI; const shouldLogInfo = LogLevels[config$2.logLevel || "info"] >= LogLevels.info; const modulesReporter = shouldLogInfo ? perEnvironmentState((environment) => { let hasTransformed = false; let transformedCount = 0; const logTransform = throttle((id) => { writeLine(`transforming (${transformedCount}) ${import_picocolors$31.default.dim(path.relative(config$2.root, id))}`); }); return { reset() { transformedCount = 0; }, register(id) { transformedCount++; if (!tty$2) { if (!hasTransformed) config$2.logger.info(`transforming...`); } else { if (id.includes(`?`)) return; logTransform(id); } hasTransformed = true; }, log() { if (tty$2) clearLine$1(); environment.logger.info(`${import_picocolors$31.default.green(`✓`)} ${transformedCount} modules transformed.`); } }; }) : void 0; const chunksReporter = perEnvironmentState((environment) => { let hasRenderedChunk = false; let hasCompressChunk = false; let chunkCount = 0; let compressedCount = 0; async function getCompressedSize(code) { if (environment.config.consumer !== "client" || !environment.config.build.reportCompressedSize) return null; if (shouldLogInfo && !hasCompressChunk) { if (!tty$2) config$2.logger.info("computing gzip size..."); else writeLine("computing gzip size (0)..."); hasCompressChunk = true; } const compressed = await compress(typeof code === "string" ? code : Buffer.from(code)); compressedCount++; if (shouldLogInfo && tty$2) writeLine(`computing gzip size (${compressedCount})...`); return compressed.length; } return { reset() { chunkCount = 0; compressedCount = 0; }, register() { chunkCount++; if (shouldLogInfo) { if (!tty$2) { if (!hasRenderedChunk) environment.logger.info("rendering chunks..."); } else writeLine(`rendering chunks (${chunkCount})...`); hasRenderedChunk = true; } }, async log(output, outDir) { const chunkLimit = environment.config.build.chunkSizeWarningLimit; let hasLargeChunks = false; if (shouldLogInfo) { const entries = (await Promise.all(Object.values(output).map(async (chunk) => { if (chunk.type === "chunk") return { name: chunk.fileName, group: "JS", size: Buffer.byteLength(chunk.code), compressedSize: await getCompressedSize(chunk.code), mapSize: chunk.map ? Buffer.byteLength(chunk.map.toString()) : null }; else { if (chunk.fileName.endsWith(".map")) return null; const isCSS = chunk.fileName.endsWith(".css"); const isCompressible = isCSS || COMPRESSIBLE_ASSETS_RE.test(chunk.fileName); return { name: chunk.fileName, group: isCSS ? "CSS" : "Assets", size: Buffer.byteLength(chunk.source), mapSize: null, compressedSize: isCompressible ? await getCompressedSize(chunk.source) : null }; } }))).filter(isDefined); if (tty$2) clearLine$1(); let longest = 0; let biggestSize = 0; let biggestMap = 0; let biggestCompressSize = 0; for (const entry of entries) { if (entry.name.length > longest) longest = entry.name.length; if (entry.size > biggestSize) biggestSize = entry.size; if (entry.mapSize && entry.mapSize > biggestMap) biggestMap = entry.mapSize; if (entry.compressedSize && entry.compressedSize > biggestCompressSize) biggestCompressSize = entry.compressedSize; } const sizePad = displaySize(biggestSize).length; const mapPad = displaySize(biggestMap).length; const compressPad = displaySize(biggestCompressSize).length; const relativeOutDir = normalizePath(path.relative(config$2.root, path.resolve(config$2.root, outDir ?? environment.config.build.outDir))); const assetsDir = path.join(environment.config.build.assetsDir, "/"); for (const group of groups) { const filtered = entries.filter((e$1) => e$1.group === group.name); if (!filtered.length) continue; for (const entry of filtered.sort((a, z) => a.size - z.size)) { const isLarge = group.name === "JS" && entry.size / 1e3 > chunkLimit; if (isLarge) hasLargeChunks = true; const sizeColor = isLarge ? import_picocolors$31.default.yellow : import_picocolors$31.default.dim; let log$2 = import_picocolors$31.default.dim(withTrailingSlash(relativeOutDir)); log$2 += !config$2.build.lib && entry.name.startsWith(withTrailingSlash(assetsDir)) ? import_picocolors$31.default.dim(assetsDir) + group.color(entry.name.slice(assetsDir.length).padEnd(longest + 2 - assetsDir.length)) : group.color(entry.name.padEnd(longest + 2)); log$2 += import_picocolors$31.default.bold(sizeColor(displaySize(entry.size).padStart(sizePad))); if (entry.compressedSize) log$2 += import_picocolors$31.default.dim(` │ gzip: ${displaySize(entry.compressedSize).padStart(compressPad)}`); if (entry.mapSize) log$2 += import_picocolors$31.default.dim(` │ map: ${displaySize(entry.mapSize).padStart(mapPad)}`); config$2.logger.info(log$2); } } } else hasLargeChunks = Object.values(output).some((chunk) => { return chunk.type === "chunk" && chunk.code.length / 1e3 > chunkLimit; }); if (hasLargeChunks && environment.config.build.minify && !config$2.build.lib && environment.config.consumer === "client") environment.logger.warn(import_picocolors$31.default.yellow(`\n(!) Some chunks are larger than ${chunkLimit} kB after minification. Consider:\n- Using dynamic import() to code-split the application\n- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks\n- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.`)); } }; }); return { name: "vite:reporter", sharedDuringBuild: true, perEnvironmentStartEndDuringDev: true, ...modulesReporter ? { transform(_, id) { modulesReporter(this).register(id); }, buildStart() { modulesReporter(this).reset(); }, buildEnd() { modulesReporter(this).log(); } } : {}, renderStart() { chunksReporter(this).reset(); }, renderChunk(_, chunk, options$1) { if (!options$1.inlineDynamicImports) for (const id of chunk.moduleIds) { const module$1 = this.getModuleInfo(id); if (!module$1) continue; if (module$1.importers.length && module$1.dynamicImporters.length) { const detectedIneffectiveDynamicImport = module$1.dynamicImporters.some((id$1) => !isInNodeModules(id$1) && chunk.moduleIds.includes(id$1)); if (detectedIneffectiveDynamicImport) this.warn(`\n(!) ${module$1.id} is dynamically imported by ${module$1.dynamicImporters.join(", ")} but also statically imported by ${module$1.importers.join(", ")}, dynamic import will not move module into another chunk.\n`); } } chunksReporter(this).register(); }, generateBundle() { if (shouldLogInfo && tty$2) clearLine$1(); }, async writeBundle({ dir }, output) { await chunksReporter(this).log(output, dir); } }; } function writeLine(output) { clearLine$1(); if (output.length < process.stdout.columns) process.stdout.write(output); else process.stdout.write(output.substring(0, process.stdout.columns - 1)); } function clearLine$1() { process.stdout.clearLine(0); process.stdout.cursorTo(0); } function throttle(fn) { let timerHandle = null; return (...args) => { if (timerHandle) return; fn(...args); timerHandle = setTimeout(() => { timerHandle = null; }, 100); }; } //#endregion //#region ../../node_modules/.pnpm/tsconfck@3.1.6_typescript@5.7.3/node_modules/tsconfck/src/util.js const POSIX_SEP_RE = new RegExp("\\" + path.posix.sep, "g"); const NATIVE_SEP_RE = new RegExp("\\" + path.sep, "g"); /** @type {Map}*/ const PATTERN_REGEX_CACHE = /* @__PURE__ */ new Map(); const GLOB_ALL_PATTERN = `**/*`; const TS_EXTENSIONS = [ ".ts", ".tsx", ".mts", ".cts" ]; const JS_EXTENSIONS = [ ".js", ".jsx", ".mjs", ".cjs" ]; const TSJS_EXTENSIONS = TS_EXTENSIONS.concat(JS_EXTENSIONS); const TS_EXTENSIONS_RE_GROUP = `\\.(?:${TS_EXTENSIONS.map((ext) => ext.substring(1)).join("|")})`; const TSJS_EXTENSIONS_RE_GROUP = `\\.(?:${TSJS_EXTENSIONS.map((ext) => ext.substring(1)).join("|")})`; const IS_POSIX = path.posix.sep === path.sep; /** * @template T * @returns {{resolve:(result:T)=>void, reject:(error:any)=>void, promise: Promise}} */ function makePromise() { let resolve$4, reject; const promise = new Promise((res, rej) => { resolve$4 = res; reject = rej; }); return { promise, resolve: resolve$4, reject }; } /** * @param {string} filename * @param {import('./cache.js').TSConfckCache} [cache] * @returns {Promise} */ async function resolveTSConfigJson(filename, cache$1) { if (path.extname(filename) !== ".json") return; const tsconfig = path.resolve(filename); if (cache$1 && (cache$1.hasParseResult(tsconfig) || cache$1.hasParseResult(filename))) return tsconfig; return promises.stat(tsconfig).then((stat$4) => { if (stat$4.isFile() || stat$4.isFIFO()) return tsconfig; else throw new Error(`${filename} exists but is not a regular file.`); }); } /** * * @param {string} dir an absolute directory path * @returns {boolean} if dir path includes a node_modules segment */ const isInNodeModules$1 = IS_POSIX ? (dir) => dir.includes("/node_modules/") : (dir) => dir.match(/[/\\]node_modules[/\\]/); /** * convert posix separator to native separator * * eg. * windows: C:/foo/bar -> c:\foo\bar * linux: /foo/bar -> /foo/bar * * @param {string} filename with posix separators * @returns {string} filename with native separators */ const posix2native = IS_POSIX ? (filename) => filename : (filename) => filename.replace(POSIX_SEP_RE, path.sep); /** * convert native separator to posix separator * * eg. * windows: C:\foo\bar -> c:/foo/bar * linux: /foo/bar -> /foo/bar * * @param {string} filename - filename with native separators * @returns {string} filename with posix separators */ const native2posix = IS_POSIX ? (filename) => filename : (filename) => filename.replace(NATIVE_SEP_RE, path.posix.sep); /** * converts params to native separator, resolves path and converts native back to posix * * needed on windows to handle posix paths in tsconfig * * @param dir {string|null} directory to resolve from * @param filename {string} filename or pattern to resolve * @returns string */ const resolve2posix = IS_POSIX ? (dir, filename) => dir ? path.resolve(dir, filename) : path.resolve(filename) : (dir, filename) => native2posix(dir ? path.resolve(posix2native(dir), posix2native(filename)) : path.resolve(posix2native(filename))); /** * * @param {import('./public.d.ts').TSConfckParseResult} result * @param {import('./public.d.ts').TSConfckParseOptions} [options] * @returns {string[]} */ function resolveReferencedTSConfigFiles(result, options$1) { const dir = path.dirname(result.tsconfigFile); return result.tsconfig.references.map((ref) => { const refPath = ref.path.endsWith(".json") ? ref.path : path.join(ref.path, options$1?.configName ?? "tsconfig.json"); return resolve2posix(dir, refPath); }); } /** * @param {string} filename * @param {import('./public.d.ts').TSConfckParseResult} result * @returns {import('./public.d.ts').TSConfckParseResult} */ function resolveSolutionTSConfig(filename, result) { const allowJs = result.tsconfig.compilerOptions?.allowJs; const extensions$1 = allowJs ? TSJS_EXTENSIONS : TS_EXTENSIONS; if (result.referenced && extensions$1.some((ext) => filename.endsWith(ext)) && !isIncluded(filename, result)) { const solutionTSConfig = result.referenced.find((referenced) => isIncluded(filename, referenced)); if (solutionTSConfig) return solutionTSConfig; } return result; } /** * * @param {string} filename * @param {import('./public.d.ts').TSConfckParseResult} result * @returns {boolean} */ function isIncluded(filename, result) { const dir = native2posix(path.dirname(result.tsconfigFile)); const files = (result.tsconfig.files || []).map((file) => resolve2posix(dir, file)); const absoluteFilename = resolve2posix(null, filename); if (files.includes(filename)) return true; const allowJs = result.tsconfig.compilerOptions?.allowJs; const isIncluded$1 = isGlobMatch(absoluteFilename, dir, result.tsconfig.include || (result.tsconfig.files ? [] : [GLOB_ALL_PATTERN]), allowJs); if (isIncluded$1) { const isExcluded = isGlobMatch(absoluteFilename, dir, result.tsconfig.exclude || [], allowJs); return !isExcluded; } return false; } /** * test filenames agains glob patterns in tsconfig * * @param filename {string} posix style abolute path to filename to test * @param dir {string} posix style absolute path to directory of tsconfig containing patterns * @param patterns {string[]} glob patterns to match against * @param allowJs {boolean} allowJs setting in tsconfig to include js extensions in checks * @returns {boolean} true when at least one pattern matches filename */ function isGlobMatch(filename, dir, patterns, allowJs) { const extensions$1 = allowJs ? TSJS_EXTENSIONS : TS_EXTENSIONS; return patterns.some((pattern) => { let lastWildcardIndex = pattern.length; let hasWildcard = false; let hasExtension = false; let hasSlash = false; let lastSlashIndex = -1; for (let i$1 = pattern.length - 1; i$1 > -1; i$1--) { const c = pattern[i$1]; if (!hasWildcard) { if (c === "*" || c === "?") { lastWildcardIndex = i$1; hasWildcard = true; } } if (!hasSlash) { if (c === ".") hasExtension = true; else if (c === "/") { lastSlashIndex = i$1; hasSlash = true; } } if (hasWildcard && hasSlash) break; } if (!hasExtension && (!hasWildcard || lastWildcardIndex < lastSlashIndex)) { pattern += `${pattern.endsWith("/") ? "" : "/"}${GLOB_ALL_PATTERN}`; lastWildcardIndex = pattern.length - 1; hasWildcard = true; } if (lastWildcardIndex < pattern.length - 1 && !filename.endsWith(pattern.slice(lastWildcardIndex + 1))) return false; if (pattern.endsWith("*") && !extensions$1.some((ext) => filename.endsWith(ext))) return false; if (pattern === GLOB_ALL_PATTERN) return filename.startsWith(`${dir}/`); const resolvedPattern = resolve2posix(dir, pattern); let firstWildcardIndex = -1; for (let i$1 = 0; i$1 < resolvedPattern.length; i$1++) if (resolvedPattern[i$1] === "*" || resolvedPattern[i$1] === "?") { firstWildcardIndex = i$1; hasWildcard = true; break; } if (firstWildcardIndex > 1 && !filename.startsWith(resolvedPattern.slice(0, firstWildcardIndex - 1))) return false; if (!hasWildcard) return filename === resolvedPattern; else if (firstWildcardIndex + GLOB_ALL_PATTERN.length === resolvedPattern.length - (pattern.length - 1 - lastWildcardIndex) && resolvedPattern.slice(firstWildcardIndex, firstWildcardIndex + GLOB_ALL_PATTERN.length) === GLOB_ALL_PATTERN) return true; if (PATTERN_REGEX_CACHE.has(resolvedPattern)) return PATTERN_REGEX_CACHE.get(resolvedPattern).test(filename); const regex = pattern2regex(resolvedPattern, allowJs); PATTERN_REGEX_CACHE.set(resolvedPattern, regex); return regex.test(filename); }); } /** * @param {string} resolvedPattern * @param {boolean} allowJs * @returns {RegExp} */ function pattern2regex(resolvedPattern, allowJs) { let regexStr = "^"; for (let i$1 = 0; i$1 < resolvedPattern.length; i$1++) { const char = resolvedPattern[i$1]; if (char === "?") { regexStr += "[^\\/]"; continue; } if (char === "*") { if (resolvedPattern[i$1 + 1] === "*" && resolvedPattern[i$1 + 2] === "/") { i$1 += 2; regexStr += "(?:[^\\/]*\\/)*"; continue; } regexStr += "[^\\/]*"; continue; } if ("/.+^${}()|[]\\".includes(char)) regexStr += `\\`; regexStr += char; } if (resolvedPattern.endsWith("*")) regexStr += allowJs ? TSJS_EXTENSIONS_RE_GROUP : TS_EXTENSIONS_RE_GROUP; regexStr += "$"; return new RegExp(regexStr); } /** * replace tokens like ${configDir} * @param {import('./public.d.ts').TSConfckParseResult} result */ function replaceTokens(result) { if (result.tsconfig) result.tsconfig = JSON.parse(JSON.stringify(result.tsconfig).replaceAll(/"\${configDir}/g, `"${native2posix(path.dirname(result.tsconfigFile))}`)); } //#endregion //#region ../../node_modules/.pnpm/tsconfck@3.1.6_typescript@5.7.3/node_modules/tsconfck/src/find.js /** * find the closest tsconfig.json file * * @param {string} filename - path to file to find tsconfig for (absolute or relative to cwd) * @param {import('./public.d.ts').TSConfckFindOptions} [options] - options * @returns {Promise} absolute path to closest tsconfig.json or null if not found */ async function find(filename, options$1) { let dir = path.dirname(path.resolve(filename)); if (options$1?.ignoreNodeModules && isInNodeModules$1(dir)) return null; const cache$1 = options$1?.cache; const configName = options$1?.configName ?? "tsconfig.json"; if (cache$1?.hasConfigPath(dir, configName)) return cache$1.getConfigPath(dir, configName); const { promise, resolve: resolve$4, reject } = makePromise(); if (options$1?.root && !path.isAbsolute(options$1.root)) options$1.root = path.resolve(options$1.root); findUp(dir, { promise, resolve: resolve$4, reject }, options$1); return promise; } /** * * @param {string} dir * @param {{promise:Promise,resolve:(result:string|null)=>void,reject:(err:any)=>void}} madePromise * @param {import('./public.d.ts').TSConfckFindOptions} [options] - options */ function findUp(dir, { resolve: resolve$4, reject, promise }, options$1) { const { cache: cache$1, root, configName } = options$1 ?? {}; if (cache$1) if (cache$1.hasConfigPath(dir, configName)) { let cached; try { cached = cache$1.getConfigPath(dir, configName); } catch (e$1) { reject(e$1); return; } if (cached?.then) cached.then(resolve$4).catch(reject); else resolve$4(cached); } else cache$1.setConfigPath(dir, promise, configName); const tsconfig = path.join(dir, options$1?.configName ?? "tsconfig.json"); fs.stat(tsconfig, (err$2, stats) => { if (stats && (stats.isFile() || stats.isFIFO())) resolve$4(tsconfig); else if (err$2?.code !== "ENOENT") reject(err$2); else { let parent; if (root === dir || (parent = path.dirname(dir)) === dir) resolve$4(null); else findUp(parent, { promise, resolve: resolve$4, reject }, options$1); } }); } //#endregion //#region ../../node_modules/.pnpm/tsconfck@3.1.6_typescript@5.7.3/node_modules/tsconfck/src/find-all.js /** * @typedef WalkState * @interface * @property {string[]} files - files * @property {number} calls - number of ongoing calls * @property {(dir: string)=>boolean} skip - function to skip dirs * @property {boolean} err - error flag * @property {string[]} configNames - config file names */ const sep$2 = path.sep; //#endregion //#region ../../node_modules/.pnpm/tsconfck@3.1.6_typescript@5.7.3/node_modules/tsconfck/src/to-json.js /** * convert content of tsconfig.json to regular json * * @param {string} tsconfigJson - content of tsconfig.json * @returns {string} content as regular json, comments and dangling commas have been replaced with whitespace */ function toJson(tsconfigJson) { const stripped = stripDanglingComma(stripJsonComments(stripBom(tsconfigJson))); if (stripped.trim() === "") return "{}"; else return stripped; } /** * replace dangling commas from pseudo-json string with single space * implementation heavily inspired by strip-json-comments * * @param {string} pseudoJson * @returns {string} */ function stripDanglingComma(pseudoJson) { let insideString = false; let offset$1 = 0; let result = ""; let danglingCommaPos = null; for (let i$1 = 0; i$1 < pseudoJson.length; i$1++) { const currentCharacter = pseudoJson[i$1]; if (currentCharacter === "\"") { const escaped$1 = isEscaped(pseudoJson, i$1); if (!escaped$1) insideString = !insideString; } if (insideString) { danglingCommaPos = null; continue; } if (currentCharacter === ",") { danglingCommaPos = i$1; continue; } if (danglingCommaPos) { if (currentCharacter === "}" || currentCharacter === "]") { result += pseudoJson.slice(offset$1, danglingCommaPos) + " "; offset$1 = danglingCommaPos + 1; danglingCommaPos = null; } else if (!currentCharacter.match(/\s/)) danglingCommaPos = null; } } return result + pseudoJson.substring(offset$1); } /** * * @param {string} jsonString * @param {number} quotePosition * @returns {boolean} */ function isEscaped(jsonString, quotePosition) { let index = quotePosition - 1; let backslashCount = 0; while (jsonString[index] === "\\") { index -= 1; backslashCount += 1; } return Boolean(backslashCount % 2); } /** * * @param {string} string * @param {number?} start * @param {number?} end */ function strip(string, start, end) { return string.slice(start, end).replace(/\S/g, " "); } const singleComment = Symbol("singleComment"); const multiComment = Symbol("multiComment"); /** * @param {string} jsonString * @returns {string} */ function stripJsonComments(jsonString) { let isInsideString = false; /** @type {false | symbol} */ let isInsideComment = false; let offset$1 = 0; let result = ""; for (let index = 0; index < jsonString.length; index++) { const currentCharacter = jsonString[index]; const nextCharacter = jsonString[index + 1]; if (!isInsideComment && currentCharacter === "\"") { const escaped$1 = isEscaped(jsonString, index); if (!escaped$1) isInsideString = !isInsideString; } if (isInsideString) continue; if (!isInsideComment && currentCharacter + nextCharacter === "//") { result += jsonString.slice(offset$1, index); offset$1 = index; isInsideComment = singleComment; index++; } else if (isInsideComment === singleComment && currentCharacter + nextCharacter === "\r\n") { index++; isInsideComment = false; result += strip(jsonString, offset$1, index); offset$1 = index; } else if (isInsideComment === singleComment && currentCharacter === "\n") { isInsideComment = false; result += strip(jsonString, offset$1, index); offset$1 = index; } else if (!isInsideComment && currentCharacter + nextCharacter === "/*") { result += jsonString.slice(offset$1, index); offset$1 = index; isInsideComment = multiComment; index++; } else if (isInsideComment === multiComment && currentCharacter + nextCharacter === "*/") { index++; isInsideComment = false; result += strip(jsonString, offset$1, index + 1); offset$1 = index + 1; } } return result + (isInsideComment ? strip(jsonString.slice(offset$1)) : jsonString.slice(offset$1)); } /** * @param {string} string * @returns {string} */ function stripBom(string) { if (string.charCodeAt(0) === 65279) return string.slice(1); return string; } //#endregion //#region ../../node_modules/.pnpm/tsconfck@3.1.6_typescript@5.7.3/node_modules/tsconfck/src/parse.js const not_found_result = { tsconfigFile: null, tsconfig: {} }; /** * parse the closest tsconfig.json file * * @param {string} filename - path to a tsconfig .json or a source file or directory (absolute or relative to cwd) * @param {import('./public.d.ts').TSConfckParseOptions} [options] - options * @returns {Promise} * @throws {TSConfckParseError} */ async function parse$14(filename, options$1) { /** @type {import('./cache.js').TSConfckCache} */ const cache$1 = options$1?.cache; if (cache$1?.hasParseResult(filename)) return getParsedDeep(filename, cache$1, options$1); const { resolve: resolve$4, reject, promise } = makePromise(); cache$1?.setParseResult(filename, promise, true); try { let tsconfigFile = await resolveTSConfigJson(filename, cache$1) || await find(filename, options$1); if (!tsconfigFile) { resolve$4(not_found_result); return promise; } let result; if (filename !== tsconfigFile && cache$1?.hasParseResult(tsconfigFile)) result = await getParsedDeep(tsconfigFile, cache$1, options$1); else { result = await parseFile$1(tsconfigFile, cache$1, filename === tsconfigFile); await Promise.all([parseExtends(result, cache$1), parseReferences(result, options$1)]); } replaceTokens(result); resolve$4(resolveSolutionTSConfig(filename, result)); } catch (e$1) { reject(e$1); } return promise; } /** * ensure extends and references are parsed * * @param {string} filename - cached file * @param {import('./cache.js').TSConfckCache} cache - cache * @param {import('./public.d.ts').TSConfckParseOptions} options - options */ async function getParsedDeep(filename, cache$1, options$1) { const result = await cache$1.getParseResult(filename); if (result.tsconfig.extends && !result.extended || result.tsconfig.references && !result.referenced) { const promise = Promise.all([parseExtends(result, cache$1), parseReferences(result, options$1)]).then(() => result); cache$1.setParseResult(filename, promise, true); return promise; } return result; } /** * * @param {string} tsconfigFile - path to tsconfig file * @param {import('./cache.js').TSConfckCache} [cache] - cache * @param {boolean} [skipCache] - skip cache * @returns {Promise} */ async function parseFile$1(tsconfigFile, cache$1, skipCache) { if (!skipCache && cache$1?.hasParseResult(tsconfigFile) && !cache$1.getParseResult(tsconfigFile)._isRootFile_) return cache$1.getParseResult(tsconfigFile); const promise = promises.readFile(tsconfigFile, "utf-8").then(toJson).then((json) => { const parsed = JSON.parse(json); applyDefaults(parsed, tsconfigFile); return { tsconfigFile, tsconfig: normalizeTSConfig(parsed, path.dirname(tsconfigFile)) }; }).catch((e$1) => { throw new TSConfckParseError(`parsing ${tsconfigFile} failed: ${e$1}`, "PARSE_FILE", tsconfigFile, e$1); }); if (!skipCache && (!cache$1?.hasParseResult(tsconfigFile) || !cache$1.getParseResult(tsconfigFile)._isRootFile_)) cache$1?.setParseResult(tsconfigFile, promise); return promise; } /** * normalize to match the output of ts.parseJsonConfigFileContent * * @param {any} tsconfig - typescript tsconfig output * @param {string} dir - directory */ function normalizeTSConfig(tsconfig, dir) { const baseUrl = tsconfig.compilerOptions?.baseUrl; if (baseUrl && !baseUrl.startsWith("${") && !path.isAbsolute(baseUrl)) tsconfig.compilerOptions.baseUrl = resolve2posix(dir, baseUrl); return tsconfig; } /** * * @param {import('./public.d.ts').TSConfckParseResult} result * @param {import('./public.d.ts').TSConfckParseOptions} [options] * @returns {Promise} */ async function parseReferences(result, options$1) { if (!result.tsconfig.references) return; const referencedFiles = resolveReferencedTSConfigFiles(result, options$1); const referenced = await Promise.all(referencedFiles.map((file) => parseFile$1(file, options$1?.cache))); await Promise.all(referenced.map((ref) => parseExtends(ref, options$1?.cache))); referenced.forEach((ref) => { ref.solution = result; replaceTokens(ref); }); result.referenced = referenced; } /** * @param {import('./public.d.ts').TSConfckParseResult} result * @param {import('./cache.js').TSConfckCache}[cache] * @returns {Promise} */ async function parseExtends(result, cache$1) { if (!result.tsconfig.extends) return; /** @type {import('./public.d.ts').TSConfckParseResult[]} */ const extended = [{ tsconfigFile: result.tsconfigFile, tsconfig: JSON.parse(JSON.stringify(result.tsconfig)) }]; let pos = 0; /** @type {string[]} */ const extendsPath = []; let currentBranchDepth = 0; while (pos < extended.length) { const extending = extended[pos]; extendsPath.push(extending.tsconfigFile); if (extending.tsconfig.extends) { currentBranchDepth += 1; /** @type {string[]} */ let resolvedExtends; if (!Array.isArray(extending.tsconfig.extends)) resolvedExtends = [resolveExtends(extending.tsconfig.extends, extending.tsconfigFile)]; else resolvedExtends = extending.tsconfig.extends.reverse().map((ex) => resolveExtends(ex, extending.tsconfigFile)); const circularExtends = resolvedExtends.find((tsconfigFile) => extendsPath.includes(tsconfigFile)); if (circularExtends) { const circle = extendsPath.concat([circularExtends]).join(" -> "); throw new TSConfckParseError(`Circular dependency in "extends": ${circle}`, "EXTENDS_CIRCULAR", result.tsconfigFile); } extended.splice(pos + 1, 0, ...await Promise.all(resolvedExtends.map((file) => parseFile$1(file, cache$1)))); } else { extendsPath.splice(-currentBranchDepth); currentBranchDepth = 0; } pos = pos + 1; } result.extended = extended; for (const ext of result.extended.slice(1)) extendTSConfig(result, ext); } /** * * @param {string} extended * @param {string} from * @returns {string} */ function resolveExtends(extended, from) { if ([".", ".."].includes(extended)) extended = extended + "/tsconfig.json"; const req$4 = createRequire$1(from); let error$1; try { return req$4.resolve(extended); } catch (e$1) { error$1 = e$1; } if (extended[0] !== "." && !path.isAbsolute(extended)) try { return req$4.resolve(`${extended}/tsconfig.json`); } catch (e$1) { error$1 = e$1; } throw new TSConfckParseError(`failed to resolve "extends":"${extended}" in ${from}`, "EXTENDS_RESOLVE", from, error$1); } const EXTENDABLE_KEYS = [ "compilerOptions", "files", "include", "exclude", "watchOptions", "compileOnSave", "typeAcquisition", "buildOptions" ]; /** * * @param {import('./public.d.ts').TSConfckParseResult} extending * @param {import('./public.d.ts').TSConfckParseResult} extended * @returns void */ function extendTSConfig(extending, extended) { const extendingConfig = extending.tsconfig; const extendedConfig = extended.tsconfig; const relativePath = native2posix(path.relative(path.dirname(extending.tsconfigFile), path.dirname(extended.tsconfigFile))); for (const key of Object.keys(extendedConfig).filter((key$1) => EXTENDABLE_KEYS.includes(key$1))) if (key === "compilerOptions") { if (!extendingConfig.compilerOptions) extendingConfig.compilerOptions = {}; for (const option of Object.keys(extendedConfig.compilerOptions)) { if (Object.prototype.hasOwnProperty.call(extendingConfig.compilerOptions, option)) continue; extendingConfig.compilerOptions[option] = rebaseRelative(option, extendedConfig.compilerOptions[option], relativePath); } } else if (extendingConfig[key] === void 0) if (key === "watchOptions") { extendingConfig.watchOptions = {}; for (const option of Object.keys(extendedConfig.watchOptions)) extendingConfig.watchOptions[option] = rebaseRelative(option, extendedConfig.watchOptions[option], relativePath); } else extendingConfig[key] = rebaseRelative(key, extendedConfig[key], relativePath); } const REBASE_KEYS = [ "files", "include", "exclude", "baseUrl", "rootDir", "rootDirs", "typeRoots", "outDir", "outFile", "declarationDir", "excludeDirectories", "excludeFiles" ]; /** @typedef {string | string[]} PathValue */ /** * * @param {string} key * @param {PathValue} value * @param {string} prependPath * @returns {PathValue} */ function rebaseRelative(key, value$1, prependPath) { if (!REBASE_KEYS.includes(key)) return value$1; if (Array.isArray(value$1)) return value$1.map((x) => rebasePath(x, prependPath)); else return rebasePath(value$1, prependPath); } /** * * @param {string} value * @param {string} prependPath * @returns {string} */ function rebasePath(value$1, prependPath) { if (path.isAbsolute(value$1) || value$1.startsWith("${configDir}")) return value$1; else return path.posix.normalize(path.posix.join(prependPath, value$1)); } var TSConfckParseError = class TSConfckParseError extends Error { /** * error code * @type {string} */ code; /** * error cause * @type { Error | undefined} */ cause; /** * absolute path of tsconfig file where the error happened * @type {string} */ tsconfigFile; /** * * @param {string} message - error message * @param {string} code - error code * @param {string} tsconfigFile - path to tsconfig file * @param {Error?} cause - cause of this error */ constructor(message, code, tsconfigFile, cause) { super(message); Object.setPrototypeOf(this, TSConfckParseError.prototype); this.name = TSConfckParseError.name; this.code = code; this.cause = cause; this.tsconfigFile = tsconfigFile; } }; /** * * @param {any} tsconfig * @param {string} tsconfigFile */ function applyDefaults(tsconfig, tsconfigFile) { if (isJSConfig(tsconfigFile)) tsconfig.compilerOptions = { ...DEFAULT_JSCONFIG_COMPILER_OPTIONS, ...tsconfig.compilerOptions }; } const DEFAULT_JSCONFIG_COMPILER_OPTIONS = { allowJs: true, maxNodeModuleJsDepth: 2, allowSyntheticDefaultImports: true, skipLibCheck: true, noEmit: true }; /** * @param {string} configFileName */ function isJSConfig(configFileName) { return path.basename(configFileName) === "jsconfig.json"; } //#endregion //#region ../../node_modules/.pnpm/tsconfck@3.1.6_typescript@5.7.3/node_modules/tsconfck/src/parse-native.js /** @typedef TSDiagnosticError { code: number; category: number; messageText: string; start?: number; } TSDiagnosticError */ //#endregion //#region ../../node_modules/.pnpm/tsconfck@3.1.6_typescript@5.7.3/node_modules/tsconfck/src/cache.js /** @template T */ var TSConfckCache = class { /** * clear cache, use this if you have a long running process and tsconfig files have been added,changed or deleted */ clear() { this.#configPaths.clear(); this.#parsed.clear(); } /** * has cached closest config for files in dir * @param {string} dir * @param {string} [configName=tsconfig.json] * @returns {boolean} */ hasConfigPath(dir, configName = "tsconfig.json") { return this.#configPaths.has(`${dir}/${configName}`); } /** * get cached closest tsconfig for files in dir * @param {string} dir * @param {string} [configName=tsconfig.json] * @returns {Promise|string|null} * @throws {unknown} if cached value is an error */ getConfigPath(dir, configName = "tsconfig.json") { const key = `${dir}/${configName}`; const value$1 = this.#configPaths.get(key); if (value$1 == null || value$1.length || value$1.then) return value$1; else throw value$1; } /** * has parsed tsconfig for file * @param {string} file * @returns {boolean} */ hasParseResult(file) { return this.#parsed.has(file); } /** * get parsed tsconfig for file * @param {string} file * @returns {Promise|T} * @throws {unknown} if cached value is an error */ getParseResult(file) { const value$1 = this.#parsed.get(file); if (value$1.then || value$1.tsconfig) return value$1; else throw value$1; } /** * @internal * @private * @param file * @param {boolean} isRootFile a flag to check if current file which involking the parse() api, used to distinguish the normal cache which only parsed by parseFile() * @param {Promise} result */ setParseResult(file, result, isRootFile = false) { Object.defineProperty(result, "_isRootFile_", { value: isRootFile, writable: false, enumerable: false, configurable: false }); this.#parsed.set(file, result); result.then((parsed) => { if (this.#parsed.get(file) === result) this.#parsed.set(file, parsed); }).catch((e$1) => { if (this.#parsed.get(file) === result) this.#parsed.set(file, e$1); }); } /** * @internal * @private * @param {string} dir * @param {Promise} configPath * @param {string} [configName=tsconfig.json] */ setConfigPath(dir, configPath, configName = "tsconfig.json") { const key = `${dir}/${configName}`; this.#configPaths.set(key, configPath); configPath.then((path$13) => { if (this.#configPaths.get(key) === configPath) this.#configPaths.set(key, path$13); }).catch((e$1) => { if (this.#configPaths.get(key) === configPath) this.#configPaths.set(key, e$1); }); } /** * map directories to their closest tsconfig.json * @internal * @private * @type{Map|string|null)>} */ #configPaths = /* @__PURE__ */ new Map(); /** * map files to their parsed tsconfig result * @internal * @private * @type {Map|T)> } */ #parsed = /* @__PURE__ */ new Map(); }; //#endregion //#region src/node/plugins/esbuild.ts var import_picocolors$30 = __toESM(require_picocolors(), 1); const debug$17 = createDebugger("vite:esbuild"); const IIFE_BEGIN_RE = /(?:const|var)\s+\S+\s*=\s*function\([^()]*\)\s*\{\s*"use strict";/; const validExtensionRE = /\.\w+$/; const jsxExtensionsRE = /\.(?:j|t)sx\b/; const defaultEsbuildSupported = { "dynamic-import": true, "import-meta": true }; async function transformWithEsbuild(code, filename, options$1, inMap, config$2, watcher) { let loader$1 = options$1?.loader; if (!loader$1) { const ext = path.extname(validExtensionRE.test(filename) ? filename : cleanUrl(filename)).slice(1); if (ext === "cjs" || ext === "mjs") loader$1 = "js"; else if (ext === "cts" || ext === "mts") loader$1 = "ts"; else loader$1 = ext; } let tsconfigRaw = options$1?.tsconfigRaw; if (typeof tsconfigRaw !== "string") { const meaningfulFields = [ "alwaysStrict", "experimentalDecorators", "importsNotUsedAsValues", "jsx", "jsxFactory", "jsxFragmentFactory", "jsxImportSource", "preserveValueImports", "target", "useDefineForClassFields", "verbatimModuleSyntax" ]; const compilerOptionsForFile = {}; if (loader$1 === "ts" || loader$1 === "tsx") try { const { tsconfig: loadedTsconfig, tsconfigFile } = await loadTsconfigJsonForFile(filename, config$2); if (watcher && tsconfigFile && config$2) ensureWatchedFile(watcher, tsconfigFile, config$2.root); const loadedCompilerOptions = loadedTsconfig.compilerOptions ?? {}; for (const field of meaningfulFields) if (field in loadedCompilerOptions) compilerOptionsForFile[field] = loadedCompilerOptions[field]; } catch (e$1) { if (e$1 instanceof TSConfckParseError) { if (watcher && e$1.tsconfigFile && config$2) ensureWatchedFile(watcher, e$1.tsconfigFile, config$2.root); } throw e$1; } const compilerOptions = { ...compilerOptionsForFile, ...tsconfigRaw?.compilerOptions }; if (compilerOptions.useDefineForClassFields === void 0 && compilerOptions.target === void 0) compilerOptions.useDefineForClassFields = false; if (options$1) { if (options$1.jsx) compilerOptions.jsx = void 0; if (options$1.jsxFactory) compilerOptions.jsxFactory = void 0; if (options$1.jsxFragment) compilerOptions.jsxFragmentFactory = void 0; if (options$1.jsxImportSource) compilerOptions.jsxImportSource = void 0; } tsconfigRaw = { ...tsconfigRaw, compilerOptions }; } const resolvedOptions = { sourcemap: true, sourcefile: filename, ...options$1, loader: loader$1, tsconfigRaw }; delete resolvedOptions.include; delete resolvedOptions.exclude; delete resolvedOptions.jsxInject; try { const result = await transform(code, resolvedOptions); let map$1; if (inMap && resolvedOptions.sourcemap) { const nextMap = JSON.parse(result.map); nextMap.sourcesContent = []; map$1 = combineSourcemaps(filename, [nextMap, inMap]); } else map$1 = resolvedOptions.sourcemap && resolvedOptions.sourcemap !== "inline" ? JSON.parse(result.map) : { mappings: "" }; return { ...result, map: map$1 }; } catch (e$1) { debug$17?.(`esbuild error with options used: `, resolvedOptions); if (e$1.errors) { e$1.frame = ""; e$1.errors.forEach((m$2) => { if (m$2.text === "Experimental decorators are not currently enabled" || m$2.text === "Parameter decorators only work when experimental decorators are enabled") m$2.text += ". Vite 5 now uses esbuild 0.18 and you need to enable them by adding \"experimentalDecorators\": true in your \"tsconfig.json\" file."; e$1.frame += `\n` + prettifyMessage(m$2, code); }); e$1.loc = e$1.errors[0].location; } throw e$1; } } function esbuildPlugin(config$2) { const options$1 = config$2.esbuild; const { jsxInject, include, exclude,...esbuildTransformOptions } = options$1; const filter$1 = createFilter(include || /\.(m?ts|[jt]sx)$/, exclude || /\.js$/); const transformOptions = { target: "esnext", charset: "utf8", ...esbuildTransformOptions, minify: false, minifyIdentifiers: false, minifySyntax: false, minifyWhitespace: false, treeShaking: false, keepNames: false, supported: { ...defaultEsbuildSupported, ...esbuildTransformOptions.supported } }; let server; return { name: "vite:esbuild", configureServer(_server) { server = _server; }, async transform(code, id) { if (filter$1(id) || filter$1(cleanUrl(id))) { const result = await transformWithEsbuild(code, id, transformOptions, void 0, config$2, server?.watcher); if (result.warnings.length) result.warnings.forEach((m$2) => { this.warn(prettifyMessage(m$2, code)); }); if (jsxInject && jsxExtensionsRE.test(id)) result.code = jsxInject + ";" + result.code; return { code: result.code, map: result.map }; } } }; } const rollupToEsbuildFormatMap = { es: "esm", cjs: "cjs", iife: void 0 }; const buildEsbuildPlugin = () => { return { name: "vite:esbuild-transpile", applyToEnvironment(environment) { return environment.config.esbuild !== false; }, async renderChunk(code, chunk, opts) { if (opts.__vite_skip_esbuild__) return null; const config$2 = this.environment.config; const options$1 = resolveEsbuildTranspileOptions(config$2, opts.format); if (!options$1) return null; const res = await transformWithEsbuild(code, chunk.fileName, options$1, void 0, config$2); if (config$2.build.lib) { const esbuildCode = res.code; const contentIndex = opts.format === "iife" ? Math.max(esbuildCode.search(IIFE_BEGIN_RE), 0) : opts.format === "umd" ? esbuildCode.indexOf(`(function(`) : 0; if (contentIndex > 0) { const esbuildHelpers = esbuildCode.slice(0, contentIndex); res.code = esbuildCode.slice(contentIndex).replace(`"use strict";`, `"use strict";` + esbuildHelpers); } } return res; } }; }; function resolveEsbuildTranspileOptions(config$2, format$3) { const target = config$2.build.target; const minify = config$2.build.minify === "esbuild"; if ((!target || target === "esnext") && !minify) return null; const isEsLibBuild = config$2.build.lib && format$3 === "es"; const esbuildOptions = config$2.esbuild || {}; const options$1 = { charset: "utf8", ...esbuildOptions, loader: "js", target: target || void 0, format: rollupToEsbuildFormatMap[format$3], supported: { ...defaultEsbuildSupported, ...esbuildOptions.supported } }; if (!minify) return { ...options$1, minify: false, minifyIdentifiers: false, minifySyntax: false, minifyWhitespace: false, treeShaking: false }; if (options$1.minifyIdentifiers != null || options$1.minifySyntax != null || options$1.minifyWhitespace != null) if (isEsLibBuild) return { ...options$1, minify: false, minifyIdentifiers: options$1.minifyIdentifiers ?? true, minifySyntax: options$1.minifySyntax ?? true, minifyWhitespace: false, treeShaking: true }; else return { ...options$1, minify: false, minifyIdentifiers: options$1.minifyIdentifiers ?? true, minifySyntax: options$1.minifySyntax ?? true, minifyWhitespace: options$1.minifyWhitespace ?? true, treeShaking: true }; if (isEsLibBuild) return { ...options$1, minify: false, minifyIdentifiers: true, minifySyntax: true, minifyWhitespace: false, treeShaking: true }; else return { ...options$1, minify: true, treeShaking: true }; } function prettifyMessage(m$2, code) { let res = import_picocolors$30.default.yellow(m$2.text); if (m$2.location) res += `\n` + generateCodeFrame(code, m$2.location); return res + `\n`; } let globalTSConfckCache; const tsconfckCacheMap = /* @__PURE__ */ new WeakMap(); function getTSConfckCache(config$2) { if (!config$2) return globalTSConfckCache ??= new TSConfckCache(); let cache$1 = tsconfckCacheMap.get(config$2); if (!cache$1) { cache$1 = new TSConfckCache(); tsconfckCacheMap.set(config$2, cache$1); } return cache$1; } async function loadTsconfigJsonForFile(filename, config$2) { const { tsconfig, tsconfigFile } = await parse$14(filename, { cache: getTSConfckCache(config$2), ignoreNodeModules: true }); return { tsconfigFile, tsconfig }; } async function reloadOnTsconfigChange(server, changedFile) { if (changedFile.endsWith(".json")) { const cache$1 = getTSConfckCache(server.config); if (changedFile.endsWith("/tsconfig.json") || cache$1.hasParseResult(changedFile)) { server.config.logger.info(`changed tsconfig file detected: ${changedFile} - Clearing cache and forcing full-reload to ensure TypeScript is compiled with updated config values.`, { clear: server.config.clearScreen, timestamp: true }); for (const environment of Object.values(server.environments)) environment.moduleGraph.invalidateAll(); cache$1.clear(); for (const environment of Object.values(server.environments)) environment.hot.send({ type: "full-reload", path: "*" }); } } } //#endregion //#region ../../node_modules/.pnpm/artichokie@0.3.1/node_modules/artichokie/dist/index.js var AsyncFunction = async function() {}.constructor; var codeToDataUrl = (code) => `data:application/javascript,${encodeURIComponent(code + "\n//# sourceURL=[worker-eval(artichokie)]")}`; var viteSsrDynamicImport = "__vite_ssr_dynamic_import__"; var Worker$1 = class { /** @internal */ _isModule; /** @internal */ _code; /** @internal */ _parentFunctions; /** @internal */ _max; /** @internal */ _pool; /** @internal */ _idlePool; /** @internal */ _queue; constructor(fn, options$1 = {}) { this._isModule = options$1.type === "module"; this._code = genWorkerCode(fn, this._isModule, options$1.parentFunctions ?? {}); this._parentFunctions = options$1.parentFunctions ?? {}; const defaultMax = Math.max(1, (os.availableParallelism?.() ?? os.cpus().length) - 1); this._max = options$1.max || defaultMax; this._pool = []; this._idlePool = []; this._queue = []; } async run(...args) { const worker = await this._getAvailableWorker(); return new Promise((resolve$4, reject) => { worker.currentResolve = resolve$4; worker.currentReject = reject; worker.postMessage({ args }); }); } stop() { this._pool.forEach((w$1) => w$1.unref()); this._queue.forEach(([, reject]) => reject(/* @__PURE__ */ new Error("Main worker pool stopped before a worker was available."))); this._pool = []; this._idlePool = []; this._queue = []; } /** @internal */ _createWorker(parentFunctionSyncMessagePort, parentFunctionAsyncMessagePort, lockState) { const options$1 = { workerData: [ parentFunctionSyncMessagePort, parentFunctionAsyncMessagePort, lockState ], transferList: [parentFunctionSyncMessagePort, parentFunctionAsyncMessagePort] }; if (this._isModule) return new Worker(new URL(codeToDataUrl(this._code)), options$1); return new Worker(this._code, { ...options$1, eval: true }); } /** @internal */ async _getAvailableWorker() { if (this._idlePool.length) return this._idlePool.shift(); if (this._pool.length < this._max) { const parentFunctionResponder = createParentFunctionResponder(this._parentFunctions); const worker = this._createWorker(parentFunctionResponder.workerPorts.sync, parentFunctionResponder.workerPorts.async, parentFunctionResponder.lockState); worker.on("message", async (args) => { if ("result" in args) { worker.currentResolve?.(args.result); worker.currentResolve = null; } else { if (args.error instanceof ReferenceError) args.error.message += ". Maybe you forgot to pass the function to parentFunction?"; worker.currentReject?.(args.error); worker.currentReject = null; } this._assignDoneWorker(worker); }); worker.on("error", (err$2) => { worker.currentReject?.(err$2); worker.currentReject = null; parentFunctionResponder.close(); }); worker.on("exit", (code) => { const i$1 = this._pool.indexOf(worker); if (i$1 > -1) this._pool.splice(i$1, 1); if (code !== 0 && worker.currentReject) { worker.currentReject(/* @__PURE__ */ new Error(`Worker stopped with non-0 exit code ${code}`)); worker.currentReject = null; parentFunctionResponder.close(); } }); this._pool.push(worker); return worker; } let resolve$4; let reject; const onWorkerAvailablePromise = new Promise((r$2, rj) => { resolve$4 = r$2; reject = rj; }); this._queue.push([resolve$4, reject]); return onWorkerAvailablePromise; } /** @internal */ _assignDoneWorker(worker) { if (this._queue.length) { const [resolve$4] = this._queue.shift(); resolve$4(worker); return; } this._idlePool.push(worker); } }; function createParentFunctionResponder(parentFunctions) { const lockState = new Int32Array(new SharedArrayBuffer(4)); const unlock = () => { Atomics.store(lockState, 0, 0); Atomics.notify(lockState, 0); }; const parentFunctionSyncMessageChannel = new MessageChannel(); const parentFunctionAsyncMessageChannel = new MessageChannel(); const parentFunctionSyncMessagePort = parentFunctionSyncMessageChannel.port1; const parentFunctionAsyncMessagePort = parentFunctionAsyncMessageChannel.port1; const syncResponse = (data) => { parentFunctionSyncMessagePort.postMessage(data); unlock(); }; parentFunctionSyncMessagePort.on("message", async (args) => { let syncResult; try { syncResult = parentFunctions[args.name](...args.args); } catch (error$1) { syncResponse({ id: args.id, error: error$1 }); return; } if (!(typeof syncResult === "object" && syncResult !== null && "then" in syncResult && typeof syncResult.then === "function")) { syncResponse({ id: args.id, result: syncResult }); return; } syncResponse({ id: args.id, isAsync: true }); try { const result = await syncResult; parentFunctionAsyncMessagePort.postMessage({ id: args.id, result }); } catch (error$1) { parentFunctionAsyncMessagePort.postMessage({ id: args.id, error: error$1 }); } }); parentFunctionSyncMessagePort.unref(); return { close: () => { parentFunctionSyncMessagePort.close(); parentFunctionAsyncMessagePort.close(); }, lockState, workerPorts: { sync: parentFunctionSyncMessageChannel.port2, async: parentFunctionAsyncMessageChannel.port2 } }; } function genWorkerCode(fn, isModule, parentFunctions) { const createLock = (lockState) => { return { lock: () => { Atomics.store(lockState, 0, 1); }, waitUnlock: () => { const status$1 = Atomics.wait(lockState, 0, 1, 10 * 1e3); if (status$1 === "timed-out") throw new Error(status$1); } }; }; const createParentFunctionRequester = (syncPort, asyncPort, receive, lock) => { let id = 0; const resolvers = /* @__PURE__ */ new Map(); const call$1 = (key) => (...args) => { id++; lock.lock(); syncPort.postMessage({ id, name: key, args }); lock.waitUnlock(); const resArgs = receive(syncPort).message; if (resArgs.isAsync) { let resolve$4, reject; const promise = new Promise((res, rej) => { resolve$4 = res; reject = rej; }); resolvers.set(id, { resolve: resolve$4, reject }); return promise; } if ("error" in resArgs) throw resArgs.error; else return resArgs.result; }; asyncPort.on("message", (args) => { const id2 = args.id; if (resolvers.has(id2)) { const { resolve: resolve$4, reject } = resolvers.get(id2); resolvers.delete(id2); if ("result" in args) resolve$4(args.result); else reject(args.error); } }); return { call: call$1 }; }; const fnString = fn.toString().replaceAll(viteSsrDynamicImport, "import"); return ` ${isModule ? "import { parentPort, receiveMessageOnPort, workerData } from 'worker_threads'" : "const { parentPort, receiveMessageOnPort, workerData } = require('worker_threads')"} const [parentFunctionSyncMessagePort, parentFunctionAsyncMessagePort, lockState] = workerData const createLock = ${createLock.toString()} const parentFunctionRequester = (${createParentFunctionRequester.toString()})( parentFunctionSyncMessagePort, parentFunctionAsyncMessagePort, receiveMessageOnPort, createLock(lockState) ) const doWorkPromise = (async () => { ${Object.keys(parentFunctions).map((key) => `const ${key} = parentFunctionRequester.call(${JSON.stringify(key)});`).join("\n")} return await (${fnString})() })() let doWork parentPort.on('message', async (args) => { doWork ||= await doWorkPromise try { const res = await doWork(...args.args) parentPort.postMessage({ result: res }) } catch (e) { parentPort.postMessage({ error: e }) } }) `; } var importRe = /\bimport\s*\(/; var internalImportName = "__artichokie_local_import__"; var FakeWorker = class { /** @internal */ _fn; constructor(fn, options$1 = {}) { const declareRequire = options$1.type !== "module"; const argsAndCode = genFakeWorkerArgsAndCode(fn, declareRequire, options$1.parentFunctions ?? {}); const localImport = (specifier) => import(specifier); const args = [ ...declareRequire ? [createRequire(import.meta.url)] : [], localImport, options$1.parentFunctions ]; this._fn = new AsyncFunction(...argsAndCode)(...args); } async run(...args) { try { return await (await this._fn)(...args); } catch (err$2) { if (err$2 instanceof ReferenceError) err$2.message += ". Maybe you forgot to pass the function to parentFunction?"; throw err$2; } } stop() {} }; function genFakeWorkerArgsAndCode(fn, declareRequire, parentFunctions) { const fnString = fn.toString().replace(importRe, `${internalImportName}(`).replaceAll(viteSsrDynamicImport, internalImportName); return [ ...declareRequire ? ["require"] : [], internalImportName, "parentFunctions", ` ${Object.keys(parentFunctions).map((key) => `const ${key} = parentFunctions[${JSON.stringify(key)}];`).join("\n")} return await (${fnString})() ` ]; } var WorkerWithFallback = class { /** @internal */ _disableReal; /** @internal */ _realWorker; /** @internal */ _fakeWorker; /** @internal */ _shouldUseFake; constructor(fn, options$1) { this._disableReal = options$1.max !== void 0 && options$1.max <= 0; this._realWorker = new Worker$1(fn, options$1); this._fakeWorker = new FakeWorker(fn, options$1); this._shouldUseFake = options$1.shouldUseFake; } async run(...args) { const useFake = this._disableReal || this._shouldUseFake(...args); return this[useFake ? "_fakeWorker" : "_realWorker"].run(...args); } stop() { this._realWorker.stop(); this._fakeWorker.stop(); } }; //#endregion //#region src/node/plugins/terser.ts let terserPath; const loadTerserPath = (root) => { if (terserPath) return terserPath; try { terserPath = requireResolveFromRootWithFallback(root, "terser"); } catch (e$1) { if (e$1.code === "MODULE_NOT_FOUND") throw new Error("terser not found. Since Vite v3, terser has become an optional dependency. You need to install it."); else { const message = /* @__PURE__ */ new Error(`terser failed to load:\n${e$1.message}`); message.stack = e$1.stack + "\n" + message.stack; throw message; } } return terserPath; }; function terserPlugin(config$2) { const { maxWorkers,...terserOptions } = config$2.build.terserOptions; const makeWorker = () => new WorkerWithFallback(() => async (terserPath$1, code, options$1) => { const terser = require(terserPath$1); return terser.minify(code, options$1); }, { shouldUseFake(_terserPath, _code, options$1) { return !!(typeof options$1.mangle === "object" && (options$1.mangle.nth_identifier?.get || typeof options$1.mangle.properties === "object" && options$1.mangle.properties.nth_identifier?.get) || typeof options$1.format?.comments === "function" || typeof options$1.output?.comments === "function"); }, max: maxWorkers }); let worker; return { name: "vite:terser", applyToEnvironment(environment) { return !!environment.config.build.minify; }, async renderChunk(code, _chunk, outputOptions) { if (config$2.build.minify !== "terser" && !outputOptions.__vite_force_terser__) return null; if (config$2.build.lib && outputOptions.format === "es") return null; worker ||= makeWorker(); const terserPath$1 = loadTerserPath(config$2.root); const res = await worker.run(terserPath$1, code, { safari10: true, ...terserOptions, sourceMap: !!outputOptions.sourcemap, module: outputOptions.format.startsWith("es"), toplevel: outputOptions.format === "cjs" }); return { code: res.code, map: res.map }; }, closeBundle() { worker?.stop(); } }; } //#endregion //#region ../../node_modules/.pnpm/mrmime@2.0.1/node_modules/mrmime/index.mjs const mimes = { "3g2": "video/3gpp2", "3gp": "video/3gpp", "3gpp": "video/3gpp", "3mf": "model/3mf", "aac": "audio/aac", "ac": "application/pkix-attr-cert", "adp": "audio/adpcm", "adts": "audio/aac", "ai": "application/postscript", "aml": "application/automationml-aml+xml", "amlx": "application/automationml-amlx+zip", "amr": "audio/amr", "apng": "image/apng", "appcache": "text/cache-manifest", "appinstaller": "application/appinstaller", "appx": "application/appx", "appxbundle": "application/appxbundle", "asc": "application/pgp-keys", "atom": "application/atom+xml", "atomcat": "application/atomcat+xml", "atomdeleted": "application/atomdeleted+xml", "atomsvc": "application/atomsvc+xml", "au": "audio/basic", "avci": "image/avci", "avcs": "image/avcs", "avif": "image/avif", "aw": "application/applixware", "bdoc": "application/bdoc", "bin": "application/octet-stream", "bmp": "image/bmp", "bpk": "application/octet-stream", "btf": "image/prs.btif", "btif": "image/prs.btif", "buffer": "application/octet-stream", "ccxml": "application/ccxml+xml", "cdfx": "application/cdfx+xml", "cdmia": "application/cdmi-capability", "cdmic": "application/cdmi-container", "cdmid": "application/cdmi-domain", "cdmio": "application/cdmi-object", "cdmiq": "application/cdmi-queue", "cer": "application/pkix-cert", "cgm": "image/cgm", "cjs": "application/node", "class": "application/java-vm", "coffee": "text/coffeescript", "conf": "text/plain", "cpl": "application/cpl+xml", "cpt": "application/mac-compactpro", "crl": "application/pkix-crl", "css": "text/css", "csv": "text/csv", "cu": "application/cu-seeme", "cwl": "application/cwl", "cww": "application/prs.cww", "davmount": "application/davmount+xml", "dbk": "application/docbook+xml", "deb": "application/octet-stream", "def": "text/plain", "deploy": "application/octet-stream", "dib": "image/bmp", "disposition-notification": "message/disposition-notification", "dist": "application/octet-stream", "distz": "application/octet-stream", "dll": "application/octet-stream", "dmg": "application/octet-stream", "dms": "application/octet-stream", "doc": "application/msword", "dot": "application/msword", "dpx": "image/dpx", "drle": "image/dicom-rle", "dsc": "text/prs.lines.tag", "dssc": "application/dssc+der", "dtd": "application/xml-dtd", "dump": "application/octet-stream", "dwd": "application/atsc-dwd+xml", "ear": "application/java-archive", "ecma": "application/ecmascript", "elc": "application/octet-stream", "emf": "image/emf", "eml": "message/rfc822", "emma": "application/emma+xml", "emotionml": "application/emotionml+xml", "eps": "application/postscript", "epub": "application/epub+zip", "exe": "application/octet-stream", "exi": "application/exi", "exp": "application/express", "exr": "image/aces", "ez": "application/andrew-inset", "fdf": "application/fdf", "fdt": "application/fdt+xml", "fits": "image/fits", "g3": "image/g3fax", "gbr": "application/rpki-ghostbusters", "geojson": "application/geo+json", "gif": "image/gif", "glb": "model/gltf-binary", "gltf": "model/gltf+json", "gml": "application/gml+xml", "gpx": "application/gpx+xml", "gram": "application/srgs", "grxml": "application/srgs+xml", "gxf": "application/gxf", "gz": "application/gzip", "h261": "video/h261", "h263": "video/h263", "h264": "video/h264", "heic": "image/heic", "heics": "image/heic-sequence", "heif": "image/heif", "heifs": "image/heif-sequence", "hej2": "image/hej2k", "held": "application/atsc-held+xml", "hjson": "application/hjson", "hlp": "application/winhlp", "hqx": "application/mac-binhex40", "hsj2": "image/hsj2", "htm": "text/html", "html": "text/html", "ics": "text/calendar", "ief": "image/ief", "ifb": "text/calendar", "iges": "model/iges", "igs": "model/iges", "img": "application/octet-stream", "in": "text/plain", "ini": "text/plain", "ink": "application/inkml+xml", "inkml": "application/inkml+xml", "ipfix": "application/ipfix", "iso": "application/octet-stream", "its": "application/its+xml", "jade": "text/jade", "jar": "application/java-archive", "jhc": "image/jphc", "jls": "image/jls", "jp2": "image/jp2", "jpe": "image/jpeg", "jpeg": "image/jpeg", "jpf": "image/jpx", "jpg": "image/jpeg", "jpg2": "image/jp2", "jpgm": "image/jpm", "jpgv": "video/jpeg", "jph": "image/jph", "jpm": "image/jpm", "jpx": "image/jpx", "js": "text/javascript", "json": "application/json", "json5": "application/json5", "jsonld": "application/ld+json", "jsonml": "application/jsonml+json", "jsx": "text/jsx", "jt": "model/jt", "jxl": "image/jxl", "jxr": "image/jxr", "jxra": "image/jxra", "jxrs": "image/jxrs", "jxs": "image/jxs", "jxsc": "image/jxsc", "jxsi": "image/jxsi", "jxss": "image/jxss", "kar": "audio/midi", "ktx": "image/ktx", "ktx2": "image/ktx2", "less": "text/less", "lgr": "application/lgr+xml", "list": "text/plain", "litcoffee": "text/coffeescript", "log": "text/plain", "lostxml": "application/lost+xml", "lrf": "application/octet-stream", "m1v": "video/mpeg", "m21": "application/mp21", "m2a": "audio/mpeg", "m2t": "video/mp2t", "m2ts": "video/mp2t", "m2v": "video/mpeg", "m3a": "audio/mpeg", "m4a": "audio/mp4", "m4p": "application/mp4", "m4s": "video/iso.segment", "ma": "application/mathematica", "mads": "application/mads+xml", "maei": "application/mmt-aei+xml", "man": "text/troff", "manifest": "text/cache-manifest", "map": "application/json", "mar": "application/octet-stream", "markdown": "text/markdown", "mathml": "application/mathml+xml", "mb": "application/mathematica", "mbox": "application/mbox", "md": "text/markdown", "mdx": "text/mdx", "me": "text/troff", "mesh": "model/mesh", "meta4": "application/metalink4+xml", "metalink": "application/metalink+xml", "mets": "application/mets+xml", "mft": "application/rpki-manifest", "mid": "audio/midi", "midi": "audio/midi", "mime": "message/rfc822", "mj2": "video/mj2", "mjp2": "video/mj2", "mjs": "text/javascript", "mml": "text/mathml", "mods": "application/mods+xml", "mov": "video/quicktime", "mp2": "audio/mpeg", "mp21": "application/mp21", "mp2a": "audio/mpeg", "mp3": "audio/mpeg", "mp4": "video/mp4", "mp4a": "audio/mp4", "mp4s": "application/mp4", "mp4v": "video/mp4", "mpd": "application/dash+xml", "mpe": "video/mpeg", "mpeg": "video/mpeg", "mpf": "application/media-policy-dataset+xml", "mpg": "video/mpeg", "mpg4": "video/mp4", "mpga": "audio/mpeg", "mpp": "application/dash-patch+xml", "mrc": "application/marc", "mrcx": "application/marcxml+xml", "ms": "text/troff", "mscml": "application/mediaservercontrol+xml", "msh": "model/mesh", "msi": "application/octet-stream", "msix": "application/msix", "msixbundle": "application/msixbundle", "msm": "application/octet-stream", "msp": "application/octet-stream", "mtl": "model/mtl", "mts": "video/mp2t", "musd": "application/mmt-usd+xml", "mxf": "application/mxf", "mxmf": "audio/mobile-xmf", "mxml": "application/xv+xml", "n3": "text/n3", "nb": "application/mathematica", "nq": "application/n-quads", "nt": "application/n-triples", "obj": "model/obj", "oda": "application/oda", "oga": "audio/ogg", "ogg": "audio/ogg", "ogv": "video/ogg", "ogx": "application/ogg", "omdoc": "application/omdoc+xml", "onepkg": "application/onenote", "onetmp": "application/onenote", "onetoc": "application/onenote", "onetoc2": "application/onenote", "opf": "application/oebps-package+xml", "opus": "audio/ogg", "otf": "font/otf", "owl": "application/rdf+xml", "oxps": "application/oxps", "p10": "application/pkcs10", "p7c": "application/pkcs7-mime", "p7m": "application/pkcs7-mime", "p7s": "application/pkcs7-signature", "p8": "application/pkcs8", "pdf": "application/pdf", "pfr": "application/font-tdpfr", "pgp": "application/pgp-encrypted", "pkg": "application/octet-stream", "pki": "application/pkixcmp", "pkipath": "application/pkix-pkipath", "pls": "application/pls+xml", "png": "image/png", "prc": "model/prc", "prf": "application/pics-rules", "provx": "application/provenance+xml", "ps": "application/postscript", "pskcxml": "application/pskc+xml", "pti": "image/prs.pti", "qt": "video/quicktime", "raml": "application/raml+yaml", "rapd": "application/route-apd+xml", "rdf": "application/rdf+xml", "relo": "application/p2p-overlay+xml", "rif": "application/reginfo+xml", "rl": "application/resource-lists+xml", "rld": "application/resource-lists-diff+xml", "rmi": "audio/midi", "rnc": "application/relax-ng-compact-syntax", "rng": "application/xml", "roa": "application/rpki-roa", "roff": "text/troff", "rq": "application/sparql-query", "rs": "application/rls-services+xml", "rsat": "application/atsc-rsat+xml", "rsd": "application/rsd+xml", "rsheet": "application/urc-ressheet+xml", "rss": "application/rss+xml", "rtf": "text/rtf", "rtx": "text/richtext", "rusd": "application/route-usd+xml", "s3m": "audio/s3m", "sbml": "application/sbml+xml", "scq": "application/scvp-cv-request", "scs": "application/scvp-cv-response", "sdp": "application/sdp", "senmlx": "application/senml+xml", "sensmlx": "application/sensml+xml", "ser": "application/java-serialized-object", "setpay": "application/set-payment-initiation", "setreg": "application/set-registration-initiation", "sgi": "image/sgi", "sgm": "text/sgml", "sgml": "text/sgml", "shex": "text/shex", "shf": "application/shf+xml", "shtml": "text/html", "sieve": "application/sieve", "sig": "application/pgp-signature", "sil": "audio/silk", "silo": "model/mesh", "siv": "application/sieve", "slim": "text/slim", "slm": "text/slim", "sls": "application/route-s-tsid+xml", "smi": "application/smil+xml", "smil": "application/smil+xml", "snd": "audio/basic", "so": "application/octet-stream", "spdx": "text/spdx", "spp": "application/scvp-vp-response", "spq": "application/scvp-vp-request", "spx": "audio/ogg", "sql": "application/sql", "sru": "application/sru+xml", "srx": "application/sparql-results+xml", "ssdl": "application/ssdl+xml", "ssml": "application/ssml+xml", "stk": "application/hyperstudio", "stl": "model/stl", "stpx": "model/step+xml", "stpxz": "model/step-xml+zip", "stpz": "model/step+zip", "styl": "text/stylus", "stylus": "text/stylus", "svg": "image/svg+xml", "svgz": "image/svg+xml", "swidtag": "application/swid+xml", "t": "text/troff", "t38": "image/t38", "td": "application/urc-targetdesc+xml", "tei": "application/tei+xml", "teicorpus": "application/tei+xml", "text": "text/plain", "tfi": "application/thraud+xml", "tfx": "image/tiff-fx", "tif": "image/tiff", "tiff": "image/tiff", "toml": "application/toml", "tr": "text/troff", "trig": "application/trig", "ts": "video/mp2t", "tsd": "application/timestamped-data", "tsv": "text/tab-separated-values", "ttc": "font/collection", "ttf": "font/ttf", "ttl": "text/turtle", "ttml": "application/ttml+xml", "txt": "text/plain", "u3d": "model/u3d", "u8dsn": "message/global-delivery-status", "u8hdr": "message/global-headers", "u8mdn": "message/global-disposition-notification", "u8msg": "message/global", "ubj": "application/ubjson", "uri": "text/uri-list", "uris": "text/uri-list", "urls": "text/uri-list", "vcard": "text/vcard", "vrml": "model/vrml", "vtt": "text/vtt", "vxml": "application/voicexml+xml", "war": "application/java-archive", "wasm": "application/wasm", "wav": "audio/wav", "weba": "audio/webm", "webm": "video/webm", "webmanifest": "application/manifest+json", "webp": "image/webp", "wgsl": "text/wgsl", "wgt": "application/widget", "wif": "application/watcherinfo+xml", "wmf": "image/wmf", "woff": "font/woff", "woff2": "font/woff2", "wrl": "model/vrml", "wsdl": "application/wsdl+xml", "wspolicy": "application/wspolicy+xml", "x3d": "model/x3d+xml", "x3db": "model/x3d+fastinfoset", "x3dbz": "model/x3d+binary", "x3dv": "model/x3d-vrml", "x3dvz": "model/x3d+vrml", "x3dz": "model/x3d+xml", "xaml": "application/xaml+xml", "xav": "application/xcap-att+xml", "xca": "application/xcap-caps+xml", "xcs": "application/calendar+xml", "xdf": "application/xcap-diff+xml", "xdssc": "application/dssc+xml", "xel": "application/xcap-el+xml", "xenc": "application/xenc+xml", "xer": "application/patch-ops-error+xml", "xfdf": "application/xfdf", "xht": "application/xhtml+xml", "xhtml": "application/xhtml+xml", "xhvml": "application/xv+xml", "xlf": "application/xliff+xml", "xm": "audio/xm", "xml": "text/xml", "xns": "application/xcap-ns+xml", "xop": "application/xop+xml", "xpl": "application/xproc+xml", "xsd": "application/xml", "xsf": "application/prs.xsf+xml", "xsl": "application/xml", "xslt": "application/xml", "xspf": "application/xspf+xml", "xvm": "application/xv+xml", "xvml": "application/xv+xml", "yaml": "text/yaml", "yang": "application/yang", "yin": "application/yin+xml", "yml": "text/yaml", "zip": "application/zip" }; function lookup(extn) { let tmp = ("" + extn).trim().toLowerCase(); let idx = tmp.lastIndexOf("."); return mimes[!~idx ? tmp : tmp.substring(++idx)]; } //#endregion //#region src/node/publicDir.ts const publicFilesMap = /* @__PURE__ */ new WeakMap(); async function initPublicFiles(config$2) { let fileNames; try { fileNames = await recursiveReaddir(config$2.publicDir); } catch (e$1) { if (e$1.code === ERR_SYMLINK_IN_RECURSIVE_READDIR) return; throw e$1; } const publicFiles = new Set(fileNames.map((fileName) => fileName.slice(config$2.publicDir.length))); publicFilesMap.set(config$2, publicFiles); return publicFiles; } function getPublicFiles(config$2) { return publicFilesMap.get(config$2); } function checkPublicFile(url$6, config$2) { const { publicDir } = config$2; if (!publicDir || url$6[0] !== "/") return; const fileName = cleanUrl(url$6); const publicFiles = getPublicFiles(config$2); if (publicFiles) return publicFiles.has(fileName) ? normalizePath(path.join(publicDir, fileName)) : void 0; const publicFile = normalizePath(path.join(publicDir, fileName)); if (!publicFile.startsWith(withTrailingSlash(publicDir))) return; return fs.existsSync(publicFile) ? publicFile : void 0; } //#endregion //#region src/node/plugins/asset.ts var import_picocolors$29 = __toESM(require_picocolors(), 1); const assetUrlRE = /__VITE_ASSET__([\w$]+)__(?:\$_(.*?)__)?/g; const jsSourceMapRE = /\.[cm]?js\.map$/; const noInlineRE = /[?&]no-inline\b/; const inlineRE$3 = /[?&]inline\b/; const svgExtRE = /\.svg(?:$|\?)/; const assetCache = /* @__PURE__ */ new WeakMap(); /** a set of referenceId for entry CSS assets for each environment */ const cssEntriesMap = /* @__PURE__ */ new WeakMap(); function registerCustomMime() { mimes.ico = "image/x-icon"; mimes.cur = "image/x-icon"; mimes.flac = "audio/flac"; mimes.eot = "application/vnd.ms-fontobject"; } function renderAssetUrlInJS(pluginContext, chunk, opts, code) { const { environment } = pluginContext; const toRelativeRuntime = createToImportMetaURLBasedRelativeRuntime(opts.format, environment.config.isWorker); let match; let s$2; assetUrlRE.lastIndex = 0; while (match = assetUrlRE.exec(code)) { s$2 ||= new MagicString(code); const [full, referenceId, postfix = ""] = match; const file = pluginContext.getFileName(referenceId); chunk.viteMetadata.importedAssets.add(cleanUrl(file)); const filename = file + postfix; const replacement = toOutputFilePathInJS(environment, filename, "asset", chunk.fileName, "js", toRelativeRuntime); const replacementString = typeof replacement === "string" ? JSON.stringify(encodeURIPath(replacement)).slice(1, -1) : `"+${replacement.runtime}+"`; s$2.update(match.index, match.index + full.length, replacementString); } const publicAssetUrlMap = publicAssetUrlCache.get(environment.getTopLevelConfig()); publicAssetUrlRE.lastIndex = 0; while (match = publicAssetUrlRE.exec(code)) { s$2 ||= new MagicString(code); const [full, hash$1] = match; const publicUrl = publicAssetUrlMap.get(hash$1).slice(1); const replacement = toOutputFilePathInJS(environment, publicUrl, "public", chunk.fileName, "js", toRelativeRuntime); const replacementString = typeof replacement === "string" ? JSON.stringify(encodeURIPath(replacement)).slice(1, -1) : `"+${replacement.runtime}+"`; s$2.update(match.index, match.index + full.length, replacementString); } return s$2; } /** * Also supports loading plain strings with import text from './foo.txt?raw' */ function assetPlugin(config$2) { registerCustomMime(); return { name: "vite:asset", perEnvironmentStartEndDuringDev: true, buildStart() { assetCache.set(this.environment, /* @__PURE__ */ new Map()); cssEntriesMap.set(this.environment, /* @__PURE__ */ new Set()); }, resolveId: { handler(id) { if (!config$2.assetsInclude(cleanUrl(id)) && !urlRE.test(id)) return; const publicFile = checkPublicFile(id, config$2); if (publicFile) return id; } }, load: { async handler(id) { if (id[0] === "\0") return; if (rawRE.test(id)) { const file = checkPublicFile(id, config$2) || cleanUrl(id); this.addWatchFile(file); return `export default ${JSON.stringify(await fsp.readFile(file, "utf-8"))}`; } if (!urlRE.test(id) && !config$2.assetsInclude(cleanUrl(id))) return; id = removeUrlQuery(id); let url$6 = await fileToUrl$1(this, id); if (!url$6.startsWith("data:") && this.environment.mode === "dev") { const mod = this.environment.moduleGraph.getModuleById(id); if (mod && mod.lastHMRTimestamp > 0) url$6 = injectQuery(url$6, `t=${mod.lastHMRTimestamp}`); } return { code: `export default ${JSON.stringify(encodeURIPath(url$6))}`, moduleSideEffects: config$2.command === "build" && this.getModuleInfo(id)?.isEntry ? "no-treeshake" : false, meta: config$2.command === "build" ? { "vite:asset": true } : void 0 }; } }, renderChunk(code, chunk, opts) { const s$2 = renderAssetUrlInJS(this, chunk, opts, code); if (s$2) return { code: s$2.toString(), map: this.environment.config.build.sourcemap ? s$2.generateMap({ hires: "boundary" }) : null }; else return null; }, generateBundle(_, bundle) { let importedFiles; for (const file in bundle) { const chunk = bundle[file]; if (chunk.type === "chunk" && chunk.isEntry && chunk.moduleIds.length === 1 && config$2.assetsInclude(chunk.moduleIds[0]) && this.getModuleInfo(chunk.moduleIds[0])?.meta["vite:asset"]) { if (!importedFiles) { importedFiles = /* @__PURE__ */ new Set(); for (const file$1 in bundle) { const chunk$1 = bundle[file$1]; if (chunk$1.type === "chunk") { for (const importedFile of chunk$1.imports) importedFiles.add(importedFile); for (const importedFile of chunk$1.dynamicImports) importedFiles.add(importedFile); } } } if (!importedFiles.has(file)) delete bundle[file]; } } if (config$2.command === "build" && !this.environment.config.build.emitAssets) { for (const file in bundle) if (bundle[file].type === "asset" && !file.endsWith("ssr-manifest.json") && !jsSourceMapRE.test(file)) delete bundle[file]; } } }; } async function fileToUrl$1(pluginContext, id) { const { environment } = pluginContext; if (environment.config.command === "serve") return fileToDevUrl(environment, id); else return fileToBuiltUrl(pluginContext, id); } async function fileToDevUrl(environment, id, skipBase = false) { const config$2 = environment.getTopLevelConfig(); const publicFile = checkPublicFile(id, config$2); if (inlineRE$3.test(id)) { const file = publicFile || cleanUrl(id); const content = await fsp.readFile(file); return assetToDataURL(environment, file, content); } const cleanedId = cleanUrl(id); if (svgExtRE.test(cleanedId)) { const file = publicFile || cleanedId; const content = await fsp.readFile(file); if (shouldInline(environment, file, id, content, void 0, void 0)) return assetToDataURL(environment, file, content); } let rtn; if (publicFile) rtn = id; else if (id.startsWith(withTrailingSlash(config$2.root))) rtn = "/" + path.posix.relative(config$2.root, id); else rtn = path.posix.join(FS_PREFIX, id); if (skipBase) return rtn; const base = joinUrlSegments(config$2.server.origin ?? "", config$2.decodedBase); return joinUrlSegments(base, removeLeadingSlash(rtn)); } function getPublicAssetFilename(hash$1, config$2) { return publicAssetUrlCache.get(config$2)?.get(hash$1); } const publicAssetUrlCache = /* @__PURE__ */ new WeakMap(); const publicAssetUrlRE = /__VITE_PUBLIC_ASSET__([a-z\d]{8})__/g; function publicFileToBuiltUrl(url$6, config$2) { if (config$2.command !== "build") return joinUrlSegments(config$2.decodedBase, url$6); const hash$1 = getHash(url$6); let cache$1 = publicAssetUrlCache.get(config$2); if (!cache$1) { cache$1 = /* @__PURE__ */ new Map(); publicAssetUrlCache.set(config$2, cache$1); } if (!cache$1.get(hash$1)) cache$1.set(hash$1, url$6); return `__VITE_PUBLIC_ASSET__${hash$1}__`; } const GIT_LFS_PREFIX = Buffer$1.from("version https://git-lfs.github.com"); function isGitLfsPlaceholder(content) { if (content.length < GIT_LFS_PREFIX.length) return false; return GIT_LFS_PREFIX.compare(content, 0, GIT_LFS_PREFIX.length) === 0; } /** * Register an asset to be emitted as part of the bundle (if necessary) * and returns the resolved public URL */ async function fileToBuiltUrl(pluginContext, id, skipPublicCheck = false, forceInline) { const environment = pluginContext.environment; const topLevelConfig = environment.getTopLevelConfig(); if (!skipPublicCheck) { const publicFile = checkPublicFile(id, topLevelConfig); if (publicFile) if (inlineRE$3.test(id)) id = publicFile; else return publicFileToBuiltUrl(id, topLevelConfig); } const cache$1 = assetCache.get(environment); const cached = cache$1.get(id); if (cached) return cached; let { file, postfix } = splitFileAndPostfix(id); const content = await fsp.readFile(file); let url$6; if (shouldInline(environment, file, id, content, pluginContext, forceInline)) url$6 = assetToDataURL(environment, file, content); else { const originalFileName = normalizePath(path.relative(environment.config.root, file)); const referenceId = pluginContext.emitFile({ type: "asset", name: path.basename(file), originalFileName, source: content }); if (environment.config.command === "build" && noInlineRE.test(postfix)) postfix = postfix.replace(noInlineRE, "").replace(/^&/, "?"); url$6 = `__VITE_ASSET__${referenceId}__${postfix ? `$_${postfix}__` : ``}`; } cache$1.set(id, url$6); return url$6; } async function urlToBuiltUrl(pluginContext, url$6, importer, forceInline) { const topLevelConfig = pluginContext.environment.getTopLevelConfig(); if (checkPublicFile(url$6, topLevelConfig)) return publicFileToBuiltUrl(url$6, topLevelConfig); const file = url$6[0] === "/" ? path.join(topLevelConfig.root, url$6) : path.join(path.dirname(importer), url$6); return fileToBuiltUrl(pluginContext, file, true, forceInline); } function shouldInline(environment, file, id, content, buildPluginContext, forceInline) { if (noInlineRE.test(id)) return false; if (inlineRE$3.test(id)) return true; if (buildPluginContext) { if (environment.config.build.lib) return true; if (buildPluginContext.getModuleInfo(id)?.isEntry) return false; } if (forceInline !== void 0) return forceInline; if (file.endsWith(".html")) return false; if (file.endsWith(".svg") && id.includes("#")) return false; let limit; const { assetsInlineLimit } = environment.config.build; if (typeof assetsInlineLimit === "function") { const userShouldInline = assetsInlineLimit(file, content); if (userShouldInline != null) return userShouldInline; limit = DEFAULT_ASSETS_INLINE_LIMIT; } else limit = Number(assetsInlineLimit); return content.length < limit && !isGitLfsPlaceholder(content); } function assetToDataURL(environment, file, content) { if (environment.config.build.lib && isGitLfsPlaceholder(content)) environment.logger.warn(import_picocolors$29.default.yellow(`Inlined file ${file} was not downloaded via Git LFS`)); if (file.endsWith(".svg")) return svgToDataURL(content); else { const mimeType = lookup(file) ?? "application/octet-stream"; return `data:${mimeType};base64,${content.toString("base64")}`; } } const nestedQuotesRE = /"[^"']*'[^"]*"|'[^'"]*"[^']*'/; function svgToDataURL(content) { const stringContent = content.toString(); if (stringContent.includes("\s+<").replaceAll("\"", "'").replaceAll("%", "%25").replaceAll("#", "%23").replaceAll("<", "%3c").replaceAll(">", "%3e").replaceAll(/\s+/g, "%20"); } //#endregion //#region src/node/plugins/manifest.ts const endsWithJSRE = /\.[cm]?js$/; function manifestPlugin() { const getState = perEnvironmentState(() => { return { manifest: {}, outputCount: 0, reset() { this.manifest = {}; this.outputCount = 0; } }; }); return { name: "vite:manifest", perEnvironmentStartEndDuringDev: true, applyToEnvironment(environment) { return !!environment.config.build.manifest; }, buildStart() { getState(this).reset(); }, generateBundle({ format: format$3 }, bundle) { const state = getState(this); const { manifest } = state; const { root } = this.environment.config; const buildOptions = this.environment.config.build; function getChunkName(chunk) { return getChunkOriginalFileName(chunk, root, format$3) ?? `_${path.basename(chunk.fileName)}`; } function getInternalImports(imports) { const filteredImports = []; for (const file of imports) { if (bundle[file] === void 0) continue; filteredImports.push(getChunkName(bundle[file])); } return filteredImports; } function createChunk(chunk) { const manifestChunk = { file: chunk.fileName, name: chunk.name }; if (chunk.facadeModuleId) manifestChunk.src = getChunkName(chunk); if (chunk.isEntry) manifestChunk.isEntry = true; if (chunk.isDynamicEntry) manifestChunk.isDynamicEntry = true; if (chunk.imports.length) { const internalImports = getInternalImports(chunk.imports); if (internalImports.length > 0) manifestChunk.imports = internalImports; } if (chunk.dynamicImports.length) { const internalImports = getInternalImports(chunk.dynamicImports); if (internalImports.length > 0) manifestChunk.dynamicImports = internalImports; } if (chunk.viteMetadata?.importedCss.size) manifestChunk.css = [...chunk.viteMetadata.importedCss]; if (chunk.viteMetadata?.importedAssets.size) manifestChunk.assets = [...chunk.viteMetadata.importedAssets]; return manifestChunk; } function createAsset(asset, src, isEntry) { const manifestChunk = { file: asset.fileName, src }; if (isEntry) { manifestChunk.isEntry = true; manifestChunk.names = asset.names; } return manifestChunk; } const entryCssReferenceIds = cssEntriesMap.get(this.environment); const entryCssAssetFileNames = new Set(entryCssReferenceIds); for (const id of entryCssReferenceIds) try { const fileName = this.getFileName(id); entryCssAssetFileNames.add(fileName); } catch {} for (const file in bundle) { const chunk = bundle[file]; if (chunk.type === "chunk") manifest[getChunkName(chunk)] = createChunk(chunk); else if (chunk.type === "asset" && chunk.names.length > 0) { const src = chunk.originalFileNames.length > 0 ? chunk.originalFileNames[0] : `_${path.basename(chunk.fileName)}`; const isEntry = entryCssAssetFileNames.has(chunk.fileName); const asset = createAsset(chunk, src, isEntry); const file$1 = manifest[src]?.file; if (!(file$1 && endsWithJSRE.test(file$1))) manifest[src] = asset; for (const originalFileName of chunk.originalFileNames.slice(1)) { const file$2 = manifest[originalFileName]?.file; if (!(file$2 && endsWithJSRE.test(file$2))) manifest[originalFileName] = asset; } } } state.outputCount++; const output = buildOptions.rollupOptions.output; const outputLength = Array.isArray(output) ? output.length : 1; if (state.outputCount >= outputLength) this.emitFile({ fileName: typeof buildOptions.manifest === "string" ? buildOptions.manifest : ".vite/manifest.json", type: "asset", source: JSON.stringify(sortObjectKeys(manifest), void 0, 2) }); } }; } function getChunkOriginalFileName(chunk, root, format$3) { if (chunk.facadeModuleId) { let name = normalizePath(path.relative(root, chunk.facadeModuleId)); if (format$3 === "system" && !chunk.name.includes("-legacy")) { const ext = path.extname(name); const endPos = ext.length !== 0 ? -ext.length : void 0; name = `${name.slice(0, endPos)}-legacy${ext}`; } return name.replace(/\0/g, ""); } } //#endregion //#region src/node/plugins/dataUri.ts const dataUriRE = /^([^/]+\/[^;,]+)(;base64)?,([\s\S]*)$/; const base64RE = /base64/i; const dataUriPrefix = `\0/@data-uri/`; /** * Build only, since importing from a data URI works natively. */ function dataURIPlugin() { let resolved; return { name: "vite:data-uri", buildStart() { resolved = /* @__PURE__ */ new Map(); }, resolveId(id) { if (!id.trimStart().startsWith("data:")) return; const uri = new URL$1(id); if (uri.protocol !== "data:") return; const match = dataUriRE.exec(uri.pathname); if (!match) return; const [, mime, format$3, data] = match; if (mime !== "text/javascript") throw new Error(`data URI with non-JavaScript mime type is not supported. If you're using legacy JavaScript MIME types (such as 'application/javascript'), please use 'text/javascript' instead.`); const base64 = format$3 && base64RE.test(format$3.substring(1)); const content = base64 ? Buffer.from(data, "base64").toString("utf-8") : data; resolved.set(id, content); return dataUriPrefix + id; }, load(id) { if (id.startsWith(dataUriPrefix)) return resolved.get(id.slice(dataUriPrefix.length)); } }; } //#endregion //#region ../../node_modules/.pnpm/es-module-lexer@1.7.0/node_modules/es-module-lexer/dist/lexer.js var ImportType; (function(A$1) { A$1[A$1.Static = 1] = "Static", A$1[A$1.Dynamic = 2] = "Dynamic", A$1[A$1.ImportMeta = 3] = "ImportMeta", A$1[A$1.StaticSourcePhase = 4] = "StaticSourcePhase", A$1[A$1.DynamicSourcePhase = 5] = "DynamicSourcePhase", A$1[A$1.StaticDeferPhase = 6] = "StaticDeferPhase", A$1[A$1.DynamicDeferPhase = 7] = "DynamicDeferPhase"; })(ImportType || (ImportType = {})); const A = 1 === new Uint8Array(new Uint16Array([1]).buffer)[0]; function parse(E$1, g = "@") { if (!C) return init.then(() => parse(E$1)); const I = E$1.length + 1, w$1 = (C.__heap_base.value || C.__heap_base) + 4 * I - C.memory.buffer.byteLength; w$1 > 0 && C.memory.grow(Math.ceil(w$1 / 65536)); const K = C.sa(I - 1); if ((A ? B : Q)(E$1, new Uint16Array(C.memory.buffer, K, I)), !C.parse()) throw Object.assign(/* @__PURE__ */ new Error(`Parse error ${g}:${E$1.slice(0, C.e()).split("\n").length}:${C.e() - E$1.lastIndexOf("\n", C.e() - 1)}`), { idx: C.e() }); const o$1 = [], D = []; for (; C.ri();) { const A$1 = C.is(), Q$1 = C.ie(), B$1 = C.it(), g$1 = C.ai(), I$1 = C.id(), w$2 = C.ss(), K$1 = C.se(); let D$1; C.ip() && (D$1 = k(E$1.slice(-1 === I$1 ? A$1 - 1 : A$1, -1 === I$1 ? Q$1 + 1 : Q$1))), o$1.push({ n: D$1, t: B$1, s: A$1, e: Q$1, ss: w$2, se: K$1, d: I$1, a: g$1 }); } for (; C.re();) { const A$1 = C.es(), Q$1 = C.ee(), B$1 = C.els(), g$1 = C.ele(), I$1 = E$1.slice(A$1, Q$1), w$2 = I$1[0], K$1 = B$1 < 0 ? void 0 : E$1.slice(B$1, g$1), o$2 = K$1 ? K$1[0] : ""; D.push({ s: A$1, e: Q$1, ls: B$1, le: g$1, n: "\"" === w$2 || "'" === w$2 ? k(I$1) : I$1, ln: "\"" === o$2 || "'" === o$2 ? k(K$1) : K$1 }); } function k(A$1) { try { return (0, eval)(A$1); } catch (A$2) {} } return [ o$1, D, !!C.f(), !!C.ms() ]; } function Q(A$1, Q$1) { const B$1 = A$1.length; let C$1 = 0; for (; C$1 < B$1;) { const B$2 = A$1.charCodeAt(C$1); Q$1[C$1++] = (255 & B$2) << 8 | B$2 >>> 8; } } function B(A$1, Q$1) { const B$1 = A$1.length; let C$1 = 0; for (; C$1 < B$1;) Q$1[C$1] = A$1.charCodeAt(C$1++); } let C; const E = () => { return A$1 = "AGFzbQEAAAABKwhgAX8Bf2AEf39/fwBgAAF/YAAAYAF/AGADf39/AX9gAn9/AX9gA39/fwADMTAAAQECAgICAgICAgICAgICAgICAgIAAwMDBAQAAAUAAAAAAAMDAwAGAAAABwAGAgUEBQFwAQEBBQMBAAEGDwJ/AUHA8gALfwBBwPIACwd6FQZtZW1vcnkCAAJzYQAAAWUAAwJpcwAEAmllAAUCc3MABgJzZQAHAml0AAgCYWkACQJpZAAKAmlwAAsCZXMADAJlZQANA2VscwAOA2VsZQAPAnJpABACcmUAEQFmABICbXMAEwVwYXJzZQAUC19faGVhcF9iYXNlAwEKzkQwaAEBf0EAIAA2AoAKQQAoAtwJIgEgAEEBdGoiAEEAOwEAQQAgAEECaiIANgKECkEAIAA2AogKQQBBADYC4AlBAEEANgLwCUEAQQA2AugJQQBBADYC5AlBAEEANgL4CUEAQQA2AuwJIAEL0wEBA39BACgC8AkhBEEAQQAoAogKIgU2AvAJQQAgBDYC9AlBACAFQSRqNgKICiAEQSBqQeAJIAQbIAU2AgBBACgC1AkhBEEAKALQCSEGIAUgATYCACAFIAA2AgggBSACIAJBAmpBACAGIANGIgAbIAQgA0YiBBs2AgwgBSADNgIUIAVBADYCECAFIAI2AgQgBUEANgIgIAVBA0EBQQIgABsgBBs2AhwgBUEAKALQCSADRiICOgAYAkACQCACDQBBACgC1AkgA0cNAQtBAEEBOgCMCgsLXgEBf0EAKAL4CSIEQRBqQeQJIAQbQQAoAogKIgQ2AgBBACAENgL4CUEAIARBFGo2AogKQQBBAToAjAogBEEANgIQIAQgAzYCDCAEIAI2AgggBCABNgIEIAQgADYCAAsIAEEAKAKQCgsVAEEAKALoCSgCAEEAKALcCWtBAXULHgEBf0EAKALoCSgCBCIAQQAoAtwJa0EBdUF/IAAbCxUAQQAoAugJKAIIQQAoAtwJa0EBdQseAQF/QQAoAugJKAIMIgBBACgC3AlrQQF1QX8gABsLCwBBACgC6AkoAhwLHgEBf0EAKALoCSgCECIAQQAoAtwJa0EBdUF/IAAbCzsBAX8CQEEAKALoCSgCFCIAQQAoAtAJRw0AQX8PCwJAIABBACgC1AlHDQBBfg8LIABBACgC3AlrQQF1CwsAQQAoAugJLQAYCxUAQQAoAuwJKAIAQQAoAtwJa0EBdQsVAEEAKALsCSgCBEEAKALcCWtBAXULHgEBf0EAKALsCSgCCCIAQQAoAtwJa0EBdUF/IAAbCx4BAX9BACgC7AkoAgwiAEEAKALcCWtBAXVBfyAAGwslAQF/QQBBACgC6AkiAEEgakHgCSAAGygCACIANgLoCSAAQQBHCyUBAX9BAEEAKALsCSIAQRBqQeQJIAAbKAIAIgA2AuwJIABBAEcLCABBAC0AlAoLCABBAC0AjAoL3Q0BBX8jAEGA0ABrIgAkAEEAQQE6AJQKQQBBACgC2Ak2ApwKQQBBACgC3AlBfmoiATYCsApBACABQQAoAoAKQQF0aiICNgK0CkEAQQA6AIwKQQBBADsBlgpBAEEAOwGYCkEAQQA6AKAKQQBBADYCkApBAEEAOgD8CUEAIABBgBBqNgKkCkEAIAA2AqgKQQBBADoArAoCQAJAAkACQANAQQAgAUECaiIDNgKwCiABIAJPDQECQCADLwEAIgJBd2pBBUkNAAJAAkACQAJAAkAgAkGbf2oOBQEICAgCAAsgAkEgRg0EIAJBL0YNAyACQTtGDQIMBwtBAC8BmAoNASADEBVFDQEgAUEEakGCCEEKEC8NARAWQQAtAJQKDQFBAEEAKAKwCiIBNgKcCgwHCyADEBVFDQAgAUEEakGMCEEKEC8NABAXC0EAQQAoArAKNgKcCgwBCwJAIAEvAQQiA0EqRg0AIANBL0cNBBAYDAELQQEQGQtBACgCtAohAkEAKAKwCiEBDAALC0EAIQIgAyEBQQAtAPwJDQIMAQtBACABNgKwCkEAQQA6AJQKCwNAQQAgAUECaiIDNgKwCgJAAkACQAJAAkACQAJAIAFBACgCtApPDQAgAy8BACICQXdqQQVJDQYCQAJAAkACQAJAAkACQAJAAkACQCACQWBqDgoQDwYPDw8PBQECAAsCQAJAAkACQCACQaB/ag4KCxISAxIBEhISAgALIAJBhX9qDgMFEQYJC0EALwGYCg0QIAMQFUUNECABQQRqQYIIQQoQLw0QEBYMEAsgAxAVRQ0PIAFBBGpBjAhBChAvDQ8QFwwPCyADEBVFDQ4gASkABELsgISDsI7AOVINDiABLwEMIgNBd2oiAUEXSw0MQQEgAXRBn4CABHFFDQwMDQtBAEEALwGYCiIBQQFqOwGYCkEAKAKkCiABQQN0aiIBQQE2AgAgAUEAKAKcCjYCBAwNC0EALwGYCiIDRQ0JQQAgA0F/aiIDOwGYCkEALwGWCiICRQ0MQQAoAqQKIANB//8DcUEDdGooAgBBBUcNDAJAIAJBAnRBACgCqApqQXxqKAIAIgMoAgQNACADQQAoApwKQQJqNgIEC0EAIAJBf2o7AZYKIAMgAUEEajYCDAwMCwJAQQAoApwKIgEvAQBBKUcNAEEAKALwCSIDRQ0AIAMoAgQgAUcNAEEAQQAoAvQJIgM2AvAJAkAgA0UNACADQQA2AiAMAQtBAEEANgLgCQtBAEEALwGYCiIDQQFqOwGYCkEAKAKkCiADQQN0aiIDQQZBAkEALQCsChs2AgAgAyABNgIEQQBBADoArAoMCwtBAC8BmAoiAUUNB0EAIAFBf2oiATsBmApBACgCpAogAUH//wNxQQN0aigCAEEERg0EDAoLQScQGgwJC0EiEBoMCAsgAkEvRw0HAkACQCABLwEEIgFBKkYNACABQS9HDQEQGAwKC0EBEBkMCQsCQAJAAkACQEEAKAKcCiIBLwEAIgMQG0UNAAJAAkAgA0FVag4EAAkBAwkLIAFBfmovAQBBK0YNAwwICyABQX5qLwEAQS1GDQIMBwsgA0EpRw0BQQAoAqQKQQAvAZgKIgJBA3RqKAIEEBxFDQIMBgsgAUF+ai8BAEFQakH//wNxQQpPDQULQQAvAZgKIQILAkACQCACQf//A3EiAkUNACADQeYARw0AQQAoAqQKIAJBf2pBA3RqIgQoAgBBAUcNACABQX5qLwEAQe8ARw0BIAQoAgRBlghBAxAdRQ0BDAULIANB/QBHDQBBACgCpAogAkEDdGoiAigCBBAeDQQgAigCAEEGRg0ECyABEB8NAyADRQ0DIANBL0ZBAC0AoApBAEdxDQMCQEEAKAL4CSICRQ0AIAEgAigCAEkNACABIAIoAgRNDQQLIAFBfmohAUEAKALcCSECAkADQCABQQJqIgQgAk0NAUEAIAE2ApwKIAEvAQAhAyABQX5qIgQhASADECBFDQALIARBAmohBAsCQCADQf//A3EQIUUNACAEQX5qIQECQANAIAFBAmoiAyACTQ0BQQAgATYCnAogAS8BACEDIAFBfmoiBCEBIAMQIQ0ACyAEQQJqIQMLIAMQIg0EC0EAQQE6AKAKDAcLQQAoAqQKQQAvAZgKIgFBA3QiA2pBACgCnAo2AgRBACABQQFqOwGYCkEAKAKkCiADakEDNgIACxAjDAULQQAtAPwJQQAvAZYKQQAvAZgKcnJFIQIMBwsQJEEAQQA6AKAKDAMLECVBACECDAULIANBoAFHDQELQQBBAToArAoLQQBBACgCsAo2ApwKC0EAKAKwCiEBDAALCyAAQYDQAGokACACCxoAAkBBACgC3AkgAEcNAEEBDwsgAEF+ahAmC/4KAQZ/QQBBACgCsAoiAEEMaiIBNgKwCkEAKAL4CSECQQEQKSEDAkACQAJAAkACQAJAAkACQAJAQQAoArAKIgQgAUcNACADEChFDQELAkACQAJAAkACQAJAAkAgA0EqRg0AIANB+wBHDQFBACAEQQJqNgKwCkEBECkhA0EAKAKwCiEEA0ACQAJAIANB//8DcSIDQSJGDQAgA0EnRg0AIAMQLBpBACgCsAohAwwBCyADEBpBAEEAKAKwCkECaiIDNgKwCgtBARApGgJAIAQgAxAtIgNBLEcNAEEAQQAoArAKQQJqNgKwCkEBECkhAwsgA0H9AEYNA0EAKAKwCiIFIARGDQ8gBSEEIAVBACgCtApNDQAMDwsLQQAgBEECajYCsApBARApGkEAKAKwCiIDIAMQLRoMAgtBAEEAOgCUCgJAAkACQAJAAkACQCADQZ9/ag4MAgsEAQsDCwsLCwsFAAsgA0H2AEYNBAwKC0EAIARBDmoiAzYCsAoCQAJAAkBBARApQZ9/ag4GABICEhIBEgtBACgCsAoiBSkAAkLzgOSD4I3AMVINESAFLwEKECFFDRFBACAFQQpqNgKwCkEAECkaC0EAKAKwCiIFQQJqQbIIQQ4QLw0QIAUvARAiAkF3aiIBQRdLDQ1BASABdEGfgIAEcUUNDQwOC0EAKAKwCiIFKQACQuyAhIOwjsA5Ug0PIAUvAQoiAkF3aiIBQRdNDQYMCgtBACAEQQpqNgKwCkEAECkaQQAoArAKIQQLQQAgBEEQajYCsAoCQEEBECkiBEEqRw0AQQBBACgCsApBAmo2ArAKQQEQKSEEC0EAKAKwCiEDIAQQLBogA0EAKAKwCiIEIAMgBBACQQBBACgCsApBfmo2ArAKDwsCQCAEKQACQuyAhIOwjsA5Ug0AIAQvAQoQIEUNAEEAIARBCmo2ArAKQQEQKSEEQQAoArAKIQMgBBAsGiADQQAoArAKIgQgAyAEEAJBAEEAKAKwCkF+ajYCsAoPC0EAIARBBGoiBDYCsAoLQQAgBEEGajYCsApBAEEAOgCUCkEBECkhBEEAKAKwCiEDIAQQLCEEQQAoArAKIQIgBEHf/wNxIgFB2wBHDQNBACACQQJqNgKwCkEBECkhBUEAKAKwCiEDQQAhBAwEC0EAQQE6AIwKQQBBACgCsApBAmo2ArAKC0EBECkhBEEAKAKwCiEDAkAgBEHmAEcNACADQQJqQawIQQYQLw0AQQAgA0EIajYCsAogAEEBEClBABArIAJBEGpB5AkgAhshAwNAIAMoAgAiA0UNBSADQgA3AgggA0EQaiEDDAALC0EAIANBfmo2ArAKDAMLQQEgAXRBn4CABHFFDQMMBAtBASEECwNAAkACQCAEDgIAAQELIAVB//8DcRAsGkEBIQQMAQsCQAJAQQAoArAKIgQgA0YNACADIAQgAyAEEAJBARApIQQCQCABQdsARw0AIARBIHJB/QBGDQQLQQAoArAKIQMCQCAEQSxHDQBBACADQQJqNgKwCkEBECkhBUEAKAKwCiEDIAVBIHJB+wBHDQILQQAgA0F+ajYCsAoLIAFB2wBHDQJBACACQX5qNgKwCg8LQQAhBAwACwsPCyACQaABRg0AIAJB+wBHDQQLQQAgBUEKajYCsApBARApIgVB+wBGDQMMAgsCQCACQVhqDgMBAwEACyACQaABRw0CC0EAIAVBEGo2ArAKAkBBARApIgVBKkcNAEEAQQAoArAKQQJqNgKwCkEBECkhBQsgBUEoRg0BC0EAKAKwCiEBIAUQLBpBACgCsAoiBSABTQ0AIAQgAyABIAUQAkEAQQAoArAKQX5qNgKwCg8LIAQgA0EAQQAQAkEAIARBDGo2ArAKDwsQJQuFDAEKf0EAQQAoArAKIgBBDGoiATYCsApBARApIQJBACgCsAohAwJAAkACQAJAAkACQAJAAkAgAkEuRw0AQQAgA0ECajYCsAoCQEEBECkiAkHkAEYNAAJAIAJB8wBGDQAgAkHtAEcNB0EAKAKwCiICQQJqQZwIQQYQLw0HAkBBACgCnAoiAxAqDQAgAy8BAEEuRg0ICyAAIAAgAkEIakEAKALUCRABDwtBACgCsAoiAkECakGiCEEKEC8NBgJAQQAoApwKIgMQKg0AIAMvAQBBLkYNBwtBACEEQQAgAkEMajYCsApBASEFQQUhBkEBECkhAkEAIQdBASEIDAILQQAoArAKIgIpAAJC5YCYg9CMgDlSDQUCQEEAKAKcCiIDECoNACADLwEAQS5GDQYLQQAhBEEAIAJBCmo2ArAKQQIhCEEHIQZBASEHQQEQKSECQQEhBQwBCwJAAkACQAJAIAJB8wBHDQAgAyABTQ0AIANBAmpBoghBChAvDQACQCADLwEMIgRBd2oiB0EXSw0AQQEgB3RBn4CABHENAgsgBEGgAUYNAQtBACEHQQchBkEBIQQgAkHkAEYNAQwCC0EAIQRBACADQQxqIgI2ArAKQQEhBUEBECkhCQJAQQAoArAKIgYgAkYNAEHmACECAkAgCUHmAEYNAEEFIQZBACEHQQEhCCAJIQIMBAtBACEHQQEhCCAGQQJqQawIQQYQLw0EIAYvAQgQIEUNBAtBACEHQQAgAzYCsApBByEGQQEhBEEAIQVBACEIIAkhAgwCCyADIABBCmpNDQBBACEIQeQAIQICQCADKQACQuWAmIPQjIA5Ug0AAkACQCADLwEKIgRBd2oiB0EXSw0AQQEgB3RBn4CABHENAQtBACEIIARBoAFHDQELQQAhBUEAIANBCmo2ArAKQSohAkEBIQdBAiEIQQEQKSIJQSpGDQRBACADNgKwCkEBIQRBACEHQQAhCCAJIQIMAgsgAyEGQQAhBwwCC0EAIQVBACEICwJAIAJBKEcNAEEAKAKkCkEALwGYCiICQQN0aiIDQQAoArAKNgIEQQAgAkEBajsBmAogA0EFNgIAQQAoApwKLwEAQS5GDQRBAEEAKAKwCiIDQQJqNgKwCkEBECkhAiAAQQAoArAKQQAgAxABAkACQCAFDQBBACgC8AkhAQwBC0EAKALwCSIBIAY2AhwLQQBBAC8BlgoiA0EBajsBlgpBACgCqAogA0ECdGogATYCAAJAIAJBIkYNACACQSdGDQBBAEEAKAKwCkF+ajYCsAoPCyACEBpBAEEAKAKwCkECaiICNgKwCgJAAkACQEEBEClBV2oOBAECAgACC0EAQQAoArAKQQJqNgKwCkEBECkaQQAoAvAJIgMgAjYCBCADQQE6ABggA0EAKAKwCiICNgIQQQAgAkF+ajYCsAoPC0EAKALwCSIDIAI2AgQgA0EBOgAYQQBBAC8BmApBf2o7AZgKIANBACgCsApBAmo2AgxBAEEALwGWCkF/ajsBlgoPC0EAQQAoArAKQX5qNgKwCg8LAkAgBEEBcyACQfsAR3INAEEAKAKwCiECQQAvAZgKDQUDQAJAAkACQCACQQAoArQKTw0AQQEQKSICQSJGDQEgAkEnRg0BIAJB/QBHDQJBAEEAKAKwCkECajYCsAoLQQEQKSEDQQAoArAKIQICQCADQeYARw0AIAJBAmpBrAhBBhAvDQcLQQAgAkEIajYCsAoCQEEBECkiAkEiRg0AIAJBJ0cNBwsgACACQQAQKw8LIAIQGgtBAEEAKAKwCkECaiICNgKwCgwACwsCQAJAIAJBWWoOBAMBAQMACyACQSJGDQILQQAoArAKIQYLIAYgAUcNAEEAIABBCmo2ArAKDwsgAkEqRyAHcQ0DQQAvAZgKQf//A3ENA0EAKAKwCiECQQAoArQKIQEDQCACIAFPDQECQAJAIAIvAQAiA0EnRg0AIANBIkcNAQsgACADIAgQKw8LQQAgAkECaiICNgKwCgwACwsQJQsPC0EAIAJBfmo2ArAKDwtBAEEAKAKwCkF+ajYCsAoLRwEDf0EAKAKwCkECaiEAQQAoArQKIQECQANAIAAiAkF+aiABTw0BIAJBAmohACACLwEAQXZqDgQBAAABAAsLQQAgAjYCsAoLmAEBA39BAEEAKAKwCiIBQQJqNgKwCiABQQZqIQFBACgCtAohAgNAAkACQAJAIAFBfGogAk8NACABQX5qLwEAIQMCQAJAIAANACADQSpGDQEgA0F2ag4EAgQEAgQLIANBKkcNAwsgAS8BAEEvRw0CQQAgAUF+ajYCsAoMAQsgAUF+aiEBC0EAIAE2ArAKDwsgAUECaiEBDAALC4gBAQR/QQAoArAKIQFBACgCtAohAgJAAkADQCABIgNBAmohASADIAJPDQEgAS8BACIEIABGDQICQCAEQdwARg0AIARBdmoOBAIBAQIBCyADQQRqIQEgAy8BBEENRw0AIANBBmogASADLwEGQQpGGyEBDAALC0EAIAE2ArAKECUPC0EAIAE2ArAKC2wBAX8CQAJAIABBX2oiAUEFSw0AQQEgAXRBMXENAQsgAEFGakH//wNxQQZJDQAgAEEpRyAAQVhqQf//A3FBB0lxDQACQCAAQaV/ag4EAQAAAQALIABB/QBHIABBhX9qQf//A3FBBElxDwtBAQsuAQF/QQEhAQJAIABBpglBBRAdDQAgAEGWCEEDEB0NACAAQbAJQQIQHSEBCyABC0YBA39BACEDAkAgACACQQF0IgJrIgRBAmoiAEEAKALcCSIFSQ0AIAAgASACEC8NAAJAIAAgBUcNAEEBDwsgBBAmIQMLIAMLgwEBAn9BASEBAkACQAJAAkACQAJAIAAvAQAiAkFFag4EBQQEAQALAkAgAkGbf2oOBAMEBAIACyACQSlGDQQgAkH5AEcNAyAAQX5qQbwJQQYQHQ8LIABBfmovAQBBPUYPCyAAQX5qQbQJQQQQHQ8LIABBfmpByAlBAxAdDwtBACEBCyABC7QDAQJ/QQAhAQJAAkACQAJAAkACQAJAAkACQAJAIAAvAQBBnH9qDhQAAQIJCQkJAwkJBAUJCQYJBwkJCAkLAkACQCAAQX5qLwEAQZd/ag4EAAoKAQoLIABBfGpByghBAhAdDwsgAEF8akHOCEEDEB0PCwJAAkACQCAAQX5qLwEAQY1/ag4DAAECCgsCQCAAQXxqLwEAIgJB4QBGDQAgAkHsAEcNCiAAQXpqQeUAECcPCyAAQXpqQeMAECcPCyAAQXxqQdQIQQQQHQ8LIABBfGpB3AhBBhAdDwsgAEF+ai8BAEHvAEcNBiAAQXxqLwEAQeUARw0GAkAgAEF6ai8BACICQfAARg0AIAJB4wBHDQcgAEF4akHoCEEGEB0PCyAAQXhqQfQIQQIQHQ8LIABBfmpB+AhBBBAdDwtBASEBIABBfmoiAEHpABAnDQQgAEGACUEFEB0PCyAAQX5qQeQAECcPCyAAQX5qQYoJQQcQHQ8LIABBfmpBmAlBBBAdDwsCQCAAQX5qLwEAIgJB7wBGDQAgAkHlAEcNASAAQXxqQe4AECcPCyAAQXxqQaAJQQMQHSEBCyABCzQBAX9BASEBAkAgAEF3akH//wNxQQVJDQAgAEGAAXJBoAFGDQAgAEEuRyAAEChxIQELIAELMAEBfwJAAkAgAEF3aiIBQRdLDQBBASABdEGNgIAEcQ0BCyAAQaABRg0AQQAPC0EBC04BAn9BACEBAkACQCAALwEAIgJB5QBGDQAgAkHrAEcNASAAQX5qQfgIQQQQHQ8LIABBfmovAQBB9QBHDQAgAEF8akHcCEEGEB0hAQsgAQveAQEEf0EAKAKwCiEAQQAoArQKIQECQAJAAkADQCAAIgJBAmohACACIAFPDQECQAJAAkAgAC8BACIDQaR/ag4FAgMDAwEACyADQSRHDQIgAi8BBEH7AEcNAkEAIAJBBGoiADYCsApBAEEALwGYCiICQQFqOwGYCkEAKAKkCiACQQN0aiICQQQ2AgAgAiAANgIEDwtBACAANgKwCkEAQQAvAZgKQX9qIgA7AZgKQQAoAqQKIABB//8DcUEDdGooAgBBA0cNAwwECyACQQRqIQAMAAsLQQAgADYCsAoLECULC3ABAn8CQAJAA0BBAEEAKAKwCiIAQQJqIgE2ArAKIABBACgCtApPDQECQAJAAkAgAS8BACIBQaV/ag4CAQIACwJAIAFBdmoOBAQDAwQACyABQS9HDQIMBAsQLhoMAQtBACAAQQRqNgKwCgwACwsQJQsLNQEBf0EAQQE6APwJQQAoArAKIQBBAEEAKAK0CkECajYCsApBACAAQQAoAtwJa0EBdTYCkAoLQwECf0EBIQECQCAALwEAIgJBd2pB//8DcUEFSQ0AIAJBgAFyQaABRg0AQQAhASACEChFDQAgAkEuRyAAECpyDwsgAQs9AQJ/QQAhAgJAQQAoAtwJIgMgAEsNACAALwEAIAFHDQACQCADIABHDQBBAQ8LIABBfmovAQAQICECCyACC2gBAn9BASEBAkACQCAAQV9qIgJBBUsNAEEBIAJ0QTFxDQELIABB+P8DcUEoRg0AIABBRmpB//8DcUEGSQ0AAkAgAEGlf2oiAkEDSw0AIAJBAUcNAQsgAEGFf2pB//8DcUEESSEBCyABC5wBAQN/QQAoArAKIQECQANAAkACQCABLwEAIgJBL0cNAAJAIAEvAQIiAUEqRg0AIAFBL0cNBBAYDAILIAAQGQwBCwJAAkAgAEUNACACQXdqIgFBF0sNAUEBIAF0QZ+AgARxRQ0BDAILIAIQIUUNAwwBCyACQaABRw0CC0EAQQAoArAKIgNBAmoiATYCsAogA0EAKAK0CkkNAAsLIAILMQEBf0EAIQECQCAALwEAQS5HDQAgAEF+ai8BAEEuRw0AIABBfGovAQBBLkYhAQsgAQumBAEBfwJAIAFBIkYNACABQSdGDQAQJQ8LQQAoArAKIQMgARAaIAAgA0ECakEAKAKwCkEAKALQCRABAkAgAkEBSA0AQQAoAvAJQQRBBiACQQFGGzYCHAtBAEEAKAKwCkECajYCsAoCQAJAAkACQEEAECkiAUHhAEYNACABQfcARg0BQQAoArAKIQEMAgtBACgCsAoiAUECakHACEEKEC8NAUEGIQIMAgtBACgCsAoiAS8BAkHpAEcNACABLwEEQfQARw0AQQQhAiABLwEGQegARg0BC0EAIAFBfmo2ArAKDwtBACABIAJBAXRqNgKwCgJAQQEQKUH7AEYNAEEAIAE2ArAKDwtBACgCsAoiACECA0BBACACQQJqNgKwCgJAAkACQEEBECkiAkEiRg0AIAJBJ0cNAUEnEBpBAEEAKAKwCkECajYCsApBARApIQIMAgtBIhAaQQBBACgCsApBAmo2ArAKQQEQKSECDAELIAIQLCECCwJAIAJBOkYNAEEAIAE2ArAKDwtBAEEAKAKwCkECajYCsAoCQEEBECkiAkEiRg0AIAJBJ0YNAEEAIAE2ArAKDwsgAhAaQQBBACgCsApBAmo2ArAKAkACQEEBECkiAkEsRg0AIAJB/QBGDQFBACABNgKwCg8LQQBBACgCsApBAmo2ArAKQQEQKUH9AEYNAEEAKAKwCiECDAELC0EAKALwCSIBIAA2AhAgAUEAKAKwCkECajYCDAttAQJ/AkACQANAAkAgAEH//wNxIgFBd2oiAkEXSw0AQQEgAnRBn4CABHENAgsgAUGgAUYNASAAIQIgARAoDQJBACECQQBBACgCsAoiAEECajYCsAogAC8BAiIADQAMAgsLIAAhAgsgAkH//wNxC6sBAQR/AkACQEEAKAKwCiICLwEAIgNB4QBGDQAgASEEIAAhBQwBC0EAIAJBBGo2ArAKQQEQKSECQQAoArAKIQUCQAJAIAJBIkYNACACQSdGDQAgAhAsGkEAKAKwCiEEDAELIAIQGkEAQQAoArAKQQJqIgQ2ArAKC0EBECkhA0EAKAKwCiECCwJAIAIgBUYNACAFIARBACAAIAAgAUYiAhtBACABIAIbEAILIAMLcgEEf0EAKAKwCiEAQQAoArQKIQECQAJAA0AgAEECaiECIAAgAU8NAQJAAkAgAi8BACIDQaR/ag4CAQQACyACIQAgA0F2ag4EAgEBAgELIABBBGohAAwACwtBACACNgKwChAlQQAPC0EAIAI2ArAKQd0AC0kBA39BACEDAkAgAkUNAAJAA0AgAC0AACIEIAEtAAAiBUcNASABQQFqIQEgAEEBaiEAIAJBf2oiAg0ADAILCyAEIAVrIQMLIAMLC+wBAgBBgAgLzgEAAHgAcABvAHIAdABtAHAAbwByAHQAZgBvAHIAZQB0AGEAbwB1AHIAYwBlAHIAbwBtAHUAbgBjAHQAaQBvAG4AcwBzAGUAcgB0AHYAbwB5AGkAZQBkAGUAbABlAGMAbwBuAHQAaQBuAGkAbgBzAHQAYQBuAHQAeQBiAHIAZQBhAHIAZQB0AHUAcgBkAGUAYgB1AGcAZwBlAGEAdwBhAGkAdABoAHIAdwBoAGkAbABlAGkAZgBjAGEAdABjAGYAaQBuAGEAbABsAGUAbABzAABB0AkLEAEAAAACAAAAAAQAAEA5AAA=", "undefined" != typeof Buffer ? Buffer.from(A$1, "base64") : Uint8Array.from(atob(A$1), (A$2) => A$2.charCodeAt(0)); var A$1; }; const init = WebAssembly.compile(E()).then(WebAssembly.instantiate).then(({ exports: A$1 }) => { C = A$1; }); //#endregion //#region ../../node_modules/.pnpm/convert-source-map@2.0.0/node_modules/convert-source-map/index.js var require_convert_source_map = __commonJS({ "../../node_modules/.pnpm/convert-source-map@2.0.0/node_modules/convert-source-map/index.js"(exports) { Object.defineProperty(exports, "commentRegex", { get: function getCommentRegex() { return /^\s*?\/[\/\*][@#]\s+?sourceMappingURL=data:(((?:application|text)\/json)(?:;charset=([^;,]+?)?)?)?(?:;(base64))?,(.*?)$/gm; } }); Object.defineProperty(exports, "mapFileCommentRegex", { get: function getMapFileCommentRegex() { return /(?:\/\/[@#][ \t]+?sourceMappingURL=([^\s'"`]+?)[ \t]*?$)|(?:\/\*[@#][ \t]+sourceMappingURL=([^*]+?)[ \t]*?(?:\*\/){1}[ \t]*?$)/gm; } }); var decodeBase64; if (typeof Buffer !== "undefined") if (typeof Buffer.from === "function") decodeBase64 = decodeBase64WithBufferFrom; else decodeBase64 = decodeBase64WithNewBuffer; else decodeBase64 = decodeBase64WithAtob; function decodeBase64WithBufferFrom(base64) { return Buffer.from(base64, "base64").toString(); } function decodeBase64WithNewBuffer(base64) { if (typeof value === "number") throw new TypeError("The value to decode must not be of type number."); return new Buffer(base64, "base64").toString(); } function decodeBase64WithAtob(base64) { return decodeURIComponent(escape(atob(base64))); } function stripComment(sm) { return sm.split(",").pop(); } function readFromFileMap(sm, read) { var r$2 = exports.mapFileCommentRegex.exec(sm); var filename = r$2[1] || r$2[2]; try { var sm = read(filename); if (sm != null && typeof sm.catch === "function") return sm.catch(throwError); else return sm; } catch (e$1) { throwError(e$1); } function throwError(e$1) { throw new Error("An error occurred while trying to read the map file at " + filename + "\n" + e$1.stack); } } function Converter(sm, opts) { opts = opts || {}; if (opts.hasComment) sm = stripComment(sm); if (opts.encoding === "base64") sm = decodeBase64(sm); else if (opts.encoding === "uri") sm = decodeURIComponent(sm); if (opts.isJSON || opts.encoding) sm = JSON.parse(sm); this.sourcemap = sm; } Converter.prototype.toJSON = function(space) { return JSON.stringify(this.sourcemap, null, space); }; if (typeof Buffer !== "undefined") if (typeof Buffer.from === "function") Converter.prototype.toBase64 = encodeBase64WithBufferFrom; else Converter.prototype.toBase64 = encodeBase64WithNewBuffer; else Converter.prototype.toBase64 = encodeBase64WithBtoa; function encodeBase64WithBufferFrom() { var json = this.toJSON(); return Buffer.from(json, "utf8").toString("base64"); } function encodeBase64WithNewBuffer() { var json = this.toJSON(); if (typeof json === "number") throw new TypeError("The json to encode must not be of type number."); return new Buffer(json, "utf8").toString("base64"); } function encodeBase64WithBtoa() { var json = this.toJSON(); return btoa(unescape(encodeURIComponent(json))); } Converter.prototype.toURI = function() { var json = this.toJSON(); return encodeURIComponent(json); }; Converter.prototype.toComment = function(options$1) { var encoding, content, data; if (options$1 != null && options$1.encoding === "uri") { encoding = ""; content = this.toURI(); } else { encoding = ";base64"; content = this.toBase64(); } data = "sourceMappingURL=data:application/json;charset=utf-8" + encoding + "," + content; return options$1 != null && options$1.multiline ? "/*# " + data + " */" : "//# " + data; }; Converter.prototype.toObject = function() { return JSON.parse(this.toJSON()); }; Converter.prototype.addProperty = function(key, value$1) { if (this.sourcemap.hasOwnProperty(key)) throw new Error("property \"" + key + "\" already exists on the sourcemap, use set property instead"); return this.setProperty(key, value$1); }; Converter.prototype.setProperty = function(key, value$1) { this.sourcemap[key] = value$1; return this; }; Converter.prototype.getProperty = function(key) { return this.sourcemap[key]; }; exports.fromObject = function(obj) { return new Converter(obj); }; exports.fromJSON = function(json) { return new Converter(json, { isJSON: true }); }; exports.fromURI = function(uri) { return new Converter(uri, { encoding: "uri" }); }; exports.fromBase64 = function(base64) { return new Converter(base64, { encoding: "base64" }); }; exports.fromComment = function(comment) { var m$2, encoding; comment = comment.replace(/^\/\*/g, "//").replace(/\*\/$/g, ""); m$2 = exports.commentRegex.exec(comment); encoding = m$2 && m$2[4] || "uri"; return new Converter(comment, { encoding, hasComment: true }); }; function makeConverter(sm) { return new Converter(sm, { isJSON: true }); } exports.fromMapFileComment = function(comment, read) { if (typeof read === "string") throw new Error("String directory paths are no longer supported with `fromMapFileComment`\nPlease review the Upgrading documentation at https://github.com/thlorenz/convert-source-map#upgrading"); var sm = readFromFileMap(comment, read); if (sm != null && typeof sm.then === "function") return sm.then(makeConverter); else return makeConverter(sm); }; exports.fromSource = function(content) { var m$2 = content.match(exports.commentRegex); return m$2 ? exports.fromComment(m$2.pop()) : null; }; exports.fromMapFileSource = function(content, read) { if (typeof read === "string") throw new Error("String directory paths are no longer supported with `fromMapFileSource`\nPlease review the Upgrading documentation at https://github.com/thlorenz/convert-source-map#upgrading"); var m$2 = content.match(exports.mapFileCommentRegex); return m$2 ? exports.fromMapFileComment(m$2.pop(), read) : null; }; exports.removeComments = function(src) { return src.replace(exports.commentRegex, ""); }; exports.removeMapFileComments = function(src) { return src.replace(exports.mapFileCommentRegex, ""); }; exports.generateMapFileComment = function(file, options$1) { var data = "sourceMappingURL=" + file; return options$1 && options$1.multiline ? "/*# " + data + " */" : "//# " + data; }; } }); //#endregion //#region src/node/server/sourcemap.ts var import_convert_source_map$2 = __toESM(require_convert_source_map(), 1); const debug$16 = createDebugger("vite:sourcemap", { onlyWhenFocused: true }); const virtualSourceRE = /^(?:dep:|browser-external:|virtual:)|\0/; async function computeSourceRoute(map$1, file) { let sourceRoot; try { sourceRoot = await fsp.realpath(path.resolve(path.dirname(file), map$1.sourceRoot || "")); } catch {} return sourceRoot; } async function injectSourcesContent(map$1, file, logger) { let sourceRootPromise; const missingSources = []; const sourcesContent = map$1.sourcesContent || []; const sourcesContentPromises = []; for (let index = 0; index < map$1.sources.length; index++) { const sourcePath = map$1.sources[index]; if (sourcesContent[index] == null && sourcePath && !virtualSourceRE.test(sourcePath)) sourcesContentPromises.push((async () => { sourceRootPromise ??= computeSourceRoute(map$1, file); const sourceRoot = await sourceRootPromise; let resolvedSourcePath = cleanUrl(decodeURI(sourcePath)); if (sourceRoot) resolvedSourcePath = path.resolve(sourceRoot, resolvedSourcePath); sourcesContent[index] = await fsp.readFile(resolvedSourcePath, "utf-8").catch(() => { missingSources.push(resolvedSourcePath); return null; }); })()); } await Promise.all(sourcesContentPromises); map$1.sourcesContent = sourcesContent; if (missingSources.length) { logger.warnOnce(`Sourcemap for "${file}" points to missing source files`); debug$16?.(`Missing sources:\n ` + missingSources.join(`\n `)); } } function genSourceMapUrl(map$1) { if (typeof map$1 !== "string") map$1 = JSON.stringify(map$1); return `data:application/json;base64,${Buffer.from(map$1).toString("base64")}`; } function getCodeWithSourcemap(type, code, map$1) { if (debug$16) code += `\n/*${JSON.stringify(map$1, null, 2).replace(/\*\//g, "*\\/")}*/\n`; if (type === "js") code += `\n//# sourceMappingURL=${genSourceMapUrl(map$1)}`; else if (type === "css") code += `\n/*# sourceMappingURL=${genSourceMapUrl(map$1)} */`; return code; } function applySourcemapIgnoreList(map$1, sourcemapPath, sourcemapIgnoreList, logger) { let { x_google_ignoreList } = map$1; if (x_google_ignoreList === void 0) x_google_ignoreList = []; for (let sourcesIndex = 0; sourcesIndex < map$1.sources.length; ++sourcesIndex) { const sourcePath = map$1.sources[sourcesIndex]; if (!sourcePath) continue; const ignoreList = sourcemapIgnoreList(path.isAbsolute(sourcePath) ? sourcePath : path.resolve(path.dirname(sourcemapPath), sourcePath), sourcemapPath); if (logger && typeof ignoreList !== "boolean") logger.warn("sourcemapIgnoreList function must return a boolean."); if (ignoreList && !x_google_ignoreList.includes(sourcesIndex)) x_google_ignoreList.push(sourcesIndex); } if (x_google_ignoreList.length > 0) { if (!map$1.x_google_ignoreList) map$1.x_google_ignoreList = x_google_ignoreList; } } async function extractSourcemapFromFile(code, filePath) { const map$1 = (import_convert_source_map$2.fromSource(code) || await import_convert_source_map$2.fromMapFileSource(code, createConvertSourceMapReadMap(filePath)))?.toObject(); if (map$1) return { code: code.replace(import_convert_source_map$2.mapFileCommentRegex, blankReplacer), map: map$1 }; } function createConvertSourceMapReadMap(originalFileName) { return (filename) => { return fsp.readFile(path.resolve(path.dirname(originalFileName), filename), "utf-8"); }; } //#endregion //#region ../../node_modules/.pnpm/lilconfig@3.1.3/node_modules/lilconfig/src/index.js var require_src$1 = __commonJS({ "../../node_modules/.pnpm/lilconfig@3.1.3/node_modules/lilconfig/src/index.js"(exports, module) { const path$11 = require("path"); const fs$12 = require("fs"); const os$4 = require("os"); const url$5 = require("url"); const fsReadFileAsync = fs$12.promises.readFile; /** @type {(name: string, sync: boolean) => string[]} */ function getDefaultSearchPlaces(name, sync$3) { return [ "package.json", `.${name}rc.json`, `.${name}rc.js`, `.${name}rc.cjs`, ...sync$3 ? [] : [`.${name}rc.mjs`], `.config/${name}rc`, `.config/${name}rc.json`, `.config/${name}rc.js`, `.config/${name}rc.cjs`, ...sync$3 ? [] : [`.config/${name}rc.mjs`], `${name}.config.js`, `${name}.config.cjs`, ...sync$3 ? [] : [`${name}.config.mjs`] ]; } /** * @type {(p: string) => string} * * see #17 * On *nix, if cwd is not under homedir, * the last path will be '', ('/build' -> '') * but it should be '/' actually. * And on Windows, this will never happen. ('C:\build' -> 'C:') */ function parentDir(p$1) { return path$11.dirname(p$1) || path$11.sep; } /** @type {import('./index').LoaderSync} */ const jsonLoader = (_, content) => JSON.parse(content); const requireFunc = typeof __webpack_require__ === "function" ? __non_webpack_require__ : require; /** @type {import('./index').LoadersSync} */ const defaultLoadersSync = Object.freeze({ ".js": requireFunc, ".json": requireFunc, ".cjs": requireFunc, noExt: jsonLoader }); module.exports.defaultLoadersSync = defaultLoadersSync; /** @type {import('./index').Loader} */ const dynamicImport = async (id) => { try { const fileUrl = url$5.pathToFileURL(id).href; const mod = await import( /* webpackIgnore: true */ fileUrl); return mod.default; } catch (e$1) { try { return requireFunc(id); } catch (requireE) { if (requireE.code === "ERR_REQUIRE_ESM" || requireE instanceof SyntaxError && requireE.toString().includes("Cannot use import statement outside a module")) throw e$1; throw requireE; } } }; /** @type {import('./index').Loaders} */ const defaultLoaders = Object.freeze({ ".js": dynamicImport, ".mjs": dynamicImport, ".cjs": dynamicImport, ".json": jsonLoader, noExt: jsonLoader }); module.exports.defaultLoaders = defaultLoaders; /** * @param {string} name * @param {import('./index').Options | import('./index').OptionsSync} options * @param {boolean} sync * @returns {Required} */ function getOptions(name, options$1, sync$3) { /** @type {Required} */ const conf = { stopDir: os$4.homedir(), searchPlaces: getDefaultSearchPlaces(name, sync$3), ignoreEmptySearchPlaces: true, cache: true, transform: (x) => x, packageProp: [name], ...options$1, loaders: { ...sync$3 ? defaultLoadersSync : defaultLoaders, ...options$1.loaders } }; conf.searchPlaces.forEach((place) => { const key = path$11.extname(place) || "noExt"; const loader$1 = conf.loaders[key]; if (!loader$1) throw new Error(`Missing loader for extension "${place}"`); if (typeof loader$1 !== "function") throw new Error(`Loader for extension "${place}" is not a function: Received ${typeof loader$1}.`); }); return conf; } /** @type {(props: string | string[], obj: Record) => unknown} */ function getPackageProp(props, obj) { if (typeof props === "string" && props in obj) return obj[props]; return (Array.isArray(props) ? props : props.split(".")).reduce((acc, prop) => acc === void 0 ? acc : acc[prop], obj) || null; } /** @param {string} filepath */ function validateFilePath(filepath) { if (!filepath) throw new Error("load must pass a non-empty string"); } /** @type {(loader: import('./index').Loader, ext: string) => void} */ function validateLoader(loader$1, ext) { if (!loader$1) throw new Error(`No loader specified for extension "${ext}"`); if (typeof loader$1 !== "function") throw new Error("loader is not a function"); } /** @type {(enableCache: boolean) => (c: Map, filepath: string, res: T) => T} */ const makeEmplace = (enableCache) => (c, filepath, res) => { if (enableCache) c.set(filepath, res); return res; }; /** @type {import('./index').lilconfig} */ module.exports.lilconfig = function lilconfig(name, options$1) { const { ignoreEmptySearchPlaces, loaders, packageProp, searchPlaces, stopDir, transform: transform$2, cache: cache$1 } = getOptions(name, options$1 ?? {}, false); const searchCache = /* @__PURE__ */ new Map(); const loadCache = /* @__PURE__ */ new Map(); const emplace = makeEmplace(cache$1); return { async search(searchFrom = process.cwd()) { /** @type {import('./index').LilconfigResult} */ const result = { config: null, filepath: "" }; /** @type {Set} */ const visited = /* @__PURE__ */ new Set(); let dir = searchFrom; dirLoop: while (true) { if (cache$1) { const r$2 = searchCache.get(dir); if (r$2 !== void 0) { for (const p$1 of visited) searchCache.set(p$1, r$2); return r$2; } visited.add(dir); } for (const searchPlace of searchPlaces) { const filepath = path$11.join(dir, searchPlace); try { await fs$12.promises.access(filepath); } catch { continue; } const content = String(await fsReadFileAsync(filepath)); const loaderKey = path$11.extname(searchPlace) || "noExt"; const loader$1 = loaders[loaderKey]; if (searchPlace === "package.json") { const pkg = await loader$1(filepath, content); const maybeConfig = getPackageProp(packageProp, pkg); if (maybeConfig != null) { result.config = maybeConfig; result.filepath = filepath; break dirLoop; } continue; } const isEmpty = content.trim() === ""; if (isEmpty && ignoreEmptySearchPlaces) continue; if (isEmpty) { result.isEmpty = true; result.config = void 0; } else { validateLoader(loader$1, loaderKey); result.config = await loader$1(filepath, content); } result.filepath = filepath; break dirLoop; } if (dir === stopDir || dir === parentDir(dir)) break dirLoop; dir = parentDir(dir); } const transformed = result.filepath === "" && result.config === null ? transform$2(null) : transform$2(result); if (cache$1) for (const p$1 of visited) searchCache.set(p$1, transformed); return transformed; }, async load(filepath) { validateFilePath(filepath); const absPath = path$11.resolve(process.cwd(), filepath); if (cache$1 && loadCache.has(absPath)) return loadCache.get(absPath); const { base, ext } = path$11.parse(absPath); const loaderKey = ext || "noExt"; const loader$1 = loaders[loaderKey]; validateLoader(loader$1, loaderKey); const content = String(await fsReadFileAsync(absPath)); if (base === "package.json") { const pkg = await loader$1(absPath, content); return emplace(loadCache, absPath, transform$2({ config: getPackageProp(packageProp, pkg), filepath: absPath })); } /** @type {import('./index').LilconfigResult} */ const result = { config: null, filepath: absPath }; const isEmpty = content.trim() === ""; if (isEmpty && ignoreEmptySearchPlaces) return emplace(loadCache, absPath, transform$2({ config: void 0, filepath: absPath, isEmpty: true })); result.config = isEmpty ? void 0 : await loader$1(absPath, content); return emplace(loadCache, absPath, transform$2(isEmpty ? { ...result, isEmpty, config: void 0 } : result)); }, clearLoadCache() { if (cache$1) loadCache.clear(); }, clearSearchCache() { if (cache$1) searchCache.clear(); }, clearCaches() { if (cache$1) { loadCache.clear(); searchCache.clear(); } } }; }; /** @type {import('./index').lilconfigSync} */ module.exports.lilconfigSync = function lilconfigSync(name, options$1) { const { ignoreEmptySearchPlaces, loaders, packageProp, searchPlaces, stopDir, transform: transform$2, cache: cache$1 } = getOptions(name, options$1 ?? {}, true); const searchCache = /* @__PURE__ */ new Map(); const loadCache = /* @__PURE__ */ new Map(); const emplace = makeEmplace(cache$1); return { search(searchFrom = process.cwd()) { /** @type {import('./index').LilconfigResult} */ const result = { config: null, filepath: "" }; /** @type {Set} */ const visited = /* @__PURE__ */ new Set(); let dir = searchFrom; dirLoop: while (true) { if (cache$1) { const r$2 = searchCache.get(dir); if (r$2 !== void 0) { for (const p$1 of visited) searchCache.set(p$1, r$2); return r$2; } visited.add(dir); } for (const searchPlace of searchPlaces) { const filepath = path$11.join(dir, searchPlace); try { fs$12.accessSync(filepath); } catch { continue; } const loaderKey = path$11.extname(searchPlace) || "noExt"; const loader$1 = loaders[loaderKey]; const content = String(fs$12.readFileSync(filepath)); if (searchPlace === "package.json") { const pkg = loader$1(filepath, content); const maybeConfig = getPackageProp(packageProp, pkg); if (maybeConfig != null) { result.config = maybeConfig; result.filepath = filepath; break dirLoop; } continue; } const isEmpty = content.trim() === ""; if (isEmpty && ignoreEmptySearchPlaces) continue; if (isEmpty) { result.isEmpty = true; result.config = void 0; } else { validateLoader(loader$1, loaderKey); result.config = loader$1(filepath, content); } result.filepath = filepath; break dirLoop; } if (dir === stopDir || dir === parentDir(dir)) break dirLoop; dir = parentDir(dir); } const transformed = result.filepath === "" && result.config === null ? transform$2(null) : transform$2(result); if (cache$1) for (const p$1 of visited) searchCache.set(p$1, transformed); return transformed; }, load(filepath) { validateFilePath(filepath); const absPath = path$11.resolve(process.cwd(), filepath); if (cache$1 && loadCache.has(absPath)) return loadCache.get(absPath); const { base, ext } = path$11.parse(absPath); const loaderKey = ext || "noExt"; const loader$1 = loaders[loaderKey]; validateLoader(loader$1, loaderKey); const content = String(fs$12.readFileSync(absPath)); if (base === "package.json") { const pkg = loader$1(absPath, content); return transform$2({ config: getPackageProp(packageProp, pkg), filepath: absPath }); } const result = { config: null, filepath: absPath }; const isEmpty = content.trim() === ""; if (isEmpty && ignoreEmptySearchPlaces) return emplace(loadCache, absPath, transform$2({ filepath: absPath, config: void 0, isEmpty: true })); result.config = isEmpty ? void 0 : loader$1(absPath, content); return emplace(loadCache, absPath, transform$2(isEmpty ? { ...result, isEmpty, config: void 0 } : result)); }, clearLoadCache() { if (cache$1) loadCache.clear(); }, clearSearchCache() { if (cache$1) searchCache.clear(); }, clearCaches() { if (cache$1) { loadCache.clear(); searchCache.clear(); } } }; }; } }); //#endregion //#region ../../node_modules/.pnpm/postcss-load-config@6.0.1_jiti@2.4.2_postcss@8.5.6_tsx@4.20.3_yaml@2.8.0/node_modules/postcss-load-config/src/req.js var require_req = __commonJS({ "../../node_modules/.pnpm/postcss-load-config@6.0.1_jiti@2.4.2_postcss@8.5.6_tsx@4.20.3_yaml@2.8.0/node_modules/postcss-load-config/src/req.js"(exports, module) { const { createRequire: createRequire$2 } = require("node:module"); const { fileURLToPath: fileURLToPath$1, pathToFileURL: pathToFileURL$1 } = require("node:url"); const TS_EXT_RE = /\.[mc]?ts$/; let tsx; let jiti; let importError = []; /** * @param {string} name * @param {string} rootFile * @returns {Promise} */ async function req$3(name, rootFile = fileURLToPath$1(import.meta.url)) { let url$6 = createRequire$2(rootFile).resolve(name); try { return (await import(`${pathToFileURL$1(url$6)}?t=${Date.now()}`)).default; } catch (err$2) { if (!TS_EXT_RE.test(url$6)) /* c8 ignore start */ throw err$2; } if (tsx === void 0) try { tsx = await import("tsx/cjs/api"); } catch (error$1) { importError.push(error$1); } if (tsx) { let loaded = tsx.require(name, rootFile); return loaded && "__esModule" in loaded ? loaded.default : loaded; } if (jiti === void 0) try { jiti = (await import("jiti")).default; } catch (error$1) { importError.push(error$1); } if (jiti) return jiti(rootFile, { interopDefault: true })(name); throw new Error(`'tsx' or 'jiti' is required for the TypeScript configuration files. Make sure it is installed\nError: ${importError.map((error$1) => error$1.message).join("\n")}`); } module.exports = req$3; } }); //#endregion //#region ../../node_modules/.pnpm/postcss-load-config@6.0.1_jiti@2.4.2_postcss@8.5.6_tsx@4.20.3_yaml@2.8.0/node_modules/postcss-load-config/src/options.js var require_options = __commonJS({ "../../node_modules/.pnpm/postcss-load-config@6.0.1_jiti@2.4.2_postcss@8.5.6_tsx@4.20.3_yaml@2.8.0/node_modules/postcss-load-config/src/options.js"(exports, module) { const req$2 = require_req(); /** * Load Options * * @private * @method options * * @param {Object} config PostCSS Config * * @return {Promise} options PostCSS Options */ async function options(config$2, file) { if (config$2.parser && typeof config$2.parser === "string") try { config$2.parser = await req$2(config$2.parser, file); } catch (err$2) { throw new Error(`Loading PostCSS Parser failed: ${err$2.message}\n\n(@${file})`); } if (config$2.syntax && typeof config$2.syntax === "string") try { config$2.syntax = await req$2(config$2.syntax, file); } catch (err$2) { throw new Error(`Loading PostCSS Syntax failed: ${err$2.message}\n\n(@${file})`); } if (config$2.stringifier && typeof config$2.stringifier === "string") try { config$2.stringifier = await req$2(config$2.stringifier, file); } catch (err$2) { throw new Error(`Loading PostCSS Stringifier failed: ${err$2.message}\n\n(@${file})`); } return config$2; } module.exports = options; } }); //#endregion //#region ../../node_modules/.pnpm/postcss-load-config@6.0.1_jiti@2.4.2_postcss@8.5.6_tsx@4.20.3_yaml@2.8.0/node_modules/postcss-load-config/src/plugins.js var require_plugins = __commonJS({ "../../node_modules/.pnpm/postcss-load-config@6.0.1_jiti@2.4.2_postcss@8.5.6_tsx@4.20.3_yaml@2.8.0/node_modules/postcss-load-config/src/plugins.js"(exports, module) { const req$1 = require_req(); /** * Plugin Loader * * @private * @method load * * @param {String} plugin PostCSS Plugin Name * @param {Object} options PostCSS Plugin Options * * @return {Promise} PostCSS Plugin */ async function load$1(plugin, options$1, file) { try { if (options$1 === null || options$1 === void 0 || Object.keys(options$1).length === 0) return await req$1(plugin, file); else return (await req$1(plugin, file))(options$1); } catch (err$2) { throw new Error(`Loading PostCSS Plugin failed: ${err$2.message}\n\n(@${file})`); } } /** * Load Plugins * * @private * @method plugins * * @param {Object} config PostCSS Config Plugins * * @return {Promise} plugins PostCSS Plugins */ async function plugins(config$2, file) { let list = []; if (Array.isArray(config$2.plugins)) list = config$2.plugins.filter(Boolean); else { list = Object.entries(config$2.plugins).filter(([, options$1]) => { return options$1 !== false; }).map(([plugin, options$1]) => { return load$1(plugin, options$1, file); }); list = await Promise.all(list); } if (list.length && list.length > 0) list.forEach((plugin, i$1) => { if (plugin.default) plugin = plugin.default; if (plugin.postcss === true) plugin = plugin(); else if (plugin.postcss) plugin = plugin.postcss; if (!(typeof plugin === "object" && Array.isArray(plugin.plugins) || typeof plugin === "object" && plugin.postcssPlugin || typeof plugin === "function")) throw new TypeError(`Invalid PostCSS Plugin found at: plugins[${i$1}]\n\n(@${file})`); }); return list; } module.exports = plugins; } }); //#endregion //#region ../../node_modules/.pnpm/postcss-load-config@6.0.1_jiti@2.4.2_postcss@8.5.6_tsx@4.20.3_yaml@2.8.0/node_modules/postcss-load-config/src/index.js var require_src = __commonJS({ "../../node_modules/.pnpm/postcss-load-config@6.0.1_jiti@2.4.2_postcss@8.5.6_tsx@4.20.3_yaml@2.8.0/node_modules/postcss-load-config/src/index.js"(exports, module) { const { resolve: resolve$2 } = require("node:path"); const config$1 = require_src$1(); const loadOptions = require_options(); const loadPlugins = require_plugins(); const req = require_req(); const interopRequireDefault = (obj) => obj && obj.__esModule ? obj : { default: obj }; /** * Process the result from cosmiconfig * * @param {Object} ctx Config Context * @param {Object} result Cosmiconfig result * * @return {Promise} PostCSS Config */ async function processResult(ctx, result) { let file = result.filepath || ""; let projectConfig = interopRequireDefault(result.config).default || {}; if (typeof projectConfig === "function") projectConfig = projectConfig(ctx); else projectConfig = Object.assign({}, projectConfig, ctx); if (!projectConfig.plugins) projectConfig.plugins = []; let res = { file, options: await loadOptions(projectConfig, file), plugins: await loadPlugins(projectConfig, file) }; delete projectConfig.plugins; return res; } /** * Builds the Config Context * * @param {Object} ctx Config Context * * @return {Object} Config Context */ function createContext(ctx) { /** * @type {Object} * * @prop {String} cwd=process.cwd() Config search start location * @prop {String} env=process.env.NODE_ENV Config Enviroment, will be set to `development` by `postcss-load-config` if `process.env.NODE_ENV` is `undefined` */ ctx = Object.assign({ cwd: process.cwd(), env: process.env.NODE_ENV }, ctx); if (!ctx.env) process.env.NODE_ENV = "development"; return ctx; } async function loader(filepath) { return req(filepath); } let yaml; async function yamlLoader(_, content) { if (!yaml) try { yaml = await import("yaml"); } catch (e$1) { /* c8 ignore start */ throw new Error(`'yaml' is required for the YAML configuration files. Make sure it is installed\nError: ${e$1.message}`); } return yaml.parse(content); } /** @return {import('lilconfig').Options} */ const withLoaders = (options$1 = {}) => { let moduleName = "postcss"; return { ...options$1, loaders: { ...options$1.loaders, ".cjs": loader, ".cts": loader, ".js": loader, ".mjs": loader, ".mts": loader, ".ts": loader, ".yaml": yamlLoader, ".yml": yamlLoader }, searchPlaces: [ ...options$1.searchPlaces || [], "package.json", `.${moduleName}rc`, `.${moduleName}rc.json`, `.${moduleName}rc.yaml`, `.${moduleName}rc.yml`, `.${moduleName}rc.ts`, `.${moduleName}rc.cts`, `.${moduleName}rc.mts`, `.${moduleName}rc.js`, `.${moduleName}rc.cjs`, `.${moduleName}rc.mjs`, `${moduleName}.config.ts`, `${moduleName}.config.cts`, `${moduleName}.config.mts`, `${moduleName}.config.js`, `${moduleName}.config.cjs`, `${moduleName}.config.mjs` ] }; }; /** * Load Config * * @method rc * * @param {Object} ctx Config Context * @param {String} path Config Path * @param {Object} options Config Options * * @return {Promise} config PostCSS Config */ function rc(ctx, path$13, options$1) { /** * @type {Object} The full Config Context */ ctx = createContext(ctx); /** * @type {String} `process.cwd()` */ path$13 = path$13 ? resolve$2(path$13) : process.cwd(); return config$1.lilconfig("postcss", withLoaders(options$1)).search(path$13).then((result) => { if (!result) throw new Error(`No PostCSS Config found in: ${path$13}`); return processResult(ctx, result); }); } /** * Autoload Config for PostCSS * * @author Michael Ciniawsky @michael-ciniawsky * @license MIT * * @module postcss-load-config * @version 2.1.0 * * @requires comsiconfig * @requires ./options * @requires ./plugins */ module.exports = rc; } }); //#endregion //#region ../../node_modules/.pnpm/@rollup+plugin-alias@5.1.1_rollup@4.40.1/node_modules/@rollup/plugin-alias/dist/es/index.js function matches$1(pattern, importee) { if (pattern instanceof RegExp) return pattern.test(importee); if (importee.length < pattern.length) return false; if (importee === pattern) return true; return importee.startsWith(pattern + "/"); } function getEntries({ entries, customResolver }) { if (!entries) return []; const resolverFunctionFromOptions = resolveCustomResolver(customResolver); if (Array.isArray(entries)) return entries.map((entry) => { return { find: entry.find, replacement: entry.replacement, resolverFunction: resolveCustomResolver(entry.customResolver) || resolverFunctionFromOptions }; }); return Object.entries(entries).map(([key, value$1]) => { return { find: key, replacement: value$1, resolverFunction: resolverFunctionFromOptions }; }); } function getHookFunction(hook) { if (typeof hook === "function") return hook; if (hook && "handler" in hook && typeof hook.handler === "function") return hook.handler; return null; } function resolveCustomResolver(customResolver) { if (typeof customResolver === "function") return customResolver; if (customResolver) return getHookFunction(customResolver.resolveId); return null; } function alias(options$1 = {}) { const entries = getEntries(options$1); if (entries.length === 0) return { name: "alias", resolveId: () => null }; return { name: "alias", async buildStart(inputOptions) { await Promise.all([...Array.isArray(options$1.entries) ? options$1.entries : [], options$1].map(({ customResolver }) => { var _a; return customResolver && ((_a = getHookFunction(customResolver.buildStart)) === null || _a === void 0 ? void 0 : _a.call(this, inputOptions)); })); }, resolveId(importee, importer, resolveOptions) { const matchedEntry = entries.find((entry) => matches$1(entry.find, importee)); if (!matchedEntry) return null; const updatedId = importee.replace(matchedEntry.find, matchedEntry.replacement); if (matchedEntry.resolverFunction) return matchedEntry.resolverFunction.call(this, updatedId, importer, resolveOptions); return this.resolve(updatedId, importer, Object.assign({ skipSelf: true }, resolveOptions)).then((resolved) => { if (resolved) return resolved; if (!path$1.isAbsolute(updatedId)) this.warn(`rewrote ${importee} to ${updatedId} but was not an abolute path and was not handled by other plugins. This will lead to duplicated modules for the same path. To avoid duplicating modules, you should resolve to an absolute path.`); return { id: updatedId }; }); } }; } //#endregion //#region src/node/plugins/json.ts const jsonExtRE = /\.json(?:$|\?)(?!commonjs-(?:proxy|external))/; const jsonObjRE = /^\s*\{/; const jsonLangs = `\\.(?:json|json5)(?:$|\\?)`; const jsonLangRE = new RegExp(jsonLangs); const isJSONRequest = (request) => jsonLangRE.test(request); function jsonPlugin(options$1, isBuild) { return { name: "vite:json", transform: { handler(json, id) { if (!jsonExtRE.test(id)) return null; if (SPECIAL_QUERY_RE.test(id)) return null; if (inlineRE$3.test(id) || noInlineRE.test(id)) this.warn("\nUsing ?inline or ?no-inline for JSON imports will have no effect.\nPlease use ?url&inline or ?url&no-inline to control JSON file inlining behavior.\n"); json = stripBomTag(json); try { if (options$1.stringify !== false) { if (options$1.namedExports && jsonObjRE.test(json)) { const parsed = JSON.parse(json); const keys = Object.keys(parsed); let code = ""; let defaultObjectCode = "{\n"; for (const key of keys) if (key === makeLegalIdentifier(key)) { code += `export const ${key} = ${serializeValue(parsed[key])};\n`; defaultObjectCode += ` ${key},\n`; } else defaultObjectCode += ` ${JSON.stringify(key)}: ${serializeValue(parsed[key])},\n`; defaultObjectCode += "}"; code += `export default ${defaultObjectCode};\n`; return { code, map: { mappings: "" } }; } if (options$1.stringify === true || json.length > 10 * 1e3) { if (isBuild) json = JSON.stringify(JSON.parse(json)); return { code: `export default /* #__PURE__ */ JSON.parse(${JSON.stringify(json)})`, map: { mappings: "" } }; } } return { code: dataToEsm(JSON.parse(json), { preferConst: true, namedExports: options$1.namedExports }), map: { mappings: "" } }; } catch (e$1) { const position = extractJsonErrorPosition(e$1.message, json.length); const msg = position ? `, invalid JSON syntax found at position ${position}` : `.`; this.error(`Failed to parse JSON file` + msg, position); } } } }; } function serializeValue(value$1) { const valueAsString = JSON.stringify(value$1); if (typeof value$1 === "object" && value$1 != null && valueAsString.length > 10 * 1e3) return `/* #__PURE__ */ JSON.parse(${JSON.stringify(valueAsString)})`; return valueAsString; } function extractJsonErrorPosition(errorMessage, inputLength) { if (errorMessage.startsWith("Unexpected end of JSON input")) return inputLength - 1; const errorMessageList = /at position (\d+)/.exec(errorMessage); return errorMessageList ? Math.max(parseInt(errorMessageList[1], 10) - 1, 0) : void 0; } //#endregion //#region ../../node_modules/.pnpm/resolve.exports@2.0.3/node_modules/resolve.exports/dist/index.mjs function e(e$1, n$2, r$2) { throw new Error(r$2 ? `No known conditions for "${n$2}" specifier in "${e$1}" package` : `Missing "${n$2}" specifier in "${e$1}" package`); } function n(n$2, i$1, o$1, f$1) { let s$2, u, l = r$1(n$2, o$1), c = function(e$1) { let n$3 = new Set(["default", ...e$1.conditions || []]); return e$1.unsafe || n$3.add(e$1.require ? "require" : "import"), e$1.unsafe || n$3.add(e$1.browser ? "browser" : "node"), n$3; }(f$1 || {}), a = i$1[l]; if (void 0 === a) { let e$1, n$3, r$2, t$1; for (t$1 in i$1) n$3 && t$1.length < n$3.length || ("/" === t$1[t$1.length - 1] && l.startsWith(t$1) ? (u = l.substring(t$1.length), n$3 = t$1) : t$1.length > 1 && (r$2 = t$1.indexOf("*", 1), ~r$2 && (e$1 = RegExp("^" + t$1.substring(0, r$2) + "(.*)" + t$1.substring(1 + r$2) + "$").exec(l), e$1 && e$1[1] && (u = e$1[1], n$3 = t$1)))); a = i$1[n$3]; } return a || e(n$2, l), s$2 = t(a, c), s$2 || e(n$2, l, 1), u && function(e$1, n$3) { let r$2, t$1 = 0, i$2 = e$1.length, o$2 = /[*]/g, f$2 = /[/]$/; for (; t$1 < i$2; t$1++) e$1[t$1] = o$2.test(r$2 = e$1[t$1]) ? r$2.replace(o$2, n$3) : f$2.test(r$2) ? r$2 + n$3 : r$2; }(s$2, u), s$2; } function r$1(e$1, n$2, r$2) { if (e$1 === n$2 || "." === n$2) return "."; let t$1 = e$1 + "/", i$1 = t$1.length, o$1 = n$2.slice(0, i$1) === t$1, f$1 = o$1 ? n$2.slice(i$1) : n$2; return "#" === f$1[0] ? f$1 : o$1 || !r$2 ? "./" === f$1.slice(0, 2) ? f$1 : "./" + f$1 : f$1; } function t(e$1, n$2, r$2) { if (e$1) { if ("string" == typeof e$1) return r$2 && r$2.add(e$1), [e$1]; let i$1, o$1; if (Array.isArray(e$1)) { for (o$1 = r$2 || /* @__PURE__ */ new Set(), i$1 = 0; i$1 < e$1.length; i$1++) t(e$1[i$1], n$2, o$1); if (!r$2 && o$1.size) return [...o$1]; } else for (i$1 in e$1) if (n$2.has(i$1)) return t(e$1[i$1], n$2, r$2); } } function o(e$1, r$2, t$1) { let i$1, o$1 = e$1.exports; if (o$1) { if ("string" == typeof o$1) o$1 = { ".": o$1 }; else for (i$1 in o$1) { "." !== i$1[0] && (o$1 = { ".": o$1 }); break; } return n(e$1.name, o$1, r$2 || ".", t$1); } } function f(e$1, r$2, t$1) { if (e$1.imports) return n(e$1.name, e$1.imports, r$2, t$1); } //#endregion //#region ../../node_modules/.pnpm/ufo@1.6.1/node_modules/ufo/dist/index.mjs const r = String.fromCharCode; const HASH_RE = /#/g; const AMPERSAND_RE = /&/g; const SLASH_RE = /\//g; const EQUAL_RE = /=/g; const PLUS_RE = /\+/g; const ENC_CARET_RE = /%5e/gi; const ENC_BACKTICK_RE = /%60/gi; const ENC_PIPE_RE = /%7c/gi; const ENC_SPACE_RE = /%20/gi; function encode(text) { return encodeURI("" + text).replace(ENC_PIPE_RE, "|"); } function encodeQueryValue(input) { return encode(typeof input === "string" ? input : JSON.stringify(input)).replace(PLUS_RE, "%2B").replace(ENC_SPACE_RE, "+").replace(HASH_RE, "%23").replace(AMPERSAND_RE, "%26").replace(ENC_BACKTICK_RE, "`").replace(ENC_CARET_RE, "^").replace(SLASH_RE, "%2F"); } function encodeQueryKey(text) { return encodeQueryValue(text).replace(EQUAL_RE, "%3D"); } function encodeQueryItem(key, value$1) { if (typeof value$1 === "number" || typeof value$1 === "boolean") value$1 = String(value$1); if (!value$1) return encodeQueryKey(key); if (Array.isArray(value$1)) return value$1.map((_value) => `${encodeQueryKey(key)}=${encodeQueryValue(_value)}`).join("&"); return `${encodeQueryKey(key)}=${encodeQueryValue(value$1)}`; } function stringifyQuery(query) { return Object.keys(query).filter((k) => query[k] !== void 0).map((k) => encodeQueryItem(k, query[k])).filter(Boolean).join("&"); } const protocolRelative = Symbol.for("ufo:protocolRelative"); //#endregion //#region ../../node_modules/.pnpm/mlly@1.7.4/node_modules/mlly/dist/index.mjs const BUILTIN_MODULES = new Set(builtinModules); function clearImports(imports) { return (imports || "").replace(/(\/\/[^\n]*\n|\/\*.*\*\/)/g, "").replace(/\s+/g, " "); } function getImportNames(cleanedImports) { const topLevelImports = cleanedImports.replace(/{([^}]*)}/, ""); const namespacedImport = topLevelImports.match(/\* as \s*(\S*)/)?.[1]; const defaultImport = topLevelImports.split(",").find((index) => !/[*{}]/.test(index))?.trim() || void 0; return { namespacedImport, defaultImport }; } /** * @typedef ErrnoExceptionFields * @property {number | undefined} [errnode] * @property {string | undefined} [code] * @property {string | undefined} [path] * @property {string | undefined} [syscall] * @property {string | undefined} [url] * * @typedef {Error & ErrnoExceptionFields} ErrnoException */ const own$1 = {}.hasOwnProperty; const classRegExp = /^([A-Z][a-z\d]*)+$/; const kTypes = new Set([ "string", "function", "number", "object", "Function", "Object", "boolean", "bigint", "symbol" ]); const codes$1 = {}; /** * Create a list string in the form like 'A and B' or 'A, B, ..., and Z'. * We cannot use Intl.ListFormat because it's not available in * --without-intl builds. * * @param {Array} array * An array of strings. * @param {string} [type] * The list type to be inserted before the last element. * @returns {string} */ function formatList(array, type = "and") { return array.length < 3 ? array.join(` ${type} `) : `${array.slice(0, -1).join(", ")}, ${type} ${array[array.length - 1]}`; } /** @type {Map} */ const messages = /* @__PURE__ */ new Map(); const nodeInternalPrefix = "__node_internal_"; /** @type {number} */ let userStackTraceLimit; codes$1.ERR_INVALID_ARG_TYPE = createError( "ERR_INVALID_ARG_TYPE", /** * @param {string} name * @param {Array | string} expected * @param {unknown} actual */ (name, expected, actual) => { assert(typeof name === "string", "'name' must be a string"); if (!Array.isArray(expected)) expected = [expected]; let message = "The "; if (name.endsWith(" argument")) message += `${name} `; else { const type = name.includes(".") ? "property" : "argument"; message += `"${name}" ${type} `; } message += "must be "; /** @type {Array} */ const types = []; /** @type {Array} */ const instances = []; /** @type {Array} */ const other = []; for (const value$1 of expected) { assert(typeof value$1 === "string", "All expected entries have to be of type string"); if (kTypes.has(value$1)) types.push(value$1.toLowerCase()); else if (classRegExp.exec(value$1) === null) { assert(value$1 !== "object", "The value \"object\" should be written as \"Object\""); other.push(value$1); } else instances.push(value$1); } if (instances.length > 0) { const pos = types.indexOf("object"); if (pos !== -1) { types.slice(pos, 1); instances.push("Object"); } } if (types.length > 0) { message += `${types.length > 1 ? "one of type" : "of type"} ${formatList(types, "or")}`; if (instances.length > 0 || other.length > 0) message += " or "; } if (instances.length > 0) { message += `an instance of ${formatList(instances, "or")}`; if (other.length > 0) message += " or "; } if (other.length > 0) if (other.length > 1) message += `one of ${formatList(other, "or")}`; else { if (other[0].toLowerCase() !== other[0]) message += "an "; message += `${other[0]}`; } message += `. Received ${determineSpecificType(actual)}`; return message; }, TypeError ); codes$1.ERR_INVALID_MODULE_SPECIFIER = createError( "ERR_INVALID_MODULE_SPECIFIER", /** * @param {string} request * @param {string} reason * @param {string} [base] */ (request, reason, base = void 0) => { return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ""}`; }, TypeError ); codes$1.ERR_INVALID_PACKAGE_CONFIG = createError( "ERR_INVALID_PACKAGE_CONFIG", /** * @param {string} path * @param {string} [base] * @param {string} [message] */ (path$13, base, message) => { return `Invalid package config ${path$13}${base ? ` while importing ${base}` : ""}${message ? `. ${message}` : ""}`; }, Error ); codes$1.ERR_INVALID_PACKAGE_TARGET = createError( "ERR_INVALID_PACKAGE_TARGET", /** * @param {string} packagePath * @param {string} key * @param {unknown} target * @param {boolean} [isImport=false] * @param {string} [base] */ (packagePath, key, target, isImport = false, base = void 0) => { const relatedError = typeof target === "string" && !isImport && target.length > 0 && !target.startsWith("./"); if (key === ".") { assert(isImport === false); return `Invalid "exports" main target ${JSON.stringify(target)} defined in the package config ${packagePath}package.json${base ? ` imported from ${base}` : ""}${relatedError ? "; targets must start with \"./\"" : ""}`; } return `Invalid "${isImport ? "imports" : "exports"}" target ${JSON.stringify(target)} defined for '${key}' in the package config ${packagePath}package.json${base ? ` imported from ${base}` : ""}${relatedError ? "; targets must start with \"./\"" : ""}`; }, Error ); codes$1.ERR_MODULE_NOT_FOUND = createError( "ERR_MODULE_NOT_FOUND", /** * @param {string} path * @param {string} base * @param {boolean} [exactUrl] */ (path$13, base, exactUrl = false) => { return `Cannot find ${exactUrl ? "module" : "package"} '${path$13}' imported from ${base}`; }, Error ); codes$1.ERR_NETWORK_IMPORT_DISALLOWED = createError("ERR_NETWORK_IMPORT_DISALLOWED", "import of '%s' by %s is not supported: %s", Error); codes$1.ERR_PACKAGE_IMPORT_NOT_DEFINED = createError( "ERR_PACKAGE_IMPORT_NOT_DEFINED", /** * @param {string} specifier * @param {string} packagePath * @param {string} base */ (specifier, packagePath, base) => { return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ""} imported from ${base}`; }, TypeError ); codes$1.ERR_PACKAGE_PATH_NOT_EXPORTED = createError( "ERR_PACKAGE_PATH_NOT_EXPORTED", /** * @param {string} packagePath * @param {string} subpath * @param {string} [base] */ (packagePath, subpath, base = void 0) => { if (subpath === ".") return `No "exports" main defined in ${packagePath}package.json${base ? ` imported from ${base}` : ""}`; return `Package subpath '${subpath}' is not defined by "exports" in ${packagePath}package.json${base ? ` imported from ${base}` : ""}`; }, Error ); codes$1.ERR_UNSUPPORTED_DIR_IMPORT = createError("ERR_UNSUPPORTED_DIR_IMPORT", "Directory import '%s' is not supported resolving ES modules imported from %s", Error); codes$1.ERR_UNSUPPORTED_RESOLVE_REQUEST = createError("ERR_UNSUPPORTED_RESOLVE_REQUEST", "Failed to resolve module specifier \"%s\" from \"%s\": Invalid relative URL or base scheme is not hierarchical.", TypeError); codes$1.ERR_UNKNOWN_FILE_EXTENSION = createError( "ERR_UNKNOWN_FILE_EXTENSION", /** * @param {string} extension * @param {string} path */ (extension$1, path$13) => { return `Unknown file extension "${extension$1}" for ${path$13}`; }, TypeError ); codes$1.ERR_INVALID_ARG_VALUE = createError( "ERR_INVALID_ARG_VALUE", /** * @param {string} name * @param {unknown} value * @param {string} [reason='is invalid'] */ (name, value$1, reason = "is invalid") => { let inspected = inspect(value$1); if (inspected.length > 128) inspected = `${inspected.slice(0, 128)}...`; const type = name.includes(".") ? "property" : "argument"; return `The ${type} '${name}' ${reason}. Received ${inspected}`; }, TypeError ); /** * Utility function for registering the error codes. Only used here. Exported * *only* to allow for testing. * @param {string} sym * @param {MessageFunction | string} value * @param {ErrorConstructor} constructor * @returns {new (...parameters: Array) => Error} */ function createError(sym, value$1, constructor) { messages.set(sym, value$1); return makeNodeErrorWithCode(constructor, sym); } /** * @param {ErrorConstructor} Base * @param {string} key * @returns {ErrorConstructor} */ function makeNodeErrorWithCode(Base, key) { return NodeError; /** * @param {Array} parameters */ function NodeError(...parameters) { const limit = Error.stackTraceLimit; if (isErrorStackTraceLimitWritable()) Error.stackTraceLimit = 0; const error$1 = new Base(); if (isErrorStackTraceLimitWritable()) Error.stackTraceLimit = limit; const message = getMessage(key, parameters, error$1); Object.defineProperties(error$1, { message: { value: message, enumerable: false, writable: true, configurable: true }, toString: { value() { return `${this.name} [${key}]: ${this.message}`; }, enumerable: false, writable: true, configurable: true } }); captureLargerStackTrace(error$1); error$1.code = key; return error$1; } } /** * @returns {boolean} */ function isErrorStackTraceLimitWritable() { try { if (v8.startupSnapshot.isBuildingSnapshot()) return false; } catch {} const desc = Object.getOwnPropertyDescriptor(Error, "stackTraceLimit"); if (desc === void 0) return Object.isExtensible(Error); return own$1.call(desc, "writable") && desc.writable !== void 0 ? desc.writable : desc.set !== void 0; } /** * This function removes unnecessary frames from Node.js core errors. * @template {(...parameters: unknown[]) => unknown} T * @param {T} wrappedFunction * @returns {T} */ function hideStackFrames(wrappedFunction) { const hidden = nodeInternalPrefix + wrappedFunction.name; Object.defineProperty(wrappedFunction, "name", { value: hidden }); return wrappedFunction; } const captureLargerStackTrace = hideStackFrames( /** * @param {Error} error * @returns {Error} */ function(error$1) { const stackTraceLimitIsWritable = isErrorStackTraceLimitWritable(); if (stackTraceLimitIsWritable) { userStackTraceLimit = Error.stackTraceLimit; Error.stackTraceLimit = Number.POSITIVE_INFINITY; } Error.captureStackTrace(error$1); if (stackTraceLimitIsWritable) Error.stackTraceLimit = userStackTraceLimit; return error$1; } ); /** * @param {string} key * @param {Array} parameters * @param {Error} self * @returns {string} */ function getMessage(key, parameters, self$1) { const message = messages.get(key); assert(message !== void 0, "expected `message` to be found"); if (typeof message === "function") { assert(message.length <= parameters.length, `Code: ${key}; The provided arguments length (${parameters.length}) does not match the required ones (${message.length}).`); return Reflect.apply(message, self$1, parameters); } const regex = /%[dfijoOs]/g; let expectedLength = 0; while (regex.exec(message) !== null) expectedLength++; assert(expectedLength === parameters.length, `Code: ${key}; The provided arguments length (${parameters.length}) does not match the required ones (${expectedLength}).`); if (parameters.length === 0) return message; parameters.unshift(message); return Reflect.apply(format, null, parameters); } /** * Determine the specific type of a value for type-mismatch errors. * @param {unknown} value * @returns {string} */ function determineSpecificType(value$1) { if (value$1 === null || value$1 === void 0) return String(value$1); if (typeof value$1 === "function" && value$1.name) return `function ${value$1.name}`; if (typeof value$1 === "object") { if (value$1.constructor && value$1.constructor.name) return `an instance of ${value$1.constructor.name}`; return `${inspect(value$1, { depth: -1 })}`; } let inspected = inspect(value$1, { colors: false }); if (inspected.length > 28) inspected = `${inspected.slice(0, 25)}...`; return `type ${typeof value$1} (${inspected})`; } const hasOwnProperty$1 = {}.hasOwnProperty; const { ERR_INVALID_PACKAGE_CONFIG: ERR_INVALID_PACKAGE_CONFIG$1 } = codes$1; const { ERR_UNKNOWN_FILE_EXTENSION } = codes$1; const hasOwnProperty$2 = {}.hasOwnProperty; const RegExpPrototypeSymbolReplace = RegExp.prototype[Symbol.replace]; const { ERR_NETWORK_IMPORT_DISALLOWED, ERR_INVALID_MODULE_SPECIFIER, ERR_INVALID_PACKAGE_CONFIG, ERR_INVALID_PACKAGE_TARGET, ERR_MODULE_NOT_FOUND, ERR_PACKAGE_IMPORT_NOT_DEFINED, ERR_PACKAGE_PATH_NOT_EXPORTED, ERR_UNSUPPORTED_DIR_IMPORT, ERR_UNSUPPORTED_RESOLVE_REQUEST } = codes$1; const own = {}.hasOwnProperty; const ESM_STATIC_IMPORT_RE = /(?<=\s|^|;|\})import\s*([\s"']*(?[\p{L}\p{M}\w\t\n\r $*,/{}@.]+)from\s*)?["']\s*(?(?<="\s*)[^"]*[^\s"](?=\s*")|(?<='\s*)[^']*[^\s'](?=\s*'))\s*["'][\s;]*/gmu; const TYPE_RE = /^\s*?type\s/; function parseStaticImport(matched) { const cleanedImports = clearImports(matched.imports); const namedImports = {}; const _matches = cleanedImports.match(/{([^}]*)}/)?.[1]?.split(",") || []; for (const namedImport of _matches) { const _match = namedImport.match(/^\s*(\S*) as (\S*)\s*$/); const source = _match?.[1] || namedImport.trim(); const importName = _match?.[2] || source; if (source && !TYPE_RE.test(source)) namedImports[source] = importName; } const { namespacedImport, defaultImport } = getImportNames(cleanedImports); return { ...matched, defaultImport, namespacedImport, namedImports }; } const ESM_RE = /([\s;]|^)(import[\s\w*,{}]*from|import\s*["'*{]|export\b\s*(?:[*{]|default|class|type|function|const|var|let|async function)|import\.meta\b)/m; const COMMENT_RE = /\/\*.+?\*\/|\/\/.*(?=[nr])/g; function hasESMSyntax(code, opts = {}) { if (opts.stripComments) code = code.replace(COMMENT_RE, ""); return ESM_RE.test(code); } //#endregion //#region src/node/optimizer/esbuildDepPlugin.ts const externalWithConversionNamespace = "vite:dep-pre-bundle:external-conversion"; const convertedExternalPrefix = "vite-dep-pre-bundle-external:"; const cjsExternalFacadeNamespace = "vite:cjs-external-facade"; const nonFacadePrefix = "vite-cjs-external-facade:"; const externalTypes = [ "css", "less", "sass", "scss", "styl", "stylus", "pcss", "postcss", "wasm", "vue", "svelte", "marko", "astro", "imba", "jsx", "tsx", ...KNOWN_ASSET_TYPES ]; function esbuildDepPlugin(environment, qualified, external) { const { isProduction } = environment.config; const { extensions: extensions$1 } = environment.config.optimizeDeps; const allExternalTypes = extensions$1 ? externalTypes.filter((type) => !extensions$1.includes("." + type)) : externalTypes; const esmPackageCache = /* @__PURE__ */ new Map(); const cjsPackageCache = /* @__PURE__ */ new Map(); const _resolve = createBackCompatIdResolver(environment.getTopLevelConfig(), { asSrc: false, scan: true, packageCache: esmPackageCache }); const _resolveRequire = createBackCompatIdResolver(environment.getTopLevelConfig(), { asSrc: false, isRequire: true, scan: true, packageCache: cjsPackageCache }); const resolve$4 = (id, importer, kind, resolveDir) => { let _importer; if (resolveDir) _importer = normalizePath(path.join(resolveDir, "*")); else _importer = importer in qualified ? qualified[importer] : importer; const resolver$1 = kind.startsWith("require") ? _resolveRequire : _resolve; return resolver$1(environment, id, _importer); }; const resolveResult = (id, resolved) => { if (resolved.startsWith(browserExternalId)) return { path: id, namespace: "browser-external" }; if (resolved.startsWith(optionalPeerDepId)) return { path: resolved, namespace: "optional-peer-dep" }; if (isBuiltin(environment.config.resolve.builtins, resolved)) return; if (isExternalUrl(resolved)) return { path: resolved, external: true }; return { path: path.resolve(resolved) }; }; return { name: "vite:dep-pre-bundle", setup(build$3) { build$3.onEnd(() => { esmPackageCache.clear(); cjsPackageCache.clear(); }); build$3.onResolve({ filter: /* @__PURE__ */ new RegExp(`\\.(` + allExternalTypes.join("|") + `)(\\?.*)?$`) }, async ({ path: id, importer, kind }) => { if (id.startsWith(convertedExternalPrefix)) return { path: id.slice(29), external: true }; const resolved = await resolve$4(id, importer, kind); if (resolved) { if (JS_TYPES_RE.test(resolved)) return { path: resolved, external: false }; if (kind === "require-call") return { path: resolved, namespace: externalWithConversionNamespace }; return { path: resolved, external: true }; } }); build$3.onLoad({ filter: /./, namespace: externalWithConversionNamespace }, (args) => { const modulePath = `"${convertedExternalPrefix}${args.path}"`; return { contents: isCSSRequest(args.path) && !isModuleCSSRequest(args.path) ? `import ${modulePath};` : `export { default } from ${modulePath};export * from ${modulePath};`, loader: "js" }; }); function resolveEntry(id) { const flatId = flattenId(id); if (flatId in qualified) return { path: qualified[flatId] }; } build$3.onResolve({ filter: /^[\w@][^:]/ }, async ({ path: id, importer, kind }) => { if (moduleListContains(external, id)) return { path: id, external: true }; let entry; if (!importer) { if (entry = resolveEntry(id)) return entry; const aliased = await _resolve(environment, id, void 0, true); if (aliased && (entry = resolveEntry(aliased))) return entry; } const resolved = await resolve$4(id, importer, kind); if (resolved) return resolveResult(id, resolved); }); build$3.onLoad({ filter: /.*/, namespace: "browser-external" }, ({ path: path$13 }) => { if (isProduction) return { contents: "module.exports = {}" }; else return { contents: `\ module.exports = Object.create(new Proxy({}, { get(_, key) { if ( key !== '__esModule' && key !== '__proto__' && key !== 'constructor' && key !== 'splice' ) { console.warn(\`Module "${path$13}" has been externalized for browser compatibility. Cannot access "${path$13}.\${key}" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\`) } } }))` }; }); build$3.onLoad({ filter: /.*/, namespace: "optional-peer-dep" }, ({ path: path$13 }) => { const [, peerDep, parentDep] = path$13.split(":"); return { contents: `module.exports = {};throw new Error(\`Could not resolve "${peerDep}" imported by "${parentDep}".${isProduction ? "" : " Is it installed?"}\`)` }; }); } }; } const matchesEntireLine = (text) => `^${escapeRegex(text)}$`; function esbuildCjsExternalPlugin(externals, platform$2) { return { name: "cjs-external", setup(build$3) { const filter$1 = new RegExp(externals.map(matchesEntireLine).join("|")); build$3.onResolve({ filter: /* @__PURE__ */ new RegExp(`^${nonFacadePrefix}`) }, (args) => { return { path: args.path.slice(25), external: true }; }); build$3.onResolve({ filter: filter$1 }, (args) => { if (args.kind === "require-call" && platform$2 !== "node") return { path: args.path, namespace: cjsExternalFacadeNamespace }; return { path: args.path, external: true }; }); build$3.onLoad({ filter: /.*/, namespace: cjsExternalFacadeNamespace }, (args) => ({ contents: `\ import * as m from ${JSON.stringify(nonFacadePrefix + args.path)}; module.exports = ${isNodeBuiltin(args.path) ? "m.default" : "{ ...m }"}; ` })); } }; } //#endregion //#region src/node/baseEnvironment.ts var import_picocolors$28 = __toESM(require_picocolors(), 1); const environmentColors = [ import_picocolors$28.default.blue, import_picocolors$28.default.magenta, import_picocolors$28.default.green, import_picocolors$28.default.gray ]; var PartialEnvironment = class { name; getTopLevelConfig() { return this._topLevelConfig; } config; logger; /** * @internal */ _options; /** * @internal */ _topLevelConfig; constructor(name, topLevelConfig, options$1 = topLevelConfig.environments[name]) { if (!/^[\w$]+$/.test(name)) throw new Error(`Invalid environment name "${name}". Environment names must only contain alphanumeric characters and "$", "_".`); this.name = name; this._topLevelConfig = topLevelConfig; this._options = options$1; this.config = new Proxy(options$1, { get: (target, prop) => { if (prop === "logger") return this.logger; if (prop in target) return this._options[prop]; return this._topLevelConfig[prop]; } }); const environment = import_picocolors$28.default.dim(`(${this.name})`); const colorIndex = [...this.name].reduce((acc, c) => acc + c.charCodeAt(0), 0) % environmentColors.length; const infoColor = environmentColors[colorIndex || 0]; this.logger = { get hasWarned() { return topLevelConfig.logger.hasWarned; }, info(msg, opts) { return topLevelConfig.logger.info(msg, { ...opts, environment: infoColor(environment) }); }, warn(msg, opts) { return topLevelConfig.logger.warn(msg, { ...opts, environment: import_picocolors$28.default.yellow(environment) }); }, warnOnce(msg, opts) { return topLevelConfig.logger.warnOnce(msg, { ...opts, environment: import_picocolors$28.default.yellow(environment) }); }, error(msg, opts) { return topLevelConfig.logger.error(msg, { ...opts, environment: import_picocolors$28.default.red(environment) }); }, clearScreen(type) { return topLevelConfig.logger.clearScreen(type); }, hasErrorLogged(error$1) { return topLevelConfig.logger.hasErrorLogged(error$1); } }; } }; var BaseEnvironment = class extends PartialEnvironment { get plugins() { return this.config.plugins; } /** * @internal */ _initiated = false; constructor(name, config$2, options$1 = config$2.environments[name]) { super(name, config$2, options$1); } }; //#endregion //#region ../../node_modules/.pnpm/js-tokens@9.0.1/node_modules/js-tokens/index.js var require_js_tokens = __commonJS({ "../../node_modules/.pnpm/js-tokens@9.0.1/node_modules/js-tokens/index.js"(exports, module) { var HashbangComment, Identifier, JSXIdentifier, JSXPunctuator, JSXString, JSXText, KeywordsWithExpressionAfter, KeywordsWithNoLineTerminatorAfter, LineTerminatorSequence, MultiLineComment, Newline, NumericLiteral, Punctuator, RegularExpressionLiteral, SingleLineComment, StringLiteral, Template, TokensNotPrecedingObjectLiteral, TokensPrecedingExpression, WhiteSpace, jsTokens$1; RegularExpressionLiteral = /\/(?![*\/])(?:\[(?:[^\]\\\n\r\u2028\u2029]+|\\.)*\]?|[^\/[\\\n\r\u2028\u2029]+|\\.)*(\/[$_\u200C\u200D\p{ID_Continue}]*|\\)?/uy; Punctuator = /--|\+\+|=>|\.{3}|\??\.(?!\d)|(?:&&|\|\||\?\?|[+\-%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2}|\/(?![\/*]))=?|[?~,:;[\](){}]/y; Identifier = /(\x23?)(?=[$_\p{ID_Start}\\])(?:[$_\u200C\u200D\p{ID_Continue}]+|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+/uy; StringLiteral = /(['"])(?:[^'"\\\n\r]+|(?!\1)['"]|\\(?:\r\n|[^]))*(\1)?/y; NumericLiteral = /(?:0[xX][\da-fA-F](?:_?[\da-fA-F])*|0[oO][0-7](?:_?[0-7])*|0[bB][01](?:_?[01])*)n?|0n|[1-9](?:_?\d)*n|(?:(?:0(?!\d)|0\d*[89]\d*|[1-9](?:_?\d)*)(?:\.(?:\d(?:_?\d)*)?)?|\.\d(?:_?\d)*)(?:[eE][+-]?\d(?:_?\d)*)?|0[0-7]+/y; Template = /[`}](?:[^`\\$]+|\\[^]|\$(?!\{))*(`|\$\{)?/y; WhiteSpace = /[\t\v\f\ufeff\p{Zs}]+/uy; LineTerminatorSequence = /\r?\n|[\r\u2028\u2029]/y; MultiLineComment = /\/\*(?:[^*]+|\*(?!\/))*(\*\/)?/y; SingleLineComment = /\/\/.*/y; HashbangComment = /^#!.*/; JSXPunctuator = /[<>.:={}]|\/(?![\/*])/y; JSXIdentifier = /[$_\p{ID_Start}][$_\u200C\u200D\p{ID_Continue}-]*/uy; JSXString = /(['"])(?:[^'"]+|(?!\1)['"])*(\1)?/y; JSXText = /[^<>{}]+/y; TokensPrecedingExpression = /^(?:[\/+-]|\.{3}|\?(?:InterpolationIn(?:JSX|Template)|NoLineTerminatorHere|NonExpressionParenEnd|UnaryIncDec))?$|[{}([,;<>=*%&|^!~?:]$/; TokensNotPrecedingObjectLiteral = /^(?:=>|[;\]){}]|else|\?(?:NoLineTerminatorHere|NonExpressionParenEnd))?$/; KeywordsWithExpressionAfter = /^(?:await|case|default|delete|do|else|instanceof|new|return|throw|typeof|void|yield)$/; KeywordsWithNoLineTerminatorAfter = /^(?:return|throw|yield)$/; Newline = RegExp(LineTerminatorSequence.source); module.exports = jsTokens$1 = function* (input, { jsx = false } = {}) { var braces$2, firstCodePoint, isExpression, lastIndex, lastSignificantToken, length, match, mode, nextLastIndex, nextLastSignificantToken, parenNesting, postfixIncDec, punctuator, stack; ({length} = input); lastIndex = 0; lastSignificantToken = ""; stack = [{ tag: "JS" }]; braces$2 = []; parenNesting = 0; postfixIncDec = false; if (match = HashbangComment.exec(input)) { yield { type: "HashbangComment", value: match[0] }; lastIndex = match[0].length; } while (lastIndex < length) { mode = stack[stack.length - 1]; switch (mode.tag) { case "JS": case "JSNonExpressionParen": case "InterpolationInTemplate": case "InterpolationInJSX": if (input[lastIndex] === "/" && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken))) { RegularExpressionLiteral.lastIndex = lastIndex; if (match = RegularExpressionLiteral.exec(input)) { lastIndex = RegularExpressionLiteral.lastIndex; lastSignificantToken = match[0]; postfixIncDec = true; yield { type: "RegularExpressionLiteral", value: match[0], closed: match[1] !== void 0 && match[1] !== "\\" }; continue; } } Punctuator.lastIndex = lastIndex; if (match = Punctuator.exec(input)) { punctuator = match[0]; nextLastIndex = Punctuator.lastIndex; nextLastSignificantToken = punctuator; switch (punctuator) { case "(": if (lastSignificantToken === "?NonExpressionParenKeyword") stack.push({ tag: "JSNonExpressionParen", nesting: parenNesting }); parenNesting++; postfixIncDec = false; break; case ")": parenNesting--; postfixIncDec = true; if (mode.tag === "JSNonExpressionParen" && parenNesting === mode.nesting) { stack.pop(); nextLastSignificantToken = "?NonExpressionParenEnd"; postfixIncDec = false; } break; case "{": Punctuator.lastIndex = 0; isExpression = !TokensNotPrecedingObjectLiteral.test(lastSignificantToken) && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken)); braces$2.push(isExpression); postfixIncDec = false; break; case "}": switch (mode.tag) { case "InterpolationInTemplate": if (braces$2.length === mode.nesting) { Template.lastIndex = lastIndex; match = Template.exec(input); lastIndex = Template.lastIndex; lastSignificantToken = match[0]; if (match[1] === "${") { lastSignificantToken = "?InterpolationInTemplate"; postfixIncDec = false; yield { type: "TemplateMiddle", value: match[0] }; } else { stack.pop(); postfixIncDec = true; yield { type: "TemplateTail", value: match[0], closed: match[1] === "`" }; } continue; } break; case "InterpolationInJSX": if (braces$2.length === mode.nesting) { stack.pop(); lastIndex += 1; lastSignificantToken = "}"; yield { type: "JSXPunctuator", value: "}" }; continue; } } postfixIncDec = braces$2.pop(); nextLastSignificantToken = postfixIncDec ? "?ExpressionBraceEnd" : "}"; break; case "]": postfixIncDec = true; break; case "++": case "--": nextLastSignificantToken = postfixIncDec ? "?PostfixIncDec" : "?UnaryIncDec"; break; case "<": if (jsx && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken))) { stack.push({ tag: "JSXTag" }); lastIndex += 1; lastSignificantToken = "<"; yield { type: "JSXPunctuator", value: punctuator }; continue; } postfixIncDec = false; break; default: postfixIncDec = false; } lastIndex = nextLastIndex; lastSignificantToken = nextLastSignificantToken; yield { type: "Punctuator", value: punctuator }; continue; } Identifier.lastIndex = lastIndex; if (match = Identifier.exec(input)) { lastIndex = Identifier.lastIndex; nextLastSignificantToken = match[0]; switch (match[0]) { case "for": case "if": case "while": case "with": if (lastSignificantToken !== "." && lastSignificantToken !== "?.") nextLastSignificantToken = "?NonExpressionParenKeyword"; } lastSignificantToken = nextLastSignificantToken; postfixIncDec = !KeywordsWithExpressionAfter.test(match[0]); yield { type: match[1] === "#" ? "PrivateIdentifier" : "IdentifierName", value: match[0] }; continue; } StringLiteral.lastIndex = lastIndex; if (match = StringLiteral.exec(input)) { lastIndex = StringLiteral.lastIndex; lastSignificantToken = match[0]; postfixIncDec = true; yield { type: "StringLiteral", value: match[0], closed: match[2] !== void 0 }; continue; } NumericLiteral.lastIndex = lastIndex; if (match = NumericLiteral.exec(input)) { lastIndex = NumericLiteral.lastIndex; lastSignificantToken = match[0]; postfixIncDec = true; yield { type: "NumericLiteral", value: match[0] }; continue; } Template.lastIndex = lastIndex; if (match = Template.exec(input)) { lastIndex = Template.lastIndex; lastSignificantToken = match[0]; if (match[1] === "${") { lastSignificantToken = "?InterpolationInTemplate"; stack.push({ tag: "InterpolationInTemplate", nesting: braces$2.length }); postfixIncDec = false; yield { type: "TemplateHead", value: match[0] }; } else { postfixIncDec = true; yield { type: "NoSubstitutionTemplate", value: match[0], closed: match[1] === "`" }; } continue; } break; case "JSXTag": case "JSXTagEnd": JSXPunctuator.lastIndex = lastIndex; if (match = JSXPunctuator.exec(input)) { lastIndex = JSXPunctuator.lastIndex; nextLastSignificantToken = match[0]; switch (match[0]) { case "<": stack.push({ tag: "JSXTag" }); break; case ">": stack.pop(); if (lastSignificantToken === "/" || mode.tag === "JSXTagEnd") { nextLastSignificantToken = "?JSX"; postfixIncDec = true; } else stack.push({ tag: "JSXChildren" }); break; case "{": stack.push({ tag: "InterpolationInJSX", nesting: braces$2.length }); nextLastSignificantToken = "?InterpolationInJSX"; postfixIncDec = false; break; case "/": if (lastSignificantToken === "<") { stack.pop(); if (stack[stack.length - 1].tag === "JSXChildren") stack.pop(); stack.push({ tag: "JSXTagEnd" }); } } lastSignificantToken = nextLastSignificantToken; yield { type: "JSXPunctuator", value: match[0] }; continue; } JSXIdentifier.lastIndex = lastIndex; if (match = JSXIdentifier.exec(input)) { lastIndex = JSXIdentifier.lastIndex; lastSignificantToken = match[0]; yield { type: "JSXIdentifier", value: match[0] }; continue; } JSXString.lastIndex = lastIndex; if (match = JSXString.exec(input)) { lastIndex = JSXString.lastIndex; lastSignificantToken = match[0]; yield { type: "JSXString", value: match[0], closed: match[2] !== void 0 }; continue; } break; case "JSXChildren": JSXText.lastIndex = lastIndex; if (match = JSXText.exec(input)) { lastIndex = JSXText.lastIndex; lastSignificantToken = match[0]; yield { type: "JSXText", value: match[0] }; continue; } switch (input[lastIndex]) { case "<": stack.push({ tag: "JSXTag" }); lastIndex++; lastSignificantToken = "<"; yield { type: "JSXPunctuator", value: "<" }; continue; case "{": stack.push({ tag: "InterpolationInJSX", nesting: braces$2.length }); lastIndex++; lastSignificantToken = "?InterpolationInJSX"; postfixIncDec = false; yield { type: "JSXPunctuator", value: "{" }; continue; } } WhiteSpace.lastIndex = lastIndex; if (match = WhiteSpace.exec(input)) { lastIndex = WhiteSpace.lastIndex; yield { type: "WhiteSpace", value: match[0] }; continue; } LineTerminatorSequence.lastIndex = lastIndex; if (match = LineTerminatorSequence.exec(input)) { lastIndex = LineTerminatorSequence.lastIndex; postfixIncDec = false; if (KeywordsWithNoLineTerminatorAfter.test(lastSignificantToken)) lastSignificantToken = "?NoLineTerminatorHere"; yield { type: "LineTerminatorSequence", value: match[0] }; continue; } MultiLineComment.lastIndex = lastIndex; if (match = MultiLineComment.exec(input)) { lastIndex = MultiLineComment.lastIndex; if (Newline.test(match[0])) { postfixIncDec = false; if (KeywordsWithNoLineTerminatorAfter.test(lastSignificantToken)) lastSignificantToken = "?NoLineTerminatorHere"; } yield { type: "MultiLineComment", value: match[0], closed: match[1] !== void 0 }; continue; } SingleLineComment.lastIndex = lastIndex; if (match = SingleLineComment.exec(input)) { lastIndex = SingleLineComment.lastIndex; postfixIncDec = false; yield { type: "SingleLineComment", value: match[0] }; continue; } firstCodePoint = String.fromCodePoint(input.codePointAt(lastIndex)); lastIndex += firstCodePoint.length; lastSignificantToken = firstCodePoint; postfixIncDec = false; yield { type: mode.tag.startsWith("JSX") ? "JSXInvalid" : "Invalid", value: firstCodePoint }; } return void 0; }; } }); //#endregion //#region ../../node_modules/.pnpm/strip-literal@3.0.0/node_modules/strip-literal/dist/index.mjs var import_js_tokens = __toESM(require_js_tokens(), 1); function stripLiteralJsTokens(code, options$1) { const FILL = options$1?.fillChar ?? " "; const FILL_COMMENT = " "; let result = ""; const filter$1 = options$1?.filter ?? (() => true); const tokens = []; for (const token of (0, import_js_tokens.default)(code, { jsx: false })) { tokens.push(token); if (token.type === "SingleLineComment") { result += FILL_COMMENT.repeat(token.value.length); continue; } if (token.type === "MultiLineComment") { result += token.value.replace(/[^\n]/g, FILL_COMMENT); continue; } if (token.type === "StringLiteral") { if (!token.closed) { result += token.value; continue; } const body = token.value.slice(1, -1); if (filter$1(body)) { result += token.value[0] + FILL.repeat(body.length) + token.value[token.value.length - 1]; continue; } } if (token.type === "NoSubstitutionTemplate") { const body = token.value.slice(1, -1); if (filter$1(body)) { result += `\`${body.replace(/[^\n]/g, FILL)}\``; continue; } } if (token.type === "RegularExpressionLiteral") { const body = token.value; if (filter$1(body)) { result += body.replace(/\/(.*)\/(\w?)$/g, (_, $1, $2) => `/${FILL.repeat($1.length)}/${$2}`); continue; } } if (token.type === "TemplateHead") { const body = token.value.slice(1, -2); if (filter$1(body)) { result += `\`${body.replace(/[^\n]/g, FILL)}\${`; continue; } } if (token.type === "TemplateTail") { const body = token.value.slice(0, -2); if (filter$1(body)) { result += `}${body.replace(/[^\n]/g, FILL)}\``; continue; } } if (token.type === "TemplateMiddle") { const body = token.value.slice(1, -2); if (filter$1(body)) { result += `}${body.replace(/[^\n]/g, FILL)}\${`; continue; } } result += token.value; } return { result, tokens }; } function stripLiteral(code, options$1) { return stripLiteralDetailed(code, options$1).result; } function stripLiteralDetailed(code, options$1) { return stripLiteralJsTokens(code, options$1); } //#endregion //#region src/node/plugins/importMetaGlob.ts var import_picocolors$27 = __toESM(require_picocolors(), 1); function importGlobPlugin(config$2) { const importGlobMaps = /* @__PURE__ */ new Map(); return { name: "vite:import-glob", buildStart() { importGlobMaps.clear(); }, transform: { async handler(code, id) { if (!code.includes("import.meta.glob")) return; const result = await transformGlobImport(code, id, config$2.root, (im, _, options$1) => this.resolve(im, id, options$1).then((i$1) => i$1?.id || im), config$2.experimental.importGlobRestoreExtension, config$2.logger); if (result) { const allGlobs = result.matches.map((i$1) => i$1.globsResolved); if (!importGlobMaps.has(this.environment)) importGlobMaps.set(this.environment, /* @__PURE__ */ new Map()); const globMatchers = allGlobs.map((globs) => { const affirmed = []; const negated = []; for (const glob$1 of globs) (glob$1[0] === "!" ? negated : affirmed).push(glob$1); const affirmedMatcher = picomatch(affirmed); const negatedMatcher = picomatch(negated); return (file) => { return (affirmed.length === 0 || affirmedMatcher(file)) && !(negated.length > 0 && negatedMatcher(file)); }; }); importGlobMaps.get(this.environment).set(id, globMatchers); return transformStableResult(result.s, id, config$2); } } }, hotUpdate({ type, file, modules: oldModules }) { if (type === "update") return; const importGlobMap = importGlobMaps.get(this.environment); if (!importGlobMap) return; const modules = []; for (const [id, globMatchers] of importGlobMap) if (globMatchers.some((matcher) => matcher(file))) { const mod = this.environment.moduleGraph.getModuleById(id); if (mod) modules.push(mod); } return modules.length > 0 ? [...oldModules, ...modules] : void 0; } }; } const importGlobRE = /\bimport\.meta\.glob(?:<\w+>)?\s*\(/g; const objectKeysRE = /\bObject\.keys\(\s*$/; const objectValuesRE = /\bObject\.values\(\s*$/; const knownOptions = { as: ["string"], eager: ["boolean"], import: ["string"], exhaustive: ["boolean"], query: ["object", "string"], base: ["string"] }; const forceDefaultAs = ["raw", "url"]; function err$1(e$1, pos) { const error$1 = new Error(e$1); error$1.pos = pos; return error$1; } function parseGlobOptions(rawOpts, optsStartIndex, logger) { let opts = {}; try { opts = evalValue(rawOpts); } catch { throw err$1("Vite is unable to parse the glob options as the value is not static", optsStartIndex); } if (opts == null) return {}; for (const key in opts) { if (!(key in knownOptions)) throw err$1(`Unknown glob option "${key}"`, optsStartIndex); const allowedTypes = knownOptions[key]; const valueType = typeof opts[key]; if (!allowedTypes.includes(valueType)) throw err$1(`Expected glob option "${key}" to be of type ${allowedTypes.join(" or ")}, but got ${valueType}`, optsStartIndex); } if (opts.base) { if (opts.base[0] === "!") throw err$1("Option \"base\" cannot start with \"!\"", optsStartIndex); else if (opts.base[0] !== "/" && !opts.base.startsWith("./") && !opts.base.startsWith("../")) throw err$1(`Option "base" must start with '/', './' or '../', but got "${opts.base}"`, optsStartIndex); } if (typeof opts.query === "object") { for (const key in opts.query) { const value$1 = opts.query[key]; if (![ "string", "number", "boolean" ].includes(typeof value$1)) throw err$1(`Expected glob option "query.${key}" to be of type string, number, or boolean, but got ${typeof value$1}`, optsStartIndex); } opts.query = stringifyQuery(opts.query); } if (opts.as && logger) { const importSuggestion = forceDefaultAs.includes(opts.as) ? `, import: 'default'` : ""; logger.warn(import_picocolors$27.default.yellow(`The glob option "as" has been deprecated in favour of "query". Please update \`as: '${opts.as}'\` to \`query: '?${opts.as}'${importSuggestion}\`.`)); } if (opts.as && forceDefaultAs.includes(opts.as)) { if (opts.import && opts.import !== "default" && opts.import !== "*") throw err$1(`Option "import" can only be "default" or "*" when "as" is "${opts.as}", but got "${opts.import}"`, optsStartIndex); opts.import = opts.import || "default"; } if (opts.as && opts.query) throw err$1("Options \"as\" and \"query\" cannot be used together", optsStartIndex); if (opts.as) opts.query = opts.as; if (opts.query && opts.query[0] !== "?") opts.query = `?${opts.query}`; return opts; } async function parseImportGlob(code, importer, root, resolveId, logger) { let cleanCode; try { cleanCode = stripLiteral(code); } catch { return []; } const matches$2 = Array.from(cleanCode.matchAll(importGlobRE)); const tasks = matches$2.map(async (match, index) => { const start = match.index; const err$2 = (msg) => { const e$1 = /* @__PURE__ */ new Error(`Invalid glob import syntax: ${msg}`); e$1.pos = start; return e$1; }; const end = findCorrespondingCloseParenthesisPosition(cleanCode, start + match[0].length) + 1; if (end <= 0) throw err$2("Close parenthesis not found"); const statementCode = code.slice(start, end); const rootAst = (await parseAstAsync(statementCode)).body[0]; if (rootAst.type !== "ExpressionStatement") throw err$2(`Expect CallExpression, got ${rootAst.type}`); const ast = rootAst.expression; if (ast.type !== "CallExpression") throw err$2(`Expect CallExpression, got ${ast.type}`); if (ast.arguments.length < 1 || ast.arguments.length > 2) throw err$2(`Expected 1-2 arguments, but got ${ast.arguments.length}`); const arg1 = ast.arguments[0]; const arg2 = ast.arguments[1]; const globs = []; const validateLiteral = (element) => { if (!element) return; if (element.type === "Literal") { if (typeof element.value !== "string") throw err$2(`Expected glob to be a string, but got "${typeof element.value}"`); globs.push(element.value); } else if (element.type === "TemplateLiteral") { if (element.expressions.length !== 0) throw err$2(`Expected glob to be a string, but got dynamic template literal`); globs.push(element.quasis[0].value.raw); } else throw err$2("Could only use literals"); }; if (arg1.type === "ArrayExpression") for (const element of arg1.elements) validateLiteral(element); else validateLiteral(arg1); let options$1 = {}; if (arg2) { if (arg2.type !== "ObjectExpression") throw err$2(`Expected the second argument to be an object literal, but got "${arg2.type}"`); options$1 = parseGlobOptions(code.slice(start + arg2.start, start + arg2.end), start + arg2.start, logger); } const globsResolved = await Promise.all(globs.map((glob$1) => toAbsoluteGlob(glob$1, root, importer, resolveId, options$1.base))); const isRelative$1 = globs.every((i$1) => ".!".includes(i$1[0])); const sliceCode = cleanCode.slice(0, start); const onlyKeys = objectKeysRE.test(sliceCode); let onlyValues = false; if (!onlyKeys) onlyValues = objectValuesRE.test(sliceCode); return { index, globs, globsResolved, isRelative: isRelative$1, options: options$1, start, end, onlyKeys, onlyValues }; }); return (await Promise.all(tasks)).filter(Boolean); } function findCorrespondingCloseParenthesisPosition(cleanCode, openPos) { const closePos = cleanCode.indexOf(")", openPos); if (closePos < 0) return -1; if (!cleanCode.slice(openPos, closePos).includes("(")) return closePos; let remainingParenthesisCount = 0; const cleanCodeLen = cleanCode.length; for (let pos = openPos; pos < cleanCodeLen; pos++) switch (cleanCode[pos]) { case "(": { remainingParenthesisCount++; break; } case ")": { remainingParenthesisCount--; if (remainingParenthesisCount <= 0) return pos; } } return -1; } const importPrefix = "__vite_glob_"; const { basename: basename$2, dirname: dirname$2, relative: relative$2 } = posix; /** * @param optimizeExport for dynamicImportVar plugin don't need to optimize export. */ async function transformGlobImport(code, id, root, resolveId, restoreQueryExtension = false, logger) { id = slash(id); root = slash(root); const isVirtual = isVirtualModule(id); const dir = isVirtual ? void 0 : dirname$2(id); const matches$2 = await parseImportGlob(code, isVirtual ? void 0 : id, root, resolveId, logger); const matchedFiles = /* @__PURE__ */ new Set(); if (!matches$2.length) return null; const s$2 = new MagicString(code); const staticImports = (await Promise.all(matches$2.map(async ({ globsResolved, isRelative: isRelative$1, options: options$1, index, start, end, onlyKeys, onlyValues }) => { const cwd = getCommonBase(globsResolved) ?? root; const files = (await glob(globsResolved, { absolute: true, cwd, dot: !!options$1.exhaustive, expandDirectories: false, ignore: options$1.exhaustive ? [] : ["**/node_modules/**"] })).filter((file) => file !== id).sort(); const objectProps = []; const staticImports$1 = []; const resolvePaths = (file) => { if (!dir) { if (!options$1.base && isRelative$1) throw new Error("In virtual modules, all globs must start with '/'"); const importPath$1 = `/${relative$2(root, file)}`; let filePath$1 = options$1.base ? `${relative$2(posix.join(root, options$1.base), file)}` : importPath$1; if (options$1.base && filePath$1[0] !== ".") filePath$1 = `./${filePath$1}`; return { filePath: filePath$1, importPath: importPath$1 }; } let importPath = relative$2(dir, file); if (importPath[0] !== ".") importPath = `./${importPath}`; let filePath; if (options$1.base) { const resolvedBasePath = options$1.base[0] === "/" ? root : dir; filePath = relative$2(posix.join(resolvedBasePath, options$1.base), file); if (filePath[0] !== ".") filePath = `./${filePath}`; if (options$1.base[0] === "/") importPath = `/${relative$2(root, file)}`; } else if (isRelative$1) filePath = importPath; else { filePath = relative$2(root, file); if (filePath[0] !== ".") filePath = `/${filePath}`; } return { filePath, importPath }; }; files.forEach((file, i$1) => { const paths = resolvePaths(file); const filePath = paths.filePath; let importPath = paths.importPath; let importQuery = options$1.query ?? ""; if (onlyKeys) { objectProps.push(`${JSON.stringify(filePath)}: 0`); return; } if (importQuery && importQuery !== "?raw") { const fileExtension = basename$2(file).split(".").slice(-1)[0]; if (fileExtension && restoreQueryExtension) importQuery = `${importQuery}&lang.${fileExtension}`; } importPath = `${importPath}${importQuery}`; const importKey = options$1.import && options$1.import !== "*" ? options$1.import : void 0; if (options$1.eager) { const variableName = `${importPrefix}${index}_${i$1}`; const expression = importKey ? `{ ${importKey} as ${variableName} }` : `* as ${variableName}`; staticImports$1.push(`import ${expression} from ${JSON.stringify(importPath)}`); objectProps.push(onlyValues ? `${variableName}` : `${JSON.stringify(filePath)}: ${variableName}`); } else { let importStatement = `import(${JSON.stringify(importPath)})`; if (importKey) importStatement += `.then(m => m[${JSON.stringify(importKey)}])`; objectProps.push(onlyValues ? `() => ${importStatement}` : `${JSON.stringify(filePath)}: () => ${importStatement}`); } }); files.forEach((i$1) => matchedFiles.add(i$1)); const originalLineBreakCount = code.slice(start, end).match(/\n/g)?.length ?? 0; const lineBreaks = originalLineBreakCount > 0 ? "\n".repeat(originalLineBreakCount) : ""; let replacement = ""; if (onlyKeys) replacement = `{${objectProps.join(",")}${lineBreaks}}`; else if (onlyValues) replacement = `[${objectProps.join(",")}${lineBreaks}]`; else replacement = `/* #__PURE__ */ Object.assign({${objectProps.join(",")}${lineBreaks}})`; s$2.overwrite(start, end, replacement); return staticImports$1; }))).flat(); if (staticImports.length) s$2.prepend(`${staticImports.join(";")};`); return { s: s$2, matches: matches$2, files: matchedFiles }; } function globSafePath(path$13) { return escapePath(normalizePath(path$13)); } function lastNthChar(str, n$2) { return str.charAt(str.length - 1 - n$2); } function globSafeResolvedPath(resolved, glob$1) { let numEqual = 0; const maxEqual = Math.min(resolved.length, glob$1.length); while (numEqual < maxEqual && lastNthChar(resolved, numEqual) === lastNthChar(glob$1, numEqual)) numEqual += 1; const staticPartEnd = resolved.length - numEqual; const staticPart = resolved.slice(0, staticPartEnd); const dynamicPart = resolved.slice(staticPartEnd); return globSafePath(staticPart) + dynamicPart; } async function toAbsoluteGlob(glob$1, root, importer, resolveId, base) { let pre = ""; if (glob$1[0] === "!") { pre = "!"; glob$1 = glob$1.slice(1); } root = globSafePath(root); let dir; if (base) if (base.startsWith("/")) dir = posix.join(root, base); else dir = posix.resolve(importer ? globSafePath(dirname$2(importer)) : root, base); else dir = importer ? globSafePath(dirname$2(importer)) : root; if (glob$1[0] === "/") return pre + posix.join(root, glob$1.slice(1)); if (glob$1.startsWith("./")) return pre + posix.join(dir, glob$1.slice(2)); if (glob$1.startsWith("../")) return pre + posix.join(dir, glob$1); if (glob$1.startsWith("**")) return pre + glob$1; const isSubImportsPattern = glob$1[0] === "#" && glob$1.includes("*"); const resolved = normalizePath(await resolveId(glob$1, importer, { custom: { "vite:import-glob": { isSubImportsPattern } } }) || glob$1); if (isAbsolute(resolved)) return pre + globSafeResolvedPath(resolved, glob$1); throw new Error(`Invalid glob: "${glob$1}" (resolved: "${resolved}"). It must start with '/' or './'`); } function getCommonBase(globsResolved) { const bases = globsResolved.filter((g) => g[0] !== "!").map((glob$1) => { let { base } = picomatch.scan(glob$1); if (posix.basename(base).includes(".")) base = posix.dirname(base); return base; }); if (!bases.length) return null; let commonAncestor = ""; const dirS = bases[0].split("/"); for (let i$1 = 0; i$1 < dirS.length; i$1++) { const candidate = dirS.slice(0, i$1 + 1).join("/"); if (bases.every((base) => base.startsWith(candidate))) commonAncestor = candidate; else break; } if (!commonAncestor) commonAncestor = "/"; return commonAncestor; } function isVirtualModule(id) { return id.startsWith("virtual:") || id[0] === "\0" || !id.includes("/"); } //#endregion //#region src/node/optimizer/scan.ts var import_picocolors$26 = __toESM(require_picocolors(), 1); var ScanEnvironment = class extends BaseEnvironment { mode = "scan"; get pluginContainer() { if (!this._pluginContainer) throw new Error(`${this.name} environment.pluginContainer called before initialized`); return this._pluginContainer; } /** * @internal */ _pluginContainer; async init() { if (this._initiated) return; this._initiated = true; this._pluginContainer = await createEnvironmentPluginContainer(this, this.plugins, void 0, false); } }; function devToScanEnvironment(environment) { return { mode: "scan", get name() { return environment.name; }, getTopLevelConfig() { return environment.getTopLevelConfig(); }, get config() { return environment.config; }, get logger() { return environment.logger; }, get pluginContainer() { return environment.pluginContainer; }, get plugins() { return environment.plugins; } }; } const debug$15 = createDebugger("vite:deps"); const htmlTypesRE = /\.(html|vue|svelte|astro|imba)$/; const importsRE = /(? context?.cancel()); } async function scan() { const entries = await computeEntries(environment); if (!entries.length) { if (!config$2.optimizeDeps.entries && !config$2.optimizeDeps.include) environment.logger.warn(import_picocolors$26.default.yellow("(!) Could not auto-determine entry point from rollupOptions or html files and there are no explicit optimizeDeps.include patterns. Skipping dependency pre-bundling.")); return; } if (scanContext.cancelled) return; debug$15?.(`Crawling dependencies using entries: ${entries.map((entry) => `\n ${import_picocolors$26.default.dim(entry)}`).join("")}`); const deps = {}; const missing = {}; let context; try { esbuildContext = prepareEsbuildScanner(environment, entries, deps, missing); context = await esbuildContext; if (scanContext.cancelled) return; try { await context.rebuild(); return { deps: orderedDependencies(deps), missing }; } catch (e$1) { if (e$1.errors && e$1.message.includes("The build was canceled")) return; const prependMessage = import_picocolors$26.default.red(`\ Failed to scan for dependencies from entries: ${entries.join("\n")} `); if (e$1.errors) { const msgs = await formatMessages(e$1.errors, { kind: "error", color: true }); e$1.message = prependMessage + msgs.join("\n"); } else e$1.message = prependMessage + e$1.message; throw e$1; } finally { if (debug$15) { const duration = (performance$1.now() - start).toFixed(2); const depsStr = Object.keys(orderedDependencies(deps)).sort().map((id) => `\n ${import_picocolors$26.default.cyan(id)} -> ${import_picocolors$26.default.dim(deps[id])}`).join("") || import_picocolors$26.default.dim("no dependencies found"); debug$15(`Scan completed in ${duration}ms: ${depsStr}`); } } } finally { context?.dispose().catch((e$1) => { environment.logger.error("Failed to dispose esbuild context", { error: e$1 }); }); } } const result = scan(); return { cancel, result: result.then((res) => res ?? { deps: {}, missing: {} }) }; } async function computeEntries(environment) { let entries = []; const explicitEntryPatterns = environment.config.optimizeDeps.entries; const buildInput = environment.config.build.rollupOptions.input; if (explicitEntryPatterns) entries = await globEntries(explicitEntryPatterns, environment); else if (buildInput) { const resolvePath = async (p$1) => { const id = (await environment.pluginContainer.resolveId(p$1, path.join(process.cwd(), "*"), { scan: true }))?.id; if (id === void 0) throw new Error(`failed to resolve rollupOptions.input value: ${JSON.stringify(p$1)}.`); return id; }; if (typeof buildInput === "string") entries = [await resolvePath(buildInput)]; else if (Array.isArray(buildInput)) entries = await Promise.all(buildInput.map(resolvePath)); else if (isObject(buildInput)) entries = await Promise.all(Object.values(buildInput).map(resolvePath)); else throw new Error("invalid rollupOptions.input value."); } else entries = await globEntries("**/*.html", environment); entries = entries.filter((entry) => isScannable(entry, environment.config.optimizeDeps.extensions) && fs.existsSync(entry)); return entries; } async function prepareEsbuildScanner(environment, entries, deps, missing) { const plugin = esbuildScanPlugin(environment, deps, missing, entries); const { plugins: plugins$1 = [],...esbuildOptions } = environment.config.optimizeDeps.esbuildOptions ?? {}; let tsconfigRaw = esbuildOptions.tsconfigRaw; if (!tsconfigRaw && !esbuildOptions.tsconfig) { const { tsconfig } = await loadTsconfigJsonForFile(path.join(environment.config.root, "_dummy.js")); if (tsconfig.compilerOptions?.experimentalDecorators) tsconfigRaw = { compilerOptions: { experimentalDecorators: true } }; } return await esbuild.context({ absWorkingDir: process.cwd(), write: false, stdin: { contents: entries.map((e$1) => `import ${JSON.stringify(e$1)}`).join("\n"), loader: "js" }, bundle: true, format: "esm", logLevel: "silent", plugins: [...plugins$1, plugin], ...esbuildOptions, tsconfigRaw }); } function orderedDependencies(deps) { const depsList = Object.entries(deps); depsList.sort((a, b) => a[0].localeCompare(b[0])); return Object.fromEntries(depsList); } async function globEntries(patterns, environment) { const nodeModulesPatterns = []; const regularPatterns = []; for (const pattern of arraify(patterns)) if (pattern.includes("node_modules")) nodeModulesPatterns.push(pattern); else regularPatterns.push(pattern); const sharedOptions = { absolute: true, cwd: environment.config.root, ignore: [`**/${environment.config.build.outDir}/**`, ...environment.config.optimizeDeps.entries ? [] : [`**/__tests__/**`, `**/coverage/**`]] }; const results = await Promise.all([glob(nodeModulesPatterns, sharedOptions), glob(regularPatterns, { ...sharedOptions, ignore: [...sharedOptions.ignore, "**/node_modules/**"] })]); return results.flat(); } const scriptRE = /(=\s]+))?)*\s*>)(.*?)<\/script>/gis; const commentRE$1 = //gs; const srcRE = /\bsrc\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/i; const typeRE = /\btype\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/i; const langRE = /\blang\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/i; const svelteScriptModuleRE = /\bcontext\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/i; const svelteModuleRE = /\smodule\b/i; function esbuildScanPlugin(environment, depImports, missing, entries) { const seen$1 = /* @__PURE__ */ new Map(); async function resolveId(id, importer) { return environment.pluginContainer.resolveId(id, importer && normalizePath(importer), { scan: true }); } const resolve$4 = async (id, importer) => { const key = id + (importer && path.dirname(importer)); if (seen$1.has(key)) return seen$1.get(key); const resolved = await resolveId(id, importer); const res = resolved?.id; seen$1.set(key, res); return res; }; const optimizeDepsOptions = environment.config.optimizeDeps; const include = optimizeDepsOptions.include; const exclude = [ ...optimizeDepsOptions.exclude ?? [], "@vite/client", "@vite/env" ]; const isUnlessEntry = (path$13) => !entries.includes(path$13); const externalUnlessEntry = ({ path: path$13 }) => ({ path: path$13, external: isUnlessEntry(path$13) }); const doTransformGlobImport = async (contents, id, loader$1) => { let transpiledContents; if (loader$1 !== "js") transpiledContents = (await transform(contents, { loader: loader$1 })).code; else transpiledContents = contents; const result = await transformGlobImport(transpiledContents, id, environment.config.root, resolve$4); return result?.s.toString() || transpiledContents; }; return { name: "vite:dep-scan", setup(build$3) { const scripts = {}; build$3.onResolve({ filter: externalRE }, ({ path: path$13 }) => ({ path: path$13, external: true })); build$3.onResolve({ filter: dataUrlRE }, ({ path: path$13 }) => ({ path: path$13, external: true })); build$3.onResolve({ filter: virtualModuleRE }, ({ path: path$13 }) => { return { path: path$13.replace(virtualModulePrefix, ""), namespace: "script" }; }); build$3.onLoad({ filter: /.*/, namespace: "script" }, ({ path: path$13 }) => { return scripts[path$13]; }); build$3.onResolve({ filter: htmlTypesRE }, async ({ path: path$13, importer }) => { const resolved = await resolve$4(path$13, importer); if (!resolved) return; if (isInNodeModules(resolved) && isOptimizable(resolved, optimizeDepsOptions)) return; return { path: resolved, namespace: "html" }; }); const htmlTypeOnLoadCallback = async ({ path: p$1 }) => { let raw = await fsp.readFile(p$1, "utf-8"); raw = raw.replace(commentRE$1, ""); const isHtml = p$1.endsWith(".html"); let js = ""; let scriptId = 0; const matches$2 = raw.matchAll(scriptRE); for (const [, openTag, content] of matches$2) { const typeMatch = typeRE.exec(openTag); const type = typeMatch && (typeMatch[1] || typeMatch[2] || typeMatch[3]); const langMatch = langRE.exec(openTag); const lang = langMatch && (langMatch[1] || langMatch[2] || langMatch[3]); if (isHtml && type !== "module") continue; if (type && !(type.includes("javascript") || type.includes("ecmascript") || type === "module")) continue; let loader$1 = "js"; if (lang === "ts" || lang === "tsx" || lang === "jsx") loader$1 = lang; else if (p$1.endsWith(".astro")) loader$1 = "ts"; const srcMatch = srcRE.exec(openTag); if (srcMatch) { const src = srcMatch[1] || srcMatch[2] || srcMatch[3]; js += `import ${JSON.stringify(src)}\n`; } else if (content.trim()) { const contents = content + (loader$1.startsWith("ts") ? extractImportPaths(content) : ""); const key = `${p$1}?id=${scriptId++}`; if (contents.includes("import.meta.glob")) scripts[key] = { loader: "js", contents: await doTransformGlobImport(contents, p$1, loader$1), resolveDir: normalizePath(path.dirname(p$1)), pluginData: { htmlType: { loader: loader$1 } } }; else scripts[key] = { loader: loader$1, contents, resolveDir: normalizePath(path.dirname(p$1)), pluginData: { htmlType: { loader: loader$1 } } }; const virtualModulePath = JSON.stringify(virtualModulePrefix + key); let addedImport = false; if (p$1.endsWith(".svelte")) { let isModule = svelteModuleRE.test(openTag); if (!isModule) { const contextMatch = svelteScriptModuleRE.exec(openTag); const context = contextMatch && (contextMatch[1] || contextMatch[2] || contextMatch[3]); isModule = context === "module"; } if (!isModule) { addedImport = true; js += `import ${virtualModulePath}\n`; } } if (!addedImport) js += `export * from ${virtualModulePath}\n`; } } if (!p$1.endsWith(".vue") || !js.includes("export default")) js += "\nexport default {}"; return { loader: "js", contents: js }; }; build$3.onLoad({ filter: htmlTypesRE, namespace: "html" }, htmlTypeOnLoadCallback); build$3.onLoad({ filter: htmlTypesRE, namespace: "file" }, htmlTypeOnLoadCallback); build$3.onResolve({ filter: /^[\w@][^:]/ }, async ({ path: id, importer }) => { if (moduleListContains(exclude, id)) return externalUnlessEntry({ path: id }); if (depImports[id]) return externalUnlessEntry({ path: id }); const resolved = await resolve$4(id, importer); if (resolved) { if (shouldExternalizeDep(resolved, id)) return externalUnlessEntry({ path: id }); if (isInNodeModules(resolved) || include?.includes(id)) { if (isOptimizable(resolved, optimizeDepsOptions)) depImports[id] = resolved; return externalUnlessEntry({ path: id }); } else if (isScannable(resolved, optimizeDepsOptions.extensions)) { const namespace = htmlTypesRE.test(resolved) ? "html" : void 0; return { path: path.resolve(resolved), namespace }; } else return externalUnlessEntry({ path: id }); } else missing[id] = normalizePath(importer); }); const setupExternalize = (filter$1, doExternalize) => { build$3.onResolve({ filter: filter$1 }, ({ path: path$13 }) => { return { path: path$13, external: doExternalize(path$13) }; }); }; setupExternalize(CSS_LANGS_RE, isUnlessEntry); setupExternalize(/\.(json|json5|wasm)$/, isUnlessEntry); setupExternalize(/* @__PURE__ */ new RegExp(`\\.(${KNOWN_ASSET_TYPES.join("|")})$`), isUnlessEntry); setupExternalize(SPECIAL_QUERY_RE, () => true); build$3.onResolve({ filter: /.*/ }, async ({ path: id, importer }) => { const resolved = await resolve$4(id, importer); if (resolved) { if (shouldExternalizeDep(resolved, id) || !isScannable(resolved, optimizeDepsOptions.extensions)) return externalUnlessEntry({ path: id }); const namespace = htmlTypesRE.test(resolved) ? "html" : void 0; return { path: path.resolve(cleanUrl(resolved)), namespace }; } else return externalUnlessEntry({ path: id }); }); build$3.onLoad({ filter: JS_TYPES_RE }, async ({ path: id }) => { let ext = path.extname(id).slice(1); if (ext === "mjs") ext = "js"; const esbuildConfig = environment.config.esbuild; let contents = await fsp.readFile(id, "utf-8"); if (ext.endsWith("x") && esbuildConfig && esbuildConfig.jsxInject) contents = esbuildConfig.jsxInject + `\n` + contents; const loader$1 = optimizeDepsOptions.esbuildOptions?.loader?.[`.${ext}`] ?? ext; if (contents.includes("import.meta.glob")) return { loader: "js", contents: await doTransformGlobImport(contents, id, loader$1) }; return { loader: loader$1, contents }; }); build$3.onLoad({ filter: /.*/, namespace: "file" }, () => { return { loader: "js", contents: "export default {}" }; }); } }; } /** * when using TS + (Vue + ` `); } }; } //#endregion //#region ../../node_modules/.pnpm/ms@2.0.0/node_modules/ms/index.js var require_ms = __commonJS({ "../../node_modules/.pnpm/ms@2.0.0/node_modules/ms/index.js"(exports, module) { /** * Helpers. */ var s = 1e3; var m = s * 60; var h = m * 60; var d = h * 24; var y = d * 365.25; /** * Parse or format the given `val`. * * Options: * * - `long` verbose formatting [false] * * @param {String|Number} val * @param {Object} [options] * @throws {Error} throw an error if val is not a non-empty string or a number * @return {String|Number} * @api public */ module.exports = function(val, options$1) { options$1 = options$1 || {}; var type = typeof val; if (type === "string" && val.length > 0) return parse$11(val); else if (type === "number" && isNaN(val) === false) return options$1.long ? fmtLong(val) : fmtShort(val); throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val)); }; /** * Parse the given `str` and return milliseconds. * * @param {String} str * @return {Number} * @api private */ function parse$11(str) { str = String(str); if (str.length > 100) return; var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str); if (!match) return; var n$2 = parseFloat(match[1]); var type = (match[2] || "ms").toLowerCase(); switch (type) { case "years": case "year": case "yrs": case "yr": case "y": return n$2 * y; case "days": case "day": case "d": return n$2 * d; case "hours": case "hour": case "hrs": case "hr": case "h": return n$2 * h; case "minutes": case "minute": case "mins": case "min": case "m": return n$2 * m; case "seconds": case "second": case "secs": case "sec": case "s": return n$2 * s; case "milliseconds": case "millisecond": case "msecs": case "msec": case "ms": return n$2; default: return void 0; } } /** * Short format for `ms`. * * @param {Number} ms * @return {String} * @api private */ function fmtShort(ms) { if (ms >= d) return Math.round(ms / d) + "d"; if (ms >= h) return Math.round(ms / h) + "h"; if (ms >= m) return Math.round(ms / m) + "m"; if (ms >= s) return Math.round(ms / s) + "s"; return ms + "ms"; } /** * Long format for `ms`. * * @param {Number} ms * @return {String} * @api private */ function fmtLong(ms) { return plural(ms, d, "day") || plural(ms, h, "hour") || plural(ms, m, "minute") || plural(ms, s, "second") || ms + " ms"; } /** * Pluralization helper. */ function plural(ms, n$2, name) { if (ms < n$2) return; if (ms < n$2 * 1.5) return Math.floor(ms / n$2) + " " + name; return Math.ceil(ms / n$2) + " " + name + "s"; } } }); //#endregion //#region ../../node_modules/.pnpm/debug@2.6.9/node_modules/debug/src/debug.js var require_debug$1 = __commonJS({ "../../node_modules/.pnpm/debug@2.6.9/node_modules/debug/src/debug.js"(exports, module) { /** * This is the common logic for both the Node.js and web browser * implementations of `debug()`. * * Expose `debug()` as the module. */ exports = module.exports = createDebug.debug = createDebug["default"] = createDebug; exports.coerce = coerce; exports.disable = disable; exports.enable = enable; exports.enabled = enabled; exports.humanize = require_ms(); /** * The currently active debug mode names, and names to skip. */ exports.names = []; exports.skips = []; /** * Map of special "%n" handling functions, for the debug "format" argument. * * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". */ exports.formatters = {}; /** * Previous log timestamp. */ var prevTime; /** * Select a color. * @param {String} namespace * @return {Number} * @api private */ function selectColor(namespace) { var hash$1 = 0, i$1; for (i$1 in namespace) { hash$1 = (hash$1 << 5) - hash$1 + namespace.charCodeAt(i$1); hash$1 |= 0; } return exports.colors[Math.abs(hash$1) % exports.colors.length]; } /** * Create a debugger with the given `namespace`. * * @param {String} namespace * @return {Function} * @api public */ function createDebug(namespace) { function debug$19() { if (!debug$19.enabled) return; var self$1 = debug$19; var curr = +/* @__PURE__ */ new Date(); var ms = curr - (prevTime || curr); self$1.diff = ms; self$1.prev = prevTime; self$1.curr = curr; prevTime = curr; var args = new Array(arguments.length); for (var i$1 = 0; i$1 < args.length; i$1++) args[i$1] = arguments[i$1]; args[0] = exports.coerce(args[0]); if ("string" !== typeof args[0]) args.unshift("%O"); var index = 0; args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format$3) { if (match === "%%") return match; index++; var formatter$1 = exports.formatters[format$3]; if ("function" === typeof formatter$1) { var val = args[index]; match = formatter$1.call(self$1, val); args.splice(index, 1); index--; } return match; }); exports.formatArgs.call(self$1, args); var logFn = debug$19.log || exports.log || console.log.bind(console); logFn.apply(self$1, args); } debug$19.namespace = namespace; debug$19.enabled = exports.enabled(namespace); debug$19.useColors = exports.useColors(); debug$19.color = selectColor(namespace); if ("function" === typeof exports.init) exports.init(debug$19); return debug$19; } /** * Enables a debug mode by namespaces. This can include modes * separated by a colon and wildcards. * * @param {String} namespaces * @api public */ function enable(namespaces) { exports.save(namespaces); exports.names = []; exports.skips = []; var split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); var len = split.length; for (var i$1 = 0; i$1 < len; i$1++) { if (!split[i$1]) continue; namespaces = split[i$1].replace(/\*/g, ".*?"); if (namespaces[0] === "-") exports.skips.push(/* @__PURE__ */ new RegExp("^" + namespaces.substr(1) + "$")); else exports.names.push(/* @__PURE__ */ new RegExp("^" + namespaces + "$")); } } /** * Disable debug output. * * @api public */ function disable() { exports.enable(""); } /** * Returns true if the given mode name is enabled, false otherwise. * * @param {String} name * @return {Boolean} * @api public */ function enabled(name) { var i$1, len; for (i$1 = 0, len = exports.skips.length; i$1 < len; i$1++) if (exports.skips[i$1].test(name)) return false; for (i$1 = 0, len = exports.names.length; i$1 < len; i$1++) if (exports.names[i$1].test(name)) return true; return false; } /** * Coerce `val`. * * @param {Mixed} val * @return {Mixed} * @api private */ function coerce(val) { if (val instanceof Error) return val.stack || val.message; return val; } } }); //#endregion //#region ../../node_modules/.pnpm/debug@2.6.9/node_modules/debug/src/node.js var require_node = __commonJS({ "../../node_modules/.pnpm/debug@2.6.9/node_modules/debug/src/node.js"(exports, module) { /** * Module dependencies. */ var tty = require("tty"); var util$2 = require("util"); /** * This is the Node.js implementation of `debug()`. * * Expose `debug()` as the module. */ exports = module.exports = require_debug$1(); exports.init = init$1; exports.log = log; exports.formatArgs = formatArgs; exports.save = save; exports.load = load; exports.useColors = useColors; /** * Colors. */ exports.colors = [ 6, 2, 3, 4, 5, 1 ]; /** * Build up the default `inspectOpts` object from the environment variables. * * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js */ exports.inspectOpts = Object.keys(process.env).filter(function(key) { return /^debug_/i.test(key); }).reduce(function(obj, key) { var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function(_, k) { return k.toUpperCase(); }); var val = process.env[key]; if (/^(yes|on|true|enabled)$/i.test(val)) val = true; else if (/^(no|off|false|disabled)$/i.test(val)) val = false; else if (val === "null") val = null; else val = Number(val); obj[prop] = val; return obj; }, {}); /** * The file descriptor to write the `debug()` calls to. * Set the `DEBUG_FD` env variable to override with another value. i.e.: * * $ DEBUG_FD=3 node script.js 3>debug.log */ var fd = parseInt(process.env.DEBUG_FD, 10) || 2; if (1 !== fd && 2 !== fd) util$2.deprecate(function() {}, "except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")(); var stream = 1 === fd ? process.stdout : 2 === fd ? process.stderr : createWritableStdioStream(fd); /** * Is stdout a TTY? Colored output is enabled when `true`. */ function useColors() { return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(fd); } /** * Map %o to `util.inspect()`, all on a single line. */ exports.formatters.o = function(v) { this.inspectOpts.colors = this.useColors; return util$2.inspect(v, this.inspectOpts).split("\n").map(function(str) { return str.trim(); }).join(" "); }; /** * Map %o to `util.inspect()`, allowing multiple lines if needed. */ exports.formatters.O = function(v) { this.inspectOpts.colors = this.useColors; return util$2.inspect(v, this.inspectOpts); }; /** * Adds ANSI color escape codes if enabled. * * @api public */ function formatArgs(args) { var name = this.namespace; var useColors$2 = this.useColors; if (useColors$2) { var c = this.color; var prefix$1 = " \x1B[3" + c + ";1m" + name + " \x1B[0m"; args[0] = prefix$1 + args[0].split("\n").join("\n" + prefix$1); args.push("\x1B[3" + c + "m+" + exports.humanize(this.diff) + "\x1B[0m"); } else args[0] = (/* @__PURE__ */ new Date()).toUTCString() + " " + name + " " + args[0]; } /** * Invokes `util.format()` with the specified arguments and writes to `stream`. */ function log() { return stream.write(util$2.format.apply(util$2, arguments) + "\n"); } /** * Save `namespaces`. * * @param {String} namespaces * @api private */ function save(namespaces) { if (null == namespaces) delete process.env.DEBUG; else process.env.DEBUG = namespaces; } /** * Load `namespaces`. * * @return {String} returns the previously persisted debug modes * @api private */ function load() { return process.env.DEBUG; } /** * Copied from `node/src/node.js`. * * XXX: It's lame that node doesn't expose this API out-of-the-box. It also * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. */ function createWritableStdioStream(fd$1) { var stream$1; var tty_wrap = process.binding("tty_wrap"); switch (tty_wrap.guessHandleType(fd$1)) { case "TTY": stream$1 = new tty.WriteStream(fd$1); stream$1._type = "tty"; if (stream$1._handle && stream$1._handle.unref) stream$1._handle.unref(); break; case "FILE": var fs$13 = require("fs"); stream$1 = new fs$13.SyncWriteStream(fd$1, { autoClose: false }); stream$1._type = "fs"; break; case "PIPE": case "TCP": var net$2 = require("net"); stream$1 = new net$2.Socket({ fd: fd$1, readable: false, writable: true }); stream$1.readable = false; stream$1.read = null; stream$1._type = "pipe"; if (stream$1._handle && stream$1._handle.unref) stream$1._handle.unref(); break; default: throw new Error("Implement me. Unknown stream file type!"); } stream$1.fd = fd$1; stream$1._isStdio = true; return stream$1; } /** * Init logic for `debug` instances. * * Create a new `inspectOpts` object in case `useColors` is set * differently for a particular `debug` instance. */ function init$1(debug$19) { debug$19.inspectOpts = {}; var keys = Object.keys(exports.inspectOpts); for (var i$1 = 0; i$1 < keys.length; i$1++) debug$19.inspectOpts[keys[i$1]] = exports.inspectOpts[keys[i$1]]; } /** * Enable namespaces listed in `process.env.DEBUG` initially. */ exports.enable(load()); } }); //#endregion //#region ../../node_modules/.pnpm/encodeurl@1.0.2/node_modules/encodeurl/index.js var require_encodeurl = __commonJS({ "../../node_modules/.pnpm/encodeurl@1.0.2/node_modules/encodeurl/index.js"(exports, module) { /** * Module exports. * @public */ module.exports = encodeUrl$1; /** * RegExp to match non-URL code points, *after* encoding (i.e. not including "%") * and including invalid escape sequences. * @private */ var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g; /** * RegExp to match unmatched surrogate pair. * @private */ var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g; /** * String to replace unmatched surrogate pair with. * @private */ var UNMATCHED_SURROGATE_PAIR_REPLACE = "$1�$2"; /** * Encode a URL to a percent-encoded form, excluding already-encoded sequences. * * This function will take an already-encoded URL and encode all the non-URL * code points. This function will not encode the "%" character unless it is * not part of a valid sequence (`%20` will be left as-is, but `%foo` will * be encoded as `%25foo`). * * This encode is meant to be "safe" and does not throw errors. It will try as * hard as it can to properly encode the given URL, including replacing any raw, * unpaired surrogate pairs with the Unicode replacement character prior to * encoding. * * @param {string} url * @return {string} * @public */ function encodeUrl$1(url$6) { return String(url$6).replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE).replace(ENCODE_CHARS_REGEXP, encodeURI); } } }); //#endregion //#region ../../node_modules/.pnpm/escape-html@1.0.3/node_modules/escape-html/index.js var require_escape_html = __commonJS({ "../../node_modules/.pnpm/escape-html@1.0.3/node_modules/escape-html/index.js"(exports, module) { /** * Module variables. * @private */ var matchHtmlRegExp = /["'&<>]/; /** * Module exports. * @public */ module.exports = escapeHtml$3; /** * Escape special characters in the given string of html. * * @param {string} string The string to escape for inserting into HTML * @return {string} * @public */ function escapeHtml$3(string) { var str = "" + string; var match = matchHtmlRegExp.exec(str); if (!match) return str; var escape$2; var html = ""; var index = 0; var lastIndex = 0; for (index = match.index; index < str.length; index++) { switch (str.charCodeAt(index)) { case 34: escape$2 = """; break; case 38: escape$2 = "&"; break; case 39: escape$2 = "'"; break; case 60: escape$2 = "<"; break; case 62: escape$2 = ">"; break; default: continue; } if (lastIndex !== index) html += str.substring(lastIndex, index); lastIndex = index + 1; html += escape$2; } return lastIndex !== index ? html + str.substring(lastIndex, index) : html; } } }); //#endregion //#region ../../node_modules/.pnpm/ee-first@1.1.1/node_modules/ee-first/index.js var require_ee_first = __commonJS({ "../../node_modules/.pnpm/ee-first@1.1.1/node_modules/ee-first/index.js"(exports, module) { /** * Module exports. * @public */ module.exports = first$1; /** * Get the first event in a set of event emitters and event pairs. * * @param {array} stuff * @param {function} done * @public */ function first$1(stuff, done) { if (!Array.isArray(stuff)) throw new TypeError("arg must be an array of [ee, events...] arrays"); var cleanups = []; for (var i$1 = 0; i$1 < stuff.length; i$1++) { var arr = stuff[i$1]; if (!Array.isArray(arr) || arr.length < 2) throw new TypeError("each array member must be [ee, events...]"); var ee = arr[0]; for (var j = 1; j < arr.length; j++) { var event = arr[j]; var fn = listener(event, callback); ee.on(event, fn); cleanups.push({ ee, event, fn }); } } function callback() { cleanup(); done.apply(null, arguments); } function cleanup() { var x; for (var i$2 = 0; i$2 < cleanups.length; i$2++) { x = cleanups[i$2]; x.ee.removeListener(x.event, x.fn); } } function thunk(fn$1) { done = fn$1; } thunk.cancel = cleanup; return thunk; } /** * Create the event listener. * @private */ function listener(event, done) { return function onevent(arg1) { var args = new Array(arguments.length); var ee = this; var err$2 = event === "error" ? arg1 : null; for (var i$1 = 0; i$1 < args.length; i$1++) args[i$1] = arguments[i$1]; done(err$2, ee, event, args); }; } } }); //#endregion //#region ../../node_modules/.pnpm/on-finished@2.3.0/node_modules/on-finished/index.js var require_on_finished = __commonJS({ "../../node_modules/.pnpm/on-finished@2.3.0/node_modules/on-finished/index.js"(exports, module) { /** * Module exports. * @public */ module.exports = onFinished$1; module.exports.isFinished = isFinished$1; /** * Module dependencies. * @private */ var first = require_ee_first(); /** * Variables. * @private */ /* istanbul ignore next */ var defer$2 = typeof setImmediate === "function" ? setImmediate : function(fn) { process.nextTick(fn.bind.apply(fn, arguments)); }; /** * Invoke callback when the response has finished, useful for * cleaning up resources afterwards. * * @param {object} msg * @param {function} listener * @return {object} * @public */ function onFinished$1(msg, listener$1) { if (isFinished$1(msg) !== false) { defer$2(listener$1, null, msg); return msg; } attachListener(msg, listener$1); return msg; } /** * Determine if message is already finished. * * @param {object} msg * @return {boolean} * @public */ function isFinished$1(msg) { var socket = msg.socket; if (typeof msg.finished === "boolean") return Boolean(msg.finished || socket && !socket.writable); if (typeof msg.complete === "boolean") return Boolean(msg.upgrade || !socket || !socket.readable || msg.complete && !msg.readable); return void 0; } /** * Attach a finished listener to the message. * * @param {object} msg * @param {function} callback * @private */ function attachFinishedListener(msg, callback) { var eeMsg; var eeSocket; var finished = false; function onFinish(error$1) { eeMsg.cancel(); eeSocket.cancel(); finished = true; callback(error$1); } eeMsg = eeSocket = first([[ msg, "end", "finish" ]], onFinish); function onSocket(socket) { msg.removeListener("socket", onSocket); if (finished) return; if (eeMsg !== eeSocket) return; eeSocket = first([[ socket, "error", "close" ]], onFinish); } if (msg.socket) { onSocket(msg.socket); return; } msg.on("socket", onSocket); if (msg.socket === void 0) patchAssignSocket(msg, onSocket); } /** * Attach the listener to the message. * * @param {object} msg * @return {function} * @private */ function attachListener(msg, listener$1) { var attached = msg.__onFinished; if (!attached || !attached.queue) { attached = msg.__onFinished = createListener(msg); attachFinishedListener(msg, attached); } attached.queue.push(listener$1); } /** * Create listener on message. * * @param {object} msg * @return {function} * @private */ function createListener(msg) { function listener$1(err$2) { if (msg.__onFinished === listener$1) msg.__onFinished = null; if (!listener$1.queue) return; var queue = listener$1.queue; listener$1.queue = null; for (var i$1 = 0; i$1 < queue.length; i$1++) queue[i$1](err$2, msg); } listener$1.queue = []; return listener$1; } /** * Patch ServerResponse.prototype.assignSocket for node.js 0.8. * * @param {ServerResponse} res * @param {function} callback * @private */ function patchAssignSocket(res, callback) { var assignSocket = res.assignSocket; if (typeof assignSocket !== "function") return; res.assignSocket = function _assignSocket(socket) { assignSocket.call(this, socket); callback(socket); }; } } }); //#endregion //#region ../../node_modules/.pnpm/parseurl@1.3.3/node_modules/parseurl/index.js var require_parseurl = __commonJS({ "../../node_modules/.pnpm/parseurl@1.3.3/node_modules/parseurl/index.js"(exports, module) { /** * Module dependencies. * @private */ var url$4 = require("url"); var parse$10 = url$4.parse; var Url = url$4.Url; /** * Module exports. * @public */ module.exports = parseurl; module.exports.original = originalurl; /** * Parse the `req` url with memoization. * * @param {ServerRequest} req * @return {Object} * @public */ function parseurl(req$4) { var url$6 = req$4.url; if (url$6 === void 0) return void 0; var parsed = req$4._parsedUrl; if (fresh(url$6, parsed)) return parsed; parsed = fastparse(url$6); parsed._raw = url$6; return req$4._parsedUrl = parsed; } /** * Parse the `req` original url with fallback and memoization. * * @param {ServerRequest} req * @return {Object} * @public */ function originalurl(req$4) { var url$6 = req$4.originalUrl; if (typeof url$6 !== "string") return parseurl(req$4); var parsed = req$4._parsedOriginalUrl; if (fresh(url$6, parsed)) return parsed; parsed = fastparse(url$6); parsed._raw = url$6; return req$4._parsedOriginalUrl = parsed; } /** * Parse the `str` url with fast-path short-cut. * * @param {string} str * @return {Object} * @private */ function fastparse(str) { if (typeof str !== "string" || str.charCodeAt(0) !== 47) return parse$10(str); var pathname = str; var query = null; var search = null; for (var i$1 = 1; i$1 < str.length; i$1++) switch (str.charCodeAt(i$1)) { case 63: if (search === null) { pathname = str.substring(0, i$1); query = str.substring(i$1 + 1); search = str.substring(i$1); } break; case 9: case 10: case 12: case 13: case 32: case 35: case 160: case 65279: return parse$10(str); } var url$6 = Url !== void 0 ? new Url() : {}; url$6.path = str; url$6.href = str; url$6.pathname = pathname; if (search !== null) { url$6.query = query; url$6.search = search; } return url$6; } /** * Determine if parsed is still fresh for url. * * @param {string} url * @param {object} parsedUrl * @return {boolean} * @private */ function fresh(url$6, parsedUrl) { return typeof parsedUrl === "object" && parsedUrl !== null && (Url === void 0 || parsedUrl instanceof Url) && parsedUrl._raw === url$6; } } }); //#endregion //#region ../../node_modules/.pnpm/statuses@1.5.0/node_modules/statuses/codes.json var require_codes = __commonJS({ "../../node_modules/.pnpm/statuses@1.5.0/node_modules/statuses/codes.json"(exports, module) { module.exports = { "100": "Continue", "101": "Switching Protocols", "102": "Processing", "103": "Early Hints", "200": "OK", "201": "Created", "202": "Accepted", "203": "Non-Authoritative Information", "204": "No Content", "205": "Reset Content", "206": "Partial Content", "207": "Multi-Status", "208": "Already Reported", "226": "IM Used", "300": "Multiple Choices", "301": "Moved Permanently", "302": "Found", "303": "See Other", "304": "Not Modified", "305": "Use Proxy", "306": "(Unused)", "307": "Temporary Redirect", "308": "Permanent Redirect", "400": "Bad Request", "401": "Unauthorized", "402": "Payment Required", "403": "Forbidden", "404": "Not Found", "405": "Method Not Allowed", "406": "Not Acceptable", "407": "Proxy Authentication Required", "408": "Request Timeout", "409": "Conflict", "410": "Gone", "411": "Length Required", "412": "Precondition Failed", "413": "Payload Too Large", "414": "URI Too Long", "415": "Unsupported Media Type", "416": "Range Not Satisfiable", "417": "Expectation Failed", "418": "I'm a teapot", "421": "Misdirected Request", "422": "Unprocessable Entity", "423": "Locked", "424": "Failed Dependency", "425": "Unordered Collection", "426": "Upgrade Required", "428": "Precondition Required", "429": "Too Many Requests", "431": "Request Header Fields Too Large", "451": "Unavailable For Legal Reasons", "500": "Internal Server Error", "501": "Not Implemented", "502": "Bad Gateway", "503": "Service Unavailable", "504": "Gateway Timeout", "505": "HTTP Version Not Supported", "506": "Variant Also Negotiates", "507": "Insufficient Storage", "508": "Loop Detected", "509": "Bandwidth Limit Exceeded", "510": "Not Extended", "511": "Network Authentication Required" }; } }); //#endregion //#region ../../node_modules/.pnpm/statuses@1.5.0/node_modules/statuses/index.js var require_statuses = __commonJS({ "../../node_modules/.pnpm/statuses@1.5.0/node_modules/statuses/index.js"(exports, module) { /** * Module dependencies. * @private */ var codes = require_codes(); /** * Module exports. * @public */ module.exports = status; status.STATUS_CODES = codes; status.codes = populateStatusesMap(status, codes); status.redirect = { 300: true, 301: true, 302: true, 303: true, 305: true, 307: true, 308: true }; status.empty = { 204: true, 205: true, 304: true }; status.retry = { 502: true, 503: true, 504: true }; /** * Populate the statuses map for given codes. * @private */ function populateStatusesMap(statuses$1, codes$2) { var arr = []; Object.keys(codes$2).forEach(function forEachCode(code) { var message = codes$2[code]; var status$1 = Number(code); statuses$1[status$1] = message; statuses$1[message] = status$1; statuses$1[message.toLowerCase()] = status$1; arr.push(status$1); }); return arr; } /** * Get the status code. * * Given a number, this will throw if it is not a known status * code, otherwise the code will be returned. Given a string, * the string will be parsed for a number and return the code * if valid, otherwise will lookup the code assuming this is * the status message. * * @param {string|number} code * @returns {number} * @public */ function status(code) { if (typeof code === "number") { if (!status[code]) throw new Error("invalid status code: " + code); return code; } if (typeof code !== "string") throw new TypeError("code must be a number or string"); var n$2 = parseInt(code, 10); if (!isNaN(n$2)) { if (!status[n$2]) throw new Error("invalid status code: " + n$2); return n$2; } n$2 = status[code.toLowerCase()]; if (!n$2) throw new Error("invalid status message: \"" + code + "\""); return n$2; } } }); //#endregion //#region ../../node_modules/.pnpm/unpipe@1.0.0/node_modules/unpipe/index.js var require_unpipe = __commonJS({ "../../node_modules/.pnpm/unpipe@1.0.0/node_modules/unpipe/index.js"(exports, module) { /** * Module exports. * @public */ module.exports = unpipe$1; /** * Determine if there are Node.js pipe-like data listeners. * @private */ function hasPipeDataListeners(stream$1) { var listeners = stream$1.listeners("data"); for (var i$1 = 0; i$1 < listeners.length; i$1++) if (listeners[i$1].name === "ondata") return true; return false; } /** * Unpipe a stream from all destinations. * * @param {object} stream * @public */ function unpipe$1(stream$1) { if (!stream$1) throw new TypeError("argument stream is required"); if (typeof stream$1.unpipe === "function") { stream$1.unpipe(); return; } if (!hasPipeDataListeners(stream$1)) return; var listener$1; var listeners = stream$1.listeners("close"); for (var i$1 = 0; i$1 < listeners.length; i$1++) { listener$1 = listeners[i$1]; if (listener$1.name !== "cleanup" && listener$1.name !== "onclose") continue; listener$1.call(stream$1); } } } }); //#endregion //#region ../../node_modules/.pnpm/finalhandler@1.1.2/node_modules/finalhandler/index.js var require_finalhandler = __commonJS({ "../../node_modules/.pnpm/finalhandler@1.1.2/node_modules/finalhandler/index.js"(exports, module) { /** * Module dependencies. * @private */ var debug$9 = require_node()("finalhandler"); var encodeUrl = require_encodeurl(); var escapeHtml$2 = require_escape_html(); var onFinished = require_on_finished(); var parseUrl$2 = require_parseurl(); var statuses = require_statuses(); var unpipe = require_unpipe(); /** * Module variables. * @private */ var DOUBLE_SPACE_REGEXP = /\x20{2}/g; var NEWLINE_REGEXP = /\n/g; /* istanbul ignore next */ var defer$1 = typeof setImmediate === "function" ? setImmediate : function(fn) { process.nextTick(fn.bind.apply(fn, arguments)); }; var isFinished = onFinished.isFinished; /** * Create a minimal HTML document. * * @param {string} message * @private */ function createHtmlDocument(message) { var body = escapeHtml$2(message).replace(NEWLINE_REGEXP, "
").replace(DOUBLE_SPACE_REGEXP, "  "); return "\n\n\n\nError\n\n\n
" + body + "
\n\n\n"; } /** * Module exports. * @public */ module.exports = finalhandler$1; /** * Create a function to handle the final response. * * @param {Request} req * @param {Response} res * @param {Object} [options] * @return {Function} * @public */ function finalhandler$1(req$4, res, options$1) { var opts = options$1 || {}; var env$2 = opts.env || process.env.NODE_ENV || "development"; var onerror = opts.onerror; return function(err$2) { var headers; var msg; var status$1; if (!err$2 && headersSent(res)) { debug$9("cannot 404 after headers sent"); return; } if (err$2) { status$1 = getErrorStatusCode(err$2); if (status$1 === void 0) status$1 = getResponseStatusCode(res); else headers = getErrorHeaders(err$2); msg = getErrorMessage(err$2, status$1, env$2); } else { status$1 = 404; msg = "Cannot " + req$4.method + " " + encodeUrl(getResourceName(req$4)); } debug$9("default %s", status$1); if (err$2 && onerror) defer$1(onerror, err$2, req$4, res); if (headersSent(res)) { debug$9("cannot %d after headers sent", status$1); req$4.socket.destroy(); return; } send$2(req$4, res, status$1, headers, msg); }; } /** * Get headers from Error object. * * @param {Error} err * @return {object} * @private */ function getErrorHeaders(err$2) { if (!err$2.headers || typeof err$2.headers !== "object") return void 0; var headers = Object.create(null); var keys = Object.keys(err$2.headers); for (var i$1 = 0; i$1 < keys.length; i$1++) { var key = keys[i$1]; headers[key] = err$2.headers[key]; } return headers; } /** * Get message from Error object, fallback to status message. * * @param {Error} err * @param {number} status * @param {string} env * @return {string} * @private */ function getErrorMessage(err$2, status$1, env$2) { var msg; if (env$2 !== "production") { msg = err$2.stack; if (!msg && typeof err$2.toString === "function") msg = err$2.toString(); } return msg || statuses[status$1]; } /** * Get status code from Error object. * * @param {Error} err * @return {number} * @private */ function getErrorStatusCode(err$2) { if (typeof err$2.status === "number" && err$2.status >= 400 && err$2.status < 600) return err$2.status; if (typeof err$2.statusCode === "number" && err$2.statusCode >= 400 && err$2.statusCode < 600) return err$2.statusCode; return void 0; } /** * Get resource name for the request. * * This is typically just the original pathname of the request * but will fallback to "resource" is that cannot be determined. * * @param {IncomingMessage} req * @return {string} * @private */ function getResourceName(req$4) { try { return parseUrl$2.original(req$4).pathname; } catch (e$1) { return "resource"; } } /** * Get status code from response. * * @param {OutgoingMessage} res * @return {number} * @private */ function getResponseStatusCode(res) { var status$1 = res.statusCode; if (typeof status$1 !== "number" || status$1 < 400 || status$1 > 599) status$1 = 500; return status$1; } /** * Determine if the response headers have been sent. * * @param {object} res * @returns {boolean} * @private */ function headersSent(res) { return typeof res.headersSent !== "boolean" ? Boolean(res._header) : res.headersSent; } /** * Send response. * * @param {IncomingMessage} req * @param {OutgoingMessage} res * @param {number} status * @param {object} headers * @param {string} message * @private */ function send$2(req$4, res, status$1, headers, message) { function write() { var body = createHtmlDocument(message); res.statusCode = status$1; res.statusMessage = statuses[status$1]; setHeaders(res, headers); res.setHeader("Content-Security-Policy", "default-src 'none'"); res.setHeader("X-Content-Type-Options", "nosniff"); res.setHeader("Content-Type", "text/html; charset=utf-8"); res.setHeader("Content-Length", Buffer.byteLength(body, "utf8")); if (req$4.method === "HEAD") { res.end(); return; } res.end(body, "utf8"); } if (isFinished(req$4)) { write(); return; } unpipe(req$4); onFinished(req$4, write); req$4.resume(); } /** * Set response headers from an object. * * @param {OutgoingMessage} res * @param {object} headers * @private */ function setHeaders(res, headers) { if (!headers) return; var keys = Object.keys(headers); for (var i$1 = 0; i$1 < keys.length; i$1++) { var key = keys[i$1]; res.setHeader(key, headers[key]); } } } }); //#endregion //#region ../../node_modules/.pnpm/utils-merge@1.0.1/node_modules/utils-merge/index.js var require_utils_merge = __commonJS({ "../../node_modules/.pnpm/utils-merge@1.0.1/node_modules/utils-merge/index.js"(exports, module) { /** * Merge object b with object a. * * var a = { foo: 'bar' } * , b = { bar: 'baz' }; * * merge(a, b); * // => { foo: 'bar', bar: 'baz' } * * @param {Object} a * @param {Object} b * @return {Object} * @api public */ exports = module.exports = function(a, b) { if (a && b) for (var key in b) a[key] = b[key]; return a; }; } }); //#endregion //#region ../../node_modules/.pnpm/connect@3.7.0/node_modules/connect/index.js var require_connect = __commonJS({ "../../node_modules/.pnpm/connect@3.7.0/node_modules/connect/index.js"(exports, module) { /** * Module dependencies. * @private */ var debug$8 = require_node()("connect:dispatcher"); var EventEmitter$5 = require("events").EventEmitter; var finalhandler = require_finalhandler(); var http$5 = require("http"); var merge = require_utils_merge(); var parseUrl$1 = require_parseurl(); /** * Module exports. * @public */ module.exports = createServer$3; /** * Module variables. * @private */ var env = process.env.NODE_ENV || "development"; var proto = {}; /* istanbul ignore next */ var defer = typeof setImmediate === "function" ? setImmediate : function(fn) { process.nextTick(fn.bind.apply(fn, arguments)); }; /** * Create a new connect server. * * @return {function} * @public */ function createServer$3() { function app(req$4, res, next) { app.handle(req$4, res, next); } merge(app, proto); merge(app, EventEmitter$5.prototype); app.route = "/"; app.stack = []; return app; } /** * Utilize the given middleware `handle` to the given `route`, * defaulting to _/_. This "route" is the mount-point for the * middleware, when given a value other than _/_ the middleware * is only effective when that segment is present in the request's * pathname. * * For example if we were to mount a function at _/admin_, it would * be invoked on _/admin_, and _/admin/settings_, however it would * not be invoked for _/_, or _/posts_. * * @param {String|Function|Server} route, callback or server * @param {Function|Server} callback or server * @return {Server} for chaining * @public */ proto.use = function use(route, fn) { var handle = fn; var path$13 = route; if (typeof route !== "string") { handle = route; path$13 = "/"; } if (typeof handle.handle === "function") { var server = handle; server.route = path$13; handle = function(req$4, res, next) { server.handle(req$4, res, next); }; } if (handle instanceof http$5.Server) handle = handle.listeners("request")[0]; if (path$13[path$13.length - 1] === "/") path$13 = path$13.slice(0, -1); debug$8("use %s %s", path$13 || "/", handle.name || "anonymous"); this.stack.push({ route: path$13, handle }); return this; }; /** * Handle server requests, punting them down * the middleware stack. * * @private */ proto.handle = function handle(req$4, res, out) { var index = 0; var protohost = getProtohost(req$4.url) || ""; var removed = ""; var slashAdded = false; var stack = this.stack; var done = out || finalhandler(req$4, res, { env, onerror: logerror }); req$4.originalUrl = req$4.originalUrl || req$4.url; function next(err$2) { if (slashAdded) { req$4.url = req$4.url.substr(1); slashAdded = false; } if (removed.length !== 0) { req$4.url = protohost + removed + req$4.url.substr(protohost.length); removed = ""; } var layer = stack[index++]; if (!layer) { defer(done, err$2); return; } var path$13 = parseUrl$1(req$4).pathname || "/"; var route = layer.route; if (path$13.toLowerCase().substr(0, route.length) !== route.toLowerCase()) return next(err$2); var c = path$13.length > route.length && path$13[route.length]; if (c && c !== "/" && c !== ".") return next(err$2); if (route.length !== 0 && route !== "/") { removed = route; req$4.url = protohost + req$4.url.substr(protohost.length + removed.length); if (!protohost && req$4.url[0] !== "/") { req$4.url = "/" + req$4.url; slashAdded = true; } } call(layer.handle, route, err$2, req$4, res, next); } next(); }; /** * Listen for connections. * * This method takes the same arguments * as node's `http.Server#listen()`. * * HTTP and HTTPS: * * If you run your application both as HTTP * and HTTPS you may wrap them individually, * since your Connect "server" is really just * a JavaScript `Function`. * * var connect = require('connect') * , http = require('http') * , https = require('https'); * * var app = connect(); * * http.createServer(app).listen(80); * https.createServer(options, app).listen(443); * * @return {http.Server} * @api public */ proto.listen = function listen() { var server = http$5.createServer(this); return server.listen.apply(server, arguments); }; /** * Invoke a route handle. * @private */ function call(handle, route, err$2, req$4, res, next) { var arity = handle.length; var error$1 = err$2; var hasError = Boolean(err$2); debug$8("%s %s : %s", handle.name || "", route, req$4.originalUrl); try { if (hasError && arity === 4) { handle(err$2, req$4, res, next); return; } else if (!hasError && arity < 4) { handle(req$4, res, next); return; } } catch (e$1) { error$1 = e$1; } next(error$1); } /** * Log error using console.error. * * @param {Error} err * @private */ function logerror(err$2) { if (env !== "test") console.error(err$2.stack || err$2.toString()); } /** * Get get protocol + host for a URL. * * @param {string} url * @private */ function getProtohost(url$6) { if (url$6.length === 0 || url$6[0] === "/") return void 0; var fqdnIndex = url$6.indexOf("://"); return fqdnIndex !== -1 && url$6.lastIndexOf("?", fqdnIndex) === -1 ? url$6.substr(0, url$6.indexOf("/", 3 + fqdnIndex)) : void 0; } } }); //#endregion //#region ../../node_modules/.pnpm/object-assign@4.1.1/node_modules/object-assign/index.js var require_object_assign = __commonJS({ "../../node_modules/.pnpm/object-assign@4.1.1/node_modules/object-assign/index.js"(exports, module) { var getOwnPropertySymbols = Object.getOwnPropertySymbols; var hasOwnProperty = Object.prototype.hasOwnProperty; var propIsEnumerable = Object.prototype.propertyIsEnumerable; function toObject(val) { if (val === null || val === void 0) throw new TypeError("Object.assign cannot be called with null or undefined"); return Object(val); } function shouldUseNative() { try { if (!Object.assign) return false; var test1 = /* @__PURE__ */ new String("abc"); test1[5] = "de"; if (Object.getOwnPropertyNames(test1)[0] === "5") return false; var test2 = {}; for (var i$1 = 0; i$1 < 10; i$1++) test2["_" + String.fromCharCode(i$1)] = i$1; var order2 = Object.getOwnPropertyNames(test2).map(function(n$2) { return test2[n$2]; }); if (order2.join("") !== "0123456789") return false; var test3 = {}; "abcdefghijklmnopqrst".split("").forEach(function(letter) { test3[letter] = letter; }); if (Object.keys(Object.assign({}, test3)).join("") !== "abcdefghijklmnopqrst") return false; return true; } catch (err$2) { return false; } } module.exports = shouldUseNative() ? Object.assign : function(target, source) { var from; var to = toObject(target); var symbols; for (var s$2 = 1; s$2 < arguments.length; s$2++) { from = Object(arguments[s$2]); for (var key in from) if (hasOwnProperty.call(from, key)) to[key] = from[key]; if (getOwnPropertySymbols) { symbols = getOwnPropertySymbols(from); for (var i$1 = 0; i$1 < symbols.length; i$1++) if (propIsEnumerable.call(from, symbols[i$1])) to[symbols[i$1]] = from[symbols[i$1]]; } } return to; }; } }); //#endregion //#region ../../node_modules/.pnpm/vary@1.1.2/node_modules/vary/index.js var require_vary = __commonJS({ "../../node_modules/.pnpm/vary@1.1.2/node_modules/vary/index.js"(exports, module) { /** * Module exports. */ module.exports = vary; module.exports.append = append$1; /** * RegExp to match field-name in RFC 7230 sec 3.2 * * field-name = token * token = 1*tchar * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" * / DIGIT / ALPHA * ; any VCHAR, except delimiters */ var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/; /** * Append a field to a vary header. * * @param {String} header * @param {String|Array} field * @return {String} * @public */ function append$1(header, field) { if (typeof header !== "string") throw new TypeError("header argument is required"); if (!field) throw new TypeError("field argument is required"); var fields = !Array.isArray(field) ? parse$9(String(field)) : field; for (var j = 0; j < fields.length; j++) if (!FIELD_NAME_REGEXP.test(fields[j])) throw new TypeError("field argument contains an invalid header name"); if (header === "*") return header; var val = header; var vals = parse$9(header.toLowerCase()); if (fields.indexOf("*") !== -1 || vals.indexOf("*") !== -1) return "*"; for (var i$1 = 0; i$1 < fields.length; i$1++) { var fld = fields[i$1].toLowerCase(); if (vals.indexOf(fld) === -1) { vals.push(fld); val = val ? val + ", " + fields[i$1] : fields[i$1]; } } return val; } /** * Parse a vary header into an array. * * @param {String} header * @return {Array} * @private */ function parse$9(header) { var end = 0; var list = []; var start = 0; for (var i$1 = 0, len = header.length; i$1 < len; i$1++) switch (header.charCodeAt(i$1)) { case 32: if (start === end) start = end = i$1 + 1; break; case 44: list.push(header.substring(start, end)); start = end = i$1 + 1; break; default: end = i$1 + 1; break; } list.push(header.substring(start, end)); return list; } /** * Mark that a request is varied on a header field. * * @param {Object} res * @param {String|Array} field * @public */ function vary(res, field) { if (!res || !res.getHeader || !res.setHeader) throw new TypeError("res argument is required"); var val = res.getHeader("Vary") || ""; var header = Array.isArray(val) ? val.join(", ") : String(val); if (val = append$1(header, field)) res.setHeader("Vary", val); } } }); //#endregion //#region ../../node_modules/.pnpm/cors@2.8.5/node_modules/cors/lib/index.js var require_lib = __commonJS({ "../../node_modules/.pnpm/cors@2.8.5/node_modules/cors/lib/index.js"(exports, module) { (function() { "use strict"; var assign = require_object_assign(); var vary$1 = require_vary(); var defaults = { origin: "*", methods: "GET,HEAD,PUT,PATCH,POST,DELETE", preflightContinue: false, optionsSuccessStatus: 204 }; function isString$1(s$2) { return typeof s$2 === "string" || s$2 instanceof String; } function isOriginAllowed(origin, allowedOrigin) { if (Array.isArray(allowedOrigin)) { for (var i$1 = 0; i$1 < allowedOrigin.length; ++i$1) if (isOriginAllowed(origin, allowedOrigin[i$1])) return true; return false; } else if (isString$1(allowedOrigin)) return origin === allowedOrigin; else if (allowedOrigin instanceof RegExp) return allowedOrigin.test(origin); else return !!allowedOrigin; } function configureOrigin(options$1, req$4) { var requestOrigin = req$4.headers.origin, headers = [], isAllowed; if (!options$1.origin || options$1.origin === "*") headers.push([{ key: "Access-Control-Allow-Origin", value: "*" }]); else if (isString$1(options$1.origin)) { headers.push([{ key: "Access-Control-Allow-Origin", value: options$1.origin }]); headers.push([{ key: "Vary", value: "Origin" }]); } else { isAllowed = isOriginAllowed(requestOrigin, options$1.origin); headers.push([{ key: "Access-Control-Allow-Origin", value: isAllowed ? requestOrigin : false }]); headers.push([{ key: "Vary", value: "Origin" }]); } return headers; } function configureMethods(options$1) { var methods = options$1.methods; if (methods.join) methods = options$1.methods.join(","); return { key: "Access-Control-Allow-Methods", value: methods }; } function configureCredentials(options$1) { if (options$1.credentials === true) return { key: "Access-Control-Allow-Credentials", value: "true" }; return null; } function configureAllowedHeaders(options$1, req$4) { var allowedHeaders = options$1.allowedHeaders || options$1.headers; var headers = []; if (!allowedHeaders) { allowedHeaders = req$4.headers["access-control-request-headers"]; headers.push([{ key: "Vary", value: "Access-Control-Request-Headers" }]); } else if (allowedHeaders.join) allowedHeaders = allowedHeaders.join(","); if (allowedHeaders && allowedHeaders.length) headers.push([{ key: "Access-Control-Allow-Headers", value: allowedHeaders }]); return headers; } function configureExposedHeaders(options$1) { var headers = options$1.exposedHeaders; if (!headers) return null; else if (headers.join) headers = headers.join(","); if (headers && headers.length) return { key: "Access-Control-Expose-Headers", value: headers }; return null; } function configureMaxAge(options$1) { var maxAge = (typeof options$1.maxAge === "number" || options$1.maxAge) && options$1.maxAge.toString(); if (maxAge && maxAge.length) return { key: "Access-Control-Max-Age", value: maxAge }; return null; } function applyHeaders(headers, res) { for (var i$1 = 0, n$2 = headers.length; i$1 < n$2; i$1++) { var header = headers[i$1]; if (header) { if (Array.isArray(header)) applyHeaders(header, res); else if (header.key === "Vary" && header.value) vary$1(res, header.value); else if (header.value) res.setHeader(header.key, header.value); } } } function cors(options$1, req$4, res, next) { var headers = [], method = req$4.method && req$4.method.toUpperCase && req$4.method.toUpperCase(); if (method === "OPTIONS") { headers.push(configureOrigin(options$1, req$4)); headers.push(configureCredentials(options$1, req$4)); headers.push(configureMethods(options$1, req$4)); headers.push(configureAllowedHeaders(options$1, req$4)); headers.push(configureMaxAge(options$1, req$4)); headers.push(configureExposedHeaders(options$1, req$4)); applyHeaders(headers, res); if (options$1.preflightContinue) next(); else { res.statusCode = options$1.optionsSuccessStatus; res.setHeader("Content-Length", "0"); res.end(); } } else { headers.push(configureOrigin(options$1, req$4)); headers.push(configureCredentials(options$1, req$4)); headers.push(configureExposedHeaders(options$1, req$4)); applyHeaders(headers, res); next(); } } function middlewareWrapper(o$1) { var optionsCallback = null; if (typeof o$1 === "function") optionsCallback = o$1; else optionsCallback = function(req$4, cb) { cb(null, o$1); }; return function corsMiddleware$2(req$4, res, next) { optionsCallback(req$4, function(err$2, options$1) { if (err$2) next(err$2); else { var corsOptions = assign({}, defaults, options$1); var originCallback = null; if (corsOptions.origin && typeof corsOptions.origin === "function") originCallback = corsOptions.origin; else if (corsOptions.origin) originCallback = function(origin, cb) { cb(null, corsOptions.origin); }; if (originCallback) originCallback(req$4.headers.origin, function(err2, origin) { if (err2 || !origin) next(err2); else { corsOptions.origin = origin; cors(corsOptions, req$4, res, next); } }); else next(); } }); }; } module.exports = middlewareWrapper; })(); } }); //#endregion //#region ../../node_modules/.pnpm/readdirp@3.6.0/node_modules/readdirp/index.js var require_readdirp = __commonJS({ "../../node_modules/.pnpm/readdirp@3.6.0/node_modules/readdirp/index.js"(exports, module) { const fs$10 = require("fs"); const { Readable: Readable$1 } = require("stream"); const sysPath$3 = require("path"); const { promisify: promisify$4 } = require("util"); const picomatch$2 = require("picomatch"); const readdir$1 = promisify$4(fs$10.readdir); const stat$3 = promisify$4(fs$10.stat); const lstat$2 = promisify$4(fs$10.lstat); const realpath$1 = promisify$4(fs$10.realpath); /** * @typedef {Object} EntryInfo * @property {String} path * @property {String} fullPath * @property {fs.Stats=} stats * @property {fs.Dirent=} dirent * @property {String} basename */ const BANG$2 = "!"; const RECURSIVE_ERROR_CODE = "READDIRP_RECURSIVE_ERROR"; const NORMAL_FLOW_ERRORS = new Set([ "ENOENT", "EPERM", "EACCES", "ELOOP", RECURSIVE_ERROR_CODE ]); const FILE_TYPE = "files"; const DIR_TYPE = "directories"; const FILE_DIR_TYPE = "files_directories"; const EVERYTHING_TYPE = "all"; const ALL_TYPES = [ FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE ]; const isNormalFlowError = (error$1) => NORMAL_FLOW_ERRORS.has(error$1.code); const [maj, min] = process.versions.node.split(".").slice(0, 2).map((n$2) => Number.parseInt(n$2, 10)); const wantBigintFsStats = process.platform === "win32" && (maj > 10 || maj === 10 && min >= 5); const normalizeFilter$1 = (filter$1) => { if (filter$1 === void 0) return; if (typeof filter$1 === "function") return filter$1; if (typeof filter$1 === "string") { const glob$1 = picomatch$2(filter$1.trim()); return (entry) => glob$1(entry.basename); } if (Array.isArray(filter$1)) { const positive = []; const negative = []; for (const item of filter$1) { const trimmed = item.trim(); if (trimmed.charAt(0) === BANG$2) negative.push(picomatch$2(trimmed.slice(1))); else positive.push(picomatch$2(trimmed)); } if (negative.length > 0) { if (positive.length > 0) return (entry) => positive.some((f$1) => f$1(entry.basename)) && !negative.some((f$1) => f$1(entry.basename)); return (entry) => !negative.some((f$1) => f$1(entry.basename)); } return (entry) => positive.some((f$1) => f$1(entry.basename)); } }; var ReaddirpStream = class ReaddirpStream extends Readable$1 { static get defaultOptions() { return { root: ".", fileFilter: (path$13) => true, directoryFilter: (path$13) => true, type: FILE_TYPE, lstat: false, depth: 2147483648, alwaysStat: false }; } constructor(options$1 = {}) { super({ objectMode: true, autoDestroy: true, highWaterMark: options$1.highWaterMark || 4096 }); const opts = { ...ReaddirpStream.defaultOptions, ...options$1 }; const { root, type } = opts; this._fileFilter = normalizeFilter$1(opts.fileFilter); this._directoryFilter = normalizeFilter$1(opts.directoryFilter); const statMethod = opts.lstat ? lstat$2 : stat$3; if (wantBigintFsStats) this._stat = (path$13) => statMethod(path$13, { bigint: true }); else this._stat = statMethod; this._maxDepth = opts.depth; this._wantsDir = [ DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE ].includes(type); this._wantsFile = [ FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE ].includes(type); this._wantsEverything = type === EVERYTHING_TYPE; this._root = sysPath$3.resolve(root); this._isDirent = "Dirent" in fs$10 && !opts.alwaysStat; this._statsProp = this._isDirent ? "dirent" : "stats"; this._rdOptions = { encoding: "utf8", withFileTypes: this._isDirent }; this.parents = [this._exploreDir(root, 1)]; this.reading = false; this.parent = void 0; } async _read(batch) { if (this.reading) return; this.reading = true; try { while (!this.destroyed && batch > 0) { const { path: path$13, depth, files = [] } = this.parent || {}; if (files.length > 0) { const slice = files.splice(0, batch).map((dirent) => this._formatEntry(dirent, path$13)); for (const entry of await Promise.all(slice)) { if (this.destroyed) return; const entryType = await this._getEntryType(entry); if (entryType === "directory" && this._directoryFilter(entry)) { if (depth <= this._maxDepth) this.parents.push(this._exploreDir(entry.fullPath, depth + 1)); if (this._wantsDir) { this.push(entry); batch--; } } else if ((entryType === "file" || this._includeAsFile(entry)) && this._fileFilter(entry)) { if (this._wantsFile) { this.push(entry); batch--; } } } } else { const parent = this.parents.pop(); if (!parent) { this.push(null); break; } this.parent = await parent; if (this.destroyed) return; } } } catch (error$1) { this.destroy(error$1); } finally { this.reading = false; } } async _exploreDir(path$13, depth) { let files; try { files = await readdir$1(path$13, this._rdOptions); } catch (error$1) { this._onError(error$1); } return { files, depth, path: path$13 }; } async _formatEntry(dirent, path$13) { let entry; try { const basename$3 = this._isDirent ? dirent.name : dirent; const fullPath = sysPath$3.resolve(sysPath$3.join(path$13, basename$3)); entry = { path: sysPath$3.relative(this._root, fullPath), fullPath, basename: basename$3 }; entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath); } catch (err$2) { this._onError(err$2); } return entry; } _onError(err$2) { if (isNormalFlowError(err$2) && !this.destroyed) this.emit("warn", err$2); else this.destroy(err$2); } async _getEntryType(entry) { const stats = entry && entry[this._statsProp]; if (!stats) return; if (stats.isFile()) return "file"; if (stats.isDirectory()) return "directory"; if (stats && stats.isSymbolicLink()) { const full = entry.fullPath; try { const entryRealPath = await realpath$1(full); const entryRealPathStats = await lstat$2(entryRealPath); if (entryRealPathStats.isFile()) return "file"; if (entryRealPathStats.isDirectory()) { const len = entryRealPath.length; if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath$3.sep) { const recursiveError = /* @__PURE__ */ new Error(`Circular symlink detected: "${full}" points to "${entryRealPath}"`); recursiveError.code = RECURSIVE_ERROR_CODE; return this._onError(recursiveError); } return "directory"; } } catch (error$1) { this._onError(error$1); } } } _includeAsFile(entry) { const stats = entry && entry[this._statsProp]; return stats && this._wantsEverything && !stats.isDirectory(); } }; /** * @typedef {Object} ReaddirpArguments * @property {Function=} fileFilter * @property {Function=} directoryFilter * @property {String=} type * @property {Number=} depth * @property {String=} root * @property {Boolean=} lstat * @property {Boolean=} bigint */ /** * Main function which ends up calling readdirRec and reads all files and directories in given root recursively. * @param {String} root Root directory * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth */ const readdirp$1 = (root, options$1 = {}) => { let type = options$1.entryType || options$1.type; if (type === "both") type = FILE_DIR_TYPE; if (type) options$1.type = type; if (!root) throw new Error("readdirp: root argument is required. Usage: readdirp(root, options)"); else if (typeof root !== "string") throw new TypeError("readdirp: root argument must be a string. Usage: readdirp(root, options)"); else if (type && !ALL_TYPES.includes(type)) throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(", ")}`); options$1.root = root; return new ReaddirpStream(options$1); }; const readdirpPromise = (root, options$1 = {}) => { return new Promise((resolve$4, reject) => { const files = []; readdirp$1(root, options$1).on("data", (entry) => files.push(entry)).on("end", () => resolve$4(files)).on("error", (error$1) => reject(error$1)); }); }; readdirp$1.promise = readdirpPromise; readdirp$1.ReaddirpStream = ReaddirpStream; readdirp$1.default = readdirp$1; module.exports = readdirp$1; } }); //#endregion //#region ../../node_modules/.pnpm/normalize-path@3.0.0/node_modules/normalize-path/index.js var require_normalize_path = __commonJS({ "../../node_modules/.pnpm/normalize-path@3.0.0/node_modules/normalize-path/index.js"(exports, module) { /*! * normalize-path * * Copyright (c) 2014-2018, Jon Schlinkert. * Released under the MIT License. */ module.exports = function(path$13, stripTrailing) { if (typeof path$13 !== "string") throw new TypeError("expected path to be a string"); if (path$13 === "\\" || path$13 === "/") return "/"; var len = path$13.length; if (len <= 1) return path$13; var prefix$1 = ""; if (len > 4 && path$13[3] === "\\") { var ch = path$13[2]; if ((ch === "?" || ch === ".") && path$13.slice(0, 2) === "\\\\") { path$13 = path$13.slice(2); prefix$1 = "//"; } } var segs = path$13.split(/[/\\]+/); if (stripTrailing !== false && segs[segs.length - 1] === "") segs.pop(); return prefix$1 + segs.join("/"); }; } }); //#endregion //#region ../../node_modules/.pnpm/anymatch@3.1.3/node_modules/anymatch/index.js var require_anymatch = __commonJS({ "../../node_modules/.pnpm/anymatch@3.1.3/node_modules/anymatch/index.js"(exports, module) { Object.defineProperty(exports, "__esModule", { value: true }); const picomatch$1 = require("picomatch"); const normalizePath$2 = require_normalize_path(); /** * @typedef {(testString: string) => boolean} AnymatchFn * @typedef {string|RegExp|AnymatchFn} AnymatchPattern * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher */ const BANG$1 = "!"; const DEFAULT_OPTIONS = { returnIndex: false }; const arrify$1 = (item) => Array.isArray(item) ? item : [item]; /** * @param {AnymatchPattern} matcher * @param {object} options * @returns {AnymatchFn} */ const createPattern = (matcher, options$1) => { if (typeof matcher === "function") return matcher; if (typeof matcher === "string") { const glob$1 = picomatch$1(matcher, options$1); return (string) => matcher === string || glob$1(string); } if (matcher instanceof RegExp) return (string) => matcher.test(string); return (string) => false; }; /** * @param {Array} patterns * @param {Array} negPatterns * @param {String|Array} args * @param {Boolean} returnIndex * @returns {boolean|number} */ const matchPatterns = (patterns, negPatterns, args, returnIndex) => { const isList = Array.isArray(args); const _path = isList ? args[0] : args; if (!isList && typeof _path !== "string") throw new TypeError("anymatch: second argument must be a string: got " + Object.prototype.toString.call(_path)); const path$13 = normalizePath$2(_path, false); for (let index = 0; index < negPatterns.length; index++) { const nglob = negPatterns[index]; if (nglob(path$13)) return returnIndex ? -1 : false; } const applied = isList && [path$13].concat(args.slice(1)); for (let index = 0; index < patterns.length; index++) { const pattern = patterns[index]; if (isList ? pattern(...applied) : pattern(path$13)) return returnIndex ? index : true; } return returnIndex ? -1 : false; }; /** * @param {AnymatchMatcher} matchers * @param {Array|string} testString * @param {object} options * @returns {boolean|number|Function} */ const anymatch$1 = (matchers, testString, options$1 = DEFAULT_OPTIONS) => { if (matchers == null) throw new TypeError("anymatch: specify first argument"); const opts = typeof options$1 === "boolean" ? { returnIndex: options$1 } : options$1; const returnIndex = opts.returnIndex || false; const mtchers = arrify$1(matchers); const negatedGlobs = mtchers.filter((item) => typeof item === "string" && item.charAt(0) === BANG$1).map((item) => item.slice(1)).map((item) => picomatch$1(item, opts)); const patterns = mtchers.filter((item) => typeof item !== "string" || typeof item === "string" && item.charAt(0) !== BANG$1).map((matcher) => createPattern(matcher, opts)); if (testString == null) return (testString$1, ri = false) => { const returnIndex$1 = typeof ri === "boolean" ? ri : false; return matchPatterns(patterns, negatedGlobs, testString$1, returnIndex$1); }; return matchPatterns(patterns, negatedGlobs, testString, returnIndex); }; anymatch$1.default = anymatch$1; module.exports = anymatch$1; } }); //#endregion //#region ../../node_modules/.pnpm/is-extglob@2.1.1/node_modules/is-extglob/index.js var require_is_extglob = __commonJS({ "../../node_modules/.pnpm/is-extglob@2.1.1/node_modules/is-extglob/index.js"(exports, module) { /*! * is-extglob * * Copyright (c) 2014-2016, Jon Schlinkert. * Licensed under the MIT License. */ module.exports = function isExtglob$1(str) { if (typeof str !== "string" || str === "") return false; var match; while (match = /(\\).|([@?!+*]\(.*\))/g.exec(str)) { if (match[2]) return true; str = str.slice(match.index + match[0].length); } return false; }; } }); //#endregion //#region ../../node_modules/.pnpm/is-glob@4.0.3/node_modules/is-glob/index.js var require_is_glob = __commonJS({ "../../node_modules/.pnpm/is-glob@4.0.3/node_modules/is-glob/index.js"(exports, module) { /*! * is-glob * * Copyright (c) 2014-2017, Jon Schlinkert. * Released under the MIT License. */ var isExtglob = require_is_extglob(); var chars = { "{": "}", "(": ")", "[": "]" }; var strictCheck = function(str) { if (str[0] === "!") return true; var index = 0; var pipeIndex = -2; var closeSquareIndex = -2; var closeCurlyIndex = -2; var closeParenIndex = -2; var backSlashIndex = -2; while (index < str.length) { if (str[index] === "*") return true; if (str[index + 1] === "?" && /[\].+)]/.test(str[index])) return true; if (closeSquareIndex !== -1 && str[index] === "[" && str[index + 1] !== "]") { if (closeSquareIndex < index) closeSquareIndex = str.indexOf("]", index); if (closeSquareIndex > index) { if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) return true; backSlashIndex = str.indexOf("\\", index); if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) return true; } } if (closeCurlyIndex !== -1 && str[index] === "{" && str[index + 1] !== "}") { closeCurlyIndex = str.indexOf("}", index); if (closeCurlyIndex > index) { backSlashIndex = str.indexOf("\\", index); if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) return true; } } if (closeParenIndex !== -1 && str[index] === "(" && str[index + 1] === "?" && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ")") { closeParenIndex = str.indexOf(")", index); if (closeParenIndex > index) { backSlashIndex = str.indexOf("\\", index); if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) return true; } } if (pipeIndex !== -1 && str[index] === "(" && str[index + 1] !== "|") { if (pipeIndex < index) pipeIndex = str.indexOf("|", index); if (pipeIndex !== -1 && str[pipeIndex + 1] !== ")") { closeParenIndex = str.indexOf(")", pipeIndex); if (closeParenIndex > pipeIndex) { backSlashIndex = str.indexOf("\\", pipeIndex); if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) return true; } } } if (str[index] === "\\") { var open$2 = str[index + 1]; index += 2; var close$1 = chars[open$2]; if (close$1) { var n$2 = str.indexOf(close$1, index); if (n$2 !== -1) index = n$2 + 1; } if (str[index] === "!") return true; } else index++; } return false; }; var relaxedCheck = function(str) { if (str[0] === "!") return true; var index = 0; while (index < str.length) { if (/[*?{}()[\]]/.test(str[index])) return true; if (str[index] === "\\") { var open$2 = str[index + 1]; index += 2; var close$1 = chars[open$2]; if (close$1) { var n$2 = str.indexOf(close$1, index); if (n$2 !== -1) index = n$2 + 1; } if (str[index] === "!") return true; } else index++; } return false; }; module.exports = function isGlob$2(str, options$1) { if (typeof str !== "string" || str === "") return false; if (isExtglob(str)) return true; var check = strictCheck; if (options$1 && options$1.strict === false) check = relaxedCheck; return check(str); }; } }); //#endregion //#region ../../node_modules/.pnpm/glob-parent@5.1.2/node_modules/glob-parent/index.js var require_glob_parent = __commonJS({ "../../node_modules/.pnpm/glob-parent@5.1.2/node_modules/glob-parent/index.js"(exports, module) { var isGlob$1 = require_is_glob(); var pathPosixDirname = require("path").posix.dirname; var isWin32 = require("os").platform() === "win32"; var slash$1 = "/"; var backslash = /\\/g; var enclosure = /[\{\[].*[\}\]]$/; var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/; var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g; /** * @param {string} str * @param {Object} opts * @param {boolean} [opts.flipBackslashes=true] * @returns {string} */ module.exports = function globParent$1(str, opts) { var options$1 = Object.assign({ flipBackslashes: true }, opts); if (options$1.flipBackslashes && isWin32 && str.indexOf(slash$1) < 0) str = str.replace(backslash, slash$1); if (enclosure.test(str)) str += slash$1; str += "a"; do str = pathPosixDirname(str); while (isGlob$1(str) || globby.test(str)); return str.replace(escaped, "$1"); }; } }); //#endregion //#region ../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/utils.js var require_utils = __commonJS({ "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/utils.js"(exports) { exports.isInteger = (num) => { if (typeof num === "number") return Number.isInteger(num); if (typeof num === "string" && num.trim() !== "") return Number.isInteger(Number(num)); return false; }; /** * Find a node of the given type */ exports.find = (node, type) => node.nodes.find((node$1) => node$1.type === type); /** * Find a node of the given type */ exports.exceedsLimit = (min$1, max, step = 1, limit) => { if (limit === false) return false; if (!exports.isInteger(min$1) || !exports.isInteger(max)) return false; return (Number(max) - Number(min$1)) / Number(step) >= limit; }; /** * Escape the given node with '\\' before node.value */ exports.escapeNode = (block, n$2 = 0, type) => { const node = block.nodes[n$2]; if (!node) return; if (type && node.type === type || node.type === "open" || node.type === "close") { if (node.escaped !== true) { node.value = "\\" + node.value; node.escaped = true; } } }; /** * Returns true if the given brace node should be enclosed in literal braces */ exports.encloseBrace = (node) => { if (node.type !== "brace") return false; if (node.commas >> 0 + node.ranges >> 0 === 0) { node.invalid = true; return true; } return false; }; /** * Returns true if a brace node is invalid. */ exports.isInvalidBrace = (block) => { if (block.type !== "brace") return false; if (block.invalid === true || block.dollar) return true; if (block.commas >> 0 + block.ranges >> 0 === 0) { block.invalid = true; return true; } if (block.open !== true || block.close !== true) { block.invalid = true; return true; } return false; }; /** * Returns true if a node is an open or close node */ exports.isOpenOrClose = (node) => { if (node.type === "open" || node.type === "close") return true; return node.open === true || node.close === true; }; /** * Reduce an array of text nodes. */ exports.reduce = (nodes) => nodes.reduce((acc, node) => { if (node.type === "text") acc.push(node.value); if (node.type === "range") node.type = "text"; return acc; }, []); /** * Flatten an array */ exports.flatten = (...args) => { const result = []; const flat = (arr) => { for (let i$1 = 0; i$1 < arr.length; i$1++) { const ele = arr[i$1]; if (Array.isArray(ele)) { flat(ele); continue; } if (ele !== void 0) result.push(ele); } return result; }; flat(args); return result; }; } }); //#endregion //#region ../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/stringify.js var require_stringify = __commonJS({ "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/stringify.js"(exports, module) { const utils$2 = require_utils(); module.exports = (ast, options$1 = {}) => { const stringify$5 = (node, parent = {}) => { const invalidBlock = options$1.escapeInvalid && utils$2.isInvalidBrace(parent); const invalidNode = node.invalid === true && options$1.escapeInvalid === true; let output = ""; if (node.value) { if ((invalidBlock || invalidNode) && utils$2.isOpenOrClose(node)) return "\\" + node.value; return node.value; } if (node.value) return node.value; if (node.nodes) for (const child of node.nodes) output += stringify$5(child); return output; }; return stringify$5(ast); }; } }); //#endregion //#region ../../node_modules/.pnpm/is-number@7.0.0/node_modules/is-number/index.js var require_is_number = __commonJS({ "../../node_modules/.pnpm/is-number@7.0.0/node_modules/is-number/index.js"(exports, module) { module.exports = function(num) { if (typeof num === "number") return num - num === 0; if (typeof num === "string" && num.trim() !== "") return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); return false; }; } }); //#endregion //#region ../../node_modules/.pnpm/to-regex-range@5.0.1/node_modules/to-regex-range/index.js var require_to_regex_range = __commonJS({ "../../node_modules/.pnpm/to-regex-range@5.0.1/node_modules/to-regex-range/index.js"(exports, module) { const isNumber$1 = require_is_number(); const toRegexRange$1 = (min$1, max, options$1) => { if (isNumber$1(min$1) === false) throw new TypeError("toRegexRange: expected the first argument to be a number"); if (max === void 0 || min$1 === max) return String(min$1); if (isNumber$1(max) === false) throw new TypeError("toRegexRange: expected the second argument to be a number."); let opts = { relaxZeros: true, ...options$1 }; if (typeof opts.strictZeros === "boolean") opts.relaxZeros = opts.strictZeros === false; let relax = String(opts.relaxZeros); let shorthand = String(opts.shorthand); let capture = String(opts.capture); let wrap$1 = String(opts.wrap); let cacheKey = min$1 + ":" + max + "=" + relax + shorthand + capture + wrap$1; if (toRegexRange$1.cache.hasOwnProperty(cacheKey)) return toRegexRange$1.cache[cacheKey].result; let a = Math.min(min$1, max); let b = Math.max(min$1, max); if (Math.abs(a - b) === 1) { let result = min$1 + "|" + max; if (opts.capture) return `(${result})`; if (opts.wrap === false) return result; return `(?:${result})`; } let isPadded = hasPadding(min$1) || hasPadding(max); let state = { min: min$1, max, a, b }; let positives = []; let negatives = []; if (isPadded) { state.isPadded = isPadded; state.maxLen = String(state.max).length; } if (a < 0) { let newMin = b < 0 ? Math.abs(b) : 1; negatives = splitToPatterns(newMin, Math.abs(a), state, opts); a = state.a = 0; } if (b >= 0) positives = splitToPatterns(a, b, state, opts); state.negatives = negatives; state.positives = positives; state.result = collatePatterns(negatives, positives, opts); if (opts.capture === true) state.result = `(${state.result})`; else if (opts.wrap !== false && positives.length + negatives.length > 1) state.result = `(?:${state.result})`; toRegexRange$1.cache[cacheKey] = state; return state.result; }; function collatePatterns(neg, pos, options$1) { let onlyNegative = filterPatterns(neg, pos, "-", false, options$1) || []; let onlyPositive = filterPatterns(pos, neg, "", false, options$1) || []; let intersected = filterPatterns(neg, pos, "-?", true, options$1) || []; let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); return subpatterns.join("|"); } function splitToRanges(min$1, max) { let nines = 1; let zeros$1 = 1; let stop = countNines(min$1, nines); let stops = new Set([max]); while (min$1 <= stop && stop <= max) { stops.add(stop); nines += 1; stop = countNines(min$1, nines); } stop = countZeros(max + 1, zeros$1) - 1; while (min$1 < stop && stop <= max) { stops.add(stop); zeros$1 += 1; stop = countZeros(max + 1, zeros$1) - 1; } stops = [...stops]; stops.sort(compare); return stops; } /** * Convert a range to a regex pattern * @param {Number} `start` * @param {Number} `stop` * @return {String} */ function rangeToPattern(start, stop, options$1) { if (start === stop) return { pattern: start, count: [], digits: 0 }; let zipped = zip(start, stop); let digits = zipped.length; let pattern = ""; let count = 0; for (let i$1 = 0; i$1 < digits; i$1++) { let [startDigit, stopDigit] = zipped[i$1]; if (startDigit === stopDigit) pattern += startDigit; else if (startDigit !== "0" || stopDigit !== "9") pattern += toCharacterClass(startDigit, stopDigit, options$1); else count++; } if (count) pattern += options$1.shorthand === true ? "\\d" : "[0-9]"; return { pattern, count: [count], digits }; } function splitToPatterns(min$1, max, tok, options$1) { let ranges = splitToRanges(min$1, max); let tokens = []; let start = min$1; let prev; for (let i$1 = 0; i$1 < ranges.length; i$1++) { let max$1 = ranges[i$1]; let obj = rangeToPattern(String(start), String(max$1), options$1); let zeros$1 = ""; if (!tok.isPadded && prev && prev.pattern === obj.pattern) { if (prev.count.length > 1) prev.count.pop(); prev.count.push(obj.count[0]); prev.string = prev.pattern + toQuantifier(prev.count); start = max$1 + 1; continue; } if (tok.isPadded) zeros$1 = padZeros(max$1, tok, options$1); obj.string = zeros$1 + obj.pattern + toQuantifier(obj.count); tokens.push(obj); start = max$1 + 1; prev = obj; } return tokens; } function filterPatterns(arr, comparison, prefix$1, intersection, options$1) { let result = []; for (let ele of arr) { let { string } = ele; if (!intersection && !contains(comparison, "string", string)) result.push(prefix$1 + string); if (intersection && contains(comparison, "string", string)) result.push(prefix$1 + string); } return result; } /** * Zip strings */ function zip(a, b) { let arr = []; for (let i$1 = 0; i$1 < a.length; i$1++) arr.push([a[i$1], b[i$1]]); return arr; } function compare(a, b) { return a > b ? 1 : b > a ? -1 : 0; } function contains(arr, key, val) { return arr.some((ele) => ele[key] === val); } function countNines(min$1, len) { return Number(String(min$1).slice(0, -len) + "9".repeat(len)); } function countZeros(integer, zeros$1) { return integer - integer % Math.pow(10, zeros$1); } function toQuantifier(digits) { let [start = 0, stop = ""] = digits; if (stop || start > 1) return `{${start + (stop ? "," + stop : "")}}`; return ""; } function toCharacterClass(a, b, options$1) { return `[${a}${b - a === 1 ? "" : "-"}${b}]`; } function hasPadding(str) { return /^-?(0+)\d/.test(str); } function padZeros(value$1, tok, options$1) { if (!tok.isPadded) return value$1; let diff = Math.abs(tok.maxLen - String(value$1).length); let relax = options$1.relaxZeros !== false; switch (diff) { case 0: return ""; case 1: return relax ? "0?" : "0"; case 2: return relax ? "0{0,2}" : "00"; default: return relax ? `0{0,${diff}}` : `0{${diff}}`; } } /** * Cache */ toRegexRange$1.cache = {}; toRegexRange$1.clearCache = () => toRegexRange$1.cache = {}; /** * Expose `toRegexRange` */ module.exports = toRegexRange$1; } }); //#endregion //#region ../../node_modules/.pnpm/fill-range@7.1.1/node_modules/fill-range/index.js var require_fill_range = __commonJS({ "../../node_modules/.pnpm/fill-range@7.1.1/node_modules/fill-range/index.js"(exports, module) { const util$1 = require("util"); const toRegexRange = require_to_regex_range(); const isObject$1 = (val) => val !== null && typeof val === "object" && !Array.isArray(val); const transform$1 = (toNumber) => { return (value$1) => toNumber === true ? Number(value$1) : String(value$1); }; const isValidValue = (value$1) => { return typeof value$1 === "number" || typeof value$1 === "string" && value$1 !== ""; }; const isNumber = (num) => Number.isInteger(+num); const zeros = (input) => { let value$1 = `${input}`; let index = -1; if (value$1[0] === "-") value$1 = value$1.slice(1); if (value$1 === "0") return false; while (value$1[++index] === "0"); return index > 0; }; const stringify$3 = (start, end, options$1) => { if (typeof start === "string" || typeof end === "string") return true; return options$1.stringify === true; }; const pad = (input, maxLength, toNumber) => { if (maxLength > 0) { let dash = input[0] === "-" ? "-" : ""; if (dash) input = input.slice(1); input = dash + input.padStart(dash ? maxLength - 1 : maxLength, "0"); } if (toNumber === false) return String(input); return input; }; const toMaxLen = (input, maxLength) => { let negative = input[0] === "-" ? "-" : ""; if (negative) { input = input.slice(1); maxLength--; } while (input.length < maxLength) input = "0" + input; return negative ? "-" + input : input; }; const toSequence = (parts, options$1, maxLen) => { parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); let prefix$1 = options$1.capture ? "" : "?:"; let positives = ""; let negatives = ""; let result; if (parts.positives.length) positives = parts.positives.map((v) => toMaxLen(String(v), maxLen)).join("|"); if (parts.negatives.length) negatives = `-(${prefix$1}${parts.negatives.map((v) => toMaxLen(String(v), maxLen)).join("|")})`; if (positives && negatives) result = `${positives}|${negatives}`; else result = positives || negatives; if (options$1.wrap) return `(${prefix$1}${result})`; return result; }; const toRange = (a, b, isNumbers, options$1) => { if (isNumbers) return toRegexRange(a, b, { wrap: false, ...options$1 }); let start = String.fromCharCode(a); if (a === b) return start; let stop = String.fromCharCode(b); return `[${start}-${stop}]`; }; const toRegex = (start, end, options$1) => { if (Array.isArray(start)) { let wrap$1 = options$1.wrap === true; let prefix$1 = options$1.capture ? "" : "?:"; return wrap$1 ? `(${prefix$1}${start.join("|")})` : start.join("|"); } return toRegexRange(start, end, options$1); }; const rangeError = (...args) => { return /* @__PURE__ */ new RangeError("Invalid range arguments: " + util$1.inspect(...args)); }; const invalidRange = (start, end, options$1) => { if (options$1.strictRanges === true) throw rangeError([start, end]); return []; }; const invalidStep = (step, options$1) => { if (options$1.strictRanges === true) throw new TypeError(`Expected step "${step}" to be a number`); return []; }; const fillNumbers = (start, end, step = 1, options$1 = {}) => { let a = Number(start); let b = Number(end); if (!Number.isInteger(a) || !Number.isInteger(b)) { if (options$1.strictRanges === true) throw rangeError([start, end]); return []; } if (a === 0) a = 0; if (b === 0) b = 0; let descending = a > b; let startString = String(start); let endString = String(end); let stepString = String(step); step = Math.max(Math.abs(step), 1); let padded = zeros(startString) || zeros(endString) || zeros(stepString); let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0; let toNumber = padded === false && stringify$3(start, end, options$1) === false; let format$3 = options$1.transform || transform$1(toNumber); if (options$1.toRegex && step === 1) return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options$1); let parts = { negatives: [], positives: [] }; let push$1 = (num) => parts[num < 0 ? "negatives" : "positives"].push(Math.abs(num)); let range$1 = []; let index = 0; while (descending ? a >= b : a <= b) { if (options$1.toRegex === true && step > 1) push$1(a); else range$1.push(pad(format$3(a, index), maxLen, toNumber)); a = descending ? a - step : a + step; index++; } if (options$1.toRegex === true) return step > 1 ? toSequence(parts, options$1, maxLen) : toRegex(range$1, null, { wrap: false, ...options$1 }); return range$1; }; const fillLetters = (start, end, step = 1, options$1 = {}) => { if (!isNumber(start) && start.length > 1 || !isNumber(end) && end.length > 1) return invalidRange(start, end, options$1); let format$3 = options$1.transform || ((val) => String.fromCharCode(val)); let a = `${start}`.charCodeAt(0); let b = `${end}`.charCodeAt(0); let descending = a > b; let min$1 = Math.min(a, b); let max = Math.max(a, b); if (options$1.toRegex && step === 1) return toRange(min$1, max, false, options$1); let range$1 = []; let index = 0; while (descending ? a >= b : a <= b) { range$1.push(format$3(a, index)); a = descending ? a - step : a + step; index++; } if (options$1.toRegex === true) return toRegex(range$1, null, { wrap: false, options: options$1 }); return range$1; }; const fill$2 = (start, end, step, options$1 = {}) => { if (end == null && isValidValue(start)) return [start]; if (!isValidValue(start) || !isValidValue(end)) return invalidRange(start, end, options$1); if (typeof step === "function") return fill$2(start, end, 1, { transform: step }); if (isObject$1(step)) return fill$2(start, end, 0, step); let opts = { ...options$1 }; if (opts.capture === true) opts.wrap = true; step = step || opts.step || 1; if (!isNumber(step)) { if (step != null && !isObject$1(step)) return invalidStep(step, opts); return fill$2(start, end, 1, step); } if (isNumber(start) && isNumber(end)) return fillNumbers(start, end, step, opts); return fillLetters(start, end, Math.max(Math.abs(step), 1), opts); }; module.exports = fill$2; } }); //#endregion //#region ../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/compile.js var require_compile = __commonJS({ "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/compile.js"(exports, module) { const fill$1 = require_fill_range(); const utils$1 = require_utils(); const compile$1 = (ast, options$1 = {}) => { const walk$3 = (node, parent = {}) => { const invalidBlock = utils$1.isInvalidBrace(parent); const invalidNode = node.invalid === true && options$1.escapeInvalid === true; const invalid = invalidBlock === true || invalidNode === true; const prefix$1 = options$1.escapeInvalid === true ? "\\" : ""; let output = ""; if (node.isOpen === true) return prefix$1 + node.value; if (node.isClose === true) { console.log("node.isClose", prefix$1, node.value); return prefix$1 + node.value; } if (node.type === "open") return invalid ? prefix$1 + node.value : "("; if (node.type === "close") return invalid ? prefix$1 + node.value : ")"; if (node.type === "comma") return node.prev.type === "comma" ? "" : invalid ? node.value : "|"; if (node.value) return node.value; if (node.nodes && node.ranges > 0) { const args = utils$1.reduce(node.nodes); const range$1 = fill$1(...args, { ...options$1, wrap: false, toRegex: true, strictZeros: true }); if (range$1.length !== 0) return args.length > 1 && range$1.length > 1 ? `(${range$1})` : range$1; } if (node.nodes) for (const child of node.nodes) output += walk$3(child, node); return output; }; return walk$3(ast); }; module.exports = compile$1; } }); //#endregion //#region ../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/expand.js var require_expand = __commonJS({ "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/expand.js"(exports, module) { const fill = require_fill_range(); const stringify$2 = require_stringify(); const utils = require_utils(); const append = (queue = "", stash = "", enclose = false) => { const result = []; queue = [].concat(queue); stash = [].concat(stash); if (!stash.length) return queue; if (!queue.length) return enclose ? utils.flatten(stash).map((ele) => `{${ele}}`) : stash; for (const item of queue) if (Array.isArray(item)) for (const value$1 of item) result.push(append(value$1, stash, enclose)); else for (let ele of stash) { if (enclose === true && typeof ele === "string") ele = `{${ele}}`; result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele); } return utils.flatten(result); }; const expand$1 = (ast, options$1 = {}) => { const rangeLimit = options$1.rangeLimit === void 0 ? 1e3 : options$1.rangeLimit; const walk$3 = (node, parent = {}) => { node.queue = []; let p$1 = parent; let q = parent.queue; while (p$1.type !== "brace" && p$1.type !== "root" && p$1.parent) { p$1 = p$1.parent; q = p$1.queue; } if (node.invalid || node.dollar) { q.push(append(q.pop(), stringify$2(node, options$1))); return; } if (node.type === "brace" && node.invalid !== true && node.nodes.length === 2) { q.push(append(q.pop(), ["{}"])); return; } if (node.nodes && node.ranges > 0) { const args = utils.reduce(node.nodes); if (utils.exceedsLimit(...args, options$1.step, rangeLimit)) throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit."); let range$1 = fill(...args, options$1); if (range$1.length === 0) range$1 = stringify$2(node, options$1); q.push(append(q.pop(), range$1)); node.nodes = []; return; } const enclose = utils.encloseBrace(node); let queue = node.queue; let block = node; while (block.type !== "brace" && block.type !== "root" && block.parent) { block = block.parent; queue = block.queue; } for (let i$1 = 0; i$1 < node.nodes.length; i$1++) { const child = node.nodes[i$1]; if (child.type === "comma" && node.type === "brace") { if (i$1 === 1) queue.push(""); queue.push(""); continue; } if (child.type === "close") { q.push(append(q.pop(), queue, enclose)); continue; } if (child.value && child.type !== "open") { queue.push(append(queue.pop(), child.value)); continue; } if (child.nodes) walk$3(child, node); } return queue; }; return utils.flatten(walk$3(ast)); }; module.exports = expand$1; } }); //#endregion //#region ../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/constants.js var require_constants$3 = __commonJS({ "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/constants.js"(exports, module) { module.exports = { MAX_LENGTH: 1e4, CHAR_0: "0", CHAR_9: "9", CHAR_UPPERCASE_A: "A", CHAR_LOWERCASE_A: "a", CHAR_UPPERCASE_Z: "Z", CHAR_LOWERCASE_Z: "z", CHAR_LEFT_PARENTHESES: "(", CHAR_RIGHT_PARENTHESES: ")", CHAR_ASTERISK: "*", CHAR_AMPERSAND: "&", CHAR_AT: "@", CHAR_BACKSLASH: "\\", CHAR_BACKTICK: "`", CHAR_CARRIAGE_RETURN: "\r", CHAR_CIRCUMFLEX_ACCENT: "^", CHAR_COLON: ":", CHAR_COMMA: ",", CHAR_DOLLAR: "$", CHAR_DOT: ".", CHAR_DOUBLE_QUOTE: "\"", CHAR_EQUAL: "=", CHAR_EXCLAMATION_MARK: "!", CHAR_FORM_FEED: "\f", CHAR_FORWARD_SLASH: "/", CHAR_HASH: "#", CHAR_HYPHEN_MINUS: "-", CHAR_LEFT_ANGLE_BRACKET: "<", CHAR_LEFT_CURLY_BRACE: "{", CHAR_LEFT_SQUARE_BRACKET: "[", CHAR_LINE_FEED: "\n", CHAR_NO_BREAK_SPACE: "\xA0", CHAR_PERCENT: "%", CHAR_PLUS: "+", CHAR_QUESTION_MARK: "?", CHAR_RIGHT_ANGLE_BRACKET: ">", CHAR_RIGHT_CURLY_BRACE: "}", CHAR_RIGHT_SQUARE_BRACKET: "]", CHAR_SEMICOLON: ";", CHAR_SINGLE_QUOTE: "'", CHAR_SPACE: " ", CHAR_TAB: " ", CHAR_UNDERSCORE: "_", CHAR_VERTICAL_LINE: "|", CHAR_ZERO_WIDTH_NOBREAK_SPACE: "" }; } }); //#endregion //#region ../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/parse.js var require_parse$2 = __commonJS({ "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/parse.js"(exports, module) { const stringify$1 = require_stringify(); /** * Constants */ const { MAX_LENGTH, CHAR_BACKSLASH, CHAR_BACKTICK, CHAR_COMMA, CHAR_DOT, CHAR_LEFT_PARENTHESES, CHAR_RIGHT_PARENTHESES, CHAR_LEFT_CURLY_BRACE, CHAR_RIGHT_CURLY_BRACE, CHAR_LEFT_SQUARE_BRACKET, CHAR_RIGHT_SQUARE_BRACKET, CHAR_DOUBLE_QUOTE, CHAR_SINGLE_QUOTE, CHAR_NO_BREAK_SPACE, CHAR_ZERO_WIDTH_NOBREAK_SPACE } = require_constants$3(); /** * parse */ const parse$8 = (input, options$1 = {}) => { if (typeof input !== "string") throw new TypeError("Expected a string"); const opts = options$1 || {}; const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; if (input.length > max) throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); const ast = { type: "root", input, nodes: [] }; const stack = [ast]; let block = ast; let prev = ast; let brackets = 0; const length = input.length; let index = 0; let depth = 0; let value$1; /** * Helpers */ const advance = () => input[index++]; const push$1 = (node) => { if (node.type === "text" && prev.type === "dot") prev.type = "text"; if (prev && prev.type === "text" && node.type === "text") { prev.value += node.value; return; } block.nodes.push(node); node.parent = block; node.prev = prev; prev = node; return node; }; push$1({ type: "bos" }); while (index < length) { block = stack[stack.length - 1]; value$1 = advance(); /** * Invalid chars */ if (value$1 === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value$1 === CHAR_NO_BREAK_SPACE) continue; /** * Escaped chars */ if (value$1 === CHAR_BACKSLASH) { push$1({ type: "text", value: (options$1.keepEscaping ? value$1 : "") + advance() }); continue; } /** * Right square bracket (literal): ']' */ if (value$1 === CHAR_RIGHT_SQUARE_BRACKET) { push$1({ type: "text", value: "\\" + value$1 }); continue; } /** * Left square bracket: '[' */ if (value$1 === CHAR_LEFT_SQUARE_BRACKET) { brackets++; let next; while (index < length && (next = advance())) { value$1 += next; if (next === CHAR_LEFT_SQUARE_BRACKET) { brackets++; continue; } if (next === CHAR_BACKSLASH) { value$1 += advance(); continue; } if (next === CHAR_RIGHT_SQUARE_BRACKET) { brackets--; if (brackets === 0) break; } } push$1({ type: "text", value: value$1 }); continue; } /** * Parentheses */ if (value$1 === CHAR_LEFT_PARENTHESES) { block = push$1({ type: "paren", nodes: [] }); stack.push(block); push$1({ type: "text", value: value$1 }); continue; } if (value$1 === CHAR_RIGHT_PARENTHESES) { if (block.type !== "paren") { push$1({ type: "text", value: value$1 }); continue; } block = stack.pop(); push$1({ type: "text", value: value$1 }); block = stack[stack.length - 1]; continue; } /** * Quotes: '|"|` */ if (value$1 === CHAR_DOUBLE_QUOTE || value$1 === CHAR_SINGLE_QUOTE || value$1 === CHAR_BACKTICK) { const open$2 = value$1; let next; if (options$1.keepQuotes !== true) value$1 = ""; while (index < length && (next = advance())) { if (next === CHAR_BACKSLASH) { value$1 += next + advance(); continue; } if (next === open$2) { if (options$1.keepQuotes === true) value$1 += next; break; } value$1 += next; } push$1({ type: "text", value: value$1 }); continue; } /** * Left curly brace: '{' */ if (value$1 === CHAR_LEFT_CURLY_BRACE) { depth++; const dollar = prev.value && prev.value.slice(-1) === "$" || block.dollar === true; const brace = { type: "brace", open: true, close: false, dollar, depth, commas: 0, ranges: 0, nodes: [] }; block = push$1(brace); stack.push(block); push$1({ type: "open", value: value$1 }); continue; } /** * Right curly brace: '}' */ if (value$1 === CHAR_RIGHT_CURLY_BRACE) { if (block.type !== "brace") { push$1({ type: "text", value: value$1 }); continue; } const type = "close"; block = stack.pop(); block.close = true; push$1({ type, value: value$1 }); depth--; block = stack[stack.length - 1]; continue; } /** * Comma: ',' */ if (value$1 === CHAR_COMMA && depth > 0) { if (block.ranges > 0) { block.ranges = 0; const open$2 = block.nodes.shift(); block.nodes = [open$2, { type: "text", value: stringify$1(block) }]; } push$1({ type: "comma", value: value$1 }); block.commas++; continue; } /** * Dot: '.' */ if (value$1 === CHAR_DOT && depth > 0 && block.commas === 0) { const siblings = block.nodes; if (depth === 0 || siblings.length === 0) { push$1({ type: "text", value: value$1 }); continue; } if (prev.type === "dot") { block.range = []; prev.value += value$1; prev.type = "range"; if (block.nodes.length !== 3 && block.nodes.length !== 5) { block.invalid = true; block.ranges = 0; prev.type = "text"; continue; } block.ranges++; block.args = []; continue; } if (prev.type === "range") { siblings.pop(); const before = siblings[siblings.length - 1]; before.value += prev.value + value$1; prev = before; block.ranges--; continue; } push$1({ type: "dot", value: value$1 }); continue; } /** * Text */ push$1({ type: "text", value: value$1 }); } do { block = stack.pop(); if (block.type !== "root") { block.nodes.forEach((node) => { if (!node.nodes) { if (node.type === "open") node.isOpen = true; if (node.type === "close") node.isClose = true; if (!node.nodes) node.type = "text"; node.invalid = true; } }); const parent = stack[stack.length - 1]; const index$1 = parent.nodes.indexOf(block); parent.nodes.splice(index$1, 1, ...block.nodes); } } while (stack.length > 0); push$1({ type: "eos" }); return ast; }; module.exports = parse$8; } }); //#endregion //#region ../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/index.js var require_braces = __commonJS({ "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/index.js"(exports, module) { const stringify = require_stringify(); const compile = require_compile(); const expand = require_expand(); const parse$7 = require_parse$2(); /** * Expand the given pattern or create a regex-compatible string. * * ```js * const braces = require('braces'); * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)'] * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c'] * ``` * @param {String} `str` * @param {Object} `options` * @return {String} * @api public */ const braces$1 = (input, options$1 = {}) => { let output = []; if (Array.isArray(input)) for (const pattern of input) { const result = braces$1.create(pattern, options$1); if (Array.isArray(result)) output.push(...result); else output.push(result); } else output = [].concat(braces$1.create(input, options$1)); if (options$1 && options$1.expand === true && options$1.nodupes === true) output = [...new Set(output)]; return output; }; /** * Parse the given `str` with the given `options`. * * ```js * // braces.parse(pattern, [, options]); * const ast = braces.parse('a/{b,c}/d'); * console.log(ast); * ``` * @param {String} pattern Brace pattern to parse * @param {Object} options * @return {Object} Returns an AST * @api public */ braces$1.parse = (input, options$1 = {}) => parse$7(input, options$1); /** * Creates a braces string from an AST, or an AST node. * * ```js * const braces = require('braces'); * let ast = braces.parse('foo/{a,b}/bar'); * console.log(stringify(ast.nodes[2])); //=> '{a,b}' * ``` * @param {String} `input` Brace pattern or AST. * @param {Object} `options` * @return {Array} Returns an array of expanded values. * @api public */ braces$1.stringify = (input, options$1 = {}) => { if (typeof input === "string") return stringify(braces$1.parse(input, options$1), options$1); return stringify(input, options$1); }; /** * Compiles a brace pattern into a regex-compatible, optimized string. * This method is called by the main [braces](#braces) function by default. * * ```js * const braces = require('braces'); * console.log(braces.compile('a/{b,c}/d')); * //=> ['a/(b|c)/d'] * ``` * @param {String} `input` Brace pattern or AST. * @param {Object} `options` * @return {Array} Returns an array of expanded values. * @api public */ braces$1.compile = (input, options$1 = {}) => { if (typeof input === "string") input = braces$1.parse(input, options$1); return compile(input, options$1); }; /** * Expands a brace pattern into an array. This method is called by the * main [braces](#braces) function when `options.expand` is true. Before * using this method it's recommended that you read the [performance notes](#performance)) * and advantages of using [.compile](#compile) instead. * * ```js * const braces = require('braces'); * console.log(braces.expand('a/{b,c}/d')); * //=> ['a/b/d', 'a/c/d']; * ``` * @param {String} `pattern` Brace pattern * @param {Object} `options` * @return {Array} Returns an array of expanded values. * @api public */ braces$1.expand = (input, options$1 = {}) => { if (typeof input === "string") input = braces$1.parse(input, options$1); let result = expand(input, options$1); if (options$1.noempty === true) result = result.filter(Boolean); if (options$1.nodupes === true) result = [...new Set(result)]; return result; }; /** * Processes a brace pattern and returns either an expanded array * (if `options.expand` is true), a highly optimized regex-compatible string. * This method is called by the main [braces](#braces) function. * * ```js * const braces = require('braces'); * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' * ``` * @param {String} `pattern` Brace pattern * @param {Object} `options` * @return {Array} Returns an array of expanded values. * @api public */ braces$1.create = (input, options$1 = {}) => { if (input === "" || input.length < 3) return [input]; return options$1.expand !== true ? braces$1.compile(input, options$1) : braces$1.expand(input, options$1); }; /** * Expose "braces" */ module.exports = braces$1; } }); //#endregion //#region ../../node_modules/.pnpm/binary-extensions@2.3.0/node_modules/binary-extensions/binary-extensions.json var require_binary_extensions$1 = __commonJS({ "../../node_modules/.pnpm/binary-extensions@2.3.0/node_modules/binary-extensions/binary-extensions.json"(exports, module) { module.exports = [ "3dm", "3ds", "3g2", "3gp", "7z", "a", "aac", "adp", "afdesign", "afphoto", "afpub", "ai", "aif", "aiff", "alz", "ape", "apk", "appimage", "ar", "arj", "asf", "au", "avi", "bak", "baml", "bh", "bin", "bk", "bmp", "btif", "bz2", "bzip2", "cab", "caf", "cgm", "class", "cmx", "cpio", "cr2", "cur", "dat", "dcm", "deb", "dex", "djvu", "dll", "dmg", "dng", "doc", "docm", "docx", "dot", "dotm", "dra", "DS_Store", "dsk", "dts", "dtshd", "dvb", "dwg", "dxf", "ecelp4800", "ecelp7470", "ecelp9600", "egg", "eol", "eot", "epub", "exe", "f4v", "fbs", "fh", "fla", "flac", "flatpak", "fli", "flv", "fpx", "fst", "fvt", "g3", "gh", "gif", "graffle", "gz", "gzip", "h261", "h263", "h264", "icns", "ico", "ief", "img", "ipa", "iso", "jar", "jpeg", "jpg", "jpgv", "jpm", "jxr", "key", "ktx", "lha", "lib", "lvp", "lz", "lzh", "lzma", "lzo", "m3u", "m4a", "m4v", "mar", "mdi", "mht", "mid", "midi", "mj2", "mka", "mkv", "mmr", "mng", "mobi", "mov", "movie", "mp3", "mp4", "mp4a", "mpeg", "mpg", "mpga", "mxu", "nef", "npx", "numbers", "nupkg", "o", "odp", "ods", "odt", "oga", "ogg", "ogv", "otf", "ott", "pages", "pbm", "pcx", "pdb", "pdf", "pea", "pgm", "pic", "png", "pnm", "pot", "potm", "potx", "ppa", "ppam", "ppm", "pps", "ppsm", "ppsx", "ppt", "pptm", "pptx", "psd", "pya", "pyc", "pyo", "pyv", "qt", "rar", "ras", "raw", "resources", "rgb", "rip", "rlc", "rmf", "rmvb", "rpm", "rtf", "rz", "s3m", "s7z", "scpt", "sgi", "shar", "snap", "sil", "sketch", "slk", "smv", "snk", "so", "stl", "suo", "sub", "swf", "tar", "tbz", "tbz2", "tga", "tgz", "thmx", "tif", "tiff", "tlz", "ttc", "ttf", "txz", "udf", "uvh", "uvi", "uvm", "uvp", "uvs", "uvu", "viv", "vob", "war", "wav", "wax", "wbmp", "wdp", "weba", "webm", "webp", "whl", "wim", "wm", "wma", "wmv", "wmx", "woff", "woff2", "wrm", "wvx", "xbm", "xif", "xla", "xlam", "xls", "xlsb", "xlsm", "xlsx", "xlt", "xltm", "xltx", "xm", "xmind", "xpi", "xpm", "xwd", "xz", "z", "zip", "zipx" ]; } }); //#endregion //#region ../../node_modules/.pnpm/binary-extensions@2.3.0/node_modules/binary-extensions/index.js var require_binary_extensions = __commonJS({ "../../node_modules/.pnpm/binary-extensions@2.3.0/node_modules/binary-extensions/index.js"(exports, module) { module.exports = require_binary_extensions$1(); } }); //#endregion //#region ../../node_modules/.pnpm/is-binary-path@2.1.0/node_modules/is-binary-path/index.js var require_is_binary_path = __commonJS({ "../../node_modules/.pnpm/is-binary-path@2.1.0/node_modules/is-binary-path/index.js"(exports, module) { const path$9 = require("path"); const binaryExtensions = require_binary_extensions(); const extensions = new Set(binaryExtensions); module.exports = (filePath) => extensions.has(path$9.extname(filePath).slice(1).toLowerCase()); } }); //#endregion //#region ../../node_modules/.pnpm/chokidar@3.6.0_patch_hash=8a4f9e2b397e6034b91a0508faae3cecb97f222313faa129d7cb0eb71e9d0e84/node_modules/chokidar/lib/constants.js var require_constants$2 = __commonJS({ "../../node_modules/.pnpm/chokidar@3.6.0_patch_hash=8a4f9e2b397e6034b91a0508faae3cecb97f222313faa129d7cb0eb71e9d0e84/node_modules/chokidar/lib/constants.js"(exports) { const { sep: sep$1 } = require("path"); const { platform: platform$1 } = process; const os$2 = require("os"); exports.EV_ALL = "all"; exports.EV_READY = "ready"; exports.EV_ADD = "add"; exports.EV_CHANGE = "change"; exports.EV_ADD_DIR = "addDir"; exports.EV_UNLINK = "unlink"; exports.EV_UNLINK_DIR = "unlinkDir"; exports.EV_RAW = "raw"; exports.EV_ERROR = "error"; exports.STR_DATA = "data"; exports.STR_END = "end"; exports.STR_CLOSE = "close"; exports.FSEVENT_CREATED = "created"; exports.FSEVENT_MODIFIED = "modified"; exports.FSEVENT_DELETED = "deleted"; exports.FSEVENT_MOVED = "moved"; exports.FSEVENT_CLONED = "cloned"; exports.FSEVENT_UNKNOWN = "unknown"; exports.FSEVENT_FLAG_MUST_SCAN_SUBDIRS = 1; exports.FSEVENT_TYPE_FILE = "file"; exports.FSEVENT_TYPE_DIRECTORY = "directory"; exports.FSEVENT_TYPE_SYMLINK = "symlink"; exports.KEY_LISTENERS = "listeners"; exports.KEY_ERR = "errHandlers"; exports.KEY_RAW = "rawEmitters"; exports.HANDLER_KEYS = [ exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW ]; exports.DOT_SLASH = `.${sep$1}`; exports.BACK_SLASH_RE = /\\/g; exports.DOUBLE_SLASH_RE = /\/\//; exports.SLASH_OR_BACK_SLASH_RE = /[/\\]/; exports.DOT_RE = /\..*\.(sw[px])$|~$|\.subl.*\.tmp/; exports.REPLACER_RE = /^\.[/\\]/; exports.SLASH = "/"; exports.SLASH_SLASH = "//"; exports.BRACE_START = "{"; exports.BANG = "!"; exports.ONE_DOT = "."; exports.TWO_DOTS = ".."; exports.STAR = "*"; exports.GLOBSTAR = "**"; exports.ROOT_GLOBSTAR = "/**/*"; exports.SLASH_GLOBSTAR = "/**"; exports.DIR_SUFFIX = "Dir"; exports.ANYMATCH_OPTS = { dot: true }; exports.STRING_TYPE = "string"; exports.FUNCTION_TYPE = "function"; exports.EMPTY_STR = ""; exports.EMPTY_FN = () => {}; exports.IDENTITY_FN = (val) => val; exports.isWindows = platform$1 === "win32"; exports.isMacos = platform$1 === "darwin"; exports.isLinux = platform$1 === "linux"; exports.isIBMi = os$2.type() === "OS400"; } }); //#endregion //#region ../../node_modules/.pnpm/chokidar@3.6.0_patch_hash=8a4f9e2b397e6034b91a0508faae3cecb97f222313faa129d7cb0eb71e9d0e84/node_modules/chokidar/lib/nodefs-handler.js var require_nodefs_handler = __commonJS({ "../../node_modules/.pnpm/chokidar@3.6.0_patch_hash=8a4f9e2b397e6034b91a0508faae3cecb97f222313faa129d7cb0eb71e9d0e84/node_modules/chokidar/lib/nodefs-handler.js"(exports, module) { const fs$9 = require("fs"); const sysPath$2 = require("path"); const { promisify: promisify$3 } = require("util"); const isBinaryPath = require_is_binary_path(); const { isWindows: isWindows$3, isLinux, EMPTY_FN: EMPTY_FN$2, EMPTY_STR: EMPTY_STR$1, KEY_LISTENERS, KEY_ERR, KEY_RAW, HANDLER_KEYS, EV_CHANGE: EV_CHANGE$2, EV_ADD: EV_ADD$2, EV_ADD_DIR: EV_ADD_DIR$2, EV_ERROR: EV_ERROR$2, STR_DATA: STR_DATA$1, STR_END: STR_END$2, BRACE_START: BRACE_START$1, STAR } = require_constants$2(); const THROTTLE_MODE_WATCH = "watch"; const open$1 = promisify$3(fs$9.open); const stat$2 = promisify$3(fs$9.stat); const lstat$1 = promisify$3(fs$9.lstat); const close = promisify$3(fs$9.close); const fsrealpath = promisify$3(fs$9.realpath); const statMethods$1 = { lstat: lstat$1, stat: stat$2 }; const foreach = (val, fn) => { if (val instanceof Set) val.forEach(fn); else fn(val); }; const addAndConvert = (main, prop, item) => { let container = main[prop]; if (!(container instanceof Set)) main[prop] = container = new Set([container]); container.add(item); }; const clearItem = (cont) => (key) => { const set = cont[key]; if (set instanceof Set) set.clear(); else delete cont[key]; }; const delFromSet = (main, prop, item) => { const container = main[prop]; if (container instanceof Set) container.delete(item); else if (container === item) delete main[prop]; }; const isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val; /** * @typedef {String} Path */ /** * @typedef {Object} FsWatchContainer * @property {Set} listeners * @property {Set} errHandlers * @property {Set} rawEmitters * @property {fs.FSWatcher=} watcher * @property {Boolean=} watcherUnusable */ /** * @type {Map} */ const FsWatchInstances = /* @__PURE__ */ new Map(); /** * Instantiates the fs_watch interface * @param {String} path to be watched * @param {Object} options to be passed to fs_watch * @param {Function} listener main event handler * @param {Function} errHandler emits info about errors * @param {Function} emitRaw emits raw event data * @returns {fs.FSWatcher} new fsevents instance */ function createFsWatchInstance(path$13, options$1, listener$1, errHandler, emitRaw) { const handleEvent = (rawEvent, evPath) => { listener$1(path$13); emitRaw(rawEvent, evPath, { watchedPath: path$13 }); if (evPath && path$13 !== evPath) fsWatchBroadcast(sysPath$2.resolve(path$13, evPath), KEY_LISTENERS, sysPath$2.join(path$13, evPath)); }; try { return fs$9.watch(path$13, options$1, handleEvent); } catch (error$1) { errHandler(error$1); } } /** * Helper for passing fs_watch event data to a collection of listeners * @param {Path} fullPath absolute path bound to fs_watch instance * @param {String} type listener type * @param {*=} val1 arguments to be passed to listeners * @param {*=} val2 * @param {*=} val3 */ const fsWatchBroadcast = (fullPath, type, val1, val2, val3) => { const cont = FsWatchInstances.get(fullPath); if (!cont) return; foreach(cont[type], (listener$1) => { listener$1(val1, val2, val3); }); }; /** * Instantiates the fs_watch interface or binds listeners * to an existing one covering the same file system entry * @param {String} path * @param {String} fullPath absolute path * @param {Object} options to be passed to fs_watch * @param {Object} handlers container for event listener functions */ const setFsWatchListener = (path$13, fullPath, options$1, handlers) => { const { listener: listener$1, errHandler, rawEmitter } = handlers; let cont = FsWatchInstances.get(fullPath); /** @type {fs.FSWatcher=} */ let watcher; if (!options$1.persistent) { watcher = createFsWatchInstance(path$13, options$1, listener$1, errHandler, rawEmitter); return watcher.close.bind(watcher); } if (cont) { addAndConvert(cont, KEY_LISTENERS, listener$1); addAndConvert(cont, KEY_ERR, errHandler); addAndConvert(cont, KEY_RAW, rawEmitter); } else { watcher = createFsWatchInstance(path$13, options$1, fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS), errHandler, fsWatchBroadcast.bind(null, fullPath, KEY_RAW)); if (!watcher) return; watcher.on(EV_ERROR$2, async (error$1) => { const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR); cont.watcherUnusable = true; if (isWindows$3 && error$1.code === "EPERM") try { const fd$1 = await open$1(path$13, "r"); await close(fd$1); broadcastErr(error$1); } catch (err$2) {} else broadcastErr(error$1); }); cont = { listeners: listener$1, errHandlers: errHandler, rawEmitters: rawEmitter, watcher }; FsWatchInstances.set(fullPath, cont); } return () => { delFromSet(cont, KEY_LISTENERS, listener$1); delFromSet(cont, KEY_ERR, errHandler); delFromSet(cont, KEY_RAW, rawEmitter); if (isEmptySet(cont.listeners)) { cont.watcher.close(); FsWatchInstances.delete(fullPath); HANDLER_KEYS.forEach(clearItem(cont)); cont.watcher = void 0; Object.freeze(cont); } }; }; const FsWatchFileInstances = /* @__PURE__ */ new Map(); /** * Instantiates the fs_watchFile interface or binds listeners * to an existing one covering the same file system entry * @param {String} path to be watched * @param {String} fullPath absolute path * @param {Object} options options to be passed to fs_watchFile * @param {Object} handlers container for event listener functions * @returns {Function} closer */ const setFsWatchFileListener = (path$13, fullPath, options$1, handlers) => { const { listener: listener$1, rawEmitter } = handlers; let cont = FsWatchFileInstances.get(fullPath); let listeners = /* @__PURE__ */ new Set(); let rawEmitters = /* @__PURE__ */ new Set(); const copts = cont && cont.options; if (copts && (copts.persistent < options$1.persistent || copts.interval > options$1.interval)) { listeners = cont.listeners; rawEmitters = cont.rawEmitters; fs$9.unwatchFile(fullPath); cont = void 0; } if (cont) { addAndConvert(cont, KEY_LISTENERS, listener$1); addAndConvert(cont, KEY_RAW, rawEmitter); } else { cont = { listeners: listener$1, rawEmitters: rawEmitter, options: options$1, watcher: fs$9.watchFile(fullPath, options$1, (curr, prev) => { foreach(cont.rawEmitters, (rawEmitter$1) => { rawEmitter$1(EV_CHANGE$2, fullPath, { curr, prev }); }); const currmtime = curr.mtimeMs; if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) foreach(cont.listeners, (listener$2) => listener$2(path$13, curr)); }) }; FsWatchFileInstances.set(fullPath, cont); } return () => { delFromSet(cont, KEY_LISTENERS, listener$1); delFromSet(cont, KEY_RAW, rawEmitter); if (isEmptySet(cont.listeners)) { FsWatchFileInstances.delete(fullPath); fs$9.unwatchFile(fullPath); cont.options = cont.watcher = void 0; Object.freeze(cont); } }; }; /** * @mixin */ var NodeFsHandler$1 = class { /** * @param {import("../index").FSWatcher} fsW */ constructor(fsW) { this.fsw = fsW; this._boundHandleError = (error$1) => fsW._handleError(error$1); } /** * Watch file for changes with fs_watchFile or fs_watch. * @param {String} path to file or dir * @param {Function} listener on fs change * @returns {Function} closer for the watcher instance */ _watchWithNodeFs(path$13, listener$1) { const opts = this.fsw.options; const directory = sysPath$2.dirname(path$13); const basename$3 = sysPath$2.basename(path$13); const parent = this.fsw._getWatchedDir(directory); parent.add(basename$3); const absolutePath = sysPath$2.resolve(path$13); const options$1 = { persistent: opts.persistent }; if (!listener$1) listener$1 = EMPTY_FN$2; let closer; if (opts.usePolling) { options$1.interval = opts.enableBinaryInterval && isBinaryPath(basename$3) ? opts.binaryInterval : opts.interval; closer = setFsWatchFileListener(path$13, absolutePath, options$1, { listener: listener$1, rawEmitter: this.fsw._emitRaw }); } else closer = setFsWatchListener(path$13, absolutePath, options$1, { listener: listener$1, errHandler: this._boundHandleError, rawEmitter: this.fsw._emitRaw }); return closer; } /** * Watch a file and emit add event if warranted. * @param {Path} file Path * @param {fs.Stats} stats result of fs_stat * @param {Boolean} initialAdd was the file added at watch instantiation? * @returns {Function} closer for the watcher instance */ _handleFile(file, stats, initialAdd) { if (this.fsw.closed) return; const dirname$3 = sysPath$2.dirname(file); const basename$3 = sysPath$2.basename(file); const parent = this.fsw._getWatchedDir(dirname$3); let prevStats = stats; if (parent.has(basename$3)) return; const listener$1 = async (path$13, newStats) => { if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return; if (!newStats || newStats.mtimeMs === 0) try { const newStats$1 = await stat$2(file); if (this.fsw.closed) return; const at = newStats$1.atimeMs; const mt = newStats$1.mtimeMs; if (!at || at <= mt || mt !== prevStats.mtimeMs) this.fsw._emit(EV_CHANGE$2, file, newStats$1); if (isLinux && prevStats.ino !== newStats$1.ino) { this.fsw._closeFile(path$13); prevStats = newStats$1; this.fsw._addPathCloser(path$13, this._watchWithNodeFs(file, listener$1)); } else prevStats = newStats$1; } catch (error$1) { this.fsw._remove(dirname$3, basename$3); } else if (parent.has(basename$3)) { const at = newStats.atimeMs; const mt = newStats.mtimeMs; if (!at || at <= mt || mt !== prevStats.mtimeMs) this.fsw._emit(EV_CHANGE$2, file, newStats); prevStats = newStats; } }; const closer = this._watchWithNodeFs(file, listener$1); if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) { if (!this.fsw._throttle(EV_ADD$2, file, 0)) return; this.fsw._emit(EV_ADD$2, file, stats); } return closer; } /** * Handle symlinks encountered while reading a dir. * @param {Object} entry returned by readdirp * @param {String} directory path of dir being read * @param {String} path of this item * @param {String} item basename of this item * @returns {Promise} true if no more processing is needed for this entry. */ async _handleSymlink(entry, directory, path$13, item) { if (this.fsw.closed) return; const full = entry.fullPath; const dir = this.fsw._getWatchedDir(directory); if (!this.fsw.options.followSymlinks) { this.fsw._incrReadyCount(); let linkPath; try { linkPath = await fsrealpath(path$13); } catch (e$1) { this.fsw._emitReady(); return true; } if (this.fsw.closed) return; if (dir.has(item)) { if (this.fsw._symlinkPaths.get(full) !== linkPath) { this.fsw._symlinkPaths.set(full, linkPath); this.fsw._emit(EV_CHANGE$2, path$13, entry.stats); } } else { dir.add(item); this.fsw._symlinkPaths.set(full, linkPath); this.fsw._emit(EV_ADD$2, path$13, entry.stats); } this.fsw._emitReady(); return true; } if (this.fsw._symlinkPaths.has(full)) return true; this.fsw._symlinkPaths.set(full, true); } _handleRead(directory, initialAdd, wh, target, dir, depth, throttler) { directory = sysPath$2.join(directory, EMPTY_STR$1); if (!wh.hasGlob) { throttler = this.fsw._throttle("readdir", directory, 1e3); if (!throttler) return; } const previous = this.fsw._getWatchedDir(wh.path); const current = /* @__PURE__ */ new Set(); let stream$1 = this.fsw._readdirp(directory, { fileFilter: (entry) => wh.filterPath(entry), directoryFilter: (entry) => wh.filterDir(entry), depth: 0 }).on(STR_DATA$1, async (entry) => { if (this.fsw.closed) { stream$1 = void 0; return; } const item = entry.path; let path$13 = sysPath$2.join(directory, item); current.add(item); if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path$13, item)) return; if (this.fsw.closed) { stream$1 = void 0; return; } if (item === target || !target && !previous.has(item)) { this.fsw._incrReadyCount(); path$13 = sysPath$2.join(dir, sysPath$2.relative(dir, path$13)); this._addToNodeFs(path$13, initialAdd, wh, depth + 1); } }).on(EV_ERROR$2, this._boundHandleError); return new Promise((resolve$4) => stream$1.once(STR_END$2, () => { if (this.fsw.closed) { stream$1 = void 0; return; } const wasThrottled = throttler ? throttler.clear() : false; resolve$4(); previous.getChildren().filter((item) => { return item !== directory && !current.has(item) && (!wh.hasGlob || wh.filterPath({ fullPath: sysPath$2.resolve(directory, item) })); }).forEach((item) => { this.fsw._remove(directory, item); }); stream$1 = void 0; if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler); })); } /** * Read directory to add / remove files from `@watched` list and re-read it on change. * @param {String} dir fs path * @param {fs.Stats} stats * @param {Boolean} initialAdd * @param {Number} depth relative to user-supplied path * @param {String} target child path targeted for watch * @param {Object} wh Common watch helpers for this path * @param {String} realpath * @returns {Promise} closer for the watcher instance. */ async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath$2) { const parentDir$1 = this.fsw._getWatchedDir(sysPath$2.dirname(dir)); const tracked = parentDir$1.has(sysPath$2.basename(dir)); if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) { if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR$2, dir, stats); } parentDir$1.add(sysPath$2.basename(dir)); this.fsw._getWatchedDir(dir); let throttler; let closer; const oDepth = this.fsw.options.depth; if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath$2)) { if (!target) { await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler); if (this.fsw.closed) return; } closer = this._watchWithNodeFs(dir, (dirPath, stats$1) => { if (stats$1 && stats$1.mtimeMs === 0) return; this._handleRead(dirPath, false, wh, target, dir, depth, throttler); }); } return closer; } /** * Handle added file, directory, or glob pattern. * Delegates call to _handleFile / _handleDir after checks. * @param {String} path to file or ir * @param {Boolean} initialAdd was the file added at watch instantiation? * @param {Object} priorWh depth relative to user-supplied path * @param {Number} depth Child path actually targeted for watch * @param {String=} target Child path actually targeted for watch * @returns {Promise} */ async _addToNodeFs(path$13, initialAdd, priorWh, depth, target) { const ready = this.fsw._emitReady; if (this.fsw._isIgnored(path$13) || this.fsw.closed) { ready(); return false; } const wh = this.fsw._getWatchHelpers(path$13, depth); if (!wh.hasGlob && priorWh) { wh.hasGlob = priorWh.hasGlob; wh.globFilter = priorWh.globFilter; wh.filterPath = (entry) => priorWh.filterPath(entry); wh.filterDir = (entry) => priorWh.filterDir(entry); } try { const stats = await statMethods$1[wh.statMethod](wh.watchPath); if (this.fsw.closed) return; if (this.fsw._isIgnored(wh.watchPath, stats)) { ready(); return false; } const follow = this.fsw.options.followSymlinks && !path$13.includes(STAR) && !path$13.includes(BRACE_START$1); let closer; if (stats.isDirectory()) { const absPath = sysPath$2.resolve(path$13); const targetPath = follow ? await fsrealpath(path$13) : path$13; if (this.fsw.closed) return; closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath); if (this.fsw.closed) return; if (absPath !== targetPath && targetPath !== void 0) this.fsw._symlinkPaths.set(absPath, targetPath); } else if (stats.isSymbolicLink()) { const targetPath = follow ? await fsrealpath(path$13) : path$13; if (this.fsw.closed) return; const parent = sysPath$2.dirname(wh.watchPath); this.fsw._getWatchedDir(parent).add(wh.watchPath); this.fsw._emit(EV_ADD$2, wh.watchPath, stats); closer = await this._handleDir(parent, stats, initialAdd, depth, path$13, wh, targetPath); if (this.fsw.closed) return; if (targetPath !== void 0) this.fsw._symlinkPaths.set(sysPath$2.resolve(path$13), targetPath); } else closer = this._handleFile(wh.watchPath, stats, initialAdd); ready(); this.fsw._addPathCloser(path$13, closer); return false; } catch (error$1) { if (this.fsw._handleError(error$1)) { ready(); return path$13; } } } }; module.exports = NodeFsHandler$1; } }); //#endregion //#region ../../node_modules/.pnpm/chokidar@3.6.0_patch_hash=8a4f9e2b397e6034b91a0508faae3cecb97f222313faa129d7cb0eb71e9d0e84/node_modules/chokidar/lib/fsevents-handler.js var require_fsevents_handler = __commonJS({ "../../node_modules/.pnpm/chokidar@3.6.0_patch_hash=8a4f9e2b397e6034b91a0508faae3cecb97f222313faa129d7cb0eb71e9d0e84/node_modules/chokidar/lib/fsevents-handler.js"(exports, module) { const fs$8 = require("fs"); const sysPath$1 = require("path"); const { promisify: promisify$2 } = require("util"); let fsevents; try { fsevents = require("fsevents"); } catch (error$1) { if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error$1); } if (fsevents) { const mtch = process.version.match(/v(\d+)\.(\d+)/); if (mtch && mtch[1] && mtch[2]) { const maj$1 = Number.parseInt(mtch[1], 10); const min$1 = Number.parseInt(mtch[2], 10); if (maj$1 === 8 && min$1 < 16) fsevents = void 0; } } const { EV_ADD: EV_ADD$1, EV_CHANGE: EV_CHANGE$1, EV_ADD_DIR: EV_ADD_DIR$1, EV_UNLINK: EV_UNLINK$1, EV_ERROR: EV_ERROR$1, STR_DATA, STR_END: STR_END$1, FSEVENT_CREATED, FSEVENT_MODIFIED, FSEVENT_DELETED, FSEVENT_MOVED, FSEVENT_UNKNOWN, FSEVENT_FLAG_MUST_SCAN_SUBDIRS, FSEVENT_TYPE_FILE, FSEVENT_TYPE_DIRECTORY, FSEVENT_TYPE_SYMLINK, ROOT_GLOBSTAR, DIR_SUFFIX, DOT_SLASH, FUNCTION_TYPE: FUNCTION_TYPE$1, EMPTY_FN: EMPTY_FN$1, IDENTITY_FN } = require_constants$2(); const Depth = (value$1) => isNaN(value$1) ? {} : { depth: value$1 }; const stat$1 = promisify$2(fs$8.stat); const lstat = promisify$2(fs$8.lstat); const realpath = promisify$2(fs$8.realpath); const statMethods = { stat: stat$1, lstat }; /** * @typedef {String} Path */ /** * @typedef {Object} FsEventsWatchContainer * @property {Set} listeners * @property {Function} rawEmitter * @property {{stop: Function}} watcher */ /** * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances) * @type {Map} */ const FSEventsWatchers = /* @__PURE__ */ new Map(); const consolidateThreshhold = 10; const wrongEventFlags = new Set([ 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912 ]); /** * Instantiates the fsevents interface * @param {Path} path path to be watched * @param {Function} callback called when fsevents is bound and ready * @returns {{stop: Function}} new fsevents instance */ const createFSEventsInstance = (path$13, callback) => { const stop = fsevents.watch(path$13, callback); return { stop }; }; /** * Instantiates the fsevents interface or binds listeners to an existing one covering * the same file tree. * @param {Path} path - to be watched * @param {Path} realPath - real path for symlinks * @param {Function} listener - called when fsevents emits events * @param {Function} rawEmitter - passes data to listeners of the 'raw' event * @returns {Function} closer */ function setFSEventsListener(path$13, realPath, listener$1, rawEmitter) { let watchPath = sysPath$1.extname(realPath) ? sysPath$1.dirname(realPath) : realPath; const parentPath = sysPath$1.dirname(watchPath); let cont = FSEventsWatchers.get(watchPath); if (couldConsolidate(parentPath)) watchPath = parentPath; const resolvedPath = sysPath$1.resolve(path$13); const hasSymlink = resolvedPath !== realPath; const filteredListener = (fullPath, flags, info) => { if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath); if (fullPath === resolvedPath || !fullPath.indexOf(resolvedPath + sysPath$1.sep)) listener$1(fullPath, flags, info); }; let watchedParent = false; for (const watchedPath of FSEventsWatchers.keys()) if (realPath.indexOf(sysPath$1.resolve(watchedPath) + sysPath$1.sep) === 0) { watchPath = watchedPath; cont = FSEventsWatchers.get(watchPath); watchedParent = true; break; } if (cont || watchedParent) cont.listeners.add(filteredListener); else { cont = { listeners: new Set([filteredListener]), rawEmitter, watcher: createFSEventsInstance(watchPath, (fullPath, flags) => { if (!cont.listeners.size) return; if (flags & FSEVENT_FLAG_MUST_SCAN_SUBDIRS) return; const info = fsevents.getInfo(fullPath, flags); cont.listeners.forEach((list) => { list(fullPath, flags, info); }); cont.rawEmitter(info.event, fullPath, info); }) }; FSEventsWatchers.set(watchPath, cont); } return () => { const lst = cont.listeners; lst.delete(filteredListener); if (!lst.size) { FSEventsWatchers.delete(watchPath); if (cont.watcher) return cont.watcher.stop().then(() => { cont.rawEmitter = cont.watcher = void 0; Object.freeze(cont); }); } }; } const couldConsolidate = (path$13) => { let count = 0; for (const watchPath of FSEventsWatchers.keys()) if (watchPath.indexOf(path$13) === 0) { count++; if (count >= consolidateThreshhold) return true; } return false; }; const canUse = () => fsevents && FSEventsWatchers.size < 128; const calcDepth = (path$13, root) => { let i$1 = 0; while (!path$13.indexOf(root) && (path$13 = sysPath$1.dirname(path$13)) !== root) i$1++; return i$1; }; const sameTypes = (info, stats) => info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() || info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() || info.type === FSEVENT_TYPE_FILE && stats.isFile(); /** * @mixin */ var FsEventsHandler$1 = class { /** * @param {import('../index').FSWatcher} fsw */ constructor(fsw) { this.fsw = fsw; } checkIgnored(path$13, stats) { const ipaths = this.fsw._ignoredPaths; if (this.fsw._isIgnored(path$13, stats)) { ipaths.add(path$13); if (stats && stats.isDirectory()) ipaths.add(path$13 + ROOT_GLOBSTAR); return true; } ipaths.delete(path$13); ipaths.delete(path$13 + ROOT_GLOBSTAR); } addOrChange(path$13, fullPath, realPath, parent, watchedDir, item, info, opts) { const event = watchedDir.has(item) ? EV_CHANGE$1 : EV_ADD$1; this.handleEvent(event, path$13, fullPath, realPath, parent, watchedDir, item, info, opts); } async checkExists(path$13, fullPath, realPath, parent, watchedDir, item, info, opts) { try { const stats = await stat$1(path$13); if (this.fsw.closed) return; if (sameTypes(info, stats)) this.addOrChange(path$13, fullPath, realPath, parent, watchedDir, item, info, opts); else this.handleEvent(EV_UNLINK$1, path$13, fullPath, realPath, parent, watchedDir, item, info, opts); } catch (error$1) { if (error$1.code === "EACCES") this.addOrChange(path$13, fullPath, realPath, parent, watchedDir, item, info, opts); else this.handleEvent(EV_UNLINK$1, path$13, fullPath, realPath, parent, watchedDir, item, info, opts); } } handleEvent(event, path$13, fullPath, realPath, parent, watchedDir, item, info, opts) { if (this.fsw.closed || this.checkIgnored(path$13)) return; if (event === EV_UNLINK$1) { const isDirectory$2 = info.type === FSEVENT_TYPE_DIRECTORY; if (isDirectory$2 || watchedDir.has(item)) this.fsw._remove(parent, item, isDirectory$2); } else { if (event === EV_ADD$1) { if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path$13); if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) { const curDepth = opts.depth === void 0 ? void 0 : calcDepth(fullPath, realPath) + 1; return this._addToFsEvents(path$13, false, true, curDepth); } this.fsw._getWatchedDir(parent).add(item); } /** * @type {'add'|'addDir'|'unlink'|'unlinkDir'} */ const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event; this.fsw._emit(eventName, path$13); if (eventName === EV_ADD_DIR$1) this._addToFsEvents(path$13, false, true); } } /** * Handle symlinks encountered during directory scan * @param {String} watchPath - file/dir path to be watched with fsevents * @param {String} realPath - real path (in case of symlinks) * @param {Function} transform - path transformer * @param {Function} globFilter - path filter in case a glob pattern was provided * @returns {Function} closer for the watcher instance */ _watchWithFsEvents(watchPath, realPath, transform$2, globFilter) { if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return; const opts = this.fsw.options; const watchCallback = async (fullPath, flags, info) => { if (this.fsw.closed || this.fsw._isIgnored(fullPath)) return; if (opts.depth !== void 0 && calcDepth(fullPath, realPath) > opts.depth) return; const path$13 = transform$2(sysPath$1.join(watchPath, sysPath$1.relative(watchPath, fullPath))); if (globFilter && !globFilter(path$13)) return; const parent = sysPath$1.dirname(path$13); const item = sysPath$1.basename(path$13); const watchedDir = this.fsw._getWatchedDir(info.type === FSEVENT_TYPE_DIRECTORY ? path$13 : parent); if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) if (typeof opts.ignored === FUNCTION_TYPE$1) { let stats; try { stats = await stat$1(path$13); } catch (error$1) {} if (this.fsw.closed) return; if (this.checkIgnored(path$13, stats)) return; if (sameTypes(info, stats)) this.addOrChange(path$13, fullPath, realPath, parent, watchedDir, item, info, opts); else this.handleEvent(EV_UNLINK$1, path$13, fullPath, realPath, parent, watchedDir, item, info, opts); } else this.checkExists(path$13, fullPath, realPath, parent, watchedDir, item, info, opts); else switch (info.event) { case FSEVENT_CREATED: case FSEVENT_MODIFIED: return this.addOrChange(path$13, fullPath, realPath, parent, watchedDir, item, info, opts); case FSEVENT_DELETED: case FSEVENT_MOVED: return this.checkExists(path$13, fullPath, realPath, parent, watchedDir, item, info, opts); } }; const closer = setFSEventsListener(watchPath, realPath, watchCallback, this.fsw._emitRaw); this.fsw._emitReady(); return closer; } /** * Handle symlinks encountered during directory scan * @param {String} linkPath path to symlink * @param {String} fullPath absolute path to the symlink * @param {Function} transform pre-existing path transformer * @param {Number} curDepth level of subdirectories traversed to where symlink is * @returns {Promise} */ async _handleFsEventsSymlink(linkPath, fullPath, transform$2, curDepth) { if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return; this.fsw._symlinkPaths.set(fullPath, true); this.fsw._incrReadyCount(); try { const linkTarget = await realpath(linkPath); if (this.fsw.closed) return; if (this.fsw._isIgnored(linkTarget)) return this.fsw._emitReady(); this.fsw._incrReadyCount(); this._addToFsEvents(linkTarget || linkPath, (path$13) => { let aliasedPath = linkPath; if (linkTarget && linkTarget !== DOT_SLASH) aliasedPath = path$13.replace(linkTarget, linkPath); else if (path$13 !== DOT_SLASH) aliasedPath = sysPath$1.join(linkPath, path$13); return transform$2(aliasedPath); }, false, curDepth); } catch (error$1) { if (this.fsw._handleError(error$1)) return this.fsw._emitReady(); } } /** * * @param {Path} newPath * @param {fs.Stats} stats */ emitAdd(newPath, stats, processPath, opts, forceAdd) { const pp = processPath(newPath); const isDir = stats.isDirectory(); const dirObj = this.fsw._getWatchedDir(sysPath$1.dirname(pp)); const base = sysPath$1.basename(pp); if (isDir) this.fsw._getWatchedDir(pp); if (dirObj.has(base)) return; dirObj.add(base); if (!opts.ignoreInitial || forceAdd === true) this.fsw._emit(isDir ? EV_ADD_DIR$1 : EV_ADD$1, pp, stats); } initWatch(realPath, path$13, wh, processPath) { if (this.fsw.closed) return; const closer = this._watchWithFsEvents(wh.watchPath, sysPath$1.resolve(realPath || wh.watchPath), processPath, wh.globFilter); this.fsw._addPathCloser(path$13, closer); } /** * Handle added path with fsevents * @param {String} path file/dir path or glob pattern * @param {Function|Boolean=} transform converts working path to what the user expects * @param {Boolean=} forceAdd ensure add is emitted * @param {Number=} priorDepth Level of subdirectories already traversed. * @returns {Promise} */ async _addToFsEvents(path$13, transform$2, forceAdd, priorDepth) { if (this.fsw.closed) return; const opts = this.fsw.options; const processPath = typeof transform$2 === FUNCTION_TYPE$1 ? transform$2 : IDENTITY_FN; const wh = this.fsw._getWatchHelpers(path$13); try { const stats = await statMethods[wh.statMethod](wh.watchPath); if (this.fsw.closed) return; if (this.fsw._isIgnored(wh.watchPath, stats)) throw null; if (stats.isDirectory()) { if (!wh.globFilter) this.emitAdd(processPath(path$13), stats, processPath, opts, forceAdd); if (priorDepth && priorDepth > opts.depth) return; this.fsw._readdirp(wh.watchPath, { fileFilter: (entry) => wh.filterPath(entry), directoryFilter: (entry) => wh.filterDir(entry), ...Depth(opts.depth - (priorDepth || 0)) }).on(STR_DATA, (entry) => { if (this.fsw.closed) return; if (entry.stats.isDirectory() && !wh.filterPath(entry)) return; const joinedPath = sysPath$1.join(wh.watchPath, entry.path); const { fullPath } = entry; if (wh.followSymlinks && entry.stats.isSymbolicLink()) { const curDepth = opts.depth === void 0 ? void 0 : calcDepth(joinedPath, sysPath$1.resolve(wh.watchPath)) + 1; this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth); } else this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd); }).on(EV_ERROR$1, EMPTY_FN$1).on(STR_END$1, () => { this.fsw._emitReady(); }); } else { this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd); this.fsw._emitReady(); } } catch (error$1) { if (!error$1 || this.fsw._handleError(error$1)) { this.fsw._emitReady(); this.fsw._emitReady(); } } if (opts.persistent && forceAdd !== true) if (typeof transform$2 === FUNCTION_TYPE$1) this.initWatch(void 0, path$13, wh, processPath); else { let realPath; try { realPath = await realpath(wh.watchPath); } catch (e$1) {} this.initWatch(realPath, path$13, wh, processPath); } } }; module.exports = FsEventsHandler$1; module.exports.canUse = canUse; } }); //#endregion //#region ../../node_modules/.pnpm/chokidar@3.6.0_patch_hash=8a4f9e2b397e6034b91a0508faae3cecb97f222313faa129d7cb0eb71e9d0e84/node_modules/chokidar/index.js var require_chokidar = __commonJS({ "../../node_modules/.pnpm/chokidar@3.6.0_patch_hash=8a4f9e2b397e6034b91a0508faae3cecb97f222313faa129d7cb0eb71e9d0e84/node_modules/chokidar/index.js"(exports) { const { EventEmitter: EventEmitter$4 } = require("events"); const fs$7 = require("fs"); const sysPath = require("path"); const { promisify: promisify$1 } = require("util"); const readdirp = require_readdirp(); const anymatch = require_anymatch().default; const globParent = require_glob_parent(); const isGlob = require_is_glob(); const braces = require_braces(); const normalizePath$1 = require_normalize_path(); const NodeFsHandler = require_nodefs_handler(); const FsEventsHandler = require_fsevents_handler(); const { EV_ALL, EV_READY, EV_ADD, EV_CHANGE, EV_UNLINK, EV_ADD_DIR, EV_UNLINK_DIR, EV_RAW, EV_ERROR, STR_CLOSE, STR_END, BACK_SLASH_RE, DOUBLE_SLASH_RE, SLASH_OR_BACK_SLASH_RE, DOT_RE, REPLACER_RE, SLASH, SLASH_SLASH, BRACE_START, BANG, ONE_DOT, TWO_DOTS, GLOBSTAR, SLASH_GLOBSTAR, ANYMATCH_OPTS, STRING_TYPE, FUNCTION_TYPE, EMPTY_STR, EMPTY_FN, isWindows: isWindows$2, isMacos, isIBMi } = require_constants$2(); const stat = promisify$1(fs$7.stat); const readdir = promisify$1(fs$7.readdir); /** * @typedef {String} Path * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType */ /** * * @typedef {Object} WatchHelpers * @property {Boolean} followSymlinks * @property {'stat'|'lstat'} statMethod * @property {Path} path * @property {Path} watchPath * @property {Function} entryPath * @property {Boolean} hasGlob * @property {Object} globFilter * @property {Function} filterPath * @property {Function} filterDir */ const arrify = (value$1 = []) => Array.isArray(value$1) ? value$1 : [value$1]; const flatten = (list, result = []) => { list.forEach((item) => { if (Array.isArray(item)) flatten(item, result); else result.push(item); }); return result; }; const unifyPaths = (paths_) => { /** * @type {Array} */ const paths = flatten(arrify(paths_)); if (!paths.every((p$1) => typeof p$1 === STRING_TYPE)) throw new TypeError(`Non-string provided as watch path: ${paths}`); return paths.map(normalizePathToUnix); }; const toUnix = (string) => { let str = string.replace(BACK_SLASH_RE, SLASH); let prepend = false; if (str.startsWith(SLASH_SLASH)) prepend = true; while (str.match(DOUBLE_SLASH_RE)) str = str.replace(DOUBLE_SLASH_RE, SLASH); if (prepend) str = SLASH + str; return str; }; const normalizePathToUnix = (path$13) => toUnix(sysPath.normalize(toUnix(path$13))); const normalizeIgnored = (cwd = EMPTY_STR) => (path$13) => { if (typeof path$13 !== STRING_TYPE) return path$13; return normalizePathToUnix(sysPath.isAbsolute(path$13) ? path$13 : sysPath.join(cwd, path$13)); }; const getAbsolutePath = (path$13, cwd) => { if (sysPath.isAbsolute(path$13)) return path$13; if (path$13.startsWith(BANG)) return BANG + sysPath.join(cwd, path$13.slice(1)); return sysPath.join(cwd, path$13); }; const undef = (opts, key) => opts[key] === void 0; /** * Directory entry. * @property {Path} path * @property {Set} items */ var DirEntry = class { /** * @param {Path} dir * @param {Function} removeWatcher */ constructor(dir, removeWatcher) { this.path = dir; this._removeWatcher = removeWatcher; /** @type {Set} */ this.items = /* @__PURE__ */ new Set(); } add(item) { const { items } = this; if (!items) return; if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item); } async remove(item) { const { items } = this; if (!items) return; items.delete(item); if (items.size > 0) return; const dir = this.path; try { await readdir(dir); } catch (err$2) { if (this._removeWatcher) this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir)); } } has(item) { const { items } = this; if (!items) return; return items.has(item); } /** * @returns {Array} */ getChildren() { const { items } = this; if (!items) return; return [...items.values()]; } dispose() { this.items.clear(); delete this.path; delete this._removeWatcher; delete this.items; Object.freeze(this); } }; const STAT_METHOD_F = "stat"; const STAT_METHOD_L = "lstat"; var WatchHelper = class { constructor(path$13, watchPath, follow, fsw) { this.fsw = fsw; this.path = path$13 = path$13.replace(REPLACER_RE, EMPTY_STR); this.watchPath = watchPath; this.fullWatchPath = sysPath.resolve(watchPath); this.hasGlob = watchPath !== path$13; /** @type {object|boolean} */ if (path$13 === EMPTY_STR) this.hasGlob = false; this.globSymlink = this.hasGlob && follow ? void 0 : false; this.globFilter = this.hasGlob ? anymatch(path$13, void 0, ANYMATCH_OPTS) : false; this.dirParts = this.getDirParts(path$13); this.dirParts.forEach((parts) => { if (parts.length > 1) parts.pop(); }); this.followSymlinks = follow; this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L; } checkGlobSymlink(entry) { if (this.globSymlink === void 0) this.globSymlink = entry.fullParentDir === this.fullWatchPath ? false : { realPath: entry.fullParentDir, linkPath: this.fullWatchPath }; if (this.globSymlink) return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath); return entry.fullPath; } entryPath(entry) { return sysPath.join(this.watchPath, sysPath.relative(this.watchPath, this.checkGlobSymlink(entry))); } filterPath(entry) { const { stats } = entry; if (stats && stats.isSymbolicLink()) return this.filterDir(entry); const resolvedPath = this.entryPath(entry); const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ? this.globFilter(resolvedPath) : true; return matchesGlob && this.fsw._isntIgnored(resolvedPath, stats) && this.fsw._hasReadPermissions(stats); } getDirParts(path$13) { if (!this.hasGlob) return []; const parts = []; const expandedPath = path$13.includes(BRACE_START) ? braces.expand(path$13) : [path$13]; expandedPath.forEach((path$14) => { parts.push(sysPath.relative(this.watchPath, path$14).split(SLASH_OR_BACK_SLASH_RE)); }); return parts; } filterDir(entry) { if (this.hasGlob) { const entryParts = this.getDirParts(this.checkGlobSymlink(entry)); let globstar = false; this.unmatchedGlob = !this.dirParts.some((parts) => { return parts.every((part, i$1) => { if (part === GLOBSTAR) globstar = true; return globstar || !entryParts[0][i$1] || anymatch(part, entryParts[0][i$1], ANYMATCH_OPTS); }); }); } return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats); } }; /** * Watches files & directories for changes. Emitted events: * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error` * * new FSWatcher() * .add(directories) * .on('add', path => log('File', path, 'was added')) */ var FSWatcher = class extends EventEmitter$4 { constructor(_opts) { super(); const opts = {}; if (_opts) Object.assign(opts, _opts); /** @type {Map} */ this._watched = /* @__PURE__ */ new Map(); /** @type {Map} */ this._closers = /* @__PURE__ */ new Map(); /** @type {Set} */ this._ignoredPaths = /* @__PURE__ */ new Set(); /** @type {Map} */ this._throttled = /* @__PURE__ */ new Map(); /** @type {Map} */ this._symlinkPaths = /* @__PURE__ */ new Map(); this._streams = /* @__PURE__ */ new Set(); this.closed = false; if (undef(opts, "persistent")) opts.persistent = true; if (undef(opts, "ignoreInitial")) opts.ignoreInitial = false; if (undef(opts, "ignorePermissionErrors")) opts.ignorePermissionErrors = false; if (undef(opts, "interval")) opts.interval = 100; if (undef(opts, "binaryInterval")) opts.binaryInterval = 300; if (undef(opts, "disableGlobbing")) opts.disableGlobbing = false; opts.enableBinaryInterval = opts.binaryInterval !== opts.interval; if (undef(opts, "useFsEvents")) opts.useFsEvents = !opts.usePolling; const canUseFsEvents = FsEventsHandler.canUse(); if (!canUseFsEvents) opts.useFsEvents = false; if (undef(opts, "usePolling") && !opts.useFsEvents) opts.usePolling = isMacos; if (isIBMi) opts.usePolling = true; const envPoll = process.env.CHOKIDAR_USEPOLLING; if (envPoll !== void 0) { const envLower = envPoll.toLowerCase(); if (envLower === "false" || envLower === "0") opts.usePolling = false; else if (envLower === "true" || envLower === "1") opts.usePolling = true; else opts.usePolling = !!envLower; } const envInterval = process.env.CHOKIDAR_INTERVAL; if (envInterval) opts.interval = Number.parseInt(envInterval, 10); if (undef(opts, "atomic")) opts.atomic = !opts.usePolling && !opts.useFsEvents; if (opts.atomic) this._pendingUnlinks = /* @__PURE__ */ new Map(); if (undef(opts, "followSymlinks")) opts.followSymlinks = true; if (undef(opts, "awaitWriteFinish")) opts.awaitWriteFinish = false; if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {}; const awf = opts.awaitWriteFinish; if (awf) { if (!awf.stabilityThreshold) awf.stabilityThreshold = 2e3; if (!awf.pollInterval) awf.pollInterval = 100; this._pendingWrites = /* @__PURE__ */ new Map(); } if (opts.ignored) opts.ignored = arrify(opts.ignored); let readyCalls = 0; this._emitReady = () => { readyCalls++; if (readyCalls >= this._readyCount) { this._emitReady = EMPTY_FN; this._readyEmitted = true; process.nextTick(() => this.emit(EV_READY)); } }; this._emitRaw = (...args) => this.emit(EV_RAW, ...args); this._readyEmitted = false; this.options = opts; if (opts.useFsEvents) this._fsEventsHandler = new FsEventsHandler(this); else this._nodeFsHandler = new NodeFsHandler(this); Object.freeze(opts); } /** * Adds paths to be watched on an existing FSWatcher instance * @param {Path|Array} paths_ * @param {String=} _origAdd private; for handling non-existent paths to be watched * @param {Boolean=} _internal private; indicates a non-user add * @returns {FSWatcher} for chaining */ add(paths_, _origAdd, _internal) { const { cwd, disableGlobbing } = this.options; this.closed = false; let paths = unifyPaths(paths_); if (cwd) paths = paths.map((path$13) => { const absPath = getAbsolutePath(path$13, cwd); if (disableGlobbing || !isGlob(path$13)) return absPath; return normalizePath$1(absPath); }); paths = paths.filter((path$13) => { if (path$13.startsWith(BANG)) { this._ignoredPaths.add(path$13.slice(1)); return false; } this._ignoredPaths.delete(path$13); this._ignoredPaths.delete(path$13 + SLASH_GLOBSTAR); this._userIgnored = void 0; return true; }); if (this.options.useFsEvents && this._fsEventsHandler) { if (!this._readyCount) this._readyCount = paths.length; if (this.options.persistent) this._readyCount += paths.length; paths.forEach((path$13) => this._fsEventsHandler._addToFsEvents(path$13)); } else { if (!this._readyCount) this._readyCount = 0; this._readyCount += paths.length; Promise.all(paths.map(async (path$13) => { const res = await this._nodeFsHandler._addToNodeFs(path$13, !_internal, 0, 0, _origAdd); if (res) this._emitReady(); return res; })).then((results) => { if (this.closed) return; results.filter((item) => item).forEach((item) => { this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item)); }); }); } return this; } /** * Close watchers or start ignoring events from specified paths. * @param {Path|Array} paths_ - string or array of strings, file/directory paths and/or globs * @returns {FSWatcher} for chaining */ unwatch(paths_) { if (this.closed) return this; const paths = unifyPaths(paths_); const { cwd } = this.options; paths.forEach((path$13) => { if (!sysPath.isAbsolute(path$13) && !this._closers.has(path$13)) { if (cwd) path$13 = sysPath.join(cwd, path$13); path$13 = sysPath.resolve(path$13); } this._closePath(path$13); this._ignoredPaths.add(path$13); if (this._watched.has(path$13)) this._ignoredPaths.add(path$13 + SLASH_GLOBSTAR); this._userIgnored = void 0; }); return this; } /** * Close watchers and remove all listeners from watched paths. * @returns {Promise}. */ close() { if (this.closed) return this._closePromise; this.closed = true; this.removeAllListeners(); const closers = []; this._closers.forEach((closerList) => closerList.forEach((closer) => { const promise = closer(); if (promise instanceof Promise) closers.push(promise); })); this._streams.forEach((stream$1) => stream$1.destroy()); this._userIgnored = void 0; this._readyCount = 0; this._readyEmitted = false; this._watched.forEach((dirent) => dirent.dispose()); [ "closers", "watched", "streams", "symlinkPaths", "throttled" ].forEach((key) => { this[`_${key}`].clear(); }); this._closePromise = closers.length ? Promise.all(closers).then(() => void 0) : Promise.resolve(); return this._closePromise; } /** * Expose list of watched paths * @returns {Object} for chaining */ getWatched() { const watchList = {}; this._watched.forEach((entry, dir) => { const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir; watchList[key || ONE_DOT] = entry.getChildren().sort(); }); return watchList; } emitWithAll(event, args) { this.emit(...args); if (event !== EV_ERROR) this.emit(EV_ALL, ...args); } /** * Normalize and emit events. * Calling _emit DOES NOT MEAN emit() would be called! * @param {EventName} event Type of event * @param {Path} path File or directory path * @param {*=} val1 arguments to be passed with event * @param {*=} val2 * @param {*=} val3 * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag */ async _emit(event, path$13, val1, val2, val3) { if (this.closed) return; const opts = this.options; if (isWindows$2) path$13 = sysPath.normalize(path$13); if (opts.cwd) path$13 = sysPath.relative(opts.cwd, path$13); /** @type Array */ const args = [event, path$13]; if (val3 !== void 0) args.push(val1, val2, val3); else if (val2 !== void 0) args.push(val1, val2); else if (val1 !== void 0) args.push(val1); const awf = opts.awaitWriteFinish; let pw; if (awf && (pw = this._pendingWrites.get(path$13))) { pw.lastChange = /* @__PURE__ */ new Date(); return this; } if (opts.atomic) { if (event === EV_UNLINK) { this._pendingUnlinks.set(path$13, args); setTimeout(() => { this._pendingUnlinks.forEach((entry, path$14) => { this.emit(...entry); this.emit(EV_ALL, ...entry); this._pendingUnlinks.delete(path$14); }); }, typeof opts.atomic === "number" ? opts.atomic : 100); return this; } if (event === EV_ADD && this._pendingUnlinks.has(path$13)) { event = args[0] = EV_CHANGE; this._pendingUnlinks.delete(path$13); } } if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) { const awfEmit = (err$2, stats) => { if (err$2) { event = args[0] = EV_ERROR; args[1] = err$2; this.emitWithAll(event, args); } else if (stats) { if (args.length > 2) args[2] = stats; else args.push(stats); this.emitWithAll(event, args); } }; this._awaitWriteFinish(path$13, awf.stabilityThreshold, event, awfEmit); return this; } if (event === EV_CHANGE) { const isThrottled = !this._throttle(EV_CHANGE, path$13, 50); if (isThrottled) return this; } if (opts.alwaysStat && val1 === void 0 && (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE)) { const fullPath = opts.cwd ? sysPath.join(opts.cwd, path$13) : path$13; let stats; try { stats = await stat(fullPath); } catch (err$2) {} if (!stats || this.closed) return; args.push(stats); } this.emitWithAll(event, args); return this; } /** * Common handler for errors * @param {Error} error * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag */ _handleError(error$1) { const code = error$1 && error$1.code; if (error$1 && code !== "ENOENT" && code !== "ENOTDIR" && (!this.options.ignorePermissionErrors || code !== "EPERM" && code !== "EACCES")) this.emit(EV_ERROR, error$1); return error$1 || this.closed; } /** * Helper utility for throttling * @param {ThrottleType} actionType type being throttled * @param {Path} path being acted upon * @param {Number} timeout duration of time to suppress duplicate actions * @returns {Object|false} tracking object or false if action should be suppressed */ _throttle(actionType, path$13, timeout) { if (!this._throttled.has(actionType)) this._throttled.set(actionType, /* @__PURE__ */ new Map()); /** @type {Map} */ const action = this._throttled.get(actionType); /** @type {Object} */ const actionPath = action.get(path$13); if (actionPath) { actionPath.count++; return false; } let timeoutObject; const clear = () => { const item = action.get(path$13); const count = item ? item.count : 0; action.delete(path$13); clearTimeout(timeoutObject); if (item) clearTimeout(item.timeoutObject); return count; }; timeoutObject = setTimeout(clear, timeout); const thr = { timeoutObject, clear, count: 0 }; action.set(path$13, thr); return thr; } _incrReadyCount() { return this._readyCount++; } /** * Awaits write operation to finish. * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback. * @param {Path} path being acted upon * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished * @param {EventName} event * @param {Function} awfEmit Callback to be called when ready for event to be emitted. */ _awaitWriteFinish(path$13, threshold, event, awfEmit) { let timeoutHandler; let fullPath = path$13; if (this.options.cwd && !sysPath.isAbsolute(path$13)) fullPath = sysPath.join(this.options.cwd, path$13); const now = /* @__PURE__ */ new Date(); const awaitWriteFinish = (prevStat) => { fs$7.stat(fullPath, (err$2, curStat) => { if (err$2 || !this._pendingWrites.has(path$13)) { if (err$2 && err$2.code !== "ENOENT") awfEmit(err$2); return; } const now$1 = Number(/* @__PURE__ */ new Date()); if (prevStat && curStat.size !== prevStat.size) this._pendingWrites.get(path$13).lastChange = now$1; const pw = this._pendingWrites.get(path$13); const df = now$1 - pw.lastChange; if (df >= threshold) { this._pendingWrites.delete(path$13); awfEmit(void 0, curStat); } else timeoutHandler = setTimeout(awaitWriteFinish, this.options.awaitWriteFinish.pollInterval, curStat); }); }; if (!this._pendingWrites.has(path$13)) { this._pendingWrites.set(path$13, { lastChange: now, cancelWait: () => { this._pendingWrites.delete(path$13); clearTimeout(timeoutHandler); return event; } }); timeoutHandler = setTimeout(awaitWriteFinish, this.options.awaitWriteFinish.pollInterval); } } _getGlobIgnored() { return [...this._ignoredPaths.values()]; } /** * Determines whether user has asked to ignore this path. * @param {Path} path filepath or dir * @param {fs.Stats=} stats result of fs.stat * @returns {Boolean} */ _isIgnored(path$13, stats) { if (this.options.atomic && DOT_RE.test(path$13)) return true; if (!this._userIgnored) { const { cwd } = this.options; const ign = this.options.ignored; const ignored = ign && ign.map(normalizeIgnored(cwd)); const paths = arrify(ignored).filter((path$14) => typeof path$14 === STRING_TYPE && !isGlob(path$14)).map((path$14) => path$14 + SLASH_GLOBSTAR); const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths); this._userIgnored = anymatch(list, void 0, ANYMATCH_OPTS); } return this._userIgnored([path$13, stats]); } _isntIgnored(path$13, stat$4) { return !this._isIgnored(path$13, stat$4); } /** * Provides a set of common helpers and properties relating to symlink and glob handling. * @param {Path} path file, directory, or glob pattern being watched * @param {Number=} depth at any depth > 0, this isn't a glob * @returns {WatchHelper} object containing helpers for this path */ _getWatchHelpers(path$13, depth) { const watchPath = depth || this.options.disableGlobbing || !isGlob(path$13) ? path$13 : globParent(path$13); const follow = this.options.followSymlinks; return new WatchHelper(path$13, watchPath, follow, this); } /** * Provides directory tracking objects * @param {String} directory path of the directory * @returns {DirEntry} the directory's tracking object */ _getWatchedDir(directory) { if (!this._boundRemove) this._boundRemove = this._remove.bind(this); const dir = sysPath.resolve(directory); if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove)); return this._watched.get(dir); } /** * Check for read permissions. * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405 * @param {fs.Stats} stats - object, result of fs_stat * @returns {Boolean} indicates whether the file can be read */ _hasReadPermissions(stats) { if (this.options.ignorePermissionErrors) return true; const md = stats && Number.parseInt(stats.mode, 10); const st = md & 511; const it = Number.parseInt(st.toString(8)[0], 10); return Boolean(4 & it); } /** * Handles emitting unlink events for * files and directories, and via recursion, for * files and directories within directories that are unlinked * @param {String} directory within which the following item is located * @param {String} item base path of item/directory * @returns {void} */ _remove(directory, item, isDirectory$2) { const path$13 = sysPath.join(directory, item); const fullPath = sysPath.resolve(path$13); isDirectory$2 = isDirectory$2 != null ? isDirectory$2 : this._watched.has(path$13) || this._watched.has(fullPath); if (!this._throttle("remove", path$13, 100)) return; if (!isDirectory$2 && !this.options.useFsEvents && this._watched.size === 1) this.add(directory, item, true); const wp = this._getWatchedDir(path$13); const nestedDirectoryChildren = wp.getChildren(); nestedDirectoryChildren.forEach((nested) => this._remove(path$13, nested)); const parent = this._getWatchedDir(directory); const wasTracked = parent.has(item); parent.remove(item); if (this._symlinkPaths.has(fullPath)) this._symlinkPaths.delete(fullPath); let relPath = path$13; if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path$13); if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) { const event = this._pendingWrites.get(relPath).cancelWait(); if (event === EV_ADD) return; } this._watched.delete(path$13); this._watched.delete(fullPath); const eventName = isDirectory$2 ? EV_UNLINK_DIR : EV_UNLINK; if (wasTracked && !this._isIgnored(path$13)) this._emit(eventName, path$13); if (!this.options.useFsEvents) this._closePath(path$13); } /** * Closes all watchers for a path * @param {Path} path */ _closePath(path$13) { this._closeFile(path$13); const dir = sysPath.dirname(path$13); this._getWatchedDir(dir).remove(sysPath.basename(path$13)); } /** * Closes only file-specific watchers * @param {Path} path */ _closeFile(path$13) { const closers = this._closers.get(path$13); if (!closers) return; closers.forEach((closer) => closer()); this._closers.delete(path$13); } /** * * @param {Path} path * @param {Function} closer */ _addPathCloser(path$13, closer) { if (!closer) return; let list = this._closers.get(path$13); if (!list) { list = []; this._closers.set(path$13, list); } list.push(closer); } _readdirp(root, opts) { if (this.closed) return; const options$1 = { type: EV_ALL, alwaysStat: true, lstat: true, ...opts }; let stream$1 = readdirp(root, options$1); this._streams.add(stream$1); stream$1.once(STR_CLOSE, () => { stream$1 = void 0; }); stream$1.once(STR_END, () => { if (stream$1) { this._streams.delete(stream$1); stream$1 = void 0; } }); return stream$1; } }; exports.FSWatcher = FSWatcher; /** * Instantiates watcher with paths to be tracked. * @param {String|Array} paths file/directory paths and/or globs * @param {Object=} options chokidar opts * @returns an instance of FSWatcher for chaining. */ const watch = (paths, options$1) => { const watcher = new FSWatcher(options$1); watcher.add(paths); return watcher; }; exports.watch = watch; } }); //#endregion //#region ../../node_modules/.pnpm/shell-quote@1.8.2/node_modules/shell-quote/quote.js var require_quote = __commonJS({ "../../node_modules/.pnpm/shell-quote@1.8.2/node_modules/shell-quote/quote.js"(exports, module) { module.exports = function quote(xs) { return xs.map(function(s$2) { if (s$2 === "") return "''"; if (s$2 && typeof s$2 === "object") return s$2.op.replace(/(.)/g, "\\$1"); if (/["\s]/.test(s$2) && !/'/.test(s$2)) return "'" + s$2.replace(/(['\\])/g, "\\$1") + "'"; if (/["'\s]/.test(s$2)) return "\"" + s$2.replace(/(["\\$`!])/g, "\\$1") + "\""; return String(s$2).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g, "$1\\$2"); }).join(" "); }; } }); //#endregion //#region ../../node_modules/.pnpm/shell-quote@1.8.2/node_modules/shell-quote/parse.js var require_parse$1 = __commonJS({ "../../node_modules/.pnpm/shell-quote@1.8.2/node_modules/shell-quote/parse.js"(exports, module) { var CONTROL = "(?:" + [ "\\|\\|", "\\&\\&", ";;", "\\|\\&", "\\<\\(", "\\<\\<\\<", ">>", ">\\&", "<\\&", "[&;()|<>]" ].join("|") + ")"; var controlRE = /* @__PURE__ */ new RegExp("^" + CONTROL + "$"); var META = "|&;()<> \\t"; var SINGLE_QUOTE = "\"((\\\\\"|[^\"])*?)\""; var DOUBLE_QUOTE = "'((\\\\'|[^'])*?)'"; var hash = /^#$/; var SQ = "'"; var DQ = "\""; var DS = "$"; var TOKEN = ""; var mult = 4294967296; for (var i = 0; i < 4; i++) TOKEN += (mult * Math.random()).toString(16); var startsWithToken = /* @__PURE__ */ new RegExp("^" + TOKEN); function matchAll(s$2, r$2) { var origIndex = r$2.lastIndex; var matches$2 = []; var matchObj; while (matchObj = r$2.exec(s$2)) { matches$2.push(matchObj); if (r$2.lastIndex === matchObj.index) r$2.lastIndex += 1; } r$2.lastIndex = origIndex; return matches$2; } function getVar(env$2, pre, key) { var r$2 = typeof env$2 === "function" ? env$2(key) : env$2[key]; if (typeof r$2 === "undefined" && key != "") r$2 = ""; else if (typeof r$2 === "undefined") r$2 = "$"; if (typeof r$2 === "object") return pre + TOKEN + JSON.stringify(r$2) + TOKEN; return pre + r$2; } function parseInternal(string, env$2, opts) { if (!opts) opts = {}; var BS = opts.escape || "\\"; var BAREWORD = "(\\" + BS + "['\"" + META + "]|[^\\s'\"" + META + "])+"; var chunker = new RegExp(["(" + CONTROL + ")", "(" + BAREWORD + "|" + SINGLE_QUOTE + "|" + DOUBLE_QUOTE + ")+"].join("|"), "g"); var matches$2 = matchAll(string, chunker); if (matches$2.length === 0) return []; if (!env$2) env$2 = {}; var commented = false; return matches$2.map(function(match) { var s$2 = match[0]; if (!s$2 || commented) return void 0; if (controlRE.test(s$2)) return { op: s$2 }; var quote = false; var esc = false; var out = ""; var isGlob$2 = false; var i$1; function parseEnvVar() { i$1 += 1; var varend; var varname; var char = s$2.charAt(i$1); if (char === "{") { i$1 += 1; if (s$2.charAt(i$1) === "}") throw new Error("Bad substitution: " + s$2.slice(i$1 - 2, i$1 + 1)); varend = s$2.indexOf("}", i$1); if (varend < 0) throw new Error("Bad substitution: " + s$2.slice(i$1)); varname = s$2.slice(i$1, varend); i$1 = varend; } else if (/[*@#?$!_-]/.test(char)) { varname = char; i$1 += 1; } else { var slicedFromI = s$2.slice(i$1); varend = slicedFromI.match(/[^\w\d_]/); if (!varend) { varname = slicedFromI; i$1 = s$2.length; } else { varname = slicedFromI.slice(0, varend.index); i$1 += varend.index - 1; } } return getVar(env$2, "", varname); } for (i$1 = 0; i$1 < s$2.length; i$1++) { var c = s$2.charAt(i$1); isGlob$2 = isGlob$2 || !quote && (c === "*" || c === "?"); if (esc) { out += c; esc = false; } else if (quote) if (c === quote) quote = false; else if (quote == SQ) out += c; else if (c === BS) { i$1 += 1; c = s$2.charAt(i$1); if (c === DQ || c === BS || c === DS) out += c; else out += BS + c; } else if (c === DS) out += parseEnvVar(); else out += c; else if (c === DQ || c === SQ) quote = c; else if (controlRE.test(c)) return { op: s$2 }; else if (hash.test(c)) { commented = true; var commentObj = { comment: string.slice(match.index + i$1 + 1) }; if (out.length) return [out, commentObj]; return [commentObj]; } else if (c === BS) esc = true; else if (c === DS) out += parseEnvVar(); else out += c; } if (isGlob$2) return { op: "glob", pattern: out }; return out; }).reduce(function(prev, arg) { return typeof arg === "undefined" ? prev : prev.concat(arg); }, []); } module.exports = function parse$17(s$2, env$2, opts) { var mapped = parseInternal(s$2, env$2, opts); if (typeof env$2 !== "function") return mapped; return mapped.reduce(function(acc, s$3) { if (typeof s$3 === "object") return acc.concat(s$3); var xs = s$3.split(RegExp("(" + TOKEN + ".*?" + TOKEN + ")", "g")); if (xs.length === 1) return acc.concat(xs[0]); return acc.concat(xs.filter(Boolean).map(function(x) { if (startsWithToken.test(x)) return JSON.parse(x.split(TOKEN)[1]); return x; })); }, []); }; } }); //#endregion //#region ../../node_modules/.pnpm/shell-quote@1.8.2/node_modules/shell-quote/index.js var require_shell_quote = __commonJS({ "../../node_modules/.pnpm/shell-quote@1.8.2/node_modules/shell-quote/index.js"(exports) { exports.quote = require_quote(); exports.parse = require_parse$1(); } }); //#endregion //#region ../../node_modules/.pnpm/launch-editor@2.10.0/node_modules/launch-editor/editor-info/macos.js var require_macos = __commonJS({ "../../node_modules/.pnpm/launch-editor@2.10.0/node_modules/launch-editor/editor-info/macos.js"(exports, module) { module.exports = { "/Applications/Atom.app/Contents/MacOS/Atom": "atom", "/Applications/Atom Beta.app/Contents/MacOS/Atom Beta": "/Applications/Atom Beta.app/Contents/MacOS/Atom Beta", "/Applications/Brackets.app/Contents/MacOS/Brackets": "brackets", "/Applications/Sublime Text.app/Contents/MacOS/Sublime Text": "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl", "/Applications/Sublime Text.app/Contents/MacOS/sublime_text": "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl", "/Applications/Sublime Text 2.app/Contents/MacOS/Sublime Text 2": "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl", "/Applications/Sublime Text Dev.app/Contents/MacOS/Sublime Text": "/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl", "/Applications/Visual Studio Code.app/Contents/MacOS/Electron": "code", "/Applications/Visual Studio Code - Insiders.app/Contents/MacOS/Electron": "code-insiders", "/Applications/VSCodium.app/Contents/MacOS/Electron": "codium", "/Applications/Cursor.app/Contents/MacOS/Cursor": "cursor", "/Applications/AppCode.app/Contents/MacOS/appcode": "/Applications/AppCode.app/Contents/MacOS/appcode", "/Applications/CLion.app/Contents/MacOS/clion": "/Applications/CLion.app/Contents/MacOS/clion", "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea": "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea", "/Applications/IntelliJ IDEA Ultimate.app/Contents/MacOS/idea": "/Applications/IntelliJ IDEA Ultimate.app/Contents/MacOS/idea", "/Applications/IntelliJ IDEA Community Edition.app/Contents/MacOS/idea": "/Applications/IntelliJ IDEA Community Edition.app/Contents/MacOS/idea", "/Applications/PhpStorm.app/Contents/MacOS/phpstorm": "/Applications/PhpStorm.app/Contents/MacOS/phpstorm", "/Applications/PyCharm.app/Contents/MacOS/pycharm": "/Applications/PyCharm.app/Contents/MacOS/pycharm", "/Applications/PyCharm CE.app/Contents/MacOS/pycharm": "/Applications/PyCharm CE.app/Contents/MacOS/pycharm", "/Applications/RubyMine.app/Contents/MacOS/rubymine": "/Applications/RubyMine.app/Contents/MacOS/rubymine", "/Applications/WebStorm.app/Contents/MacOS/webstorm": "/Applications/WebStorm.app/Contents/MacOS/webstorm", "/Applications/MacVim.app/Contents/MacOS/MacVim": "mvim", "/Applications/GoLand.app/Contents/MacOS/goland": "/Applications/GoLand.app/Contents/MacOS/goland", "/Applications/Rider.app/Contents/MacOS/rider": "/Applications/Rider.app/Contents/MacOS/rider", "/Applications/Zed.app/Contents/MacOS/zed": "zed" }; } }); //#endregion //#region ../../node_modules/.pnpm/launch-editor@2.10.0/node_modules/launch-editor/editor-info/linux.js var require_linux = __commonJS({ "../../node_modules/.pnpm/launch-editor@2.10.0/node_modules/launch-editor/editor-info/linux.js"(exports, module) { module.exports = { atom: "atom", Brackets: "brackets", "code-insiders": "code-insiders", code: "code", vscodium: "vscodium", codium: "codium", emacs: "emacs", gvim: "gvim", idea: "idea", "idea.sh": "idea", phpstorm: "phpstorm", "phpstorm.sh": "phpstorm", pycharm: "pycharm", "pycharm.sh": "pycharm", rubymine: "rubymine", "rubymine.sh": "rubymine", sublime_text: "subl", vim: "vim", webstorm: "webstorm", "webstorm.sh": "webstorm", goland: "goland", "goland.sh": "goland", rider: "rider", "rider.sh": "rider" }; } }); //#endregion //#region ../../node_modules/.pnpm/launch-editor@2.10.0/node_modules/launch-editor/editor-info/windows.js var require_windows$1 = __commonJS({ "../../node_modules/.pnpm/launch-editor@2.10.0/node_modules/launch-editor/editor-info/windows.js"(exports, module) { module.exports = [ "Brackets.exe", "Code.exe", "Code - Insiders.exe", "VSCodium.exe", "Cursor.exe", "atom.exe", "sublime_text.exe", "notepad++.exe", "clion.exe", "clion64.exe", "idea.exe", "idea64.exe", "phpstorm.exe", "phpstorm64.exe", "pycharm.exe", "pycharm64.exe", "rubymine.exe", "rubymine64.exe", "webstorm.exe", "webstorm64.exe", "goland.exe", "goland64.exe", "rider.exe", "rider64.exe" ]; } }); //#endregion //#region ../../node_modules/.pnpm/launch-editor@2.10.0/node_modules/launch-editor/guess.js var require_guess = __commonJS({ "../../node_modules/.pnpm/launch-editor@2.10.0/node_modules/launch-editor/guess.js"(exports, module) { const path$8 = require("path"); const shellQuote = require_shell_quote(); const childProcess$2 = require("child_process"); const COMMON_EDITORS_MACOS = require_macos(); const COMMON_EDITORS_LINUX = require_linux(); const COMMON_EDITORS_WIN = require_windows$1(); module.exports = function guessEditor$1(specifiedEditor) { if (specifiedEditor) return shellQuote.parse(specifiedEditor); if (process.env.LAUNCH_EDITOR) return [process.env.LAUNCH_EDITOR]; if (process.versions.webcontainer) return [process.env.EDITOR || "code"]; try { if (process.platform === "darwin") { const output = childProcess$2.execSync("ps x -o comm=", { stdio: [ "pipe", "pipe", "ignore" ] }).toString(); const processNames = Object.keys(COMMON_EDITORS_MACOS); const processList = output.split("\n"); for (let i$1 = 0; i$1 < processNames.length; i$1++) { const processName = processNames[i$1]; if (processList.includes(processName)) return [COMMON_EDITORS_MACOS[processName]]; const processNameWithoutApplications = processName.replace("/Applications", ""); if (output.indexOf(processNameWithoutApplications) !== -1) { if (processName !== COMMON_EDITORS_MACOS[processName]) return [COMMON_EDITORS_MACOS[processName]]; const runningProcess = processList.find((procName) => procName.endsWith(processNameWithoutApplications)); if (runningProcess !== void 0) return [runningProcess]; } } } else if (process.platform === "win32") { const output = childProcess$2.execSync("powershell -NoProfile -Command \"[Console]::OutputEncoding=[Text.Encoding]::UTF8;Get-CimInstance -Query \\\"select executablepath from win32_process where executablepath is not null\\\" | % { $_.ExecutablePath }\"", { stdio: [ "pipe", "pipe", "ignore" ] }).toString(); const runningProcesses = output.split("\r\n"); for (let i$1 = 0; i$1 < runningProcesses.length; i$1++) { const fullProcessPath = runningProcesses[i$1].trim(); const shortProcessName = path$8.basename(fullProcessPath); if (COMMON_EDITORS_WIN.indexOf(shortProcessName) !== -1) return [fullProcessPath]; } } else if (process.platform === "linux") { const output = childProcess$2.execSync("ps x --no-heading -o comm --sort=comm", { stdio: [ "pipe", "pipe", "ignore" ] }).toString(); const processNames = Object.keys(COMMON_EDITORS_LINUX); for (let i$1 = 0; i$1 < processNames.length; i$1++) { const processName = processNames[i$1]; if (output.indexOf(processName) !== -1) return [COMMON_EDITORS_LINUX[processName]]; } } } catch (ignoreError) {} if (process.env.VISUAL) return [process.env.VISUAL]; else if (process.env.EDITOR) return [process.env.EDITOR]; return [null]; }; } }); //#endregion //#region ../../node_modules/.pnpm/launch-editor@2.10.0/node_modules/launch-editor/get-args.js var require_get_args = __commonJS({ "../../node_modules/.pnpm/launch-editor@2.10.0/node_modules/launch-editor/get-args.js"(exports, module) { const path$7 = require("path"); module.exports = function getArgumentsForPosition$1(editor, fileName, lineNumber, columnNumber = 1) { const editorBasename = path$7.basename(editor).replace(/\.(exe|cmd|bat)$/i, ""); switch (editorBasename) { case "atom": case "Atom": case "Atom Beta": case "subl": case "sublime": case "sublime_text": case "wstorm": case "charm": case "zed": return [`${fileName}:${lineNumber}:${columnNumber}`]; case "notepad++": return [ "-n" + lineNumber, "-c" + columnNumber, fileName ]; case "vim": case "mvim": return [`+call cursor(${lineNumber}, ${columnNumber})`, fileName]; case "joe": case "gvim": return [`+${lineNumber}`, fileName]; case "emacs": case "emacsclient": return [`+${lineNumber}:${columnNumber}`, fileName]; case "rmate": case "mate": case "mine": return [ "--line", lineNumber, fileName ]; case "code": case "Code": case "code-insiders": case "Code - Insiders": case "codium": case "cursor": case "vscodium": case "VSCodium": return [ "-r", "-g", `${fileName}:${lineNumber}:${columnNumber}` ]; case "appcode": case "clion": case "clion64": case "idea": case "idea64": case "phpstorm": case "phpstorm64": case "pycharm": case "pycharm64": case "rubymine": case "rubymine64": case "webstorm": case "webstorm64": case "goland": case "goland64": case "rider": case "rider64": return [ "--line", lineNumber, "--column", columnNumber, fileName ]; } if (process.env.LAUNCH_EDITOR) return [ fileName, lineNumber, columnNumber ]; return [fileName]; }; } }); //#endregion //#region ../../node_modules/.pnpm/launch-editor@2.10.0/node_modules/launch-editor/index.js var require_launch_editor = __commonJS({ "../../node_modules/.pnpm/launch-editor@2.10.0/node_modules/launch-editor/index.js"(exports, module) { /** * Copyright (c) 2015-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file at * https://github.com/facebookincubator/create-react-app/blob/master/LICENSE * * Modified by Yuxi Evan You */ const fs$6 = require("fs"); const os$1 = require("os"); const path$6 = require("path"); const colors$21 = require_picocolors(); const childProcess$1 = require("child_process"); const guessEditor = require_guess(); const getArgumentsForPosition = require_get_args(); function wrapErrorCallback(cb) { return (fileName, errorMessage) => { console.log(); console.log(colors$21.red("Could not open " + path$6.basename(fileName) + " in the editor.")); if (errorMessage) { if (errorMessage[errorMessage.length - 1] !== ".") errorMessage += "."; console.log(colors$21.red("The editor process exited with an error: " + errorMessage)); } console.log(); if (cb) cb(fileName, errorMessage); }; } function isTerminalEditor(editor) { switch (editor) { case "vim": case "emacs": case "nano": return true; } return false; } const positionRE = /:(\d+)(:(\d+))?$/; function parseFile(file) { if (file.startsWith("file://")) file = require("url").fileURLToPath(file); const fileName = file.replace(positionRE, ""); const match = file.match(positionRE); const lineNumber = match && match[1]; const columnNumber = match && match[3]; return { fileName, lineNumber, columnNumber }; } let _childProcess = null; function launchEditor(file, specifiedEditor, onErrorCallback) { const parsed = parseFile(file); let { fileName } = parsed; const { lineNumber, columnNumber } = parsed; if (!fs$6.existsSync(fileName)) return; if (typeof specifiedEditor === "function") { onErrorCallback = specifiedEditor; specifiedEditor = void 0; } onErrorCallback = wrapErrorCallback(onErrorCallback); const [editor, ...args] = guessEditor(specifiedEditor); if (!editor) { onErrorCallback(fileName, null); return; } if (process.platform === "linux" && fileName.startsWith("/mnt/") && /Microsoft/i.test(os$1.release())) fileName = path$6.relative("", fileName); if (lineNumber) { const extraArgs = getArgumentsForPosition(editor, fileName, lineNumber, columnNumber); args.push.apply(args, extraArgs); } else args.push(fileName); if (_childProcess && isTerminalEditor(editor)) _childProcess.kill("SIGKILL"); if (process.platform === "win32") { function escapeCmdArgs(cmdArgs) { return cmdArgs.replace(/([&|<>,;=^])/g, "^$1"); } function doubleQuoteIfNeeded(str) { if (str.includes("^")) return `^"${str}^"`; else if (str.includes(" ")) return `"${str}"`; return str; } const launchCommand = [editor, ...args.map(escapeCmdArgs)].map(doubleQuoteIfNeeded).join(" "); _childProcess = childProcess$1.exec(launchCommand, { stdio: "inherit", shell: true }); } else _childProcess = childProcess$1.spawn(editor, args, { stdio: "inherit" }); _childProcess.on("exit", function(errorCode) { _childProcess = null; if (errorCode) onErrorCallback(fileName, "(code " + errorCode + ")"); }); _childProcess.on("error", function(error$1) { let { code, message } = error$1; if ("ENOENT" === code) message = `${message} ('${editor}' command does not exist in 'PATH')`; onErrorCallback(fileName, message); }); } module.exports = launchEditor; } }); //#endregion //#region ../../node_modules/.pnpm/launch-editor-middleware@2.10.0/node_modules/launch-editor-middleware/index.js var require_launch_editor_middleware = __commonJS({ "../../node_modules/.pnpm/launch-editor-middleware@2.10.0/node_modules/launch-editor-middleware/index.js"(exports, module) { const url$3 = require("url"); const path$5 = require("path"); const launch = require_launch_editor(); module.exports = (specifiedEditor, srcRoot, onErrorCallback) => { if (typeof specifiedEditor === "function") { onErrorCallback = specifiedEditor; specifiedEditor = void 0; } if (typeof srcRoot === "function") { onErrorCallback = srcRoot; srcRoot = void 0; } srcRoot = srcRoot || process.cwd(); return function launchEditorMiddleware$1(req$4, res) { const { file } = url$3.parse(req$4.url, true).query || {}; if (!file) { res.statusCode = 500; res.end(`launch-editor-middleware: required query param "file" is missing.`); } else { launch(path$5.resolve(srcRoot, file), specifiedEditor, onErrorCallback); res.end(); } }; }; } }); //#endregion //#region src/node/http.ts var import_picocolors$20 = __toESM(require_picocolors(), 1); async function resolveHttpServer({ proxy }, app, httpsOptions) { if (!httpsOptions) { const { createServer: createServer$4 } = await import("node:http"); return createServer$4(app); } if (proxy) { const { createServer: createServer$4 } = await import("node:https"); return createServer$4(httpsOptions, app); } else { const { createSecureServer } = await import("node:http2"); return createSecureServer({ maxSessionMemory: 1e3, ...httpsOptions, allowHTTP1: true }, app); } } async function resolveHttpsConfig(https$4) { if (!https$4) return void 0; const [ca, cert, key, pfx] = await Promise.all([ readFileIfExists(https$4.ca), readFileIfExists(https$4.cert), readFileIfExists(https$4.key), readFileIfExists(https$4.pfx) ]); return { ...https$4, ca, cert, key, pfx }; } async function readFileIfExists(value$1) { if (typeof value$1 === "string") return fsp.readFile(path.resolve(value$1)).catch(() => value$1); return value$1; } async function httpServerStart(httpServer, serverOptions) { let { port, strictPort, host, logger } = serverOptions; return new Promise((resolve$4, reject) => { const onError$1 = (e$1) => { if (e$1.code === "EADDRINUSE") if (strictPort) { httpServer.removeListener("error", onError$1); reject(/* @__PURE__ */ new Error(`Port ${port} is already in use`)); } else { logger.info(`Port ${port} is in use, trying another one...`); httpServer.listen(++port, host); } else { httpServer.removeListener("error", onError$1); reject(e$1); } }; httpServer.on("error", onError$1); httpServer.listen(port, host, () => { httpServer.removeListener("error", onError$1); resolve$4(port); }); }); } function setClientErrorHandler(server, logger) { server.on("clientError", (err$2, socket) => { let msg = "400 Bad Request"; if (err$2.code === "HPE_HEADER_OVERFLOW") { msg = "431 Request Header Fields Too Large"; logger.warn(import_picocolors$20.default.yellow("Server responded with status code 431. See https://vite.dev/guide/troubleshooting.html#_431-request-header-fields-too-large.")); } if (err$2.code === "ECONNRESET" || !socket.writable) return; socket.end(`HTTP/1.1 ${msg}\r\n\r\n`); }); } //#endregion //#region src/node/ssr/ssrStacktrace.ts let offset; function calculateOffsetOnce() { if (offset !== void 0) return; try { new Function("throw new Error(1)")(); } catch (e$1) { const match = /:(\d+):\d+\)$/.exec(e$1.stack.split("\n")[1]); offset = match ? +match[1] - 1 : 0; } } function ssrRewriteStacktrace(stack, moduleGraph) { calculateOffsetOnce(); return stack.split("\n").map((line) => { return line.replace(/^ {4}at (?:(\S.*?)\s\()?(.+?):(\d+)(?::(\d+))?\)?/, (input, varName, id, line$1, column) => { if (!id) return input; const mod = moduleGraph.getModuleById(id); const rawSourceMap = mod?.transformResult?.map; if (!rawSourceMap) return input; const traced = new TraceMap(rawSourceMap); const pos = originalPositionFor(traced, { line: Number(line$1) - offset, column: Number(column) - 1 }); if (!pos.source) return input; const trimmedVarName = varName?.trim(); const sourceFile = path.resolve(path.dirname(id), pos.source); const source = `${sourceFile}:${pos.line}:${pos.column + 1}`; if (!trimmedVarName || trimmedVarName === "eval") return ` at ${source}`; else return ` at ${trimmedVarName} (${source})`; }); }).join("\n"); } function rebindErrorStacktrace(e$1, stacktrace) { const { configurable, writable } = Object.getOwnPropertyDescriptor(e$1, "stack"); if (configurable) Object.defineProperty(e$1, "stack", { value: stacktrace, enumerable: true, configurable: true, writable: true }); else if (writable) e$1.stack = stacktrace; } const rewroteStacktraces = /* @__PURE__ */ new WeakSet(); function ssrFixStacktrace(e$1, moduleGraph) { if (!e$1.stack) return; if (rewroteStacktraces.has(e$1)) return; const stacktrace = ssrRewriteStacktrace(e$1.stack, moduleGraph); rebindErrorStacktrace(e$1, stacktrace); rewroteStacktraces.add(e$1); } //#endregion //#region src/node/ssr/runtime/serverModuleRunner.ts function createHMROptions(environment, options$1) { if (environment.config.server.hmr === false || options$1.hmr === false) return false; if (!("api" in environment.hot)) return false; return { logger: options$1.hmr?.logger }; } const prepareStackTrace = { retrieveFile(id) { if (existsSync(id)) return readFileSync(id, "utf-8"); } }; function resolveSourceMapOptions(options$1) { if (options$1.sourcemapInterceptor != null) { if (options$1.sourcemapInterceptor === "prepareStackTrace") return prepareStackTrace; if (typeof options$1.sourcemapInterceptor === "object") return { ...prepareStackTrace, ...options$1.sourcemapInterceptor }; return options$1.sourcemapInterceptor; } if (typeof process !== "undefined" && "setSourceMapsEnabled" in process) return "node"; return prepareStackTrace; } const createServerModuleRunnerTransport = (options$1) => { const hmrClient = { send: (payload) => { if (payload.type !== "custom") throw new Error("Cannot send non-custom events from the client to the server."); options$1.channel.send(payload); } }; let handler; return { connect({ onMessage }) { options$1.channel.api.outsideEmitter.on("send", onMessage); onMessage({ type: "connected" }); handler = onMessage; }, disconnect() { if (handler) options$1.channel.api.outsideEmitter.off("send", handler); }, send(payload) { if (payload.type !== "custom") throw new Error("Cannot send non-custom events from the server to the client."); options$1.channel.api.innerEmitter.emit(payload.event, payload.data, hmrClient); } }; }; /** * Create an instance of the Vite SSR runtime that support HMR. * @experimental */ function createServerModuleRunner(environment, options$1 = {}) { const hmr = createHMROptions(environment, options$1); return new ModuleRunner({ ...options$1, transport: createServerModuleRunnerTransport({ channel: environment.hot }), hmr, sourcemapInterceptor: resolveSourceMapOptions(options$1) }, options$1.evaluator); } //#endregion //#region src/node/ssr/ssrModuleLoader.ts var import_picocolors$19 = __toESM(require_picocolors(), 1); async function ssrLoadModule(url$6, server, fixStacktrace) { const environment = server.environments.ssr; server._ssrCompatModuleRunner ||= new SSRCompatModuleRunner(environment); url$6 = unwrapId(url$6); return instantiateModule(url$6, server._ssrCompatModuleRunner, environment, fixStacktrace); } async function instantiateModule(url$6, runner, environment, fixStacktrace) { const mod = await environment.moduleGraph.ensureEntryFromUrl(url$6); if (mod.ssrError) throw mod.ssrError; try { return await runner.import(url$6); } catch (e$1) { if (e$1.stack && fixStacktrace) ssrFixStacktrace(e$1, environment.moduleGraph); environment.logger.error(buildErrorMessage(e$1, [import_picocolors$19.default.red(`Error when evaluating SSR module ${url$6}: ${e$1.message}`)]), { timestamp: true, clear: environment.config.clearScreen, error: e$1 }); throw e$1; } } var SSRCompatModuleRunner = class extends ModuleRunner { constructor(environment) { super({ transport: createServerModuleRunnerTransport({ channel: environment.hot }), sourcemapInterceptor: false, hmr: false }, new ESModulesEvaluator()); this.environment = environment; } async directRequest(url$6, mod, callstack) { const id = mod.meta && "id" in mod.meta && mod.meta.id; if (!id) return super.directRequest(url$6, mod, callstack); const viteMod = this.environment.moduleGraph.getModuleById(id); if (!viteMod) return super.directRequest(id, mod, callstack); try { const exports$1 = await super.directRequest(id, mod, callstack); viteMod.ssrModule = exports$1; return exports$1; } catch (err$2) { viteMod.ssrError = err$2; throw err$2; } } }; //#endregion //#region ../../node_modules/.pnpm/periscopic@4.0.2/node_modules/periscopic/src/index.js /** * @param {import('estree').Node} param * @returns {string[]} */ function extract_names(param) { return extract_identifiers(param).map((node) => node.name); } /** * @param {import('estree').Node} param * @param {import('estree').Identifier[]} nodes * @returns {import('estree').Identifier[]} */ function extract_identifiers(param, nodes = []) { switch (param.type) { case "Identifier": nodes.push(param); break; case "MemberExpression": let object = param; while (object.type === "MemberExpression") object = object.object; nodes.push(object); break; case "ObjectPattern": for (const prop of param.properties) if (prop.type === "RestElement") extract_identifiers(prop.argument, nodes); else extract_identifiers(prop.value, nodes); break; case "ArrayPattern": for (const element of param.elements) if (element) extract_identifiers(element, nodes); break; case "RestElement": extract_identifiers(param.argument, nodes); break; case "AssignmentPattern": extract_identifiers(param.left, nodes); break; } return nodes; } //#endregion //#region ../../node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/walker.js /** * @typedef { import('estree').Node} Node * @typedef {{ * skip: () => void; * remove: () => void; * replace: (node: Node) => void; * }} WalkerContext */ var WalkerBase = class { constructor() { /** @type {boolean} */ this.should_skip = false; /** @type {boolean} */ this.should_remove = false; /** @type {Node | null} */ this.replacement = null; /** @type {WalkerContext} */ this.context = { skip: () => this.should_skip = true, remove: () => this.should_remove = true, replace: (node) => this.replacement = node }; } /** * @template {Node} Parent * @param {Parent | null | undefined} parent * @param {keyof Parent | null | undefined} prop * @param {number | null | undefined} index * @param {Node} node */ replace(parent, prop, index, node) { if (parent && prop) if (index != null) /** @type {Array} */ parent[prop][index] = node; else /** @type {Node} */ parent[prop] = node; } /** * @template {Node} Parent * @param {Parent | null | undefined} parent * @param {keyof Parent | null | undefined} prop * @param {number | null | undefined} index */ remove(parent, prop, index) { if (parent && prop) if (index !== null && index !== void 0) /** @type {Array} */ parent[prop].splice(index, 1); else delete parent[prop]; } }; //#endregion //#region ../../node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js /** * @typedef { import('estree').Node} Node * @typedef { import('./walker.js').WalkerContext} WalkerContext * @typedef {( * this: WalkerContext, * node: Node, * parent: Node | null, * key: string | number | symbol | null | undefined, * index: number | null | undefined * ) => void} SyncHandler */ var SyncWalker = class extends WalkerBase { /** * * @param {SyncHandler} [enter] * @param {SyncHandler} [leave] */ constructor(enter, leave) { super(); /** @type {boolean} */ this.should_skip = false; /** @type {boolean} */ this.should_remove = false; /** @type {Node | null} */ this.replacement = null; /** @type {WalkerContext} */ this.context = { skip: () => this.should_skip = true, remove: () => this.should_remove = true, replace: (node) => this.replacement = node }; /** @type {SyncHandler | undefined} */ this.enter = enter; /** @type {SyncHandler | undefined} */ this.leave = leave; } /** * @template {Node} Parent * @param {Node} node * @param {Parent | null} parent * @param {keyof Parent} [prop] * @param {number | null} [index] * @returns {Node | null} */ visit(node, parent, prop, index) { if (node) { if (this.enter) { const _should_skip = this.should_skip; const _should_remove = this.should_remove; const _replacement = this.replacement; this.should_skip = false; this.should_remove = false; this.replacement = null; this.enter.call(this.context, node, parent, prop, index); if (this.replacement) { node = this.replacement; this.replace(parent, prop, index, node); } if (this.should_remove) this.remove(parent, prop, index); const skipped = this.should_skip; const removed = this.should_remove; this.should_skip = _should_skip; this.should_remove = _should_remove; this.replacement = _replacement; if (skipped) return node; if (removed) return null; } /** @type {keyof Node} */ let key; for (key in node) { /** @type {unknown} */ const value$1 = node[key]; if (value$1 && typeof value$1 === "object") { if (Array.isArray(value$1)) { const nodes = value$1; for (let i$1 = 0; i$1 < nodes.length; i$1 += 1) { const item = nodes[i$1]; if (isNode(item)) { if (!this.visit(item, node, key, i$1)) i$1--; } } } else if (isNode(value$1)) this.visit(value$1, node, key, null); } } if (this.leave) { const _replacement = this.replacement; const _should_remove = this.should_remove; this.replacement = null; this.should_remove = false; this.leave.call(this.context, node, parent, prop, index); if (this.replacement) { node = this.replacement; this.replace(parent, prop, index, node); } if (this.should_remove) this.remove(parent, prop, index); const removed = this.should_remove; this.replacement = _replacement; this.should_remove = _should_remove; if (removed) return null; } } return node; } }; /** * Ducktype a node. * * @param {unknown} value * @returns {value is Node} */ function isNode(value$1) { return value$1 !== null && typeof value$1 === "object" && "type" in value$1 && typeof value$1.type === "string"; } //#endregion //#region ../../node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/index.js /** * @typedef {import('estree').Node} Node * @typedef {import('./sync.js').SyncHandler} SyncHandler * @typedef {import('./async.js').AsyncHandler} AsyncHandler */ /** * @param {Node} ast * @param {{ * enter?: SyncHandler * leave?: SyncHandler * }} walker * @returns {Node | null} */ function walk(ast, { enter, leave }) { const instance = new SyncWalker(enter, leave); return instance.visit(ast, null); } //#endregion //#region src/node/ssr/ssrTransform.ts const ssrModuleExportsKey = `__vite_ssr_exports__`; const ssrImportKey = `__vite_ssr_import__`; const ssrDynamicImportKey = `__vite_ssr_dynamic_import__`; const ssrExportAllKey = `__vite_ssr_exportAll__`; const ssrExportNameKey = `__vite_ssr_exportName__`; const ssrImportMetaKey = `__vite_ssr_import_meta__`; const hashbangRE = /^#!.*\n/; async function ssrTransform(code, inMap, url$6, originalCode, options$1) { if (options$1?.json?.stringify && isJSONRequest(url$6)) return ssrTransformJSON(code, inMap); return ssrTransformScript(code, inMap, url$6, originalCode); } async function ssrTransformJSON(code, inMap) { return { code: code.replace("export default", `${ssrModuleExportsKey}.default =`), map: inMap, deps: [], dynamicDeps: [], ssr: true }; } async function ssrTransformScript(code, inMap, url$6, originalCode) { const s$2 = new MagicString(code); let ast; try { ast = await parseAstAsync(code); } catch (err$2) { if (err$2.code === "PARSE_ERROR") { err$2.message = `Parse failure: ${err$2.message}\n`; err$2.id = url$6; if (typeof err$2.pos === "number") { err$2.loc = numberToPos(code, err$2.pos); err$2.loc.file = url$6; err$2.frame = generateCodeFrame(code, err$2.pos); err$2.message += `At file: ${url$6}:${err$2.loc.line}:${err$2.loc.column}`; } else err$2.message += `At file: ${url$6}`; } throw err$2; } let uid = 0; const deps = /* @__PURE__ */ new Set(); const dynamicDeps = /* @__PURE__ */ new Set(); const idToImportMap = /* @__PURE__ */ new Map(); const declaredConst = /* @__PURE__ */ new Set(); const fileStartIndex = hashbangRE.exec(code)?.[0].length ?? 0; let hoistIndex = fileStartIndex; function defineImport(index, importNode, metadata) { const source = importNode.source.value; deps.add(source); const metadataArg = (metadata?.importedNames?.length ?? 0) > 0 ? `, ${JSON.stringify(metadata)}` : ""; const importId = `__vite_ssr_import_${uid++}__`; const transformedImport = `const ${importId} = await ${ssrImportKey}(${JSON.stringify(source)}${metadataArg});\n`; s$2.update(importNode.start, importNode.end, transformedImport); if (importNode.start === index) hoistIndex = importNode.end; else s$2.move(importNode.start, importNode.end, index); return importId; } function defineExport(name, local = name) { s$2.appendLeft(fileStartIndex, `${ssrExportNameKey}(${JSON.stringify(name)}, () => { try { return ${local} } catch {} });\n`); } const imports = []; const exports$1 = []; const reExportImportIdMap = /* @__PURE__ */ new Map(); for (const node of ast.body) if (node.type === "ImportDeclaration") imports.push(node); else if (node.type === "ExportDefaultDeclaration") exports$1.push(node); else if (node.type === "ExportNamedDeclaration" || node.type === "ExportAllDeclaration") { imports.push(node); exports$1.push(node); } for (const node of imports) { if (node.type === "ExportNamedDeclaration") { if (node.source) { const importId$1 = defineImport(hoistIndex, node, { importedNames: node.specifiers.map((s$3) => getIdentifierNameOrLiteralValue$1(s$3.local)) }); reExportImportIdMap.set(node, importId$1); } continue; } if (node.type === "ExportAllDeclaration") { if (node.source) { const importId$1 = defineImport(hoistIndex, node); reExportImportIdMap.set(node, importId$1); } continue; } const importId = defineImport(hoistIndex, node, { importedNames: node.specifiers.map((s$3) => { if (s$3.type === "ImportSpecifier") return getIdentifierNameOrLiteralValue$1(s$3.imported); else if (s$3.type === "ImportDefaultSpecifier") return "default"; }).filter(isDefined) }); for (const spec of node.specifiers) if (spec.type === "ImportSpecifier") if (spec.imported.type === "Identifier") idToImportMap.set(spec.local.name, `${importId}.${spec.imported.name}`); else idToImportMap.set(spec.local.name, `${importId}[${JSON.stringify(spec.imported.value)}]`); else if (spec.type === "ImportDefaultSpecifier") idToImportMap.set(spec.local.name, `${importId}.default`); else idToImportMap.set(spec.local.name, importId); } for (const node of exports$1) { if (node.type === "ExportNamedDeclaration") if (node.declaration) { if (node.declaration.type === "FunctionDeclaration" || node.declaration.type === "ClassDeclaration") defineExport(node.declaration.id.name); else for (const declaration of node.declaration.declarations) { const names = extract_names(declaration.id); for (const name of names) defineExport(name); } s$2.remove(node.start, node.declaration.start); } else if (node.source) { const importId = reExportImportIdMap.get(node); for (const spec of node.specifiers) { const exportedAs = getIdentifierNameOrLiteralValue$1(spec.exported); if (spec.local.type === "Identifier") defineExport(exportedAs, `${importId}.${spec.local.name}`); else defineExport(exportedAs, `${importId}[${JSON.stringify(spec.local.value)}]`); } } else { s$2.remove(node.start, node.end); for (const spec of node.specifiers) { const local = spec.local.name; const binding = idToImportMap.get(local); const exportedAs = getIdentifierNameOrLiteralValue$1(spec.exported); defineExport(exportedAs, binding || local); } } if (node.type === "ExportDefaultDeclaration") { const expressionTypes = ["FunctionExpression", "ClassExpression"]; if ("id" in node.declaration && node.declaration.id && !expressionTypes.includes(node.declaration.type)) { const { name } = node.declaration.id; s$2.remove(node.start, node.start + 15); defineExport("default", name); } else { const name = `__vite_ssr_export_default__`; s$2.update(node.start, node.start + 14, `const ${name} =`); defineExport("default", name); } } if (node.type === "ExportAllDeclaration") { const importId = reExportImportIdMap.get(node); if (node.exported) { const exportedAs = getIdentifierNameOrLiteralValue$1(node.exported); defineExport(exportedAs, `${importId}`); } else s$2.appendLeft(node.end, `${ssrExportAllKey}(${importId});\n`); } } walk$1(ast, { onStatements(statements) { for (let i$1 = 0; i$1 < statements.length - 1; i$1++) { const stmt = statements[i$1]; if (code[stmt.end - 1] !== ";" && stmt.type !== "FunctionDeclaration" && stmt.type !== "ClassDeclaration" && stmt.type !== "BlockStatement" && stmt.type !== "ImportDeclaration") s$2.appendLeft(stmt.end, ";"); } }, onIdentifier(id, parent, parentStack) { const grandparent = parentStack[1]; const binding = idToImportMap.get(id.name); if (!binding) return; if (isStaticProperty(parent) && parent.shorthand) { if (!isNodeInPattern(parent) || isInDestructuringAssignment(parent, parentStack)) s$2.appendLeft(id.end, `: ${binding}`); } else if (parent.type === "PropertyDefinition" && grandparent?.type === "ClassBody" || parent.type === "ClassDeclaration" && id === parent.superClass) { if (!declaredConst.has(id.name)) { declaredConst.add(id.name); const topNode = parentStack[parentStack.length - 2]; s$2.prependRight(topNode.start, `const ${id.name} = ${binding};\n`); } } else if (parent.type === "CallExpression") { s$2.update(id.start, id.end, binding); s$2.prependRight(id.start, `(0,`); s$2.appendLeft(id.end, `)`); } else if (!(parent.type === "ClassExpression" && id === parent.id)) s$2.update(id.start, id.end, binding); }, onImportMeta(node) { s$2.update(node.start, node.end, ssrImportMetaKey); }, onDynamicImport(node) { s$2.update(node.start, node.start + 6, ssrDynamicImportKey); if (node.type === "ImportExpression" && node.source.type === "Literal") dynamicDeps.add(node.source.value); } }); let map$1; if (inMap?.mappings === "") map$1 = inMap; else { map$1 = s$2.generateMap({ hires: "boundary" }); map$1.sources = [path.basename(url$6)]; map$1.sourcesContent = [originalCode]; if (inMap && inMap.mappings && "sources" in inMap && inMap.sources.length > 0) map$1 = combineSourcemaps(url$6, [map$1, inMap]); } return { code: s$2.toString(), map: map$1, ssr: true, deps: [...deps], dynamicDeps: [...dynamicDeps] }; } function getIdentifierNameOrLiteralValue$1(node) { return node.type === "Identifier" ? node.name : node.value; } const isNodeInPatternWeakSet = /* @__PURE__ */ new WeakSet(); const setIsNodeInPattern = (node) => isNodeInPatternWeakSet.add(node); const isNodeInPattern = (node) => isNodeInPatternWeakSet.has(node); /** * Same logic from \@vue/compiler-core & \@vue/compiler-sfc * Except this is using acorn AST */ function walk$1(root, { onIdentifier, onImportMeta, onDynamicImport, onStatements }) { const parentStack = []; const varKindStack = []; const scopeMap = /* @__PURE__ */ new WeakMap(); const identifiers = []; const setScope = (node, name) => { let scopeIds = scopeMap.get(node); if (scopeIds && scopeIds.has(name)) return; if (!scopeIds) { scopeIds = /* @__PURE__ */ new Set(); scopeMap.set(node, scopeIds); } scopeIds.add(name); }; function isInScope(name, parents) { return parents.some((node) => scopeMap.get(node)?.has(name)); } function handlePattern(p$1, parentScope) { if (p$1.type === "Identifier") setScope(parentScope, p$1.name); else if (p$1.type === "RestElement") handlePattern(p$1.argument, parentScope); else if (p$1.type === "ObjectPattern") p$1.properties.forEach((property) => { if (property.type === "RestElement") setScope(parentScope, property.argument.name); else handlePattern(property.value, parentScope); }); else if (p$1.type === "ArrayPattern") p$1.elements.forEach((element) => { if (element) handlePattern(element, parentScope); }); else if (p$1.type === "AssignmentPattern") handlePattern(p$1.left, parentScope); else setScope(parentScope, p$1.name); } walk(root, { enter(node, parent) { if (node.type === "ImportDeclaration") return this.skip(); if (node.type === "Program" || node.type === "BlockStatement" || node.type === "StaticBlock") onStatements(node.body); else if (node.type === "SwitchCase") onStatements(node.consequent); if (parent && !(parent.type === "IfStatement" && node === parent.alternate)) parentStack.unshift(parent); if (node.type === "VariableDeclaration") varKindStack.unshift(node.kind); if (node.type === "MetaProperty" && node.meta.name === "import") onImportMeta(node); else if (node.type === "ImportExpression") onDynamicImport(node); if (node.type === "Identifier") { if (!isInScope(node.name, parentStack) && isRefIdentifier(node, parent, parentStack)) identifiers.push([node, parentStack.slice(0)]); } else if (isFunction$1(node)) { if (node.type === "FunctionDeclaration") { const parentScope = findParentScope(parentStack); if (parentScope) setScope(parentScope, node.id.name); } if (node.type === "FunctionExpression" && node.id) setScope(node, node.id.name); node.params.forEach((p$1) => { if (p$1.type === "ObjectPattern" || p$1.type === "ArrayPattern") { handlePattern(p$1, node); return; } walk(p$1.type === "AssignmentPattern" ? p$1.left : p$1, { enter(child, parent$1) { if (parent$1?.type === "AssignmentPattern" && parent$1.right === child) return this.skip(); if (child.type !== "Identifier") return; if (isStaticPropertyKey(child, parent$1)) return; if (parent$1?.type === "TemplateLiteral" && parent$1.expressions.includes(child) || parent$1?.type === "CallExpression" && parent$1.callee === child) return; setScope(node, child.name); } }); }); } else if (node.type === "ClassDeclaration") { const parentScope = findParentScope(parentStack); if (parentScope) setScope(parentScope, node.id.name); } else if (node.type === "ClassExpression" && node.id) setScope(node, node.id.name); else if (node.type === "Property" && parent.type === "ObjectPattern") setIsNodeInPattern(node); else if (node.type === "VariableDeclarator") { const parentFunction = findParentScope(parentStack, varKindStack[0] === "var"); if (parentFunction) handlePattern(node.id, parentFunction); } else if (node.type === "CatchClause" && node.param) handlePattern(node.param, node); }, leave(node, parent) { if (parent && !(parent.type === "IfStatement" && node === parent.alternate)) parentStack.shift(); if (node.type === "VariableDeclaration") varKindStack.shift(); } }); identifiers.forEach(([node, stack]) => { if (!isInScope(node.name, stack)) onIdentifier(node, stack[0], stack); }); } function isRefIdentifier(id, parent, parentStack) { if (parent.type === "CatchClause" || (parent.type === "VariableDeclarator" || parent.type === "ClassDeclaration") && parent.id === id) return false; if (isFunction$1(parent)) { if (parent.id === id) return false; if (parent.params.includes(id)) return false; } if (parent.type === "MethodDefinition" && !parent.computed) return false; if (isStaticPropertyKey(id, parent)) return false; if (isNodeInPattern(parent) && parent.value === id) return false; if (parent.type === "ArrayPattern" && !isInDestructuringAssignment(parent, parentStack)) return false; if (parent.type === "MemberExpression" && parent.property === id && !parent.computed) return false; if (parent.type === "ExportSpecifier" || parent.type === "ExportAllDeclaration") return false; if (id.name === "arguments") return false; return true; } const isStaticProperty = (node) => node.type === "Property" && !node.computed; const isStaticPropertyKey = (node, parent) => parent && isStaticProperty(parent) && parent.key === node; const functionNodeTypeRE = /Function(?:Expression|Declaration)$|Method$/; function isFunction$1(node) { return functionNodeTypeRE.test(node.type); } const blockNodeTypeRE = /^BlockStatement$|^For(?:In|Of)?Statement$/; function isBlock(node) { return blockNodeTypeRE.test(node.type); } function findParentScope(parentStack, isVar = false) { return parentStack.find(isVar ? isFunction$1 : isBlock); } function isInDestructuringAssignment(parent, parentStack) { if (parent.type === "Property" || parent.type === "ArrayPattern") return parentStack.some((i$1) => i$1.type === "AssignmentExpression"); return false; } //#endregion //#region ../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.js let isDockerCached; function hasDockerEnv() { try { fs.statSync("/.dockerenv"); return true; } catch { return false; } } function hasDockerCGroup() { try { return fs.readFileSync("/proc/self/cgroup", "utf8").includes("docker"); } catch { return false; } } function isDocker() { if (isDockerCached === void 0) isDockerCached = hasDockerEnv() || hasDockerCGroup(); return isDockerCached; } //#endregion //#region ../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.js let cachedResult; const hasContainerEnv = () => { try { fs.statSync("/run/.containerenv"); return true; } catch { return false; } }; function isInsideContainer() { if (cachedResult === void 0) cachedResult = hasContainerEnv() || isDocker(); return cachedResult; } //#endregion //#region ../../node_modules/.pnpm/is-wsl@3.1.0/node_modules/is-wsl/index.js const isWsl = () => { if (process$1.platform !== "linux") return false; if (os.release().toLowerCase().includes("microsoft")) { if (isInsideContainer()) return false; return true; } try { return fs.readFileSync("/proc/version", "utf8").toLowerCase().includes("microsoft") ? !isInsideContainer() : false; } catch { return false; } }; var is_wsl_default = process$1.env.__IS_WSL_TEST__ ? isWsl : isWsl(); //#endregion //#region ../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js function defineLazyProperty(object, propertyName, valueGetter) { const define$1 = (value$1) => Object.defineProperty(object, propertyName, { value: value$1, enumerable: true, writable: true }); Object.defineProperty(object, propertyName, { configurable: true, enumerable: true, get() { const result = valueGetter(); define$1(result); return result; }, set(value$1) { define$1(value$1); } }); return object; } //#endregion //#region ../../node_modules/.pnpm/default-browser-id@5.0.0/node_modules/default-browser-id/index.js const execFileAsync$3 = promisify(execFile); async function defaultBrowserId() { if (process$1.platform !== "darwin") throw new Error("macOS only"); const { stdout } = await execFileAsync$3("defaults", [ "read", "com.apple.LaunchServices/com.apple.launchservices.secure", "LSHandlers" ]); const match = /LSHandlerRoleAll = "(?!-)(?[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout); return match?.groups.id ?? "com.apple.Safari"; } //#endregion //#region ../../node_modules/.pnpm/run-applescript@7.0.0/node_modules/run-applescript/index.js const execFileAsync$2 = promisify(execFile); async function runAppleScript(script, { humanReadableOutput = true } = {}) { if (process$1.platform !== "darwin") throw new Error("macOS only"); const outputArguments = humanReadableOutput ? [] : ["-ss"]; const { stdout } = await execFileAsync$2("osascript", [ "-e", script, outputArguments ]); return stdout.trim(); } //#endregion //#region ../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js async function bundleName(bundleId) { return runAppleScript(`tell application "Finder" to set app_path to application file id "${bundleId}" as string\ntell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`); } //#endregion //#region ../../node_modules/.pnpm/default-browser@5.2.1/node_modules/default-browser/windows.js const execFileAsync$1 = promisify(execFile); const windowsBrowserProgIds = { AppXq0fevzme2pys62n3e0fbqa7peapykr8v: { name: "Edge", id: "com.microsoft.edge.old" }, MSEdgeDHTML: { name: "Edge", id: "com.microsoft.edge" }, MSEdgeHTM: { name: "Edge", id: "com.microsoft.edge" }, "IE.HTTP": { name: "Internet Explorer", id: "com.microsoft.ie" }, FirefoxURL: { name: "Firefox", id: "org.mozilla.firefox" }, ChromeHTML: { name: "Chrome", id: "com.google.chrome" }, BraveHTML: { name: "Brave", id: "com.brave.Browser" }, BraveBHTML: { name: "Brave Beta", id: "com.brave.Browser.beta" }, BraveSSHTM: { name: "Brave Nightly", id: "com.brave.Browser.nightly" } }; var UnknownBrowserError = class extends Error {}; async function defaultBrowser$1(_execFileAsync = execFileAsync$1) { const { stdout } = await _execFileAsync("reg", [ "QUERY", " HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice", "/v", "ProgId" ]); const match = /ProgId\s*REG_SZ\s*(?\S+)/.exec(stdout); if (!match) throw new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`); const { id } = match.groups; const browser = windowsBrowserProgIds[id]; if (!browser) throw new UnknownBrowserError(`Unknown browser ID: ${id}`); return browser; } //#endregion //#region ../../node_modules/.pnpm/default-browser@5.2.1/node_modules/default-browser/index.js const execFileAsync = promisify(execFile); const titleize = (string) => string.toLowerCase().replaceAll(/(?:^|\s|-)\S/g, (x) => x.toUpperCase()); async function defaultBrowser() { if (process$1.platform === "darwin") { const id = await defaultBrowserId(); const name = await bundleName(id); return { name, id }; } if (process$1.platform === "linux") { const { stdout } = await execFileAsync("xdg-mime", [ "query", "default", "x-scheme-handler/http" ]); const id = stdout.trim(); const name = titleize(id.replace(/.desktop$/, "").replace("-", " ")); return { name, id }; } if (process$1.platform === "win32") return defaultBrowser$1(); throw new Error("Only macOS, Linux, and Windows are supported"); } //#endregion //#region ../../node_modules/.pnpm/open@10.1.2/node_modules/open/index.js const execFile$1 = util.promisify(childProcess.execFile); const __dirname = path.dirname(fileURLToPath(import.meta.url)); const localXdgOpenPath = path.join(__dirname, "xdg-open"); const { platform, arch } = process$1; /** Get the mount point for fixed drives in WSL. @inner @returns {string} The mount point. */ const getWslDrivesMountPoint = (() => { const defaultMountPoint = "/mnt/"; let mountPoint; return async function() { if (mountPoint) return mountPoint; const configFilePath = "/etc/wsl.conf"; let isConfigFileExists = false; try { await fsp.access(configFilePath, constants.F_OK); isConfigFileExists = true; } catch {} if (!isConfigFileExists) return defaultMountPoint; const configContent = await fsp.readFile(configFilePath, { encoding: "utf8" }); const configMountPoint = /(?.*)/g.exec(configContent); if (!configMountPoint) return defaultMountPoint; mountPoint = configMountPoint.groups.mountPoint.trim(); mountPoint = mountPoint.endsWith("/") ? mountPoint : `${mountPoint}/`; return mountPoint; }; })(); /** Get the PowerShell executable path in WSL environment. @returns {Promise} The absolute path to the PowerShell executable in WSL. */ const getPowershellPathFromWsl = async () => { const mountPoint = await getWslDrivesMountPoint(); return `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`; }; /** Get the default browser name in Windows from WSL. @returns {Promise} Browser name. */ async function getWindowsDefaultBrowserFromWsl() { const powershellPath = await getPowershellPathFromWsl(); const rawCommand = "(Get-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\").ProgId"; const encodedCommand = Buffer$1.from(rawCommand, "utf16le").toString("base64"); const { stdout } = await execFile$1(powershellPath, [ "-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-EncodedCommand", encodedCommand ], { encoding: "utf8" }); const progId = stdout.trim(); const browserMap = { ChromeHTML: "com.google.chrome", MSEdgeHTM: "com.microsoft.edge", FirefoxURL: "org.mozilla.firefox" }; return browserMap[progId] ? { id: browserMap[progId] } : {}; } const pTryEach = async (array, mapper) => { let latestError; for (const item of array) try { return await mapper(item); } catch (error$1) { latestError = error$1; } throw latestError; }; const baseOpen = async (options$1) => { options$1 = { wait: false, background: false, newInstance: false, allowNonzeroExitCode: false, ...options$1 }; if (Array.isArray(options$1.app)) return pTryEach(options$1.app, (singleApp) => baseOpen({ ...options$1, app: singleApp })); let { name: app, arguments: appArguments = [] } = options$1.app ?? {}; appArguments = [...appArguments]; if (Array.isArray(app)) return pTryEach(app, (appName) => baseOpen({ ...options$1, app: { name: appName, arguments: appArguments } })); if (app === "browser" || app === "browserPrivate") { const ids = { "com.google.chrome": "chrome", "google-chrome.desktop": "chrome", "org.mozilla.firefox": "firefox", "firefox.desktop": "firefox", "com.microsoft.msedge": "edge", "com.microsoft.edge": "edge", "com.microsoft.edgemac": "edge", "microsoft-edge.desktop": "edge" }; const flags = { chrome: "--incognito", firefox: "--private-window", edge: "--inPrivate" }; const browser = is_wsl_default ? await getWindowsDefaultBrowserFromWsl() : await defaultBrowser(); if (browser.id in ids) { const browserName = ids[browser.id]; if (app === "browserPrivate") appArguments.push(flags[browserName]); return baseOpen({ ...options$1, app: { name: apps[browserName], arguments: appArguments } }); } throw new Error(`${browser.name} is not supported as a default browser`); } let command; const cliArguments = []; const childProcessOptions = {}; if (platform === "darwin") { command = "open"; if (options$1.wait) cliArguments.push("--wait-apps"); if (options$1.background) cliArguments.push("--background"); if (options$1.newInstance) cliArguments.push("--new"); if (app) cliArguments.push("-a", app); } else if (platform === "win32" || is_wsl_default && !isInsideContainer() && !app) { command = is_wsl_default ? await getPowershellPathFromWsl() : `${process$1.env.SYSTEMROOT || process$1.env.windir || "C:\\Windows"}\\System32\\WindowsPowerShell\\v1.0\\powershell`; cliArguments.push("-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-EncodedCommand"); if (!is_wsl_default) childProcessOptions.windowsVerbatimArguments = true; const encodedArguments = ["Start"]; if (options$1.wait) encodedArguments.push("-Wait"); if (app) { encodedArguments.push(`"\`"${app}\`""`); if (options$1.target) appArguments.push(options$1.target); } else if (options$1.target) encodedArguments.push(`"${options$1.target}"`); if (appArguments.length > 0) { appArguments = appArguments.map((argument) => `"\`"${argument}\`""`); encodedArguments.push("-ArgumentList", appArguments.join(",")); } options$1.target = Buffer$1.from(encodedArguments.join(" "), "utf16le").toString("base64"); } else { if (app) command = app; else { const isBundled = !__dirname || __dirname === "/"; let exeLocalXdgOpen = false; try { await fsp.access(localXdgOpenPath, constants.X_OK); exeLocalXdgOpen = true; } catch {} const useSystemXdgOpen = process$1.versions.electron ?? (platform === "android" || isBundled || !exeLocalXdgOpen); command = useSystemXdgOpen ? "xdg-open" : localXdgOpenPath; } if (appArguments.length > 0) cliArguments.push(...appArguments); if (!options$1.wait) { childProcessOptions.stdio = "ignore"; childProcessOptions.detached = true; } } if (platform === "darwin" && appArguments.length > 0) cliArguments.push("--args", ...appArguments); if (options$1.target) cliArguments.push(options$1.target); const subprocess = childProcess.spawn(command, cliArguments, childProcessOptions); if (options$1.wait) return new Promise((resolve$4, reject) => { subprocess.once("error", reject); subprocess.once("close", (exitCode) => { if (!options$1.allowNonzeroExitCode && exitCode > 0) { reject(/* @__PURE__ */ new Error(`Exited with code ${exitCode}`)); return; } resolve$4(subprocess); }); }); subprocess.unref(); return subprocess; }; const open = (target, options$1) => { if (typeof target !== "string") throw new TypeError("Expected a `target`"); return baseOpen({ ...options$1, target }); }; function detectArchBinary(binary) { if (typeof binary === "string" || Array.isArray(binary)) return binary; const { [arch]: archBinary } = binary; if (!archBinary) throw new Error(`${arch} is not supported`); return archBinary; } function detectPlatformBinary({ [platform]: platformBinary }, { wsl }) { if (wsl && is_wsl_default) return detectArchBinary(wsl); if (!platformBinary) throw new Error(`${platform} is not supported`); return detectArchBinary(platformBinary); } const apps = {}; defineLazyProperty(apps, "chrome", () => detectPlatformBinary({ darwin: "google chrome", win32: "chrome", linux: [ "google-chrome", "google-chrome-stable", "chromium" ] }, { wsl: { ia32: "/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe", x64: ["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe", "/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"] } })); defineLazyProperty(apps, "firefox", () => detectPlatformBinary({ darwin: "firefox", win32: "C:\\Program Files\\Mozilla Firefox\\firefox.exe", linux: "firefox" }, { wsl: "/mnt/c/Program Files/Mozilla Firefox/firefox.exe" })); defineLazyProperty(apps, "edge", () => detectPlatformBinary({ darwin: "microsoft edge", win32: "msedge", linux: ["microsoft-edge", "microsoft-edge-dev"] }, { wsl: "/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe" })); defineLazyProperty(apps, "browser", () => "browser"); defineLazyProperty(apps, "browserPrivate", () => "browserPrivate"); var open_default = open; //#endregion //#region ../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.js var require_windows = __commonJS({ "../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.js"(exports, module) { module.exports = isexe$3; isexe$3.sync = sync$2; var fs$5 = require("fs"); function checkPathExt(path$13, options$1) { var pathext = options$1.pathExt !== void 0 ? options$1.pathExt : process.env.PATHEXT; if (!pathext) return true; pathext = pathext.split(";"); if (pathext.indexOf("") !== -1) return true; for (var i$1 = 0; i$1 < pathext.length; i$1++) { var p$1 = pathext[i$1].toLowerCase(); if (p$1 && path$13.substr(-p$1.length).toLowerCase() === p$1) return true; } return false; } function checkStat$1(stat$4, path$13, options$1) { if (!stat$4.isSymbolicLink() && !stat$4.isFile()) return false; return checkPathExt(path$13, options$1); } function isexe$3(path$13, options$1, cb) { fs$5.stat(path$13, function(er, stat$4) { cb(er, er ? false : checkStat$1(stat$4, path$13, options$1)); }); } function sync$2(path$13, options$1) { return checkStat$1(fs$5.statSync(path$13), path$13, options$1); } } }); //#endregion //#region ../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.js var require_mode = __commonJS({ "../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.js"(exports, module) { module.exports = isexe$2; isexe$2.sync = sync$1; var fs$4 = require("fs"); function isexe$2(path$13, options$1, cb) { fs$4.stat(path$13, function(er, stat$4) { cb(er, er ? false : checkStat(stat$4, options$1)); }); } function sync$1(path$13, options$1) { return checkStat(fs$4.statSync(path$13), options$1); } function checkStat(stat$4, options$1) { return stat$4.isFile() && checkMode(stat$4, options$1); } function checkMode(stat$4, options$1) { var mod = stat$4.mode; var uid = stat$4.uid; var gid = stat$4.gid; var myUid = options$1.uid !== void 0 ? options$1.uid : process.getuid && process.getuid(); var myGid = options$1.gid !== void 0 ? options$1.gid : process.getgid && process.getgid(); var u = parseInt("100", 8); var g = parseInt("010", 8); var o$1 = parseInt("001", 8); var ug = u | g; var ret = mod & o$1 || mod & g && gid === myGid || mod & u && uid === myUid || mod & ug && myUid === 0; return ret; } } }); //#endregion //#region ../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js var require_isexe = __commonJS({ "../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js"(exports, module) { var fs$3 = require("fs"); var core; if (process.platform === "win32" || global.TESTING_WINDOWS) core = require_windows(); else core = require_mode(); module.exports = isexe$1; isexe$1.sync = sync; function isexe$1(path$13, options$1, cb) { if (typeof options$1 === "function") { cb = options$1; options$1 = {}; } if (!cb) { if (typeof Promise !== "function") throw new TypeError("callback not provided"); return new Promise(function(resolve$4, reject) { isexe$1(path$13, options$1 || {}, function(er, is) { if (er) reject(er); else resolve$4(is); }); }); } core(path$13, options$1 || {}, function(er, is) { if (er) { if (er.code === "EACCES" || options$1 && options$1.ignoreErrors) { er = null; is = false; } } cb(er, is); }); } function sync(path$13, options$1) { try { return core.sync(path$13, options$1 || {}); } catch (er) { if (options$1 && options$1.ignoreErrors || er.code === "EACCES") return false; else throw er; } } } }); //#endregion //#region ../../node_modules/.pnpm/which@2.0.2/node_modules/which/which.js var require_which = __commonJS({ "../../node_modules/.pnpm/which@2.0.2/node_modules/which/which.js"(exports, module) { const isWindows$1 = process.platform === "win32" || process.env.OSTYPE === "cygwin" || process.env.OSTYPE === "msys"; const path$4 = require("path"); const COLON = isWindows$1 ? ";" : ":"; const isexe = require_isexe(); const getNotFoundError = (cmd) => Object.assign(/* @__PURE__ */ new Error(`not found: ${cmd}`), { code: "ENOENT" }); const getPathInfo = (cmd, opt) => { const colon = opt.colon || COLON; const pathEnv = cmd.match(/\//) || isWindows$1 && cmd.match(/\\/) ? [""] : [...isWindows$1 ? [process.cwd()] : [], ...(opt.path || process.env.PATH || "").split(colon)]; const pathExtExe = isWindows$1 ? opt.pathExt || process.env.PATHEXT || ".EXE;.CMD;.BAT;.COM" : ""; const pathExt = isWindows$1 ? pathExtExe.split(colon) : [""]; if (isWindows$1) { if (cmd.indexOf(".") !== -1 && pathExt[0] !== "") pathExt.unshift(""); } return { pathEnv, pathExt, pathExtExe }; }; const which$1 = (cmd, opt, cb) => { if (typeof opt === "function") { cb = opt; opt = {}; } if (!opt) opt = {}; const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt); const found$1 = []; const step = (i$1) => new Promise((resolve$4, reject) => { if (i$1 === pathEnv.length) return opt.all && found$1.length ? resolve$4(found$1) : reject(getNotFoundError(cmd)); const ppRaw = pathEnv[i$1]; const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw; const pCmd = path$4.join(pathPart, cmd); const p$1 = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd; resolve$4(subStep(p$1, i$1, 0)); }); const subStep = (p$1, i$1, ii) => new Promise((resolve$4, reject) => { if (ii === pathExt.length) return resolve$4(step(i$1 + 1)); const ext = pathExt[ii]; isexe(p$1 + ext, { pathExt: pathExtExe }, (er, is) => { if (!er && is) if (opt.all) found$1.push(p$1 + ext); else return resolve$4(p$1 + ext); return resolve$4(subStep(p$1, i$1, ii + 1)); }); }); return cb ? step(0).then((res) => cb(null, res), cb) : step(0); }; const whichSync = (cmd, opt) => { opt = opt || {}; const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt); const found$1 = []; for (let i$1 = 0; i$1 < pathEnv.length; i$1++) { const ppRaw = pathEnv[i$1]; const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw; const pCmd = path$4.join(pathPart, cmd); const p$1 = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd; for (let j = 0; j < pathExt.length; j++) { const cur = p$1 + pathExt[j]; try { const is = isexe.sync(cur, { pathExt: pathExtExe }); if (is) if (opt.all) found$1.push(cur); else return cur; } catch (ex) {} } } if (opt.all && found$1.length) return found$1; if (opt.nothrow) return null; throw getNotFoundError(cmd); }; module.exports = which$1; which$1.sync = whichSync; } }); //#endregion //#region ../../node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.js var require_path_key = __commonJS({ "../../node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.js"(exports, module) { const pathKey = (options$1 = {}) => { const environment = options$1.env || process.env; const platform$2 = options$1.platform || process.platform; if (platform$2 !== "win32") return "PATH"; return Object.keys(environment).reverse().find((key) => key.toUpperCase() === "PATH") || "Path"; }; module.exports = pathKey; module.exports.default = pathKey; } }); //#endregion //#region ../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.js var require_resolveCommand = __commonJS({ "../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.js"(exports, module) { const path$3 = require("path"); const which = require_which(); const getPathKey = require_path_key(); function resolveCommandAttempt(parsed, withoutPathExt) { const env$2 = parsed.options.env || process.env; const cwd = process.cwd(); const hasCustomCwd = parsed.options.cwd != null; const shouldSwitchCwd = hasCustomCwd && process.chdir !== void 0 && !process.chdir.disabled; if (shouldSwitchCwd) try { process.chdir(parsed.options.cwd); } catch (err$2) {} let resolved; try { resolved = which.sync(parsed.command, { path: env$2[getPathKey({ env: env$2 })], pathExt: withoutPathExt ? path$3.delimiter : void 0 }); } catch (e$1) {} finally { if (shouldSwitchCwd) process.chdir(cwd); } if (resolved) resolved = path$3.resolve(hasCustomCwd ? parsed.options.cwd : "", resolved); return resolved; } function resolveCommand$1(parsed) { return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true); } module.exports = resolveCommand$1; } }); //#endregion //#region ../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.js var require_escape = __commonJS({ "../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.js"(exports, module) { const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g; function escapeCommand(arg) { arg = arg.replace(metaCharsRegExp, "^$1"); return arg; } function escapeArgument(arg, doubleEscapeMetaChars) { arg = `${arg}`; arg = arg.replace(/(?=(\\+?)?)\1"/g, "$1$1\\\""); arg = arg.replace(/(?=(\\+?)?)\1$/, "$1$1"); arg = `"${arg}"`; arg = arg.replace(metaCharsRegExp, "^$1"); if (doubleEscapeMetaChars) arg = arg.replace(metaCharsRegExp, "^$1"); return arg; } module.exports.command = escapeCommand; module.exports.argument = escapeArgument; } }); //#endregion //#region ../../node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.js var require_shebang_regex = __commonJS({ "../../node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.js"(exports, module) { module.exports = /^#!(.*)/; } }); //#endregion //#region ../../node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.js var require_shebang_command = __commonJS({ "../../node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.js"(exports, module) { const shebangRegex = require_shebang_regex(); module.exports = (string = "") => { const match = string.match(shebangRegex); if (!match) return null; const [path$13, argument] = match[0].replace(/#! ?/, "").split(" "); const binary = path$13.split("/").pop(); if (binary === "env") return argument; return argument ? `${binary} ${argument}` : binary; }; } }); //#endregion //#region ../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.js var require_readShebang = __commonJS({ "../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.js"(exports, module) { const fs$2 = require("fs"); const shebangCommand = require_shebang_command(); function readShebang$1(command) { const size = 150; const buffer = Buffer.alloc(size); let fd$1; try { fd$1 = fs$2.openSync(command, "r"); fs$2.readSync(fd$1, buffer, 0, size, 0); fs$2.closeSync(fd$1); } catch (e$1) {} return shebangCommand(buffer.toString()); } module.exports = readShebang$1; } }); //#endregion //#region ../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.js var require_parse = __commonJS({ "../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.js"(exports, module) { const path$2 = require("path"); const resolveCommand = require_resolveCommand(); const escape$1 = require_escape(); const readShebang = require_readShebang(); const isWin$1 = process.platform === "win32"; const isExecutableRegExp = /\.(?:com|exe)$/i; const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i; function detectShebang(parsed) { parsed.file = resolveCommand(parsed); const shebang = parsed.file && readShebang(parsed.file); if (shebang) { parsed.args.unshift(parsed.file); parsed.command = shebang; return resolveCommand(parsed); } return parsed.file; } function parseNonShell(parsed) { if (!isWin$1) return parsed; const commandFile = detectShebang(parsed); const needsShell = !isExecutableRegExp.test(commandFile); if (parsed.options.forceShell || needsShell) { const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile); parsed.command = path$2.normalize(parsed.command); parsed.command = escape$1.command(parsed.command); parsed.args = parsed.args.map((arg) => escape$1.argument(arg, needsDoubleEscapeMetaChars)); const shellCommand = [parsed.command].concat(parsed.args).join(" "); parsed.args = [ "/d", "/s", "/c", `"${shellCommand}"` ]; parsed.command = process.env.comspec || "cmd.exe"; parsed.options.windowsVerbatimArguments = true; } return parsed; } function parse$6(command, args, options$1) { if (args && !Array.isArray(args)) { options$1 = args; args = null; } args = args ? args.slice(0) : []; options$1 = Object.assign({}, options$1); const parsed = { command, args, options: options$1, file: void 0, original: { command, args } }; return options$1.shell ? parsed : parseNonShell(parsed); } module.exports = parse$6; } }); //#endregion //#region ../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.js var require_enoent = __commonJS({ "../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.js"(exports, module) { const isWin = process.platform === "win32"; function notFoundError(original, syscall) { return Object.assign(/* @__PURE__ */ new Error(`${syscall} ${original.command} ENOENT`), { code: "ENOENT", errno: "ENOENT", syscall: `${syscall} ${original.command}`, path: original.command, spawnargs: original.args }); } function hookChildProcess(cp$1, parsed) { if (!isWin) return; const originalEmit = cp$1.emit; cp$1.emit = function(name, arg1) { if (name === "exit") { const err$2 = verifyENOENT(arg1, parsed); if (err$2) return originalEmit.call(cp$1, "error", err$2); } return originalEmit.apply(cp$1, arguments); }; } function verifyENOENT(status$1, parsed) { if (isWin && status$1 === 1 && !parsed.file) return notFoundError(parsed.original, "spawn"); return null; } function verifyENOENTSync(status$1, parsed) { if (isWin && status$1 === 1 && !parsed.file) return notFoundError(parsed.original, "spawnSync"); return null; } module.exports = { hookChildProcess, verifyENOENT, verifyENOENTSync, notFoundError }; } }); //#endregion //#region ../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/index.js var require_cross_spawn = __commonJS({ "../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/index.js"(exports, module) { const cp = require("child_process"); const parse$5 = require_parse(); const enoent = require_enoent(); function spawn$1(command, args, options$1) { const parsed = parse$5(command, args, options$1); const spawned = cp.spawn(parsed.command, parsed.args, parsed.options); enoent.hookChildProcess(spawned, parsed); return spawned; } function spawnSync(command, args, options$1) { const parsed = parse$5(command, args, options$1); const result = cp.spawnSync(parsed.command, parsed.args, parsed.options); result.error = result.error || enoent.verifyENOENTSync(result.status, parsed); return result; } module.exports = spawn$1; module.exports.spawn = spawn$1; module.exports.sync = spawnSync; module.exports._parse = parse$5; module.exports._enoent = enoent; } }); //#endregion //#region src/node/server/openBrowser.ts var import_cross_spawn = __toESM(require_cross_spawn(), 1); var import_picocolors$18 = __toESM(require_picocolors(), 1); /** * Reads the BROWSER environment variable and decides what to do with it. */ function openBrowser(url$6, opt, logger) { const browser = typeof opt === "string" ? opt : process.env.BROWSER || ""; if (browser.toLowerCase().endsWith(".js")) executeNodeScript(browser, url$6, logger); else if (browser.toLowerCase() !== "none") { const browserArgs = process.env.BROWSER_ARGS ? process.env.BROWSER_ARGS.split(" ") : []; startBrowserProcess(browser, browserArgs, url$6, logger); } } function executeNodeScript(scriptPath, url$6, logger) { const extraArgs = process.argv.slice(2); const child = (0, import_cross_spawn.default)(process.execPath, [ scriptPath, ...extraArgs, url$6 ], { stdio: "inherit" }); child.on("close", (code) => { if (code !== 0) logger.error(import_picocolors$18.default.red(`\nThe script specified as BROWSER environment variable failed.\n\n${import_picocolors$18.default.cyan(scriptPath)} exited with code ${code}.`), { error: null }); }); } const supportedChromiumBrowsers = [ "Google Chrome Canary", "Google Chrome Dev", "Google Chrome Beta", "Google Chrome", "Microsoft Edge", "Brave Browser", "Vivaldi", "Chromium" ]; async function startBrowserProcess(browser, browserArgs, url$6, logger) { const preferredOSXBrowser = browser === "google chrome" ? "Google Chrome" : browser; const shouldTryOpenChromeWithAppleScript = process.platform === "darwin" && (!preferredOSXBrowser || supportedChromiumBrowsers.includes(preferredOSXBrowser)); if (shouldTryOpenChromeWithAppleScript) try { const ps = await execAsync("ps cax"); const openedBrowser = preferredOSXBrowser && ps.includes(preferredOSXBrowser) ? preferredOSXBrowser : supportedChromiumBrowsers.find((b) => ps.includes(b)); if (openedBrowser) { await execAsync(`osascript openChrome.applescript "${url$6}" "${openedBrowser}"`, { cwd: join(VITE_PACKAGE_DIR, "bin") }); return true; } } catch {} if (process.platform === "darwin" && browser === "open") browser = void 0; try { const options$1 = browser ? { app: { name: browser, arguments: browserArgs } } : {}; new Promise((_, reject) => { open_default(url$6, options$1).then((subprocess) => { subprocess.on("error", reject); }).catch(reject); }).catch((err$2) => { logger.error(err$2.stack || err$2.message); }); return true; } catch { return false; } } function execAsync(command, options$1) { return new Promise((resolve$4, reject) => { exec(command, options$1, (error$1, stdout) => { if (error$1) reject(error$1); else resolve$4(stdout.toString()); }); }); } //#endregion //#region src/node/shortcuts.ts var import_picocolors$17 = __toESM(require_picocolors(), 1); function bindCLIShortcuts(server, opts) { if (!server.httpServer || !process.stdin.isTTY || process.env.CI) return; const isDev = isDevServer(server); if (isDev) server._shortcutsOptions = opts; if (opts?.print) server.config.logger.info(import_picocolors$17.default.dim(import_picocolors$17.default.green(" ➜")) + import_picocolors$17.default.dim(" press ") + import_picocolors$17.default.bold("h + enter") + import_picocolors$17.default.dim(" to show help")); const shortcuts = (opts?.customShortcuts ?? []).concat(isDev ? BASE_DEV_SHORTCUTS : BASE_PREVIEW_SHORTCUTS); let actionRunning = false; const onInput = async (input) => { if (actionRunning) return; if (input === "h") { const loggedKeys = /* @__PURE__ */ new Set(); server.config.logger.info("\n Shortcuts"); for (const shortcut$1 of shortcuts) { if (loggedKeys.has(shortcut$1.key)) continue; loggedKeys.add(shortcut$1.key); if (shortcut$1.action == null) continue; server.config.logger.info(import_picocolors$17.default.dim(" press ") + import_picocolors$17.default.bold(`${shortcut$1.key} + enter`) + import_picocolors$17.default.dim(` to ${shortcut$1.description}`)); } return; } const shortcut = shortcuts.find((shortcut$1) => shortcut$1.key === input); if (!shortcut || shortcut.action == null) return; actionRunning = true; await shortcut.action(server); actionRunning = false; }; const rl = readline.createInterface({ input: process.stdin }); rl.on("line", onInput); server.httpServer.on("close", () => rl.close()); } const BASE_DEV_SHORTCUTS = [ { key: "r", description: "restart the server", async action(server) { await restartServerWithUrls(server); } }, { key: "u", description: "show server url", action(server) { server.config.logger.info(""); server.printUrls(); } }, { key: "o", description: "open in browser", action(server) { server.openBrowser(); } }, { key: "c", description: "clear console", action(server) { server.config.logger.clearScreen("error"); } }, { key: "q", description: "quit", async action(server) { try { await server.close(); } finally { process.exit(); } } } ]; const BASE_PREVIEW_SHORTCUTS = [{ key: "o", description: "open in browser", action(server) { const url$6 = server.resolvedUrls?.local[0] ?? server.resolvedUrls?.network[0]; if (url$6) openBrowser(url$6, true, server.config.logger); else server.config.logger.warn("No URL available to open in browser"); } }, { key: "q", description: "quit", async action(server) { try { await server.close(); } finally { process.exit(); } } }]; //#endregion //#region src/node/watch.ts var import_picocolors$16 = __toESM(require_picocolors(), 1); function getResolvedOutDirs(root, outDir, outputOptions) { const resolvedOutDir = path.resolve(root, outDir); if (!outputOptions) return new Set([resolvedOutDir]); return new Set(arraify(outputOptions).map(({ dir }) => dir ? path.resolve(root, dir) : resolvedOutDir)); } function resolveEmptyOutDir(emptyOutDir, root, outDirs, logger) { if (emptyOutDir != null) return emptyOutDir; for (const outDir of outDirs) if (!normalizePath(outDir).startsWith(withTrailingSlash(root))) { logger?.warn(import_picocolors$16.default.yellow(`\n${import_picocolors$16.default.bold(`(!)`)} outDir ${import_picocolors$16.default.white(import_picocolors$16.default.dim(outDir))} is not inside project root and will not be emptied.\nUse --emptyOutDir to override.\n`)); return false; } return true; } function resolveChokidarOptions(options$1, resolvedOutDirs, emptyOutDir, cacheDir) { const { ignored: ignoredList,...otherOptions } = options$1 ?? {}; const ignored = [ "**/.git/**", "**/node_modules/**", "**/test-results/**", escapePath(cacheDir) + "/**", ...arraify(ignoredList || []) ]; if (emptyOutDir) ignored.push(...[...resolvedOutDirs].map((outDir) => escapePath(outDir) + "/**")); const resolvedWatchOptions = { ignored, ignoreInitial: true, ignorePermissionErrors: true, ...otherOptions }; return resolvedWatchOptions; } var NoopWatcher = class extends EventEmitter { constructor(options$1) { super(); this.options = options$1; } add() { return this; } unwatch() { return this; } getWatched() { return {}; } ref() { return this; } unref() { return this; } async close() {} }; function createNoopWatcher(options$1) { return new NoopWatcher(options$1); } //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/constants.js var require_constants$1 = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/constants.js"(exports, module) { const BINARY_TYPES$2 = [ "nodebuffer", "arraybuffer", "fragments" ]; const hasBlob$1 = typeof Blob !== "undefined"; if (hasBlob$1) BINARY_TYPES$2.push("blob"); module.exports = { BINARY_TYPES: BINARY_TYPES$2, EMPTY_BUFFER: Buffer.alloc(0), GUID: "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", hasBlob: hasBlob$1, kForOnEventAttribute: Symbol("kIsForOnEventAttribute"), kListener: Symbol("kListener"), kStatusCode: Symbol("status-code"), kWebSocket: Symbol("websocket"), NOOP: () => {} }; } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/buffer-util.js var require_buffer_util = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/buffer-util.js"(exports, module) { const { EMPTY_BUFFER: EMPTY_BUFFER$3 } = require_constants$1(); const FastBuffer$2 = Buffer[Symbol.species]; /** * Merges an array of buffers into a new buffer. * * @param {Buffer[]} list The array of buffers to concat * @param {Number} totalLength The total length of buffers in the list * @return {Buffer} The resulting buffer * @public */ function concat$1(list, totalLength) { if (list.length === 0) return EMPTY_BUFFER$3; if (list.length === 1) return list[0]; const target = Buffer.allocUnsafe(totalLength); let offset$1 = 0; for (let i$1 = 0; i$1 < list.length; i$1++) { const buf = list[i$1]; target.set(buf, offset$1); offset$1 += buf.length; } if (offset$1 < totalLength) return new FastBuffer$2(target.buffer, target.byteOffset, offset$1); return target; } /** * Masks a buffer using the given mask. * * @param {Buffer} source The buffer to mask * @param {Buffer} mask The mask to use * @param {Buffer} output The buffer where to store the result * @param {Number} offset The offset at which to start writing * @param {Number} length The number of bytes to mask. * @public */ function _mask(source, mask, output, offset$1, length) { for (let i$1 = 0; i$1 < length; i$1++) output[offset$1 + i$1] = source[i$1] ^ mask[i$1 & 3]; } /** * Unmasks a buffer using the given mask. * * @param {Buffer} buffer The buffer to unmask * @param {Buffer} mask The mask to use * @public */ function _unmask(buffer, mask) { for (let i$1 = 0; i$1 < buffer.length; i$1++) buffer[i$1] ^= mask[i$1 & 3]; } /** * Converts a buffer to an `ArrayBuffer`. * * @param {Buffer} buf The buffer to convert * @return {ArrayBuffer} Converted buffer * @public */ function toArrayBuffer$1(buf) { if (buf.length === buf.buffer.byteLength) return buf.buffer; return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length); } /** * Converts `data` to a `Buffer`. * * @param {*} data The data to convert * @return {Buffer} The buffer * @throws {TypeError} * @public */ function toBuffer$2(data) { toBuffer$2.readOnly = true; if (Buffer.isBuffer(data)) return data; let buf; if (data instanceof ArrayBuffer) buf = new FastBuffer$2(data); else if (ArrayBuffer.isView(data)) buf = new FastBuffer$2(data.buffer, data.byteOffset, data.byteLength); else { buf = Buffer.from(data); toBuffer$2.readOnly = false; } return buf; } module.exports = { concat: concat$1, mask: _mask, toArrayBuffer: toArrayBuffer$1, toBuffer: toBuffer$2, unmask: _unmask }; /* istanbul ignore else */ if (!process.env.WS_NO_BUFFER_UTIL) try { const bufferUtil$1 = require("bufferutil"); module.exports.mask = function(source, mask, output, offset$1, length) { if (length < 48) _mask(source, mask, output, offset$1, length); else bufferUtil$1.mask(source, mask, output, offset$1, length); }; module.exports.unmask = function(buffer, mask) { if (buffer.length < 32) _unmask(buffer, mask); else bufferUtil$1.unmask(buffer, mask); }; } catch (e$1) {} } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/limiter.js var require_limiter = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/limiter.js"(exports, module) { const kDone = Symbol("kDone"); const kRun = Symbol("kRun"); /** * A very simple job queue with adjustable concurrency. Adapted from * https://github.com/STRML/async-limiter */ var Limiter$1 = class { /** * Creates a new `Limiter`. * * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed * to run concurrently */ constructor(concurrency) { this[kDone] = () => { this.pending--; this[kRun](); }; this.concurrency = concurrency || Infinity; this.jobs = []; this.pending = 0; } /** * Adds a job to the queue. * * @param {Function} job The job to run * @public */ add(job) { this.jobs.push(job); this[kRun](); } /** * Removes a job from the queue and runs it if possible. * * @private */ [kRun]() { if (this.pending === this.concurrency) return; if (this.jobs.length) { const job = this.jobs.shift(); this.pending++; job(this[kDone]); } } }; module.exports = Limiter$1; } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/permessage-deflate.js var require_permessage_deflate = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/permessage-deflate.js"(exports, module) { const zlib$1 = require("zlib"); const bufferUtil = require_buffer_util(); const Limiter = require_limiter(); const { kStatusCode: kStatusCode$2 } = require_constants$1(); const FastBuffer$1 = Buffer[Symbol.species]; const TRAILER = Buffer.from([ 0, 0, 255, 255 ]); const kPerMessageDeflate = Symbol("permessage-deflate"); const kTotalLength = Symbol("total-length"); const kCallback = Symbol("callback"); const kBuffers = Symbol("buffers"); const kError$1 = Symbol("error"); let zlibLimiter; /** * permessage-deflate implementation. */ var PerMessageDeflate$4 = class { /** * Creates a PerMessageDeflate instance. * * @param {Object} [options] Configuration options * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support * for, or request, a custom client window size * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/ * acknowledge disabling of client context takeover * @param {Number} [options.concurrencyLimit=10] The number of concurrent * calls to zlib * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the * use of a custom server window size * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept * disabling of server context takeover * @param {Number} [options.threshold=1024] Size (in bytes) below which * messages should not be compressed if context takeover is disabled * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on * deflate * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on * inflate * @param {Boolean} [isServer=false] Create the instance in either server or * client mode * @param {Number} [maxPayload=0] The maximum allowed message length */ constructor(options$1, isServer, maxPayload) { this._maxPayload = maxPayload | 0; this._options = options$1 || {}; this._threshold = this._options.threshold !== void 0 ? this._options.threshold : 1024; this._isServer = !!isServer; this._deflate = null; this._inflate = null; this.params = null; if (!zlibLimiter) { const concurrency = this._options.concurrencyLimit !== void 0 ? this._options.concurrencyLimit : 10; zlibLimiter = new Limiter(concurrency); } } /** * @type {String} */ static get extensionName() { return "permessage-deflate"; } /** * Create an extension negotiation offer. * * @return {Object} Extension parameters * @public */ offer() { const params = {}; if (this._options.serverNoContextTakeover) params.server_no_context_takeover = true; if (this._options.clientNoContextTakeover) params.client_no_context_takeover = true; if (this._options.serverMaxWindowBits) params.server_max_window_bits = this._options.serverMaxWindowBits; if (this._options.clientMaxWindowBits) params.client_max_window_bits = this._options.clientMaxWindowBits; else if (this._options.clientMaxWindowBits == null) params.client_max_window_bits = true; return params; } /** * Accept an extension negotiation offer/response. * * @param {Array} configurations The extension negotiation offers/reponse * @return {Object} Accepted configuration * @public */ accept(configurations) { configurations = this.normalizeParams(configurations); this.params = this._isServer ? this.acceptAsServer(configurations) : this.acceptAsClient(configurations); return this.params; } /** * Releases all resources used by the extension. * * @public */ cleanup() { if (this._inflate) { this._inflate.close(); this._inflate = null; } if (this._deflate) { const callback = this._deflate[kCallback]; this._deflate.close(); this._deflate = null; if (callback) callback(/* @__PURE__ */ new Error("The deflate stream was closed while data was being processed")); } } /** * Accept an extension negotiation offer. * * @param {Array} offers The extension negotiation offers * @return {Object} Accepted configuration * @private */ acceptAsServer(offers) { const opts = this._options; const accepted = offers.find((params) => { if (opts.serverNoContextTakeover === false && params.server_no_context_takeover || params.server_max_window_bits && (opts.serverMaxWindowBits === false || typeof opts.serverMaxWindowBits === "number" && opts.serverMaxWindowBits > params.server_max_window_bits) || typeof opts.clientMaxWindowBits === "number" && !params.client_max_window_bits) return false; return true; }); if (!accepted) throw new Error("None of the extension offers can be accepted"); if (opts.serverNoContextTakeover) accepted.server_no_context_takeover = true; if (opts.clientNoContextTakeover) accepted.client_no_context_takeover = true; if (typeof opts.serverMaxWindowBits === "number") accepted.server_max_window_bits = opts.serverMaxWindowBits; if (typeof opts.clientMaxWindowBits === "number") accepted.client_max_window_bits = opts.clientMaxWindowBits; else if (accepted.client_max_window_bits === true || opts.clientMaxWindowBits === false) delete accepted.client_max_window_bits; return accepted; } /** * Accept the extension negotiation response. * * @param {Array} response The extension negotiation response * @return {Object} Accepted configuration * @private */ acceptAsClient(response) { const params = response[0]; if (this._options.clientNoContextTakeover === false && params.client_no_context_takeover) throw new Error("Unexpected parameter \"client_no_context_takeover\""); if (!params.client_max_window_bits) { if (typeof this._options.clientMaxWindowBits === "number") params.client_max_window_bits = this._options.clientMaxWindowBits; } else if (this._options.clientMaxWindowBits === false || typeof this._options.clientMaxWindowBits === "number" && params.client_max_window_bits > this._options.clientMaxWindowBits) throw new Error("Unexpected or invalid parameter \"client_max_window_bits\""); return params; } /** * Normalize parameters. * * @param {Array} configurations The extension negotiation offers/reponse * @return {Array} The offers/response with normalized parameters * @private */ normalizeParams(configurations) { configurations.forEach((params) => { Object.keys(params).forEach((key) => { let value$1 = params[key]; if (value$1.length > 1) throw new Error(`Parameter "${key}" must have only a single value`); value$1 = value$1[0]; if (key === "client_max_window_bits") { if (value$1 !== true) { const num = +value$1; if (!Number.isInteger(num) || num < 8 || num > 15) throw new TypeError(`Invalid value for parameter "${key}": ${value$1}`); value$1 = num; } else if (!this._isServer) throw new TypeError(`Invalid value for parameter "${key}": ${value$1}`); } else if (key === "server_max_window_bits") { const num = +value$1; if (!Number.isInteger(num) || num < 8 || num > 15) throw new TypeError(`Invalid value for parameter "${key}": ${value$1}`); value$1 = num; } else if (key === "client_no_context_takeover" || key === "server_no_context_takeover") { if (value$1 !== true) throw new TypeError(`Invalid value for parameter "${key}": ${value$1}`); } else throw new Error(`Unknown parameter "${key}"`); params[key] = value$1; }); }); return configurations; } /** * Decompress data. Concurrency limited. * * @param {Buffer} data Compressed data * @param {Boolean} fin Specifies whether or not this is the last fragment * @param {Function} callback Callback * @public */ decompress(data, fin, callback) { zlibLimiter.add((done) => { this._decompress(data, fin, (err$2, result) => { done(); callback(err$2, result); }); }); } /** * Compress data. Concurrency limited. * * @param {(Buffer|String)} data Data to compress * @param {Boolean} fin Specifies whether or not this is the last fragment * @param {Function} callback Callback * @public */ compress(data, fin, callback) { zlibLimiter.add((done) => { this._compress(data, fin, (err$2, result) => { done(); callback(err$2, result); }); }); } /** * Decompress data. * * @param {Buffer} data Compressed data * @param {Boolean} fin Specifies whether or not this is the last fragment * @param {Function} callback Callback * @private */ _decompress(data, fin, callback) { const endpoint = this._isServer ? "client" : "server"; if (!this._inflate) { const key = `${endpoint}_max_window_bits`; const windowBits = typeof this.params[key] !== "number" ? zlib$1.Z_DEFAULT_WINDOWBITS : this.params[key]; this._inflate = zlib$1.createInflateRaw({ ...this._options.zlibInflateOptions, windowBits }); this._inflate[kPerMessageDeflate] = this; this._inflate[kTotalLength] = 0; this._inflate[kBuffers] = []; this._inflate.on("error", inflateOnError); this._inflate.on("data", inflateOnData); } this._inflate[kCallback] = callback; this._inflate.write(data); if (fin) this._inflate.write(TRAILER); this._inflate.flush(() => { const err$2 = this._inflate[kError$1]; if (err$2) { this._inflate.close(); this._inflate = null; callback(err$2); return; } const data$1 = bufferUtil.concat(this._inflate[kBuffers], this._inflate[kTotalLength]); if (this._inflate._readableState.endEmitted) { this._inflate.close(); this._inflate = null; } else { this._inflate[kTotalLength] = 0; this._inflate[kBuffers] = []; if (fin && this.params[`${endpoint}_no_context_takeover`]) this._inflate.reset(); } callback(null, data$1); }); } /** * Compress data. * * @param {(Buffer|String)} data Data to compress * @param {Boolean} fin Specifies whether or not this is the last fragment * @param {Function} callback Callback * @private */ _compress(data, fin, callback) { const endpoint = this._isServer ? "server" : "client"; if (!this._deflate) { const key = `${endpoint}_max_window_bits`; const windowBits = typeof this.params[key] !== "number" ? zlib$1.Z_DEFAULT_WINDOWBITS : this.params[key]; this._deflate = zlib$1.createDeflateRaw({ ...this._options.zlibDeflateOptions, windowBits }); this._deflate[kTotalLength] = 0; this._deflate[kBuffers] = []; this._deflate.on("data", deflateOnData); } this._deflate[kCallback] = callback; this._deflate.write(data); this._deflate.flush(zlib$1.Z_SYNC_FLUSH, () => { if (!this._deflate) return; let data$1 = bufferUtil.concat(this._deflate[kBuffers], this._deflate[kTotalLength]); if (fin) data$1 = new FastBuffer$1(data$1.buffer, data$1.byteOffset, data$1.length - 4); this._deflate[kCallback] = null; this._deflate[kTotalLength] = 0; this._deflate[kBuffers] = []; if (fin && this.params[`${endpoint}_no_context_takeover`]) this._deflate.reset(); callback(null, data$1); }); } }; module.exports = PerMessageDeflate$4; /** * The listener of the `zlib.DeflateRaw` stream `'data'` event. * * @param {Buffer} chunk A chunk of data * @private */ function deflateOnData(chunk) { this[kBuffers].push(chunk); this[kTotalLength] += chunk.length; } /** * The listener of the `zlib.InflateRaw` stream `'data'` event. * * @param {Buffer} chunk A chunk of data * @private */ function inflateOnData(chunk) { this[kTotalLength] += chunk.length; if (this[kPerMessageDeflate]._maxPayload < 1 || this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload) { this[kBuffers].push(chunk); return; } this[kError$1] = /* @__PURE__ */ new RangeError("Max payload size exceeded"); this[kError$1].code = "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"; this[kError$1][kStatusCode$2] = 1009; this.removeListener("data", inflateOnData); this.reset(); } /** * The listener of the `zlib.InflateRaw` stream `'error'` event. * * @param {Error} err The emitted error * @private */ function inflateOnError(err$2) { this[kPerMessageDeflate]._inflate = null; if (this[kError$1]) { this[kCallback](this[kError$1]); return; } err$2[kStatusCode$2] = 1007; this[kCallback](err$2); } } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/validation.js var require_validation = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/validation.js"(exports, module) { const { isUtf8 } = require("buffer"); const { hasBlob } = require_constants$1(); const tokenChars$2 = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 ]; /** * Checks if a status code is allowed in a close frame. * * @param {Number} code The status code * @return {Boolean} `true` if the status code is valid, else `false` * @public */ function isValidStatusCode$2(code) { return code >= 1e3 && code <= 1014 && code !== 1004 && code !== 1005 && code !== 1006 || code >= 3e3 && code <= 4999; } /** * Checks if a given buffer contains only correct UTF-8. * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by * Markus Kuhn. * * @param {Buffer} buf The buffer to check * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false` * @public */ function _isValidUTF8(buf) { const len = buf.length; let i$1 = 0; while (i$1 < len) if ((buf[i$1] & 128) === 0) i$1++; else if ((buf[i$1] & 224) === 192) { if (i$1 + 1 === len || (buf[i$1 + 1] & 192) !== 128 || (buf[i$1] & 254) === 192) return false; i$1 += 2; } else if ((buf[i$1] & 240) === 224) { if (i$1 + 2 >= len || (buf[i$1 + 1] & 192) !== 128 || (buf[i$1 + 2] & 192) !== 128 || buf[i$1] === 224 && (buf[i$1 + 1] & 224) === 128 || buf[i$1] === 237 && (buf[i$1 + 1] & 224) === 160) return false; i$1 += 3; } else if ((buf[i$1] & 248) === 240) { if (i$1 + 3 >= len || (buf[i$1 + 1] & 192) !== 128 || (buf[i$1 + 2] & 192) !== 128 || (buf[i$1 + 3] & 192) !== 128 || buf[i$1] === 240 && (buf[i$1 + 1] & 240) === 128 || buf[i$1] === 244 && buf[i$1 + 1] > 143 || buf[i$1] > 244) return false; i$1 += 4; } else return false; return true; } /** * Determines whether a value is a `Blob`. * * @param {*} value The value to be tested * @return {Boolean} `true` if `value` is a `Blob`, else `false` * @private */ function isBlob$2(value$1) { return hasBlob && typeof value$1 === "object" && typeof value$1.arrayBuffer === "function" && typeof value$1.type === "string" && typeof value$1.stream === "function" && (value$1[Symbol.toStringTag] === "Blob" || value$1[Symbol.toStringTag] === "File"); } module.exports = { isBlob: isBlob$2, isValidStatusCode: isValidStatusCode$2, isValidUTF8: _isValidUTF8, tokenChars: tokenChars$2 }; if (isUtf8) module.exports.isValidUTF8 = function(buf) { return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf); }; else if (!process.env.WS_NO_UTF_8_VALIDATE) try { const isValidUTF8$1 = require("utf-8-validate"); module.exports.isValidUTF8 = function(buf) { return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8$1(buf); }; } catch (e$1) {} } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/receiver.js var require_receiver = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/receiver.js"(exports, module) { const { Writable: Writable$1 } = require("stream"); const PerMessageDeflate$3 = require_permessage_deflate(); const { BINARY_TYPES: BINARY_TYPES$1, EMPTY_BUFFER: EMPTY_BUFFER$2, kStatusCode: kStatusCode$1, kWebSocket: kWebSocket$3 } = require_constants$1(); const { concat, toArrayBuffer, unmask } = require_buffer_util(); const { isValidStatusCode: isValidStatusCode$1, isValidUTF8 } = require_validation(); const FastBuffer = Buffer[Symbol.species]; const GET_INFO = 0; const GET_PAYLOAD_LENGTH_16 = 1; const GET_PAYLOAD_LENGTH_64 = 2; const GET_MASK = 3; const GET_DATA = 4; const INFLATING = 5; const DEFER_EVENT = 6; /** * HyBi Receiver implementation. * * @extends Writable */ var Receiver$2 = class extends Writable$1 { /** * Creates a Receiver instance. * * @param {Object} [options] Options object * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted * multiple times in the same tick * @param {String} [options.binaryType=nodebuffer] The type for binary data * @param {Object} [options.extensions] An object containing the negotiated * extensions * @param {Boolean} [options.isServer=false] Specifies whether to operate in * client or server mode * @param {Number} [options.maxPayload=0] The maximum allowed message length * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or * not to skip UTF-8 validation for text and close messages */ constructor(options$1 = {}) { super(); this._allowSynchronousEvents = options$1.allowSynchronousEvents !== void 0 ? options$1.allowSynchronousEvents : true; this._binaryType = options$1.binaryType || BINARY_TYPES$1[0]; this._extensions = options$1.extensions || {}; this._isServer = !!options$1.isServer; this._maxPayload = options$1.maxPayload | 0; this._skipUTF8Validation = !!options$1.skipUTF8Validation; this[kWebSocket$3] = void 0; this._bufferedBytes = 0; this._buffers = []; this._compressed = false; this._payloadLength = 0; this._mask = void 0; this._fragmented = 0; this._masked = false; this._fin = false; this._opcode = 0; this._totalPayloadLength = 0; this._messageLength = 0; this._fragments = []; this._errored = false; this._loop = false; this._state = GET_INFO; } /** * Implements `Writable.prototype._write()`. * * @param {Buffer} chunk The chunk of data to write * @param {String} encoding The character encoding of `chunk` * @param {Function} cb Callback * @private */ _write(chunk, encoding, cb) { if (this._opcode === 8 && this._state == GET_INFO) return cb(); this._bufferedBytes += chunk.length; this._buffers.push(chunk); this.startLoop(cb); } /** * Consumes `n` bytes from the buffered data. * * @param {Number} n The number of bytes to consume * @return {Buffer} The consumed bytes * @private */ consume(n$2) { this._bufferedBytes -= n$2; if (n$2 === this._buffers[0].length) return this._buffers.shift(); if (n$2 < this._buffers[0].length) { const buf = this._buffers[0]; this._buffers[0] = new FastBuffer(buf.buffer, buf.byteOffset + n$2, buf.length - n$2); return new FastBuffer(buf.buffer, buf.byteOffset, n$2); } const dst = Buffer.allocUnsafe(n$2); do { const buf = this._buffers[0]; const offset$1 = dst.length - n$2; if (n$2 >= buf.length) dst.set(this._buffers.shift(), offset$1); else { dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n$2), offset$1); this._buffers[0] = new FastBuffer(buf.buffer, buf.byteOffset + n$2, buf.length - n$2); } n$2 -= buf.length; } while (n$2 > 0); return dst; } /** * Starts the parsing loop. * * @param {Function} cb Callback * @private */ startLoop(cb) { this._loop = true; do switch (this._state) { case GET_INFO: this.getInfo(cb); break; case GET_PAYLOAD_LENGTH_16: this.getPayloadLength16(cb); break; case GET_PAYLOAD_LENGTH_64: this.getPayloadLength64(cb); break; case GET_MASK: this.getMask(); break; case GET_DATA: this.getData(cb); break; case INFLATING: case DEFER_EVENT: this._loop = false; return; } while (this._loop); if (!this._errored) cb(); } /** * Reads the first two bytes of a frame. * * @param {Function} cb Callback * @private */ getInfo(cb) { if (this._bufferedBytes < 2) { this._loop = false; return; } const buf = this.consume(2); if ((buf[0] & 48) !== 0) { const error$1 = this.createError(RangeError, "RSV2 and RSV3 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_2_3"); cb(error$1); return; } const compressed = (buf[0] & 64) === 64; if (compressed && !this._extensions[PerMessageDeflate$3.extensionName]) { const error$1 = this.createError(RangeError, "RSV1 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_1"); cb(error$1); return; } this._fin = (buf[0] & 128) === 128; this._opcode = buf[0] & 15; this._payloadLength = buf[1] & 127; if (this._opcode === 0) { if (compressed) { const error$1 = this.createError(RangeError, "RSV1 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_1"); cb(error$1); return; } if (!this._fragmented) { const error$1 = this.createError(RangeError, "invalid opcode 0", true, 1002, "WS_ERR_INVALID_OPCODE"); cb(error$1); return; } this._opcode = this._fragmented; } else if (this._opcode === 1 || this._opcode === 2) { if (this._fragmented) { const error$1 = this.createError(RangeError, `invalid opcode ${this._opcode}`, true, 1002, "WS_ERR_INVALID_OPCODE"); cb(error$1); return; } this._compressed = compressed; } else if (this._opcode > 7 && this._opcode < 11) { if (!this._fin) { const error$1 = this.createError(RangeError, "FIN must be set", true, 1002, "WS_ERR_EXPECTED_FIN"); cb(error$1); return; } if (compressed) { const error$1 = this.createError(RangeError, "RSV1 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_1"); cb(error$1); return; } if (this._payloadLength > 125 || this._opcode === 8 && this._payloadLength === 1) { const error$1 = this.createError(RangeError, `invalid payload length ${this._payloadLength}`, true, 1002, "WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH"); cb(error$1); return; } } else { const error$1 = this.createError(RangeError, `invalid opcode ${this._opcode}`, true, 1002, "WS_ERR_INVALID_OPCODE"); cb(error$1); return; } if (!this._fin && !this._fragmented) this._fragmented = this._opcode; this._masked = (buf[1] & 128) === 128; if (this._isServer) { if (!this._masked) { const error$1 = this.createError(RangeError, "MASK must be set", true, 1002, "WS_ERR_EXPECTED_MASK"); cb(error$1); return; } } else if (this._masked) { const error$1 = this.createError(RangeError, "MASK must be clear", true, 1002, "WS_ERR_UNEXPECTED_MASK"); cb(error$1); return; } if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16; else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64; else this.haveLength(cb); } /** * Gets extended payload length (7+16). * * @param {Function} cb Callback * @private */ getPayloadLength16(cb) { if (this._bufferedBytes < 2) { this._loop = false; return; } this._payloadLength = this.consume(2).readUInt16BE(0); this.haveLength(cb); } /** * Gets extended payload length (7+64). * * @param {Function} cb Callback * @private */ getPayloadLength64(cb) { if (this._bufferedBytes < 8) { this._loop = false; return; } const buf = this.consume(8); const num = buf.readUInt32BE(0); if (num > Math.pow(2, 21) - 1) { const error$1 = this.createError(RangeError, "Unsupported WebSocket frame: payload length > 2^53 - 1", false, 1009, "WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH"); cb(error$1); return; } this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4); this.haveLength(cb); } /** * Payload length has been read. * * @param {Function} cb Callback * @private */ haveLength(cb) { if (this._payloadLength && this._opcode < 8) { this._totalPayloadLength += this._payloadLength; if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) { const error$1 = this.createError(RangeError, "Max payload size exceeded", false, 1009, "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"); cb(error$1); return; } } if (this._masked) this._state = GET_MASK; else this._state = GET_DATA; } /** * Reads mask bytes. * * @private */ getMask() { if (this._bufferedBytes < 4) { this._loop = false; return; } this._mask = this.consume(4); this._state = GET_DATA; } /** * Reads data bytes. * * @param {Function} cb Callback * @private */ getData(cb) { let data = EMPTY_BUFFER$2; if (this._payloadLength) { if (this._bufferedBytes < this._payloadLength) { this._loop = false; return; } data = this.consume(this._payloadLength); if (this._masked && (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0) unmask(data, this._mask); } if (this._opcode > 7) { this.controlMessage(data, cb); return; } if (this._compressed) { this._state = INFLATING; this.decompress(data, cb); return; } if (data.length) { this._messageLength = this._totalPayloadLength; this._fragments.push(data); } this.dataMessage(cb); } /** * Decompresses data. * * @param {Buffer} data Compressed data * @param {Function} cb Callback * @private */ decompress(data, cb) { const perMessageDeflate = this._extensions[PerMessageDeflate$3.extensionName]; perMessageDeflate.decompress(data, this._fin, (err$2, buf) => { if (err$2) return cb(err$2); if (buf.length) { this._messageLength += buf.length; if (this._messageLength > this._maxPayload && this._maxPayload > 0) { const error$1 = this.createError(RangeError, "Max payload size exceeded", false, 1009, "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"); cb(error$1); return; } this._fragments.push(buf); } this.dataMessage(cb); if (this._state === GET_INFO) this.startLoop(cb); }); } /** * Handles a data message. * * @param {Function} cb Callback * @private */ dataMessage(cb) { if (!this._fin) { this._state = GET_INFO; return; } const messageLength = this._messageLength; const fragments = this._fragments; this._totalPayloadLength = 0; this._messageLength = 0; this._fragmented = 0; this._fragments = []; if (this._opcode === 2) { let data; if (this._binaryType === "nodebuffer") data = concat(fragments, messageLength); else if (this._binaryType === "arraybuffer") data = toArrayBuffer(concat(fragments, messageLength)); else if (this._binaryType === "blob") data = new Blob(fragments); else data = fragments; if (this._allowSynchronousEvents) { this.emit("message", data, true); this._state = GET_INFO; } else { this._state = DEFER_EVENT; setImmediate(() => { this.emit("message", data, true); this._state = GET_INFO; this.startLoop(cb); }); } } else { const buf = concat(fragments, messageLength); if (!this._skipUTF8Validation && !isValidUTF8(buf)) { const error$1 = this.createError(Error, "invalid UTF-8 sequence", true, 1007, "WS_ERR_INVALID_UTF8"); cb(error$1); return; } if (this._state === INFLATING || this._allowSynchronousEvents) { this.emit("message", buf, false); this._state = GET_INFO; } else { this._state = DEFER_EVENT; setImmediate(() => { this.emit("message", buf, false); this._state = GET_INFO; this.startLoop(cb); }); } } } /** * Handles a control message. * * @param {Buffer} data Data to handle * @return {(Error|RangeError|undefined)} A possible error * @private */ controlMessage(data, cb) { if (this._opcode === 8) { if (data.length === 0) { this._loop = false; this.emit("conclude", 1005, EMPTY_BUFFER$2); this.end(); } else { const code = data.readUInt16BE(0); if (!isValidStatusCode$1(code)) { const error$1 = this.createError(RangeError, `invalid status code ${code}`, true, 1002, "WS_ERR_INVALID_CLOSE_CODE"); cb(error$1); return; } const buf = new FastBuffer(data.buffer, data.byteOffset + 2, data.length - 2); if (!this._skipUTF8Validation && !isValidUTF8(buf)) { const error$1 = this.createError(Error, "invalid UTF-8 sequence", true, 1007, "WS_ERR_INVALID_UTF8"); cb(error$1); return; } this._loop = false; this.emit("conclude", code, buf); this.end(); } this._state = GET_INFO; return; } if (this._allowSynchronousEvents) { this.emit(this._opcode === 9 ? "ping" : "pong", data); this._state = GET_INFO; } else { this._state = DEFER_EVENT; setImmediate(() => { this.emit(this._opcode === 9 ? "ping" : "pong", data); this._state = GET_INFO; this.startLoop(cb); }); } } /** * Builds an error object. * * @param {function(new:Error|RangeError)} ErrorCtor The error constructor * @param {String} message The error message * @param {Boolean} prefix Specifies whether or not to add a default prefix to * `message` * @param {Number} statusCode The status code * @param {String} errorCode The exposed error code * @return {(Error|RangeError)} The error * @private */ createError(ErrorCtor, message, prefix$1, statusCode, errorCode) { this._loop = false; this._errored = true; const err$2 = new ErrorCtor(prefix$1 ? `Invalid WebSocket frame: ${message}` : message); Error.captureStackTrace(err$2, this.createError); err$2.code = errorCode; err$2[kStatusCode$1] = statusCode; return err$2; } }; module.exports = Receiver$2; } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/sender.js var require_sender = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/sender.js"(exports, module) { const { Duplex: Duplex$3 } = require("stream"); const { randomFillSync } = require("crypto"); const PerMessageDeflate$2 = require_permessage_deflate(); const { EMPTY_BUFFER: EMPTY_BUFFER$1, kWebSocket: kWebSocket$2, NOOP: NOOP$2 } = require_constants$1(); const { isBlob: isBlob$1, isValidStatusCode } = require_validation(); const { mask: applyMask, toBuffer: toBuffer$1 } = require_buffer_util(); const kByteLength = Symbol("kByteLength"); const maskBuffer = Buffer.alloc(4); const RANDOM_POOL_SIZE = 8 * 1024; let randomPool; let randomPoolPointer = RANDOM_POOL_SIZE; const DEFAULT = 0; const DEFLATING = 1; const GET_BLOB_DATA = 2; /** * HyBi Sender implementation. */ var Sender$2 = class Sender$2 { /** * Creates a Sender instance. * * @param {Duplex} socket The connection socket * @param {Object} [extensions] An object containing the negotiated extensions * @param {Function} [generateMask] The function used to generate the masking * key */ constructor(socket, extensions$1, generateMask) { this._extensions = extensions$1 || {}; if (generateMask) { this._generateMask = generateMask; this._maskBuffer = Buffer.alloc(4); } this._socket = socket; this._firstFragment = true; this._compress = false; this._bufferedBytes = 0; this._queue = []; this._state = DEFAULT; this.onerror = NOOP$2; this[kWebSocket$2] = void 0; } /** * Frames a piece of data according to the HyBi WebSocket protocol. * * @param {(Buffer|String)} data The data to frame * @param {Object} options Options object * @param {Boolean} [options.fin=false] Specifies whether or not to set the * FIN bit * @param {Function} [options.generateMask] The function used to generate the * masking key * @param {Boolean} [options.mask=false] Specifies whether or not to mask * `data` * @param {Buffer} [options.maskBuffer] The buffer used to store the masking * key * @param {Number} options.opcode The opcode * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be * modified * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the * RSV1 bit * @return {(Buffer|String)[]} The framed data * @public */ static frame(data, options$1) { let mask; let merge$1 = false; let offset$1 = 2; let skipMasking = false; if (options$1.mask) { mask = options$1.maskBuffer || maskBuffer; if (options$1.generateMask) options$1.generateMask(mask); else { if (randomPoolPointer === RANDOM_POOL_SIZE) { /* istanbul ignore else */ if (randomPool === void 0) randomPool = Buffer.alloc(RANDOM_POOL_SIZE); randomFillSync(randomPool, 0, RANDOM_POOL_SIZE); randomPoolPointer = 0; } mask[0] = randomPool[randomPoolPointer++]; mask[1] = randomPool[randomPoolPointer++]; mask[2] = randomPool[randomPoolPointer++]; mask[3] = randomPool[randomPoolPointer++]; } skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0; offset$1 = 6; } let dataLength; if (typeof data === "string") if ((!options$1.mask || skipMasking) && options$1[kByteLength] !== void 0) dataLength = options$1[kByteLength]; else { data = Buffer.from(data); dataLength = data.length; } else { dataLength = data.length; merge$1 = options$1.mask && options$1.readOnly && !skipMasking; } let payloadLength = dataLength; if (dataLength >= 65536) { offset$1 += 8; payloadLength = 127; } else if (dataLength > 125) { offset$1 += 2; payloadLength = 126; } const target = Buffer.allocUnsafe(merge$1 ? dataLength + offset$1 : offset$1); target[0] = options$1.fin ? options$1.opcode | 128 : options$1.opcode; if (options$1.rsv1) target[0] |= 64; target[1] = payloadLength; if (payloadLength === 126) target.writeUInt16BE(dataLength, 2); else if (payloadLength === 127) { target[2] = target[3] = 0; target.writeUIntBE(dataLength, 4, 6); } if (!options$1.mask) return [target, data]; target[1] |= 128; target[offset$1 - 4] = mask[0]; target[offset$1 - 3] = mask[1]; target[offset$1 - 2] = mask[2]; target[offset$1 - 1] = mask[3]; if (skipMasking) return [target, data]; if (merge$1) { applyMask(data, mask, target, offset$1, dataLength); return [target]; } applyMask(data, mask, data, 0, dataLength); return [target, data]; } /** * Sends a close message to the other peer. * * @param {Number} [code] The status code component of the body * @param {(String|Buffer)} [data] The message component of the body * @param {Boolean} [mask=false] Specifies whether or not to mask the message * @param {Function} [cb] Callback * @public */ close(code, data, mask, cb) { let buf; if (code === void 0) buf = EMPTY_BUFFER$1; else if (typeof code !== "number" || !isValidStatusCode(code)) throw new TypeError("First argument must be a valid error code number"); else if (data === void 0 || !data.length) { buf = Buffer.allocUnsafe(2); buf.writeUInt16BE(code, 0); } else { const length = Buffer.byteLength(data); if (length > 123) throw new RangeError("The message must not be greater than 123 bytes"); buf = Buffer.allocUnsafe(2 + length); buf.writeUInt16BE(code, 0); if (typeof data === "string") buf.write(data, 2); else buf.set(data, 2); } const options$1 = { [kByteLength]: buf.length, fin: true, generateMask: this._generateMask, mask, maskBuffer: this._maskBuffer, opcode: 8, readOnly: false, rsv1: false }; if (this._state !== DEFAULT) this.enqueue([ this.dispatch, buf, false, options$1, cb ]); else this.sendFrame(Sender$2.frame(buf, options$1), cb); } /** * Sends a ping message to the other peer. * * @param {*} data The message to send * @param {Boolean} [mask=false] Specifies whether or not to mask `data` * @param {Function} [cb] Callback * @public */ ping(data, mask, cb) { let byteLength; let readOnly; if (typeof data === "string") { byteLength = Buffer.byteLength(data); readOnly = false; } else if (isBlob$1(data)) { byteLength = data.size; readOnly = false; } else { data = toBuffer$1(data); byteLength = data.length; readOnly = toBuffer$1.readOnly; } if (byteLength > 125) throw new RangeError("The data size must not be greater than 125 bytes"); const options$1 = { [kByteLength]: byteLength, fin: true, generateMask: this._generateMask, mask, maskBuffer: this._maskBuffer, opcode: 9, readOnly, rsv1: false }; if (isBlob$1(data)) if (this._state !== DEFAULT) this.enqueue([ this.getBlobData, data, false, options$1, cb ]); else this.getBlobData(data, false, options$1, cb); else if (this._state !== DEFAULT) this.enqueue([ this.dispatch, data, false, options$1, cb ]); else this.sendFrame(Sender$2.frame(data, options$1), cb); } /** * Sends a pong message to the other peer. * * @param {*} data The message to send * @param {Boolean} [mask=false] Specifies whether or not to mask `data` * @param {Function} [cb] Callback * @public */ pong(data, mask, cb) { let byteLength; let readOnly; if (typeof data === "string") { byteLength = Buffer.byteLength(data); readOnly = false; } else if (isBlob$1(data)) { byteLength = data.size; readOnly = false; } else { data = toBuffer$1(data); byteLength = data.length; readOnly = toBuffer$1.readOnly; } if (byteLength > 125) throw new RangeError("The data size must not be greater than 125 bytes"); const options$1 = { [kByteLength]: byteLength, fin: true, generateMask: this._generateMask, mask, maskBuffer: this._maskBuffer, opcode: 10, readOnly, rsv1: false }; if (isBlob$1(data)) if (this._state !== DEFAULT) this.enqueue([ this.getBlobData, data, false, options$1, cb ]); else this.getBlobData(data, false, options$1, cb); else if (this._state !== DEFAULT) this.enqueue([ this.dispatch, data, false, options$1, cb ]); else this.sendFrame(Sender$2.frame(data, options$1), cb); } /** * Sends a data message to the other peer. * * @param {*} data The message to send * @param {Object} options Options object * @param {Boolean} [options.binary=false] Specifies whether `data` is binary * or text * @param {Boolean} [options.compress=false] Specifies whether or not to * compress `data` * @param {Boolean} [options.fin=false] Specifies whether the fragment is the * last one * @param {Boolean} [options.mask=false] Specifies whether or not to mask * `data` * @param {Function} [cb] Callback * @public */ send(data, options$1, cb) { const perMessageDeflate = this._extensions[PerMessageDeflate$2.extensionName]; let opcode = options$1.binary ? 2 : 1; let rsv1 = options$1.compress; let byteLength; let readOnly; if (typeof data === "string") { byteLength = Buffer.byteLength(data); readOnly = false; } else if (isBlob$1(data)) { byteLength = data.size; readOnly = false; } else { data = toBuffer$1(data); byteLength = data.length; readOnly = toBuffer$1.readOnly; } if (this._firstFragment) { this._firstFragment = false; if (rsv1 && perMessageDeflate && perMessageDeflate.params[perMessageDeflate._isServer ? "server_no_context_takeover" : "client_no_context_takeover"]) rsv1 = byteLength >= perMessageDeflate._threshold; this._compress = rsv1; } else { rsv1 = false; opcode = 0; } if (options$1.fin) this._firstFragment = true; const opts = { [kByteLength]: byteLength, fin: options$1.fin, generateMask: this._generateMask, mask: options$1.mask, maskBuffer: this._maskBuffer, opcode, readOnly, rsv1 }; if (isBlob$1(data)) if (this._state !== DEFAULT) this.enqueue([ this.getBlobData, data, this._compress, opts, cb ]); else this.getBlobData(data, this._compress, opts, cb); else if (this._state !== DEFAULT) this.enqueue([ this.dispatch, data, this._compress, opts, cb ]); else this.dispatch(data, this._compress, opts, cb); } /** * Gets the contents of a blob as binary data. * * @param {Blob} blob The blob * @param {Boolean} [compress=false] Specifies whether or not to compress * the data * @param {Object} options Options object * @param {Boolean} [options.fin=false] Specifies whether or not to set the * FIN bit * @param {Function} [options.generateMask] The function used to generate the * masking key * @param {Boolean} [options.mask=false] Specifies whether or not to mask * `data` * @param {Buffer} [options.maskBuffer] The buffer used to store the masking * key * @param {Number} options.opcode The opcode * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be * modified * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the * RSV1 bit * @param {Function} [cb] Callback * @private */ getBlobData(blob, compress, options$1, cb) { this._bufferedBytes += options$1[kByteLength]; this._state = GET_BLOB_DATA; blob.arrayBuffer().then((arrayBuffer) => { if (this._socket.destroyed) { const err$2 = /* @__PURE__ */ new Error("The socket was closed while the blob was being read"); process.nextTick(callCallbacks, this, err$2, cb); return; } this._bufferedBytes -= options$1[kByteLength]; const data = toBuffer$1(arrayBuffer); if (!compress) { this._state = DEFAULT; this.sendFrame(Sender$2.frame(data, options$1), cb); this.dequeue(); } else this.dispatch(data, compress, options$1, cb); }).catch((err$2) => { process.nextTick(onError, this, err$2, cb); }); } /** * Dispatches a message. * * @param {(Buffer|String)} data The message to send * @param {Boolean} [compress=false] Specifies whether or not to compress * `data` * @param {Object} options Options object * @param {Boolean} [options.fin=false] Specifies whether or not to set the * FIN bit * @param {Function} [options.generateMask] The function used to generate the * masking key * @param {Boolean} [options.mask=false] Specifies whether or not to mask * `data` * @param {Buffer} [options.maskBuffer] The buffer used to store the masking * key * @param {Number} options.opcode The opcode * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be * modified * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the * RSV1 bit * @param {Function} [cb] Callback * @private */ dispatch(data, compress, options$1, cb) { if (!compress) { this.sendFrame(Sender$2.frame(data, options$1), cb); return; } const perMessageDeflate = this._extensions[PerMessageDeflate$2.extensionName]; this._bufferedBytes += options$1[kByteLength]; this._state = DEFLATING; perMessageDeflate.compress(data, options$1.fin, (_, buf) => { if (this._socket.destroyed) { const err$2 = /* @__PURE__ */ new Error("The socket was closed while data was being compressed"); callCallbacks(this, err$2, cb); return; } this._bufferedBytes -= options$1[kByteLength]; this._state = DEFAULT; options$1.readOnly = false; this.sendFrame(Sender$2.frame(buf, options$1), cb); this.dequeue(); }); } /** * Executes queued send operations. * * @private */ dequeue() { while (this._state === DEFAULT && this._queue.length) { const params = this._queue.shift(); this._bufferedBytes -= params[3][kByteLength]; Reflect.apply(params[0], this, params.slice(1)); } } /** * Enqueues a send operation. * * @param {Array} params Send operation parameters. * @private */ enqueue(params) { this._bufferedBytes += params[3][kByteLength]; this._queue.push(params); } /** * Sends a frame. * * @param {(Buffer | String)[]} list The frame to send * @param {Function} [cb] Callback * @private */ sendFrame(list, cb) { if (list.length === 2) { this._socket.cork(); this._socket.write(list[0]); this._socket.write(list[1], cb); this._socket.uncork(); } else this._socket.write(list[0], cb); } }; module.exports = Sender$2; /** * Calls queued callbacks with an error. * * @param {Sender} sender The `Sender` instance * @param {Error} err The error to call the callbacks with * @param {Function} [cb] The first callback * @private */ function callCallbacks(sender, err$2, cb) { if (typeof cb === "function") cb(err$2); for (let i$1 = 0; i$1 < sender._queue.length; i$1++) { const params = sender._queue[i$1]; const callback = params[params.length - 1]; if (typeof callback === "function") callback(err$2); } } /** * Handles a `Sender` error. * * @param {Sender} sender The `Sender` instance * @param {Error} err The error * @param {Function} [cb] The first pending callback * @private */ function onError(sender, err$2, cb) { callCallbacks(sender, err$2, cb); sender.onerror(err$2); } } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/event-target.js var require_event_target = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/event-target.js"(exports, module) { const { kForOnEventAttribute: kForOnEventAttribute$1, kListener: kListener$1 } = require_constants$1(); const kCode = Symbol("kCode"); const kData = Symbol("kData"); const kError = Symbol("kError"); const kMessage = Symbol("kMessage"); const kReason = Symbol("kReason"); const kTarget = Symbol("kTarget"); const kType = Symbol("kType"); const kWasClean = Symbol("kWasClean"); /** * Class representing an event. */ var Event$1 = class { /** * Create a new `Event`. * * @param {String} type The name of the event * @throws {TypeError} If the `type` argument is not specified */ constructor(type) { this[kTarget] = null; this[kType] = type; } /** * @type {*} */ get target() { return this[kTarget]; } /** * @type {String} */ get type() { return this[kType]; } }; Object.defineProperty(Event$1.prototype, "target", { enumerable: true }); Object.defineProperty(Event$1.prototype, "type", { enumerable: true }); /** * Class representing a close event. * * @extends Event */ var CloseEvent = class extends Event$1 { /** * Create a new `CloseEvent`. * * @param {String} type The name of the event * @param {Object} [options] A dictionary object that allows for setting * attributes via object members of the same name * @param {Number} [options.code=0] The status code explaining why the * connection was closed * @param {String} [options.reason=''] A human-readable string explaining why * the connection was closed * @param {Boolean} [options.wasClean=false] Indicates whether or not the * connection was cleanly closed */ constructor(type, options$1 = {}) { super(type); this[kCode] = options$1.code === void 0 ? 0 : options$1.code; this[kReason] = options$1.reason === void 0 ? "" : options$1.reason; this[kWasClean] = options$1.wasClean === void 0 ? false : options$1.wasClean; } /** * @type {Number} */ get code() { return this[kCode]; } /** * @type {String} */ get reason() { return this[kReason]; } /** * @type {Boolean} */ get wasClean() { return this[kWasClean]; } }; Object.defineProperty(CloseEvent.prototype, "code", { enumerable: true }); Object.defineProperty(CloseEvent.prototype, "reason", { enumerable: true }); Object.defineProperty(CloseEvent.prototype, "wasClean", { enumerable: true }); /** * Class representing an error event. * * @extends Event */ var ErrorEvent = class extends Event$1 { /** * Create a new `ErrorEvent`. * * @param {String} type The name of the event * @param {Object} [options] A dictionary object that allows for setting * attributes via object members of the same name * @param {*} [options.error=null] The error that generated this event * @param {String} [options.message=''] The error message */ constructor(type, options$1 = {}) { super(type); this[kError] = options$1.error === void 0 ? null : options$1.error; this[kMessage] = options$1.message === void 0 ? "" : options$1.message; } /** * @type {*} */ get error() { return this[kError]; } /** * @type {String} */ get message() { return this[kMessage]; } }; Object.defineProperty(ErrorEvent.prototype, "error", { enumerable: true }); Object.defineProperty(ErrorEvent.prototype, "message", { enumerable: true }); /** * Class representing a message event. * * @extends Event */ var MessageEvent = class extends Event$1 { /** * Create a new `MessageEvent`. * * @param {String} type The name of the event * @param {Object} [options] A dictionary object that allows for setting * attributes via object members of the same name * @param {*} [options.data=null] The message content */ constructor(type, options$1 = {}) { super(type); this[kData] = options$1.data === void 0 ? null : options$1.data; } /** * @type {*} */ get data() { return this[kData]; } }; Object.defineProperty(MessageEvent.prototype, "data", { enumerable: true }); /** * This provides methods for emulating the `EventTarget` interface. It's not * meant to be used directly. * * @mixin */ const EventTarget = { addEventListener(type, handler, options$1 = {}) { for (const listener$1 of this.listeners(type)) if (!options$1[kForOnEventAttribute$1] && listener$1[kListener$1] === handler && !listener$1[kForOnEventAttribute$1]) return; let wrapper; if (type === "message") wrapper = function onMessage(data, isBinary) { const event = new MessageEvent("message", { data: isBinary ? data : data.toString() }); event[kTarget] = this; callListener(handler, this, event); }; else if (type === "close") wrapper = function onClose(code, message) { const event = new CloseEvent("close", { code, reason: message.toString(), wasClean: this._closeFrameReceived && this._closeFrameSent }); event[kTarget] = this; callListener(handler, this, event); }; else if (type === "error") wrapper = function onError$1(error$1) { const event = new ErrorEvent("error", { error: error$1, message: error$1.message }); event[kTarget] = this; callListener(handler, this, event); }; else if (type === "open") wrapper = function onOpen() { const event = new Event$1("open"); event[kTarget] = this; callListener(handler, this, event); }; else return; wrapper[kForOnEventAttribute$1] = !!options$1[kForOnEventAttribute$1]; wrapper[kListener$1] = handler; if (options$1.once) this.once(type, wrapper); else this.on(type, wrapper); }, removeEventListener(type, handler) { for (const listener$1 of this.listeners(type)) if (listener$1[kListener$1] === handler && !listener$1[kForOnEventAttribute$1]) { this.removeListener(type, listener$1); break; } } }; module.exports = { CloseEvent, ErrorEvent, Event: Event$1, EventTarget, MessageEvent }; /** * Call an event listener * * @param {(Function|Object)} listener The listener to call * @param {*} thisArg The value to use as `this`` when calling the listener * @param {Event} event The event to pass to the listener * @private */ function callListener(listener$1, thisArg, event) { if (typeof listener$1 === "object" && listener$1.handleEvent) listener$1.handleEvent.call(listener$1, event); else listener$1.call(thisArg, event); } } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/extension.js var require_extension = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/extension.js"(exports, module) { const { tokenChars: tokenChars$1 } = require_validation(); /** * Adds an offer to the map of extension offers or a parameter to the map of * parameters. * * @param {Object} dest The map of extension offers or parameters * @param {String} name The extension or parameter name * @param {(Object|Boolean|String)} elem The extension parameters or the * parameter value * @private */ function push(dest, name, elem) { if (dest[name] === void 0) dest[name] = [elem]; else dest[name].push(elem); } /** * Parses the `Sec-WebSocket-Extensions` header into an object. * * @param {String} header The field value of the header * @return {Object} The parsed object * @public */ function parse$4(header) { const offers = Object.create(null); let params = Object.create(null); let mustUnescape = false; let isEscaping = false; let inQuotes = false; let extensionName; let paramName; let start = -1; let code = -1; let end = -1; let i$1 = 0; for (; i$1 < header.length; i$1++) { code = header.charCodeAt(i$1); if (extensionName === void 0) if (end === -1 && tokenChars$1[code] === 1) { if (start === -1) start = i$1; } else if (i$1 !== 0 && (code === 32 || code === 9)) { if (end === -1 && start !== -1) end = i$1; } else if (code === 59 || code === 44) { if (start === -1) throw new SyntaxError(`Unexpected character at index ${i$1}`); if (end === -1) end = i$1; const name = header.slice(start, end); if (code === 44) { push(offers, name, params); params = Object.create(null); } else extensionName = name; start = end = -1; } else throw new SyntaxError(`Unexpected character at index ${i$1}`); else if (paramName === void 0) if (end === -1 && tokenChars$1[code] === 1) { if (start === -1) start = i$1; } else if (code === 32 || code === 9) { if (end === -1 && start !== -1) end = i$1; } else if (code === 59 || code === 44) { if (start === -1) throw new SyntaxError(`Unexpected character at index ${i$1}`); if (end === -1) end = i$1; push(params, header.slice(start, end), true); if (code === 44) { push(offers, extensionName, params); params = Object.create(null); extensionName = void 0; } start = end = -1; } else if (code === 61 && start !== -1 && end === -1) { paramName = header.slice(start, i$1); start = end = -1; } else throw new SyntaxError(`Unexpected character at index ${i$1}`); else if (isEscaping) { if (tokenChars$1[code] !== 1) throw new SyntaxError(`Unexpected character at index ${i$1}`); if (start === -1) start = i$1; else if (!mustUnescape) mustUnescape = true; isEscaping = false; } else if (inQuotes) if (tokenChars$1[code] === 1) { if (start === -1) start = i$1; } else if (code === 34 && start !== -1) { inQuotes = false; end = i$1; } else if (code === 92) isEscaping = true; else throw new SyntaxError(`Unexpected character at index ${i$1}`); else if (code === 34 && header.charCodeAt(i$1 - 1) === 61) inQuotes = true; else if (end === -1 && tokenChars$1[code] === 1) { if (start === -1) start = i$1; } else if (start !== -1 && (code === 32 || code === 9)) { if (end === -1) end = i$1; } else if (code === 59 || code === 44) { if (start === -1) throw new SyntaxError(`Unexpected character at index ${i$1}`); if (end === -1) end = i$1; let value$1 = header.slice(start, end); if (mustUnescape) { value$1 = value$1.replace(/\\/g, ""); mustUnescape = false; } push(params, paramName, value$1); if (code === 44) { push(offers, extensionName, params); params = Object.create(null); extensionName = void 0; } paramName = void 0; start = end = -1; } else throw new SyntaxError(`Unexpected character at index ${i$1}`); } if (start === -1 || inQuotes || code === 32 || code === 9) throw new SyntaxError("Unexpected end of input"); if (end === -1) end = i$1; const token = header.slice(start, end); if (extensionName === void 0) push(offers, token, params); else { if (paramName === void 0) push(params, token, true); else if (mustUnescape) push(params, paramName, token.replace(/\\/g, "")); else push(params, paramName, token); push(offers, extensionName, params); } return offers; } /** * Builds the `Sec-WebSocket-Extensions` header field value. * * @param {Object} extensions The map of extensions and parameters to format * @return {String} A string representing the given object * @public */ function format$2(extensions$1) { return Object.keys(extensions$1).map((extension$1) => { let configurations = extensions$1[extension$1]; if (!Array.isArray(configurations)) configurations = [configurations]; return configurations.map((params) => { return [extension$1].concat(Object.keys(params).map((k) => { let values = params[k]; if (!Array.isArray(values)) values = [values]; return values.map((v) => v === true ? k : `${k}=${v}`).join("; "); })).join("; "); }).join(", "); }).join(", "); } module.exports = { format: format$2, parse: parse$4 }; } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/websocket.js var require_websocket = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/websocket.js"(exports, module) { const EventEmitter$3 = require("events"); const https$3 = require("https"); const http$4 = require("http"); const net$1 = require("net"); const tls = require("tls"); const { randomBytes, createHash: createHash$1 } = require("crypto"); const { Duplex: Duplex$2, Readable } = require("stream"); const { URL: URL$3 } = require("url"); const PerMessageDeflate$1 = require_permessage_deflate(); const Receiver$1 = require_receiver(); const Sender$1 = require_sender(); const { isBlob } = require_validation(); const { BINARY_TYPES, EMPTY_BUFFER, GUID: GUID$1, kForOnEventAttribute, kListener, kStatusCode, kWebSocket: kWebSocket$1, NOOP: NOOP$1 } = require_constants$1(); const { EventTarget: { addEventListener, removeEventListener } } = require_event_target(); const { format: format$1, parse: parse$3 } = require_extension(); const { toBuffer } = require_buffer_util(); const closeTimeout = 30 * 1e3; const kAborted = Symbol("kAborted"); const protocolVersions = [8, 13]; const readyStates = [ "CONNECTING", "OPEN", "CLOSING", "CLOSED" ]; const subprotocolRegex = /^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/; /** * Class representing a WebSocket. * * @extends EventEmitter */ var WebSocket$3 = class WebSocket$3 extends EventEmitter$3 { /** * Create a new `WebSocket`. * * @param {(String|URL)} address The URL to which to connect * @param {(String|String[])} [protocols] The subprotocols * @param {Object} [options] Connection options */ constructor(address, protocols, options$1) { super(); this._binaryType = BINARY_TYPES[0]; this._closeCode = 1006; this._closeFrameReceived = false; this._closeFrameSent = false; this._closeMessage = EMPTY_BUFFER; this._closeTimer = null; this._errorEmitted = false; this._extensions = {}; this._paused = false; this._protocol = ""; this._readyState = WebSocket$3.CONNECTING; this._receiver = null; this._sender = null; this._socket = null; if (address !== null) { this._bufferedAmount = 0; this._isServer = false; this._redirects = 0; if (protocols === void 0) protocols = []; else if (!Array.isArray(protocols)) if (typeof protocols === "object" && protocols !== null) { options$1 = protocols; protocols = []; } else protocols = [protocols]; initAsClient(this, address, protocols, options$1); } else { this._autoPong = options$1.autoPong; this._isServer = true; } } /** * For historical reasons, the custom "nodebuffer" type is used by the default * instead of "blob". * * @type {String} */ get binaryType() { return this._binaryType; } set binaryType(type) { if (!BINARY_TYPES.includes(type)) return; this._binaryType = type; if (this._receiver) this._receiver._binaryType = type; } /** * @type {Number} */ get bufferedAmount() { if (!this._socket) return this._bufferedAmount; return this._socket._writableState.length + this._sender._bufferedBytes; } /** * @type {String} */ get extensions() { return Object.keys(this._extensions).join(); } /** * @type {Boolean} */ get isPaused() { return this._paused; } /** * @type {Function} */ /* istanbul ignore next */ get onclose() { return null; } /** * @type {Function} */ /* istanbul ignore next */ get onerror() { return null; } /** * @type {Function} */ /* istanbul ignore next */ get onopen() { return null; } /** * @type {Function} */ /* istanbul ignore next */ get onmessage() { return null; } /** * @type {String} */ get protocol() { return this._protocol; } /** * @type {Number} */ get readyState() { return this._readyState; } /** * @type {String} */ get url() { return this._url; } /** * Set up the socket and the internal resources. * * @param {Duplex} socket The network socket between the server and client * @param {Buffer} head The first packet of the upgraded stream * @param {Object} options Options object * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted * multiple times in the same tick * @param {Function} [options.generateMask] The function used to generate the * masking key * @param {Number} [options.maxPayload=0] The maximum allowed message size * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or * not to skip UTF-8 validation for text and close messages * @private */ setSocket(socket, head, options$1) { const receiver = new Receiver$1({ allowSynchronousEvents: options$1.allowSynchronousEvents, binaryType: this.binaryType, extensions: this._extensions, isServer: this._isServer, maxPayload: options$1.maxPayload, skipUTF8Validation: options$1.skipUTF8Validation }); const sender = new Sender$1(socket, this._extensions, options$1.generateMask); this._receiver = receiver; this._sender = sender; this._socket = socket; receiver[kWebSocket$1] = this; sender[kWebSocket$1] = this; socket[kWebSocket$1] = this; receiver.on("conclude", receiverOnConclude); receiver.on("drain", receiverOnDrain); receiver.on("error", receiverOnError); receiver.on("message", receiverOnMessage); receiver.on("ping", receiverOnPing); receiver.on("pong", receiverOnPong); sender.onerror = senderOnError; if (socket.setTimeout) socket.setTimeout(0); if (socket.setNoDelay) socket.setNoDelay(); if (head.length > 0) socket.unshift(head); socket.on("close", socketOnClose); socket.on("data", socketOnData); socket.on("end", socketOnEnd); socket.on("error", socketOnError$1); this._readyState = WebSocket$3.OPEN; this.emit("open"); } /** * Emit the `'close'` event. * * @private */ emitClose() { if (!this._socket) { this._readyState = WebSocket$3.CLOSED; this.emit("close", this._closeCode, this._closeMessage); return; } if (this._extensions[PerMessageDeflate$1.extensionName]) this._extensions[PerMessageDeflate$1.extensionName].cleanup(); this._receiver.removeAllListeners(); this._readyState = WebSocket$3.CLOSED; this.emit("close", this._closeCode, this._closeMessage); } /** * Start a closing handshake. * * +----------+ +-----------+ +----------+ * - - -|ws.close()|-->|close frame|-->|ws.close()|- - - * | +----------+ +-----------+ +----------+ | * +----------+ +-----------+ | * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING * +----------+ +-----------+ | * | | | +---+ | * +------------------------+-->|fin| - - - - * | +---+ | +---+ * - - - - -|fin|<---------------------+ * +---+ * * @param {Number} [code] Status code explaining why the connection is closing * @param {(String|Buffer)} [data] The reason why the connection is * closing * @public */ close(code, data) { if (this.readyState === WebSocket$3.CLOSED) return; if (this.readyState === WebSocket$3.CONNECTING) { const msg = "WebSocket was closed before the connection was established"; abortHandshake$1(this, this._req, msg); return; } if (this.readyState === WebSocket$3.CLOSING) { if (this._closeFrameSent && (this._closeFrameReceived || this._receiver._writableState.errorEmitted)) this._socket.end(); return; } this._readyState = WebSocket$3.CLOSING; this._sender.close(code, data, !this._isServer, (err$2) => { if (err$2) return; this._closeFrameSent = true; if (this._closeFrameReceived || this._receiver._writableState.errorEmitted) this._socket.end(); }); setCloseTimer(this); } /** * Pause the socket. * * @public */ pause() { if (this.readyState === WebSocket$3.CONNECTING || this.readyState === WebSocket$3.CLOSED) return; this._paused = true; this._socket.pause(); } /** * Send a ping. * * @param {*} [data] The data to send * @param {Boolean} [mask] Indicates whether or not to mask `data` * @param {Function} [cb] Callback which is executed when the ping is sent * @public */ ping(data, mask, cb) { if (this.readyState === WebSocket$3.CONNECTING) throw new Error("WebSocket is not open: readyState 0 (CONNECTING)"); if (typeof data === "function") { cb = data; data = mask = void 0; } else if (typeof mask === "function") { cb = mask; mask = void 0; } if (typeof data === "number") data = data.toString(); if (this.readyState !== WebSocket$3.OPEN) { sendAfterClose(this, data, cb); return; } if (mask === void 0) mask = !this._isServer; this._sender.ping(data || EMPTY_BUFFER, mask, cb); } /** * Send a pong. * * @param {*} [data] The data to send * @param {Boolean} [mask] Indicates whether or not to mask `data` * @param {Function} [cb] Callback which is executed when the pong is sent * @public */ pong(data, mask, cb) { if (this.readyState === WebSocket$3.CONNECTING) throw new Error("WebSocket is not open: readyState 0 (CONNECTING)"); if (typeof data === "function") { cb = data; data = mask = void 0; } else if (typeof mask === "function") { cb = mask; mask = void 0; } if (typeof data === "number") data = data.toString(); if (this.readyState !== WebSocket$3.OPEN) { sendAfterClose(this, data, cb); return; } if (mask === void 0) mask = !this._isServer; this._sender.pong(data || EMPTY_BUFFER, mask, cb); } /** * Resume the socket. * * @public */ resume() { if (this.readyState === WebSocket$3.CONNECTING || this.readyState === WebSocket$3.CLOSED) return; this._paused = false; if (!this._receiver._writableState.needDrain) this._socket.resume(); } /** * Send a data message. * * @param {*} data The message to send * @param {Object} [options] Options object * @param {Boolean} [options.binary] Specifies whether `data` is binary or * text * @param {Boolean} [options.compress] Specifies whether or not to compress * `data` * @param {Boolean} [options.fin=true] Specifies whether the fragment is the * last one * @param {Boolean} [options.mask] Specifies whether or not to mask `data` * @param {Function} [cb] Callback which is executed when data is written out * @public */ send(data, options$1, cb) { if (this.readyState === WebSocket$3.CONNECTING) throw new Error("WebSocket is not open: readyState 0 (CONNECTING)"); if (typeof options$1 === "function") { cb = options$1; options$1 = {}; } if (typeof data === "number") data = data.toString(); if (this.readyState !== WebSocket$3.OPEN) { sendAfterClose(this, data, cb); return; } const opts = { binary: typeof data !== "string", mask: !this._isServer, compress: true, fin: true, ...options$1 }; if (!this._extensions[PerMessageDeflate$1.extensionName]) opts.compress = false; this._sender.send(data || EMPTY_BUFFER, opts, cb); } /** * Forcibly close the connection. * * @public */ terminate() { if (this.readyState === WebSocket$3.CLOSED) return; if (this.readyState === WebSocket$3.CONNECTING) { const msg = "WebSocket was closed before the connection was established"; abortHandshake$1(this, this._req, msg); return; } if (this._socket) { this._readyState = WebSocket$3.CLOSING; this._socket.destroy(); } } }; /** * @constant {Number} CONNECTING * @memberof WebSocket */ Object.defineProperty(WebSocket$3, "CONNECTING", { enumerable: true, value: readyStates.indexOf("CONNECTING") }); /** * @constant {Number} CONNECTING * @memberof WebSocket.prototype */ Object.defineProperty(WebSocket$3.prototype, "CONNECTING", { enumerable: true, value: readyStates.indexOf("CONNECTING") }); /** * @constant {Number} OPEN * @memberof WebSocket */ Object.defineProperty(WebSocket$3, "OPEN", { enumerable: true, value: readyStates.indexOf("OPEN") }); /** * @constant {Number} OPEN * @memberof WebSocket.prototype */ Object.defineProperty(WebSocket$3.prototype, "OPEN", { enumerable: true, value: readyStates.indexOf("OPEN") }); /** * @constant {Number} CLOSING * @memberof WebSocket */ Object.defineProperty(WebSocket$3, "CLOSING", { enumerable: true, value: readyStates.indexOf("CLOSING") }); /** * @constant {Number} CLOSING * @memberof WebSocket.prototype */ Object.defineProperty(WebSocket$3.prototype, "CLOSING", { enumerable: true, value: readyStates.indexOf("CLOSING") }); /** * @constant {Number} CLOSED * @memberof WebSocket */ Object.defineProperty(WebSocket$3, "CLOSED", { enumerable: true, value: readyStates.indexOf("CLOSED") }); /** * @constant {Number} CLOSED * @memberof WebSocket.prototype */ Object.defineProperty(WebSocket$3.prototype, "CLOSED", { enumerable: true, value: readyStates.indexOf("CLOSED") }); [ "binaryType", "bufferedAmount", "extensions", "isPaused", "protocol", "readyState", "url" ].forEach((property) => { Object.defineProperty(WebSocket$3.prototype, property, { enumerable: true }); }); [ "open", "error", "close", "message" ].forEach((method) => { Object.defineProperty(WebSocket$3.prototype, `on${method}`, { enumerable: true, get() { for (const listener$1 of this.listeners(method)) if (listener$1[kForOnEventAttribute]) return listener$1[kListener]; return null; }, set(handler) { for (const listener$1 of this.listeners(method)) if (listener$1[kForOnEventAttribute]) { this.removeListener(method, listener$1); break; } if (typeof handler !== "function") return; this.addEventListener(method, handler, { [kForOnEventAttribute]: true }); } }); }); WebSocket$3.prototype.addEventListener = addEventListener; WebSocket$3.prototype.removeEventListener = removeEventListener; module.exports = WebSocket$3; /** * Initialize a WebSocket client. * * @param {WebSocket} websocket The client to initialize * @param {(String|URL)} address The URL to which to connect * @param {Array} protocols The subprotocols * @param {Object} [options] Connection options * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any * of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple * times in the same tick * @param {Boolean} [options.autoPong=true] Specifies whether or not to * automatically send a pong in response to a ping * @param {Function} [options.finishRequest] A function which can be used to * customize the headers of each http request before it is sent * @param {Boolean} [options.followRedirects=false] Whether or not to follow * redirects * @param {Function} [options.generateMask] The function used to generate the * masking key * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the * handshake request * @param {Number} [options.maxPayload=104857600] The maximum allowed message * size * @param {Number} [options.maxRedirects=10] The maximum number of redirects * allowed * @param {String} [options.origin] Value of the `Origin` or * `Sec-WebSocket-Origin` header * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable * permessage-deflate * @param {Number} [options.protocolVersion=13] Value of the * `Sec-WebSocket-Version` header * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or * not to skip UTF-8 validation for text and close messages * @private */ function initAsClient(websocket, address, protocols, options$1) { const opts = { allowSynchronousEvents: true, autoPong: true, protocolVersion: protocolVersions[1], maxPayload: 100 * 1024 * 1024, skipUTF8Validation: false, perMessageDeflate: true, followRedirects: false, maxRedirects: 10, ...options$1, socketPath: void 0, hostname: void 0, protocol: void 0, timeout: void 0, method: "GET", host: void 0, path: void 0, port: void 0 }; websocket._autoPong = opts.autoPong; if (!protocolVersions.includes(opts.protocolVersion)) throw new RangeError(`Unsupported protocol version: ${opts.protocolVersion} (supported versions: ${protocolVersions.join(", ")})`); let parsedUrl; if (address instanceof URL$3) parsedUrl = address; else try { parsedUrl = new URL$3(address); } catch (e$1) { throw new SyntaxError(`Invalid URL: ${address}`); } if (parsedUrl.protocol === "http:") parsedUrl.protocol = "ws:"; else if (parsedUrl.protocol === "https:") parsedUrl.protocol = "wss:"; websocket._url = parsedUrl.href; const isSecure = parsedUrl.protocol === "wss:"; const isIpcUrl = parsedUrl.protocol === "ws+unix:"; let invalidUrlMessage; if (parsedUrl.protocol !== "ws:" && !isSecure && !isIpcUrl) invalidUrlMessage = "The URL's protocol must be one of \"ws:\", \"wss:\", \"http:\", \"https:\", or \"ws+unix:\""; else if (isIpcUrl && !parsedUrl.pathname) invalidUrlMessage = "The URL's pathname is empty"; else if (parsedUrl.hash) invalidUrlMessage = "The URL contains a fragment identifier"; if (invalidUrlMessage) { const err$2 = new SyntaxError(invalidUrlMessage); if (websocket._redirects === 0) throw err$2; else { emitErrorAndClose(websocket, err$2); return; } } const defaultPort = isSecure ? 443 : 80; const key = randomBytes(16).toString("base64"); const request = isSecure ? https$3.request : http$4.request; const protocolSet = /* @__PURE__ */ new Set(); let perMessageDeflate; opts.createConnection = opts.createConnection || (isSecure ? tlsConnect : netConnect); opts.defaultPort = opts.defaultPort || defaultPort; opts.port = parsedUrl.port || defaultPort; opts.host = parsedUrl.hostname.startsWith("[") ? parsedUrl.hostname.slice(1, -1) : parsedUrl.hostname; opts.headers = { ...opts.headers, "Sec-WebSocket-Version": opts.protocolVersion, "Sec-WebSocket-Key": key, Connection: "Upgrade", Upgrade: "websocket" }; opts.path = parsedUrl.pathname + parsedUrl.search; opts.timeout = opts.handshakeTimeout; if (opts.perMessageDeflate) { perMessageDeflate = new PerMessageDeflate$1(opts.perMessageDeflate !== true ? opts.perMessageDeflate : {}, false, opts.maxPayload); opts.headers["Sec-WebSocket-Extensions"] = format$1({ [PerMessageDeflate$1.extensionName]: perMessageDeflate.offer() }); } if (protocols.length) { for (const protocol of protocols) { if (typeof protocol !== "string" || !subprotocolRegex.test(protocol) || protocolSet.has(protocol)) throw new SyntaxError("An invalid or duplicated subprotocol was specified"); protocolSet.add(protocol); } opts.headers["Sec-WebSocket-Protocol"] = protocols.join(","); } if (opts.origin) if (opts.protocolVersion < 13) opts.headers["Sec-WebSocket-Origin"] = opts.origin; else opts.headers.Origin = opts.origin; if (parsedUrl.username || parsedUrl.password) opts.auth = `${parsedUrl.username}:${parsedUrl.password}`; if (isIpcUrl) { const parts = opts.path.split(":"); opts.socketPath = parts[0]; opts.path = parts[1]; } let req$4; if (opts.followRedirects) { if (websocket._redirects === 0) { websocket._originalIpc = isIpcUrl; websocket._originalSecure = isSecure; websocket._originalHostOrSocketPath = isIpcUrl ? opts.socketPath : parsedUrl.host; const headers = options$1 && options$1.headers; options$1 = { ...options$1, headers: {} }; if (headers) for (const [key$1, value$1] of Object.entries(headers)) options$1.headers[key$1.toLowerCase()] = value$1; } else if (websocket.listenerCount("redirect") === 0) { const isSameHost = isIpcUrl ? websocket._originalIpc ? opts.socketPath === websocket._originalHostOrSocketPath : false : websocket._originalIpc ? false : parsedUrl.host === websocket._originalHostOrSocketPath; if (!isSameHost || websocket._originalSecure && !isSecure) { delete opts.headers.authorization; delete opts.headers.cookie; if (!isSameHost) delete opts.headers.host; opts.auth = void 0; } } if (opts.auth && !options$1.headers.authorization) options$1.headers.authorization = "Basic " + Buffer.from(opts.auth).toString("base64"); req$4 = websocket._req = request(opts); if (websocket._redirects) websocket.emit("redirect", websocket.url, req$4); } else req$4 = websocket._req = request(opts); if (opts.timeout) req$4.on("timeout", () => { abortHandshake$1(websocket, req$4, "Opening handshake has timed out"); }); req$4.on("error", (err$2) => { if (req$4 === null || req$4[kAborted]) return; req$4 = websocket._req = null; emitErrorAndClose(websocket, err$2); }); req$4.on("response", (res) => { const location$1 = res.headers.location; const statusCode = res.statusCode; if (location$1 && opts.followRedirects && statusCode >= 300 && statusCode < 400) { if (++websocket._redirects > opts.maxRedirects) { abortHandshake$1(websocket, req$4, "Maximum redirects exceeded"); return; } req$4.abort(); let addr; try { addr = new URL$3(location$1, address); } catch (e$1) { const err$2 = /* @__PURE__ */ new SyntaxError(`Invalid URL: ${location$1}`); emitErrorAndClose(websocket, err$2); return; } initAsClient(websocket, addr, protocols, options$1); } else if (!websocket.emit("unexpected-response", req$4, res)) abortHandshake$1(websocket, req$4, `Unexpected server response: ${res.statusCode}`); }); req$4.on("upgrade", (res, socket, head) => { websocket.emit("upgrade", res); if (websocket.readyState !== WebSocket$3.CONNECTING) return; req$4 = websocket._req = null; const upgrade = res.headers.upgrade; if (upgrade === void 0 || upgrade.toLowerCase() !== "websocket") { abortHandshake$1(websocket, socket, "Invalid Upgrade header"); return; } const digest = createHash$1("sha1").update(key + GUID$1).digest("base64"); if (res.headers["sec-websocket-accept"] !== digest) { abortHandshake$1(websocket, socket, "Invalid Sec-WebSocket-Accept header"); return; } const serverProt = res.headers["sec-websocket-protocol"]; let protError; if (serverProt !== void 0) { if (!protocolSet.size) protError = "Server sent a subprotocol but none was requested"; else if (!protocolSet.has(serverProt)) protError = "Server sent an invalid subprotocol"; } else if (protocolSet.size) protError = "Server sent no subprotocol"; if (protError) { abortHandshake$1(websocket, socket, protError); return; } if (serverProt) websocket._protocol = serverProt; const secWebSocketExtensions = res.headers["sec-websocket-extensions"]; if (secWebSocketExtensions !== void 0) { if (!perMessageDeflate) { const message = "Server sent a Sec-WebSocket-Extensions header but no extension was requested"; abortHandshake$1(websocket, socket, message); return; } let extensions$1; try { extensions$1 = parse$3(secWebSocketExtensions); } catch (err$2) { const message = "Invalid Sec-WebSocket-Extensions header"; abortHandshake$1(websocket, socket, message); return; } const extensionNames = Object.keys(extensions$1); if (extensionNames.length !== 1 || extensionNames[0] !== PerMessageDeflate$1.extensionName) { const message = "Server indicated an extension that was not requested"; abortHandshake$1(websocket, socket, message); return; } try { perMessageDeflate.accept(extensions$1[PerMessageDeflate$1.extensionName]); } catch (err$2) { const message = "Invalid Sec-WebSocket-Extensions header"; abortHandshake$1(websocket, socket, message); return; } websocket._extensions[PerMessageDeflate$1.extensionName] = perMessageDeflate; } websocket.setSocket(socket, head, { allowSynchronousEvents: opts.allowSynchronousEvents, generateMask: opts.generateMask, maxPayload: opts.maxPayload, skipUTF8Validation: opts.skipUTF8Validation }); }); if (opts.finishRequest) opts.finishRequest(req$4, websocket); else req$4.end(); } /** * Emit the `'error'` and `'close'` events. * * @param {WebSocket} websocket The WebSocket instance * @param {Error} The error to emit * @private */ function emitErrorAndClose(websocket, err$2) { websocket._readyState = WebSocket$3.CLOSING; websocket._errorEmitted = true; websocket.emit("error", err$2); websocket.emitClose(); } /** * Create a `net.Socket` and initiate a connection. * * @param {Object} options Connection options * @return {net.Socket} The newly created socket used to start the connection * @private */ function netConnect(options$1) { options$1.path = options$1.socketPath; return net$1.connect(options$1); } /** * Create a `tls.TLSSocket` and initiate a connection. * * @param {Object} options Connection options * @return {tls.TLSSocket} The newly created socket used to start the connection * @private */ function tlsConnect(options$1) { options$1.path = void 0; if (!options$1.servername && options$1.servername !== "") options$1.servername = net$1.isIP(options$1.host) ? "" : options$1.host; return tls.connect(options$1); } /** * Abort the handshake and emit an error. * * @param {WebSocket} websocket The WebSocket instance * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to * abort or the socket to destroy * @param {String} message The error message * @private */ function abortHandshake$1(websocket, stream$1, message) { websocket._readyState = WebSocket$3.CLOSING; const err$2 = new Error(message); Error.captureStackTrace(err$2, abortHandshake$1); if (stream$1.setHeader) { stream$1[kAborted] = true; stream$1.abort(); if (stream$1.socket && !stream$1.socket.destroyed) stream$1.socket.destroy(); process.nextTick(emitErrorAndClose, websocket, err$2); } else { stream$1.destroy(err$2); stream$1.once("error", websocket.emit.bind(websocket, "error")); stream$1.once("close", websocket.emitClose.bind(websocket)); } } /** * Handle cases where the `ping()`, `pong()`, or `send()` methods are called * when the `readyState` attribute is `CLOSING` or `CLOSED`. * * @param {WebSocket} websocket The WebSocket instance * @param {*} [data] The data to send * @param {Function} [cb] Callback * @private */ function sendAfterClose(websocket, data, cb) { if (data) { const length = isBlob(data) ? data.size : toBuffer(data).length; if (websocket._socket) websocket._sender._bufferedBytes += length; else websocket._bufferedAmount += length; } if (cb) { const err$2 = /* @__PURE__ */ new Error(`WebSocket is not open: readyState ${websocket.readyState} (${readyStates[websocket.readyState]})`); process.nextTick(cb, err$2); } } /** * The listener of the `Receiver` `'conclude'` event. * * @param {Number} code The status code * @param {Buffer} reason The reason for closing * @private */ function receiverOnConclude(code, reason) { const websocket = this[kWebSocket$1]; websocket._closeFrameReceived = true; websocket._closeMessage = reason; websocket._closeCode = code; if (websocket._socket[kWebSocket$1] === void 0) return; websocket._socket.removeListener("data", socketOnData); process.nextTick(resume, websocket._socket); if (code === 1005) websocket.close(); else websocket.close(code, reason); } /** * The listener of the `Receiver` `'drain'` event. * * @private */ function receiverOnDrain() { const websocket = this[kWebSocket$1]; if (!websocket.isPaused) websocket._socket.resume(); } /** * The listener of the `Receiver` `'error'` event. * * @param {(RangeError|Error)} err The emitted error * @private */ function receiverOnError(err$2) { const websocket = this[kWebSocket$1]; if (websocket._socket[kWebSocket$1] !== void 0) { websocket._socket.removeListener("data", socketOnData); process.nextTick(resume, websocket._socket); websocket.close(err$2[kStatusCode]); } if (!websocket._errorEmitted) { websocket._errorEmitted = true; websocket.emit("error", err$2); } } /** * The listener of the `Receiver` `'finish'` event. * * @private */ function receiverOnFinish() { this[kWebSocket$1].emitClose(); } /** * The listener of the `Receiver` `'message'` event. * * @param {Buffer|ArrayBuffer|Buffer[])} data The message * @param {Boolean} isBinary Specifies whether the message is binary or not * @private */ function receiverOnMessage(data, isBinary) { this[kWebSocket$1].emit("message", data, isBinary); } /** * The listener of the `Receiver` `'ping'` event. * * @param {Buffer} data The data included in the ping frame * @private */ function receiverOnPing(data) { const websocket = this[kWebSocket$1]; if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP$1); websocket.emit("ping", data); } /** * The listener of the `Receiver` `'pong'` event. * * @param {Buffer} data The data included in the pong frame * @private */ function receiverOnPong(data) { this[kWebSocket$1].emit("pong", data); } /** * Resume a readable stream * * @param {Readable} stream The readable stream * @private */ function resume(stream$1) { stream$1.resume(); } /** * The `Sender` error event handler. * * @param {Error} The error * @private */ function senderOnError(err$2) { const websocket = this[kWebSocket$1]; if (websocket.readyState === WebSocket$3.CLOSED) return; if (websocket.readyState === WebSocket$3.OPEN) { websocket._readyState = WebSocket$3.CLOSING; setCloseTimer(websocket); } this._socket.end(); if (!websocket._errorEmitted) { websocket._errorEmitted = true; websocket.emit("error", err$2); } } /** * Set a timer to destroy the underlying raw socket of a WebSocket. * * @param {WebSocket} websocket The WebSocket instance * @private */ function setCloseTimer(websocket) { websocket._closeTimer = setTimeout(websocket._socket.destroy.bind(websocket._socket), closeTimeout); } /** * The listener of the socket `'close'` event. * * @private */ function socketOnClose() { const websocket = this[kWebSocket$1]; this.removeListener("close", socketOnClose); this.removeListener("data", socketOnData); this.removeListener("end", socketOnEnd); websocket._readyState = WebSocket$3.CLOSING; let chunk; if (!this._readableState.endEmitted && !websocket._closeFrameReceived && !websocket._receiver._writableState.errorEmitted && (chunk = websocket._socket.read()) !== null) websocket._receiver.write(chunk); websocket._receiver.end(); this[kWebSocket$1] = void 0; clearTimeout(websocket._closeTimer); if (websocket._receiver._writableState.finished || websocket._receiver._writableState.errorEmitted) websocket.emitClose(); else { websocket._receiver.on("error", receiverOnFinish); websocket._receiver.on("finish", receiverOnFinish); } } /** * The listener of the socket `'data'` event. * * @param {Buffer} chunk A chunk of data * @private */ function socketOnData(chunk) { if (!this[kWebSocket$1]._receiver.write(chunk)) this.pause(); } /** * The listener of the socket `'end'` event. * * @private */ function socketOnEnd() { const websocket = this[kWebSocket$1]; websocket._readyState = WebSocket$3.CLOSING; websocket._receiver.end(); this.end(); } /** * The listener of the socket `'error'` event. * * @private */ function socketOnError$1() { const websocket = this[kWebSocket$1]; this.removeListener("error", socketOnError$1); this.on("error", NOOP$1); if (websocket) { websocket._readyState = WebSocket$3.CLOSING; this.destroy(); } } } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/stream.js var require_stream = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/stream.js"(exports, module) { const WebSocket$2 = require_websocket(); const { Duplex: Duplex$1 } = require("stream"); /** * Emits the `'close'` event on a stream. * * @param {Duplex} stream The stream. * @private */ function emitClose$1(stream$1) { stream$1.emit("close"); } /** * The listener of the `'end'` event. * * @private */ function duplexOnEnd() { if (!this.destroyed && this._writableState.finished) this.destroy(); } /** * The listener of the `'error'` event. * * @param {Error} err The error * @private */ function duplexOnError(err$2) { this.removeListener("error", duplexOnError); this.destroy(); if (this.listenerCount("error") === 0) this.emit("error", err$2); } /** * Wraps a `WebSocket` in a duplex stream. * * @param {WebSocket} ws The `WebSocket` to wrap * @param {Object} [options] The options for the `Duplex` constructor * @return {Duplex} The duplex stream * @public */ function createWebSocketStream$1(ws$1, options$1) { let terminateOnDestroy = true; const duplex = new Duplex$1({ ...options$1, autoDestroy: false, emitClose: false, objectMode: false, writableObjectMode: false }); ws$1.on("message", function message(msg, isBinary) { const data = !isBinary && duplex._readableState.objectMode ? msg.toString() : msg; if (!duplex.push(data)) ws$1.pause(); }); ws$1.once("error", function error$1(err$2) { if (duplex.destroyed) return; terminateOnDestroy = false; duplex.destroy(err$2); }); ws$1.once("close", function close$1() { if (duplex.destroyed) return; duplex.push(null); }); duplex._destroy = function(err$2, callback) { if (ws$1.readyState === ws$1.CLOSED) { callback(err$2); process.nextTick(emitClose$1, duplex); return; } let called = false; ws$1.once("error", function error$1(err$3) { called = true; callback(err$3); }); ws$1.once("close", function close$1() { if (!called) callback(err$2); process.nextTick(emitClose$1, duplex); }); if (terminateOnDestroy) ws$1.terminate(); }; duplex._final = function(callback) { if (ws$1.readyState === ws$1.CONNECTING) { ws$1.once("open", function open$2() { duplex._final(callback); }); return; } if (ws$1._socket === null) return; if (ws$1._socket._writableState.finished) { callback(); if (duplex._readableState.endEmitted) duplex.destroy(); } else { ws$1._socket.once("finish", function finish() { callback(); }); ws$1.close(); } }; duplex._read = function() { if (ws$1.isPaused) ws$1.resume(); }; duplex._write = function(chunk, encoding, callback) { if (ws$1.readyState === ws$1.CONNECTING) { ws$1.once("open", function open$2() { duplex._write(chunk, encoding, callback); }); return; } ws$1.send(chunk, callback); }; duplex.on("end", duplexOnEnd); duplex.on("error", duplexOnError); return duplex; } module.exports = createWebSocketStream$1; } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/subprotocol.js var require_subprotocol = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/subprotocol.js"(exports, module) { const { tokenChars } = require_validation(); /** * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names. * * @param {String} header The field value of the header * @return {Set} The subprotocol names * @public */ function parse$2(header) { const protocols = /* @__PURE__ */ new Set(); let start = -1; let end = -1; let i$1 = 0; for (; i$1 < header.length; i$1++) { const code = header.charCodeAt(i$1); if (end === -1 && tokenChars[code] === 1) { if (start === -1) start = i$1; } else if (i$1 !== 0 && (code === 32 || code === 9)) { if (end === -1 && start !== -1) end = i$1; } else if (code === 44) { if (start === -1) throw new SyntaxError(`Unexpected character at index ${i$1}`); if (end === -1) end = i$1; const protocol$1 = header.slice(start, end); if (protocols.has(protocol$1)) throw new SyntaxError(`The "${protocol$1}" subprotocol is duplicated`); protocols.add(protocol$1); start = end = -1; } else throw new SyntaxError(`Unexpected character at index ${i$1}`); } if (start === -1 || end !== -1) throw new SyntaxError("Unexpected end of input"); const protocol = header.slice(start, i$1); if (protocols.has(protocol)) throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`); protocols.add(protocol); return protocols; } module.exports = { parse: parse$2 }; } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/websocket-server.js var require_websocket_server = __commonJS({ "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/websocket-server.js"(exports, module) { const EventEmitter$2 = require("events"); const http$3 = require("http"); const { Duplex } = require("stream"); const { createHash } = require("crypto"); const extension = require_extension(); const PerMessageDeflate = require_permessage_deflate(); const subprotocol = require_subprotocol(); const WebSocket$1 = require_websocket(); const { GUID, kWebSocket } = require_constants$1(); const keyRegex = /^[+/0-9A-Za-z]{22}==$/; const RUNNING = 0; const CLOSING = 1; const CLOSED = 2; /** * Class representing a WebSocket server. * * @extends EventEmitter */ var WebSocketServer$1 = class extends EventEmitter$2 { /** * Create a `WebSocketServer` instance. * * @param {Object} options Configuration options * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted * multiple times in the same tick * @param {Boolean} [options.autoPong=true] Specifies whether or not to * automatically send a pong in response to a ping * @param {Number} [options.backlog=511] The maximum length of the queue of * pending connections * @param {Boolean} [options.clientTracking=true] Specifies whether or not to * track clients * @param {Function} [options.handleProtocols] A hook to handle protocols * @param {String} [options.host] The hostname where to bind the server * @param {Number} [options.maxPayload=104857600] The maximum allowed message * size * @param {Boolean} [options.noServer=false] Enable no server mode * @param {String} [options.path] Accept only connections matching this path * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable * permessage-deflate * @param {Number} [options.port] The port where to bind the server * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S * server to use * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or * not to skip UTF-8 validation for text and close messages * @param {Function} [options.verifyClient] A hook to reject connections * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket` * class to use. It must be the `WebSocket` class or class that extends it * @param {Function} [callback] A listener for the `listening` event */ constructor(options$1, callback) { super(); options$1 = { allowSynchronousEvents: true, autoPong: true, maxPayload: 100 * 1024 * 1024, skipUTF8Validation: false, perMessageDeflate: false, handleProtocols: null, clientTracking: true, verifyClient: null, noServer: false, backlog: null, server: null, host: null, path: null, port: null, WebSocket: WebSocket$1, ...options$1 }; if (options$1.port == null && !options$1.server && !options$1.noServer || options$1.port != null && (options$1.server || options$1.noServer) || options$1.server && options$1.noServer) throw new TypeError("One and only one of the \"port\", \"server\", or \"noServer\" options must be specified"); if (options$1.port != null) { this._server = http$3.createServer((req$4, res) => { const body = http$3.STATUS_CODES[426]; res.writeHead(426, { "Content-Length": body.length, "Content-Type": "text/plain" }); res.end(body); }); this._server.listen(options$1.port, options$1.host, options$1.backlog, callback); } else if (options$1.server) this._server = options$1.server; if (this._server) { const emitConnection = this.emit.bind(this, "connection"); this._removeListeners = addListeners(this._server, { listening: this.emit.bind(this, "listening"), error: this.emit.bind(this, "error"), upgrade: (req$4, socket, head) => { this.handleUpgrade(req$4, socket, head, emitConnection); } }); } if (options$1.perMessageDeflate === true) options$1.perMessageDeflate = {}; if (options$1.clientTracking) { this.clients = /* @__PURE__ */ new Set(); this._shouldEmitClose = false; } this.options = options$1; this._state = RUNNING; } /** * Returns the bound address, the address family name, and port of the server * as reported by the operating system if listening on an IP socket. * If the server is listening on a pipe or UNIX domain socket, the name is * returned as a string. * * @return {(Object|String|null)} The address of the server * @public */ address() { if (this.options.noServer) throw new Error("The server is operating in \"noServer\" mode"); if (!this._server) return null; return this._server.address(); } /** * Stop the server from accepting new connections and emit the `'close'` event * when all existing connections are closed. * * @param {Function} [cb] A one-time listener for the `'close'` event * @public */ close(cb) { if (this._state === CLOSED) { if (cb) this.once("close", () => { cb(/* @__PURE__ */ new Error("The server is not running")); }); process.nextTick(emitClose, this); return; } if (cb) this.once("close", cb); if (this._state === CLOSING) return; this._state = CLOSING; if (this.options.noServer || this.options.server) { if (this._server) { this._removeListeners(); this._removeListeners = this._server = null; } if (this.clients) if (!this.clients.size) process.nextTick(emitClose, this); else this._shouldEmitClose = true; else process.nextTick(emitClose, this); } else { const server = this._server; this._removeListeners(); this._removeListeners = this._server = null; server.close(() => { emitClose(this); }); } } /** * See if a given request should be handled by this server instance. * * @param {http.IncomingMessage} req Request object to inspect * @return {Boolean} `true` if the request is valid, else `false` * @public */ shouldHandle(req$4) { if (this.options.path) { const index = req$4.url.indexOf("?"); const pathname = index !== -1 ? req$4.url.slice(0, index) : req$4.url; if (pathname !== this.options.path) return false; } return true; } /** * Handle a HTTP Upgrade request. * * @param {http.IncomingMessage} req The request object * @param {Duplex} socket The network socket between the server and client * @param {Buffer} head The first packet of the upgraded stream * @param {Function} cb Callback * @public */ handleUpgrade(req$4, socket, head, cb) { socket.on("error", socketOnError); const key = req$4.headers["sec-websocket-key"]; const upgrade = req$4.headers.upgrade; const version$2 = +req$4.headers["sec-websocket-version"]; if (req$4.method !== "GET") { const message = "Invalid HTTP method"; abortHandshakeOrEmitwsClientError(this, req$4, socket, 405, message); return; } if (upgrade === void 0 || upgrade.toLowerCase() !== "websocket") { const message = "Invalid Upgrade header"; abortHandshakeOrEmitwsClientError(this, req$4, socket, 400, message); return; } if (key === void 0 || !keyRegex.test(key)) { const message = "Missing or invalid Sec-WebSocket-Key header"; abortHandshakeOrEmitwsClientError(this, req$4, socket, 400, message); return; } if (version$2 !== 13 && version$2 !== 8) { const message = "Missing or invalid Sec-WebSocket-Version header"; abortHandshakeOrEmitwsClientError(this, req$4, socket, 400, message, { "Sec-WebSocket-Version": "13, 8" }); return; } if (!this.shouldHandle(req$4)) { abortHandshake(socket, 400); return; } const secWebSocketProtocol = req$4.headers["sec-websocket-protocol"]; let protocols = /* @__PURE__ */ new Set(); if (secWebSocketProtocol !== void 0) try { protocols = subprotocol.parse(secWebSocketProtocol); } catch (err$2) { const message = "Invalid Sec-WebSocket-Protocol header"; abortHandshakeOrEmitwsClientError(this, req$4, socket, 400, message); return; } const secWebSocketExtensions = req$4.headers["sec-websocket-extensions"]; const extensions$1 = {}; if (this.options.perMessageDeflate && secWebSocketExtensions !== void 0) { const perMessageDeflate = new PerMessageDeflate(this.options.perMessageDeflate, true, this.options.maxPayload); try { const offers = extension.parse(secWebSocketExtensions); if (offers[PerMessageDeflate.extensionName]) { perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]); extensions$1[PerMessageDeflate.extensionName] = perMessageDeflate; } } catch (err$2) { const message = "Invalid or unacceptable Sec-WebSocket-Extensions header"; abortHandshakeOrEmitwsClientError(this, req$4, socket, 400, message); return; } } if (this.options.verifyClient) { const info = { origin: req$4.headers[`${version$2 === 8 ? "sec-websocket-origin" : "origin"}`], secure: !!(req$4.socket.authorized || req$4.socket.encrypted), req: req$4 }; if (this.options.verifyClient.length === 2) { this.options.verifyClient(info, (verified, code, message, headers) => { if (!verified) return abortHandshake(socket, code || 401, message, headers); this.completeUpgrade(extensions$1, key, protocols, req$4, socket, head, cb); }); return; } if (!this.options.verifyClient(info)) return abortHandshake(socket, 401); } this.completeUpgrade(extensions$1, key, protocols, req$4, socket, head, cb); } /** * Upgrade the connection to WebSocket. * * @param {Object} extensions The accepted extensions * @param {String} key The value of the `Sec-WebSocket-Key` header * @param {Set} protocols The subprotocols * @param {http.IncomingMessage} req The request object * @param {Duplex} socket The network socket between the server and client * @param {Buffer} head The first packet of the upgraded stream * @param {Function} cb Callback * @throws {Error} If called more than once with the same socket * @private */ completeUpgrade(extensions$1, key, protocols, req$4, socket, head, cb) { if (!socket.readable || !socket.writable) return socket.destroy(); if (socket[kWebSocket]) throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration"); if (this._state > RUNNING) return abortHandshake(socket, 503); const digest = createHash("sha1").update(key + GUID).digest("base64"); const headers = [ "HTTP/1.1 101 Switching Protocols", "Upgrade: websocket", "Connection: Upgrade", `Sec-WebSocket-Accept: ${digest}` ]; const ws$1 = new this.options.WebSocket(null, void 0, this.options); if (protocols.size) { const protocol = this.options.handleProtocols ? this.options.handleProtocols(protocols, req$4) : protocols.values().next().value; if (protocol) { headers.push(`Sec-WebSocket-Protocol: ${protocol}`); ws$1._protocol = protocol; } } if (extensions$1[PerMessageDeflate.extensionName]) { const params = extensions$1[PerMessageDeflate.extensionName].params; const value$1 = extension.format({ [PerMessageDeflate.extensionName]: [params] }); headers.push(`Sec-WebSocket-Extensions: ${value$1}`); ws$1._extensions = extensions$1; } this.emit("headers", headers, req$4); socket.write(headers.concat("\r\n").join("\r\n")); socket.removeListener("error", socketOnError); ws$1.setSocket(socket, head, { allowSynchronousEvents: this.options.allowSynchronousEvents, maxPayload: this.options.maxPayload, skipUTF8Validation: this.options.skipUTF8Validation }); if (this.clients) { this.clients.add(ws$1); ws$1.on("close", () => { this.clients.delete(ws$1); if (this._shouldEmitClose && !this.clients.size) process.nextTick(emitClose, this); }); } cb(ws$1, req$4); } }; module.exports = WebSocketServer$1; /** * Add event listeners on an `EventEmitter` using a map of * pairs. * * @param {EventEmitter} server The event emitter * @param {Object.} map The listeners to add * @return {Function} A function that will remove the added listeners when * called * @private */ function addListeners(server, map$1) { for (const event of Object.keys(map$1)) server.on(event, map$1[event]); return function removeListeners() { for (const event of Object.keys(map$1)) server.removeListener(event, map$1[event]); }; } /** * Emit a `'close'` event on an `EventEmitter`. * * @param {EventEmitter} server The event emitter * @private */ function emitClose(server) { server._state = CLOSED; server.emit("close"); } /** * Handle socket errors. * * @private */ function socketOnError() { this.destroy(); } /** * Close the connection when preconditions are not fulfilled. * * @param {Duplex} socket The socket of the upgrade request * @param {Number} code The HTTP response status code * @param {String} [message] The HTTP response body * @param {Object} [headers] Additional HTTP response headers * @private */ function abortHandshake(socket, code, message, headers) { message = message || http$3.STATUS_CODES[code]; headers = { Connection: "close", "Content-Type": "text/html", "Content-Length": Buffer.byteLength(message), ...headers }; socket.once("finish", socket.destroy); socket.end(`HTTP/1.1 ${code} ${http$3.STATUS_CODES[code]}\r\n` + Object.keys(headers).map((h$2) => `${h$2}: ${headers[h$2]}`).join("\r\n") + "\r\n\r\n" + message); } /** * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least * one listener for it, otherwise call `abortHandshake()`. * * @param {WebSocketServer} server The WebSocket server * @param {http.IncomingMessage} req The request object * @param {Duplex} socket The socket of the upgrade request * @param {Number} code The HTTP response status code * @param {String} message The HTTP response body * @param {Object} [headers] The HTTP response headers * @private */ function abortHandshakeOrEmitwsClientError(server, req$4, socket, code, message, headers) { if (server.listenerCount("wsClientError")) { const err$2 = new Error(message); Error.captureStackTrace(err$2, abortHandshakeOrEmitwsClientError); server.emit("wsClientError", err$2, socket, req$4); } else abortHandshake(socket, code, message, headers); } } }); //#endregion //#region ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/wrapper.mjs var import_stream = __toESM(require_stream(), 1); var import_receiver = __toESM(require_receiver(), 1); var import_sender = __toESM(require_sender(), 1); var import_websocket = __toESM(require_websocket(), 1); var import_websocket_server = __toESM(require_websocket_server(), 1); //#endregion //#region ../../node_modules/.pnpm/host-validation-middleware@0.1.1/node_modules/host-validation-middleware/dist/index.js /** * This function assumes that the input is not malformed. * This is because we only care about browser requests. * Non-browser clients can send any value they want anyway. */ function extractHostNameFromHostHeader(hostHeader) { const trimmedHost = hostHeader.trim(); if (trimmedHost[0] === "[") { const endIpv6 = trimmedHost.indexOf("]"); if (endIpv6 < 0) return { type: "invalid" }; return net.isIP(trimmedHost.slice(1, endIpv6)) === 6 ? { type: "ipv6" } : { type: "invalid" }; } const colonPos = trimmedHost.indexOf(":"); const hostname = colonPos === -1 ? trimmedHost : trimmedHost.slice(0, colonPos); if (net.isIP(hostname) === 4) return { type: "ipv4" }; return { type: "hostname", value: hostname }; } const isFileOrExtensionProtocolRE = /^(?:file|.+-extension):/i; function isHostAllowedInternal(hostHeader, allowedHosts) { if (isFileOrExtensionProtocolRE.test(hostHeader)) return true; const extracted = extractHostNameFromHostHeader(hostHeader); if (extracted.type === "invalid") return false; if (extracted.type === "ipv4" || extracted.type === "ipv6") return true; const hostname = extracted.value; if (hostname === "localhost" || hostname.endsWith(".localhost")) return true; for (const allowedHost of allowedHosts) { if (allowedHost === hostname) return true; if (allowedHost[0] === "." && (allowedHost.slice(1) === hostname || hostname.endsWith(allowedHost))) return true; } return false; } const cache = /* @__PURE__ */ new WeakMap(); /** * Check if the host contained in the host header is allowed. * * This function will cache the result if the `allowedHosts` array is frozen. * * @param hostHeader - The value of host header. See [RFC 9110 7.2](https://datatracker.ietf.org/doc/html/rfc9110#name-host-and-authority). * @param allowedHosts - The allowed host patterns. See the README for more details. */ function isHostAllowed(hostHeader, allowedHosts) { if (hostHeader === void 0) return true; let cachedAllowedHosts; if (Object.isFrozen(allowedHosts)) { if (!cache.has(allowedHosts)) cache.set(allowedHosts, /* @__PURE__ */ new Set()); cachedAllowedHosts = cache.get(allowedHosts); if (cachedAllowedHosts.has(hostHeader)) return true; } const result = isHostAllowedInternal(hostHeader, allowedHosts); if (cachedAllowedHosts && result) cachedAllowedHosts.add(hostHeader); return result; } /** * Middleware to validate the host header of incoming requests. * * If the host header is not in the allowed hosts list, a 403 Forbidden response * is sent. */ function hostValidationMiddleware$1(options$1) { return async function hostValidationMiddleware$1$1(req$4, res, next) { const hostHeader = req$4.headers.host; if (!isHostAllowed(hostHeader, options$1.allowedHosts)) { const hostname = hostHeader?.replace(/:\d+$/, "") ?? ""; const errorMessage = options$1.generateErrorMessage?.(hostname) ?? generateDefaultErrorMessage(hostname); res.writeHead(403, { "Content-Type": options$1.errorResponseContentType ?? "text/plain" }); res.end(errorMessage); return; } next(); }; } function generateDefaultErrorMessage(hostname) { return `Blocked request. This host (${JSON.stringify(hostname)}) is not allowed.`; } //#endregion //#region src/node/server/ws.ts var import_picocolors$15 = __toESM(require_picocolors(), 1); const WebSocketServerRaw = process.versions.bun ? import.meta.require("ws").WebSocketServer : import_websocket_server.default; const HMR_HEADER = "vite-hmr"; const isWebSocketServer = Symbol("isWebSocketServer"); const wsServerEvents = [ "connection", "error", "headers", "listening", "message" ]; function noop$2() {} function hasValidToken(config$2, url$6) { const token = url$6.searchParams.get("token"); if (!token) return false; try { const isValidToken = crypto.timingSafeEqual(Buffer.from(token), Buffer.from(config$2.webSocketToken)); return isValidToken; } catch {} return false; } function createWebSocketServer(server, config$2, httpsOptions) { if (config$2.server.ws === false) return { [isWebSocketServer]: true, get clients() { return /* @__PURE__ */ new Set(); }, async close() {}, on: noop$2, off: noop$2, setInvokeHandler: noop$2, handleInvoke: async () => ({ error: { name: "TransportError", message: "handleInvoke not implemented", stack: (/* @__PURE__ */ new Error()).stack } }), listen: noop$2, send: noop$2 }; let wsHttpServer = void 0; const hmr = isObject(config$2.server.hmr) && config$2.server.hmr; const hmrServer = hmr && hmr.server; const hmrPort = hmr && hmr.port; const portsAreCompatible = !hmrPort || hmrPort === config$2.server.port; const wsServer = hmrServer || portsAreCompatible && server; let hmrServerWsListener; const customListeners = /* @__PURE__ */ new Map(); const clientsMap = /* @__PURE__ */ new WeakMap(); const port = hmrPort || 24678; const host = hmr && hmr.host || void 0; const allowedHosts = config$2.server.allowedHosts === true ? config$2.server.allowedHosts : Object.freeze([...config$2.server.allowedHosts]); const shouldHandle = (req$4) => { const protocol = req$4.headers["sec-websocket-protocol"]; if (protocol === "vite-ping") return true; if (allowedHosts !== true && !isHostAllowed(req$4.headers.host, allowedHosts)) return false; if (config$2.legacy?.skipWebSocketTokenCheck) return true; if (req$4.headers.origin) { const parsedUrl = new URL(`http://example.com${req$4.url}`); return hasValidToken(config$2, parsedUrl); } return true; }; const handleUpgrade = (req$4, socket, head, isPing) => { wss.handleUpgrade(req$4, socket, head, (ws$1) => { if (isPing) { ws$1.close(1e3); return; } wss.emit("connection", ws$1, req$4); }); }; const wss = new WebSocketServerRaw({ noServer: true }); wss.shouldHandle = shouldHandle; if (wsServer) { let hmrBase = config$2.base; const hmrPath = hmr ? hmr.path : void 0; if (hmrPath) hmrBase = path.posix.join(hmrBase, hmrPath); hmrServerWsListener = (req$4, socket, head) => { const protocol = req$4.headers["sec-websocket-protocol"]; const parsedUrl = new URL(`http://example.com${req$4.url}`); if ([HMR_HEADER, "vite-ping"].includes(protocol) && parsedUrl.pathname === hmrBase) handleUpgrade(req$4, socket, head, protocol === "vite-ping"); }; wsServer.on("upgrade", hmrServerWsListener); } else { const route = (_, res) => { const statusCode = 426; const body = STATUS_CODES[statusCode]; if (!body) throw new Error(`No body text found for the ${statusCode} status code`); res.writeHead(statusCode, { "Content-Length": body.length, "Content-Type": "text/plain" }); res.end(body); }; if (httpsOptions) wsHttpServer = createServer$1(httpsOptions, route); else wsHttpServer = createServer(route); wsHttpServer.on("upgrade", (req$4, socket, head) => { const protocol = req$4.headers["sec-websocket-protocol"]; if (protocol === "vite-ping" && server && !server.listening) { req$4.destroy(); return; } handleUpgrade(req$4, socket, head, protocol === "vite-ping"); }); wsHttpServer.on("error", (e$1) => { if (e$1.code === "EADDRINUSE") config$2.logger.error(import_picocolors$15.default.red(`WebSocket server error: Port ${e$1.port} is already in use`), { error: e$1 }); else config$2.logger.error(import_picocolors$15.default.red(`WebSocket server error:\n${e$1.stack || e$1.message}`), { error: e$1 }); }); } wss.on("connection", (socket) => { socket.on("message", (raw) => { if (!customListeners.size) return; let parsed; try { parsed = JSON.parse(String(raw)); } catch {} if (!parsed || parsed.type !== "custom" || !parsed.event) return; const listeners = customListeners.get(parsed.event); if (!listeners?.size) return; const client = getSocketClient(socket); listeners.forEach((listener$1) => listener$1(parsed.data, client, parsed.invoke)); }); socket.on("error", (err$2) => { config$2.logger.error(`${import_picocolors$15.default.red(`ws error:`)}\n${err$2.stack}`, { timestamp: true, error: err$2 }); }); socket.send(JSON.stringify({ type: "connected" })); if (bufferedError) { socket.send(JSON.stringify(bufferedError)); bufferedError = null; } }); wss.on("error", (e$1) => { if (e$1.code === "EADDRINUSE") config$2.logger.error(import_picocolors$15.default.red(`WebSocket server error: Port ${e$1.port} is already in use`), { error: e$1 }); else config$2.logger.error(import_picocolors$15.default.red(`WebSocket server error:\n${e$1.stack || e$1.message}`), { error: e$1 }); }); function getSocketClient(socket) { if (!clientsMap.has(socket)) clientsMap.set(socket, { send: (...args) => { let payload; if (typeof args[0] === "string") payload = { type: "custom", event: args[0], data: args[1] }; else payload = args[0]; socket.send(JSON.stringify(payload)); }, socket }); return clientsMap.get(socket); } let bufferedError = null; const normalizedHotChannel = normalizeHotChannel({ send(payload) { if (payload.type === "error" && !wss.clients.size) { bufferedError = payload; return; } const stringified = JSON.stringify(payload); wss.clients.forEach((client) => { if (client.readyState === 1) client.send(stringified); }); }, on(event, fn) { if (!customListeners.has(event)) customListeners.set(event, /* @__PURE__ */ new Set()); customListeners.get(event).add(fn); }, off(event, fn) { customListeners.get(event)?.delete(fn); }, listen() { wsHttpServer?.listen(port, host); }, close() { if (hmrServerWsListener && wsServer) wsServer.off("upgrade", hmrServerWsListener); return new Promise((resolve$4, reject) => { wss.clients.forEach((client) => { client.terminate(); }); wss.close((err$2) => { if (err$2) reject(err$2); else if (wsHttpServer) wsHttpServer.close((err$3) => { if (err$3) reject(err$3); else resolve$4(); }); else resolve$4(); }); }); } }, config$2.server.hmr !== false, false); return { ...normalizedHotChannel, on: (event, fn) => { if (wsServerEvents.includes(event)) { wss.on(event, fn); return; } normalizedHotChannel.on(event, fn); }, off: (event, fn) => { if (wsServerEvents.includes(event)) { wss.off(event, fn); return; } normalizedHotChannel.off(event, fn); }, async close() { await normalizedHotChannel.close(); }, [isWebSocketServer]: true, get clients() { return new Set(Array.from(wss.clients).map(getSocketClient)); } }; } //#endregion //#region src/node/server/middlewares/base.ts function baseMiddleware(rawBase, middlewareMode) { return function viteBaseMiddleware(req$4, res, next) { const url$6 = req$4.url; const pathname = cleanUrl(url$6); const base = rawBase; if (pathname.startsWith(base)) { req$4.url = stripBase(url$6, base); return next(); } if (middlewareMode) return next(); if (pathname === "/" || pathname === "/index.html") { res.writeHead(302, { Location: base + url$6.slice(pathname.length) }); res.end(); return; } const redirectPath = withTrailingSlash(url$6) !== base ? joinUrlSegments(base, url$6) : base; if (req$4.headers.accept?.includes("text/html")) { res.writeHead(404, { "Content-Type": "text/html" }); res.end(`The server is configured with a public base URL of ${base} - did you mean to visit ${redirectPath} instead?`); return; } else { res.writeHead(404, { "Content-Type": "text/plain" }); res.end(`The server is configured with a public base URL of ${base} - did you mean to visit ${redirectPath} instead?`); return; } }; } //#endregion //#region ../../node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js var require_eventemitter3 = __commonJS({ "../../node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js"(exports, module) { var has = Object.prototype.hasOwnProperty, prefix = "~"; /** * Constructor to create a storage for our `EE` objects. * An `Events` instance is a plain object whose properties are event names. * * @constructor * @private */ function Events() {} if (Object.create) { Events.prototype = Object.create(null); if (!new Events().__proto__) prefix = false; } /** * Representation of a single event listener. * * @param {Function} fn The listener function. * @param {*} context The context to invoke the listener with. * @param {Boolean} [once=false] Specify if the listener is a one-time listener. * @constructor * @private */ function EE(fn, context, once) { this.fn = fn; this.context = context; this.once = once || false; } /** * Add a listener for a given event. * * @param {EventEmitter} emitter Reference to the `EventEmitter` instance. * @param {(String|Symbol)} event The event name. * @param {Function} fn The listener function. * @param {*} context The context to invoke the listener with. * @param {Boolean} once Specify if the listener is a one-time listener. * @returns {EventEmitter} * @private */ function addListener(emitter, event, fn, context, once) { if (typeof fn !== "function") throw new TypeError("The listener must be a function"); var listener$1 = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event; if (!emitter._events[evt]) emitter._events[evt] = listener$1, emitter._eventsCount++; else if (!emitter._events[evt].fn) emitter._events[evt].push(listener$1); else emitter._events[evt] = [emitter._events[evt], listener$1]; return emitter; } /** * Clear event by name. * * @param {EventEmitter} emitter Reference to the `EventEmitter` instance. * @param {(String|Symbol)} evt The Event name. * @private */ function clearEvent(emitter, evt) { if (--emitter._eventsCount === 0) emitter._events = new Events(); else delete emitter._events[evt]; } /** * Minimal `EventEmitter` interface that is molded against the Node.js * `EventEmitter` interface. * * @constructor * @public */ function EventEmitter$1() { this._events = new Events(); this._eventsCount = 0; } /** * Return an array listing the events for which the emitter has registered * listeners. * * @returns {Array} * @public */ EventEmitter$1.prototype.eventNames = function eventNames() { var names = [], events$1, name; if (this._eventsCount === 0) return names; for (name in events$1 = this._events) if (has.call(events$1, name)) names.push(prefix ? name.slice(1) : name); if (Object.getOwnPropertySymbols) return names.concat(Object.getOwnPropertySymbols(events$1)); return names; }; /** * Return the listeners registered for a given event. * * @param {(String|Symbol)} event The event name. * @returns {Array} The registered listeners. * @public */ EventEmitter$1.prototype.listeners = function listeners(event) { var evt = prefix ? prefix + event : event, handlers = this._events[evt]; if (!handlers) return []; if (handlers.fn) return [handlers.fn]; for (var i$1 = 0, l = handlers.length, ee = new Array(l); i$1 < l; i$1++) ee[i$1] = handlers[i$1].fn; return ee; }; /** * Return the number of listeners listening to a given event. * * @param {(String|Symbol)} event The event name. * @returns {Number} The number of listeners. * @public */ EventEmitter$1.prototype.listenerCount = function listenerCount(event) { var evt = prefix ? prefix + event : event, listeners = this._events[evt]; if (!listeners) return 0; if (listeners.fn) return 1; return listeners.length; }; /** * Calls each of the listeners registered for a given event. * * @param {(String|Symbol)} event The event name. * @returns {Boolean} `true` if the event had listeners, else `false`. * @public */ EventEmitter$1.prototype.emit = function emit(event, a1, a2, a3, a4, a5) { var evt = prefix ? prefix + event : event; if (!this._events[evt]) return false; var listeners = this._events[evt], len = arguments.length, args, i$1; if (listeners.fn) { if (listeners.once) this.removeListener(event, listeners.fn, void 0, true); switch (len) { case 1: return listeners.fn.call(listeners.context), true; case 2: return listeners.fn.call(listeners.context, a1), true; case 3: return listeners.fn.call(listeners.context, a1, a2), true; case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true; case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true; case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true; } for (i$1 = 1, args = new Array(len - 1); i$1 < len; i$1++) args[i$1 - 1] = arguments[i$1]; listeners.fn.apply(listeners.context, args); } else { var length = listeners.length, j; for (i$1 = 0; i$1 < length; i$1++) { if (listeners[i$1].once) this.removeListener(event, listeners[i$1].fn, void 0, true); switch (len) { case 1: listeners[i$1].fn.call(listeners[i$1].context); break; case 2: listeners[i$1].fn.call(listeners[i$1].context, a1); break; case 3: listeners[i$1].fn.call(listeners[i$1].context, a1, a2); break; case 4: listeners[i$1].fn.call(listeners[i$1].context, a1, a2, a3); break; default: if (!args) for (j = 1, args = new Array(len - 1); j < len; j++) args[j - 1] = arguments[j]; listeners[i$1].fn.apply(listeners[i$1].context, args); } } } return true; }; /** * Add a listener for a given event. * * @param {(String|Symbol)} event The event name. * @param {Function} fn The listener function. * @param {*} [context=this] The context to invoke the listener with. * @returns {EventEmitter} `this`. * @public */ EventEmitter$1.prototype.on = function on(event, fn, context) { return addListener(this, event, fn, context, false); }; /** * Add a one-time listener for a given event. * * @param {(String|Symbol)} event The event name. * @param {Function} fn The listener function. * @param {*} [context=this] The context to invoke the listener with. * @returns {EventEmitter} `this`. * @public */ EventEmitter$1.prototype.once = function once(event, fn, context) { return addListener(this, event, fn, context, true); }; /** * Remove the listeners of a given event. * * @param {(String|Symbol)} event The event name. * @param {Function} fn Only remove the listeners that match this function. * @param {*} context Only remove the listeners that have this context. * @param {Boolean} once Only remove one-time listeners. * @returns {EventEmitter} `this`. * @public */ EventEmitter$1.prototype.removeListener = function removeListener(event, fn, context, once) { var evt = prefix ? prefix + event : event; if (!this._events[evt]) return this; if (!fn) { clearEvent(this, evt); return this; } var listeners = this._events[evt]; if (listeners.fn) { if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) clearEvent(this, evt); } else { for (var i$1 = 0, events$1 = [], length = listeners.length; i$1 < length; i$1++) if (listeners[i$1].fn !== fn || once && !listeners[i$1].once || context && listeners[i$1].context !== context) events$1.push(listeners[i$1]); if (events$1.length) this._events[evt] = events$1.length === 1 ? events$1[0] : events$1; else clearEvent(this, evt); } return this; }; /** * Remove all listeners, or those of the specified event. * * @param {(String|Symbol)} [event] The event name. * @returns {EventEmitter} `this`. * @public */ EventEmitter$1.prototype.removeAllListeners = function removeAllListeners(event) { var evt; if (event) { evt = prefix ? prefix + event : event; if (this._events[evt]) clearEvent(this, evt); } else { this._events = new Events(); this._eventsCount = 0; } return this; }; EventEmitter$1.prototype.off = EventEmitter$1.prototype.removeListener; EventEmitter$1.prototype.addListener = EventEmitter$1.prototype.on; EventEmitter$1.prefixed = prefix; EventEmitter$1.EventEmitter = EventEmitter$1; if ("undefined" !== typeof module) module.exports = EventEmitter$1; } }); //#endregion //#region ../../node_modules/.pnpm/requires-port@1.0.0/node_modules/requires-port/index.js var require_requires_port = __commonJS({ "../../node_modules/.pnpm/requires-port@1.0.0/node_modules/requires-port/index.js"(exports, module) { /** * Check if we're required to add a port number. * * @see https://url.spec.whatwg.org/#default-port * @param {Number|String} port Port number we need to check * @param {String} protocol Protocol we need to check against. * @returns {Boolean} Is it a default port for the given protocol * @api private */ module.exports = function required$1(port, protocol) { protocol = protocol.split(":")[0]; port = +port; if (!port) return false; switch (protocol) { case "http": case "ws": return port !== 80; case "https": case "wss": return port !== 443; case "ftp": return port !== 21; case "gopher": return port !== 70; case "file": return false; } return port !== 0; }; } }); //#endregion //#region ../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/lib/http-proxy/common.js var require_common = __commonJS({ "../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/lib/http-proxy/common.js"(exports) { var common$3 = exports, url$2 = require("url"), required = require_requires_port(); var upgradeHeader = /(^|,)\s*upgrade\s*($|,)/i, isSSL = /^https|wss/; /** * Simple Regex for testing if protocol is https */ common$3.isSSL = isSSL; /** * Copies the right headers from `options` and `req` to * `outgoing` which is then used to fire the proxied * request. * * Examples: * * common.setupOutgoing(outgoing, options, req) * // => { host: ..., hostname: ...} * * @param {Object} Outgoing Base object to be filled with required properties * @param {Object} Options Config object passed to the proxy * @param {ClientRequest} Req Request Object * @param {String} Forward String to select forward or target *  * @return {Object} Outgoing Object with all required properties set * * @api private */ common$3.setupOutgoing = function(outgoing, options$1, req$4, forward) { outgoing.port = options$1[forward || "target"].port || (isSSL.test(options$1[forward || "target"].protocol) ? 443 : 80); [ "host", "hostname", "socketPath", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "secureProtocol" ].forEach(function(e$1) { outgoing[e$1] = options$1[forward || "target"][e$1]; }); outgoing.method = options$1.method || req$4.method; outgoing.headers = Object.assign({}, req$4.headers); if (options$1.headers) Object.assign(outgoing.headers, options$1.headers); if (options$1.auth) outgoing.auth = options$1.auth; if (options$1.ca) outgoing.ca = options$1.ca; if (isSSL.test(options$1[forward || "target"].protocol)) outgoing.rejectUnauthorized = typeof options$1.secure === "undefined" ? true : options$1.secure; outgoing.agent = options$1.agent || false; outgoing.localAddress = options$1.localAddress; if (!outgoing.agent) { outgoing.headers = outgoing.headers || {}; if (typeof outgoing.headers.connection !== "string" || !upgradeHeader.test(outgoing.headers.connection)) outgoing.headers.connection = "close"; } var target = options$1[forward || "target"]; var targetPath = target && options$1.prependPath !== false ? target.path || "" : ""; var outgoingPath = !options$1.toProxy ? url$2.parse(req$4.url).path || "" : req$4.url; outgoingPath = !options$1.ignorePath ? outgoingPath : ""; outgoing.path = common$3.urlJoin(targetPath, outgoingPath); if (options$1.changeOrigin) outgoing.headers.host = required(outgoing.port, options$1[forward || "target"].protocol) && !hasPort(outgoing.host) ? outgoing.host + ":" + outgoing.port : outgoing.host; return outgoing; }; /** * Set the proper configuration for sockets, * set no delay and set keep alive, also set * the timeout to 0. * * Examples: * * common.setupSocket(socket) * // => Socket * * @param {Socket} Socket instance to setup *  * @return {Socket} Return the configured socket. * * @api private */ common$3.setupSocket = function(socket) { socket.setTimeout(0); socket.setNoDelay(true); socket.setKeepAlive(true, 0); return socket; }; /** * Get the port number from the host. Or guess it based on the connection type. * * @param {Request} req Incoming HTTP request. * * @return {String} The port number. * * @api private */ common$3.getPort = function(req$4) { var res = req$4.headers.host ? req$4.headers.host.match(/:(\d+)/) : ""; return res ? res[1] : common$3.hasEncryptedConnection(req$4) ? "443" : "80"; }; /** * Check if the request has an encrypted connection. * * @param {Request} req Incoming HTTP request. * * @return {Boolean} Whether the connection is encrypted or not. * * @api private */ common$3.hasEncryptedConnection = function(req$4) { return Boolean(req$4.connection.encrypted || req$4.connection.pair); }; /** * OS-agnostic join (doesn't break on URLs like path.join does on Windows)> * * @return {String} The generated path. * * @api private */ common$3.urlJoin = function() { var args = Array.prototype.slice.call(arguments), lastIndex = args.length - 1, last = args[lastIndex], lastSegs = last.split("?"), retSegs; args[lastIndex] = lastSegs.shift(); retSegs = [args.filter(Boolean).join("/").replace(/\/+/g, "/").replace("http:/", "http://").replace("https:/", "https://")]; retSegs.push.apply(retSegs, lastSegs); return retSegs.join("?"); }; /** * Rewrites or removes the domain of a cookie header * * @param {String|Array} Header * @param {Object} Config, mapping of domain to rewritten domain. * '*' key to match any domain, null value to remove the domain. * * @api private */ common$3.rewriteCookieProperty = function rewriteCookieProperty(header, config$2, property) { if (Array.isArray(header)) return header.map(function(headerElement) { return rewriteCookieProperty(headerElement, config$2, property); }); return header.replace(new RegExp("(;\\s*" + property + "=)([^;]+)", "i"), function(match, prefix$1, previousValue) { var newValue; if (previousValue in config$2) newValue = config$2[previousValue]; else if ("*" in config$2) newValue = config$2["*"]; else return match; if (newValue) return prefix$1 + newValue; else return ""; }); }; /** * Check the host and see if it potentially has a port in it (keep it simple) * * @returns {Boolean} Whether we have one or not * * @api private */ function hasPort(host) { return !!~host.indexOf(":"); } } }); //#endregion //#region ../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js var require_web_outgoing = __commonJS({ "../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js"(exports, module) { var url$1 = require("url"), common$2 = require_common(); var redirectRegex = /^201|30(1|2|7|8)$/; /*! * Array of passes. * * A `pass` is just a function that is executed on `req, res, options` * so that you can easily add new checks while still keeping the base * flexible. */ module.exports = { removeChunked: function removeChunked(req$4, res, proxyRes) { if (req$4.httpVersion === "1.0") delete proxyRes.headers["transfer-encoding"]; }, setConnection: function setConnection(req$4, res, proxyRes) { if (req$4.httpVersion === "1.0") proxyRes.headers.connection = req$4.headers.connection || "close"; else if (req$4.httpVersion !== "2.0" && !proxyRes.headers.connection) proxyRes.headers.connection = req$4.headers.connection || "keep-alive"; }, setRedirectHostRewrite: function setRedirectHostRewrite(req$4, res, proxyRes, options$1) { if ((options$1.hostRewrite || options$1.autoRewrite || options$1.protocolRewrite) && proxyRes.headers["location"] && redirectRegex.test(proxyRes.statusCode)) { var target = url$1.parse(options$1.target); var u = url$1.parse(proxyRes.headers["location"]); if (target.host != u.host) return; if (options$1.hostRewrite) u.host = options$1.hostRewrite; else if (options$1.autoRewrite) u.host = req$4.headers["host"]; if (options$1.protocolRewrite) u.protocol = options$1.protocolRewrite; proxyRes.headers["location"] = u.format(); } }, writeHeaders: function writeHeaders(req$4, res, proxyRes, options$1) { var rewriteCookieDomainConfig = options$1.cookieDomainRewrite, rewriteCookiePathConfig = options$1.cookiePathRewrite, preserveHeaderKeyCase = options$1.preserveHeaderKeyCase, rawHeaderKeyMap, setHeader = function(key$1, header) { if (header == void 0) return; if (rewriteCookieDomainConfig && key$1.toLowerCase() === "set-cookie") header = common$2.rewriteCookieProperty(header, rewriteCookieDomainConfig, "domain"); if (rewriteCookiePathConfig && key$1.toLowerCase() === "set-cookie") header = common$2.rewriteCookieProperty(header, rewriteCookiePathConfig, "path"); res.setHeader(String(key$1).trim(), header); }; if (typeof rewriteCookieDomainConfig === "string") rewriteCookieDomainConfig = { "*": rewriteCookieDomainConfig }; if (typeof rewriteCookiePathConfig === "string") rewriteCookiePathConfig = { "*": rewriteCookiePathConfig }; if (preserveHeaderKeyCase && proxyRes.rawHeaders != void 0) { rawHeaderKeyMap = {}; for (var i$1 = 0; i$1 < proxyRes.rawHeaders.length; i$1 += 2) { var key = proxyRes.rawHeaders[i$1]; rawHeaderKeyMap[key.toLowerCase()] = key; } } Object.keys(proxyRes.headers).forEach(function(key$1) { var header = proxyRes.headers[key$1]; if (preserveHeaderKeyCase && rawHeaderKeyMap) key$1 = rawHeaderKeyMap[key$1] || key$1; setHeader(key$1, header); }); }, writeStatusCode: function writeStatusCode(req$4, res, proxyRes) { if (proxyRes.statusMessage) { res.statusCode = proxyRes.statusCode; res.statusMessage = proxyRes.statusMessage; } else res.statusCode = proxyRes.statusCode; } }; } }); //#endregion //#region ../../node_modules/.pnpm/follow-redirects@1.15.9_debug@4.4.1/node_modules/follow-redirects/debug.js var require_debug = __commonJS({ "../../node_modules/.pnpm/follow-redirects@1.15.9_debug@4.4.1/node_modules/follow-redirects/debug.js"(exports, module) { var debug$7; module.exports = function() { if (!debug$7) { try { debug$7 = require_node$1()("follow-redirects"); } catch (error$1) {} if (typeof debug$7 !== "function") debug$7 = function() {}; } debug$7.apply(null, arguments); }; } }); //#endregion //#region ../../node_modules/.pnpm/follow-redirects@1.15.9_debug@4.4.1/node_modules/follow-redirects/index.js var require_follow_redirects = __commonJS({ "../../node_modules/.pnpm/follow-redirects@1.15.9_debug@4.4.1/node_modules/follow-redirects/index.js"(exports, module) { var url = require("url"); var URL$2 = url.URL; var http$2 = require("http"); var https$2 = require("https"); var Writable = require("stream").Writable; var assert$1 = require("assert"); var debug$6 = require_debug(); // istanbul ignore next (function detectUnsupportedEnvironment() { var looksLikeNode = typeof process !== "undefined"; var looksLikeBrowser = typeof window !== "undefined" && typeof document !== "undefined"; var looksLikeV8 = isFunction(Error.captureStackTrace); if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) console.warn("The follow-redirects package should be excluded from browser builds."); })(); var useNativeURL = false; try { assert$1(new URL$2("")); } catch (error$1) { useNativeURL = error$1.code === "ERR_INVALID_URL"; } var preservedUrlFields = [ "auth", "host", "hostname", "href", "path", "pathname", "port", "protocol", "query", "search", "hash" ]; var events = [ "abort", "aborted", "connect", "error", "socket", "timeout" ]; var eventHandlers = Object.create(null); events.forEach(function(event) { eventHandlers[event] = function(arg1, arg2, arg3) { this._redirectable.emit(event, arg1, arg2, arg3); }; }); var InvalidUrlError = createErrorType("ERR_INVALID_URL", "Invalid URL", TypeError); var RedirectionError = createErrorType("ERR_FR_REDIRECTION_FAILURE", "Redirected request failed"); var TooManyRedirectsError = createErrorType("ERR_FR_TOO_MANY_REDIRECTS", "Maximum number of redirects exceeded", RedirectionError); var MaxBodyLengthExceededError = createErrorType("ERR_FR_MAX_BODY_LENGTH_EXCEEDED", "Request body larger than maxBodyLength limit"); var WriteAfterEndError = createErrorType("ERR_STREAM_WRITE_AFTER_END", "write after end"); // istanbul ignore next var destroy = Writable.prototype.destroy || noop$1; function RedirectableRequest(options$1, responseCallback) { Writable.call(this); this._sanitizeOptions(options$1); this._options = options$1; this._ended = false; this._ending = false; this._redirectCount = 0; this._redirects = []; this._requestBodyLength = 0; this._requestBodyBuffers = []; if (responseCallback) this.on("response", responseCallback); var self$1 = this; this._onNativeResponse = function(response) { try { self$1._processResponse(response); } catch (cause) { self$1.emit("error", cause instanceof RedirectionError ? cause : new RedirectionError({ cause })); } }; this._performRequest(); } RedirectableRequest.prototype = Object.create(Writable.prototype); RedirectableRequest.prototype.abort = function() { destroyRequest(this._currentRequest); this._currentRequest.abort(); this.emit("abort"); }; RedirectableRequest.prototype.destroy = function(error$1) { destroyRequest(this._currentRequest, error$1); destroy.call(this, error$1); return this; }; RedirectableRequest.prototype.write = function(data, encoding, callback) { if (this._ending) throw new WriteAfterEndError(); if (!isString(data) && !isBuffer(data)) throw new TypeError("data should be a string, Buffer or Uint8Array"); if (isFunction(encoding)) { callback = encoding; encoding = null; } if (data.length === 0) { if (callback) callback(); return; } if (this._requestBodyLength + data.length <= this._options.maxBodyLength) { this._requestBodyLength += data.length; this._requestBodyBuffers.push({ data, encoding }); this._currentRequest.write(data, encoding, callback); } else { this.emit("error", new MaxBodyLengthExceededError()); this.abort(); } }; RedirectableRequest.prototype.end = function(data, encoding, callback) { if (isFunction(data)) { callback = data; data = encoding = null; } else if (isFunction(encoding)) { callback = encoding; encoding = null; } if (!data) { this._ended = this._ending = true; this._currentRequest.end(null, null, callback); } else { var self$1 = this; var currentRequest = this._currentRequest; this.write(data, encoding, function() { self$1._ended = true; currentRequest.end(null, null, callback); }); this._ending = true; } }; RedirectableRequest.prototype.setHeader = function(name, value$1) { this._options.headers[name] = value$1; this._currentRequest.setHeader(name, value$1); }; RedirectableRequest.prototype.removeHeader = function(name) { delete this._options.headers[name]; this._currentRequest.removeHeader(name); }; RedirectableRequest.prototype.setTimeout = function(msecs, callback) { var self$1 = this; function destroyOnTimeout(socket) { socket.setTimeout(msecs); socket.removeListener("timeout", socket.destroy); socket.addListener("timeout", socket.destroy); } function startTimer(socket) { if (self$1._timeout) clearTimeout(self$1._timeout); self$1._timeout = setTimeout(function() { self$1.emit("timeout"); clearTimer(); }, msecs); destroyOnTimeout(socket); } function clearTimer() { if (self$1._timeout) { clearTimeout(self$1._timeout); self$1._timeout = null; } self$1.removeListener("abort", clearTimer); self$1.removeListener("error", clearTimer); self$1.removeListener("response", clearTimer); self$1.removeListener("close", clearTimer); if (callback) self$1.removeListener("timeout", callback); if (!self$1.socket) self$1._currentRequest.removeListener("socket", startTimer); } if (callback) this.on("timeout", callback); if (this.socket) startTimer(this.socket); else this._currentRequest.once("socket", startTimer); this.on("socket", destroyOnTimeout); this.on("abort", clearTimer); this.on("error", clearTimer); this.on("response", clearTimer); this.on("close", clearTimer); return this; }; [ "flushHeaders", "getHeader", "setNoDelay", "setSocketKeepAlive" ].forEach(function(method) { RedirectableRequest.prototype[method] = function(a, b) { return this._currentRequest[method](a, b); }; }); [ "aborted", "connection", "socket" ].forEach(function(property) { Object.defineProperty(RedirectableRequest.prototype, property, { get: function() { return this._currentRequest[property]; } }); }); RedirectableRequest.prototype._sanitizeOptions = function(options$1) { if (!options$1.headers) options$1.headers = {}; if (options$1.host) { if (!options$1.hostname) options$1.hostname = options$1.host; delete options$1.host; } if (!options$1.pathname && options$1.path) { var searchPos = options$1.path.indexOf("?"); if (searchPos < 0) options$1.pathname = options$1.path; else { options$1.pathname = options$1.path.substring(0, searchPos); options$1.search = options$1.path.substring(searchPos); } } }; RedirectableRequest.prototype._performRequest = function() { var protocol = this._options.protocol; var nativeProtocol = this._options.nativeProtocols[protocol]; if (!nativeProtocol) throw new TypeError("Unsupported protocol " + protocol); if (this._options.agents) { var scheme = protocol.slice(0, -1); this._options.agent = this._options.agents[scheme]; } var request = this._currentRequest = nativeProtocol.request(this._options, this._onNativeResponse); request._redirectable = this; for (var event of events) request.on(event, eventHandlers[event]); this._currentUrl = /^\//.test(this._options.path) ? url.format(this._options) : this._options.path; if (this._isRedirect) { var i$1 = 0; var self$1 = this; var buffers = this._requestBodyBuffers; (function writeNext(error$1) { // istanbul ignore else if (request === self$1._currentRequest) { // istanbul ignore if if (error$1) self$1.emit("error", error$1); else if (i$1 < buffers.length) { var buffer = buffers[i$1++]; // istanbul ignore else if (!request.finished) request.write(buffer.data, buffer.encoding, writeNext); } else if (self$1._ended) request.end(); } })(); } }; RedirectableRequest.prototype._processResponse = function(response) { var statusCode = response.statusCode; if (this._options.trackRedirects) this._redirects.push({ url: this._currentUrl, headers: response.headers, statusCode }); var location$1 = response.headers.location; if (!location$1 || this._options.followRedirects === false || statusCode < 300 || statusCode >= 400) { response.responseUrl = this._currentUrl; response.redirects = this._redirects; this.emit("response", response); this._requestBodyBuffers = []; return; } destroyRequest(this._currentRequest); response.destroy(); if (++this._redirectCount > this._options.maxRedirects) throw new TooManyRedirectsError(); var requestHeaders; var beforeRedirect = this._options.beforeRedirect; if (beforeRedirect) requestHeaders = Object.assign({ Host: response.req.getHeader("host") }, this._options.headers); var method = this._options.method; if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" || statusCode === 303 && !/^(?:GET|HEAD)$/.test(this._options.method)) { this._options.method = "GET"; this._requestBodyBuffers = []; removeMatchingHeaders(/^content-/i, this._options.headers); } var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers); var currentUrlParts = parseUrl(this._currentUrl); var currentHost = currentHostHeader || currentUrlParts.host; var currentUrl = /^\w+:/.test(location$1) ? this._currentUrl : url.format(Object.assign(currentUrlParts, { host: currentHost })); var redirectUrl = resolveUrl(location$1, currentUrl); debug$6("redirecting to", redirectUrl.href); this._isRedirect = true; spreadUrlObject(redirectUrl, this._options); if (redirectUrl.protocol !== currentUrlParts.protocol && redirectUrl.protocol !== "https:" || redirectUrl.host !== currentHost && !isSubdomain(redirectUrl.host, currentHost)) removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers); if (isFunction(beforeRedirect)) { var responseDetails = { headers: response.headers, statusCode }; var requestDetails = { url: currentUrl, method, headers: requestHeaders }; beforeRedirect(this._options, responseDetails, requestDetails); this._sanitizeOptions(this._options); } this._performRequest(); }; function wrap(protocols) { var exports$1 = { maxRedirects: 21, maxBodyLength: 10 * 1024 * 1024 }; var nativeProtocols = {}; Object.keys(protocols).forEach(function(scheme) { var protocol = scheme + ":"; var nativeProtocol = nativeProtocols[protocol] = protocols[scheme]; var wrappedProtocol = exports$1[scheme] = Object.create(nativeProtocol); function request(input, options$1, callback) { if (isURL(input)) input = spreadUrlObject(input); else if (isString(input)) input = spreadUrlObject(parseUrl(input)); else { callback = options$1; options$1 = validateUrl(input); input = { protocol }; } if (isFunction(options$1)) { callback = options$1; options$1 = null; } options$1 = Object.assign({ maxRedirects: exports$1.maxRedirects, maxBodyLength: exports$1.maxBodyLength }, input, options$1); options$1.nativeProtocols = nativeProtocols; if (!isString(options$1.host) && !isString(options$1.hostname)) options$1.hostname = "::1"; assert$1.equal(options$1.protocol, protocol, "protocol mismatch"); debug$6("options", options$1); return new RedirectableRequest(options$1, callback); } function get$3(input, options$1, callback) { var wrappedRequest = wrappedProtocol.request(input, options$1, callback); wrappedRequest.end(); return wrappedRequest; } Object.defineProperties(wrappedProtocol, { request: { value: request, configurable: true, enumerable: true, writable: true }, get: { value: get$3, configurable: true, enumerable: true, writable: true } }); }); return exports$1; } function noop$1() {} function parseUrl(input) { var parsed; // istanbul ignore else if (useNativeURL) parsed = new URL$2(input); else { parsed = validateUrl(url.parse(input)); if (!isString(parsed.protocol)) throw new InvalidUrlError({ input }); } return parsed; } function resolveUrl(relative$3, base) { // istanbul ignore next return useNativeURL ? new URL$2(relative$3, base) : parseUrl(url.resolve(base, relative$3)); } function validateUrl(input) { if (/^\[/.test(input.hostname) && !/^\[[:0-9a-f]+\]$/i.test(input.hostname)) throw new InvalidUrlError({ input: input.href || input }); if (/^\[/.test(input.host) && !/^\[[:0-9a-f]+\](:\d+)?$/i.test(input.host)) throw new InvalidUrlError({ input: input.href || input }); return input; } function spreadUrlObject(urlObject, target) { var spread = target || {}; for (var key of preservedUrlFields) spread[key] = urlObject[key]; if (spread.hostname.startsWith("[")) spread.hostname = spread.hostname.slice(1, -1); if (spread.port !== "") spread.port = Number(spread.port); spread.path = spread.search ? spread.pathname + spread.search : spread.pathname; return spread; } function removeMatchingHeaders(regex, headers) { var lastValue; for (var header in headers) if (regex.test(header)) { lastValue = headers[header]; delete headers[header]; } return lastValue === null || typeof lastValue === "undefined" ? void 0 : String(lastValue).trim(); } function createErrorType(code, message, baseClass) { function CustomError(properties) { // istanbul ignore else if (isFunction(Error.captureStackTrace)) Error.captureStackTrace(this, this.constructor); Object.assign(this, properties || {}); this.code = code; this.message = this.cause ? message + ": " + this.cause.message : message; } CustomError.prototype = new (baseClass || Error)(); Object.defineProperties(CustomError.prototype, { constructor: { value: CustomError, enumerable: false }, name: { value: "Error [" + code + "]", enumerable: false } }); return CustomError; } function destroyRequest(request, error$1) { for (var event of events) request.removeListener(event, eventHandlers[event]); request.on("error", noop$1); request.destroy(error$1); } function isSubdomain(subdomain, domain) { assert$1(isString(subdomain) && isString(domain)); var dot = subdomain.length - domain.length - 1; return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain); } function isString(value$1) { return typeof value$1 === "string" || value$1 instanceof String; } function isFunction(value$1) { return typeof value$1 === "function"; } function isBuffer(value$1) { return typeof value$1 === "object" && "length" in value$1; } function isURL(value$1) { return URL$2 && value$1 instanceof URL$2; } module.exports = wrap({ http: http$2, https: https$2 }); module.exports.wrap = wrap; } }); //#endregion //#region ../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js var require_web_incoming = __commonJS({ "../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js"(exports, module) { var httpNative = require("http"), httpsNative = require("https"), web_o = require_web_outgoing(), common$1 = require_common(), followRedirects = require_follow_redirects(); web_o = Object.keys(web_o).map(function(pass) { return web_o[pass]; }); var nativeAgents = { http: httpNative, https: httpsNative }; /*! * Array of passes. * * A `pass` is just a function that is executed on `req, res, options` * so that you can easily add new checks while still keeping the base * flexible. */ module.exports = { deleteLength: function deleteLength(req$4, res, options$1) { if ((req$4.method === "DELETE" || req$4.method === "OPTIONS") && !req$4.headers["content-length"]) { req$4.headers["content-length"] = "0"; delete req$4.headers["transfer-encoding"]; } }, timeout: function timeout(req$4, res, options$1) { if (options$1.timeout) req$4.socket.setTimeout(options$1.timeout); }, XHeaders: function XHeaders(req$4, res, options$1) { if (!options$1.xfwd) return; var encrypted = req$4.isSpdy || common$1.hasEncryptedConnection(req$4); var values = { for: req$4.connection.remoteAddress || req$4.socket.remoteAddress, port: common$1.getPort(req$4), proto: encrypted ? "https" : "http" }; [ "for", "port", "proto" ].forEach(function(header) { req$4.headers["x-forwarded-" + header] = (req$4.headers["x-forwarded-" + header] || "") + (req$4.headers["x-forwarded-" + header] ? "," : "") + values[header]; }); req$4.headers["x-forwarded-host"] = req$4.headers["x-forwarded-host"] || req$4.headers["host"] || ""; }, stream: function stream$1(req$4, res, options$1, _, server, clb) { server.emit("start", req$4, res, options$1.target || options$1.forward); var agents = options$1.followRedirects ? followRedirects : nativeAgents; var http$6 = agents.http; var https$4 = agents.https; if (options$1.forward) { var forwardReq = (options$1.forward.protocol === "https:" ? https$4 : http$6).request(common$1.setupOutgoing(options$1.ssl || {}, options$1, req$4, "forward")); var forwardError = createErrorHandler(forwardReq, options$1.forward); req$4.on("error", forwardError); forwardReq.on("error", forwardError); (options$1.buffer || req$4).pipe(forwardReq); if (!options$1.target) return res.end(); } var proxyReq = (options$1.target.protocol === "https:" ? https$4 : http$6).request(common$1.setupOutgoing(options$1.ssl || {}, options$1, req$4)); proxyReq.on("socket", function(socket) { if (server && !proxyReq.getHeader("expect")) server.emit("proxyReq", proxyReq, req$4, res, options$1); }); if (options$1.proxyTimeout) proxyReq.setTimeout(options$1.proxyTimeout, function() { proxyReq.abort(); }); req$4.on("aborted", function() { proxyReq.abort(); }); var proxyError = createErrorHandler(proxyReq, options$1.target); req$4.on("error", proxyError); proxyReq.on("error", proxyError); function createErrorHandler(proxyReq$1, url$6) { return function proxyError$1(err$2) { if (req$4.socket.destroyed && err$2.code === "ECONNRESET") { server.emit("econnreset", err$2, req$4, res, url$6); return proxyReq$1.abort(); } if (clb) clb(err$2, req$4, res, url$6); else server.emit("error", err$2, req$4, res, url$6); }; } (options$1.buffer || req$4).pipe(proxyReq); proxyReq.on("response", function(proxyRes) { if (server) server.emit("proxyRes", proxyRes, req$4, res); if (!res.headersSent && !options$1.selfHandleResponse) { for (var i$1 = 0; i$1 < web_o.length; i$1++) if (web_o[i$1](req$4, res, proxyRes, options$1)) break; } if (!res.finished) { proxyRes.on("end", function() { if (server) server.emit("end", req$4, res, proxyRes); }); if (!options$1.selfHandleResponse) proxyRes.pipe(res); } else if (server) server.emit("end", req$4, res, proxyRes); }); } }; } }); //#endregion //#region ../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js var require_ws_incoming = __commonJS({ "../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js"(exports, module) { var http$1 = require("http"), https$1 = require("https"), common = require_common(); /*! * Array of passes. * * A `pass` is just a function that is executed on `req, socket, options` * so that you can easily add new checks while still keeping the base * flexible. */ module.exports = { checkMethodAndHeader: function checkMethodAndHeader(req$4, socket) { if (req$4.method !== "GET" || !req$4.headers.upgrade) { socket.destroy(); return true; } if (req$4.headers.upgrade.toLowerCase() !== "websocket") { socket.destroy(); return true; } }, XHeaders: function XHeaders(req$4, socket, options$1) { if (!options$1.xfwd) return; var values = { for: req$4.connection.remoteAddress || req$4.socket.remoteAddress, port: common.getPort(req$4), proto: common.hasEncryptedConnection(req$4) ? "wss" : "ws" }; [ "for", "port", "proto" ].forEach(function(header) { req$4.headers["x-forwarded-" + header] = (req$4.headers["x-forwarded-" + header] || "") + (req$4.headers["x-forwarded-" + header] ? "," : "") + values[header]; }); }, stream: function stream$1(req$4, socket, options$1, head, server, clb) { var createHttpHeader = function(line, headers) { return Object.keys(headers).reduce(function(head$1, key) { var value$1 = headers[key]; if (!Array.isArray(value$1)) { head$1.push(key + ": " + value$1); return head$1; } for (var i$1 = 0; i$1 < value$1.length; i$1++) head$1.push(key + ": " + value$1[i$1]); return head$1; }, [line]).join("\r\n") + "\r\n\r\n"; }; common.setupSocket(socket); if (head && head.length) socket.unshift(head); var proxyReq = (common.isSSL.test(options$1.target.protocol) ? https$1 : http$1).request(common.setupOutgoing(options$1.ssl || {}, options$1, req$4)); if (server) server.emit("proxyReqWs", proxyReq, req$4, socket, options$1, head); proxyReq.on("error", onOutgoingError); proxyReq.on("response", function(res) { if (!res.upgrade) { socket.write(createHttpHeader("HTTP/" + res.httpVersion + " " + res.statusCode + " " + res.statusMessage, res.headers)); res.pipe(socket); } }); proxyReq.on("upgrade", function(proxyRes, proxySocket, proxyHead) { proxySocket.on("error", onOutgoingError); proxySocket.on("end", function() { server.emit("close", proxyRes, proxySocket, proxyHead); }); socket.on("error", function() { proxySocket.end(); }); common.setupSocket(proxySocket); if (proxyHead && proxyHead.length) proxySocket.unshift(proxyHead); socket.write(createHttpHeader("HTTP/1.1 101 Switching Protocols", proxyRes.headers)); proxySocket.pipe(socket).pipe(proxySocket); server.emit("open", proxySocket); server.emit("proxySocket", proxySocket); }); return proxyReq.end(); function onOutgoingError(err$2) { if (clb) clb(err$2, req$4, socket); else server.emit("error", err$2, req$4, socket); socket.end(); } } }; } }); //#endregion //#region ../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/lib/http-proxy/index.js var require_http_proxy$2 = __commonJS({ "../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/lib/http-proxy/index.js"(exports, module) { var httpProxy$1 = module.exports, parse_url = require("url").parse, EE3 = require_eventemitter3(), http = require("http"), https = require("https"), web = require_web_incoming(), ws = require_ws_incoming(); httpProxy$1.Server = ProxyServer$1; /** * Returns a function that creates the loader for * either `ws` or `web`'s passes. * * Examples: * * httpProxy.createRightProxy('ws') * // => [Function] * * @param {String} Type Either 'ws' or 'web' *  * @return {Function} Loader Function that when called returns an iterator for the right passes * * @api private */ function createRightProxy(type) { return function(options$1) { return function(req$4, res) { var passes = type === "ws" ? this.wsPasses : this.webPasses, args = [].slice.call(arguments), cntr = args.length - 1, head, cbl; if (typeof args[cntr] === "function") { cbl = args[cntr]; cntr--; } var requestOptions = options$1; if (!(args[cntr] instanceof Buffer) && args[cntr] !== res) { requestOptions = Object.assign({}, options$1); Object.assign(requestOptions, args[cntr]); cntr--; } if (args[cntr] instanceof Buffer) head = args[cntr]; ["target", "forward"].forEach(function(e$1) { if (typeof requestOptions[e$1] === "string") requestOptions[e$1] = parse_url(requestOptions[e$1]); }); if (!requestOptions.target && !requestOptions.forward) return this.emit("error", /* @__PURE__ */ new Error("Must provide a proper URL as target")); for (var i$1 = 0; i$1 < passes.length; i$1++) /** * Call of passes functions * pass(req, res, options, head) * * In WebSockets case the `res` variable * refer to the connection socket * pass(req, socket, options, head) */ if (passes[i$1](req$4, res, requestOptions, head, this, cbl)) break; }; }; } httpProxy$1.createRightProxy = createRightProxy; function ProxyServer$1(options$1) { EE3.call(this); options$1 = options$1 || {}; options$1.prependPath = options$1.prependPath === false ? false : true; this.web = this.proxyRequest = createRightProxy("web")(options$1); this.ws = this.proxyWebsocketRequest = createRightProxy("ws")(options$1); this.options = options$1; this.webPasses = Object.keys(web).map(function(pass) { return web[pass]; }); this.wsPasses = Object.keys(ws).map(function(pass) { return ws[pass]; }); this.on("error", this.onError, this); } require("util").inherits(ProxyServer$1, EE3); ProxyServer$1.prototype.onError = function(err$2) { if (this.listeners("error").length === 1) throw err$2; }; ProxyServer$1.prototype.listen = function(port, hostname) { var self$1 = this, closure = function(req$4, res) { self$1.web(req$4, res); }; this._server = this.options.ssl ? https.createServer(this.options.ssl, closure) : http.createServer(closure); if (this.options.ws) this._server.on("upgrade", function(req$4, socket, head) { self$1.ws(req$4, socket, head); }); this._server.listen(port, hostname); return this; }; ProxyServer$1.prototype.close = function(callback) { var self$1 = this; if (this._server) this._server.close(done); function done() { self$1._server = null; if (callback) callback.apply(null, arguments); } }; ProxyServer$1.prototype.before = function(type, passName, callback) { if (type !== "ws" && type !== "web") throw new Error("type must be `web` or `ws`"); var passes = type === "ws" ? this.wsPasses : this.webPasses, i$1 = false; passes.forEach(function(v, idx) { if (v.name === passName) i$1 = idx; }); if (i$1 === false) throw new Error("No such pass"); passes.splice(i$1, 0, callback); }; ProxyServer$1.prototype.after = function(type, passName, callback) { if (type !== "ws" && type !== "web") throw new Error("type must be `web` or `ws`"); var passes = type === "ws" ? this.wsPasses : this.webPasses, i$1 = false; passes.forEach(function(v, idx) { if (v.name === passName) i$1 = idx; }); if (i$1 === false) throw new Error("No such pass"); passes.splice(i$1++, 0, callback); }; } }); //#endregion //#region ../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/lib/http-proxy.js var require_http_proxy$1 = __commonJS({ "../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/lib/http-proxy.js"(exports, module) { var ProxyServer = require_http_proxy$2().Server; /** * Creates the proxy server. * * Examples: * * httpProxy.createProxyServer({ .. }, 8000) * // => '{ web: [Function], ws: [Function] ... }' * * @param {Object} Options Config object passed to the proxy * * @return {Object} Proxy Proxy object with handlers for `ws` and `web` requests * * @api public */ function createProxyServer(options$1) { return new ProxyServer(options$1); } ProxyServer.createProxyServer = createProxyServer; ProxyServer.createServer = createProxyServer; ProxyServer.createProxy = createProxyServer; /** * Export the proxy "Server" as the main export. */ module.exports = ProxyServer; } }); //#endregion //#region ../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/index.js var require_http_proxy = __commonJS({ "../../node_modules/.pnpm/http-proxy@1.18.1_patch_hash=8071c23044f455271f4d4074ae4c7b81beec17a03aefd158d5f4edd4ef751c11_debug@4.4.1/node_modules/http-proxy/index.js"(exports, module) { /*! * Caron dimonio, con occhi di bragia * loro accennando, tutte le raccoglie; * batte col remo qualunque s’adagia * * Charon the demon, with the eyes of glede, * Beckoning to them, collects them all together, * Beats with his oar whoever lags behind * * Dante - The Divine Comedy (Canto III) */ module.exports = require_http_proxy$1(); } }); //#endregion //#region src/node/server/middlewares/proxy.ts var import_http_proxy = __toESM(require_http_proxy(), 1); var import_picocolors$14 = __toESM(require_picocolors(), 1); const debug$5 = createDebugger("vite:proxy"); const rewriteOriginHeader = (proxyReq, options$1, config$2) => { if (options$1.rewriteWsOrigin) { const { target } = options$1; if (proxyReq.headersSent) { config$2.logger.warn(import_picocolors$14.default.yellow(`Unable to rewrite Origin header as headers are already sent.`)); return; } if (proxyReq.getHeader("origin") && target) { const changedOrigin = typeof target === "object" ? `${target.protocol}//${target.host}` : target; proxyReq.setHeader("origin", changedOrigin); } } }; function proxyMiddleware(httpServer, options$1, config$2) { const proxies = {}; Object.keys(options$1).forEach((context) => { let opts = options$1[context]; if (!opts) return; if (typeof opts === "string") opts = { target: opts, changeOrigin: true }; const proxy = import_http_proxy.default.createProxyServer(opts); if (opts.configure) opts.configure(proxy, opts); proxy.on("error", (err$2, _req, originalRes) => { const res = originalRes; if (!res) config$2.logger.error(`${import_picocolors$14.default.red(`http proxy error: ${err$2.message}`)}\n${err$2.stack}`, { timestamp: true, error: err$2 }); else if ("req" in res) { config$2.logger.error(`${import_picocolors$14.default.red(`http proxy error: ${originalRes.req.url}`)}\n${err$2.stack}`, { timestamp: true, error: err$2 }); if (!res.headersSent && !res.writableEnded) res.writeHead(500, { "Content-Type": "text/plain" }).end(); } else { config$2.logger.error(`${import_picocolors$14.default.red(`ws proxy error:`)}\n${err$2.stack}`, { timestamp: true, error: err$2 }); res.end(); } }); proxy.on("proxyReqWs", (proxyReq, _req, socket, options$2) => { rewriteOriginHeader(proxyReq, options$2, config$2); socket.on("error", (err$2) => { config$2.logger.error(`${import_picocolors$14.default.red(`ws proxy socket error:`)}\n${err$2.stack}`, { timestamp: true, error: err$2 }); }); }); proxy.on("proxyRes", (proxyRes, _req, res) => { res.on("close", () => { if (!res.writableEnded) { debug$5?.("destroying proxyRes in proxyRes close event"); proxyRes.destroy(); } }); }); proxies[context] = [proxy, { ...opts }]; }); if (httpServer) httpServer.on("upgrade", async (req$4, socket, head) => { const url$6 = req$4.url; for (const context in proxies) if (doesProxyContextMatchUrl(context, url$6)) { const [proxy, opts] = proxies[context]; if (opts.ws || opts.target?.toString().startsWith("ws:") || opts.target?.toString().startsWith("wss:")) { if (opts.bypass) try { const bypassResult = await opts.bypass(req$4, void 0, opts); if (typeof bypassResult === "string") { debug$5?.(`bypass: ${req$4.url} -> ${bypassResult}`); req$4.url = bypassResult; return; } if (bypassResult === false) { debug$5?.(`bypass: ${req$4.url} -> 404`); socket.end("HTTP/1.1 404 Not Found\r\n\r\n", ""); return; } } catch (err$2) { config$2.logger.error(`${import_picocolors$14.default.red(`ws proxy bypass error:`)}\n${err$2.stack}`, { timestamp: true, error: err$2 }); return; } if (opts.rewrite) req$4.url = opts.rewrite(url$6); debug$5?.(`${req$4.url} -> ws ${opts.target}`); proxy.ws(req$4, socket, head); return; } } }); return async function viteProxyMiddleware(req$4, res, next) { const url$6 = req$4.url; for (const context in proxies) if (doesProxyContextMatchUrl(context, url$6)) { const [proxy, opts] = proxies[context]; const options$2 = {}; if (opts.bypass) try { const bypassResult = await opts.bypass(req$4, res, opts); if (typeof bypassResult === "string") { debug$5?.(`bypass: ${req$4.url} -> ${bypassResult}`); req$4.url = bypassResult; if (res.writableEnded) return; return next(); } if (bypassResult === false) { debug$5?.(`bypass: ${req$4.url} -> 404`); res.statusCode = 404; return res.end(); } } catch (e$1) { debug$5?.(`bypass: ${req$4.url} -> ${e$1}`); return next(e$1); } debug$5?.(`${req$4.url} -> ${opts.target || opts.forward}`); if (opts.rewrite) req$4.url = opts.rewrite(req$4.url); proxy.web(req$4, res, options$2); return; } next(); }; } function doesProxyContextMatchUrl(context, url$6) { return context[0] === "^" && new RegExp(context).test(url$6) || url$6.startsWith(context); } //#endregion //#region src/node/server/middlewares/htmlFallback.ts const debug$4 = createDebugger("vite:html-fallback"); function htmlFallbackMiddleware(root, spaFallback) { return function viteHtmlFallbackMiddleware(req$4, _res, next) { if (req$4.method !== "GET" && req$4.method !== "HEAD" || req$4.url === "/favicon.ico" || !(req$4.headers.accept === void 0 || req$4.headers.accept === "" || req$4.headers.accept.includes("text/html") || req$4.headers.accept.includes("*/*"))) return next(); const url$6 = cleanUrl(req$4.url); const pathname = decodeURIComponent(url$6); if (pathname.endsWith(".html")) { const filePath = path.join(root, pathname); if (fs.existsSync(filePath)) { debug$4?.(`Rewriting ${req$4.method} ${req$4.url} to ${url$6}`); req$4.url = url$6; return next(); } } else if (pathname.endsWith("/")) { const filePath = path.join(root, pathname, "index.html"); if (fs.existsSync(filePath)) { const newUrl = url$6 + "index.html"; debug$4?.(`Rewriting ${req$4.method} ${req$4.url} to ${newUrl}`); req$4.url = newUrl; return next(); } } else { const filePath = path.join(root, pathname + ".html"); if (fs.existsSync(filePath)) { const newUrl = url$6 + ".html"; debug$4?.(`Rewriting ${req$4.method} ${req$4.url} to ${newUrl}`); req$4.url = newUrl; return next(); } } if (spaFallback) { debug$4?.(`Rewriting ${req$4.method} ${req$4.url} to /index.html`); req$4.url = "/index.html"; } next(); }; } //#endregion //#region ../../node_modules/.pnpm/etag@1.8.1/node_modules/etag/index.js var require_etag = __commonJS({ "../../node_modules/.pnpm/etag@1.8.1/node_modules/etag/index.js"(exports, module) { /** * Module exports. * @public */ module.exports = etag; /** * Module dependencies. * @private */ var crypto$1 = require("crypto"); var Stats = require("fs").Stats; /** * Module variables. * @private */ var toString = Object.prototype.toString; /** * Generate an entity tag. * * @param {Buffer|string} entity * @return {string} * @private */ function entitytag(entity) { if (entity.length === 0) return "\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\""; var hash$1 = crypto$1.createHash("sha1").update(entity, "utf8").digest("base64").substring(0, 27); var len = typeof entity === "string" ? Buffer.byteLength(entity, "utf8") : entity.length; return "\"" + len.toString(16) + "-" + hash$1 + "\""; } /** * Create a simple ETag. * * @param {string|Buffer|Stats} entity * @param {object} [options] * @param {boolean} [options.weak] * @return {String} * @public */ function etag(entity, options$1) { if (entity == null) throw new TypeError("argument entity is required"); var isStats = isstats(entity); var weak = options$1 && typeof options$1.weak === "boolean" ? options$1.weak : isStats; if (!isStats && typeof entity !== "string" && !Buffer.isBuffer(entity)) throw new TypeError("argument entity must be string, Buffer, or fs.Stats"); var tag = isStats ? stattag(entity) : entitytag(entity); return weak ? "W/" + tag : tag; } /** * Determine if object is a Stats object. * * @param {object} obj * @return {boolean} * @api private */ function isstats(obj) { if (typeof Stats === "function" && obj instanceof Stats) return true; return obj && typeof obj === "object" && "ctime" in obj && toString.call(obj.ctime) === "[object Date]" && "mtime" in obj && toString.call(obj.mtime) === "[object Date]" && "ino" in obj && typeof obj.ino === "number" && "size" in obj && typeof obj.size === "number"; } /** * Generate a tag for a stat. * * @param {object} stat * @return {string} * @private */ function stattag(stat$4) { var mtime = stat$4.mtime.getTime().toString(16); var size = stat$4.size.toString(16); return "\"" + size + "-" + mtime + "\""; } } }); //#endregion //#region src/node/server/send.ts var import_convert_source_map$1 = __toESM(require_convert_source_map(), 1); var import_etag$1 = __toESM(require_etag(), 1); const debug$3 = createDebugger("vite:send", { onlyWhenFocused: true }); const alias$1 = { js: "text/javascript", css: "text/css", html: "text/html", json: "application/json" }; function send(req$4, res, content, type, options$1) { const { etag: etag$1 = (0, import_etag$1.default)(content, { weak: true }), cacheControl = "no-cache", headers, map: map$1 } = options$1; if (res.writableEnded) return; if (req$4.headers["if-none-match"] === etag$1) { res.statusCode = 304; res.end(); return; } res.setHeader("Content-Type", alias$1[type] || type); res.setHeader("Cache-Control", cacheControl); res.setHeader("Etag", etag$1); if (headers) for (const name in headers) res.setHeader(name, headers[name]); if (map$1 && "version" in map$1 && map$1.mappings) { if (type === "js" || type === "css") content = getCodeWithSourcemap(type, content.toString(), map$1); } else if (type === "js" && (!map$1 || map$1.mappings !== "")) { const code = content.toString(); if (import_convert_source_map$1.mapFileCommentRegex.test(code)) debug$3?.(`Skipped injecting fallback sourcemap for ${req$4.url}`); else { const urlWithoutTimestamp = removeTimestampQuery(req$4.url); const ms = new MagicString(code); content = getCodeWithSourcemap(type, code, ms.generateMap({ source: path.basename(urlWithoutTimestamp), hires: "boundary", includeContent: true })); } } res.statusCode = 200; res.end(content); return; } //#endregion //#region ../../node_modules/.pnpm/totalist@3.0.1/node_modules/totalist/sync/index.mjs function totalist(dir, callback, pre = "") { dir = resolve$1(".", dir); let arr = readdirSync(dir); let i$1 = 0, abs, stats; for (; i$1 < arr.length; i$1++) { abs = join$1(dir, arr[i$1]); stats = statSync(abs); stats.isDirectory() ? totalist(abs, callback, join$1(pre, arr[i$1])) : callback(join$1(pre, arr[i$1]), abs, stats); } } //#endregion //#region ../../node_modules/.pnpm/@polka+url@1.0.0-next.28/node_modules/@polka/url/build.mjs /** * @typedef ParsedURL * @type {import('.').ParsedURL} */ /** * @typedef Request * @property {string} url * @property {ParsedURL} _parsedUrl */ /** * @param {Request} req * @returns {ParsedURL|void} */ function parse$1(req$4) { let raw = req$4.url; if (raw == null) return; let prev = req$4._parsedUrl; if (prev && prev.raw === raw) return prev; let pathname = raw, search = "", query; if (raw.length > 1) { let idx = raw.indexOf("?", 1); if (idx !== -1) { search = raw.substring(idx); pathname = raw.substring(0, idx); if (search.length > 1) query = qs.parse(search.substring(1)); } } return req$4._parsedUrl = { pathname, search, query, raw }; } //#endregion //#region ../../node_modules/.pnpm/sirv@3.0.1_patch_hash=95b663b930c5cc6e609c7fa15b69a86ff3b30df68978611d1d3d724c65135cb1/node_modules/sirv/build.mjs const noop = () => {}; function isMatch(uri, arr) { for (let i$1 = 0; i$1 < arr.length; i$1++) if (arr[i$1].test(uri)) return true; } function toAssume(uri, extns) { let i$1 = 0, x, len = uri.length - 1; if (uri.charCodeAt(len) === 47) uri = uri.substring(0, len); let arr = [], tmp = `${uri}/index`; for (; i$1 < extns.length; i$1++) { x = extns[i$1] ? `.${extns[i$1]}` : ""; if (uri) arr.push(uri + x); arr.push(tmp + x); } return arr; } function viaCache(cache$1, uri, extns) { let i$1 = 0, data, arr = toAssume(uri, extns); for (; i$1 < arr.length; i$1++) if (data = cache$1[arr[i$1]]) return data; } function viaLocal(dir, isEtag, uri, extns, shouldServe) { let i$1 = 0, arr = toAssume(uri, extns); let abs, stats, name, headers; for (; i$1 < arr.length; i$1++) { abs = normalize(join(dir, name = arr[i$1])); if (abs.startsWith(dir) && fs$1.existsSync(abs)) { stats = fs$1.statSync(abs); if (stats.isDirectory()) continue; if (shouldServe && !shouldServe(abs)) continue; headers = toHeaders(name, stats, isEtag); headers["Cache-Control"] = isEtag ? "no-cache" : "no-store"; return { abs, stats, headers }; } } } function is404(req$4, res) { return res.statusCode = 404, res.end(); } function send$1(req$4, res, file, stats, headers) { let code = 200, tmp, opts = {}; headers = { ...headers }; for (let key in headers) { tmp = res.getHeader(key); if (tmp) headers[key] = tmp; } if (tmp = res.getHeader("content-type")) headers["Content-Type"] = tmp; if (req$4.headers.range) { code = 206; let [x, y$2] = req$4.headers.range.replace("bytes=", "").split("-"); let end = opts.end = parseInt(y$2, 10) || stats.size - 1; let start = opts.start = parseInt(x, 10) || 0; if (end >= stats.size) end = stats.size - 1; if (start >= stats.size) { res.setHeader("Content-Range", `bytes */${stats.size}`); res.statusCode = 416; return res.end(); } headers["Content-Range"] = `bytes ${start}-${end}/${stats.size}`; headers["Content-Length"] = end - start + 1; headers["Accept-Ranges"] = "bytes"; } res.writeHead(code, headers); fs$1.createReadStream(file, opts).pipe(res); } const ENCODING = { ".br": "br", ".gz": "gzip" }; function toHeaders(name, stats, isEtag) { let enc = ENCODING[name.slice(-3)]; let ctype = lookup(name.slice(0, enc && -3)) || ""; if (ctype === "text/html") ctype += ";charset=utf-8"; let headers = { "Content-Length": stats.size, "Content-Type": ctype, "Last-Modified": stats.mtime.toUTCString() }; if (enc) headers["Content-Encoding"] = enc; if (isEtag) headers["ETag"] = `W/"${stats.size}-${stats.mtime.getTime()}"`; return headers; } function build_default(dir, opts = {}) { dir = resolve(dir || "."); let isNotFound = opts.onNoMatch || is404; let setHeaders$1 = opts.setHeaders || noop; let extensions$1 = opts.extensions || ["html", "htm"]; let gzips = opts.gzip && extensions$1.map((x) => `${x}.gz`).concat("gz"); let brots = opts.brotli && extensions$1.map((x) => `${x}.br`).concat("br"); const FILES = {}; let fallback = "/"; let isEtag = !!opts.etag; let isSPA = !!opts.single; if (typeof opts.single === "string") { let idx = opts.single.lastIndexOf("."); fallback += !!~idx ? opts.single.substring(0, idx) : opts.single; } let ignores = []; if (opts.ignores !== false) { ignores.push(/[/]([A-Za-z\s\d~$._-]+\.\w+){1,}$/); if (opts.dotfiles) ignores.push(/\/\.\w/); else ignores.push(/\/\.well-known/); [].concat(opts.ignores || []).forEach((x) => { ignores.push(new RegExp(x, "i")); }); } let cc = opts.maxAge != null && `public,max-age=${opts.maxAge}`; if (cc && opts.immutable) cc += ",immutable"; else if (cc && opts.maxAge === 0) cc += ",must-revalidate"; if (!opts.dev) totalist(dir, (name, abs, stats) => { if (/\.well-known[\\+\/]/.test(name)) {} else if (!opts.dotfiles && /(^\.|[\\+|\/+]\.)/.test(name)) return; let headers = toHeaders(name, stats, isEtag); if (cc) headers["Cache-Control"] = cc; FILES["/" + name.normalize().replace(/\\+/g, "/")] = { abs, stats, headers }; }); let lookup$1 = opts.dev ? viaLocal.bind(0, dir, isEtag) : viaCache.bind(0, FILES); return function(req$4, res, next) { let extns = [""]; let pathname = parse$1(req$4).pathname; let val = req$4.headers["accept-encoding"] || ""; if (gzips && val.includes("gzip")) extns.unshift(...gzips); if (brots && /(br|brotli)/i.test(val)) extns.unshift(...brots); extns.push(...extensions$1); if (pathname.indexOf("%") !== -1) try { pathname = decodeURI(pathname); } catch (err$2) {} let data = lookup$1(pathname, extns, opts.shouldServe) || isSPA && !isMatch(pathname, ignores) && lookup$1(fallback, extns, opts.shouldServe); if (!data) return next ? next() : isNotFound(req$4, res); if (isEtag && req$4.headers["if-none-match"] === data.headers["ETag"]) { res.writeHead(304); return res.end(); } if (gzips || brots) res.setHeader("Vary", "Accept-Encoding"); setHeaders$1(res, pathname, data.stats); send$1(req$4, res, data.abs, data.stats, data.headers); }; } //#endregion //#region src/node/server/middlewares/static.ts var import_escape_html$1 = __toESM(require_escape_html(), 1); const knownJavascriptExtensionRE = /\.(?:[tj]sx?|[cm][tj]s)$/; const ERR_DENIED_FILE = "ERR_DENIED_FILE"; const sirvOptions = ({ config: config$2, getHeaders, disableFsServeCheck }) => { return { dev: true, etag: true, extensions: [], setHeaders(res, pathname) { if (knownJavascriptExtensionRE.test(pathname)) res.setHeader("Content-Type", "text/javascript"); const headers = getHeaders(); if (headers) for (const name in headers) res.setHeader(name, headers[name]); }, shouldServe: disableFsServeCheck ? void 0 : (filePath) => { const servingAccessResult = checkLoadingAccess(config$2, filePath); if (servingAccessResult === "denied") { const error$1 = /* @__PURE__ */ new Error("denied access"); error$1.code = ERR_DENIED_FILE; error$1.path = filePath; throw error$1; } if (servingAccessResult === "fallback") return false; return true; } }; }; function servePublicMiddleware(server, publicFiles) { const dir = server.config.publicDir; const serve = build_default(dir, sirvOptions({ config: server.config, getHeaders: () => server.config.server.headers, disableFsServeCheck: true })); const toFilePath = (url$6) => { let filePath = cleanUrl(url$6); if (filePath.indexOf("%") !== -1) try { filePath = decodeURI(filePath); } catch {} return normalizePath(filePath); }; return function viteServePublicMiddleware(req$4, res, next) { if (publicFiles && !publicFiles.has(toFilePath(req$4.url)) || isImportRequest(req$4.url) || isInternalRequest(req$4.url) || urlRE.test(req$4.url)) return next(); serve(req$4, res, next); }; } function serveStaticMiddleware(server) { const dir = server.config.root; const serve = build_default(dir, sirvOptions({ config: server.config, getHeaders: () => server.config.server.headers })); return function viteServeStaticMiddleware(req$4, res, next) { const cleanedUrl = cleanUrl(req$4.url); if (cleanedUrl.endsWith("/") || path.extname(cleanedUrl) === ".html" || isInternalRequest(req$4.url) || req$4.url?.startsWith("//")) return next(); const url$6 = new URL(req$4.url, "http://example.com"); const pathname = decodeURI(url$6.pathname); let redirectedPathname; for (const { find: find$1, replacement } of server.config.resolve.alias) { const matches$2 = typeof find$1 === "string" ? pathname.startsWith(find$1) : find$1.test(pathname); if (matches$2) { redirectedPathname = pathname.replace(find$1, replacement); break; } } if (redirectedPathname) { if (redirectedPathname.startsWith(withTrailingSlash(dir))) redirectedPathname = redirectedPathname.slice(dir.length); } const resolvedPathname = redirectedPathname || pathname; let fileUrl = path.resolve(dir, removeLeadingSlash(resolvedPathname)); if (resolvedPathname.endsWith("/") && fileUrl[fileUrl.length - 1] !== "/") fileUrl = withTrailingSlash(fileUrl); if (redirectedPathname) { url$6.pathname = encodeURI(redirectedPathname); req$4.url = url$6.href.slice(url$6.origin.length); } try { serve(req$4, res, next); } catch (e$1) { if (e$1 && "code" in e$1 && e$1.code === ERR_DENIED_FILE) { respondWithAccessDenied(e$1.path, server, res); return; } throw e$1; } }; } function serveRawFsMiddleware(server) { const serveFromRoot = build_default("/", sirvOptions({ config: server.config, getHeaders: () => server.config.server.headers })); return function viteServeRawFsMiddleware(req$4, res, next) { if (req$4.url.startsWith(FS_PREFIX)) { const url$6 = new URL(req$4.url, "http://example.com"); const pathname = decodeURI(url$6.pathname); let newPathname = pathname.slice(FS_PREFIX.length); if (isWindows) newPathname = newPathname.replace(/^[A-Z]:/i, ""); url$6.pathname = encodeURI(newPathname); req$4.url = url$6.href.slice(url$6.origin.length); try { serveFromRoot(req$4, res, next); } catch (e$1) { if (e$1 && "code" in e$1 && e$1.code === ERR_DENIED_FILE) { respondWithAccessDenied(e$1.path, server, res); return; } throw e$1; } } else next(); }; } function isFileServingAllowed(configOrUrl, urlOrServer) { const config$2 = typeof urlOrServer === "string" ? configOrUrl : urlOrServer.config; const url$6 = typeof urlOrServer === "string" ? urlOrServer : configOrUrl; if (!config$2.server.fs.strict) return true; const filePath = fsPathFromUrl(url$6); return isFileLoadingAllowed(config$2, filePath); } function isUriInFilePath(uri, filePath) { return isSameFileUri(uri, filePath) || isParentDirectory(uri, filePath); } function isFileLoadingAllowed(config$2, filePath) { const { fs: fs$13 } = config$2.server; if (!fs$13.strict) return true; if (config$2.fsDenyGlob(filePath)) return false; if (config$2.safeModulePaths.has(filePath)) return true; if (fs$13.allow.some((uri) => isUriInFilePath(uri, filePath))) return true; return false; } function checkLoadingAccess(config$2, path$13) { if (isFileLoadingAllowed(config$2, slash(path$13))) return "allowed"; if (isFileReadable(path$13)) return "denied"; return "fallback"; } function checkServingAccess(url$6, server) { if (isFileServingAllowed(url$6, server)) return "allowed"; if (isFileReadable(cleanUrl(url$6))) return "denied"; return "fallback"; } function respondWithAccessDenied(url$6, server, res) { const urlMessage = `The request url "${url$6}" is outside of Vite serving allow list.`; const hintMessage = ` ${server.config.server.fs.allow.map((i$1) => `- ${i$1}`).join("\n")} Refer to docs https://vite.dev/config/server-options.html#server-fs-allow for configurations and more details.`; server.config.logger.error(urlMessage); server.config.logger.warnOnce(hintMessage + "\n"); res.statusCode = 403; res.write(renderRestrictedErrorHTML(urlMessage + "\n" + hintMessage)); res.end(); } function renderRestrictedErrorHTML(msg) { const html = String.raw; return html`

403 Restricted

${(0, import_escape_html$1.default)(msg).replace(/\n/g, "
")}

`; } //#endregion //#region src/node/server/transformRequest.ts var import_etag = __toESM(require_etag(), 1); var import_picocolors$13 = __toESM(require_picocolors(), 1); const ERR_LOAD_URL = "ERR_LOAD_URL"; const ERR_LOAD_PUBLIC_URL = "ERR_LOAD_PUBLIC_URL"; const ERR_DENIED_ID = "ERR_DENIED_ID"; const debugLoad = createDebugger("vite:load"); const debugTransform = createDebugger("vite:transform"); const debugCache$1 = createDebugger("vite:cache"); function transformRequest(environment, url$6, options$1 = {}) { if (!options$1.ssr) options$1 = { ...options$1, ssr: environment.config.consumer === "server" }; if (environment._closing && environment.config.dev.recoverable) throwClosedServerError(); const cacheKey = `${options$1.html ? "html:" : ""}${url$6}`; const timestamp = monotonicDateNow(); const pending = environment._pendingRequests.get(cacheKey); if (pending) return environment.moduleGraph.getModuleByUrl(removeTimestampQuery(url$6)).then((module$1) => { if (!module$1 || pending.timestamp > module$1.lastInvalidationTimestamp) return pending.request; else { pending.abort(); return transformRequest(environment, url$6, options$1); } }); const request = doTransform(environment, url$6, options$1, timestamp); let cleared = false; const clearCache = () => { if (!cleared) { environment._pendingRequests.delete(cacheKey); cleared = true; } }; environment._pendingRequests.set(cacheKey, { request, timestamp, abort: clearCache }); return request.finally(clearCache); } async function doTransform(environment, url$6, options$1, timestamp) { url$6 = removeTimestampQuery(url$6); const { pluginContainer } = environment; let module$1 = await environment.moduleGraph.getModuleByUrl(url$6); if (module$1) { const cached = await getCachedTransformResult(environment, url$6, module$1, timestamp); if (cached) return cached; } const resolved = module$1 ? void 0 : await pluginContainer.resolveId(url$6, void 0) ?? void 0; const id = module$1?.id ?? resolved?.id ?? url$6; module$1 ??= environment.moduleGraph.getModuleById(id); if (module$1) { await environment.moduleGraph._ensureEntryFromUrl(url$6, void 0, resolved); const cached = await getCachedTransformResult(environment, url$6, module$1, timestamp); if (cached) return cached; } const result = loadAndTransform(environment, id, url$6, options$1, timestamp, module$1, resolved); const { depsOptimizer } = environment; if (!depsOptimizer?.isOptimizedDepFile(id)) environment._registerRequestProcessing(id, () => result); return result; } async function getCachedTransformResult(environment, url$6, module$1, timestamp) { const prettyUrl = debugCache$1 ? prettifyUrl(url$6, environment.config.root) : ""; const softInvalidatedTransformResult = await handleModuleSoftInvalidation(environment, module$1, timestamp); if (softInvalidatedTransformResult) { debugCache$1?.(`[memory-hmr] ${prettyUrl}`); return softInvalidatedTransformResult; } const cached = module$1.transformResult; if (cached) { debugCache$1?.(`[memory] ${prettyUrl}`); return cached; } } async function loadAndTransform(environment, id, url$6, options$1, timestamp, mod, resolved) { const { config: config$2, pluginContainer, logger } = environment; const prettyUrl = debugLoad || debugTransform ? prettifyUrl(url$6, config$2.root) : ""; const moduleGraph = environment.moduleGraph; if (options$1.allowId && !options$1.allowId(id)) { const err$2 = /* @__PURE__ */ new Error(`Denied ID ${id}`); err$2.code = ERR_DENIED_ID; throw err$2; } let code = null; let map$1 = null; const loadStart = debugLoad ? performance$1.now() : 0; const loadResult = await pluginContainer.load(id); if (loadResult == null) { const file = cleanUrl(id); if (options$1.html && !id.endsWith(".html")) return null; if (environment.config.consumer === "server" || isFileLoadingAllowed(environment.getTopLevelConfig(), file)) { try { code = await fsp.readFile(file, "utf-8"); debugLoad?.(`${timeFrom(loadStart)} [fs] ${prettyUrl}`); } catch (e$1) { if (e$1.code !== "ENOENT") { if (e$1.code === "EISDIR") e$1.message = `${e$1.message} ${file}`; throw e$1; } } if (code != null && environment.pluginContainer.watcher) ensureWatchedFile(environment.pluginContainer.watcher, file, config$2.root); } if (code) try { const extracted = await extractSourcemapFromFile(code, file); if (extracted) { code = extracted.code; map$1 = extracted.map; } } catch (e$1) { logger.warn(`Failed to load source map for ${file}.\n${e$1}`, { timestamp: true }); } } else { debugLoad?.(`${timeFrom(loadStart)} [plugin] ${prettyUrl}`); if (isObject(loadResult)) { code = loadResult.code; map$1 = loadResult.map; } else code = loadResult; } if (code == null) { const isPublicFile = checkPublicFile(url$6, environment.getTopLevelConfig()); let publicDirName = path.relative(config$2.root, config$2.publicDir); if (publicDirName[0] !== ".") publicDirName = "/" + publicDirName; const msg = isPublicFile ? `This file is in ${publicDirName} and will be copied as-is during build without going through the plugin transforms, and therefore should not be imported from source code. It can only be referenced via HTML tags.` : `Does the file exist?`; const importerMod = moduleGraph.idToModuleMap.get(id)?.importers.values().next().value; const importer = importerMod?.file || importerMod?.url; const err$2 = /* @__PURE__ */ new Error(`Failed to load url ${url$6} (resolved id: ${id})${importer ? ` in ${importer}` : ""}. ${msg}`); err$2.code = isPublicFile ? ERR_LOAD_PUBLIC_URL : ERR_LOAD_URL; throw err$2; } if (environment._closing && environment.config.dev.recoverable) throwClosedServerError(); mod ??= await moduleGraph._ensureEntryFromUrl(url$6, void 0, resolved); const transformStart = debugTransform ? performance$1.now() : 0; const transformResult = await pluginContainer.transform(code, id, { inMap: map$1 }); const originalCode = code; if (transformResult.code === originalCode) debugTransform?.(timeFrom(transformStart) + import_picocolors$13.default.dim(` [skipped] ${prettyUrl}`)); else { debugTransform?.(`${timeFrom(transformStart)} ${prettyUrl}`); code = transformResult.code; map$1 = transformResult.map; } let normalizedMap; if (typeof map$1 === "string") normalizedMap = JSON.parse(map$1); else if (map$1) normalizedMap = map$1; else normalizedMap = null; if (normalizedMap && "version" in normalizedMap && mod.file) { if (normalizedMap.mappings) await injectSourcesContent(normalizedMap, mod.file, logger); const sourcemapPath = `${mod.file}.map`; applySourcemapIgnoreList(normalizedMap, sourcemapPath, config$2.server.sourcemapIgnoreList, logger); if (path.isAbsolute(mod.file)) { let modDirname; for (let sourcesIndex = 0; sourcesIndex < normalizedMap.sources.length; ++sourcesIndex) { const sourcePath = normalizedMap.sources[sourcesIndex]; if (sourcePath) { if (path.isAbsolute(sourcePath)) { modDirname ??= path.dirname(mod.file); normalizedMap.sources[sourcesIndex] = path.relative(modDirname, sourcePath); } } } } } if (environment._closing && environment.config.dev.recoverable) throwClosedServerError(); const topLevelConfig = environment.getTopLevelConfig(); const result = environment.config.dev.moduleRunnerTransform ? await ssrTransform(code, normalizedMap, url$6, originalCode, { json: { stringify: topLevelConfig.json.stringify === true && topLevelConfig.json.namedExports !== true } }) : { code, map: normalizedMap, etag: (0, import_etag.default)(code, { weak: true }) }; if (timestamp > mod.lastInvalidationTimestamp) moduleGraph.updateModuleTransformResult(mod, result); return result; } /** * When a module is soft-invalidated, we can preserve its previous `transformResult` and * return similar code to before: * * - Client: We need to transform the import specifiers with new timestamps * - SSR: We don't need to change anything as `ssrLoadModule` controls it */ async function handleModuleSoftInvalidation(environment, mod, timestamp) { const transformResult = mod.invalidationState; mod.invalidationState = void 0; if (!transformResult || transformResult === "HARD_INVALIDATED") return; if (mod.transformResult) throw new Error(`Internal server error: Soft-invalidated module "${mod.url}" should not have existing transform result`); let result; if (transformResult.ssr) result = transformResult; else { await init; const source = transformResult.code; const s$2 = new MagicString(source); const [imports] = parse(source, mod.id || void 0); for (const imp of imports) { let rawUrl = source.slice(imp.s, imp.e); if (rawUrl === "import.meta") continue; const hasQuotes = rawUrl[0] === "\"" || rawUrl[0] === "'"; if (hasQuotes) rawUrl = rawUrl.slice(1, -1); const urlWithoutTimestamp = removeTimestampQuery(rawUrl); const hmrUrl = unwrapId(stripBase(removeImportQuery(urlWithoutTimestamp), environment.config.base)); for (const importedMod of mod.importedModules) { if (importedMod.url !== hmrUrl) continue; if (importedMod.lastHMRTimestamp > 0) { const replacedUrl = injectQuery(urlWithoutTimestamp, `t=${importedMod.lastHMRTimestamp}`); const start = hasQuotes ? imp.s + 1 : imp.s; const end = hasQuotes ? imp.e - 1 : imp.e; s$2.overwrite(start, end, replacedUrl); } if (imp.d === -1 && environment.config.dev.preTransformRequests) environment.warmupRequest(hmrUrl); break; } } const code = s$2.toString(); result = { ...transformResult, code, etag: (0, import_etag.default)(code, { weak: true }) }; } if (timestamp > mod.lastInvalidationTimestamp) environment.moduleGraph.updateModuleTransformResult(mod, result); return result; } //#endregion //#region src/node/assetSource.ts const ALLOWED_META_NAME = [ "msapplication-tileimage", "msapplication-square70x70logo", "msapplication-square150x150logo", "msapplication-wide310x150logo", "msapplication-square310x310logo", "msapplication-config", "twitter:image" ]; const ALLOWED_META_PROPERTY = [ "og:image", "og:image:url", "og:image:secure_url", "og:audio", "og:audio:secure_url", "og:video", "og:video:secure_url" ]; const DEFAULT_HTML_ASSET_SOURCES = { audio: { srcAttributes: ["src"] }, embed: { srcAttributes: ["src"] }, img: { srcAttributes: ["src"], srcsetAttributes: ["srcset"] }, image: { srcAttributes: ["href", "xlink:href"] }, input: { srcAttributes: ["src"] }, link: { srcAttributes: ["href"], srcsetAttributes: ["imagesrcset"] }, object: { srcAttributes: ["data"] }, source: { srcAttributes: ["src"], srcsetAttributes: ["srcset"] }, track: { srcAttributes: ["src"] }, use: { srcAttributes: ["href", "xlink:href"] }, video: { srcAttributes: ["src", "poster"] }, meta: { srcAttributes: ["content"], filter({ attributes }) { if (attributes.name && ALLOWED_META_NAME.includes(attributes.name.trim().toLowerCase())) return true; if (attributes.property && ALLOWED_META_PROPERTY.includes(attributes.property.trim().toLowerCase())) return true; return false; } } }; /** * Given a HTML node, find all attributes that references an asset to be processed */ function getNodeAssetAttributes(node) { const matched = DEFAULT_HTML_ASSET_SOURCES[node.nodeName]; if (!matched) return []; const attributes = {}; for (const attr of node.attrs) attributes[getAttrKey(attr)] = attr.value; if ("vite-ignore" in attributes) return [{ type: "remove", key: "vite-ignore", value: "", attributes, location: node.sourceCodeLocation.attrs["vite-ignore"] }]; const actions = []; function handleAttributeKey(key, type) { const value$1 = attributes[key]; if (!value$1) return; if (matched.filter && !matched.filter({ key, value: value$1, attributes })) return; const location$1 = node.sourceCodeLocation.attrs[key]; actions.push({ type, key, value: value$1, attributes, location: location$1 }); } matched.srcAttributes?.forEach((key) => handleAttributeKey(key, "src")); matched.srcsetAttributes?.forEach((key) => handleAttributeKey(key, "srcset")); return actions; } function getAttrKey(attr) { return attr.prefix === void 0 ? attr.name : `${attr.prefix}:${attr.name}`; } //#endregion //#region src/node/plugins/modulePreloadPolyfill.ts const modulePreloadPolyfillId = "vite/modulepreload-polyfill"; const resolvedModulePreloadPolyfillId = "\0" + modulePreloadPolyfillId + ".js"; function modulePreloadPolyfillPlugin(config$2) { let polyfillString; return { name: "vite:modulepreload-polyfill", resolveId: { handler(id) { if (id === modulePreloadPolyfillId) return resolvedModulePreloadPolyfillId; } }, load: { handler(id) { if (id === resolvedModulePreloadPolyfillId) { if (config$2.command !== "build" || this.environment.config.consumer !== "client") return ""; if (!polyfillString) polyfillString = `${isModernFlag}&&(${polyfill.toString()}());`; return { code: polyfillString, moduleSideEffects: true }; } } } }; } function polyfill() { const relList = document.createElement("link").relList; if (relList && relList.supports && relList.supports("modulepreload")) return; for (const link of document.querySelectorAll("link[rel=\"modulepreload\"]")) processPreload(link); new MutationObserver((mutations) => { for (const mutation of mutations) { if (mutation.type !== "childList") continue; for (const node of mutation.addedNodes) if (node.tagName === "LINK" && node.rel === "modulepreload") processPreload(node); } }).observe(document, { childList: true, subtree: true }); function getFetchOpts(link) { const fetchOpts = {}; if (link.integrity) fetchOpts.integrity = link.integrity; if (link.referrerPolicy) fetchOpts.referrerPolicy = link.referrerPolicy; if (link.crossOrigin === "use-credentials") fetchOpts.credentials = "include"; else if (link.crossOrigin === "anonymous") fetchOpts.credentials = "omit"; else fetchOpts.credentials = "same-origin"; return fetchOpts; } function processPreload(link) { if (link.ep) return; link.ep = true; const fetchOpts = getFetchOpts(link); fetch(link.href, fetchOpts); } } //#endregion //#region src/node/plugins/html.ts var import_picocolors$12 = __toESM(require_picocolors(), 1); var import_escape_html = __toESM(require_escape_html(), 1); const htmlProxyRE$1 = /[?&]html-proxy=?(?:&inline-css)?(?:&style-attr)?&index=(\d+)\.(?:js|css)$/; const isHtmlProxyRE = /[?&]html-proxy\b/; const inlineCSSRE$1 = /__VITE_INLINE_CSS__([a-z\d]{8}_\d+)__/g; const inlineImportRE = /(?]*type\s*=\s*(?:"importmap"|'importmap'|importmap)[^>]*>.*?<\/script>/is; const moduleScriptRE = /[ \t]*]*type\s*=\s*(?:"module"|'module'|module)[^>]*>/i; const modulePreloadLinkRE = /[ \t]*]*rel\s*=\s*(?:"modulepreload"|'modulepreload'|modulepreload)[\s\S]*?\/>/i; const importMapAppendRE = new RegExp([moduleScriptRE, modulePreloadLinkRE].map((r$2) => r$2.source).join("|"), "i"); const isHTMLProxy = (id) => isHtmlProxyRE.test(id); const isHTMLRequest = (request) => htmlLangRE.test(request); const htmlProxyMap = /* @__PURE__ */ new WeakMap(); const htmlProxyResult = /* @__PURE__ */ new Map(); function htmlInlineProxyPlugin(config$2) { htmlProxyMap.set(config$2, /* @__PURE__ */ new Map()); return { name: "vite:html-inline-proxy", resolveId: { handler(id) { if (isHTMLProxy(id)) return id; } }, load: { handler(id) { const proxyMatch = htmlProxyRE$1.exec(id); if (proxyMatch) { const index = Number(proxyMatch[1]); const file = cleanUrl(id); const url$6 = file.replace(normalizePath(config$2.root), ""); const result = htmlProxyMap.get(config$2).get(url$6)?.[index]; if (result) return { ...result, moduleSideEffects: true }; else throw new Error(`No matching HTML proxy module found from ${id}`); } } } }; } function addToHTMLProxyCache(config$2, filePath, index, result) { if (!htmlProxyMap.get(config$2)) htmlProxyMap.set(config$2, /* @__PURE__ */ new Map()); if (!htmlProxyMap.get(config$2).get(filePath)) htmlProxyMap.get(config$2).set(filePath, []); htmlProxyMap.get(config$2).get(filePath)[index] = result; } function addToHTMLProxyTransformResult(hash$1, code) { htmlProxyResult.set(hash$1, code); } const noInlineLinkRels = new Set([ "icon", "apple-touch-icon", "apple-touch-startup-image", "manifest" ]); const isAsyncScriptMap = /* @__PURE__ */ new WeakMap(); function nodeIsElement(node) { return node.nodeName[0] !== "#"; } function traverseNodes(node, visitor) { if (node.nodeName === "template") node = node.content; visitor(node); if (nodeIsElement(node) || node.nodeName === "#document" || node.nodeName === "#document-fragment") node.childNodes.forEach((childNode) => traverseNodes(childNode, visitor)); } async function traverseHtml(html, filePath, visitor) { const { parse: parse$17 } = await import("./dep-BO5GbxpL.js"); const ast = parse$17(html, { scriptingEnabled: false, sourceCodeLocationInfo: true, onParseError: (e$1) => { handleParseError(e$1, html, filePath); } }); traverseNodes(ast, visitor); } function getScriptInfo(node) { let src; let srcSourceCodeLocation; let isModule = false; let isAsync = false; let isIgnored = false; for (const p$1 of node.attrs) { if (p$1.prefix !== void 0) continue; if (p$1.name === "src") { if (!src) { src = p$1; srcSourceCodeLocation = node.sourceCodeLocation?.attrs["src"]; } } else if (p$1.name === "type" && p$1.value === "module") isModule = true; else if (p$1.name === "async") isAsync = true; else if (p$1.name === "vite-ignore") isIgnored = true; } return { src, srcSourceCodeLocation, isModule, isAsync, isIgnored }; } const attrValueStartRE = /=\s*(.)/; function overwriteAttrValue(s$2, sourceCodeLocation, newValue) { const srcString = s$2.slice(sourceCodeLocation.startOffset, sourceCodeLocation.endOffset); const valueStart = attrValueStartRE.exec(srcString); if (!valueStart) throw new Error(`[vite:html] internal error, failed to overwrite attribute value`); const wrapOffset = valueStart[1] === "\"" || valueStart[1] === "'" ? 1 : 0; const valueOffset = valueStart.index + valueStart[0].length - 1; s$2.update(sourceCodeLocation.startOffset + valueOffset + wrapOffset, sourceCodeLocation.endOffset - wrapOffset, newValue); return s$2; } function removeViteIgnoreAttr(s$2, sourceCodeLocation) { const loc = sourceCodeLocation.attrs?.["vite-ignore"]; if (loc) s$2.remove(loc.startOffset, loc.endOffset); return s$2; } /** * Format parse5 @type {ParserError} to @type {RollupError} */ function formatParseError(parserError, id, html) { const formattedError = { code: parserError.code, message: `parse5 error code ${parserError.code}`, frame: generateCodeFrame(html, parserError.startOffset, parserError.endOffset), loc: { file: id, line: parserError.startLine, column: parserError.startCol } }; return formattedError; } function handleParseError(parserError, html, filePath) { switch (parserError.code) { case "missing-doctype": return; case "abandoned-head-element-child": return; case "duplicate-attribute": return; case "non-void-html-element-start-tag-with-trailing-solidus": return; case "unexpected-question-mark-instead-of-tag-name": return; } const parseError = formatParseError(parserError, filePath, html); throw new Error(`Unable to parse HTML; ${parseError.message}\n at ${parseError.loc.file}:${parseError.loc.line}:${parseError.loc.column}\n${parseError.frame}`); } /** * Compiles index.html into an entry js module */ function buildHtmlPlugin(config$2) { const [preHooks, normalHooks, postHooks] = resolveHtmlTransforms(config$2.plugins); preHooks.unshift(injectCspNonceMetaTagHook(config$2)); preHooks.unshift(preImportMapHook(config$2)); preHooks.push(htmlEnvHook(config$2)); postHooks.push(injectNonceAttributeTagHook(config$2)); postHooks.push(postImportMapHook()); const processedHtml = perEnvironmentState(() => /* @__PURE__ */ new Map()); const isExcludedUrl = (url$6) => url$6[0] === "#" || isExternalUrl(url$6) || isDataUrl(url$6); isAsyncScriptMap.set(config$2, /* @__PURE__ */ new Map()); return { name: "vite:build-html", transform: { async handler(html, id) { if (id.endsWith(".html")) { id = normalizePath(id); const relativeUrlPath = normalizePath(path.relative(config$2.root, id)); const publicPath = `/${relativeUrlPath}`; const publicBase = getBaseInHTML(relativeUrlPath, config$2); const publicToRelative = (filename) => publicBase + filename; const toOutputPublicFilePath = (url$6) => toOutputFilePathInHtml(url$6.slice(1), "public", relativeUrlPath, "html", config$2, publicToRelative); const nodeStartWithLeadingWhitespace = (node) => { const startOffset = node.sourceCodeLocation.startOffset; if (startOffset === 0) return 0; const lineStartOffset = startOffset - node.sourceCodeLocation.startCol; let isLineEmpty = false; try { const line = s$2.slice(Math.max(0, lineStartOffset), startOffset); isLineEmpty = !line.trim(); } catch {} return isLineEmpty ? lineStartOffset : startOffset; }; html = await applyHtmlTransforms(html, preHooks, this, { path: publicPath, filename: id }); let js = ""; const s$2 = new MagicString(html); const scriptUrls = []; const styleUrls = []; let inlineModuleIndex = -1; let everyScriptIsAsync = true; let someScriptsAreAsync = false; let someScriptsAreDefer = false; const assetUrlsPromises = []; const namedOutput = Object.keys(config$2.build.rollupOptions.input || {}); const processAssetUrl = async (url$6, shouldInline$1) => { if (url$6 !== "" && !namedOutput.includes(url$6) && !namedOutput.includes(removeLeadingSlash(url$6))) try { return await urlToBuiltUrl(this, url$6, id, shouldInline$1); } catch (e$1) { if (e$1.code !== "ENOENT") throw e$1; } return url$6; }; const setModuleSideEffectPromises = []; await traverseHtml(html, id, (node) => { if (!nodeIsElement(node)) return; let shouldRemove = false; if (node.nodeName === "script") { const { src, srcSourceCodeLocation, isModule, isAsync, isIgnored } = getScriptInfo(node); if (isIgnored) removeViteIgnoreAttr(s$2, node.sourceCodeLocation); else { const url$6 = src && src.value; const isPublicFile = !!(url$6 && checkPublicFile(url$6, config$2)); if (isPublicFile) overwriteAttrValue(s$2, srcSourceCodeLocation, partialEncodeURIPath(toOutputPublicFilePath(url$6))); if (isModule) { inlineModuleIndex++; if (url$6 && !isExcludedUrl(url$6) && !isPublicFile) { setModuleSideEffectPromises.push(this.resolve(url$6, id).then((resolved) => { if (!resolved) return Promise.reject(/* @__PURE__ */ new Error(`Failed to resolve ${url$6} from ${id}`)); const moduleInfo = this.getModuleInfo(resolved.id); if (moduleInfo) moduleInfo.moduleSideEffects = true; else if (!resolved.external) return this.load(resolved).then((mod) => { mod.moduleSideEffects = true; }); })); js += `\nimport ${JSON.stringify(url$6)}`; shouldRemove = true; } else if (node.childNodes.length) { const scriptNode = node.childNodes.pop(); const contents = scriptNode.value; const filePath = id.replace(normalizePath(config$2.root), ""); addToHTMLProxyCache(config$2, filePath, inlineModuleIndex, { code: contents }); js += `\nimport "${id}?html-proxy&index=${inlineModuleIndex}.js"`; shouldRemove = true; } everyScriptIsAsync &&= isAsync; someScriptsAreAsync ||= isAsync; someScriptsAreDefer ||= !isAsync; } else if (url$6 && !isPublicFile) { if (!isExcludedUrl(url$6)) config$2.logger.warn(``); preTransformRequest(server, modulePath, decodedBase); }; await traverseHtml(html, filename, (node) => { if (!nodeIsElement(node)) return; if (node.nodeName === "script") { const { src, srcSourceCodeLocation, isModule, isIgnored } = getScriptInfo(node); if (isIgnored) removeViteIgnoreAttr(s$2, node.sourceCodeLocation); else if (src) { const processedUrl = processNodeUrl(src.value, false, config$2, htmlPath, originalUrl, server, !isModule); if (processedUrl !== src.value) overwriteAttrValue(s$2, srcSourceCodeLocation, processedUrl); } else if (isModule && node.childNodes.length) addInlineModule(node, "js"); else if (node.childNodes.length) { const scriptNode = node.childNodes[node.childNodes.length - 1]; for (const { url: url$6, start, end } of extractImportExpressionFromClassicScript(scriptNode)) { const processedUrl = processNodeUrl(url$6, false, config$2, htmlPath, originalUrl); if (processedUrl !== url$6) s$2.update(start, end, processedUrl); } } } const inlineStyle = findNeedTransformStyleAttribute(node); if (inlineStyle) { inlineModuleIndex++; inlineStyles.push({ index: inlineModuleIndex, location: inlineStyle.location, code: inlineStyle.attr.value }); } if (node.nodeName === "style" && node.childNodes.length) { const children = node.childNodes[0]; styleUrl.push({ start: children.sourceCodeLocation.startOffset, end: children.sourceCodeLocation.endOffset, code: children.value }); } const assetAttributes = getNodeAssetAttributes(node); for (const attr of assetAttributes) if (attr.type === "remove") s$2.remove(attr.location.startOffset, attr.location.endOffset); else { const processedUrl = processNodeUrl(attr.value, attr.type === "srcset", config$2, htmlPath, originalUrl); if (processedUrl !== attr.value) overwriteAttrValue(s$2, attr.location, processedUrl); } }); const clientModuelGraph = server?.environments.client.moduleGraph; if (clientModuelGraph) await Promise.all(inlineModulePaths.map(async (url$6) => { const module$1 = await clientModuelGraph.getModuleByUrl(url$6); if (module$1) clientModuelGraph.invalidateModule(module$1); })); await Promise.all([...styleUrl.map(async ({ start, end, code }, index) => { const url$6 = `${proxyModulePath}?html-proxy&direct&index=${index}.css`; const mod = await server.environments.client.moduleGraph.ensureEntryFromUrl(url$6, false); ensureWatchedFile(watcher, mod.file, config$2.root); const result = await server.pluginContainer.transform(code, mod.id, { environment: server.environments.client }); let content = ""; if (result.map && "version" in result.map) { if (result.map.mappings) await injectSourcesContent(result.map, proxyModulePath, config$2.logger); content = getCodeWithSourcemap("css", result.code, result.map); } else content = result.code; s$2.overwrite(start, end, content); }), ...inlineStyles.map(async ({ index, location: location$1, code }) => { const url$6 = `${proxyModulePath}?html-proxy&inline-css&style-attr&index=${index}.css`; const mod = await server.environments.client.moduleGraph.ensureEntryFromUrl(url$6, false); ensureWatchedFile(watcher, mod.file, config$2.root); await server?.pluginContainer.transform(code, mod.id, { environment: server.environments.client }); const hash$1 = getHash(cleanUrl(mod.id)); const result = htmlProxyResult.get(`${hash$1}_${index}`); overwriteAttrValue(s$2, location$1, result ?? ""); })]); html = s$2.toString(); return { html, tags: [{ tag: "script", attrs: { type: "module", src: path.posix.join(base, CLIENT_PUBLIC_PATH) }, injectTo: "head-prepend" }] }; }; function indexHtmlMiddleware(root, server) { const isDev = isDevServer(server); return async function viteIndexHtmlMiddleware(req$4, res, next) { if (res.writableEnded) return next(); const url$6 = req$4.url && cleanUrl(req$4.url); if (url$6?.endsWith(".html") && req$4.headers["sec-fetch-dest"] !== "script") { let filePath; if (isDev && url$6.startsWith(FS_PREFIX)) filePath = decodeURIComponent(fsPathFromId(url$6)); else filePath = path.join(root, decodeURIComponent(url$6)); if (fs.existsSync(filePath)) { const headers = isDev ? server.config.server.headers : server.config.preview.headers; try { let html = await fsp.readFile(filePath, "utf-8"); if (isDev) html = await server.transformIndexHtml(url$6, html, req$4.originalUrl); return send(req$4, res, html, "html", { headers }); } catch (e$1) { return next(e$1); } } } next(); }; } function preTransformRequest(server, decodedUrl, decodedBase) { if (!server.config.server.preTransformRequests) return; decodedUrl = unwrapId(stripBase(decodedUrl, decodedBase)); server.warmupRequest(decodedUrl); } //#endregion //#region src/node/server/middlewares/time.ts const logTime = createDebugger("vite:time"); function timeMiddleware(root) { return function viteTimeMiddleware(req$4, res, next) { const start = performance$1.now(); const end = res.end; res.end = (...args) => { logTime?.(`${timeFrom(start)} ${prettifyUrl(req$4.url, root)}`); return end.call(res, ...args); }; next(); }; } //#endregion //#region src/node/server/mixedModuleGraph.ts /** * Backward compatible ModuleNode and ModuleGraph with mixed nodes from both the client and ssr environments * It would be good to take the types names for the new EnvironmentModuleNode and EnvironmentModuleGraph but we can't * do that at this point without breaking to much code in the ecosystem. * We are going to deprecate these types and we can try to use them back in the future. */ const EMPTY_OBJECT$1 = Object.freeze({}); var ModuleNode = class { _moduleGraph; _clientModule; _ssrModule; constructor(moduleGraph, clientModule, ssrModule) { this._moduleGraph = moduleGraph; this._clientModule = clientModule; this._ssrModule = ssrModule; } _get(prop) { return this._clientModule?.[prop] ?? this._ssrModule?.[prop]; } _set(prop, value$1) { if (this._clientModule) this._clientModule[prop] = value$1; if (this._ssrModule) this._ssrModule[prop] = value$1; } _wrapModuleSet(prop, module$1) { if (!module$1) return /* @__PURE__ */ new Set(); return createBackwardCompatibleModuleSet(this._moduleGraph, prop, module$1); } _getModuleSetUnion(prop) { const importedModules = /* @__PURE__ */ new Set(); const ids = /* @__PURE__ */ new Set(); if (this._clientModule) for (const mod of this._clientModule[prop]) { if (mod.id) ids.add(mod.id); importedModules.add(this._moduleGraph.getBackwardCompatibleModuleNode(mod)); } if (this._ssrModule) { for (const mod of this._ssrModule[prop]) if (mod.id && !ids.has(mod.id)) importedModules.add(this._moduleGraph.getBackwardCompatibleModuleNode(mod)); } return importedModules; } _getModuleInfoUnion(prop) { const _clientValue = this._clientModule?.[prop]; const _ssrValue = this._ssrModule?.[prop]; if (_clientValue == null && _ssrValue == null) return void 0; return new Proxy({}, { get: (_, key) => { if (key === "meta") return this.meta || EMPTY_OBJECT$1; if (_clientValue) { if (key in _clientValue) return _clientValue[key]; } if (_ssrValue) { if (key in _ssrValue) return _ssrValue[key]; } } }); } _getModuleObjectUnion(prop) { const _clientValue = this._clientModule?.[prop]; const _ssrValue = this._ssrModule?.[prop]; if (_clientValue == null && _ssrValue == null) return void 0; const info = {}; if (_ssrValue) Object.assign(info, _ssrValue); if (_clientValue) Object.assign(info, _clientValue); return info; } get url() { return this._get("url"); } set url(value$1) { this._set("url", value$1); } get id() { return this._get("id"); } set id(value$1) { this._set("id", value$1); } get file() { return this._get("file"); } set file(value$1) { this._set("file", value$1); } get type() { return this._get("type"); } get info() { return this._getModuleInfoUnion("info"); } get meta() { return this._getModuleObjectUnion("meta"); } get importers() { return this._getModuleSetUnion("importers"); } get clientImportedModules() { return this._wrapModuleSet("importedModules", this._clientModule); } get ssrImportedModules() { return this._wrapModuleSet("importedModules", this._ssrModule); } get importedModules() { return this._getModuleSetUnion("importedModules"); } get acceptedHmrDeps() { return this._wrapModuleSet("acceptedHmrDeps", this._clientModule); } get acceptedHmrExports() { return this._clientModule?.acceptedHmrExports ?? null; } get importedBindings() { return this._clientModule?.importedBindings ?? null; } get isSelfAccepting() { return this._clientModule?.isSelfAccepting; } get transformResult() { return this._clientModule?.transformResult ?? null; } set transformResult(value$1) { if (this._clientModule) this._clientModule.transformResult = value$1; } get ssrTransformResult() { return this._ssrModule?.transformResult ?? null; } set ssrTransformResult(value$1) { if (this._ssrModule) this._ssrModule.transformResult = value$1; } get ssrModule() { return this._ssrModule?.ssrModule ?? null; } get ssrError() { return this._ssrModule?.ssrError ?? null; } get lastHMRTimestamp() { return Math.max(this._clientModule?.lastHMRTimestamp ?? 0, this._ssrModule?.lastHMRTimestamp ?? 0); } set lastHMRTimestamp(value$1) { if (this._clientModule) this._clientModule.lastHMRTimestamp = value$1; if (this._ssrModule) this._ssrModule.lastHMRTimestamp = value$1; } get lastInvalidationTimestamp() { return Math.max(this._clientModule?.lastInvalidationTimestamp ?? 0, this._ssrModule?.lastInvalidationTimestamp ?? 0); } get invalidationState() { return this._clientModule?.invalidationState; } get ssrInvalidationState() { return this._ssrModule?.invalidationState; } }; function mapIterator(iterable, transform$2) { return { [Symbol.iterator]() { return this; }, next() { const r$2 = iterable.next(); return r$2.done ? r$2 : { value: transform$2(r$2.value), done: false }; } }; } var ModuleGraph = class { /** @internal */ _moduleGraphs; /** @internal */ get _client() { return this._moduleGraphs.client(); } /** @internal */ get _ssr() { return this._moduleGraphs.ssr(); } urlToModuleMap; idToModuleMap; etagToModuleMap; fileToModulesMap; moduleNodeCache = new DualWeakMap(); constructor(moduleGraphs) { this._moduleGraphs = moduleGraphs; const getModuleMapUnion = (prop) => () => { if (this._ssr[prop].size === 0) return this._client[prop]; const map$1 = new Map(this._client[prop]); for (const [key, module$1] of this._ssr[prop]) if (!map$1.has(key)) map$1.set(key, module$1); return map$1; }; this.urlToModuleMap = createBackwardCompatibleModuleMap(this, "urlToModuleMap", getModuleMapUnion("urlToModuleMap")); this.idToModuleMap = createBackwardCompatibleModuleMap(this, "idToModuleMap", getModuleMapUnion("idToModuleMap")); this.etagToModuleMap = createBackwardCompatibleModuleMap(this, "etagToModuleMap", () => this._client.etagToModuleMap); this.fileToModulesMap = createBackwardCompatibleFileToModulesMap(this); } getModuleById(id) { const clientModule = this._client.getModuleById(id); const ssrModule = this._ssr.getModuleById(id); if (!clientModule && !ssrModule) return; return this.getBackwardCompatibleModuleNodeDual(clientModule, ssrModule); } async getModuleByUrl(url$6, _ssr) { const [clientModule, ssrModule] = await Promise.all([this._client.getModuleByUrl(url$6), this._ssr.getModuleByUrl(url$6)]); if (!clientModule && !ssrModule) return; return this.getBackwardCompatibleModuleNodeDual(clientModule, ssrModule); } getModulesByFile(file) { const clientModules = this._client.getModulesByFile(file); const ssrModules = this._ssr.getModulesByFile(file); if (!clientModules && !ssrModules) return void 0; const result = /* @__PURE__ */ new Set(); if (clientModules) for (const mod of clientModules) result.add(this.getBackwardCompatibleBrowserModuleNode(mod)); if (ssrModules) { for (const mod of ssrModules) if (mod.id == null || !this._client.getModuleById(mod.id)) result.add(this.getBackwardCompatibleServerModuleNode(mod)); } return result; } onFileChange(file) { this._client.onFileChange(file); this._ssr.onFileChange(file); } onFileDelete(file) { this._client.onFileDelete(file); this._ssr.onFileDelete(file); } /** @internal */ _getModuleGraph(environment) { switch (environment) { case "client": return this._client; case "ssr": return this._ssr; default: throw new Error(`Invalid module node environment ${environment}`); } } invalidateModule(mod, seen$1 = /* @__PURE__ */ new Set(), timestamp = monotonicDateNow(), isHmr = false, softInvalidate = false) { if (mod._clientModule) this._client.invalidateModule(mod._clientModule, new Set([...seen$1].map((mod$1) => mod$1._clientModule).filter(Boolean)), timestamp, isHmr, softInvalidate); if (mod._ssrModule) this._ssr.invalidateModule(mod._ssrModule, new Set([...seen$1].map((mod$1) => mod$1._ssrModule).filter(Boolean)), timestamp, isHmr, softInvalidate); } invalidateAll() { this._client.invalidateAll(); this._ssr.invalidateAll(); } async ensureEntryFromUrl(rawUrl, ssr, setIsSelfAccepting = true) { const module$1 = await (ssr ? this._ssr : this._client).ensureEntryFromUrl(rawUrl, setIsSelfAccepting); return this.getBackwardCompatibleModuleNode(module$1); } createFileOnlyEntry(file) { const clientModule = this._client.createFileOnlyEntry(file); const ssrModule = this._ssr.createFileOnlyEntry(file); return this.getBackwardCompatibleModuleNodeDual(clientModule, ssrModule); } async resolveUrl(url$6, ssr) { return ssr ? this._ssr.resolveUrl(url$6) : this._client.resolveUrl(url$6); } updateModuleTransformResult(mod, result, ssr) { const environment = ssr ? "ssr" : "client"; this._getModuleGraph(environment).updateModuleTransformResult(environment === "client" ? mod._clientModule : mod._ssrModule, result); } getModuleByEtag(etag$1) { const mod = this._client.etagToModuleMap.get(etag$1); return mod && this.getBackwardCompatibleBrowserModuleNode(mod); } getBackwardCompatibleBrowserModuleNode(clientModule) { return this.getBackwardCompatibleModuleNodeDual(clientModule, clientModule.id ? this._ssr.getModuleById(clientModule.id) : void 0); } getBackwardCompatibleServerModuleNode(ssrModule) { return this.getBackwardCompatibleModuleNodeDual(ssrModule.id ? this._client.getModuleById(ssrModule.id) : void 0, ssrModule); } getBackwardCompatibleModuleNode(mod) { return mod.environment === "client" ? this.getBackwardCompatibleBrowserModuleNode(mod) : this.getBackwardCompatibleServerModuleNode(mod); } getBackwardCompatibleModuleNodeDual(clientModule, ssrModule) { const cached = this.moduleNodeCache.get(clientModule, ssrModule); if (cached) return cached; const moduleNode = new ModuleNode(this, clientModule, ssrModule); this.moduleNodeCache.set(clientModule, ssrModule, moduleNode); return moduleNode; } }; var DualWeakMap = class { map = /* @__PURE__ */ new WeakMap(); undefinedKey = {}; get(key1, key2) { const k1 = key1 ?? this.undefinedKey; const k2 = key2 ?? this.undefinedKey; return this.map.get(k1)?.get(k2); } set(key1, key2, value$1) { const k1 = key1 ?? this.undefinedKey; const k2 = key2 ?? this.undefinedKey; if (!this.map.has(k1)) this.map.set(k1, /* @__PURE__ */ new Map()); const m$2 = this.map.get(k1); m$2.set(k2, value$1); } }; function createBackwardCompatibleModuleSet(moduleGraph, prop, module$1) { return { [Symbol.iterator]() { return this.keys(); }, has(key) { if (!key.id) return false; const keyModule = moduleGraph._getModuleGraph(module$1.environment).getModuleById(key.id); return keyModule !== void 0 && module$1[prop].has(keyModule); }, values() { return this.keys(); }, keys() { return mapIterator(module$1[prop].keys(), (mod) => moduleGraph.getBackwardCompatibleModuleNode(mod)); }, get size() { return module$1[prop].size; }, forEach(callback, thisArg) { return module$1[prop].forEach((mod) => { const backwardCompatibleMod = moduleGraph.getBackwardCompatibleModuleNode(mod); callback.call(thisArg, backwardCompatibleMod, backwardCompatibleMod, this); }); } }; } function createBackwardCompatibleModuleMap(moduleGraph, prop, getModuleMap) { return { [Symbol.iterator]() { return this.entries(); }, get(key) { const clientModule = moduleGraph._client[prop].get(key); const ssrModule = moduleGraph._ssr[prop].get(key); if (!clientModule && !ssrModule) return; return moduleGraph.getBackwardCompatibleModuleNodeDual(clientModule, ssrModule); }, set(key, mod) { const clientModule = mod._clientModule; if (clientModule) moduleGraph._client[prop].set(key, clientModule); const ssrModule = mod._ssrModule; if (ssrModule) moduleGraph._ssr[prop].set(key, ssrModule); }, keys() { return getModuleMap().keys(); }, values() { return mapIterator(getModuleMap().values(), (mod) => moduleGraph.getBackwardCompatibleModuleNode(mod)); }, entries() { return mapIterator(getModuleMap().entries(), ([key, mod]) => [key, moduleGraph.getBackwardCompatibleModuleNode(mod)]); }, get size() { return getModuleMap().size; }, forEach(callback, thisArg) { return getModuleMap().forEach((mod, key) => { const backwardCompatibleMod = moduleGraph.getBackwardCompatibleModuleNode(mod); callback.call(thisArg, backwardCompatibleMod, key, this); }); } }; } function createBackwardCompatibleFileToModulesMap(moduleGraph) { const getFileToModulesMap = () => { if (!moduleGraph._ssr.fileToModulesMap.size) return moduleGraph._client.fileToModulesMap; const map$1 = new Map(moduleGraph._client.fileToModulesMap); for (const [key, modules] of moduleGraph._ssr.fileToModulesMap) { const modulesSet = map$1.get(key); if (!modulesSet) map$1.set(key, modules); else for (const ssrModule of modules) { let hasModule = false; for (const clientModule of modulesSet) { hasModule ||= clientModule.id === ssrModule.id; if (hasModule) break; } if (!hasModule) modulesSet.add(ssrModule); } } return map$1; }; const getBackwardCompatibleModules = (modules) => new Set([...modules].map((mod) => moduleGraph.getBackwardCompatibleModuleNode(mod))); return { [Symbol.iterator]() { return this.entries(); }, get(key) { const clientModules = moduleGraph._client.fileToModulesMap.get(key); const ssrModules = moduleGraph._ssr.fileToModulesMap.get(key); if (!clientModules && !ssrModules) return; const modules = clientModules ?? /* @__PURE__ */ new Set(); if (ssrModules) { for (const ssrModule of ssrModules) if (ssrModule.id) { let found$1 = false; for (const mod of modules) { found$1 ||= mod.id === ssrModule.id; if (found$1) break; } if (!found$1) modules.add(ssrModule); } } return getBackwardCompatibleModules(modules); }, keys() { return getFileToModulesMap().keys(); }, values() { return mapIterator(getFileToModulesMap().values(), getBackwardCompatibleModules); }, entries() { return mapIterator(getFileToModulesMap().entries(), ([key, modules]) => [key, getBackwardCompatibleModules(modules)]); }, get size() { return getFileToModulesMap().size; }, forEach(callback, thisArg) { return getFileToModulesMap().forEach((modules, key) => { callback.call(thisArg, getBackwardCompatibleModules(modules), key, this); }); } }; } //#endregion //#region src/node/server/middlewares/notFound.ts function notFoundMiddleware() { return function vite404Middleware(_, res) { res.statusCode = 404; res.end(); }; } //#endregion //#region src/node/server/searchRoot.ts const ROOT_FILES = ["pnpm-workspace.yaml", "lerna.json"]; function hasWorkspacePackageJSON(root) { const path$13 = join(root, "package.json"); if (!isFileReadable(path$13)) return false; try { const content = JSON.parse(fs.readFileSync(path$13, "utf-8")) || {}; return !!content.workspaces; } catch { return false; } } function hasRootFile(root) { return ROOT_FILES.some((file) => fs.existsSync(join(root, file))); } function hasPackageJSON(root) { const path$13 = join(root, "package.json"); return fs.existsSync(path$13); } /** * Search up for the nearest `package.json` */ function searchForPackageRoot(current, root = current) { if (hasPackageJSON(current)) return current; const dir = dirname(current); if (!dir || dir === current) return root; return searchForPackageRoot(dir, root); } /** * Search up for the nearest workspace root */ function searchForWorkspaceRoot(current, root = searchForPackageRoot(current)) { if (hasRootFile(current)) return current; if (hasWorkspacePackageJSON(current)) return current; const dir = dirname(current); if (!dir || dir === current) return root; return searchForWorkspaceRoot(dir, root); } //#endregion //#region src/node/server/middlewares/hostCheck.ts function getAdditionalAllowedHosts(resolvedServerOptions, resolvedPreviewOptions) { const list = []; if (typeof resolvedServerOptions.host === "string" && resolvedServerOptions.host) list.push(resolvedServerOptions.host); if (typeof resolvedServerOptions.hmr === "object" && resolvedServerOptions.hmr.host) list.push(resolvedServerOptions.hmr.host); if (typeof resolvedPreviewOptions.host === "string" && resolvedPreviewOptions.host) list.push(resolvedPreviewOptions.host); if (resolvedServerOptions.origin) try { const serverOriginUrl = new URL(resolvedServerOptions.origin); list.push(serverOriginUrl.hostname); } catch {} return list; } function hostValidationMiddleware(allowedHosts, isPreview) { return hostValidationMiddleware$1({ allowedHosts: Object.freeze([...allowedHosts]), generateErrorMessage(hostname) { const hostnameWithQuotes = JSON.stringify(hostname); const optionName = `${isPreview ? "preview" : "server"}.allowedHosts`; return `Blocked request. This host (${hostnameWithQuotes}) is not allowed.\nTo allow this host, add ${hostnameWithQuotes} to \`${optionName}\` in vite.config.js.`; } }); } //#endregion //#region src/node/server/middlewares/rejectInvalidRequest.ts function rejectInvalidRequestMiddleware() { return function viteRejectInvalidRequestMiddleware(req$4, res, next) { if (req$4.url?.includes("#")) { res.writeHead(400); res.end(); return; } return next(); }; } //#endregion //#region src/node/server/index.ts var import_connect$1 = __toESM(require_connect(), 1); var import_lib$1 = __toESM(require_lib(), 1); var import_picocolors$10 = __toESM(require_picocolors(), 1); var import_chokidar = __toESM(require_chokidar(), 1); var import_launch_editor_middleware = __toESM(require_launch_editor_middleware(), 1); const usedConfigs = /* @__PURE__ */ new WeakSet(); function createServer$2(inlineConfig = {}) { return _createServer(inlineConfig, { listen: true }); } async function _createServer(inlineConfig = {}, options$1) { const config$2 = isResolvedConfig(inlineConfig) ? inlineConfig : await resolveConfig(inlineConfig, "serve"); if (usedConfigs.has(config$2)) throw new Error(`There is already a server associated with the config.`); if (config$2.command !== "serve") throw new Error(`Config was resolved for a "build", expected a "serve" command.`); usedConfigs.add(config$2); const initPublicFilesPromise = initPublicFiles(config$2); const { root, server: serverConfig } = config$2; const httpsOptions = await resolveHttpsConfig(config$2.server.https); const { middlewareMode } = serverConfig; const resolvedOutDirs = getResolvedOutDirs(config$2.root, config$2.build.outDir, config$2.build.rollupOptions.output); const emptyOutDir = resolveEmptyOutDir(config$2.build.emptyOutDir, config$2.root, resolvedOutDirs); const resolvedWatchOptions = resolveChokidarOptions({ disableGlobbing: true, ...serverConfig.watch }, resolvedOutDirs, emptyOutDir, config$2.cacheDir); const middlewares = (0, import_connect$1.default)(); const httpServer = middlewareMode ? null : await resolveHttpServer(serverConfig, middlewares, httpsOptions); const ws$1 = createWebSocketServer(httpServer, config$2, httpsOptions); const publicFiles = await initPublicFilesPromise; const { publicDir } = config$2; if (httpServer) setClientErrorHandler(httpServer, config$2.logger); const watchEnabled = serverConfig.watch !== null; const watcher = watchEnabled ? import_chokidar.watch([ root, ...config$2.configFileDependencies, ...getEnvFilesForMode(config$2.mode, config$2.envDir), ...publicDir && publicFiles ? [publicDir] : [] ], resolvedWatchOptions) : createNoopWatcher(resolvedWatchOptions); const environments = {}; for (const [name, environmentOptions] of Object.entries(config$2.environments)) environments[name] = await environmentOptions.dev.createEnvironment(name, config$2, { ws: ws$1 }); for (const environment of Object.values(environments)) { const previousInstance = options$1.previousEnvironments?.[environment.name]; await environment.init({ watcher, previousInstance }); } let moduleGraph = new ModuleGraph({ client: () => environments.client.moduleGraph, ssr: () => environments.ssr.moduleGraph }); const pluginContainer = createPluginContainer(environments); const closeHttpServer = createServerCloseFn(httpServer); const devHtmlTransformFn = createDevHtmlTransformFn(config$2); let closeServerPromise; const closeServer = async () => { if (!middlewareMode) teardownSIGTERMListener(closeServerAndExit); await Promise.allSettled([ watcher.close(), ws$1.close(), Promise.allSettled(Object.values(server.environments).map((environment) => environment.close())), closeHttpServer(), server._ssrCompatModuleRunner?.close() ]); server.resolvedUrls = null; server._ssrCompatModuleRunner = void 0; }; let server = { config: config$2, middlewares, httpServer, watcher, ws: ws$1, hot: ws$1, environments, pluginContainer, get moduleGraph() { warnFutureDeprecation(config$2, "removeServerModuleGraph"); return moduleGraph; }, set moduleGraph(graph) { moduleGraph = graph; }, resolvedUrls: null, ssrTransform(code, inMap, url$6, originalCode = code) { return ssrTransform(code, inMap, url$6, originalCode, { json: { stringify: config$2.json.stringify === true && config$2.json.namedExports !== true } }); }, transformRequest(url$6, options$2) { warnFutureDeprecation(config$2, "removeServerTransformRequest", "server.transformRequest() is deprecated. Use environment.transformRequest() instead."); const environment = server.environments[options$2?.ssr ? "ssr" : "client"]; return transformRequest(environment, url$6, options$2); }, async warmupRequest(url$6, options$2) { try { const environment = server.environments[options$2?.ssr ? "ssr" : "client"]; await transformRequest(environment, url$6, options$2); } catch (e$1) { if (e$1?.code === ERR_OUTDATED_OPTIMIZED_DEP || e$1?.code === ERR_CLOSED_SERVER) return; server.config.logger.error(buildErrorMessage(e$1, [`Pre-transform error: ${e$1.message}`], false), { error: e$1, timestamp: true }); } }, transformIndexHtml(url$6, html, originalUrl) { return devHtmlTransformFn(server, url$6, html, originalUrl); }, async ssrLoadModule(url$6, opts) { warnFutureDeprecation(config$2, "removeSsrLoadModule"); return ssrLoadModule(url$6, server, opts?.fixStacktrace); }, ssrFixStacktrace(e$1) { ssrFixStacktrace(e$1, server.environments.ssr.moduleGraph); }, ssrRewriteStacktrace(stack) { return ssrRewriteStacktrace(stack, server.environments.ssr.moduleGraph); }, async reloadModule(module$1) { if (serverConfig.hmr !== false && module$1.file) { const environmentModule = module$1._clientModule ?? module$1._ssrModule; updateModules(environments[environmentModule.environment], module$1.file, [environmentModule], monotonicDateNow()); } }, async listen(port, isRestart) { await startServer(server, port); if (httpServer) { server.resolvedUrls = await resolveServerUrls(httpServer, config$2.server, httpsOptions, config$2); if (!isRestart && config$2.server.open) server.openBrowser(); } return server; }, openBrowser() { const options$2 = server.config.server; const url$6 = getServerUrlByHost(server.resolvedUrls, options$2.host); if (url$6) { const path$13 = typeof options$2.open === "string" ? new URL(options$2.open, url$6).href : url$6; if (server.config.server.preTransformRequests) setTimeout(() => { const getMethod = path$13.startsWith("https:") ? get$1 : get; getMethod(path$13, { headers: { Accept: "text/html" } }, (res) => { res.on("end", () => {}); }).on("error", () => {}).end(); }, 0); openBrowser(path$13, true, server.config.logger); } else server.config.logger.warn("No URL available to open in browser"); }, async close() { if (!closeServerPromise) closeServerPromise = closeServer(); return closeServerPromise; }, printUrls() { if (server.resolvedUrls) printServerUrls(server.resolvedUrls, serverConfig.host, config$2.logger.info); else if (middlewareMode) throw new Error("cannot print server URLs in middleware mode."); else throw new Error("cannot print server URLs before server.listen is called."); }, bindCLIShortcuts(options$2) { bindCLIShortcuts(server, options$2); }, async restart(forceOptimize) { if (!server._restartPromise) { server._forceOptimizeOnRestart = !!forceOptimize; server._restartPromise = restartServer(server).finally(() => { server._restartPromise = null; server._forceOptimizeOnRestart = false; }); } return server._restartPromise; }, waitForRequestsIdle(ignoredId) { return environments.client.waitForRequestsIdle(ignoredId); }, _setInternalServer(_server) { server = _server; }, _restartPromise: null, _forceOptimizeOnRestart: false, _shortcutsOptions: void 0 }; const reflexServer = new Proxy(server, { get: (_, property) => { return server[property]; }, set: (_, property, value$1) => { server[property] = value$1; return true; } }); const closeServerAndExit = async (_, exitCode) => { try { await server.close(); } finally { process.exitCode ??= exitCode ? 128 + exitCode : void 0; process.exit(); } }; if (!middlewareMode) setupSIGTERMListener(closeServerAndExit); const onHMRUpdate = async (type, file) => { if (serverConfig.hmr !== false) await handleHMRUpdate(type, file, server); }; const onFileAddUnlink = async (file, isUnlink) => { file = normalizePath(file); reloadOnTsconfigChange(server, file); await pluginContainer.watchChange(file, { event: isUnlink ? "delete" : "create" }); if (publicDir && publicFiles) { if (file.startsWith(publicDir)) { const path$13 = file.slice(publicDir.length); publicFiles[isUnlink ? "delete" : "add"](path$13); if (!isUnlink) { const clientModuleGraph = server.environments.client.moduleGraph; const moduleWithSamePath = await clientModuleGraph.getModuleByUrl(path$13); const etag$1 = moduleWithSamePath?.transformResult?.etag; if (etag$1) clientModuleGraph.etagToModuleMap.delete(etag$1); } } } if (isUnlink) for (const environment of Object.values(server.environments)) environment.moduleGraph.onFileDelete(file); await onHMRUpdate(isUnlink ? "delete" : "create", file); }; watcher.on("change", async (file) => { file = normalizePath(file); reloadOnTsconfigChange(server, file); await pluginContainer.watchChange(file, { event: "update" }); for (const environment of Object.values(server.environments)) environment.moduleGraph.onFileChange(file); await onHMRUpdate("update", file); }); watcher.on("add", (file) => { onFileAddUnlink(file, false); }); watcher.on("unlink", (file) => { onFileAddUnlink(file, true); }); if (!middlewareMode && httpServer) httpServer.once("listening", () => { serverConfig.port = httpServer.address().port; }); if (process.env.DEBUG) middlewares.use(timeMiddleware(root)); middlewares.use(rejectInvalidRequestMiddleware()); const { cors } = serverConfig; if (cors !== false) middlewares.use((0, import_lib$1.default)(typeof cors === "boolean" ? {} : cors)); const { allowedHosts } = serverConfig; if (allowedHosts !== true && !serverConfig.https) middlewares.use(hostValidationMiddleware(allowedHosts, false)); const configureServerContext = new BasicMinimalPluginContext({ ...basePluginContextMeta, watchMode: true }, config$2.logger); const postHooks = []; for (const hook of config$2.getSortedPluginHooks("configureServer")) postHooks.push(await hook.call(configureServerContext, reflexServer)); middlewares.use(cachedTransformMiddleware(server)); const { proxy } = serverConfig; if (proxy) { const middlewareServer = (isObject(middlewareMode) ? middlewareMode.server : null) || httpServer; middlewares.use(proxyMiddleware(middlewareServer, proxy, config$2)); } if (config$2.base !== "/") middlewares.use(baseMiddleware(config$2.rawBase, !!middlewareMode)); middlewares.use("/__open-in-editor", (0, import_launch_editor_middleware.default)()); middlewares.use(function viteHMRPingMiddleware(req$4, res, next) { if (req$4.headers["accept"] === "text/x-vite-ping") res.writeHead(204).end(); else next(); }); if (publicDir) middlewares.use(servePublicMiddleware(server, publicFiles)); middlewares.use(transformMiddleware(server)); middlewares.use(serveRawFsMiddleware(server)); middlewares.use(serveStaticMiddleware(server)); if (config$2.appType === "spa" || config$2.appType === "mpa") middlewares.use(htmlFallbackMiddleware(root, config$2.appType === "spa")); postHooks.forEach((fn) => fn && fn()); if (config$2.appType === "spa" || config$2.appType === "mpa") { middlewares.use(indexHtmlMiddleware(root, server)); middlewares.use(notFoundMiddleware()); } middlewares.use(errorMiddleware(server, !!middlewareMode)); let initingServer; let serverInited = false; const initServer = async (onListen) => { if (serverInited) return; if (initingServer) return initingServer; initingServer = async function() { await environments.client.pluginContainer.buildStart(); if (onListen || options$1.listen) await Promise.all(Object.values(environments).map((e$1) => e$1.listen(server))); initingServer = void 0; serverInited = true; }(); return initingServer; }; if (!middlewareMode && httpServer) { const listen = httpServer.listen.bind(httpServer); httpServer.listen = async (port, ...args) => { try { await initServer(true); } catch (e$1) { httpServer.emit("error", e$1); return; } return listen(port, ...args); }; } else await initServer(false); return server; } async function startServer(server, inlinePort) { const httpServer = server.httpServer; if (!httpServer) throw new Error("Cannot call server.listen in middleware mode."); const options$1 = server.config.server; const hostname = await resolveHostname(options$1.host); const configPort = inlinePort ?? options$1.port; const port = (!configPort || configPort === server._configServerPort ? server._currentServerPort : configPort) ?? DEFAULT_DEV_PORT; server._configServerPort = configPort; const serverPort = await httpServerStart(httpServer, { port, strictPort: options$1.strictPort, host: hostname.host, logger: server.config.logger }); server._currentServerPort = serverPort; } function createServerCloseFn(server) { if (!server) return () => Promise.resolve(); let hasListened = false; const openSockets = /* @__PURE__ */ new Set(); server.on("connection", (socket) => { openSockets.add(socket); socket.on("close", () => { openSockets.delete(socket); }); }); server.once("listening", () => { hasListened = true; }); return () => new Promise((resolve$4, reject) => { openSockets.forEach((s$2) => s$2.destroy()); if (hasListened) server.close((err$2) => { if (err$2) reject(err$2); else resolve$4(); }); else resolve$4(); }); } function resolvedAllowDir(root, dir) { return normalizePath(path.resolve(root, dir)); } const serverConfigDefaults = Object.freeze({ port: DEFAULT_DEV_PORT, strictPort: false, host: "localhost", allowedHosts: [], https: void 0, open: false, proxy: void 0, cors: { origin: defaultAllowedOrigins }, headers: {}, warmup: { clientFiles: [], ssrFiles: [] }, middlewareMode: false, fs: { strict: true, deny: [ ".env", ".env.*", "*.{crt,pem}", "**/.git/**" ] }, preTransformRequests: true, perEnvironmentStartEndDuringDev: false }); function resolveServerOptions(root, raw, logger) { const _server = mergeWithDefaults({ ...serverConfigDefaults, host: void 0, sourcemapIgnoreList: isInNodeModules }, raw ?? {}); const server = { ..._server, fs: { ..._server.fs, allow: raw?.fs?.allow ?? [searchForWorkspaceRoot(root)] }, sourcemapIgnoreList: _server.sourcemapIgnoreList === false ? () => false : _server.sourcemapIgnoreList }; let allowDirs = server.fs.allow; if (process.versions.pnp) { const cwd = searchForPackageRoot(root); try { const enableGlobalCache = execSync("yarn config get enableGlobalCache", { cwd }).toString().trim() === "true"; const yarnCacheDir = execSync(`yarn config get ${enableGlobalCache ? "globalFolder" : "cacheFolder"}`, { cwd }).toString().trim(); allowDirs.push(yarnCacheDir); } catch (e$1) { logger.warn(`Get yarn cache dir error: ${e$1.message}`, { timestamp: true }); } } allowDirs = allowDirs.map((i$1) => resolvedAllowDir(root, i$1)); const resolvedClientDir = resolvedAllowDir(root, CLIENT_DIR); if (!allowDirs.some((dir) => isParentDirectory(dir, resolvedClientDir))) allowDirs.push(resolvedClientDir); server.fs.allow = allowDirs; if (server.origin?.endsWith("/")) { server.origin = server.origin.slice(0, -1); logger.warn(import_picocolors$10.default.yellow(`${import_picocolors$10.default.bold("(!)")} server.origin should not end with "/". Using "${server.origin}" instead.`)); } if (process.env.__VITE_ADDITIONAL_SERVER_ALLOWED_HOSTS && Array.isArray(server.allowedHosts)) { const additionalHost = process.env.__VITE_ADDITIONAL_SERVER_ALLOWED_HOSTS; server.allowedHosts = [...server.allowedHosts, additionalHost]; } return server; } async function restartServer(server) { global.__vite_start_time = performance$1.now(); const shortcutsOptions = server._shortcutsOptions; let inlineConfig = server.config.inlineConfig; if (server._forceOptimizeOnRestart) inlineConfig = mergeConfig(inlineConfig, { forceOptimizeDeps: true }); { let newServer = null; try { newServer = await _createServer(inlineConfig, { listen: false, previousEnvironments: server.environments }); } catch (err$2) { server.config.logger.error(err$2.message, { timestamp: true }); server.config.logger.error("server restart failed", { timestamp: true }); return; } await server.close(); const middlewares = server.middlewares; newServer._configServerPort = server._configServerPort; newServer._currentServerPort = server._currentServerPort; Object.assign(server, newServer); middlewares.stack = newServer.middlewares.stack; server.middlewares = middlewares; newServer._setInternalServer(server); } const { logger, server: { port, middlewareMode } } = server.config; if (!middlewareMode) await server.listen(port, true); else await Promise.all(Object.values(server.environments).map((e$1) => e$1.listen(server))); logger.info("server restarted.", { timestamp: true }); if (shortcutsOptions) { shortcutsOptions.print = false; bindCLIShortcuts(server, shortcutsOptions); } } /** * Internal function to restart the Vite server and print URLs if changed */ async function restartServerWithUrls(server) { if (server.config.server.middlewareMode) { await server.restart(); return; } const { port: prevPort, host: prevHost } = server.config.server; const prevUrls = server.resolvedUrls; await server.restart(); const { logger, server: { port, host } } = server.config; if ((port ?? DEFAULT_DEV_PORT) !== (prevPort ?? DEFAULT_DEV_PORT) || host !== prevHost || diffDnsOrderChange(prevUrls, server.resolvedUrls)) { logger.info(""); server.printUrls(); } } //#endregion //#region src/node/server/hmr.ts var import_picocolors$9 = __toESM(require_picocolors(), 1); const debugHmr = createDebugger("vite:hmr"); const whitespaceRE = /\s/; const normalizedClientDir = normalizePath(CLIENT_DIR); function getShortName(file, root) { return file.startsWith(withTrailingSlash(root)) ? path.posix.relative(root, file) : file; } const normalizeHotChannel = (channel, enableHmr, normalizeClient = true) => { const normalizedListenerMap = /* @__PURE__ */ new WeakMap(); const listenersForEvents = /* @__PURE__ */ new Map(); let invokeHandlers; let listenerForInvokeHandler; const handleInvoke = async (payload) => { if (!invokeHandlers) return { error: { name: "TransportError", message: "invokeHandlers is not set", stack: (/* @__PURE__ */ new Error()).stack } }; const data = payload.data; const { name, data: args } = data; try { const invokeHandler = invokeHandlers[name]; const result = await invokeHandler(...args); return { result }; } catch (error$1) { return { error: { name: error$1.name, message: error$1.message, stack: error$1.stack, ...error$1 } }; } }; return { ...channel, on: (event, fn) => { if (event === "connection" || !normalizeClient) { channel.on?.(event, fn); return; } const listenerWithNormalizedClient = (data, client) => { const normalizedClient = { send: (...args) => { let payload; if (typeof args[0] === "string") payload = { type: "custom", event: args[0], data: args[1] }; else payload = args[0]; client.send(payload); } }; fn(data, normalizedClient); }; normalizedListenerMap.set(fn, listenerWithNormalizedClient); channel.on?.(event, listenerWithNormalizedClient); if (!listenersForEvents.has(event)) listenersForEvents.set(event, /* @__PURE__ */ new Set()); listenersForEvents.get(event).add(listenerWithNormalizedClient); }, off: (event, fn) => { if (event === "connection" || !normalizeClient) { channel.off?.(event, fn); return; } const normalizedListener = normalizedListenerMap.get(fn); if (normalizedListener) { channel.off?.(event, normalizedListener); listenersForEvents.get(event)?.delete(normalizedListener); } }, setInvokeHandler(_invokeHandlers) { invokeHandlers = _invokeHandlers; if (!_invokeHandlers) { if (listenerForInvokeHandler) channel.off?.("vite:invoke", listenerForInvokeHandler); return; } listenerForInvokeHandler = async (payload, client) => { const responseInvoke = payload.id.replace("send", "response"); client.send({ type: "custom", event: "vite:invoke", data: { name: payload.name, id: responseInvoke, data: await handleInvoke({ type: "custom", event: "vite:invoke", data: payload }) } }); }; channel.on?.("vite:invoke", listenerForInvokeHandler); }, handleInvoke, send: (...args) => { let payload; if (typeof args[0] === "string") payload = { type: "custom", event: args[0], data: args[1] }; else payload = args[0]; if (enableHmr || payload.type === "connected" || payload.type === "ping" || payload.type === "custom" || payload.type === "error") channel.send?.(payload); }, listen() { return channel.listen?.(); }, close() { return channel.close?.(); } }; }; function getSortedPluginsByHotUpdateHook(plugins$1) { const sortedPlugins = []; let pre = 0, normal = 0, post = 0; for (const plugin of plugins$1) { const hook = plugin["hotUpdate"] ?? plugin["handleHotUpdate"]; if (hook) { if (typeof hook === "object") { if (hook.order === "pre") { sortedPlugins.splice(pre++, 0, plugin); continue; } if (hook.order === "post") { sortedPlugins.splice(pre + normal + post++, 0, plugin); continue; } } sortedPlugins.splice(pre + normal++, 0, plugin); } } return sortedPlugins; } const sortedHotUpdatePluginsCache = /* @__PURE__ */ new WeakMap(); function getSortedHotUpdatePlugins(environment) { let sortedPlugins = sortedHotUpdatePluginsCache.get(environment); if (!sortedPlugins) { sortedPlugins = getSortedPluginsByHotUpdateHook(environment.plugins); sortedHotUpdatePluginsCache.set(environment, sortedPlugins); } return sortedPlugins; } async function handleHMRUpdate(type, file, server) { const { config: config$2 } = server; const mixedModuleGraph = ignoreDeprecationWarnings(() => server.moduleGraph); const environments = Object.values(server.environments); const shortFile = getShortName(file, config$2.root); const isConfig = file === config$2.configFile; const isConfigDependency = config$2.configFileDependencies.some((name) => file === name); const isEnv = config$2.envDir !== false && getEnvFilesForMode(config$2.mode, config$2.envDir).includes(file); if (isConfig || isConfigDependency || isEnv) { debugHmr?.(`[config change] ${import_picocolors$9.default.dim(shortFile)}`); config$2.logger.info(import_picocolors$9.default.green(`${normalizePath(path.relative(process.cwd(), file))} changed, restarting server...`), { clear: true, timestamp: true }); try { await restartServerWithUrls(server); } catch (e$1) { config$2.logger.error(import_picocolors$9.default.red(e$1)); } return; } debugHmr?.(`[file change] ${import_picocolors$9.default.dim(shortFile)}`); if (file.startsWith(withTrailingSlash(normalizedClientDir))) { environments.forEach(({ hot }) => hot.send({ type: "full-reload", path: "*", triggeredBy: path.resolve(config$2.root, file) })); return; } const timestamp = monotonicDateNow(); const contextMeta = { type, file, timestamp, read: () => readModifiedFile(file), server }; const hotMap = /* @__PURE__ */ new Map(); for (const environment of Object.values(server.environments)) { const mods = new Set(environment.moduleGraph.getModulesByFile(file)); if (type === "create") for (const mod of environment.moduleGraph._hasResolveFailedErrorModules) mods.add(mod); const options$1 = { ...contextMeta, modules: [...mods] }; hotMap.set(environment, { options: options$1 }); } const mixedMods = new Set(mixedModuleGraph.getModulesByFile(file)); const mixedHmrContext = { ...contextMeta, modules: [...mixedMods] }; const contextForHandleHotUpdate = new BasicMinimalPluginContext({ ...basePluginContextMeta, watchMode: true }, config$2.logger); const clientEnvironment = server.environments.client; const ssrEnvironment = server.environments.ssr; const clientContext = clientEnvironment.pluginContainer.minimalContext; const clientHotUpdateOptions = hotMap.get(clientEnvironment).options; const ssrHotUpdateOptions = hotMap.get(ssrEnvironment)?.options; try { for (const plugin of getSortedHotUpdatePlugins(server.environments.client)) if (plugin.hotUpdate) { const filteredModules = await getHookHandler(plugin.hotUpdate).call(clientContext, clientHotUpdateOptions); if (filteredModules) { clientHotUpdateOptions.modules = filteredModules; mixedHmrContext.modules = mixedHmrContext.modules.filter((mixedMod) => filteredModules.some((mod) => mixedMod.id === mod.id) || ssrHotUpdateOptions?.modules.some((ssrMod) => ssrMod.id === mixedMod.id)); mixedHmrContext.modules.push(...filteredModules.filter((mod) => !mixedHmrContext.modules.some((mixedMod) => mixedMod.id === mod.id)).map((mod) => mixedModuleGraph.getBackwardCompatibleModuleNode(mod))); } } else if (type === "update") { warnFutureDeprecation(config$2, "removePluginHookHandleHotUpdate", `Used in plugin "${plugin.name}".`, false); const filteredModules = await getHookHandler(plugin.handleHotUpdate).call(contextForHandleHotUpdate, mixedHmrContext); if (filteredModules) { mixedHmrContext.modules = filteredModules; clientHotUpdateOptions.modules = clientHotUpdateOptions.modules.filter((mod) => filteredModules.some((mixedMod) => mod.id === mixedMod.id)); clientHotUpdateOptions.modules.push(...filteredModules.filter((mixedMod) => !clientHotUpdateOptions.modules.some((mod) => mod.id === mixedMod.id)).map((mixedMod) => mixedMod._clientModule).filter(Boolean)); if (ssrHotUpdateOptions) { ssrHotUpdateOptions.modules = ssrHotUpdateOptions.modules.filter((mod) => filteredModules.some((mixedMod) => mod.id === mixedMod.id)); ssrHotUpdateOptions.modules.push(...filteredModules.filter((mixedMod) => !ssrHotUpdateOptions.modules.some((mod) => mod.id === mixedMod.id)).map((mixedMod) => mixedMod._ssrModule).filter(Boolean)); } } } } catch (error$1) { hotMap.get(server.environments.client).error = error$1; } for (const environment of Object.values(server.environments)) { if (environment.name === "client") continue; const hot = hotMap.get(environment); const context = environment.pluginContainer.minimalContext; try { for (const plugin of getSortedHotUpdatePlugins(environment)) if (plugin.hotUpdate) { const filteredModules = await getHookHandler(plugin.hotUpdate).call(context, hot.options); if (filteredModules) hot.options.modules = filteredModules; } } catch (error$1) { hot.error = error$1; } } async function hmr(environment) { try { const { options: options$1, error: error$1 } = hotMap.get(environment); if (error$1) throw error$1; if (!options$1.modules.length) { if (file.endsWith(".html") && environment.name === "client") { environment.logger.info(import_picocolors$9.default.green(`page reload `) + import_picocolors$9.default.dim(shortFile), { clear: true, timestamp: true }); environment.hot.send({ type: "full-reload", path: config$2.server.middlewareMode ? "*" : "/" + normalizePath(path.relative(config$2.root, file)) }); } else debugHmr?.(`(${environment.name}) [no modules matched] ${import_picocolors$9.default.dim(shortFile)}`); return; } updateModules(environment, shortFile, options$1.modules, timestamp); } catch (err$2) { environment.hot.send({ type: "error", err: prepareError(err$2) }); } } const hotUpdateEnvironments = server.config.server.hotUpdateEnvironments ?? ((server$1, hmr$1) => { return Promise.all(Object.values(server$1.environments).map((environment) => hmr$1(environment))); }); await hotUpdateEnvironments(server, hmr); } function updateModules(environment, file, modules, timestamp, firstInvalidatedBy) { const { hot } = environment; const updates = []; const invalidatedModules = /* @__PURE__ */ new Set(); const traversedModules = /* @__PURE__ */ new Set(); let needFullReload = modules.length === 0; for (const mod of modules) { const boundaries = []; const hasDeadEnd = propagateUpdate(mod, traversedModules, boundaries); environment.moduleGraph.invalidateModule(mod, invalidatedModules, timestamp, true); if (needFullReload) continue; if (hasDeadEnd) { needFullReload = hasDeadEnd; continue; } if (firstInvalidatedBy && boundaries.some(({ acceptedVia }) => normalizeHmrUrl(acceptedVia.url) === firstInvalidatedBy)) { needFullReload = "circular import invalidate"; continue; } updates.push(...boundaries.map(({ boundary, acceptedVia, isWithinCircularImport }) => ({ type: `${boundary.type}-update`, timestamp, path: normalizeHmrUrl(boundary.url), acceptedPath: normalizeHmrUrl(acceptedVia.url), explicitImportRequired: boundary.type === "js" ? isExplicitImportRequired(acceptedVia.url) : false, isWithinCircularImport, firstInvalidatedBy }))); } if (needFullReload) { const reason = typeof needFullReload === "string" ? import_picocolors$9.default.dim(` (${needFullReload})`) : ""; environment.logger.info(import_picocolors$9.default.green(`page reload `) + import_picocolors$9.default.dim(file) + reason, { clear: !firstInvalidatedBy, timestamp: true }); hot.send({ type: "full-reload", triggeredBy: path.resolve(environment.config.root, file) }); return; } if (updates.length === 0) { debugHmr?.(import_picocolors$9.default.yellow(`no update happened `) + import_picocolors$9.default.dim(file)); return; } environment.logger.info(import_picocolors$9.default.green(`hmr update `) + import_picocolors$9.default.dim([...new Set(updates.map((u) => u.path))].join(", ")), { clear: !firstInvalidatedBy, timestamp: true }); hot.send({ type: "update", updates }); } function areAllImportsAccepted(importedBindings, acceptedExports) { for (const binding of importedBindings) if (!acceptedExports.has(binding)) return false; return true; } function propagateUpdate(node, traversedModules, boundaries, currentChain = [node]) { if (traversedModules.has(node)) return false; traversedModules.add(node); if (node.id && node.isSelfAccepting === void 0) { debugHmr?.(`[propagate update] stop propagation because not analyzed: ${import_picocolors$9.default.dim(node.id)}`); return false; } if (node.isSelfAccepting) { boundaries.push({ boundary: node, acceptedVia: node, isWithinCircularImport: isNodeWithinCircularImports(node, currentChain) }); for (const importer of node.importers) if (isCSSRequest(importer.url) && !currentChain.includes(importer)) propagateUpdate(importer, traversedModules, boundaries, currentChain.concat(importer)); return false; } if (node.acceptedHmrExports) boundaries.push({ boundary: node, acceptedVia: node, isWithinCircularImport: isNodeWithinCircularImports(node, currentChain) }); else { if (!node.importers.size) return true; if (!isCSSRequest(node.url) && !node.file?.endsWith(".svg") && [...node.importers].every((i$1) => isCSSRequest(i$1.url))) return true; } for (const importer of node.importers) { const subChain = currentChain.concat(importer); if (importer.acceptedHmrDeps.has(node)) { boundaries.push({ boundary: importer, acceptedVia: node, isWithinCircularImport: isNodeWithinCircularImports(importer, subChain) }); continue; } if (node.id && node.acceptedHmrExports && importer.importedBindings) { const importedBindingsFromNode = importer.importedBindings.get(node.id); if (importedBindingsFromNode && areAllImportsAccepted(importedBindingsFromNode, node.acceptedHmrExports)) continue; } if (!currentChain.includes(importer) && propagateUpdate(importer, traversedModules, boundaries, subChain)) return true; } return false; } /** * Check importers recursively if it's an import loop. An accepted module within * an import loop cannot recover its execution order and should be reloaded. * * @param node The node that accepts HMR and is a boundary * @param nodeChain The chain of nodes/imports that lead to the node. * (The last node in the chain imports the `node` parameter) * @param currentChain The current chain tracked from the `node` parameter * @param traversedModules The set of modules that have traversed */ function isNodeWithinCircularImports(node, nodeChain, currentChain = [node], traversedModules = /* @__PURE__ */ new Set()) { if (traversedModules.has(node)) return false; traversedModules.add(node); for (const importer of node.importers) { if (importer === node) continue; if (isCSSRequest(importer.url)) continue; const importerIndex = nodeChain.indexOf(importer); if (importerIndex > -1) { if (debugHmr) { const importChain = [ importer, ...[...currentChain].reverse(), ...nodeChain.slice(importerIndex, -1).reverse() ]; debugHmr(import_picocolors$9.default.yellow(`circular imports detected: `) + importChain.map((m$2) => import_picocolors$9.default.dim(m$2.url)).join(" -> ")); } return true; } if (!currentChain.includes(importer)) { const result = isNodeWithinCircularImports(importer, nodeChain, currentChain.concat(importer), traversedModules); if (result) return result; } } return false; } function handlePrunedModules(mods, { hot }) { const t$1 = monotonicDateNow(); mods.forEach((mod) => { mod.lastHMRTimestamp = t$1; mod.lastHMRInvalidationReceived = false; debugHmr?.(`[dispose] ${import_picocolors$9.default.dim(mod.file)}`); }); hot.send({ type: "prune", paths: [...mods].map((m$2) => m$2.url) }); } var LexerState = /* @__PURE__ */ function(LexerState$1) { LexerState$1[LexerState$1["inCall"] = 0] = "inCall"; LexerState$1[LexerState$1["inSingleQuoteString"] = 1] = "inSingleQuoteString"; LexerState$1[LexerState$1["inDoubleQuoteString"] = 2] = "inDoubleQuoteString"; LexerState$1[LexerState$1["inTemplateString"] = 3] = "inTemplateString"; LexerState$1[LexerState$1["inArray"] = 4] = "inArray"; return LexerState$1; }(LexerState || {}); /** * Lex import.meta.hot.accept() for accepted deps. * Since hot.accept() can only accept string literals or array of string * literals, we don't really need a heavy @babel/parse call on the entire source. * * @returns selfAccepts */ function lexAcceptedHmrDeps(code, start, urls) { let state = LexerState.inCall; let prevState = LexerState.inCall; let currentDep = ""; function addDep(index) { urls.add({ url: currentDep, start: index - currentDep.length - 1, end: index + 1 }); currentDep = ""; } for (let i$1 = start; i$1 < code.length; i$1++) { const char = code.charAt(i$1); switch (state) { case LexerState.inCall: case LexerState.inArray: if (char === `'`) { prevState = state; state = LexerState.inSingleQuoteString; } else if (char === `"`) { prevState = state; state = LexerState.inDoubleQuoteString; } else if (char === "`") { prevState = state; state = LexerState.inTemplateString; } else if (whitespaceRE.test(char)) continue; else if (state === LexerState.inCall) if (char === `[`) state = LexerState.inArray; else return true; else if (char === `]`) return false; else if (char === ",") continue; else error(i$1); break; case LexerState.inSingleQuoteString: if (char === `'`) { addDep(i$1); if (prevState === LexerState.inCall) return false; else state = prevState; } else currentDep += char; break; case LexerState.inDoubleQuoteString: if (char === `"`) { addDep(i$1); if (prevState === LexerState.inCall) return false; else state = prevState; } else currentDep += char; break; case LexerState.inTemplateString: if (char === "`") { addDep(i$1); if (prevState === LexerState.inCall) return false; else state = prevState; } else if (char === "$" && code.charAt(i$1 + 1) === "{") error(i$1); else currentDep += char; break; default: throw new Error("unknown import.meta.hot lexer state"); } } return false; } function lexAcceptedHmrExports(code, start, exportNames) { const urls = /* @__PURE__ */ new Set(); lexAcceptedHmrDeps(code, start, urls); for (const { url: url$6 } of urls) exportNames.add(url$6); return urls.size > 0; } function normalizeHmrUrl(url$6) { if (url$6[0] !== "." && url$6[0] !== "/") url$6 = wrapId(url$6); return url$6; } function error(pos) { const err$2 = /* @__PURE__ */ new Error("import.meta.hot.accept() can only accept string literals or an Array of string literals."); err$2.pos = pos; throw err$2; } async function readModifiedFile(file) { const content = await fsp.readFile(file, "utf-8"); if (!content) { const mtime = (await fsp.stat(file)).mtimeMs; for (let n$2 = 0; n$2 < 10; n$2++) { await new Promise((r$2) => setTimeout(r$2, 10)); const newMtime = (await fsp.stat(file)).mtimeMs; if (newMtime !== mtime) break; } return await fsp.readFile(file, "utf-8"); } else return content; } function createServerHotChannel() { const innerEmitter = new EventEmitter(); const outsideEmitter = new EventEmitter(); return { send(payload) { outsideEmitter.emit("send", payload); }, off(event, listener$1) { innerEmitter.off(event, listener$1); }, on: (event, listener$1) => { innerEmitter.on(event, listener$1); }, close() { innerEmitter.removeAllListeners(); outsideEmitter.removeAllListeners(); }, listen() { innerEmitter.emit("connection"); }, api: { innerEmitter, outsideEmitter } }; } //#endregion //#region src/node/plugins/define.ts const nonJsRe = /\.json(?:$|\?)/; const isNonJsRequest = (request) => nonJsRe.test(request); const importMetaEnvMarker = "__vite_import_meta_env__"; const importMetaEnvKeyReCache = /* @__PURE__ */ new Map(); function definePlugin(config$2) { const isBuild = config$2.command === "build"; const isBuildLib = isBuild && config$2.build.lib; const processEnv = {}; if (!isBuildLib) { const nodeEnv = process.env.NODE_ENV || config$2.mode; Object.assign(processEnv, { "process.env": `{}`, "global.process.env": `{}`, "globalThis.process.env": `{}`, "process.env.NODE_ENV": JSON.stringify(nodeEnv), "global.process.env.NODE_ENV": JSON.stringify(nodeEnv), "globalThis.process.env.NODE_ENV": JSON.stringify(nodeEnv) }); } const importMetaKeys = {}; const importMetaEnvKeys = {}; const importMetaFallbackKeys = {}; if (isBuild) { importMetaKeys["import.meta.hot"] = `undefined`; for (const key in config$2.env) { const val = JSON.stringify(config$2.env[key]); importMetaKeys[`import.meta.env.${key}`] = val; importMetaEnvKeys[key] = val; } importMetaKeys["import.meta.env.SSR"] = `undefined`; importMetaFallbackKeys["import.meta.env"] = `undefined`; } function generatePattern(environment) { const keepProcessEnv = environment.config.keepProcessEnv; const userDefine = {}; const userDefineEnv = {}; for (const key in environment.config.define) { userDefine[key] = handleDefineValue(environment.config.define[key]); if (isBuild && key.startsWith("import.meta.env.")) userDefineEnv[key.slice(16)] = environment.config.define[key]; } const define$1 = { ...keepProcessEnv ? {} : processEnv, ...importMetaKeys, ...userDefine, ...importMetaFallbackKeys }; const ssr = environment.config.consumer === "server"; if ("import.meta.env.SSR" in define$1) define$1["import.meta.env.SSR"] = ssr + ""; if ("import.meta.env" in define$1) define$1["import.meta.env"] = importMetaEnvMarker; const importMetaEnvVal = serializeDefine({ ...importMetaEnvKeys, SSR: ssr + "", ...userDefineEnv }); const patternKeys = Object.keys(userDefine); if (!keepProcessEnv && Object.keys(processEnv).length) patternKeys.push("process.env"); if (Object.keys(importMetaKeys).length) patternKeys.push("import.meta.env", "import.meta.hot"); const pattern = patternKeys.length ? new RegExp(patternKeys.map(escapeRegex).join("|")) : null; return [ define$1, pattern, importMetaEnvVal ]; } const patternsCache = /* @__PURE__ */ new WeakMap(); function getPattern(environment) { let pattern = patternsCache.get(environment); if (!pattern) { pattern = generatePattern(environment); patternsCache.set(environment, pattern); } return pattern; } return { name: "vite:define", transform: { async handler(code, id) { if (this.environment.config.consumer === "client" && !isBuild) return; if (isHTMLRequest(id) || isCSSRequest(id) || isNonJsRequest(id) || config$2.assetsInclude(id)) return; let [define$1, pattern, importMetaEnvVal] = getPattern(this.environment); if (!pattern) return; pattern.lastIndex = 0; if (!pattern.test(code)) return; const hasDefineImportMetaEnv = "import.meta.env" in define$1; let marker = importMetaEnvMarker; if (hasDefineImportMetaEnv && code.includes(marker)) { let i$1 = 1; do marker = importMetaEnvMarker + i$1++; while (code.includes(marker)); if (marker !== importMetaEnvMarker) define$1 = { ...define$1, "import.meta.env": marker }; } const result = await replaceDefine(this.environment, code, id, define$1); if (hasDefineImportMetaEnv) { result.code = result.code.replaceAll(getImportMetaEnvKeyRe(marker), (m$2) => "undefined".padEnd(m$2.length)); if (result.code.includes(marker)) { result.code = `const ${marker} = ${importMetaEnvVal};\n` + result.code; if (result.map) { const map$1 = JSON.parse(result.map); map$1.mappings = ";" + map$1.mappings; result.map = map$1; } } } return result; } } }; } async function replaceDefine(environment, code, id, define$1) { const esbuildOptions = environment.config.esbuild || {}; const result = await transform(code, { loader: "js", charset: esbuildOptions.charset ?? "utf8", platform: "neutral", define: define$1, sourcefile: id, sourcemap: environment.config.command === "build" ? !!environment.config.build.sourcemap : true }); if (result.map.includes("= 2) { const sourceIndex = originalMap.sources.indexOf(id); const decoded = decodedMap(originalMap); decoded.sources = [id]; decoded.mappings = decoded.mappings.map((segments) => segments.filter((segment) => { const index = segment[1]; segment[1] = 0; return index === sourceIndex; })); result.map = JSON.stringify(encodedMap(new TraceMap(decoded))); } } return { code: result.code, map: result.map || null }; } /** * Like `JSON.stringify` but keeps raw string values as a literal * in the generated code. For example: `"window"` would refer to * the global `window` object directly. */ function serializeDefine(define$1) { let res = `{`; const keys = Object.keys(define$1).sort(); for (let i$1 = 0; i$1 < keys.length; i$1++) { const key = keys[i$1]; const val = define$1[key]; res += `${JSON.stringify(key)}: ${handleDefineValue(val)}`; if (i$1 !== keys.length - 1) res += `, `; } return res + `}`; } function handleDefineValue(value$1) { if (typeof value$1 === "undefined") return "undefined"; if (typeof value$1 === "string") return value$1; return JSON.stringify(value$1); } function getImportMetaEnvKeyRe(marker) { let re = importMetaEnvKeyReCache.get(marker); if (!re) { re = new RegExp(`${marker}\\..+?\\b`, "g"); importMetaEnvKeyReCache.set(marker, re); } return re; } //#endregion //#region src/node/plugins/worker.ts var import_picocolors$8 = __toESM(require_picocolors(), 1); const workerOrSharedWorkerRE = /(?:\?|&)(worker|sharedworker)(?:&|$)/; const workerFileRE = /(?:\?|&)worker_file&type=(\w+)(?:&|$)/; const inlineRE$1 = /[?&]inline\b/; const WORKER_FILE_ID = "worker_file"; const workerCache = /* @__PURE__ */ new WeakMap(); function saveEmitWorkerAsset(config$2, asset) { const workerMap = workerCache.get(config$2.mainConfig || config$2); const duplicateAsset = workerMap.assets.get(asset.fileName); if (duplicateAsset) { if (!isSameContent(duplicateAsset.source, asset.source)) config$2.logger.warn(`\n` + import_picocolors$8.default.yellow(`The emitted file ${JSON.stringify(asset.fileName)} overwrites a previously emitted file of the same name.`)); } workerMap.assets.set(asset.fileName, asset); } async function bundleWorkerEntry(config$2, id) { const input = cleanUrl(id); const newBundleChain = [...config$2.bundleChain, input]; if (config$2.bundleChain.includes(input)) throw new Error(`Circular worker imports detected. Vite does not support it. Import chain: ${newBundleChain.map((id$1) => prettifyUrl(id$1, config$2.root)).join(" -> ")}`); const { rollup } = await import("rollup"); const { plugins: plugins$1, rollupOptions, format: format$3 } = config$2.worker; const workerConfig = await plugins$1(newBundleChain); const workerEnvironment = new BuildEnvironment("client", workerConfig); await workerEnvironment.init(); const bundle = await rollup({ ...rollupOptions, input, plugins: workerEnvironment.plugins.map((p$1) => injectEnvironmentToHooks(workerEnvironment, p$1)), onLog(level, log$2) { onRollupLog(level, log$2, workerEnvironment); }, preserveEntrySignatures: false }); let chunk; try { const workerOutputConfig = config$2.worker.rollupOptions.output; const workerConfig$1 = workerOutputConfig ? Array.isArray(workerOutputConfig) ? workerOutputConfig[0] || {} : workerOutputConfig : {}; const { output: [outputChunk, ...outputChunks] } = await bundle.generate({ entryFileNames: path.posix.join(config$2.build.assetsDir, "[name]-[hash].js"), chunkFileNames: path.posix.join(config$2.build.assetsDir, "[name]-[hash].js"), assetFileNames: path.posix.join(config$2.build.assetsDir, "[name]-[hash].[ext]"), ...workerConfig$1, format: format$3, sourcemap: config$2.build.sourcemap }); chunk = outputChunk; outputChunks.forEach((outputChunk$1) => { if (outputChunk$1.type === "asset") saveEmitWorkerAsset(config$2, outputChunk$1); else if (outputChunk$1.type === "chunk") saveEmitWorkerAsset(config$2, { fileName: outputChunk$1.fileName, originalFileName: null, originalFileNames: [], source: outputChunk$1.code }); }); } catch (e$1) { if (e$1 instanceof Error && e$1.name === "RollupError" && e$1.code === "INVALID_OPTION" && e$1.message.includes("\"output.format\"")) e$1.message = e$1.message.replace("output.format", "worker.format"); throw e$1; } finally { await bundle.close(); } return emitSourcemapForWorkerEntry(config$2, chunk); } function emitSourcemapForWorkerEntry(config$2, chunk) { const { map: sourcemap } = chunk; if (sourcemap) { if (config$2.build.sourcemap === "hidden" || config$2.build.sourcemap === true) { const data = sourcemap.toString(); const mapFileName = chunk.fileName + ".map"; saveEmitWorkerAsset(config$2, { fileName: mapFileName, originalFileName: null, originalFileNames: [], source: data }); } } return chunk; } const workerAssetUrlRE = /__VITE_WORKER_ASSET__([a-z\d]{8})__/g; function encodeWorkerAssetFileName(fileName, workerCache$1) { const { fileNameHash } = workerCache$1; const hash$1 = getHash(fileName); if (!fileNameHash.get(hash$1)) fileNameHash.set(hash$1, fileName); return `__VITE_WORKER_ASSET__${hash$1}__`; } async function workerFileToUrl(config$2, id) { const workerMap = workerCache.get(config$2.mainConfig || config$2); let fileName = workerMap.bundle.get(id); if (!fileName) { const outputChunk = await bundleWorkerEntry(config$2, id); fileName = outputChunk.fileName; saveEmitWorkerAsset(config$2, { fileName, originalFileName: null, originalFileNames: [], source: outputChunk.code }); workerMap.bundle.set(id, fileName); } return encodeWorkerAssetFileName(fileName, workerMap); } function webWorkerPostPlugin() { return { name: "vite:worker-post", resolveImportMeta(property, { format: format$3 }) { if (format$3 === "iife") { if (!property) return `{ url: self.location.href }`; if (property === "url") return "self.location.href"; } return null; } }; } function webWorkerPlugin(config$2) { const isBuild = config$2.command === "build"; const isWorker = config$2.isWorker; return { name: "vite:worker", buildStart() { if (isWorker) return; workerCache.set(config$2, { assets: /* @__PURE__ */ new Map(), bundle: /* @__PURE__ */ new Map(), fileNameHash: /* @__PURE__ */ new Map() }); }, load: { async handler(id) { const workerMatch = workerOrSharedWorkerRE.exec(id); if (!workerMatch) return; const { format: format$3 } = config$2.worker; const workerConstructor = workerMatch[1] === "sharedworker" ? "SharedWorker" : "Worker"; const workerType = isBuild ? format$3 === "es" ? "module" : "classic" : "module"; const workerTypeOption = `{ ${workerType === "module" ? `type: "module",` : ""} name: options?.name }`; let urlCode; if (isBuild) if (isWorker && config$2.bundleChain.at(-1) === cleanUrl(id)) urlCode = "self.location.href"; else if (inlineRE$1.test(id)) { const chunk = await bundleWorkerEntry(config$2, id); const jsContent = `const jsContent = ${JSON.stringify(chunk.code)};`; const code = workerConstructor === "Worker" ? `${jsContent} const blob = typeof self !== "undefined" && self.Blob && new Blob([${workerType === "classic" ? "" : `'URL.revokeObjectURL(import.meta.url);',`}jsContent], { type: "text/javascript;charset=utf-8" }); export default function WorkerWrapper(options) { let objURL; try { objURL = blob && (self.URL || self.webkitURL).createObjectURL(blob); if (!objURL) throw '' const worker = new ${workerConstructor}(objURL, ${workerTypeOption}); worker.addEventListener("error", () => { (self.URL || self.webkitURL).revokeObjectURL(objURL); }); return worker; } catch(e) { return new ${workerConstructor}( 'data:text/javascript;charset=utf-8,' + encodeURIComponent(jsContent), ${workerTypeOption} ); }${workerType === "classic" ? ` finally { objURL && (self.URL || self.webkitURL).revokeObjectURL(objURL); }` : ""} }` : `${jsContent} export default function WorkerWrapper(options) { return new ${workerConstructor}( 'data:text/javascript;charset=utf-8,' + encodeURIComponent(jsContent), ${workerTypeOption} ); } `; return { code, map: { mappings: "" } }; } else urlCode = JSON.stringify(await workerFileToUrl(config$2, id)); else { let url$6 = await fileToUrl$1(this, cleanUrl(id)); url$6 = injectQuery(url$6, `${WORKER_FILE_ID}&type=${workerType}`); urlCode = JSON.stringify(url$6); } if (urlRE.test(id)) return { code: `export default ${urlCode}`, map: { mappings: "" } }; return { code: `export default function WorkerWrapper(options) { return new ${workerConstructor}( ${urlCode}, ${workerTypeOption} ); }`, map: { mappings: "" } }; } }, shouldTransformCachedModule({ id }) { if (isBuild && config$2.build.watch && workerOrSharedWorkerRE.test(id)) return true; }, transform: { async handler(raw, id) { const workerFileMatch = workerFileRE.exec(id); if (workerFileMatch) { const workerType = workerFileMatch[1]; let injectEnv = ""; const scriptPath = JSON.stringify(path.posix.join(config$2.base, ENV_PUBLIC_PATH)); if (workerType === "classic") injectEnv = `importScripts(${scriptPath})\n`; else if (workerType === "module") injectEnv = `import ${scriptPath}\n`; else if (workerType === "ignore") if (isBuild) injectEnv = ""; else { const environment = this.environment; const moduleGraph = environment.mode === "dev" ? environment.moduleGraph : void 0; const module$1 = moduleGraph?.getModuleById(ENV_ENTRY); injectEnv = module$1?.transformResult?.code || ""; } if (injectEnv) { const s$2 = new MagicString(raw); s$2.prepend(injectEnv + ";\n"); return { code: s$2.toString(), map: s$2.generateMap({ hires: "boundary" }) }; } } } }, renderChunk(code, chunk, outputOptions) { let s$2; const result = () => { return s$2 && { code: s$2.toString(), map: this.environment.config.build.sourcemap ? s$2.generateMap({ hires: "boundary" }) : null }; }; workerAssetUrlRE.lastIndex = 0; if (workerAssetUrlRE.test(code)) { const toRelativeRuntime = createToImportMetaURLBasedRelativeRuntime(outputOptions.format, this.environment.config.isWorker); let match; s$2 = new MagicString(code); workerAssetUrlRE.lastIndex = 0; const workerMap = workerCache.get(config$2.mainConfig || config$2); const { fileNameHash } = workerMap; while (match = workerAssetUrlRE.exec(code)) { const [full, hash$1] = match; const filename = fileNameHash.get(hash$1); const replacement = toOutputFilePathInJS(this.environment, filename, "asset", chunk.fileName, "js", toRelativeRuntime); const replacementString = typeof replacement === "string" ? JSON.stringify(encodeURIPath(replacement)).slice(1, -1) : `"+${replacement.runtime}+"`; s$2.update(match.index, match.index + full.length, replacementString); } } return result(); }, generateBundle(opts, bundle) { if (opts.__vite_skip_asset_emit__ || isWorker) return; const workerMap = workerCache.get(config$2); workerMap.assets.forEach((asset) => { const duplicateAsset = bundle[asset.fileName]; if (duplicateAsset) { const content = duplicateAsset.type === "asset" ? duplicateAsset.source : duplicateAsset.code; if (isSameContent(content, asset.source)) return; } this.emitFile({ type: "asset", fileName: asset.fileName, source: asset.source }); }); workerMap.assets.clear(); } }; } function isSameContent(a, b) { if (typeof a === "string") { if (typeof b === "string") return a === b; return Buffer.from(a).equals(b); } return Buffer.from(b).equals(a); } //#endregion //#region src/node/plugins/preAlias.ts /** * A plugin to avoid an aliased AND optimized dep from being aliased in src */ function preAliasPlugin(config$2) { const findPatterns = getAliasPatterns(config$2.resolve.alias); return { name: "vite:pre-alias", applyToEnvironment(environment) { return !isDepOptimizationDisabled(environment.config.optimizeDeps); }, async resolveId(id, importer, options$1) { const environment = this.environment; const ssr = environment.config.consumer === "server"; const depsOptimizer = environment.depsOptimizer; if (importer && depsOptimizer && bareImportRE.test(id) && !options$1.scan && id !== "@vite/client" && id !== "@vite/env") { if (findPatterns.find((pattern) => matches(pattern, id))) { const optimizedId = await tryOptimizedResolve(depsOptimizer, id, importer, config$2.resolve.preserveSymlinks, config$2.packageCache); if (optimizedId) return optimizedId; if (depsOptimizer.options.noDiscovery) return; const resolved = await this.resolve(id, importer, options$1); if (resolved && !depsOptimizer.isOptimizedDepFile(resolved.id)) { const optimizeDeps$1 = depsOptimizer.options; const resolvedId = cleanUrl(resolved.id); const isVirtual = resolvedId === id || resolvedId.includes("\0"); if (!isVirtual && fs.existsSync(resolvedId) && !moduleListContains(optimizeDeps$1.exclude, id) && path.isAbsolute(resolvedId) && (isInNodeModules(resolvedId) || optimizeDeps$1.include?.includes(id)) && isOptimizable(resolvedId, optimizeDeps$1) && (!ssr || optimizeAliasReplacementForSSR(resolvedId, optimizeDeps$1))) { const optimizedInfo = depsOptimizer.registerMissingImport(id, resolvedId); return { id: depsOptimizer.getOptimizedDepId(optimizedInfo) }; } } return resolved; } } } }; } function optimizeAliasReplacementForSSR(id, optimizeDeps$1) { if (optimizeDeps$1.include?.includes(id)) return true; return false; } function matches(pattern, importee) { if (pattern instanceof RegExp) return pattern.test(importee); if (importee.length < pattern.length) return false; if (importee === pattern) return true; return importee.startsWith(withTrailingSlash(pattern)); } function getAliasPatterns(entries) { if (Array.isArray(entries)) return entries.map((entry) => entry.find); return Object.entries(entries).map(([find$1]) => find$1); } function getAliasPatternMatcher(entries) { const patterns = getAliasPatterns(entries); return (importee) => patterns.some((pattern) => matches(pattern, importee)); } //#endregion //#region src/node/plugins/importAnalysis.ts var import_picocolors$7 = __toESM(require_picocolors(), 1); const debug$2 = createDebugger("vite:import-analysis"); const clientDir = normalizePath(CLIENT_DIR); const skipRE = /\.(?:map|json)(?:$|\?)/; const canSkipImportAnalysis = (id) => skipRE.test(id) || isDirectCSSRequest(id); const optimizedDepChunkRE = /\/chunk-[A-Z\d]{8}\.js/; const optimizedDepDynamicRE = /-[A-Z\d]{8}\.js/; const hasViteIgnoreRE = /\/\*\s*@vite-ignore\s*\*\//; const urlIsStringRE = /^(?:'.*'|".*"|`.*`)$/; const templateLiteralRE = /^\s*`(.*)`\s*$/; function isExplicitImportRequired(url$6) { return !isJSRequest(url$6) && !isCSSRequest(url$6); } function normalizeResolvedIdToUrl(environment, url$6, resolved) { const root = environment.config.root; const depsOptimizer = environment.depsOptimizer; if (resolved.id.startsWith(withTrailingSlash(root))) url$6 = resolved.id.slice(root.length); else if (depsOptimizer?.isOptimizedDepFile(resolved.id) || resolved.id !== "/@react-refresh" && path.isAbsolute(resolved.id) && fs.existsSync(cleanUrl(resolved.id))) url$6 = path.posix.join(FS_PREFIX, resolved.id); else url$6 = resolved.id; if (url$6[0] !== "." && url$6[0] !== "/") url$6 = wrapId(resolved.id); return url$6; } function extractImportedBindings(id, source, importSpec, importedBindings) { let bindings = importedBindings.get(id); if (!bindings) { bindings = /* @__PURE__ */ new Set(); importedBindings.set(id, bindings); } const isDynamic = importSpec.d > -1; const isMeta = importSpec.d === -2; if (isDynamic || isMeta) { bindings.add("*"); return; } const exp = source.slice(importSpec.ss, importSpec.se); ESM_STATIC_IMPORT_RE.lastIndex = 0; const match = ESM_STATIC_IMPORT_RE.exec(exp); if (!match) return; const staticImport = { type: "static", code: match[0], start: match.index, end: match.index + match[0].length, imports: match.groups.imports, specifier: match.groups.specifier }; const parsed = parseStaticImport(staticImport); if (parsed.namespacedImport) bindings.add("*"); if (parsed.defaultImport) bindings.add("default"); if (parsed.namedImports) for (const name of Object.keys(parsed.namedImports)) bindings.add(name); } /** * Dev-only plugin that lexes, resolves, rewrites and analyzes url imports. * * - Imports are resolved to ensure they exist on disk * * - Lexes HMR accept calls and updates import relationships in the module graph * * - Bare module imports are resolved (by @rollup-plugin/node-resolve) to * absolute file paths, e.g. * * ```js * import 'foo' * ``` * is rewritten to * ```js * import '/@fs//project/node_modules/foo/dist/foo.js' * ``` * * - CSS imports are appended with `.js` since both the js module and the actual * css (referenced via ``) may go through the transform pipeline: * * ```js * import './style.css' * ``` * is rewritten to * ```js * import './style.css.js' * ``` */ function importAnalysisPlugin(config$2) { const { root, base } = config$2; const clientPublicPath = path.posix.join(base, CLIENT_PUBLIC_PATH); const enablePartialAccept = config$2.experimental.hmrPartialAccept; const matchAlias = getAliasPatternMatcher(config$2.resolve.alias); let _env; let _ssrEnv; function getEnv(ssr) { if (!_ssrEnv || !_env) { const importMetaEnvKeys = {}; const userDefineEnv = {}; for (const key in config$2.env) importMetaEnvKeys[key] = JSON.stringify(config$2.env[key]); for (const key in config$2.define) if (key.startsWith("import.meta.env.")) userDefineEnv[key.slice(16)] = config$2.define[key]; const env$2 = `import.meta.env = ${serializeDefine({ ...importMetaEnvKeys, SSR: "__vite_ssr__", ...userDefineEnv })};`; _ssrEnv = env$2.replace("__vite_ssr__", "true"); _env = env$2.replace("__vite_ssr__", "false"); } return ssr ? _ssrEnv : _env; } return { name: "vite:import-analysis", async transform(source, importer) { const environment = this.environment; const ssr = environment.config.consumer === "server"; const moduleGraph = environment.moduleGraph; if (canSkipImportAnalysis(importer)) { debug$2?.(import_picocolors$7.default.dim(`[skipped] ${prettifyUrl(importer, root)}`)); return null; } const msAtStart = debug$2 ? performance$1.now() : 0; await init; let imports; let exports$1; source = stripBomTag(source); try { [imports, exports$1] = parse(source); } catch (_e) { const e$1 = _e; const { message, showCodeFrame } = createParseErrorInfo(importer, source); this.error(message, showCodeFrame ? e$1.idx : void 0); } const depsOptimizer = environment.depsOptimizer; const importerModule = moduleGraph.getModuleById(importer); if (!importerModule) throwOutdatedRequest(importer); if (!imports.length && !this._addedImports) { importerModule.isSelfAccepting = false; debug$2?.(`${timeFrom(msAtStart)} ${import_picocolors$7.default.dim(`[no imports] ${prettifyUrl(importer, root)}`)}`); return source; } let hasHMR = false; let isSelfAccepting = false; let hasEnv = false; let needQueryInjectHelper = false; let s$2; const str = () => s$2 || (s$2 = new MagicString(source)); let isPartiallySelfAccepting = false; const importedBindings = enablePartialAccept ? /* @__PURE__ */ new Map() : null; const toAbsoluteUrl = (url$6) => path.posix.resolve(path.posix.dirname(importerModule.url), url$6); const normalizeUrl = async (url$6, pos, forceSkipImportAnalysis = false) => { url$6 = stripBase(url$6, base); let importerFile = importer; if (depsOptimizer && moduleListContains(depsOptimizer.options.exclude, url$6)) { await depsOptimizer.scanProcessing; for (const optimizedModule of depsOptimizer.metadata.depInfoList) { if (!optimizedModule.src) continue; if (optimizedModule.file === importerModule.file) importerFile = optimizedModule.src; } } const resolved = await this.resolve(url$6, importerFile).catch((e$1) => { if (e$1 instanceof Error) e$1.pos ??= pos; throw e$1; }); if (!resolved || resolved.meta?.["vite:alias"]?.noResolved) { if (ssr) return [url$6, null]; importerModule.isSelfAccepting = false; moduleGraph._hasResolveFailedErrorModules.add(importerModule); return this.error(`Failed to resolve import "${url$6}" from "${normalizePath(path.relative(process.cwd(), importerFile))}". Does the file exist?`, pos); } if (isExternalUrl(resolved.id)) return [resolved.id, resolved.id]; const isRelative$1 = url$6[0] === "."; const isSelfImport = !isRelative$1 && cleanUrl(url$6) === cleanUrl(importer); url$6 = normalizeResolvedIdToUrl(environment, url$6, resolved); if (environment.config.consumer === "client") { if (isExplicitImportRequired(url$6)) url$6 = injectQuery(url$6, "import"); else if ((isRelative$1 || isSelfImport) && !DEP_VERSION_RE.test(url$6)) { const versionMatch = DEP_VERSION_RE.exec(importer); if (versionMatch) url$6 = injectQuery(url$6, versionMatch[1]); } } try { const depModule = await moduleGraph._ensureEntryFromUrl(unwrapId(url$6), canSkipImportAnalysis(url$6) || forceSkipImportAnalysis, resolved); if (environment.config.consumer === "client" && depModule.lastHMRTimestamp > 0) url$6 = injectQuery(url$6, `t=${depModule.lastHMRTimestamp}`); } catch (e$1) { e$1.pos = pos; throw e$1; } if (!ssr) url$6 = joinUrlSegments(base, url$6); return [url$6, resolved.id]; }; const orderedImportedUrls = new Array(imports.length); const orderedAcceptedUrls = new Array(imports.length); const orderedAcceptedExports = new Array(imports.length); await Promise.all(imports.map(async (importSpecifier, index) => { const { s: start, e: end, ss: expStart, se: expEnd, d: dynamicIndex, a: attributeIndex } = importSpecifier; let specifier = importSpecifier.n; const rawUrl = source.slice(start, end); if (rawUrl === "import.meta") { const prop = source.slice(end, end + 4); if (prop === ".hot") { hasHMR = true; const endHot = end + 4 + (source[end + 4] === "?" ? 1 : 0); if (source.slice(endHot, endHot + 7) === ".accept") if (source.slice(endHot, endHot + 14) === ".acceptExports") { const importAcceptedExports = orderedAcceptedExports[index] = /* @__PURE__ */ new Set(); lexAcceptedHmrExports(source, source.indexOf("(", endHot + 14) + 1, importAcceptedExports); isPartiallySelfAccepting = true; } else { const importAcceptedUrls = orderedAcceptedUrls[index] = /* @__PURE__ */ new Set(); if (lexAcceptedHmrDeps(source, source.indexOf("(", endHot + 7) + 1, importAcceptedUrls)) isSelfAccepting = true; } } else if (prop === ".env") hasEnv = true; return; } else if (templateLiteralRE.test(rawUrl)) { if (!(rawUrl.includes("${") && rawUrl.includes("}"))) specifier = rawUrl.replace(templateLiteralRE, "$1"); } const isDynamicImport = dynamicIndex > -1; if (!isDynamicImport && attributeIndex > -1) str().remove(end + 1, expEnd); if (specifier !== void 0) { if (isExternalUrl(specifier) && !specifier.startsWith("file://") || isDataUrl(specifier)) return; if (ssr && !matchAlias(specifier)) { if (shouldExternalize(environment, specifier, importer)) return; if (isBuiltin(environment.config.resolve.builtins, specifier)) return; } if (specifier === clientPublicPath) return; if (specifier[0] === "/" && !(config$2.assetsInclude(cleanUrl(specifier)) || urlRE.test(specifier)) && checkPublicFile(specifier, config$2)) throw new Error(`Cannot import non-asset file ${specifier} which is inside /public. JS/CSS files inside /public are copied as-is on build and can only be referenced via