Ignore:
Timestamp:
12/12/24 17:06:06 (5 weeks ago)
Author:
stefan toskovski <stefantoska84@…>
Branches:
main
Parents:
d565449
Message:

Pred finalna verzija

File:
1 moved

Legend:

Unmodified
Added
Removed
  • imaps-frontend/node_modules/vite/dist/node/chunks/dep-CB_7IfJ-.js

    rd565449 r0c6b92a  
    1079210792    charToInt[c] = i;
    1079310793}
     10794function decodeInteger(reader, relative) {
     10795    let value = 0;
     10796    let shift = 0;
     10797    let integer = 0;
     10798    do {
     10799        const c = reader.next();
     10800        integer = charToInt[c];
     10801        value |= (integer & 31) << shift;
     10802        shift += 5;
     10803    } while (integer & 32);
     10804    const shouldNegate = value & 1;
     10805    value >>>= 1;
     10806    if (shouldNegate) {
     10807        value = -0x80000000 | -value;
     10808    }
     10809    return relative + value;
     10810}
     10811function encodeInteger(builder, num, relative) {
     10812    let delta = num - relative;
     10813    delta = delta < 0 ? (-delta << 1) | 1 : delta << 1;
     10814    do {
     10815        let clamped = delta & 0b011111;
     10816        delta >>>= 5;
     10817        if (delta > 0)
     10818            clamped |= 0b100000;
     10819        builder.write(intToChar[clamped]);
     10820    } while (delta > 0);
     10821    return num;
     10822}
     10823function hasMoreVlq(reader, max) {
     10824    if (reader.pos >= max)
     10825        return false;
     10826    return reader.peek() !== comma;
     10827}
     10828
     10829const bufLength = 1024 * 16;
    1079410830// Provide a fallback for older environments.
    1079510831const td = typeof TextDecoder !== 'undefined'
     
    1081110847            },
    1081210848        };
     10849class StringWriter {
     10850    constructor() {
     10851        this.pos = 0;
     10852        this.out = '';
     10853        this.buffer = new Uint8Array(bufLength);
     10854    }
     10855    write(v) {
     10856        const { buffer } = this;
     10857        buffer[this.pos++] = v;
     10858        if (this.pos === bufLength) {
     10859            this.out += td.decode(buffer);
     10860            this.pos = 0;
     10861        }
     10862    }
     10863    flush() {
     10864        const { buffer, out, pos } = this;
     10865        return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out;
     10866    }
     10867}
     10868class StringReader {
     10869    constructor(buffer) {
     10870        this.pos = 0;
     10871        this.buffer = buffer;
     10872    }
     10873    next() {
     10874        return this.buffer.charCodeAt(this.pos++);
     10875    }
     10876    peek() {
     10877        return this.buffer.charCodeAt(this.pos);
     10878    }
     10879    indexOf(char) {
     10880        const { buffer, pos } = this;
     10881        const idx = buffer.indexOf(char, pos);
     10882        return idx === -1 ? buffer.length : idx;
     10883    }
     10884}
     10885
    1081310886function decode(mappings) {
    10814     const state = new Int32Array(5);
     10887    const { length } = mappings;
     10888    const reader = new StringReader(mappings);
    1081510889    const decoded = [];
    10816     let index = 0;
     10890    let genColumn = 0;
     10891    let sourcesIndex = 0;
     10892    let sourceLine = 0;
     10893    let sourceColumn = 0;
     10894    let namesIndex = 0;
    1081710895    do {
    10818         const semi = indexOf(mappings, index);
     10896        const semi = reader.indexOf(';');
    1081910897        const line = [];
    1082010898        let sorted = true;
    1082110899        let lastCol = 0;
    10822         state[0] = 0;
    10823         for (let i = index; i < semi; i++) {
     10900        genColumn = 0;
     10901        while (reader.pos < semi) {
    1082410902            let seg;
    10825             i = decodeInteger(mappings, i, state, 0); // genColumn
    10826             const col = state[0];
    10827             if (col < lastCol)
     10903            genColumn = decodeInteger(reader, genColumn);
     10904            if (genColumn < lastCol)
    1082810905                sorted = false;
    10829             lastCol = col;
    10830             if (hasMoreVlq(mappings, i, semi)) {
    10831                 i = decodeInteger(mappings, i, state, 1); // sourcesIndex
    10832                 i = decodeInteger(mappings, i, state, 2); // sourceLine
    10833                 i = decodeInteger(mappings, i, state, 3); // sourceColumn
    10834                 if (hasMoreVlq(mappings, i, semi)) {
    10835                     i = decodeInteger(mappings, i, state, 4); // namesIndex
    10836                     seg = [col, state[1], state[2], state[3], state[4]];
     10906            lastCol = genColumn;
     10907            if (hasMoreVlq(reader, semi)) {
     10908                sourcesIndex = decodeInteger(reader, sourcesIndex);
     10909                sourceLine = decodeInteger(reader, sourceLine);
     10910                sourceColumn = decodeInteger(reader, sourceColumn);
     10911                if (hasMoreVlq(reader, semi)) {
     10912                    namesIndex = decodeInteger(reader, namesIndex);
     10913                    seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex];
    1083710914                }
    1083810915                else {
    10839                     seg = [col, state[1], state[2], state[3]];
     10916                    seg = [genColumn, sourcesIndex, sourceLine, sourceColumn];
    1084010917                }
    1084110918            }
    1084210919            else {
    10843                 seg = [col];
     10920                seg = [genColumn];
    1084410921            }
    1084510922            line.push(seg);
     10923            reader.pos++;
    1084610924        }
    1084710925        if (!sorted)
    1084810926            sort(line);
    1084910927        decoded.push(line);
    10850         index = semi + 1;
    10851     } while (index <= mappings.length);
     10928        reader.pos = semi + 1;
     10929    } while (reader.pos <= length);
    1085210930    return decoded;
    10853 }
    10854 function indexOf(mappings, index) {
    10855     const idx = mappings.indexOf(';', index);
    10856     return idx === -1 ? mappings.length : idx;
    10857 }
    10858 function decodeInteger(mappings, pos, state, j) {
    10859     let value = 0;
    10860     let shift = 0;
    10861     let integer = 0;
    10862     do {
    10863         const c = mappings.charCodeAt(pos++);
    10864         integer = charToInt[c];
    10865         value |= (integer & 31) << shift;
    10866         shift += 5;
    10867     } while (integer & 32);
    10868     const shouldNegate = value & 1;
    10869     value >>>= 1;
    10870     if (shouldNegate) {
    10871         value = -0x80000000 | -value;
    10872     }
    10873     state[j] += value;
    10874     return pos;
    10875 }
    10876 function hasMoreVlq(mappings, i, length) {
    10877     if (i >= length)
    10878         return false;
    10879     return mappings.charCodeAt(i) !== comma;
    1088010931}
    1088110932function sort(line) {
     
    1088610937}
    1088710938function encode$1(decoded) {
    10888     const state = new Int32Array(5);
    10889     const bufLength = 1024 * 16;
    10890     const subLength = bufLength - 36;
    10891     const buf = new Uint8Array(bufLength);
    10892     const sub = buf.subarray(0, subLength);
    10893     let pos = 0;
    10894     let out = '';
     10939    const writer = new StringWriter();
     10940    let sourcesIndex = 0;
     10941    let sourceLine = 0;
     10942    let sourceColumn = 0;
     10943    let namesIndex = 0;
    1089510944    for (let i = 0; i < decoded.length; i++) {
    1089610945        const line = decoded[i];
    10897         if (i > 0) {
    10898             if (pos === bufLength) {
    10899                 out += td.decode(buf);
    10900                 pos = 0;
    10901             }
    10902             buf[pos++] = semicolon;
    10903         }
     10946        if (i > 0)
     10947            writer.write(semicolon);
    1090410948        if (line.length === 0)
    1090510949            continue;
    10906         state[0] = 0;
     10950        let genColumn = 0;
    1090710951        for (let j = 0; j < line.length; j++) {
    1090810952            const segment = line[j];
    10909             // We can push up to 5 ints, each int can take at most 7 chars, and we
    10910             // may push a comma.
    10911             if (pos > subLength) {
    10912                 out += td.decode(sub);
    10913                 buf.copyWithin(0, subLength, pos);
    10914                 pos -= subLength;
    10915             }
    1091610953            if (j > 0)
    10917                 buf[pos++] = comma;
    10918             pos = encodeInteger(buf, pos, state, segment, 0); // genColumn
     10954                writer.write(comma);
     10955            genColumn = encodeInteger(writer, segment[0], genColumn);
    1091910956            if (segment.length === 1)
    1092010957                continue;
    10921             pos = encodeInteger(buf, pos, state, segment, 1); // sourcesIndex
    10922             pos = encodeInteger(buf, pos, state, segment, 2); // sourceLine
    10923             pos = encodeInteger(buf, pos, state, segment, 3); // sourceColumn
     10958            sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex);
     10959            sourceLine = encodeInteger(writer, segment[2], sourceLine);
     10960            sourceColumn = encodeInteger(writer, segment[3], sourceColumn);
    1092410961            if (segment.length === 4)
    1092510962                continue;
    10926             pos = encodeInteger(buf, pos, state, segment, 4); // namesIndex
    10927         }
    10928     }
    10929     return out + td.decode(buf.subarray(0, pos));
    10930 }
    10931 function encodeInteger(buf, pos, state, segment, j) {
    10932     const next = segment[j];
    10933     let num = next - state[j];
    10934     state[j] = next;
    10935     num = num < 0 ? (-num << 1) | 1 : num << 1;
    10936     do {
    10937         let clamped = num & 0b011111;
    10938         num >>>= 5;
    10939         if (num > 0)
    10940             clamped |= 0b100000;
    10941         buf[pos++] = intToChar[clamped];
    10942     } while (num > 0);
    10943     return pos;
     10963            namesIndex = encodeInteger(writer, segment[4], namesIndex);
     10964        }
     10965    }
     10966    return writer.flush();
    1094410967}
    1094510968
     
    1169911722                if (typeof content !== 'string') throw new TypeError('replacement content must be a string');
    1170011723
    11701                 while (start < 0) start += this.original.length;
    11702                 while (end < 0) end += this.original.length;
     11724                if (this.original.length !== 0) {
     11725                        while (start < 0) start += this.original.length;
     11726                        while (end < 0) end += this.original.length;
     11727                }
    1170311728
    1170411729                if (end > this.original.length) throw new Error('end is out of bounds');
     
    1179611821
    1179711822        remove(start, end) {
    11798                 while (start < 0) start += this.original.length;
    11799                 while (end < 0) end += this.original.length;
     11823                if (this.original.length !== 0) {
     11824                        while (start < 0) start += this.original.length;
     11825                        while (end < 0) end += this.original.length;
     11826                }
    1180011827
    1180111828                if (start === end) return this;
     
    1182011847
    1182111848        reset(start, end) {
    11822                 while (start < 0) start += this.original.length;
    11823                 while (end < 0) end += this.original.length;
     11849                if (this.original.length !== 0) {
     11850                        while (start < 0) start += this.original.length;
     11851                        while (end < 0) end += this.original.length;
     11852                }
    1182411853
    1182511854                if (start === end) return this;
     
    1188311912
    1188411913        slice(start = 0, end = this.original.length) {
    11885                 while (start < 0) start += this.original.length;
    11886                 while (end < 0) end += this.original.length;
     11914                if (this.original.length !== 0) {
     11915                        while (start < 0) start += this.original.length;
     11916                        while (end < 0) end += this.original.length;
     11917                }
    1188711918
    1188811919                let result = '';
     
    1602016051                        }
    1602116052
     16053                        let m;
     16054
    1602216055                        // Is webkit? http://stackoverflow.com/a/16459606/376773
    1602316056                        // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
     
    1602716060                                // Is firefox >= v31?
    1602816061                                // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
    16029                                 (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
     16062                                (typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31) ||
    1603016063                                // Double check webkit in userAgent just in case we are in a worker
    1603116064                                (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
     
    1663016663        invalidatePackageData(packageCache, path$n.normalize(id));
    1663116664      }
    16632     },
    16633     handleHotUpdate({ file }) {
    16634       if (file.endsWith("/package.json")) {
    16635         invalidatePackageData(packageCache, path$n.normalize(file));
    16636       }
    1663716665    }
    1663816666  };
     
    1668616714const replaceSlashOrColonRE = /[/:]/g;
    1668716715const replaceDotRE = /\./g;
    16688 const replaceNestedIdRE = /(\s*>\s*)/g;
     16716const replaceNestedIdRE = /\s*>\s*/g;
    1668916717const replaceHashRE = /#/g;
    1669016718const flattenId = (id) => {
     
    1702617054    for (const file of skip) {
    1702717055      if (path$n.dirname(file) !== ".") {
    17028         const matched = file.match(splitFirstDirRE);
     17056        const matched = splitFirstDirRE.exec(file);
    1702917057        if (matched) {
    1703017058          nested ??= /* @__PURE__ */ new Map();
     
    1711117139  return realPath;
    1711217140}
    17113 const parseNetUseRE = /^(\w+)? +(\w:) +([^ ]+)\s/;
     17141const parseNetUseRE = /^\w* +(\w:) +([^ ]+)\s/;
    1711417142let firstSafeRealPathSyncRun = false;
    1711517143function windowsSafeRealPathSync(path2) {
     
    1713817166    const lines = stdout.split("\n");
    1713917167    for (const line of lines) {
    17140       const m = line.match(parseNetUseRE);
    17141       if (m) windowsNetworkMap.set(m[3], m[2]);
     17168      const m = parseNetUseRE.exec(line);
     17169      if (m) windowsNetworkMap.set(m[2], m[1]);
    1714217170    }
    1714317171    if (windowsNetworkMap.size === 0) {
     
    1715517183  }
    1715617184}
    17157 const escapedSpaceCharacters = /( |\\t|\\n|\\f|\\r)+/g;
     17185const escapedSpaceCharacters = /(?: |\\t|\\n|\\f|\\r)+/g;
    1715817186const imageSetUrlRE = /^(?:[\w\-]+\(.*?\)|'.*?'|".*?"|\S*)/;
    1715917187function joinSrcset(ret) {
     
    1740217430        ...backwardCompatibleWorkerPlugins(value)
    1740317431      ];
     17432      continue;
     17433    } else if (key === "server" && rootPath === "server.hmr") {
     17434      merged[key] = value;
    1740417435      continue;
    1740517436    }
     
    1819118222                let lastWildcardIndex = pattern.length;
    1819218223                let hasWildcard = false;
     18224                let hasExtension = false;
     18225                let hasSlash = false;
     18226                let lastSlashIndex = -1;
    1819318227                for (let i = pattern.length - 1; i > -1; i--) {
    18194                         if (pattern[i] === '*' || pattern[i] === '?') {
    18195                                 lastWildcardIndex = i;
    18196                                 hasWildcard = true;
     18228                        const c = pattern[i];
     18229                        if (!hasWildcard) {
     18230                                if (c === '*' || c === '?') {
     18231                                        lastWildcardIndex = i;
     18232                                        hasWildcard = true;
     18233                                }
     18234                        }
     18235                        if (!hasSlash) {
     18236                                if (c === '.') {
     18237                                        hasExtension = true;
     18238                                } else if (c === '/') {
     18239                                        lastSlashIndex = i;
     18240                                        hasSlash = true;
     18241                                }
     18242                        }
     18243                        if (hasWildcard && hasSlash) {
    1819718244                                break;
    1819818245                        }
     18246                }
     18247                if (!hasExtension && (!hasWildcard || lastWildcardIndex < lastSlashIndex)) {
     18248                        // add implicit glob
     18249                        pattern += `${pattern.endsWith('/') ? '' : '/'}${GLOB_ALL_PATTERN}`;
     18250                        lastWildcardIndex = pattern.length - 1;
     18251                        hasWildcard = true;
    1819918252                }
    1820018253
     
    1823518288                }
    1823618289
    18237                 // if no wildcard in pattern, filename must be equal to resolved pattern
    1823818290                if (!hasWildcard) {
     18291                        //  no wildcard in pattern, filename must be equal to resolved pattern
    1823918292                        return filename === resolvedPattern;
     18293                } else if (
     18294                        firstWildcardIndex + GLOB_ALL_PATTERN.length ===
     18295                                resolvedPattern.length - (pattern.length - 1 - lastWildcardIndex) &&
     18296                        resolvedPattern.slice(firstWildcardIndex, firstWildcardIndex + GLOB_ALL_PATTERN.length) ===
     18297                                GLOB_ALL_PATTERN
     18298                ) {
     18299                        // singular glob-all pattern and we already validated prefix and suffix matches
     18300                        return true;
    1824018301                }
    18241 
    1824218302                // complex pattern, use regex to check it
    1824318303                if (PATTERN_REGEX_CACHE.has(resolvedPattern)) {
     
    1829618356        return JSON.parse(
    1829718357                JSON.stringify(tsconfig)
    18298                         // replace ${configDir}, accounting for rebaseRelative emitted ../${configDir}
    18299                         .replaceAll(/"(?:\.\.\/)*\${configDir}/g, `"${native2posix(configDir)}`)
     18358                        // replace ${configDir}
     18359                        .replaceAll(/"\${configDir}/g, `"${native2posix(configDir)}`)
    1830018360        );
    1830118361}
     
    1889118951 */
    1889218952function rebasePath(value, prependPath) {
    18893         if (path$n.isAbsolute(value)) {
     18953        if (path$n.isAbsolute(value) || value.startsWith('${configDir}')) {
    1889418954                return value;
    1889518955        } else {
     
    1909419154
    1909519155const debug$h = createDebugger("vite:esbuild");
    19096 const IIFE_BEGIN_RE = /(const|var)\s+\S+\s*=\s*function\([^()]*\)\s*\{\s*"use strict";/;
     19156const IIFE_BEGIN_RE = /(?:const|var)\s+\S+\s*=\s*function\([^()]*\)\s*\{\s*"use strict";/;
    1909719157const validExtensionRE = /\.\w+$/;
    1909819158const jsxExtensionsRE = /\.(?:j|t)sx\b/;
     
    2027620336        // Force rollup to keep this module from being shared between other entry points if it's an entrypoint.
    2027720337        // If the resulting chunk is empty, it will be removed in generateBundle.
    20278         moduleSideEffects: config.command === "build" && this.getModuleInfo(id)?.isEntry ? "no-treeshake" : false
     20338        moduleSideEffects: config.command === "build" && this.getModuleInfo(id)?.isEntry ? "no-treeshake" : false,
     20339        meta: config.command === "build" ? { "vite:asset": true } : void 0
    2027920340      };
    2028020341    },
     
    2029320354      for (const file in bundle) {
    2029420355        const chunk = bundle[file];
    20295         if (chunk.type === "chunk" && chunk.isEntry && chunk.moduleIds.length === 1 && config.assetsInclude(chunk.moduleIds[0])) {
     20356        if (chunk.type === "chunk" && chunk.isEntry && chunk.moduleIds.length === 1 && config.assetsInclude(chunk.moduleIds[0]) && this.getModuleInfo(chunk.moduleIds[0])?.meta["vite:asset"]) {
    2029620357          delete bundle[file];
    2029720358        }
     
    2031420375  }
    2031520376}
    20316 function fileToDevUrl(id, config) {
     20377function fileToDevUrl(id, config, skipBase = false) {
    2031720378  let rtn;
    2031820379  if (checkPublicFile(id, config)) {
     
    2032320384    rtn = path$n.posix.join(FS_PREFIX, id);
    2032420385  }
    20325   const base = joinUrlSegments(config.server?.origin ?? "", config.base);
     20386  if (skipBase) {
     20387    return rtn;
     20388  }
     20389  const base = joinUrlSegments(config.server?.origin ?? "", config.decodedBase);
    2032620390  return joinUrlSegments(base, removeLeadingSlash(rtn));
    2032720391}
     
    2033320397function publicFileToBuiltUrl(url, config) {
    2033420398  if (config.command !== "build") {
    20335     return joinUrlSegments(config.base, url);
     20399    return joinUrlSegments(config.decodedBase, url);
    2033620400  }
    2033720401  const hash = getHash(url);
     
    2037820442    const { search, hash } = parse$h(id);
    2037920443    const postfix = (search || "") + (hash || "");
     20444    const originalFileName = normalizePath$3(path$n.relative(config.root, file));
    2038020445    const referenceId = pluginContext.emitFile({
     20446      type: "asset",
    2038120447      // Ignore directory structure for asset file names
    2038220448      name: path$n.basename(file),
    20383       type: "asset",
     20449      originalFileName,
    2038420450      source: content
    2038520451    });
    20386     const originalName = normalizePath$3(path$n.relative(config.root, file));
    20387     generatedAssets.get(config).set(referenceId, { originalName });
     20452    generatedAssets.get(config).set(referenceId, { originalFileName });
    2038820453    url = `__VITE_ASSET__${referenceId}__${postfix ? `$_${postfix}__` : ``}`;
    2038920454  }
     
    2049620561        return manifestChunk;
    2049720562      }
    20498       const fileNameToAssetMeta = /* @__PURE__ */ new Map();
    2049920563      const assets = generatedAssets.get(config);
    20500       assets.forEach((asset, referenceId) => {
    20501         try {
    20502           const fileName = this.getFileName(referenceId);
    20503           fileNameToAssetMeta.set(fileName, asset);
    20504         } catch (error) {
    20505           assets.delete(referenceId);
    20506         }
    20507       });
     20564      const entryCssAssetFileNames = /* @__PURE__ */ new Set();
     20565      for (const [id, asset] of assets.entries()) {
     20566        if (asset.isEntry) {
     20567          try {
     20568            const fileName = this.getFileName(id);
     20569            entryCssAssetFileNames.add(fileName);
     20570          } catch (error) {
     20571            assets.delete(id);
     20572          }
     20573        }
     20574      }
    2050820575      const fileNameToAsset = /* @__PURE__ */ new Map();
    2050920576      for (const file in bundle) {
     
    2051220579          manifest[getChunkName(chunk)] = createChunk(chunk);
    2051320580        } else if (chunk.type === "asset" && typeof chunk.name === "string") {
    20514           const assetMeta = fileNameToAssetMeta.get(chunk.fileName);
    20515           const src = assetMeta?.originalName ?? chunk.name;
    20516           const asset = createAsset(chunk, src, assetMeta?.isEntry);
     20581          const src = chunk.originalFileName ?? chunk.name;
     20582          const isEntry = entryCssAssetFileNames.has(chunk.fileName);
     20583          const asset = createAsset(chunk, src, isEntry);
    2051720584          const file2 = manifest[src]?.file;
    2051820585          if (file2 && endsWithJSRE.test(file2)) continue;
     
    2052120588        }
    2052220589      }
    20523       assets.forEach(({ originalName }, referenceId) => {
    20524         if (!manifest[originalName]) {
     20590      for (const [referenceId, { originalFileName }] of assets.entries()) {
     20591        if (!manifest[originalFileName]) {
    2052520592          const fileName = this.getFileName(referenceId);
    2052620593          const asset = fileNameToAsset.get(fileName);
    2052720594          if (asset) {
    20528             manifest[originalName] = asset;
     20595            manifest[originalFileName] = asset;
    2052920596          }
    2053020597        }
    20531       });
     20598      }
    2053220599      outputCount++;
    2053320600      const output = config.build.rollupOptions?.output;
     
    2056820635    },
    2056920636    resolveId(id) {
    20570       if (!dataUriRE.test(id)) {
     20637      if (!id.trimStart().startsWith("data:")) {
    2057120638        return;
    2057220639      }
     
    2057520642        return;
    2057620643      }
    20577       const match = uri.pathname.match(dataUriRE);
     20644      const match = dataUriRE.exec(uri.pathname);
    2057820645      if (!match) {
    2057920646        return;
     
    2273222799const picomatch$2 = picomatch$3;
    2273322800const utils$b = utils$k;
    22734 const isEmptyString = val => val === '' || val === './';
     22801
     22802const isEmptyString = v => v === '' || v === './';
     22803const hasBraces = v => {
     22804  const index = v.indexOf('{');
     22805  return index > -1 && v.indexOf('}', index) > -1;
     22806};
    2273522807
    2273622808/**
     
    2317323245micromatch$1.braces = (pattern, options) => {
    2317423246  if (typeof pattern !== 'string') throw new TypeError('Expected a string');
    23175   if ((options && options.nobrace === true) || !/\{.*\}/.test(pattern)) {
     23247  if ((options && options.nobrace === true) || !hasBraces(pattern)) {
    2317623248    return [pattern];
    2317723249  }
     
    2319223264 */
    2319323265
     23266// exposed for tests
     23267micromatch$1.hasBraces = hasBraces;
    2319423268var micromatch_1 = micromatch$1;
    2319523269
     
    2703827112    }
    2703927113}
    27040 Collection.maxFlowStringSingleLineLength = 60;
    2704127114
    2704227115/**
     
    2707027143    if (!lineWidth || lineWidth < 0)
    2707127144        return text;
     27145    if (lineWidth < minContentWidth)
     27146        minContentWidth = 0;
    2707227147    const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);
    2707327148    if (text.length <= endStep)
     
    2964229717    let commentSep = '';
    2964329718    let hasNewline = false;
    29644     let hasNewlineAfterProp = false;
    2964529719    let reqSpace = false;
    2964629720    let tab = null;
    2964729721    let anchor = null;
    2964829722    let tag = null;
     29723    let newlineAfterProp = null;
    2964929724    let comma = null;
    2965029725    let found = null;
     
    2970029775                hasNewline = true;
    2970129776                if (anchor || tag)
    29702                     hasNewlineAfterProp = true;
     29777                    newlineAfterProp = token;
    2970329778                hasSpace = true;
    2970429779                break;
     
    2977429849        comment,
    2977529850        hasNewline,
    29776         hasNewlineAfterProp,
    2977729851        anchor,
    2977829852        tag,
     29853        newlineAfterProp,
    2977929854        end,
    2978029855        start: start ?? end
     
    2987829953                continue;
    2987929954            }
    29880             if (keyProps.hasNewlineAfterProp || containsNewline(key)) {
     29955            if (keyProps.newlineAfterProp || containsNewline(key)) {
    2988129956                onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');
    2988229957            }
     
    3023230307    return coll;
    3023330308}
    30234 function composeCollection(CN, ctx, token, tagToken, onError) {
     30309function composeCollection(CN, ctx, token, props, onError) {
     30310    const tagToken = props.tag;
    3023530311    const tagName = !tagToken
    3023630312        ? null
    3023730313        : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));
     30314    if (token.type === 'block-seq') {
     30315        const { anchor, newlineAfterProp: nl } = props;
     30316        const lastProp = anchor && tagToken
     30317            ? anchor.offset > tagToken.offset
     30318                ? anchor
     30319                : tagToken
     30320            : (anchor ?? tagToken);
     30321        if (lastProp && (!nl || nl.offset < lastProp.offset)) {
     30322            const message = 'Missing newline after block sequence props';
     30323            onError(lastProp, 'MISSING_CHAR', message);
     30324        }
     30325    }
    3023830326    const expType = token.type === 'block-map'
    3023930327        ? 'map'
     
    3024930337        tagName === '!' ||
    3025030338        (tagName === YAMLMap.tagName && expType === 'map') ||
    30251         (tagName === YAMLSeq.tagName && expType === 'seq') ||
    30252         !expType) {
     30339        (tagName === YAMLSeq.tagName && expType === 'seq')) {
    3025330340        return resolveCollection(CN, ctx, token, onError, tagName);
    3025430341    }
     
    3081830905        case 'block-seq':
    3081930906        case 'flow-collection':
    30820             node = composeCollection(CN, ctx, token, tag, onError);
     30907            node = composeCollection(CN, ctx, token, props, onError);
    3082130908            if (anchor)
    3082230909                node.anchor = anchor.source.substring(1);
     
    3189031977                return this.setNext('line-start');
    3189131978            const s = this.peek(3);
    31892             if (s === '---' && isEmpty(this.charAt(3))) {
     31979            if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {
    3189331980                yield* this.pushCount(3);
    3189431981                this.indentValue = 0;
    3189531982                this.indentNext = 0;
    31896                 return 'doc';
    31897             }
    31898             else if (s === '...' && isEmpty(this.charAt(3))) {
    31899                 yield* this.pushCount(3);
    31900                 return 'stream';
     31983                return s === '---' ? 'doc' : 'stream';
    3190131984            }
    3190231985        }
     
    3241632499                break loop;
    3241732500        }
    32418     }
    32419     while (prev[++i]?.type === 'space') {
    32420         /* loop */
    3242132501    }
    3242232502    return prev.splice(i, prev.length);
     
    3492635006}
    3492735007
    34928 const htmlProxyRE$1 = /\?html-proxy=?(?:&inline-css)?(?:&style-attr)?&index=(\d+)\.(js|css)$/;
     35008const htmlProxyRE$1 = /\?html-proxy=?(?:&inline-css)?(?:&style-attr)?&index=(\d+)\.(?:js|css)$/;
    3492935009const isHtmlProxyRE = /\?html-proxy\b/;
    3493035010const inlineCSSRE$1 = /__VITE_INLINE_CSS__([a-z\d]{8}_\d+)__/g;
     
    3495335033    },
    3495435034    load(id) {
    34955       const proxyMatch = id.match(htmlProxyRE$1);
     35035      const proxyMatch = htmlProxyRE$1.exec(id);
    3495635036      if (proxyMatch) {
    3495735037        const index = Number(proxyMatch[1]);
     
    3499935079}
    3500035080function traverseNodes(node, visitor) {
     35081  if (node.nodeName === "template") {
     35082    node = node.content;
     35083  }
    3500135084  visitor(node);
    3500235085  if (nodeIsElement(node) || node.nodeName === "#document" || node.nodeName === "#document-fragment") {
     
    3504235125    sourceCodeLocation.endOffset
    3504335126  );
    35044   const valueStart = srcString.match(attrValueStartRE);
     35127  const valueStart = attrValueStartRE.exec(srcString);
    3504535128  if (!valueStart) {
    3504635129    throw new Error(
     
    3511035193      if (id.endsWith(".html")) {
    3511135194        id = normalizePath$3(id);
    35112         const relativeUrlPath = path$n.posix.relative(config.root, id);
     35195        const relativeUrlPath = normalizePath$3(path$n.relative(config.root, id));
    3511335196        const publicPath = `/${relativeUrlPath}`;
    3511435197        const publicBase = getBaseInHTML(relativeUrlPath, config);
     
    3544435527      };
    3544535528      for (const [normalizedId, html] of processedHtml) {
    35446         const relativeUrlPath = path$n.posix.relative(config.root, normalizedId);
     35529        const relativeUrlPath = normalizePath$3(
     35530          path$n.relative(config.root, normalizedId)
     35531        );
    3544735532        const assetsBase = getBaseInHTML(relativeUrlPath, config);
    3544835533        const toOutputFilePath = (filename, type) => {
     
    3556035645        this.emitFile({
    3556135646          type: "asset",
     35647          originalFileName: normalizedId,
    3556235648          fileName: shortEmitName,
    3556335649          source: result
     
    3582835914  return html;
    3582935915}
    35830 const importRE = /\bimport\s*("[^"]*[^\\]"|'[^']*[^\\]');*/g;
     35916const importRE = /\bimport\s*(?:"[^"]*[^\\]"|'[^']*[^\\]');*/g;
    3583135917const commentRE$1 = /\/\*[\s\S]*?\*\/|\/\/.*$/gm;
    3583235918function isEntirelyImport(code) {
     
    3598136067const functionCallRE = /^[A-Z_][\w-]*\(/i;
    3598236068const transformOnlyRE = /[?&]transform-only\b/;
    35983 const nonEscapedDoubleQuoteRe = /(?<!\\)(")/g;
     36069const nonEscapedDoubleQuoteRe = /(?<!\\)"/g;
    3598436070const cssBundleName = "style.css";
    3598536071const isCSSRequest = (request) => CSS_LANGS_RE.test(request);
     
    3612236208      return path$n.dirname(
    3612336209        assetFileNames({
     36210          type: "asset",
    3612436211          name: cssAssetName,
    36125           type: "asset",
     36212          originalFileName: null,
    3612636213          source: "/* vite internal call, ignore */"
    3612736214        })
     
    3624136328        const cssAssetDirname = encodedPublicUrls || relative ? slash$1(getCssAssetDirname(cssAssetName)) : void 0;
    3624236329        const toRelative = (filename) => {
    36243           const relativePath = path$n.posix.relative(cssAssetDirname, filename);
     36330          const relativePath = normalizePath$3(
     36331            path$n.relative(cssAssetDirname, filename)
     36332          );
    3624436333          return relativePath[0] === "." ? relativePath : "./" + relativePath;
    3624536334        };
     
    3625936348        });
    3626036349        if (encodedPublicUrls) {
    36261           const relativePathToPublicFromCSS = path$n.posix.relative(
    36262             cssAssetDirname,
    36263             ""
     36350          const relativePathToPublicFromCSS = normalizePath$3(
     36351            path$n.relative(cssAssetDirname, "")
    3626436352          );
    3626536353          chunkCSS2 = chunkCSS2.replace(publicAssetUrlRE, (_, hash) => {
     
    3629236380          const [full, idHex] = match;
    3629336381          const id = Buffer.from(idHex, "hex").toString();
    36294           const originalFilename = cleanUrl(id);
     36382          const originalFileName = cleanUrl(id);
    3629536383          const cssAssetName = ensureFileExt(
    36296             path$n.basename(originalFilename),
     36384            path$n.basename(originalFileName),
    3629736385            ".css"
    3629836386          );
     
    3630636394          urlEmitTasks.push({
    3630736395            cssAssetName,
    36308             originalFilename,
     36396            originalFileName,
    3630936397            content: cssContent,
    3631036398            start: match.index,
     
    3632836416        for (const {
    3632936417          cssAssetName,
    36330           originalFilename,
     36418          originalFileName,
    3633136419          content,
    3633236420          start,
     
    3633436422        } of urlEmitTasks) {
    3633536423          const referenceId = this.emitFile({
     36424            type: "asset",
    3633636425            name: cssAssetName,
    36337             type: "asset",
     36426            originalFileName,
    3633836427            source: content
    3633936428          });
    36340           generatedAssets.get(config).set(referenceId, { originalName: originalFilename });
     36429          generatedAssets.get(config).set(referenceId, { originalFileName });
    3634136430          const filename = this.getFileName(referenceId);
    3634236431          chunk.viteMetadata.importedAssets.add(cleanUrl(filename));
     
    3636236451            const cssFullAssetName = ensureFileExt(chunk.name, ".css");
    3636336452            const cssAssetName = chunk.isEntry && (!chunk.facadeModuleId || !isCSSRequest(chunk.facadeModuleId)) ? path$n.basename(cssFullAssetName) : cssFullAssetName;
    36364             const originalFilename = getChunkOriginalFileName(
     36453            const originalFileName = getChunkOriginalFileName(
    3636536454              chunk,
    3636636455              config.root,
     
    3637236461            });
    3637336462            const referenceId = this.emitFile({
     36463              type: "asset",
    3637436464              name: cssAssetName,
    36375               type: "asset",
     36465              originalFileName,
    3637636466              source: chunkCSS
    3637736467            });
    36378             generatedAssets.get(config).set(referenceId, { originalName: originalFilename, isEntry });
     36468            generatedAssets.get(config).set(referenceId, { originalFileName, isEntry });
    3637936469            chunk.viteMetadata.importedCss.add(this.getFileName(referenceId));
    3638036470          } else if (!config.build.ssr) {
     
    3650436594        });
    3650536595      }
     36596      const cssAssets = Object.values(bundle).filter(
     36597        (asset) => asset.type === "asset" && asset.fileName.endsWith(".css")
     36598      );
     36599      for (const cssAsset of cssAssets) {
     36600        if (typeof cssAsset.source === "string") {
     36601          cssAsset.source = cssAsset.source.replace(viteHashUpdateMarkerRE, "");
     36602        }
     36603      }
    3650636604    }
    3650736605  };
     
    3652636624        if (pluginImports) {
    3652736625          const depModules = /* @__PURE__ */ new Set();
    36528           const devBase = config.base;
    3652936626          for (const file of pluginImports) {
    3653036627            depModules.add(
    3653136628              isCSSRequest(file) ? moduleGraph.createFileOnlyEntry(file) : await moduleGraph.ensureEntryFromUrl(
    36532                 stripBase(
    36533                   await fileToUrl$1(file, config, this),
    36534                   (config.server?.origin ?? "") + devBase
     36629                fileToDevUrl(
     36630                  file,
     36631                  config,
     36632                  /* skipBase */
     36633                  true
    3653536634                ),
    3653636635                ssr
     
    3658336682    },
    3658436683    get sass() {
    36585       return sassResolve || (sassResolve = config.createResolver({
    36586         extensions: [".scss", ".sass", ".css"],
    36587         mainFields: ["sass", "style"],
    36588         conditions: ["sass", "style"],
    36589         tryIndex: true,
    36590         tryPrefix: "_",
    36591         preferRelative: true
    36592       }));
     36684      if (!sassResolve) {
     36685        const resolver = config.createResolver({
     36686          extensions: [".scss", ".sass", ".css"],
     36687          mainFields: ["sass", "style"],
     36688          conditions: ["sass", "style"],
     36689          tryIndex: true,
     36690          tryPrefix: "_",
     36691          preferRelative: true
     36692        });
     36693        sassResolve = async (...args) => {
     36694          if (args[0].startsWith("file://")) {
     36695            args[0] = fileURLToPath(args[0]);
     36696          }
     36697          return resolver(...args);
     36698        };
     36699      }
     36700      return sassResolve;
    3659336701    },
    3659436702    get less() {
     
    3667636784  const needInlineImport = code.includes("@import");
    3667736785  const hasUrl = cssUrlRE.test(code) || cssImageSetRE.test(code);
    36678   const lang = id.match(CSS_LANGS_RE)?.[1];
     36786  const lang = CSS_LANGS_RE.exec(id)?.[1];
    3667936787  const postcssConfig = await resolvePostcssConfig(config);
    3668036788  if (lang === "css" && !postcssConfig && !isModule && !needInlineImport && !hasUrl) {
     
    3672536833        async load(id2) {
    3672636834          const code2 = await fs__default.promises.readFile(id2, "utf-8");
    36727           const lang2 = id2.match(CSS_LANGS_RE)?.[1];
     36835          const lang2 = CSS_LANGS_RE.exec(id2)?.[1];
    3672836836          if (isPreProcessor(lang2)) {
    3672936837            const result = await compileCSSPreprocessors(
     
    3688336991  };
    3688436992}
    36885 const importPostcssImport = createCachedImport(() => import('./dep-VqAwxVIc.js').then(function (n) { return n.i; }));
    36886 const importPostcssModules = createCachedImport(() => import('./dep-CjZz522d.js').then(function (n) { return n.i; }));
     36993const importPostcssImport = createCachedImport(() => import('./dep-C6EFp3uH.js').then(function (n) { return n.i; }));
     36994const importPostcssModules = createCachedImport(() => import('./dep-Ba1kN6Mp.js').then(function (n) { return n.i; }));
    3688736995const importPostcss = createCachedImport(() => import('postcss'));
    3688836996const preprocessorWorkerControllerCache = /* @__PURE__ */ new WeakMap();
     
    3692237030  ]) : map1;
    3692337031}
     37032const viteHashUpdateMarker = "/*$vite$:1*/";
     37033const viteHashUpdateMarkerRE = /\/\*\$vite\$:\d+\*\//;
    3692437034async function finalizeCss(css, minify, config) {
    3692537035  if (css.includes("@import") || css.includes("@charset")) {
     
    3692937039    css = await minifyCSS(css, config, false);
    3693037040  }
     37041  css += viteHashUpdateMarker;
    3693137042  return css;
    3693237043}
     
    3719137302  }
    3719237303}
     37304function loadSassPackage(root) {
     37305  try {
     37306    const path2 = loadPreprocessorPath("sass-embedded", root);
     37307    return { name: "sass-embedded", path: path2 };
     37308  } catch (e1) {
     37309    try {
     37310      const path2 = loadPreprocessorPath("sass" /* sass */, root);
     37311      return { name: "sass", path: path2 };
     37312    } catch (e2) {
     37313      throw e1;
     37314    }
     37315  }
     37316}
    3719337317let cachedSss;
    3719437318function loadSss(root) {
     
    3721837342  return data;
    3721937343}
    37220 const makeScssWorker = (resolvers, alias, maxWorkers) => {
     37344const makeScssWorker = (resolvers, alias, maxWorkers, packageName) => {
    3722137345  const internalImporter = async (url, importer, filename) => {
    3722237346    importer = cleanScssBugUrl(importer);
     
    3723137355          resolvers.sass
    3723237356        );
     37357        if (packageName === "sass-embedded") {
     37358          return data;
     37359        }
    3723337360        return fixScssBugImportValue(data);
    3723437361      } catch (data) {
     
    3728837415  return worker;
    3728937416};
     37417const makeModernScssWorker = (resolvers, alias, maxWorkers) => {
     37418  const internalCanonicalize = async (url, importer) => {
     37419    importer = cleanScssBugUrl(importer);
     37420    const resolved = await resolvers.sass(url, importer);
     37421    return resolved ?? null;
     37422  };
     37423  const internalLoad = async (file, rootFile) => {
     37424    const result = await rebaseUrls(file, rootFile, alias, "$", resolvers.sass);
     37425    if (result.contents) {
     37426      return result.contents;
     37427    }
     37428    return await fsp.readFile(result.file, "utf-8");
     37429  };
     37430  const worker = new WorkerWithFallback(
     37431    () => async (sassPath, data, options) => {
     37432      const sass = require(sassPath);
     37433      const path2 = require("node:path");
     37434      const { fileURLToPath: fileURLToPath2, pathToFileURL: pathToFileURL2 } = (
     37435        // eslint-disable-next-line no-restricted-globals
     37436        require("node:url")
     37437      );
     37438      const sassOptions = { ...options };
     37439      sassOptions.url = pathToFileURL2(options.filename);
     37440      sassOptions.sourceMap = options.enableSourcemap;
     37441      const internalImporter = {
     37442        async canonicalize(url, context) {
     37443          const importer = context.containingUrl ? fileURLToPath2(context.containingUrl) : options.filename;
     37444          const resolved = await internalCanonicalize(url, importer);
     37445          return resolved ? pathToFileURL2(resolved) : null;
     37446        },
     37447        async load(canonicalUrl) {
     37448          const ext = path2.extname(canonicalUrl.pathname);
     37449          let syntax = "scss";
     37450          if (ext === ".sass") {
     37451            syntax = "indented";
     37452          } else if (ext === ".css") {
     37453            syntax = "css";
     37454          }
     37455          const contents = await internalLoad(
     37456            fileURLToPath2(canonicalUrl),
     37457            options.filename
     37458          );
     37459          return { contents, syntax, sourceMapUrl: canonicalUrl };
     37460        }
     37461      };
     37462      sassOptions.importers = [
     37463        ...sassOptions.importers ?? [],
     37464        internalImporter
     37465      ];
     37466      const result = await sass.compileStringAsync(data, sassOptions);
     37467      return {
     37468        css: result.css,
     37469        map: result.sourceMap ? JSON.stringify(result.sourceMap) : void 0,
     37470        stats: {
     37471          includedFiles: result.loadedUrls.filter((url) => url.protocol === "file:").map((url) => fileURLToPath2(url))
     37472        }
     37473      };
     37474    },
     37475    {
     37476      parentFunctions: {
     37477        internalCanonicalize,
     37478        internalLoad
     37479      },
     37480      shouldUseFake(_sassPath, _data, options) {
     37481        return !!(options.functions && Object.keys(options.functions).length > 0 || options.importers && (!Array.isArray(options.importers) || options.importers.length > 0));
     37482      },
     37483      max: maxWorkers
     37484    }
     37485  );
     37486  return worker;
     37487};
     37488const makeModernCompilerScssWorker = (resolvers, alias, _maxWorkers) => {
     37489  let compilerPromise;
     37490  const worker = {
     37491    async run(sassPath, data, options) {
     37492      const sass = (await import(pathToFileURL(sassPath).href)).default;
     37493      compilerPromise ??= sass.initAsyncCompiler();
     37494      const compiler = await compilerPromise;
     37495      const sassOptions = { ...options };
     37496      sassOptions.url = pathToFileURL(options.filename);
     37497      sassOptions.sourceMap = options.enableSourcemap;
     37498      const internalImporter = {
     37499        async canonicalize(url, context) {
     37500          const importer = context.containingUrl ? fileURLToPath(context.containingUrl) : options.filename;
     37501          const resolved = await resolvers.sass(url, cleanScssBugUrl(importer));
     37502          return resolved ? pathToFileURL(resolved) : null;
     37503        },
     37504        async load(canonicalUrl) {
     37505          const ext = path$n.extname(canonicalUrl.pathname);
     37506          let syntax = "scss";
     37507          if (ext === ".sass") {
     37508            syntax = "indented";
     37509          } else if (ext === ".css") {
     37510            syntax = "css";
     37511          }
     37512          const result2 = await rebaseUrls(
     37513            fileURLToPath(canonicalUrl),
     37514            options.filename,
     37515            alias,
     37516            "$",
     37517            resolvers.sass
     37518          );
     37519          const contents = result2.contents ?? await fsp.readFile(result2.file, "utf-8");
     37520          return { contents, syntax, sourceMapUrl: canonicalUrl };
     37521        }
     37522      };
     37523      sassOptions.importers = [
     37524        ...sassOptions.importers ?? [],
     37525        internalImporter
     37526      ];
     37527      const result = await compiler.compileStringAsync(data, sassOptions);
     37528      return {
     37529        css: result.css,
     37530        map: result.sourceMap ? JSON.stringify(result.sourceMap) : void 0,
     37531        stats: {
     37532          includedFiles: result.loadedUrls.filter((url) => url.protocol === "file:").map((url) => fileURLToPath(url))
     37533        }
     37534      };
     37535    },
     37536    async stop() {
     37537      (await compilerPromise)?.dispose();
     37538      compilerPromise = void 0;
     37539    }
     37540  };
     37541  return worker;
     37542};
    3729037543const scssProcessor = (maxWorkers) => {
    3729137544  const workerMap = /* @__PURE__ */ new Map();
     
    3729737550    },
    3729837551    async process(source, root, options, resolvers) {
    37299       const sassPath = loadPreprocessorPath("sass" /* sass */, root);
     37552      const sassPackage = loadSassPackage(root);
     37553      const api = options.api ?? "legacy";
    3730037554      if (!workerMap.has(options.alias)) {
    3730137555        workerMap.set(
    3730237556          options.alias,
    37303           makeScssWorker(resolvers, options.alias, maxWorkers)
     37557          api === "modern-compiler" ? makeModernCompilerScssWorker(resolvers, options.alias) : api === "modern" ? makeModernScssWorker(resolvers, options.alias, maxWorkers) : makeScssWorker(
     37558            resolvers,
     37559            options.alias,
     37560            maxWorkers,
     37561            sassPackage.name
     37562          )
    3730437563        );
    3730537564      }
     
    3731737576      try {
    3731837577        const result = await worker.run(
    37319           sassPath,
     37578          sassPackage.path,
    3732037579          data,
    3732137580          optionsWithoutAdditionalData
     
    3732337582        const deps = result.stats.includedFiles.map((f) => cleanScssBugUrl(f));
    3732437583        const map2 = result.map ? JSON.parse(result.map.toString()) : void 0;
     37584        if (map2) {
     37585          map2.sources = map2.sources.map(
     37586            (url) => url.startsWith("file://") ? normalizePath$3(fileURLToPath(url)) : url
     37587          );
     37588        }
    3732537589        return {
    3732637590          code: result.css.toString(),
     
    3765237916      source,
    3765337917      root,
    37654       { ...options, indentedSyntax: true },
     37918      { ...options, indentedSyntax: true, syntax: "indented" },
    3765537919      resolvers
    3765637920    );
     
    3774038004        deps.add(dep.url);
    3774138005        if (urlReplacer) {
    37742           const replaceUrl = await urlReplacer(dep.url, id);
     38006          const replaceUrl = await urlReplacer(
     38007            dep.url,
     38008            toAbsolute(dep.loc.filePath)
     38009          );
    3774338010          css = css.replace(dep.placeholder, () => replaceUrl);
    3774438011        } else {
     
    3780938076  const targets = {};
    3781038077  const entriesWithoutES = arraify(esbuildTarget).flatMap((e) => {
    37811     const match = e.match(esRE);
     38078    const match = esRE.exec(e);
    3781238079    if (!match) return e;
    3781338080    const year = Number(match[1]);
     
    4483945106  emacs: 'emacs',
    4484045107  gvim: 'gvim',
     45108  idea: 'idea',
    4484145109  'idea.sh': 'idea',
     45110  phpstorm: 'phpstorm',
    4484245111  'phpstorm.sh': 'phpstorm',
     45112  pycharm: 'pycharm',
    4484345113  'pycharm.sh': 'pycharm',
     45114  rubymine: 'rubymine',
    4484445115  'rubymine.sh': 'rubymine',
    4484545116  sublime_text: 'subl',
    4484645117  vim: 'vim',
     45118  webstorm: 'webstorm',
    4484745119  'webstorm.sh': 'webstorm',
     45120  goland: 'goland',
    4484845121  'goland.sh': 'goland',
     45122  rider: 'rider',
    4484945123  'rider.sh': 'rider'
    4485045124};
     
    4515645430  }
    4515745431
    45158   // cmd.exe on Windows is vulnerable to RCE attacks given a file name of the
    45159   // form "C:\Users\myusername\Downloads\& curl 172.21.93.52". Use a safe file
    45160   // name pattern to validate user-provided file names. This doesn't cover the
    45161   // entire range of valid file names but should cover almost all of them in practice.
    45162   // (Backport of
    45163   // https://github.com/facebook/create-react-app/pull/4866
    45164   // and
    45165   // https://github.com/facebook/create-react-app/pull/5431)
    45166 
    45167   // Allows alphanumeric characters, periods, dashes, slashes, and underscores.
    45168   const WINDOWS_CMD_SAFE_FILE_NAME_PATTERN = /^([A-Za-z]:[/\\])?[\p{L}0-9/.\-_\\]+$/u;
    45169   if (
    45170     process.platform === 'win32' &&
    45171     !WINDOWS_CMD_SAFE_FILE_NAME_PATTERN.test(fileName.trim())
    45172   ) {
    45173     console.log();
    45174     console.log(
    45175       colors.red('Could not open ' + path$5.basename(fileName) + ' in the editor.')
    45176     );
    45177     console.log();
    45178     console.log(
    45179       'When running on Windows, file names are checked against a safe file name ' +
    45180         'pattern to protect against remote code execution attacks. File names ' +
    45181         'may consist only of alphanumeric characters (all languages), periods, ' +
    45182         'dashes, slashes, and underscores.'
    45183     );
    45184     console.log();
    45185     return
    45186   }
    45187 
    4518845432  if (lineNumber) {
    4518945433    const extraArgs = getArgumentsForPosition(editor, fileName, lineNumber, columnNumber);
     
    4520145445
    4520245446  if (process.platform === 'win32') {
    45203     // On Windows, launch the editor in a shell because spawn can only
    45204     // launch .exe files.
    45205     _childProcess = childProcess$1.spawn(
    45206       'cmd.exe',
    45207       ['/C', editor].concat(args),
    45208       { stdio: 'inherit' }
    45209     );
     45447    // On Windows, we need to use `exec` with the `shell: true` option,
     45448    // and some more sanitization is required.
     45449
     45450    // However, CMD.exe on Windows is vulnerable to RCE attacks given a file name of the
     45451    // form "C:\Users\myusername\Downloads\& curl 172.21.93.52".
     45452    // `create-react-app` used a safe file name pattern to validate user-provided file names:
     45453    // - https://github.com/facebook/create-react-app/pull/4866
     45454    // - https://github.com/facebook/create-react-app/pull/5431
     45455    // But that's not a viable solution for this package because
     45456    // it's depended on by so many meta frameworks that heavily rely on
     45457    // special characters in file names for filesystem-based routing.
     45458    // We need to at least:
     45459    // - Support `+` because it's used in SvelteKit and Vike
     45460    // - Support `$` because it's used in Remix
     45461    // - Support `(` and `)` because they are used in Analog, SolidStart, and Vike
     45462    // - Support `@` because it's used in Vike
     45463    // - Support `[` and `]` because they are widely used for [slug]
     45464    // So here we choose to use `^` to escape special characters instead.
     45465
     45466    // According to https://ss64.com/nt/syntax-esc.html,
     45467    // we can use `^` to escape `&`, `<`, `>`, `|`, `%`, and `^`
     45468    // I'm not sure if we have to escape all of these, but let's do it anyway
     45469    function escapeCmdArgs (cmdArgs) {
     45470      return cmdArgs.replace(/([&|<>,;=^])/g, '^$1')
     45471    }
     45472
     45473    // Need to double quote the editor path in case it contains spaces;
     45474    // If the fileName contains spaces, we also need to double quote it in the arguments
     45475    // However, there's a case that it's concatenated with line number and column number
     45476    // which is separated by `:`. We need to double quote the whole string in this case.
     45477    // Also, if the string contains the escape character `^`, it needs to be quoted, too.
     45478    function doubleQuoteIfNeeded(str) {
     45479      if (str.includes('^')) {
     45480        // If a string includes an escaped character, not only does it need to be quoted,
     45481        // but the quotes need to be escaped too.
     45482        return `^"${str}^"`
     45483      } else if (str.includes(' ')) {
     45484        return `"${str}"`
     45485      }
     45486      return str
     45487    }
     45488    const launchCommand = [editor, ...args.map(escapeCmdArgs)]
     45489      .map(doubleQuoteIfNeeded)
     45490      .join(' ');
     45491
     45492    _childProcess = childProcess$1.exec(launchCommand, {
     45493      stdio: 'inherit',
     45494      shell: true
     45495    });
    4521045496  } else {
    4521145497    _childProcess = childProcess$1.spawn(editor, args, { stdio: 'inherit' });
     
    4533145617      logger.warn(
    4533245618        colors$1.yellow(
    45333           "Server responded with status code 431. See https://vitejs.dev/guide/troubleshooting.html#_431-request-header-fields-too-large."
     45619          "Server responded with status code 431. See https://vite.dev/guide/troubleshooting.html#_431-request-header-fields-too-large."
    4533445620        )
    4533545621      );
     
    4535545641  let fsUtils = cachedFsUtilsMap.get(config);
    4535645642  if (!fsUtils) {
    45357     if (config.command !== "serve" || config.server.fs.cachedChecks === false || config.server.watch?.ignored || process.versions.pnp) {
     45643    if (config.command !== "serve" || config.server.fs.cachedChecks !== true || config.server.watch?.ignored || process.versions.pnp) {
    4535845644      fsUtils = commonFsUtils;
    4535945645    } else if (!config.resolve.preserveSymlinks && config.root !== getRealPath(config.root)) {
     
    4594646232            } else if (isProduction) {
    4594746233              this.warn(
    45948                 `Module "${id}" has been externalized for browser compatibility, imported by "${importer}". See https://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.`
     46234                `Module "${id}" has been externalized for browser compatibility, imported by "${importer}". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.`
    4594946235              );
    4595046236            }
     
    4596346249          return `export default new Proxy({}, {
    4596446250  get(_, key) {
    45965     throw new Error(\`Module "${id}" has been externalized for browser compatibility. Cannot access "${id}.\${key}" in client code.  See https://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\`)
     46251    throw new Error(\`Module "${id}" has been externalized for browser compatibility. Cannot access "${id}.\${key}" in client code.  See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\`)
    4596646252  }
    4596746253})`;
     
    4612646412function tryNodeResolve(id, importer, options, targetWeb, depsOptimizer, ssr = false, externalize, allowLinkedExternal = true) {
    4612746413  const { root, dedupe, isBuild, preserveSymlinks, packageCache } = options;
    46128   const deepMatch = id.match(deepImportRE);
     46414  const deepMatch = deepImportRE.exec(id);
    4612946415  const pkgId = deepMatch ? deepMatch[1] || deepMatch[2] : cleanUrl(id);
    4613046416  let basedir;
     
    4670246988      key !== 'splice'
    4670346989    ) {
    46704       console.warn(\`Module "${path2}" has been externalized for browser compatibility. Cannot access "${path2}.\${key}" in client code. See https://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\`)
     46990      console.warn(\`Module "${path2}" has been externalized for browser compatibility. Cannot access "${path2}.\${key}" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\`)
    4670546991    }
    4670646992  }
     
    4692947215        const metadata = depsOptimizer.metadata;
    4693047216        const file = cleanUrl(id);
    46931         const versionMatch = id.match(DEP_VERSION_RE);
     47217        const versionMatch = DEP_VERSION_RE.exec(file);
    4693247218        const browserHash = versionMatch ? versionMatch[1].split("=")[1] : void 0;
    4693347219        const info = optimizedDepInfoFromFile(metadata, file);
     
    4698747273const nonJsRe = /\.json(?:$|\?)/;
    4698847274const isNonJsRequest = (request) => nonJsRe.test(request);
     47275const importMetaEnvMarker = "__vite_import_meta_env__";
     47276const importMetaEnvKeyReCache = /* @__PURE__ */ new Map();
    4698947277function definePlugin(config) {
    4699047278  const isBuild = config.command === "build";
     
    4703547323    }
    4703647324    if ("import.meta.env" in define) {
    47037       define["import.meta.env"] = serializeDefine({
    47038         ...importMetaEnvKeys,
    47039         SSR: ssr + "",
    47040         ...userDefineEnv
    47041       });
    47042     }
     47325      define["import.meta.env"] = importMetaEnvMarker;
     47326    }
     47327    const importMetaEnvVal = serializeDefine({
     47328      ...importMetaEnvKeys,
     47329      SSR: ssr + "",
     47330      ...userDefineEnv
     47331    });
    4704347332    const patternKeys = Object.keys(userDefine);
    4704447333    if (replaceProcessEnv && Object.keys(processEnv).length) {
     
    4704947338    }
    4705047339    const pattern = patternKeys.length ? new RegExp(patternKeys.map(escapeRegex).join("|")) : null;
    47051     return [define, pattern];
     47340    return [define, pattern, importMetaEnvVal];
    4705247341  }
    4705347342  const defaultPattern = generatePattern(false);
     
    4706647355        return;
    4706747356      }
    47068       const [define, pattern] = ssr ? ssrPattern : defaultPattern;
     47357      let [define, pattern, importMetaEnvVal] = ssr ? ssrPattern : defaultPattern;
    4706947358      if (!pattern) return;
    4707047359      pattern.lastIndex = 0;
    4707147360      if (!pattern.test(code)) return;
    47072       return await replaceDefine(code, id, define, config);
     47361      const hasDefineImportMetaEnv = "import.meta.env" in define;
     47362      let marker = importMetaEnvMarker;
     47363      if (hasDefineImportMetaEnv && code.includes(marker)) {
     47364        let i = 1;
     47365        do {
     47366          marker = importMetaEnvMarker + i++;
     47367        } while (code.includes(marker));
     47368        if (marker !== importMetaEnvMarker) {
     47369          define = { ...define, "import.meta.env": marker };
     47370        }
     47371      }
     47372      const result = await replaceDefine(code, id, define, config);
     47373      if (hasDefineImportMetaEnv) {
     47374        result.code = result.code.replaceAll(
     47375          getImportMetaEnvKeyRe(marker),
     47376          (m) => "undefined".padEnd(m.length)
     47377        );
     47378        if (result.code.includes(marker)) {
     47379          result.code = `const ${marker} = ${importMetaEnvVal};
     47380` + result.code;
     47381          if (result.map) {
     47382            const map = JSON.parse(result.map);
     47383            map.mappings = ";" + map.mappings;
     47384            result.map = map;
     47385          }
     47386        }
     47387      }
     47388      return result;
    4707347389    }
    4707447390  };
    4707547391}
    4707647392async function replaceDefine(code, id, define, config) {
    47077   const replacementMarkers = {};
    47078   const env = define["import.meta.env"];
    47079   if (env && !canJsonParse(env)) {
    47080     const marker = `_${getHash(env, env.length - 2)}_`;
    47081     replacementMarkers[marker] = env;
    47082     define = { ...define, "import.meta.env": marker };
    47083   }
    4708447393  const esbuildOptions = config.esbuild || {};
    4708547394  const result = await transform$1(code, {
     
    4710747416    }
    4710847417  }
    47109   for (const marker in replacementMarkers) {
    47110     result.code = result.code.replaceAll(marker, replacementMarkers[marker]);
    47111   }
    4711247418  return {
    4711347419    code: result.code,
     
    4713347439  return JSON.stringify(value);
    4713447440}
    47135 function canJsonParse(value) {
    47136   try {
    47137     JSON.parse(value);
    47138     return true;
    47139   } catch {
    47140     return false;
    47141   }
     47441function getImportMetaEnvKeyRe(marker) {
     47442  let re = importMetaEnvKeyReCache.get(marker);
     47443  if (!re) {
     47444    re = new RegExp(`${marker}\\..+?\\b`, "g");
     47445    importMetaEnvKeyReCache.set(marker, re);
     47446  }
     47447  return re;
    4714247448}
    4714347449
     
    4728347589      }
    4728447590      throw new Error(
    47285         '"ESM integration proposal for Wasm" is not supported currently. Use vite-plugin-wasm or other community plugins to handle this. Alternatively, you can use `.wasm?init` or `.wasm?url`. See https://vitejs.dev/guide/features.html#webassembly for more details.'
     47591        '"ESM integration proposal for Wasm" is not supported currently. Use vite-plugin-wasm or other community plugins to handle this. Alternatively, you can use `.wasm?init` or `.wasm?url`. See https://vite.dev/guide/features.html#webassembly for more details.'
    4728647592      );
    4728747593    }
     
    4734747653        saveEmitWorkerAsset(config, {
    4734847654          fileName: outputChunk2.fileName,
     47655          originalFileName: null,
    4734947656          source: outputChunk2.code
    4735047657        });
     
    4736447671      saveEmitWorkerAsset(config, {
    4736547672        fileName: mapFileName,
     47673        originalFileName: null,
    4736647674        source: data
    4736747675      });
     
    4738747695    saveEmitWorkerAsset(config, {
    4738847696      fileName,
     47697      originalFileName: null,
    4738947698      source: outputChunk.code
    4739047699    });
     
    4746547774        if (injectEnv) {
    4746647775          const s = new MagicString(raw);
    47467           s.prepend(injectEnv);
     47776          s.prepend(injectEnv + ";\n");
    4746847777          return {
    4746947778            code: s.toString(),
     
    4748447793      let urlCode;
    4748547794      if (isBuild) {
    47486         if (isWorker && this.getModuleInfo(cleanUrl(id))?.isEntry) {
     47795        if (isWorker && config.bundleChain.at(-1) === cleanUrl(id)) {
    4748747796          urlCode = "self.location.href";
    4748847797        } else if (inlineRE.test(id)) {
     
    4761147920          type: "asset",
    4761247921          fileName: asset.fileName,
     47922          originalFileName: asset.originalFileName,
    4761347923          source: asset.source
    4761447924        });
     
    4781348123            file ??= url[0] === "/" ? slash$1(path$n.join(config.publicDir, url)) : slash$1(path$n.resolve(path$n.dirname(id), url));
    4781448124          }
    47815           if (isBuild && config.isWorker && this.getModuleInfo(cleanUrl(file))?.isEntry) {
     48125          if (isBuild && config.isWorker && config.bundleChain.at(-1) === cleanUrl(file)) {
    4781648126            s.update(expStart, expEnd, "self.location.href");
    4781748127          } else {
     
    4846848778}
    4846948779function cleanStack(stack) {
    48470   return stack.split(/\n/g).filter((l) => /^\s*at/.test(l)).join("\n");
     48780  return stack.split(/\n/).filter((l) => /^\s*at/.test(l)).join("\n");
    4847148781}
    4847248782function logError(server, err) {
     
    4930649616const typeRE = /\btype\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/i;
    4930749617const langRE = /\blang\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/i;
    49308 const contextRE = /\bcontext\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/i;
     49618const svelteScriptModuleRE = /\bcontext\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/i;
     49619const svelteModuleRE = /\smodule\b/i;
    4930949620function esbuildScanPlugin(config, container, depImports, missing, entries) {
    4931049621  const seen = /* @__PURE__ */ new Map();
     
    4939249703        const matches = raw.matchAll(scriptRE);
    4939349704        for (const [, openTag, content] of matches) {
    49394           const typeMatch = openTag.match(typeRE);
     49705          const typeMatch = typeRE.exec(openTag);
    4939549706          const type = typeMatch && (typeMatch[1] || typeMatch[2] || typeMatch[3]);
    49396           const langMatch = openTag.match(langRE);
     49707          const langMatch = langRE.exec(openTag);
    4939749708          const lang = langMatch && (langMatch[1] || langMatch[2] || langMatch[3]);
    4939849709          if (isHtml && type !== "module") {
     
    4940849719            loader = "ts";
    4940949720          }
    49410           const srcMatch = openTag.match(srcRE);
     49721          const srcMatch = srcRE.exec(openTag);
    4941149722          if (srcMatch) {
    4941249723            const src = srcMatch[1] || srcMatch[2] || srcMatch[3];
     
    4943749748            }
    4943849749            const virtualModulePath = JSON.stringify(virtualModulePrefix + key);
    49439             const contextMatch = openTag.match(contextRE);
    49440             const context = contextMatch && (contextMatch[1] || contextMatch[2] || contextMatch[3]);
    49441             if (p.endsWith(".svelte") && context !== "module") {
    49442               js += `import ${virtualModulePath}
     49750            let addedImport = false;
     49751            if (p.endsWith(".svelte")) {
     49752              let isModule = svelteModuleRE.test(openTag);
     49753              if (!isModule) {
     49754                const contextMatch = svelteScriptModuleRE.exec(openTag);
     49755                const context = contextMatch && (contextMatch[1] || contextMatch[2] || contextMatch[3]);
     49756                isModule = context === "module";
     49757              }
     49758              if (!isModule) {
     49759                addedImport = true;
     49760                js += `import ${virtualModulePath}
    4944349761`;
    49444             } else {
     49762              }
     49763            }
     49764            if (!addedImport) {
    4944549765              js += `export * from ${virtualModulePath}
    4944649766`;
     
    4965949979                filePath = "./" + filePath;
    4966049980              }
    49661               const matched2 = slash$1(filePath).match(exportsValueGlobRe);
     49981              const matched2 = exportsValueGlobRe.exec(slash$1(filePath));
    4966249982              if (matched2) {
    4966349983                let allGlobSame = matched2.length === 2;
     
    4977050090  const logNewlyDiscoveredDeps = () => {
    4977150091    if (newDepsToLog.length) {
    49772       config.logger.info(
     50092      logger.info(
    4977350093        colors$1.green(
    4977450094          `\u2728 new dependencies optimized: ${depsLogString(newDepsToLog)}`
     
    4978450104  const logDiscoveredDepsWhileScanning = () => {
    4978550105    if (discoveredDepsWhileScanning.length) {
    49786       config.logger.info(
     50106      logger.info(
    4978750107        colors$1.green(
    4978850108          `\u2728 discovered while scanning: ${depsLogString(
     
    4997850298            if (warnAboutMissedDependencies) {
    4997950299              logDiscoveredDepsWhileScanning();
    49980               config.logger.info(
     50300              logger.info(
    4998150301                colors$1.magenta(
    4998250302                  `\u2757 add these dependencies to optimizeDeps.include to speed up cold start`
     
    5001050330            if (warnAboutMissedDependencies) {
    5001150331              logDiscoveredDepsWhileScanning();
    50012               config.logger.info(
     50332              logger.info(
    5001350333                colors$1.magenta(
    5001450334                  `\u2757 add these dependencies to optimizeDeps.include to avoid a full page reload during cold start`
     
    5002650346          );
    5002750347          if (needsInteropMismatch.length > 0) {
    50028             config.logger.warn(
     50348            logger.warn(
    5002950349              `Mixed ESM and CJS detected in ${colors$1.yellow(
    5003050350                needsInteropMismatch.join(", ")
     
    5131851638  };
    5131951639  return function viteServePublicMiddleware(req, res, next) {
    51320     if (publicFiles && !publicFiles.has(toFilePath(req.url)) || isImportRequest(req.url) || isInternalRequest(req.url)) {
     51640    if (publicFiles && !publicFiles.has(toFilePath(req.url)) || isImportRequest(req.url) || isInternalRequest(req.url) || // for `/public-file.js?url` to be transformed
     51641    urlRE.test(req.url)) {
    5132151642      return next();
    5132251643    }
     
    5141451735${server.config.server.fs.allow.map((i) => `- ${i}`).join("\n")}
    5141551736
    51416 Refer to docs https://vitejs.dev/config/server-options.html#server-fs-allow for configurations and more details.`;
     51737Refer to docs https://vite.dev/config/server-options.html#server-fs-allow for configurations and more details.`;
    5141751738    server.config.logger.error(urlMessage);
    5141851739    server.config.logger.warnOnce(hintMessage + "\n");
     
    5207352394  const idToImportMap = /* @__PURE__ */ new Map();
    5207452395  const declaredConst = /* @__PURE__ */ new Set();
    52075   const hoistIndex = code.match(hashbangRE)?.[0].length ?? 0;
     52396  const hoistIndex = hashbangRE.exec(code)?.[0].length ?? 0;
    5207652397  function defineImport(index, source, metadata) {
    5207752398    deps.add(source);
     
    5209752418    );
    5209852419  }
     52420  const imports = [];
     52421  const exports = [];
    5209952422  for (const node of ast.body) {
    5210052423    if (node.type === "ImportDeclaration") {
    52101       const importId = defineImport(hoistIndex, node.source.value, {
    52102         importedNames: node.specifiers.map((s2) => {
    52103           if (s2.type === "ImportSpecifier")
    52104             return s2.imported.type === "Identifier" ? s2.imported.name : (
    52105               // @ts-expect-error TODO: Estree types don't consider arbitrary module namespace specifiers yet
    52106               s2.imported.value
    52107             );
    52108           else if (s2.type === "ImportDefaultSpecifier") return "default";
    52109         }).filter(isDefined)
    52110       });
    52111       s.remove(node.start, node.end);
    52112       for (const spec of node.specifiers) {
    52113         if (spec.type === "ImportSpecifier") {
    52114           if (spec.imported.type === "Identifier") {
    52115             idToImportMap.set(
    52116               spec.local.name,
    52117               `${importId}.${spec.imported.name}`
    52118             );
    52119           } else {
    52120             idToImportMap.set(
    52121               spec.local.name,
    52122               `${importId}[${// @ts-expect-error TODO: Estree types don't consider arbitrary module namespace specifiers yet
    52123               JSON.stringify(spec.imported.value)}]`
    52124             );
    52125           }
    52126         } else if (spec.type === "ImportDefaultSpecifier") {
    52127           idToImportMap.set(spec.local.name, `${importId}.default`);
     52424      imports.push(node);
     52425    } else if (node.type === "ExportNamedDeclaration" || node.type === "ExportDefaultDeclaration" || node.type === "ExportAllDeclaration") {
     52426      exports.push(node);
     52427    }
     52428  }
     52429  for (const node of imports) {
     52430    const importId = defineImport(hoistIndex, node.source.value, {
     52431      importedNames: node.specifiers.map((s2) => {
     52432        if (s2.type === "ImportSpecifier")
     52433          return s2.imported.type === "Identifier" ? s2.imported.name : (
     52434            // @ts-expect-error TODO: Estree types don't consider arbitrary module namespace specifiers yet
     52435            s2.imported.value
     52436          );
     52437        else if (s2.type === "ImportDefaultSpecifier") return "default";
     52438      }).filter(isDefined)
     52439    });
     52440    s.remove(node.start, node.end);
     52441    for (const spec of node.specifiers) {
     52442      if (spec.type === "ImportSpecifier") {
     52443        if (spec.imported.type === "Identifier") {
     52444          idToImportMap.set(
     52445            spec.local.name,
     52446            `${importId}.${spec.imported.name}`
     52447          );
    5212852448        } else {
    52129           idToImportMap.set(spec.local.name, importId);
    52130         }
    52131       }
    52132     }
    52133   }
    52134   for (const node of ast.body) {
     52449          idToImportMap.set(
     52450            spec.local.name,
     52451            `${importId}[${// @ts-expect-error TODO: Estree types don't consider arbitrary module namespace specifiers yet
     52452            JSON.stringify(spec.imported.value)}]`
     52453          );
     52454        }
     52455      } else if (spec.type === "ImportDefaultSpecifier") {
     52456        idToImportMap.set(spec.local.name, `${importId}.default`);
     52457      } else {
     52458        idToImportMap.set(spec.local.name, importId);
     52459      }
     52460    }
     52461  }
     52462  for (const node of exports) {
    5213552463    if (node.type === "ExportNamedDeclaration") {
    5213652464      if (node.declaration) {
     
    5224852576  });
    5224952577  let map = s.generateMap({ hires: "boundary" });
     52578  map.sources = [path$n.basename(url)];
     52579  map.sourcesContent = [originalCode];
    5225052580  if (inMap && inMap.mappings && "sources" in inMap && inMap.sources.length > 0) {
    5225152581    map = combineSourcemaps(url, [
    52252       {
    52253         ...map,
    52254         sources: inMap.sources,
    52255         sourcesContent: inMap.sourcesContent
    52256       },
     52582      map,
    5225752583      inMap
    5225852584    ]);
    52259   } else {
    52260     map.sources = [path$n.basename(url)];
    52261     map.sourcesContent = [originalCode];
    5226252585  }
    5226352586  return {
     
    5252652849const pendingModuleDependencyGraph = /* @__PURE__ */ new Map();
    5252752850const importErrors = /* @__PURE__ */ new WeakMap();
    52528 async function ssrLoadModule(url, server, context = { global }, fixStacktrace) {
     52851async function ssrLoadModule(url, server, fixStacktrace) {
    5252952852  url = unwrapId$1(url);
    5253052853  const pending = pendingModules.get(url);
     
    5253252855    return pending;
    5253352856  }
    52534   const modulePromise = instantiateModule(url, server, context, fixStacktrace);
     52857  const modulePromise = instantiateModule(url, server, fixStacktrace);
    5253552858  pendingModules.set(url, modulePromise);
    5253652859  modulePromise.catch(() => {
     
    5254052863  return modulePromise;
    5254152864}
    52542 async function instantiateModule(url, server, context = { global }, fixStacktrace) {
     52865async function instantiateModule(url, server, fixStacktrace) {
    5254352866  const { moduleGraph } = server;
    5254452867  const mod = await moduleGraph.ensureEntryFromUrl(url, true);
     
    5260452927        }
    5260552928      }
    52606       return ssrLoadModule(dep, server, context, fixStacktrace);
     52929      return ssrLoadModule(dep, server, fixStacktrace);
    5260752930    } catch (err) {
    5260852931      importErrors.set(err, { importee: dep });
     
    5263952962  try {
    5264052963    const initModule = new AsyncFunction(
    52641       `global`,
    5264252964      ssrModuleExportsKey,
    5264352965      ssrImportMetaKey,
     
    5264952971    );
    5265052972    await initModule(
    52651       context.global,
    5265252973      ssrModule,
    5265352974      ssrImportMeta,
     
    5403654357    if (!normalizePath$3(outDir).startsWith(withTrailingSlash(root))) {
    5403754358      logger?.warn(
    54038         picocolorsExports.yellow(
     54359        colors$1.yellow(
    5403954360          `
    54040 ${picocolorsExports.bold(`(!)`)} outDir ${picocolorsExports.white(
    54041             picocolorsExports.dim(outDir)
     54361${colors$1.bold(`(!)`)} outDir ${colors$1.white(
     54362            colors$1.dim(outDir)
    5404254363          )} is not inside project root and will not be emptied.
    5404354364Use --emptyOutDir to override.
     
    5405054371  return true;
    5405154372}
    54052 function resolveChokidarOptions(config, options, resolvedOutDirs, emptyOutDir) {
     54373function resolveChokidarOptions(options, resolvedOutDirs, emptyOutDir, cacheDir) {
    5405354374  const { ignored: ignoredList, ...otherOptions } = options ?? {};
    5405454375  const ignored = [
     
    5405754378    "**/test-results/**",
    5405854379    // Playwright
    54059     glob.escapePath(config.cacheDir) + "/**",
     54380    glob.escapePath(cacheDir) + "/**",
    5406054381    ...arraify(ignoredList || [])
    5406154382  ];
     
    6146361784    if (ifNoneMatch) {
    6146461785      const moduleByEtag = server.moduleGraph.getModuleByEtag(ifNoneMatch);
    61465       if (moduleByEtag?.transformResult?.etag === ifNoneMatch) {
     61786      if (moduleByEtag?.transformResult?.etag === ifNoneMatch && moduleByEtag?.url === req.url) {
    6146661787        const maybeMixedEtag = isCSSRequest(req.url);
    6146761788        if (!maybeMixedEtag) {
     
    6154161862        warnAboutExplicitPublicPathInUrl(url);
    6154261863      }
     61864      if ((rawRE.test(url) || urlRE.test(url)) && !ensureServingAccess(url, server, res, next)) {
     61865        return;
     61866      }
    6154361867      if (isJSRequest(url) || isImportRequest(url) || isCSSRequest(url) || isHTMLProxy(url)) {
    6154461868        url = removeImportQuery(url);
     
    6171362037      }
    6171462038      if (preTransformUrl) {
    61715         preTransformRequest(server, preTransformUrl, config.base);
     62039        try {
     62040          preTransformUrl = decodeURI(preTransformUrl);
     62041        } catch (err) {
     62042          return url2;
     62043        }
     62044        preTransformRequest(server, preTransformUrl, config.decodedBase);
    6171662045      }
    6171762046    }
     
    6172462053  const { config, moduleGraph, watcher } = server;
    6172562054  const base = config.base || "/";
     62055  const decodedBase = config.decodedBase || "/";
    6172662056  let proxyModulePath;
    6172762057  let proxyModuleUrl;
     
    6173562065    proxyModuleUrl = wrapId$1(proxyModulePath);
    6173662066  }
    61737   proxyModuleUrl = joinUrlSegments(base, proxyModuleUrl);
     62067  proxyModuleUrl = joinUrlSegments(decodedBase, proxyModuleUrl);
    6173862068  const s = new MagicString(html);
    6173962069  let inlineModuleIndex = -1;
     
    6176762097      `<script type="module" src="${modulePath}"><\/script>`
    6176862098    );
    61769     preTransformRequest(server, modulePath, base);
     62099    preTransformRequest(server, modulePath, decodedBase);
    6177062100  };
    6177162101  await traverseHtml(html, filename, (node) => {
     
    6192962259  };
    6193062260}
    61931 function preTransformRequest(server, url, base) {
     62261function preTransformRequest(server, decodedUrl, decodedBase) {
    6193262262  if (!server.config.server.preTransformRequests) return;
    61933   try {
    61934     url = unwrapId$1(stripBase(decodeURI(url), base));
    61935   } catch {
    61936     return;
    61937   }
    61938   server.warmupRequest(url);
     62263  decodedUrl = unwrapId$1(stripBase(decodedUrl, decodedBase));
     62264  server.warmupRequest(decodedUrl);
    6193962265}
    6194062266
     
    6210762433    mod.importers.forEach((importer) => {
    6210862434      if (!importer.acceptedHmrDeps.has(mod)) {
    62109         const shouldSoftInvalidateImporter = importer.staticImportedUrls?.has(mod.url) || softInvalidate;
     62435        const shouldSoftInvalidateImporter = (importer.staticImportedUrls?.has(mod.url) || softInvalidate) && importer.type !== "css";
    6211062436        this.invalidateModule(
    6211162437          importer,
     
    6244662772  );
    6244762773  const resolvedWatchOptions = resolveChokidarOptions(
    62448     config,
    6244962774    {
    6245062775      disableGlobbing: true,
     
    6245262777    },
    6245362778    resolvedOutDirs,
    62454     emptyOutDir
     62779    emptyOutDir,
     62780    config.cacheDir
    6245562781  );
    6245662782  const middlewares = connect$1();
     
    6253262858    },
    6253362859    async ssrLoadModule(url, opts) {
    62534       return ssrLoadModule(url, server, void 0, opts?.fixStacktrace);
     62860      return ssrLoadModule(url, server, opts?.fixStacktrace);
    6253562861    },
    6253662862    async ssrFetchModule(url, importer) {
     
    6302663352      seenIds.add(ignoredId);
    6302763353      markIdAsDone(ignoredId);
     63354    } else {
     63355      checkIfCrawlEndAfterTimeout();
    6302863356    }
    6302963357    return onCrawlEndPromiseWithResolvers.promise;
    6303063358  }
    6303163359  function markIdAsDone(id) {
    63032     if (registeredIds.has(id)) {
    63033       registeredIds.delete(id);
    63034       checkIfCrawlEndAfterTimeout();
    63035     }
     63360    registeredIds.delete(id);
     63361    checkIfCrawlEndAfterTimeout();
    6303663362  }
    6303763363  function checkIfCrawlEndAfterTimeout() {
     
    6374264068            url = injectQuery(url, "import");
    6374364069          } else if ((isRelative || isSelfImport) && !DEP_VERSION_RE.test(url)) {
    63744             const versionMatch = importer.match(DEP_VERSION_RE);
     64070            const versionMatch = DEP_VERSION_RE.exec(importer);
    6374564071            if (versionMatch) {
    6374664072              url = injectQuery(url, versionMatch[1]);
     
    6418364509  }
    6418464510  const pathname = url.replace(/[?#].*$/, "");
    64185   const { search, hash } = new URL(url, "http://vitejs.dev");
     64511  const { search, hash } = new URL(url, "http://vite.dev");
    6418664512  return `${pathname}?${queryToInject}${search ? `&` + search.slice(1) : ""}${hash || ""}`;
    6418764513}
     
    6421564541    );
    6421664542    const cspNonce = cspNonceMeta?.nonce || cspNonceMeta?.getAttribute("nonce");
    64217     promise = Promise.all(
     64543    promise = Promise.allSettled(
    6421864544      deps.map((dep) => {
    6421964545        dep = assetsURL(dep, importerUrl);
     
    6423764563        if (!isCss) {
    6423864564          link.as = "script";
    64239           link.crossOrigin = "";
    64240         }
     64565        }
     64566        link.crossOrigin = "";
    6424164567        link.href = dep;
    6424264568        if (cspNonce) {
     
    6425664582    );
    6425764583  }
    64258   return promise.then(() => baseModule()).catch((err) => {
    64259     const e = new Event("vite:preloadError", { cancelable: true });
     64584  function handlePreloadError(err) {
     64585    const e = new Event("vite:preloadError", {
     64586      cancelable: true
     64587    });
    6426064588    e.payload = err;
    6426164589    window.dispatchEvent(e);
     
    6426364591      throw err;
    6426464592    }
     64593  }
     64594  return promise.then((res) => {
     64595    for (const item of res || []) {
     64596      if (item.status !== "rejected") continue;
     64597      handlePreloadError(item.reason);
     64598    }
     64599    return baseModule().catch(handlePreloadError);
    6426564600  });
    6426664601}
     
    6426964604  const isWorker = config.isWorker;
    6427064605  const insertPreload = !(ssr || !!config.build.lib || isWorker);
    64271   const resolveModulePreloadDependencies = config.build.modulePreload && config.build.modulePreload.resolveDependencies;
    6427264606  const renderBuiltUrl = config.experimental.renderBuiltUrl;
    64273   const customModulePreloadPaths = !!(resolveModulePreloadDependencies || renderBuiltUrl);
    6427464607  const isRelativeBase = config.base === "./" || config.base === "";
    64275   const optimizeModulePreloadRelativePaths = isRelativeBase && !customModulePreloadPaths;
    6427664608  const { modulePreload } = config.build;
    6427764609  const scriptRel2 = modulePreload && modulePreload.polyfill ? `'modulepreload'` : `(${detectScriptRel.toString()})()`;
    64278   const assetsURL2 = customModulePreloadPaths ? (
    64279     // If `experimental.renderBuiltUrl` or `build.modulePreload.resolveDependencies` are used
    64280     // the dependencies are already resolved. To avoid the need for `new URL(dep, import.meta.url)`
    64281     // a helper `__vitePreloadRelativeDep` is used to resolve from relative paths which can be minimized.
    64282     `function(dep, importerUrl) { return dep[0] === '.' ? new URL(dep, importerUrl).href : dep }`
    64283   ) : optimizeModulePreloadRelativePaths ? (
    64284     // If there isn't custom resolvers affecting the deps list, deps in the list are relative
    64285     // to the current chunk and are resolved to absolute URL by the __vitePreload helper itself.
     64610  const assetsURL2 = renderBuiltUrl || isRelativeBase ? (
     64611    // If `experimental.renderBuiltUrl` is used, the dependencies might be relative to the current chunk.
     64612    // If relative base is used, the dependencies are relative to the current chunk.
    6428664613    // The importerUrl is passed as third parameter to __vitePreload in this case
    6428764614    `function(dep, importerUrl) { return new URL(dep, importerUrl).href }`
     
    6433564662          }
    6433664663          if (match[3]) {
    64337             let names2 = match[4].match(/\.([^.?]+)/)?.[1] || "";
     64664            let names2 = /\.([^.?]+)/.exec(match[4])?.[1] || "";
    6433864665            if (names2 === "default") {
    6433964666              names2 = "default: __vite_default__";
     
    6437764704          str().appendRight(
    6437864705            expEnd,
    64379             `,${isModernFlag}?${preloadMarker}:void 0${optimizeModulePreloadRelativePaths || customModulePreloadPaths ? ",import.meta.url" : ""})`
     64706            `,${isModernFlag}?${preloadMarker}:void 0${renderBuiltUrl || isRelativeBase ? ",import.meta.url" : ""})`
    6438064707          );
    6438164708        }
     
    6455864885              }
    6455964886              if (markerStartPos2 > 0) {
    64560                 const depsArray = deps.size > 1 || // main chunk is removed
     64887                let depsArray = deps.size > 1 || // main chunk is removed
    6456164888                hasRemovedPureCssChunk && deps.size > 0 ? modulePreload === false ? (
    6456264889                  // CSS deps use the same mechanism as module preloads, so even if disabled,
     
    6456464891                  [...deps].filter((d) => d.endsWith(".css"))
    6456564892                ) : [...deps] : [];
     64893                const resolveDependencies = modulePreload ? modulePreload.resolveDependencies : void 0;
     64894                if (resolveDependencies && normalizedFile) {
     64895                  const cssDeps = [];
     64896                  const otherDeps = [];
     64897                  for (const dep of depsArray) {
     64898                    (dep.endsWith(".css") ? cssDeps : otherDeps).push(dep);
     64899                  }
     64900                  depsArray = [
     64901                    ...resolveDependencies(normalizedFile, otherDeps, {
     64902                      hostId: file,
     64903                      hostType: "js"
     64904                    }),
     64905                    ...cssDeps
     64906                  ];
     64907                }
    6456664908                let renderedDeps;
    64567                 if (normalizedFile && customModulePreloadPaths) {
    64568                   const { modulePreload: modulePreload2 } = config.build;
    64569                   const resolveDependencies = modulePreload2 ? modulePreload2.resolveDependencies : void 0;
    64570                   let resolvedDeps;
    64571                   if (resolveDependencies) {
    64572                     const cssDeps = [];
    64573                     const otherDeps = [];
    64574                     for (const dep of depsArray) {
    64575                       (dep.endsWith(".css") ? cssDeps : otherDeps).push(dep);
    64576                     }
    64577                     resolvedDeps = [
    64578                       ...resolveDependencies(normalizedFile, otherDeps, {
    64579                         hostId: file,
    64580                         hostType: "js"
    64581                       }),
    64582                       ...cssDeps
    64583                     ];
    64584                   } else {
    64585                     resolvedDeps = depsArray;
    64586                   }
    64587                   renderedDeps = resolvedDeps.map((dep) => {
     64909                if (renderBuiltUrl) {
     64910                  renderedDeps = depsArray.map((dep) => {
    6458864911                    const replacement = toOutputFilePathInJS(
    6458964912                      dep,
     
    6460464927                      // Don't include the assets dir if the default asset file names
    6460564928                      // are used, the path will be reconstructed by the import preload helper
    64606                       optimizeModulePreloadRelativePaths ? addFileDep(toRelativePath(d, file)) : addFileDep(d)
     64929                      isRelativeBase ? addFileDep(toRelativePath(d, file)) : addFileDep(d)
    6460764930                    )
    6460864931                  );
     
    6491965242  );
    6492065243  const options = config.build;
     65244  const { root, logger, packageCache } = config;
    6492165245  const ssr = !!options.ssr;
    6492265246  const libOptions = options.lib;
    64923   config.logger.info(
     65247  logger.info(
    6492465248    colors$1.cyan(
    6492565249      `vite v${VERSION} ${colors$1.green(
     
    6492865252    )
    6492965253  );
    64930   const resolve = (p) => path$n.resolve(config.root, p);
     65254  const resolve = (p) => path$n.resolve(root, p);
    6493165255  const input = libOptions ? options.rollupOptions?.input || (typeof libOptions.entry === "string" ? resolve(libOptions.entry) : Array.isArray(libOptions.entry) ? libOptions.entry.map(resolve) : Object.fromEntries(
    6493265256    Object.entries(libOptions.entry).map(([alias, file]) => [
     
    6500165325    enhanceRollupError(e);
    6500265326    clearLine();
    65003     config.logger.error(e.message, { error: e });
     65327    logger.error(e.message, { error: e });
    6500465328  };
    6500565329  let bundle;
     
    6500865332    const buildOutputOptions = (output = {}) => {
    6500965333      if (output.output) {
    65010         config.logger.warn(
     65334        logger.warn(
    6501165335          `You've set "rollupOptions.output.output" in your config. This is deprecated and will override all Vite.js default output options. Please use "rollupOptions.output" instead.`
    6501265336        );
     
    6501865342      }
    6501965343      if (output.sourcemap) {
    65020         config.logger.warnOnce(
     65344        logger.warnOnce(
    6502165345          colors$1.yellow(
    6502265346            `Vite does not support "rollupOptions.output.sourcemap". Please use "build.sourcemap" instead.`
     
    6502965353      const jsExt = ssrNodeBuild || libOptions ? resolveOutputJsExtension(
    6503065354        format,
    65031         findNearestPackageData(config.root, config.packageCache)?.data.type
     65355        findNearestPackageData(root, packageCache)?.data.type
    6503265356      ) : "js";
    6503365357      return {
     
    6504765371          format,
    6504865372          name,
    65049           config.root,
     65373          root,
    6505065374          jsExt,
    65051           config.packageCache
     65375          packageCache
    6505265376        ) : path$n.posix.join(options.assetsDir, `[name]-[hash].${jsExt}`),
    6505365377        chunkFileNames: libOptions ? `[name]-[hash].${jsExt}` : path$n.posix.join(options.assetsDir, `[name]-[hash].${jsExt}`),
     
    6506065384      options.rollupOptions?.output,
    6506165385      libOptions,
    65062       config.logger
     65386      logger
    6506365387    );
    6506465388    const normalizedOutputs = [];
     
    6507165395    }
    6507265396    const resolvedOutDirs = getResolvedOutDirs(
    65073       config.root,
     65397      root,
    6507465398      options.outDir,
    6507565399      options.rollupOptions?.output
     
    6507765401    const emptyOutDir = resolveEmptyOutDir(
    6507865402      options.emptyOutDir,
    65079       config.root,
     65403      root,
    6508065404      resolvedOutDirs,
    65081       config.logger
     65405      logger
    6508265406    );
    6508365407    if (config.build.watch) {
    65084       config.logger.info(colors$1.cyan(`
     65408      logger.info(colors$1.cyan(`
    6508565409watching for file changes...`));
    6508665410      const resolvedChokidarOptions = resolveChokidarOptions(
    65087         config,
    6508865411        config.build.watch.chokidar,
    6508965412        resolvedOutDirs,
    65090         emptyOutDir
     65413        emptyOutDir,
     65414        config.cacheDir
    6509165415      );
    6509265416      const { watch } = await import('rollup');
     
    6510165425      watcher.on("event", (event) => {
    6510265426        if (event.code === "BUNDLE_START") {
    65103           config.logger.info(colors$1.cyan(`
     65427          logger.info(colors$1.cyan(`
    6510465428build started...`));
    6510565429          if (options.write) {
     
    6510865432        } else if (event.code === "BUNDLE_END") {
    6510965433          event.result.close();
    65110           config.logger.info(colors$1.cyan(`built in ${event.duration}ms.`));
     65434          logger.info(colors$1.cyan(`built in ${event.duration}ms.`));
    6511165435        } else if (event.code === "ERROR") {
    6511265436          outputBuildError(event.error);
     
    6512565449      res.push(await bundle[options.write ? "write" : "generate"](output));
    6512665450    }
    65127     config.logger.info(
     65451    logger.info(
    6512865452      `${colors$1.green(`\u2713 built in ${displayTime(Date.now() - startTime)}`)}`
    6512965453    );
     
    6513365457    clearLine();
    6513465458    if (startTime) {
    65135       config.logger.error(
     65459      logger.error(
    6513665460        `${colors$1.red("x")} Build failed in ${displayTime(Date.now() - startTime)}`
    6513765461      );
     
    6538065704const getResolveUrl = (path2, URL = "URL") => `new ${URL}(${path2}).href`;
    6538165705const getRelativeUrlFromDocument = (relativePath, umd = false) => getResolveUrl(
    65382   `'${escapeId(partialEncodeURIPath(relativePath))}', ${umd ? `typeof document === 'undefined' ? location.href : ` : ""}document.currentScript && document.currentScript.src || document.baseURI`
     65706  `'${escapeId(partialEncodeURIPath(relativePath))}', ${umd ? `typeof document === 'undefined' ? location.href : ` : ""}document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT' && document.currentScript.src || document.baseURI`
    6538365707);
    6538465708const getFileUrlFromFullPath = (path2) => `require('u' + 'rl').pathToFileURL(${path2}).href`;
     
    6543665760    return toRelative(filename, hostId);
    6543765761  }
    65438   return joinUrlSegments(config.base, filename);
     65762  return joinUrlSegments(config.decodedBase, filename);
    6543965763}
    6544065764function createToImportMetaURLBasedRelativeRuntime(format, isWorker) {
     
    6547365797    return toRelative(filename, hostId);
    6547465798  } else {
    65475     return joinUrlSegments(config.base, filename);
     65799    return joinUrlSegments(config.decodedBase, filename);
    6547665800  }
    6547765801}
     
    6600566329    rollupOptions: config.worker?.rollupOptions || {}
    6600666330  };
     66331  const base = withTrailingSlash(resolvedBase);
    6600766332  resolved = {
    6600866333    configFile: configFile ? normalizePath$3(configFile) : void 0,
     
    6601266337    inlineConfig,
    6601366338    root: resolvedRoot,
    66014     base: withTrailingSlash(resolvedBase),
     66339    base,
     66340    decodedBase: decodeURI(base),
    6601566341    rawBase: resolvedBase,
    6601666342    resolve: resolveOptions,
     
    6616366489  }
    6616466490  if (!isBuild || !isExternal) {
    66165     base = new URL(base, "http://vitejs.dev").pathname;
     66491    base = new URL(base, "http://vite.dev").pathname;
    6616666492    if (base[0] !== "/") {
    6616766493      base = "/" + base;
     
    6620166527    return null;
    6620266528  }
    66203   const isESM = isFilePathESM(resolvedPath);
     66529  const isESM = typeof process.versions.deno === "string" || isFilePathESM(resolvedPath);
    6620466530  try {
    6620566531    const bundled = await bundleConfigFile(resolvedPath, isESM);
     
    6623766563    entryPoints: [fileName],
    6623866564    write: false,
    66239     target: ["node18"],
     66565    target: [`node${process.versions.node}`],
    6624066566    platform: "node",
    6624166567    bundle: true,
     
    6630666632                      `Failed to resolve ${JSON.stringify(
    6630766633                        id
    66308                       )}. This package is ESM only but it was tried to load by \`require\`. See https://vitejs.dev/guide/troubleshooting.html#this-package-is-esm-only for more details.`
     66634                      )}. This package is ESM only but it was tried to load by \`require\`. See https://vite.dev/guide/troubleshooting.html#this-package-is-esm-only for more details.`
    6630966635                    );
    6631066636                  }
     
    6631966645                  `${JSON.stringify(
    6632066646                    id
    66321                   )} resolved to an ESM file. ESM file cannot be loaded by \`require\`. See https://vitejs.dev/guide/troubleshooting.html#this-package-is-esm-only for more details.`
     66647                  )} resolved to an ESM file. ESM file cannot be loaded by \`require\`. See https://vite.dev/guide/troubleshooting.html#this-package-is-esm-only for more details.`
    6632266648                );
    6632366649              }
Note: See TracChangeset for help on using the changeset viewer.