{"version":3,"file":"index.mjs","names":["astMatcher"],"sources":["../../../../node_modules/.bun/@jridgewell+sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs","../../../../node_modules/.bun/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.mjs","../../../../node_modules/.bun/ast-matcher@1.2.0/node_modules/ast-matcher/index.js","../../../utils/src/ast-replacer.ts","../src/ansi-to-html.ts","../src/index.ts"],"sourcesContent":["// src/vlq.ts\nvar comma = \",\".charCodeAt(0);\nvar semicolon = \";\".charCodeAt(0);\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar intToChar = new Uint8Array(64);\nvar charToInt = new Uint8Array(128);\nfor (let i = 0; i < chars.length; i++) {\n  const c = chars.charCodeAt(i);\n  intToChar[i] = c;\n  charToInt[c] = i;\n}\nfunction decodeInteger(reader, relative) {\n  let value = 0;\n  let shift = 0;\n  let integer = 0;\n  do {\n    const c = reader.next();\n    integer = charToInt[c];\n    value |= (integer & 31) << shift;\n    shift += 5;\n  } while (integer & 32);\n  const shouldNegate = value & 1;\n  value >>>= 1;\n  if (shouldNegate) {\n    value = -2147483648 | -value;\n  }\n  return relative + value;\n}\nfunction encodeInteger(builder, num, relative) {\n  let delta = num - relative;\n  delta = delta < 0 ? -delta << 1 | 1 : delta << 1;\n  do {\n    let clamped = delta & 31;\n    delta >>>= 5;\n    if (delta > 0) clamped |= 32;\n    builder.write(intToChar[clamped]);\n  } while (delta > 0);\n  return num;\n}\nfunction hasMoreVlq(reader, max) {\n  if (reader.pos >= max) return false;\n  return reader.peek() !== comma;\n}\n\n// src/strings.ts\nvar bufLength = 1024 * 16;\nvar td = typeof TextDecoder !== \"undefined\" ? /* @__PURE__ */ new TextDecoder() : typeof Buffer !== \"undefined\" ? {\n  decode(buf) {\n    const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\n    return out.toString();\n  }\n} : {\n  decode(buf) {\n    let out = \"\";\n    for (let i = 0; i < buf.length; i++) {\n      out += String.fromCharCode(buf[i]);\n    }\n    return out;\n  }\n};\nvar StringWriter = class {\n  constructor() {\n    this.pos = 0;\n    this.out = \"\";\n    this.buffer = new Uint8Array(bufLength);\n  }\n  write(v) {\n    const { buffer } = this;\n    buffer[this.pos++] = v;\n    if (this.pos === bufLength) {\n      this.out += td.decode(buffer);\n      this.pos = 0;\n    }\n  }\n  flush() {\n    const { buffer, out, pos } = this;\n    return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out;\n  }\n};\nvar StringReader = class {\n  constructor(buffer) {\n    this.pos = 0;\n    this.buffer = buffer;\n  }\n  next() {\n    return this.buffer.charCodeAt(this.pos++);\n  }\n  peek() {\n    return this.buffer.charCodeAt(this.pos);\n  }\n  indexOf(char) {\n    const { buffer, pos } = this;\n    const idx = buffer.indexOf(char, pos);\n    return idx === -1 ? buffer.length : idx;\n  }\n};\n\n// src/scopes.ts\nvar EMPTY = [];\nfunction decodeOriginalScopes(input) {\n  const { length } = input;\n  const reader = new StringReader(input);\n  const scopes = [];\n  const stack = [];\n  let line = 0;\n  for (; reader.pos < length; reader.pos++) {\n    line = decodeInteger(reader, line);\n    const column = decodeInteger(reader, 0);\n    if (!hasMoreVlq(reader, length)) {\n      const last = stack.pop();\n      last[2] = line;\n      last[3] = column;\n      continue;\n    }\n    const kind = decodeInteger(reader, 0);\n    const fields = decodeInteger(reader, 0);\n    const hasName = fields & 1;\n    const scope = hasName ? [line, column, 0, 0, kind, decodeInteger(reader, 0)] : [line, column, 0, 0, kind];\n    let vars = EMPTY;\n    if (hasMoreVlq(reader, length)) {\n      vars = [];\n      do {\n        const varsIndex = decodeInteger(reader, 0);\n        vars.push(varsIndex);\n      } while (hasMoreVlq(reader, length));\n    }\n    scope.vars = vars;\n    scopes.push(scope);\n    stack.push(scope);\n  }\n  return scopes;\n}\nfunction encodeOriginalScopes(scopes) {\n  const writer = new StringWriter();\n  for (let i = 0; i < scopes.length; ) {\n    i = _encodeOriginalScopes(scopes, i, writer, [0]);\n  }\n  return writer.flush();\n}\nfunction _encodeOriginalScopes(scopes, index, writer, state) {\n  const scope = scopes[index];\n  const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, 4: kind, vars } = scope;\n  if (index > 0) writer.write(comma);\n  state[0] = encodeInteger(writer, startLine, state[0]);\n  encodeInteger(writer, startColumn, 0);\n  encodeInteger(writer, kind, 0);\n  const fields = scope.length === 6 ? 1 : 0;\n  encodeInteger(writer, fields, 0);\n  if (scope.length === 6) encodeInteger(writer, scope[5], 0);\n  for (const v of vars) {\n    encodeInteger(writer, v, 0);\n  }\n  for (index++; index < scopes.length; ) {\n    const next = scopes[index];\n    const { 0: l, 1: c } = next;\n    if (l > endLine || l === endLine && c >= endColumn) {\n      break;\n    }\n    index = _encodeOriginalScopes(scopes, index, writer, state);\n  }\n  writer.write(comma);\n  state[0] = encodeInteger(writer, endLine, state[0]);\n  encodeInteger(writer, endColumn, 0);\n  return index;\n}\nfunction decodeGeneratedRanges(input) {\n  const { length } = input;\n  const reader = new StringReader(input);\n  const ranges = [];\n  const stack = [];\n  let genLine = 0;\n  let definitionSourcesIndex = 0;\n  let definitionScopeIndex = 0;\n  let callsiteSourcesIndex = 0;\n  let callsiteLine = 0;\n  let callsiteColumn = 0;\n  let bindingLine = 0;\n  let bindingColumn = 0;\n  do {\n    const semi = reader.indexOf(\";\");\n    let genColumn = 0;\n    for (; reader.pos < semi; reader.pos++) {\n      genColumn = decodeInteger(reader, genColumn);\n      if (!hasMoreVlq(reader, semi)) {\n        const last = stack.pop();\n        last[2] = genLine;\n        last[3] = genColumn;\n        continue;\n      }\n      const fields = decodeInteger(reader, 0);\n      const hasDefinition = fields & 1;\n      const hasCallsite = fields & 2;\n      const hasScope = fields & 4;\n      let callsite = null;\n      let bindings = EMPTY;\n      let range;\n      if (hasDefinition) {\n        const defSourcesIndex = decodeInteger(reader, definitionSourcesIndex);\n        definitionScopeIndex = decodeInteger(\n          reader,\n          definitionSourcesIndex === defSourcesIndex ? definitionScopeIndex : 0\n        );\n        definitionSourcesIndex = defSourcesIndex;\n        range = [genLine, genColumn, 0, 0, defSourcesIndex, definitionScopeIndex];\n      } else {\n        range = [genLine, genColumn, 0, 0];\n      }\n      range.isScope = !!hasScope;\n      if (hasCallsite) {\n        const prevCsi = callsiteSourcesIndex;\n        const prevLine = callsiteLine;\n        callsiteSourcesIndex = decodeInteger(reader, callsiteSourcesIndex);\n        const sameSource = prevCsi === callsiteSourcesIndex;\n        callsiteLine = decodeInteger(reader, sameSource ? callsiteLine : 0);\n        callsiteColumn = decodeInteger(\n          reader,\n          sameSource && prevLine === callsiteLine ? callsiteColumn : 0\n        );\n        callsite = [callsiteSourcesIndex, callsiteLine, callsiteColumn];\n      }\n      range.callsite = callsite;\n      if (hasMoreVlq(reader, semi)) {\n        bindings = [];\n        do {\n          bindingLine = genLine;\n          bindingColumn = genColumn;\n          const expressionsCount = decodeInteger(reader, 0);\n          let expressionRanges;\n          if (expressionsCount < -1) {\n            expressionRanges = [[decodeInteger(reader, 0)]];\n            for (let i = -1; i > expressionsCount; i--) {\n              const prevBl = bindingLine;\n              bindingLine = decodeInteger(reader, bindingLine);\n              bindingColumn = decodeInteger(reader, bindingLine === prevBl ? bindingColumn : 0);\n              const expression = decodeInteger(reader, 0);\n              expressionRanges.push([expression, bindingLine, bindingColumn]);\n            }\n          } else {\n            expressionRanges = [[expressionsCount]];\n          }\n          bindings.push(expressionRanges);\n        } while (hasMoreVlq(reader, semi));\n      }\n      range.bindings = bindings;\n      ranges.push(range);\n      stack.push(range);\n    }\n    genLine++;\n    reader.pos = semi + 1;\n  } while (reader.pos < length);\n  return ranges;\n}\nfunction encodeGeneratedRanges(ranges) {\n  if (ranges.length === 0) return \"\";\n  const writer = new StringWriter();\n  for (let i = 0; i < ranges.length; ) {\n    i = _encodeGeneratedRanges(ranges, i, writer, [0, 0, 0, 0, 0, 0, 0]);\n  }\n  return writer.flush();\n}\nfunction _encodeGeneratedRanges(ranges, index, writer, state) {\n  const range = ranges[index];\n  const {\n    0: startLine,\n    1: startColumn,\n    2: endLine,\n    3: endColumn,\n    isScope,\n    callsite,\n    bindings\n  } = range;\n  if (state[0] < startLine) {\n    catchupLine(writer, state[0], startLine);\n    state[0] = startLine;\n    state[1] = 0;\n  } else if (index > 0) {\n    writer.write(comma);\n  }\n  state[1] = encodeInteger(writer, range[1], state[1]);\n  const fields = (range.length === 6 ? 1 : 0) | (callsite ? 2 : 0) | (isScope ? 4 : 0);\n  encodeInteger(writer, fields, 0);\n  if (range.length === 6) {\n    const { 4: sourcesIndex, 5: scopesIndex } = range;\n    if (sourcesIndex !== state[2]) {\n      state[3] = 0;\n    }\n    state[2] = encodeInteger(writer, sourcesIndex, state[2]);\n    state[3] = encodeInteger(writer, scopesIndex, state[3]);\n  }\n  if (callsite) {\n    const { 0: sourcesIndex, 1: callLine, 2: callColumn } = range.callsite;\n    if (sourcesIndex !== state[4]) {\n      state[5] = 0;\n      state[6] = 0;\n    } else if (callLine !== state[5]) {\n      state[6] = 0;\n    }\n    state[4] = encodeInteger(writer, sourcesIndex, state[4]);\n    state[5] = encodeInteger(writer, callLine, state[5]);\n    state[6] = encodeInteger(writer, callColumn, state[6]);\n  }\n  if (bindings) {\n    for (const binding of bindings) {\n      if (binding.length > 1) encodeInteger(writer, -binding.length, 0);\n      const expression = binding[0][0];\n      encodeInteger(writer, expression, 0);\n      let bindingStartLine = startLine;\n      let bindingStartColumn = startColumn;\n      for (let i = 1; i < binding.length; i++) {\n        const expRange = binding[i];\n        bindingStartLine = encodeInteger(writer, expRange[1], bindingStartLine);\n        bindingStartColumn = encodeInteger(writer, expRange[2], bindingStartColumn);\n        encodeInteger(writer, expRange[0], 0);\n      }\n    }\n  }\n  for (index++; index < ranges.length; ) {\n    const next = ranges[index];\n    const { 0: l, 1: c } = next;\n    if (l > endLine || l === endLine && c >= endColumn) {\n      break;\n    }\n    index = _encodeGeneratedRanges(ranges, index, writer, state);\n  }\n  if (state[0] < endLine) {\n    catchupLine(writer, state[0], endLine);\n    state[0] = endLine;\n    state[1] = 0;\n  } else {\n    writer.write(comma);\n  }\n  state[1] = encodeInteger(writer, endColumn, state[1]);\n  return index;\n}\nfunction catchupLine(writer, lastLine, line) {\n  do {\n    writer.write(semicolon);\n  } while (++lastLine < line);\n}\n\n// src/sourcemap-codec.ts\nfunction decode(mappings) {\n  const { length } = mappings;\n  const reader = new StringReader(mappings);\n  const decoded = [];\n  let genColumn = 0;\n  let sourcesIndex = 0;\n  let sourceLine = 0;\n  let sourceColumn = 0;\n  let namesIndex = 0;\n  do {\n    const semi = reader.indexOf(\";\");\n    const line = [];\n    let sorted = true;\n    let lastCol = 0;\n    genColumn = 0;\n    while (reader.pos < semi) {\n      let seg;\n      genColumn = decodeInteger(reader, genColumn);\n      if (genColumn < lastCol) sorted = false;\n      lastCol = genColumn;\n      if (hasMoreVlq(reader, semi)) {\n        sourcesIndex = decodeInteger(reader, sourcesIndex);\n        sourceLine = decodeInteger(reader, sourceLine);\n        sourceColumn = decodeInteger(reader, sourceColumn);\n        if (hasMoreVlq(reader, semi)) {\n          namesIndex = decodeInteger(reader, namesIndex);\n          seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex];\n        } else {\n          seg = [genColumn, sourcesIndex, sourceLine, sourceColumn];\n        }\n      } else {\n        seg = [genColumn];\n      }\n      line.push(seg);\n      reader.pos++;\n    }\n    if (!sorted) sort(line);\n    decoded.push(line);\n    reader.pos = semi + 1;\n  } while (reader.pos <= length);\n  return decoded;\n}\nfunction sort(line) {\n  line.sort(sortComparator);\n}\nfunction sortComparator(a, b) {\n  return a[0] - b[0];\n}\nfunction encode(decoded) {\n  const writer = new StringWriter();\n  let sourcesIndex = 0;\n  let sourceLine = 0;\n  let sourceColumn = 0;\n  let namesIndex = 0;\n  for (let i = 0; i < decoded.length; i++) {\n    const line = decoded[i];\n    if (i > 0) writer.write(semicolon);\n    if (line.length === 0) continue;\n    let genColumn = 0;\n    for (let j = 0; j < line.length; j++) {\n      const segment = line[j];\n      if (j > 0) writer.write(comma);\n      genColumn = encodeInteger(writer, segment[0], genColumn);\n      if (segment.length === 1) continue;\n      sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex);\n      sourceLine = encodeInteger(writer, segment[2], sourceLine);\n      sourceColumn = encodeInteger(writer, segment[3], sourceColumn);\n      if (segment.length === 4) continue;\n      namesIndex = encodeInteger(writer, segment[4], namesIndex);\n    }\n  }\n  return writer.flush();\n}\nexport {\n  decode,\n  decodeGeneratedRanges,\n  decodeOriginalScopes,\n  encode,\n  encodeGeneratedRanges,\n  encodeOriginalScopes\n};\n//# sourceMappingURL=sourcemap-codec.mjs.map\n","import { encode } from '@jridgewell/sourcemap-codec';\n\nclass BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}\n\nclass Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t{\n\t\t\tthis.previous = null;\n\t\t\tthis.next = null;\n\t\t}\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\treset() {\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\t\tif (this.edited) {\n\t\t\tthis.content = this.original;\n\t\t\tthis.storeName = false;\n\t\t\tthis.edited = false;\n\t\t}\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// after split we should save the edit content record into the correct chunk\n\t\t\t// to make sure sourcemap correct\n\t\t\t// For example:\n\t\t\t// '  test'.trim()\n\t\t\t//     split   -> '  ' + 'test'\n\t\t\t//   ✔️ edit    -> '' + 'test'\n\t\t\t//   ✖️ edit    -> 'test' + ''\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t\tif (this.edited) {\n\t\t\t\t\t// save the change, if it has been edited\n\t\t\t\t\tthis.edit(trimmed, this.storeName, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tconst newChunk = this.split(this.end - trimmed.length);\n\t\t\t\tif (this.edited) {\n\t\t\t\t\t// save the change, if it has been edited\n\t\t\t\t\tnewChunk.edit(trimmed, this.storeName, true);\n\t\t\t\t}\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n\nfunction getBtoa() {\n\tif (typeof globalThis !== 'undefined' && typeof globalThis.btoa === 'function') {\n\t\treturn (str) => globalThis.btoa(unescape(encodeURIComponent(str)));\n\t} else if (typeof Buffer === 'function') {\n\t\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\n\t} else {\n\t\treturn () => {\n\t\t\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n\t\t};\n\t}\n}\n\nconst btoa = /*#__PURE__*/ getBtoa();\n\nclass SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = encode(properties.mappings);\n\t\tif (typeof properties.x_google_ignoreList !== 'undefined') {\n\t\t\tthis.x_google_ignoreList = properties.x_google_ignoreList;\n\t\t}\n\t\tif (typeof properties.debugId !== 'undefined') {\n\t\t\tthis.debugId = properties.debugId;\n\t\t}\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n\nfunction guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n\nfunction getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n\nconst toString = Object.prototype.toString;\n\nfunction isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n\nfunction getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n\nconst wordRegex = /\\w/;\n\nclass Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst contentLengthMinusOne = content.length - 1;\n\t\t\tlet contentLineEnd = content.indexOf('\\n', 0);\n\t\t\tlet previousContentLineEnd = -1;\n\t\t\t// Loop through each line in the content and add a segment, but stop if the last line is empty,\n\t\t\t// else code afterwards would fill one line too many\n\t\t\twhile (contentLineEnd >= 0 && contentLengthMinusOne > contentLineEnd) {\n\t\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\t\tif (nameIndex >= 0) {\n\t\t\t\t\tsegment.push(nameIndex);\n\t\t\t\t}\n\t\t\t\tthis.rawSegments.push(segment);\n\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\n\t\t\t\tpreviousContentLineEnd = contentLineEnd;\n\t\t\t\tcontentLineEnd = content.indexOf('\\n', contentLineEnd + 1);\n\t\t\t}\n\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\n\t\t\tthis.advance(content.slice(previousContentLineEnd + 1));\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t\tthis.advance(content);\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\t\t// when iterating each char, check if it's in a word boundary\n\t\tlet charInHiresBoundary = false;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t\tcharInHiresBoundary = false;\n\t\t\t} else {\n\t\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\n\t\t\t\t\tif (this.hires === 'boundary') {\n\t\t\t\t\t\t// in hires \"boundary\", group segments per word boundary than per char\n\t\t\t\t\t\tif (wordRegex.test(original[originalCharIndex])) {\n\t\t\t\t\t\t\t// for first char in the boundary found, start the boundary by pushing a segment\n\t\t\t\t\t\t\tif (!charInHiresBoundary) {\n\t\t\t\t\t\t\t\tthis.rawSegments.push(segment);\n\t\t\t\t\t\t\t\tcharInHiresBoundary = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// for non-word char, end the boundary by pushing a segment\n\t\t\t\t\t\t\tthis.rawSegments.push(segment);\n\t\t\t\t\t\t\tcharInHiresBoundary = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.rawSegments.push(segment);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false,\n};\n\nclass MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: undefined },\n\t\t\tignoreList: { writable: true, value: options.ignoreList },\n\t\t\toffset: { writable: true, value: options.offset || 0 },\n\t\t});\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tindex = index + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tindex = index + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename, offset: this.offset });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext((chunk) => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\tif (this.outro) {\n\t\t\tmappings.advance(this.outro);\n\t\t}\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : undefined,\n\t\t\tsources: [\n\t\t\t\toptions.source ? getRelativePath(options.file || '', options.source) : options.file || '',\n\t\t\t],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : undefined,\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t\tx_google_ignoreList: this.ignoreList ? [sourceIndex] : undefined,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\t_ensureindentStr() {\n\t\tif (this.indentStr === undefined) {\n\t\t\tthis.indentStr = guessIndent(this.original);\n\t\t}\n\t}\n\n\t_getRawIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr;\n\t}\n\n\tgetIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tif (indentStr === undefined) {\n\t\t\tthis._ensureindentStr();\n\t\t\tindentStr = this.indentStr || '\\t';\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach((exclusion) => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = (match) => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error(\n\t\t\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)',\n\t\t);\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead',\n\t\t\t);\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead',\n\t\t\t);\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\t\tindex = index + this.offset;\n\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\toptions = options || {};\n\t\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\n\t}\n\n\tupdate(start, end, content, options) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\tif (this.original.length !== 0) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\t\t}\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead',\n\t\t\t);\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string',\n\t\t\t\t);\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst overwrite = options !== undefined ? options.overwrite : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tObject.defineProperty(this.storedNames, original, {\n\t\t\t\twritable: true,\n\t\t\t\tvalue: true,\n\t\t\t\tenumerable: true,\n\t\t\t});\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tlet chunk = first;\n\t\t\twhile (chunk !== last) {\n\t\t\t\tif (chunk.next !== this.byStart[chunk.end]) {\n\t\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t\t}\n\t\t\t\tchunk = chunk.next;\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, !overwrite);\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tindex = index + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tindex = index + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\n\t\tif (this.original.length !== 0) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\t\t}\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\t\treturn this;\n\t}\n\n\treset(start, end) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\n\t\tif (this.original.length !== 0) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\t\t}\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.reset();\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length) return this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\n\t\t} while ((chunk = chunk.previous));\n\t\tif (this.intro.length) return this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while ((chunk = chunk.previous));\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length - this.offset) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\n\t\tif (this.original.length !== 0) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\t\t}\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tlet previousChunk = chunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\n\t\t\t// Prevent infinite loop (e.g. via empty chunks, where start === end)\n\t\t\tif (chunk === previousChunk) return;\n\n\t\t\tpreviousChunk = chunk;\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${chunk.original}\")`,\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (\n\t\t\t\t(chunk.intro.length && chunk.intro.trim()) ||\n\t\t\t\t(chunk.content.length && chunk.content.trim()) ||\n\t\t\t\t(chunk.outro.length && chunk.outro.trim())\n\t\t\t)\n\t\t\t\treturn false;\n\t\t} while ((chunk = chunk.next));\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while ((chunk = chunk.next));\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n\n\thasChanged() {\n\t\treturn this.original !== this.toString();\n\t}\n\n\t_replaceRegexp(searchValue, replacement) {\n\t\tfunction getReplacement(match, str) {\n\t\t\tif (typeof replacement === 'string') {\n\t\t\t\treturn replacement.replace(/\\$(\\$|&|\\d+)/g, (_, i) => {\n\t\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\n\t\t\t\t\tif (i === '$') return '$';\n\t\t\t\t\tif (i === '&') return match[0];\n\t\t\t\t\tconst num = +i;\n\t\t\t\t\tif (num < match.length) return match[+i];\n\t\t\t\t\treturn `$${i}`;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn replacement(...match, match.index, str, match.groups);\n\t\t\t}\n\t\t}\n\t\tfunction matchAll(re, str) {\n\t\t\tlet match;\n\t\t\tconst matches = [];\n\t\t\twhile ((match = re.exec(str))) {\n\t\t\t\tmatches.push(match);\n\t\t\t}\n\t\t\treturn matches;\n\t\t}\n\t\tif (searchValue.global) {\n\t\t\tconst matches = matchAll(searchValue, this.original);\n\t\t\tmatches.forEach((match) => {\n\t\t\t\tif (match.index != null) {\n\t\t\t\t\tconst replacement = getReplacement(match, this.original);\n\t\t\t\t\tif (replacement !== match[0]) {\n\t\t\t\t\t\tthis.overwrite(match.index, match.index + match[0].length, replacement);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tconst match = this.original.match(searchValue);\n\t\t\tif (match && match.index != null) {\n\t\t\t\tconst replacement = getReplacement(match, this.original);\n\t\t\t\tif (replacement !== match[0]) {\n\t\t\t\t\tthis.overwrite(match.index, match.index + match[0].length, replacement);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t_replaceString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst index = original.indexOf(string);\n\n\t\tif (index !== -1) {\n\t\t\tif (typeof replacement === 'function') {\n\t\t\t\treplacement = replacement(string, index, original);\n\t\t\t}\n\t\t\tif (string !== replacement) {\n\t\t\t\tthis.overwrite(index, index + string.length, replacement);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplace(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceString(searchValue, replacement);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n\n\t_replaceAllString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst stringLength = string.length;\n\t\tfor (\n\t\t\tlet index = original.indexOf(string);\n\t\t\tindex !== -1;\n\t\t\tindex = original.indexOf(string, index + stringLength)\n\t\t) {\n\t\t\tconst previous = original.slice(index, index + stringLength);\n\t\t\tlet _replacement = replacement;\n\t\t\tif (typeof replacement === 'function') {\n\t\t\t\t_replacement = replacement(previous, index, original);\n\t\t\t}\n\t\t\tif (previous !== _replacement) this.overwrite(index, index + stringLength, _replacement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplaceAll(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceAllString(searchValue, replacement);\n\t\t}\n\n\t\tif (!searchValue.global) {\n\t\t\tthrow new TypeError(\n\t\t\t\t'MagicString.prototype.replaceAll called with a non-global RegExp argument',\n\t\t\t);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n}\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nclass Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator,\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error(\n\t\t\t\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`',\n\t\t\t);\n\t\t}\n\n\t\t['filename', 'ignoreList', 'indentExclusionRanges', 'separator'].forEach((option) => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || '',\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator,\n\t\t});\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator,\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tlet x_google_ignoreList = undefined;\n\t\tthis.sources.forEach((source) => {\n\t\t\tObject.keys(source.content.storedNames).forEach((name) => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext((chunk) => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\n\t\t\tif (source.ignoreList && sourceIndex !== -1) {\n\t\t\t\tif (x_google_ignoreList === undefined) {\n\t\t\t\t\tx_google_ignoreList = [];\n\t\t\t\t}\n\t\t\t\tx_google_ignoreList.push(sourceIndex);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : undefined,\n\t\t\tsources: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t\tx_google_ignoreList,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tconst indentStr = source.content._getRawIndentString();\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart, //: trailingNewline || /\\r?\\n$/.test( separator )  //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty() {\n\t\tif (this.intro.length && this.intro.trim()) return false;\n\t\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce(\n\t\t\t(length, source) => length + source.content.length(),\n\t\t\tthis.intro.length,\n\t\t);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n\nexport { Bundle, SourceMap, MagicString as default };\n//# sourceMappingURL=magic-string.es.mjs.map\n","'use strict';\nconst STOP = false;\nconst SKIP_BRANCH = 1;\n\n// ignore position info, and raw\nconst IGNORED_KEYS = ['start', 'end', 'loc', 'location', 'locations', 'line', 'column', 'range', 'ranges', 'raw', 'extra'];\n\nlet _parser = function() {\n  throw new Error('No parser set, you need to set parser before use astMatcher. For instance, astMatcher.setParser(esprima.parse)');\n};\n\nfunction setParser(p) {\n  if (typeof p !== 'function') {\n    throw new Error(\"Input parser must be a function that takes JavaScript contents as input, produce a estree compliant syntax tree object.\")\n  }\n\n  _parser = function(contents) {\n    let node = p(contents);\n    // To be friendly to @babel/parser\n    if (node.type === 'File' && node.program) {\n      node = node.program;\n    }\n    return node;\n  };\n}\n\n// From an esprima example for traversing its ast.\n// modified to support branch skip.\nfunction traverse(object, visitor) {\n  let child;\n  if (!object) return;\n\n  let r = visitor.call(null, object);\n  if (r === STOP) return STOP; // stop whole traverse immediately\n  if (r === SKIP_BRANCH) return; // skip going into AST branch\n\n  for (let i = 0, keys = Object.keys(object); i < keys.length; i++) {\n    let key = keys[i];\n    if (IGNORED_KEYS.indexOf(key) !== -1) continue;\n\n    child = object[key];\n    if (typeof child === 'object' && child !== null) {\n      if (traverse(child, visitor) === STOP) {\n        return STOP;\n      }\n    }\n  }\n}\n\nconst ANY = 1;\nconst ANL = 2;\nconst STR = 3;\nconst ARR = 4;\n\nfunction matchTerm(pattern) {\n  let possible;\n  if (pattern.type === 'Identifier') {\n    possible = pattern.name.toString();\n  } else if (pattern.type === 'ExpressionStatement' &&\n             pattern.expression.type === 'Identifier') {\n    possible = pattern.expression.name.toString();\n  } else if ((pattern.type === 'FieldDefinition' || pattern.type === 'ClassProperty') &&\n             pattern.key.type === 'Identifier') {\n    possible = pattern.key.name.toString();\n  }\n\n  if (!possible || !possible.startsWith('__')) return;\n\n  let type;\n  if (possible === '__any' || possible.startsWith('__any_')) {\n    type = ANY;\n  } else if (possible === '__anl' || possible.startsWith('__anl_')) {\n    type = ANL;\n  } else if (possible === '__str' || possible.startsWith('__str_')) {\n    type = STR;\n  } else if (possible === '__arr' || possible.startsWith('__arr_')) {\n    type = ARR;\n  }\n\n  if (type) return {type: type, name: possible.slice(6)};\n}\n\n/**\n * Extract info from a partial estree syntax tree, see astMatcher for pattern format\n * @param pattern The pattern used on matching\n * @param part The target partial syntax tree\n * @return Returns named matches, or false.\n */\nfunction extract(pattern, part) {\n  if (!pattern) throw new Error('missing pattern');\n  // no match\n  if (!part) return STOP;\n\n  let term = matchTerm(pattern);\n  if (term) {\n    // if single __any\n    if (term.type === ANY) {\n      if (term.name) {\n        // if __any_foo\n        // get result {foo: astNode}\n        let r = {};\n        r[term.name] = part;\n        return r;\n      }\n      // always match\n      return {};\n\n    // if single __str_foo\n    } else if (term.type === STR) {\n      if (part.type === 'Literal' || part.type === 'StringLiteral') {\n        if (term.name) {\n          // get result {foo: value}\n          let r = {};\n          r[term.name] = part.value;\n          return r;\n        }\n        // always match\n        return {};\n      }\n      // no match\n      return STOP;\n    }\n  }\n\n\n  if (Array.isArray(pattern)) {\n    // no match\n    if (!Array.isArray(part)) return STOP;\n\n    if (pattern.length === 1) {\n      let arrTerm = matchTerm(pattern[0]);\n      if (arrTerm) {\n        // if single __arr_foo\n        if (arrTerm.type === ARR) {\n          // find all or partial Literals in an array\n          let arr = part.filter(function(it) { return it.type === 'Literal' || it.type === 'StringLiteral'; })\n                        .map(function(it) { return it.value; });\n          if (arr.length) {\n            if (arrTerm.name) {\n              // get result {foo: array}\n              let r = {};\n              r[arrTerm.name] = arr;\n              return r;\n            }\n            // always match\n            return {};\n          }\n          // no match\n          return STOP;\n        } else if (arrTerm.type === ANL) {\n          if (arrTerm.name) {\n            // get result {foo: nodes array}\n            let r = {};\n            r[arrTerm.name] = part;\n            return r;\n          }\n\n          // always match\n          return {};\n        }\n      }\n    }\n\n    if (pattern.length !== part.length) {\n      // no match\n      return STOP;\n    }\n  }\n\n  let allResult = {};\n\n  for (let i = 0, keys = Object.keys(pattern); i < keys.length; i++) {\n    let key = keys[i];\n    if (IGNORED_KEYS.indexOf(key) !== -1) continue;\n\n    let nextPattern = pattern[key];\n    let nextPart = part[key];\n\n    if (!nextPattern || typeof nextPattern !== 'object') {\n      // primitive value. string or null\n      if (nextPattern === nextPart) continue;\n\n      // no match\n      return STOP;\n    }\n\n    const result = extract(nextPattern, nextPart);\n    // no match\n    if (result === STOP) return STOP;\n    if (result) Object.assign(allResult, result);\n  }\n\n  return allResult;\n}\n\n/**\n * Compile a pattern into estree syntax tree\n * @param pattern The pattern used on matching, can be a string or estree node\n * @return Returns an estree node to be used as pattern in extract(pattern, part)\n */\nfunction compilePattern(pattern) {\n  let exp = ensureParsed(pattern);\n\n  if (exp.type !== 'Program' || !exp.body) {\n    throw new Error(`Not a valid expression:  \"${pattern}\".`);\n  }\n\n  if (exp.body.length === 0) {\n    throw new Error(`There is no statement in pattern \"${pattern}\".`);\n  }\n\n  if (exp.body.length > 1) {\n    throw new Error(`Multiple statements is not supported \"${pattern}\".`);\n  }\n\n  exp = exp.body[0];\n  // get the real expression underneath\n  if (exp.type === 'ExpressionStatement') exp = exp.expression;\n  return exp;\n}\n\nfunction ensureParsed(codeOrNode) {\n  // bypass parsed node\n  if (codeOrNode && codeOrNode.type) {\n    // To be friendly to @babel/parser\n    if (codeOrNode.type === 'File' && codeOrNode.program) {\n      return codeOrNode.program;\n    }\n    return codeOrNode;\n  }\n  return _parser(codeOrNode);\n}\n\n/**\n * Pattern matching using AST on JavaScript source code\n * @param pattern The pattern to be matched\n * @return Returns a function that takes source code string (or estree syntax tree) as input, produces matched result or undefined.\n *\n * __any       matches any single node, but no extract\n * __anl       matches array of nodes, but no extract\n * __str       matches string literal, but no extract\n * __arr       matches array of partial string literals, but no extract\n * __any_aName matches single node, return {aName: node}\n * __anl_aName matches array of nodes, return {aName: array_of_nodes}\n * __str_aName matches string literal, return {aName: value}\n * __arr_aName matches array, extract string literals, return {aName: [values]}\n *\n * note: __arr_aName can match partial array\n *       [foo, \"foo\", lorem, \"bar\", lorem] => [\"foo\", \"bar\"]\n *\n * note: __anl, and __arr_*\n *       use method(__anl) or method(__arr_a) to match method(a, \"b\");\n *       use method([__anl]) or method([__arr_a]) to match method([a, \"b\"]);\n *\n * Usage:\n *   let m = astMatcher('__any.method(__str_foo, [__arr_opts])');\n *   m('au.method(\"a\", [\"b\", \"c\"]); jq.method(\"d\", [\"e\"])');\n *\n *   => [\n *         {match: {foo: \"a\", opts: [\"b\", \"c\"]}, node: <CallExpression node> }\n *         {match: {foo: \"d\", opts: [\"e\"]}, node: <CallExpression node> }\n *      ]\n */\nfunction astMatcher(pattern) {\n  let pat = compilePattern(pattern);\n\n  return function(jsStr) {\n    let node = ensureParsed(jsStr);\n    let matches = [];\n\n    traverse(node, function (n) {\n      let m = extract(pat, n);\n      if (m) {\n        matches.push({\n          match: m,\n          node: n   // this is the full matching node\n        });\n        // found a match, don't go deeper on this tree branch\n        // return SKIP_BRANCH;\n        // don't skip branch in order to catch both .m1() ad .m2()\n        // astMater('__any.__any_m()')('a.m1().m2()')\n      }\n    });\n\n    return matches.length ? matches : undefined;\n  };\n}\n\n/**\n * Dependency analysis for dummies, this is a high level api to simplify the usage of astMatcher\n * @param arguments Multiple patterns to match, instead of using __str_/__arr_,\n *        use __dep and __deps to match string and partial string array.\n * @return Returns a function that takes source code string (or estree syntax tree) as input, produces an array of string matched, or empty array.\n *\n * Usage:\n *   let f = depFinder('a(__dep)', '__any.globalResources([__deps])');\n *   f('a(\"a\"); a(\"b\"); config.globalResources([\"./c\", \"./d\"])');\n *\n *   => ['a', 'b', './c', './d']\n */\nfunction depFinder() {\n  if (arguments.length === 0) {\n    throw new Error('No patterns provided.');\n  }\n\n  let seed = 0;\n\n  let patterns = Array.prototype.map.call(arguments, function (p) {\n    // replace __dep and __deps into\n    // __str_1, __str_2, __arr_3\n\n    // wantArr is the result of (s?)\n    return compilePattern(p.replace(/__dep(s?)/g, function (m, wantArr) {\n      return (wantArr ? '__arr_' : '__str_') + (++seed);\n    }))\n  });\n\n  let len = patterns.length;\n\n  return function(jsStr) {\n    let node = ensureParsed(jsStr);\n\n    let deps = [];\n\n    // directly use extract() instead of astMatcher()\n    // for efficiency\n    traverse(node, function (n) {\n      for (let i = 0; i < len; i += 1) {\n        let result = extract(patterns[i], n);\n        if (result) {\n          // result is like {\"1\": \"dep1\", \"2\": [\"dep2\", \"dep3\"]}\n          // we only want values\n          Object.keys(result).forEach(function (k) {\n            let d = result[k];\n            if (typeof d === 'string') deps.push(d);\n            else deps.push.apply(deps, d);\n          });\n\n          // found a match, don't try other pattern\n          break;\n        }\n      }\n    });\n\n    return deps;\n  };\n}\n\nmodule.exports = astMatcher;\nmodule.exports.setParser = setParser;\nmodule.exports.ensureParsed = ensureParsed;\nmodule.exports.extract = extract;\nmodule.exports.compilePattern = compilePattern;\nmodule.exports.depFinder = depFinder;\nmodule.exports.STOP = STOP;\nmodule.exports.SKIP_BRANCH = SKIP_BRANCH;\nmodule.exports.traverse = traverse;\n","/*\n  AST-based static replacement of expressions (e.g. `ENV.SOME_KEY` -> literal values).\n\n  Used https://www.npmjs.com/package/rollup-plugin-define as a starting point\n  Initially we were using @rollup/plugin-replace, but it would replace text in strings\n\n  This instead replaces nodes in a parsed AST rather than text in a string,\n  so references inside string literals, comments, and template literal text\n  are never touched.\n\n  Shared by the vite integration (which passes rollup's `parse`) and the\n  nextjs integration's turbopack loader (which passes @babel/parser).\n  The parser just needs to produce an estree-compliant tree with node\n  start/end offsets (ast-matcher also accepts @babel/parser `File` nodes).\n*/\n\nimport MagicString from 'magic-string';\nimport astMatcher from 'ast-matcher';\n\ntype Edit = [number, number];\ntype AstNode = { start: number; end: number };\n\n/** parse fn producing an estree-compliant AST with start/end offsets on nodes */\nexport type AstParseFn = (code: string, opts?: any) => any;\n\nfunction escapeStringRegexp(string: string) {\n  if (typeof string !== 'string') throw new TypeError('Expected a string');\n\n  // see https://github.com/sindresorhus/escape-string-regexp\n  return string\n    .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n    .replace(/-/g, '\\\\x2d');\n}\n\n\nfunction markEdited(node: AstNode, edits: Array<Edit>): number | false {\n  for (const [start, end] of edits) {\n    if ((start <= node.start && node.start < end) || (start < node.end && node.end <= end)) {\n      return false; // Already edited\n    }\n  }\n\n  // Not edited\n  return edits.push([node.start, node.end]);\n}\n\nexport const SUPPORTED_FILES = ['js', 'ts', 'mjs', 'mts', 'cjs', 'cts', 'jsx', 'tsx', 'vue', 'svelte'];\n\n// Vue's SFC compiler rewrites references to setup bindings when compiling\n// templates. `{{ ENV.X }}` becomes `$setup.ENV.X` in dev (non-inline) render\n// fns, and `_unref(ENV).X` in production (inline) mode, since an imported\n// binding might be a ref. `_unref` on a plain object is a no-op, so replacing\n// the whole call + member expression with the literal value is equivalent.\n// Only the generated `_unref` alias is matched; a bare `unref(...)` call is\n// user-authored code (possibly a different function entirely) and is left alone.\nfunction getVueUnrefPattern(key: string): string | undefined {\n  const dotIdx = key.indexOf('.');\n  if (dotIdx === -1) return undefined;\n  return `_unref(${key.slice(0, dotIdx)})${key.slice(dotIdx)}`;\n}\n\ntype MatchersArray = Array<{ matcher: ReturnType<typeof astMatcher>, replacement: string }>;\n\nexport function createReplacerTransformFn(opts: {\n  replacements: Record<string, string>,\n}) {\n  const keys = Object.keys(opts.replacements);\n  let matchers: MatchersArray;\n  const extraMatchersForFileType: Record<string, MatchersArray> = {};\n\n  // quick-exit check, including the vue `_unref(OBJ).X` shape, which does not\n  // contain the plain `OBJ.X` key as a substring\n  const findAnyReplacementPatterns = keys.flatMap((key) => {\n    const unrefPattern = getVueUnrefPattern(key);\n    return unrefPattern ? [key, unrefPattern] : [key];\n  });\n  const findAnyReplacementRegex = new RegExp(`(?:${findAnyReplacementPatterns.map(escapeStringRegexp).join('|')})`, 'g');\n\n  return function transform(\n    parserCtx: {\n      parse: AstParseFn;\n    },\n    code: string,\n    id: string,\n  ) {\n    if (keys.length === 0) return null;\n\n    const fileExt = id.split('?')[0].split('#')[0].split('.').pop() || '';\n    if (!SUPPORTED_FILES.includes(fileExt)) return null;\n\n    if (code.search(findAnyReplacementRegex) === -1) return null;\n\n    const parse = (codeToParse: string, source = code): any => {\n      try {\n        return parserCtx.parse(codeToParse, undefined);\n      } catch (error) {\n        (error as Error).message += ` in ${source}`;\n        throw error;\n      }\n    };\n\n    const ast = parse(code, id);\n\n    matchers ||= keys.map((key) => ({\n      matcher: astMatcher(parse(key)),\n      replacement: opts.replacements[key],\n    }));\n\n    if (fileExt === 'vue') {\n      // in vue script+setup files, ENV.X in template blocks gets compiled to\n      // `$setup.ENV.X` (dev) or `_unref(ENV).X` (prod inline mode); see\n      // getVueUnrefPattern above\n      extraMatchersForFileType.vue ||= keys.flatMap((key) => {\n        const unrefPattern = getVueUnrefPattern(key);\n        return [`$setup.${key}`, ...(unrefPattern ? [unrefPattern] : [])].map((pattern) => ({\n          matcher: astMatcher(parse(pattern)),\n          replacement: opts.replacements[key],\n        }));\n      });\n    }\n\n    const magicString = new MagicString(code);\n    const edits: Array<Edit> = [];\n\n    Object.values([...matchers, ...extraMatchersForFileType[fileExt] || []]).forEach(({ matcher, replacement }) => {\n      for (const { node } of (matcher(ast) || []) as Array<{ node: AstNode }>) {\n        if (markEdited(node, edits)) {\n          magicString.overwrite(\n            node.start,\n            node.end,\n            replacement,\n          );\n        }\n      }\n    });\n\n    if (edits.length === 0) return null;\n\n    // return the MagicString so the plugin can make further modifications\n    return magicString;\n  };\n}\n","const ANSI_COLORS: Record<number, string> = {\n  30: '#45475a',\n  31: '#f38ba8',\n  32: '#a6e3a1',\n  33: '#f9e2af',\n  34: '#89b4fa',\n  35: '#f5c2e7',\n  36: '#94e2d5',\n  37: '#cdd6f4',\n  90: '#585b70',\n  91: '#f38ba8',\n  92: '#a6e3a1',\n  93: '#f9e2af',\n  94: '#89b4fa',\n  95: '#f5c2e7',\n  96: '#94e2d5',\n  97: '#cdd6f4',\n};\n\n\nconst ANSI_RE = new RegExp(`${String.fromCharCode(27)}\\\\[([0-9;]*)m`, 'g');\n\n/**\n * Convert a string with ANSI escape codes to HTML with inline styles.\n * Uses a \"close all, re-open with active styles\" approach so that\n * nested/overlapping ANSI sequences render correctly.\n */\nexport function ansiToHtml(str: string): string {\n  // track active style state\n  let bold = false;\n  let dim = false;\n  let italic = false;\n  let underline = false;\n  let strikethrough = false;\n  let color: string | undefined;\n  let isOpen = false;\n\n  function buildSpan(): string {\n    const styles: Array<string> = [];\n    if (bold) styles.push('font-weight:bold');\n    if (dim) styles.push('opacity:0.6');\n    if (italic) styles.push('font-style:italic');\n    if (underline) styles.push('text-decoration:underline');\n    if (strikethrough) styles.push('text-decoration:line-through');\n    if (color) styles.push(`color:${color}`);\n    if (!styles.length) return '';\n    isOpen = true;\n    return `<span style=\"${styles.join(';')}\">`;\n  }\n\n  function closeIfOpen(): string {\n    if (!isOpen) return '';\n    isOpen = false;\n    return '</span>';\n  }\n\n  let html = str\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;');\n\n  html = html.replace(ANSI_RE, (_, codes: string) => {\n    const parts = codes.split(';').filter(Boolean).map(Number);\n\n    // full reset\n    if (parts.length === 0 || parts.includes(0)) {\n      bold = false;\n      dim = false;\n      italic = false;\n      underline = false;\n      strikethrough = false;\n      color = undefined;\n      return closeIfOpen();\n    }\n\n    // close current span, update state, re-open\n    const close = closeIfOpen();\n    for (const code of parts) {\n      if (code === 1) bold = true;\n      else if (code === 2) dim = true;\n      else if (code === 3) italic = true;\n      else if (code === 4) underline = true;\n      else if (code === 9) strikethrough = true;\n      else if (code === 22) {\n        bold = false;\n        dim = false;\n      } else if (code === 23) italic = false;\n      else if (code === 24) underline = false;\n      else if (code === 29) strikethrough = false;\n      else if (code === 39) color = undefined;\n      else if (ANSI_COLORS[code]) color = ANSI_COLORS[code];\n    }\n    return close + buildSpan();\n  });\n\n  html += closeIfOpen();\n  return html;\n}\n","/* eslint-disable no-console */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { Plugin } from 'vite';\nimport MagicString from 'magic-string';\n\nimport { initVarlockEnv } from 'varlock/env';\nimport { patchGlobalConsole } from 'varlock/patch-console';\nimport { patchGlobalServerResponse } from 'varlock/patch-server-response';\nimport { patchGlobalResponse } from 'varlock/patch-response';\nimport { createDebug, type SerializedEnvGraph } from 'varlock';\nimport { execSyncVarlock, VarlockExecError } from 'varlock/exec-sync-varlock';\nimport { encryptEnvBlobSync, generateEncryptionKeyHex } from 'varlock/encrypt-env';\n\nimport { createReplacerTransformFn, SUPPORTED_FILES } from '@env-spec/utils/ast-replacer';\n\nimport { ansiToHtml } from './ansi-to-html';\nexport { ansiToHtml };\n\nexport function buildErrorPageHtml(ansiError?: string): string {\n  const errorContent = ansiError\n    ? ansiToHtml(ansiError)\n    : 'Config is invalid — check your terminal for details.';\n\n  return `<!DOCTYPE html>\n<html><head><title>varlock - config error</title></head>\n<body style=\"font-family: monospace; background: #1e1e2e; color: #cdd6f4; margin: 0; padding: 2rem;\">\n<div style=\"margin-bottom: 1.5rem;\">\n  <h2 style=\"color: #f38ba8; margin: 0 0 0.5rem 0;\">🔒 Varlock — env config validation failed</h2>\n  <p style=\"color: #6c7086; margin: 0;\">Your environment variables are loaded and validated by <a href=\"https://varlock.dev\" style=\"color: #89b4fa;\">varlock</a>. Fix the error(s) below and save to reload.</p>\n</div>\n<pre style=\"white-space: pre-wrap; word-wrap: break-word; line-height: 1.5; background: #181825; padding: 1rem; border-radius: 8px;\">${errorContent}</pre>\n</body></html>`;\n}\n\n\n// enables throwing when user accesses a bad key on ENV\n(globalThis as any).__varlockThrowOnMissingKeys = true;\n\n// snapshot process.env before varlock modifies it via initVarlockEnv()\nconst originalProcessEnv = { ...process.env };\n\nconst debug = createDebug('varlock:vite-integration');\n\ndebug('varlock vite plugin loaded');\n\nlet isDevCommand: boolean;\nlet configIsValid = true;\nexport let varlockLoadedEnv: SerializedEnvGraph;\n/** Stderr output from the last failed varlock load (ANSI-colored) */\nexport let varlockLastError: string | undefined;\nlet lastErrorAt = 0;\nlet configHookCalled = false;\n// one-time guard for the SvelteKit+Cloudflare auto-detection notice\nlet cfDetectNoticeLogged = false;\n// one-time guard for the Vercel unencrypted resolved-env warning\nlet vercelUnencryptedWarningLogged = false;\nlet staticReplacements: Record<string, any> = {};\nlet publicDynamicKeys: Array<string> = [];\nlet replacerFn: ReturnType<typeof createReplacerTransformFn>;\n\n\nfunction resetStaticReplacements() {\n  staticReplacements = {};\n  publicDynamicKeys = [];\n  for (const itemKey in varlockLoadedEnv?.config) {\n    const itemInfo = varlockLoadedEnv.config[itemKey];\n    const isDynamic = itemInfo.isDynamic ?? itemInfo.isSensitive;\n    if (isDynamic && !itemInfo.isSensitive) {\n      publicDynamicKeys.push(itemKey);\n    }\n    if (!isDynamic) {\n      // we have to pass in a string of 'undefined' so it gets replaced properly\n      const val = itemInfo.value === undefined ? 'undefined' : JSON.stringify(itemInfo.value);\n      staticReplacements[`ENV.${itemKey}`] = val;\n    }\n  }\n  (globalThis as any).__varlockPublicDynamicKeys = publicDynamicKeys;\n\n  debug('static replacements', staticReplacements);\n\n  replacerFn = createReplacerTransformFn({\n    replacements: staticReplacements,\n  });\n}\n\n\n// Env sources may not be regular files — e.g. 1Password Environments serves\n// `.env` as a FIFO (named pipe) that is re-served on every read. Watching such\n// a file is meaningless (its stat churns whenever it is read) and registering\n// it in `configFileDependencies` would make vite restart the dev server in a\n// loop, since each restart re-reads the pipe and fires new fs events.\nfunction isExistingNonRegularFile(filePath: string): boolean {\n  try {\n    return !fs.statSync(filePath).isFile();\n  } catch {\n    return false; // missing files keep their current handling\n  }\n}\n\nconst warnedNonRegularSources = new Set<string>();\nfunction warnNonRegularSourceOnce(absPath: string, basePath?: string) {\n  if (warnedNonRegularSources.has(absPath)) return;\n  warnedNonRegularSources.add(absPath);\n  const displayPath = basePath ? (path.relative(basePath, absPath) || absPath) : absPath;\n  console.log(`ℹ️ [varlock] ${displayPath} is not a regular file (FIFO/pipe), live reload is disabled for it`);\n}\n\nlet loadCount = 0;\nlet activeIntegrationTelemetry = {\n  name: __VARLOCK_INTEGRATION_NAME__,\n  version: __VARLOCK_INTEGRATION_VERSION__,\n};\n\n/**\n * Directory the current config was loaded from. Tracked so callers can ask for\n * a specific root and only pay for a reload when it actually differs — the\n * module-level load below uses `process.cwd()`, which is not the project root\n * when a framework CLI is pointed elsewhere (e.g. `nuxt build --cwd ./app`).\n */\nlet loadedConfigDir: string | undefined;\n\nfunction reloadConfig(cwd?: string) {\n  debug('loading config - count =', ++loadCount, cwd ? `(cwd: ${cwd})` : '');\n  const prevItemCount = Object.keys(varlockLoadedEnv?.config || {}).length;\n  loadedConfigDir = path.resolve(cwd ?? process.cwd());\n  try {\n    const { stdout } = execSyncVarlock('load --format json-full --compact', {\n      fullResult: true,\n      env: originalProcessEnv,\n      integrationTelemetry: activeIntegrationTelemetry,\n      ...(cwd && { cwd }),\n    });\n    process.env.__VARLOCK_ENV = stdout;\n    varlockLoadedEnv = JSON.parse(stdout) as SerializedEnvGraph;\n    varlockLastError = undefined;\n    lastErrorAt = 0;\n    configIsValid = true;\n  } catch (err) {\n    // CLI exits non-zero on validation failure but still outputs JSON to stdout.\n    // Try to parse it so we have sources (for file watching) and error details.\n    if (err instanceof VarlockExecError) {\n      if (err.stdout) {\n        try {\n          varlockLoadedEnv = JSON.parse(err.stdout) as SerializedEnvGraph;\n          // Set __VARLOCK_ENV even on failure so `varlock/env` can initialize\n          // with partial data (prevents \"ENV not initialized\" throws)\n          process.env.__VARLOCK_ENV = err.stdout;\n        } catch { /* not parseable — hard failure */ }\n      }\n      if (err.stderr) {\n        // Debounce identical errors — frameworks like Astro can trigger\n        // multiple rapid reloads. But if some time has passed, show it\n        // again (the user may have re-introduced the same error).\n        const now = Date.now();\n        const isDuplicate = err.stderr === varlockLastError && (now - lastErrorAt) < 5000;\n        varlockLastError = err.stderr;\n        lastErrorAt = now;\n        if (!isDuplicate) {\n          console.error(err.stderr);\n          console.error('\\n[varlock] ⚠️ config is invalid — fix the error(s) above to continue\\n');\n        }\n      }\n    }\n    configIsValid = false;\n    resetStaticReplacements();\n    return;\n  }\n\n  // Reloading from a different directory can silently wipe a working config if\n  // that directory has no schema — `varlock load` succeeds there and returns an\n  // empty graph, which then disables every static replacement. Surface it\n  // instead of letting the build produce a broken bundle.\n  if (cwd && prevItemCount > 0 && Object.keys(varlockLoadedEnv?.config || {}).length === 0) {\n    console.warn(\n      `\\x1b[33m[varlock] ⚠️  no env items found when loading from ${cwd}\\x1b[0m\\n`\n      + 'This directory has no `.env.schema`, so `ENV.*` references will not be replaced at build time.\\n'\n      + \"If your framework points vite's `root` at a source subdirectory, the integration should pass \"\n      + '`rootDir` to `varlockVitePlugin()`.',\n    );\n  }\n\n  // If a runtime auto-load already populated the global (e.g. `varlock/auto-load`\n  // imported in nuxt.config), refresh it with the newly resolved graph -\n  // initVarlockEnv prefers it over the process.env blob, so a stale copy would\n  // pin the old values through every re-init.\n  if ((globalThis as any).__varlockLoadedEnv) {\n    (globalThis as any).__varlockLoadedEnv = varlockLoadedEnv;\n  }\n\n  // initialize varlock and patch globals as necessary\n  initVarlockEnv();\n  // these will be no-ops if these are disabled by settings\n  patchGlobalConsole();\n  patchGlobalServerResponse();\n  patchGlobalResponse();\n\n  resetStaticReplacements();\n}\n\n// we run this right away so the globals get injected into the vite.config file\nreloadConfig();\n\n\nexport interface VarlockVitePluginOptions {\n  /** controls if/how varlock init code is injected into the built SSR application code */\n  ssrInjectMode?: 'auto-load' | 'init-only' | 'resolved-env',\n  /** extra code lines to inject at the SSR entry point, before varlock init calls */\n  ssrEntryCode?: Array<string>,\n  /** set to true for edge runtimes that don't have node:http (skips patchGlobalServerResponse) */\n  ssrEdgeRuntime?: boolean,\n  /** additional virtual module IDs to treat as entry points (e.g., '\\0virtual:cloudflare/worker-entry') */\n  ssrEntryModuleIds?: Array<string>,\n  /** override integration identity for CLI telemetry (used by composed integrations like Astro) */\n  integrationTelemetry?: { name: string, version: string },\n  /**\n   * set by composed integrations (e.g. `@varlock/cloudflare-integration`, the\n   * Astro Cloudflare adapter branch) when the CF runtime env loader has been\n   * injected via `ssrEntryCode`. Used to reject `ssrInjectMode: 'resolved-env'`\n   * as redundant — the loader already hydrates env from Cloudflare bindings.\n   */\n  isCloudflareTarget?: boolean,\n  /**\n   * directory varlock should load `.env` files from. Defaults to vite's `root`.\n   * Set by integrations whose framework points vite's `root` at a source\n   * subdirectory rather than the project root — e.g. Nuxt 4, where `root` is\n   * the `app/` srcDir but the env files live one level up.\n   */\n  rootDir?: string,\n}\n\n/** options for {@link buildVarlockSsrInitCode} */\n/**\n * The currently loaded env graph, for integrations that need to inspect the\n * config outside vite's hooks (e.g. the Nuxt module checks for public+dynamic\n * items to decide whether to inject the public-env endpoint). Reloads the\n * config first if `rootDir` differs from the directory the module-level load\n * used.\n */\nexport function getVarlockLoadedEnv(rootDir?: string): SerializedEnvGraph | undefined {\n  if (rootDir && path.resolve(rootDir) !== loadedConfigDir) {\n    reloadConfig(rootDir);\n  }\n  return varlockLoadedEnv;\n}\n\n/**\n * Force a fresh env resolution and refresh the shared runtime store (ENV proxy\n * values, process.env injection, the auto-load global). Used by the Nuxt module\n * on dev restarts: it runs before the new nuxt instance evaluates nuxt.config,\n * so config-time `ENV` reads see fresh values even though the config's cached\n * `varlock/auto-load` import does not re-run.\n */\nexport function refreshVarlockEnv(rootDir?: string) {\n  reloadConfig(rootDir ?? loadedConfigDir);\n}\n\n/**\n * Absolute paths of the env files the current config was loaded from, for\n * integrations that manage their own file watching (e.g. the Nuxt module\n * pushes these into `nuxt.options.watch` so a schema edit restarts the dev\n * server). Reloads the config first if `rootDir` differs from the directory\n * the module-level load used. Non-regular files (FIFOs, e.g. 1Password\n * Environments) are excluded since watching them is meaningless.\n */\nexport function getVarlockEnvSourcePaths(rootDir?: string): Array<string> {\n  getVarlockLoadedEnv(rootDir);\n  const paths: Array<string> = [];\n  if (!varlockLoadedEnv?.basePath) return paths;\n  for (const source of varlockLoadedEnv.sources) {\n    if (!source.enabled || !source.path) continue;\n    const absPath = path.resolve(varlockLoadedEnv.basePath, source.path);\n    if (isExistingNonRegularFile(absPath)) continue;\n    paths.push(absPath);\n  }\n  return paths;\n}\n\nexport interface VarlockSsrInitCodeOptions {\n  ssrInjectMode?: VarlockVitePluginOptions['ssrInjectMode'],\n  ssrEntryCode?: VarlockVitePluginOptions['ssrEntryCode'],\n  ssrEdgeRuntime?: VarlockVitePluginOptions['ssrEdgeRuntime'],\n  isCloudflareTarget?: VarlockVitePluginOptions['isCloudflareTarget'],\n  /** vite environment name — only used to detect Cloudflare's prerender worker */\n  environmentName?: string,\n  /** overrides the dev/build detection, for callers that run outside vite's `config` hook */\n  isDev?: boolean,\n  /**\n   * directory to load `.env` files from. Callers that run before vite's\n   * `config` hook must pass this — until that hook runs, the config is\n   * whatever the module-level load found in `process.cwd()`, which is not the\n   * project root when a framework CLI is pointed elsewhere (`nuxt build --cwd`).\n   */\n  rootDir?: string,\n  /**\n   * emit side-effect-only imports in a form that cannot be tree-shaken. Set by\n   * integrations targeting a bundler that treats external modules as\n   * side-effect free — Nitro's rollup pass drops a bare `import 'x'` of an\n   * external, which would silently disable `ssrInjectMode: 'auto-load'`.\n   */\n  preserveSideEffectImports?: boolean,\n}\n\n/**\n * Builds the varlock init module source — the code that initializes `ENV` and\n * patches the global console/response objects before any user code runs.\n *\n * Exported so integrations can inject the same init sequence into build\n * pipelines that vite does not own. `@varlock/nuxt-integration` uses it for the Nitro\n * server bundle, which rollup builds separately from vite's SSR output.\n */\nexport function buildVarlockSsrInitCode(opts: VarlockSsrInitCodeOptions = {}): string {\n  // `resolved-env` serializes the loaded config straight into the artifact, so\n  // a config loaded from the wrong directory bakes an empty env into the build.\n  if (opts.rootDir && path.resolve(opts.rootDir) !== loadedConfigDir) {\n    reloadConfig(opts.rootDir);\n  }\n\n  let ssrInjectMode = opts.ssrInjectMode ?? 'init-only';\n  const isCloudflareTarget = opts.isCloudflareTarget ?? false;\n  const isDev = opts.isDev ?? isDevCommand;\n\n  // Cloudflare's build-time prerender worker (@astrojs/cloudflare v14 runs\n  // prerendering inside workerd via @cloudflare/vite-plugin's experimental\n  // `prerenderWorker`, a vite environment named \"prerender\") executes during\n  // the build with no bindings attached, so the runtime bindings loader can\n  // never find env there and `process.env.__VARLOCK_ENV` doesn't exist inside\n  // workerd. Bake the resolved env directly instead by routing this env\n  // through the same `resolved-env` path used below (so it shares the init +\n  // patch sequence and any future additions to it) — this artifact only\n  // generates static HTML at build time and is not deployed, and generated\n  // HTML is still leak-scanned by the framework integrations. The three\n  // guards keyed off `isCfPrerenderEnv` opt it out of the CF-specific\n  // behaviors that don't apply to the throwaway prerender worker: the\n  // \"redundant on CF\" rejection, env encryption (the worker can't read\n  // `_VARLOCK_ENV_KEY`, and the artifact is discarded), and the CF bindings\n  // loader (whose top-level `await import('cloudflare:workers')` + absent\n  // bindings are exactly what break the build here).\n  const isCfPrerenderEnv = isCloudflareTarget && opts.environmentName === 'prerender' && !isDev;\n  if (isCfPrerenderEnv) ssrInjectMode = 'resolved-env';\n\n  const isEdgeRuntime = opts.ssrEdgeRuntime ?? false;\n  const lines: Array<string> = [\n    '// Virtual module generated by @varlock/vite-integration',\n    '// Runs before any user code to ensure ENV is available at module top-level',\n    'globalThis.__varlockThrowOnMissingKeys = true;',\n    `globalThis.__varlockPublicDynamicKeys = ${JSON.stringify(publicDynamicKeys)};`,\n  ];\n\n  const encryptionRequired = varlockLoadedEnv?.settings?.encryptInjectedEnv;\n  // Force plaintext for the prerender worker — it can't read _VARLOCK_ENV_KEY\n  // (no bindings) and is discarded after the build, so an encrypted blob would\n  // only fail to decrypt.\n  let encryptionKey: string | undefined = isCfPrerenderEnv ? undefined : process.env._VARLOCK_ENV_KEY;\n\n  if (ssrInjectMode === 'auto-load') {\n    if (opts.preserveSideEffectImports) {\n      // binding the namespace to a global makes the import observably used, so\n      // a bundler treating externals as side-effect free can't drop it\n      lines.push(\n        \"import * as __varlockAutoLoad from 'varlock/auto-load';\",\n        'globalThis.__varlockAutoLoadModule = __varlockAutoLoad;',\n      );\n    } else {\n      lines.push(\"import 'varlock/auto-load';\");\n    }\n  } else {\n    if (ssrInjectMode === 'resolved-env') {\n      // Only reject this for production builds. In dev, some adapters (e.g.\n      // Astro's @astrojs/cloudflare) run SSR inside workerd via a plugin-owned\n      // miniflare instance with no binding-injection hook for varlock to use,\n      // so resolved-env is the only way to get real values into the worker —\n      // it's the composed integration's own default there, not shipped in a\n      // deploy artifact.\n      if (isCloudflareTarget && !isDev && !isCfPrerenderEnv) {\n        throw new Error(\n          \"[varlock] ssrInjectMode: 'resolved-env' is redundant on Cloudflare Workers and ships resolved \"\n          + '(possibly sensitive) values into the worker bundle unnecessarily. Cloudflare deploys get their '\n          + 'env injected at runtime from bindings via `varlock-wrangler` — remove the `ssrInjectMode` override '\n          + \"(or set it to 'init-only') and let the Cloudflare integration handle it.\\n\"\n          + 'See https://varlock.dev/integrations/cloudflare/ for details.',\n        );\n      }\n      // Vercel has no native runtime-binding mechanism like Cloudflare's, so\n      // `resolved-env` is the correct approach there — but plaintext means\n      // secrets sit as JSON in the build artifact. Nudge (don't block) users\n      // who haven't opted into `@encryptInjectedEnv`.\n      if (process.env.VERCEL === '1' && !encryptionRequired && !isDev) {\n        if (!vercelUnencryptedWarningLogged) {\n          vercelUnencryptedWarningLogged = true;\n          console.warn(\n            \"\\x1b[33m[varlock] ⚠️ ssrInjectMode: 'resolved-env' on Vercel ships your resolved env as plaintext JSON \"\n            + 'in the build artifact. Consider enabling `@encryptInjectedEnv` — '\n            + 'see https://varlock.dev/guides/encrypted-deployments/\\x1b[0m',\n          );\n        }\n      }\n      if (encryptionRequired && !encryptionKey && !isCfPrerenderEnv) {\n        if (isDev) {\n          // auto-generate a temporary key for local dev\n          encryptionKey = generateEncryptionKeyHex();\n          process.env._VARLOCK_ENV_KEY = encryptionKey;\n        } else {\n          throw new Error(\n            '[varlock] @encryptInjectedEnv is enabled but _VARLOCK_ENV_KEY is not set.\\n'\n            + 'Generate a key with `varlock generate-key` and set it on your platform.\\n'\n            + 'See https://varlock.dev/guides/encrypted-deployments/ for details.',\n          );\n        }\n      }\n      const serialized = JSON.stringify(varlockLoadedEnv);\n      if (encryptionKey) {\n        const encrypted = encryptEnvBlobSync(serialized, encryptionKey);\n        lines.push(`globalThis.__varlockEncryptedEnv = ${JSON.stringify(encrypted)};`);\n      } else {\n        lines.push(`globalThis.__varlockLoadedEnv = ${JSON.stringify(varlockLoadedEnv)};`);\n      }\n    }\n\n    // inject custom entry code from integrations (e.g., CF bindings loader) —\n    // but not in the prerender worker, where the runtime bindings loader can't\n    // work and its top-level await breaks the build (env is baked in above).\n    if (opts.ssrEntryCode?.length && !isCfPrerenderEnv) {\n      lines.push(...opts.ssrEntryCode);\n    }\n\n    // decrypt the encrypted env blob before initVarlockEnv runs\n    lines.push(\n      \"import { initVarlockEnv } from 'varlock/env';\",\n      \"import { patchGlobalConsole } from 'varlock/patch-console';\",\n      \"import { patchGlobalResponse } from 'varlock/patch-response';\",\n    );\n    // always include decryption support — the blob may be encrypted at build time\n    // (via _VARLOCK_ENV_KEY) or at deploy time (e.g., Cloudflare varlock-wrangler)\n    lines.push(\n      \"import { decryptEnvBlobSync } from 'varlock/encrypt-env';\",\n      'if (globalThis.__varlockEncryptedEnv) {',\n      '  const __key = typeof process !== \\'undefined\\' && process.env._VARLOCK_ENV_KEY;',\n      \"  if (!__key) throw new Error('[varlock] encrypted env blob present but _VARLOCK_ENV_KEY is not set');\",\n      '  globalThis.__varlockLoadedEnv = JSON.parse(decryptEnvBlobSync(globalThis.__varlockEncryptedEnv, __key));',\n      '  delete globalThis.__varlockEncryptedEnv;',\n      '}',\n    );\n    if (!isEdgeRuntime) {\n      lines.push(\"import { patchGlobalServerResponse } from 'varlock/patch-server-response';\");\n    }\n    lines.push(\n      'initVarlockEnv();',\n      'patchGlobalConsole();',\n    );\n    if (!isEdgeRuntime) {\n      lines.push('patchGlobalServerResponse();');\n    }\n    lines.push('patchGlobalResponse();');\n  }\n\n  return lines.join('\\n');\n}\n\n// Return type is `any` instead of `Plugin` to avoid symlink type conflicts.\n// When this package is symlinked for local dev, TypeScript resolves `vite`'s\n// Plugin type from this package's node_modules — a different copy than the\n// consumer's — causing spurious type errors. Since Vite's `plugins` config\n// is loosely typed, this is functionally equivalent.\nconst VARLOCK_INIT_MODULE_ID = '\\0varlock-ssr-init';\n\nexport function varlockVitePlugin(\n  vitePluginOptions?: VarlockVitePluginOptions,\n): any {\n  if (vitePluginOptions?.integrationTelemetry) {\n    const prevName = activeIntegrationTelemetry.name;\n    activeIntegrationTelemetry = vitePluginOptions.integrationTelemetry;\n    if (prevName !== activeIntegrationTelemetry.name) {\n      // reload from wherever the config currently comes from — falling back to\n      // cwd here would drop a root an integration already corrected\n      reloadConfig(vitePluginOptions.rootDir ?? loadedConfigDir);\n    }\n  }\n\n  // Resolved at build time. These start from the passed options but may be\n  // overridden by SvelteKit+Cloudflare auto-detection in `configResolved`\n  // (see below). They're read lazily by `buildInitModuleCode()`, which runs\n  // when the virtual init module is loaded — always after `configResolved`.\n  let resolvedSsrEdgeRuntime = vitePluginOptions?.ssrEdgeRuntime ?? false;\n  let resolvedSsrEntryCode = vitePluginOptions?.ssrEntryCode;\n  let resolvedIsCloudflareTarget = vitePluginOptions?.isCloudflareTarget ?? false;\n\n  // Build the virtual init module content. This module is imported by SSR\n  // entry points and evaluates before any user code because it has no\n  // transitive dependencies on user modules.\n  function buildInitModuleCode(environmentName?: string) {\n    return buildVarlockSsrInitCode({\n      ssrInjectMode: vitePluginOptions?.ssrInjectMode,\n      ssrEntryCode: resolvedSsrEntryCode,\n      ssrEdgeRuntime: resolvedSsrEdgeRuntime,\n      isCloudflareTarget: resolvedIsCloudflareTarget,\n      environmentName,\n    });\n  }\n\n  // Auto-detect SvelteKit deploying to Cloudflare Workers and wire up the edge\n  // env-loader so users don't need a separate import. SvelteKit resolves its\n  // config (from `svelte.config.js` OR inline `sveltekit({ adapter })`) and\n  // exposes it on the `vite-plugin-sveltekit-setup` plugin's `api.options`, so\n  // this one check covers both config layouts. The Cloudflare-specific injected\n  // code lives in `@varlock/cloudflare-integration` and is pulled in lazily via\n  // a runtime dynamic import. CF deployers already have it installed (it ships\n  // `varlock-wrangler`); it is intentionally NOT declared as a (peer)dependency\n  // here because cloudflare-integration depends on vite-integration, and the\n  // back-edge would create a build/typecheck cycle. We skip this when the\n  // consumer already supplied\n  // `ssrEntryCode` (e.g. the astro integration or the legacy\n  // `varlockSvelteKitCloudflarePlugin`) so we never double-inject.\n  async function detectSvelteKitCloudflareTarget(config: { plugins?: ReadonlyArray<any> }) {\n    if (resolvedSsrEntryCode) return;\n\n    // SvelteKit's setup plugin (`vite-plugin-sveltekit-setup`) exposes the\n    // resolved config via `api.options`. Match structurally on the\n    // `kit.adapter` shape rather than the plugin name so this is resilient to\n    // version changes — only SvelteKit exposes a resolved adapter this way.\n    const sveltekitSetup = config.plugins?.find((p) => p?.api?.options?.kit?.adapter);\n    if (!sveltekitSetup) return;\n\n    const adapterName: string | undefined = sveltekitSetup.api.options.kit.adapter?.name;\n    // `adapter-auto` keeps its own name even when it resolves to Cloudflare in\n    // CF's CI, so fall back to the platform env vars CF sets at build time.\n    const isCloudflare = adapterName === '@sveltejs/adapter-cloudflare'\n      || (adapterName === '@sveltejs/adapter-auto' && !!(process.env.CF_PAGES || process.env.WORKERS_CI));\n    if (!isCloudflare) return;\n\n    try {\n      // Variable specifier + cast: keeps this a runtime-only dynamic import so\n      // typecheck/bundling don't require the (optional) package to be present.\n      const cfEntryCodeModule = '@varlock/cloudflare-integration/ssr-entry-code';\n      const { CLOUDFLARE_SSR_ENTRY_CODE } = await import(cfEntryCodeModule) as { CLOUDFLARE_SSR_ENTRY_CODE: string };\n      resolvedSsrEntryCode = [CLOUDFLARE_SSR_ENTRY_CODE];\n      resolvedSsrEdgeRuntime = true;\n      resolvedIsCloudflareTarget = true;\n      debug('detected SvelteKit + Cloudflare adapter — injecting edge env loader');\n      // Surface the auto-detection so it isn't silent magic in the build output.\n      if (!cfDetectNoticeLogged) {\n        cfDetectNoticeLogged = true;\n        console.log('\\x1b[36m🔒 [varlock] detected @sveltejs/adapter-cloudflare — injecting the Cloudflare Workers env loader into the SSR entry\\x1b[0m');\n      }\n    } catch {\n      throw new Error(\n        '[varlock] SvelteKit deploying to Cloudflare requires @varlock/cloudflare-integration.\\n'\n        + 'Install it alongside @varlock/vite-integration: npm install @varlock/cloudflare-integration',\n      );\n    }\n  }\n\n  return {\n    name: 'inject-varlock-config',\n    enforce: 'post',\n\n    resolveId(id) {\n      if (id === VARLOCK_INIT_MODULE_ID) return id;\n    },\n    load(id) {\n      if (id === VARLOCK_INIT_MODULE_ID) {\n        // `this.environment` exists in vite 6+ (environments API)\n        return buildInitModuleCode(this.environment?.name);\n      }\n    },\n\n    // hook to modify config before it is resolved\n    async config(config, env) {\n      debug('vite plugin - config fn called, loadCount =', loadCount, 'command =', env.command);\n\n      // warn if the user has set envDir - varlock ignores this option\n      // and instead reads env files from cwd (or the path configured in package.json)\n      if (config.envDir) {\n        console.warn(`\n[varlock] ⚠️  The \\`envDir\\` Vite option is not supported by varlock.\nTo load .env files from a custom directory, set \\`varlock.loadPath\\` in your \\`package.json\\`:\n\n  {\n    \"varlock\": {\n      \"loadPath\": \"./your-env-dir/\"\n    }\n  }\n\nSee https://varlock.dev/integrations/vite/ for more details.\n`);\n      }\n\n      isDevCommand = env.command === 'serve';\n      if (env.command === 'build') {\n        process.env.__VARLOCK_EXECUTION_PHASE = 'build';\n      } else {\n        delete process.env.__VARLOCK_EXECUTION_PHASE;\n      }\n\n      // Determine the project root for the current Vite/Vitest project.\n      // In monorepo setups with Vitest workspace projects, config.root\n      // points to the child package directory rather than the monorepo root\n      // where process.cwd() points. We need to reload varlock from the\n      // correct directory so it can find .env.schema and .env files.\n      // An integration can override this via `rootDir` when its framework\n      // points vite's `root` at a source subdirectory instead of the project\n      // root (e.g. Nuxt 4, whose `root` is the `app/` srcDir).\n      const rootDirSource = vitePluginOptions?.rootDir ?? config.root;\n      const projectRoot = rootDirSource ? path.resolve(rootDirSource) : undefined;\n      // Compare against where the config was actually loaded from, not cwd —\n      // an integration may already have reloaded from `projectRoot` before this\n      // hook ran (see `buildVarlockSsrInitCode`), and cwd is not the project\n      // root when a framework CLI is pointed elsewhere (`nuxt build --cwd`).\n      const rootDiffersFromLoaded = !!(projectRoot && projectRoot !== loadedConfigDir);\n\n      if (rootDiffersFromLoaded) {\n        // Reload with the correct project root. This handles monorepo\n        // Vitest workspace setups where each child project has its own\n        // env files — the module-level load used cwd which may be wrong.\n        reloadConfig(projectRoot);\n      } else if (!configHookCalled) {\n        // First config hook call — the config was already loaded from the\n        // correct directory, no need to reload.\n        configHookCalled = true;\n      } else if (isDevCommand) {\n        // Dev mode restart (triggered by configFileDependencies change).\n        // The module stays cached so the module-level reloadConfig()\n        // doesn't re-run — we need to reload here, from the same directory\n        // the current config came from rather than cwd.\n        reloadConfig(projectRoot ?? loadedConfigDir);\n      }\n\n      // we do not want to inject via config.define - instead we use @rollup/plugin-replace\n\n      const hasCfPlugin = config.plugins?.flat().some((p: any) => p?.name?.includes('cloudflare'));\n\n      if (!configIsValid) {\n        if (isDevCommand) {\n          // adjust vite's setting so it doesnt bury the error messages\n          config.clearScreen = false;\n        } else {\n          console.error('\\n[varlock] config is invalid — cannot proceed with build\\n');\n          process.exit(1);\n        }\n      }\n\n      if (!hasCfPlugin) {\n        // Keep the `cloudflare:workers` runtime import that the SvelteKit+Cloudflare\n        // env loader injects into the SSR entry (see configResolved). The adapter\n        // isn't resolvable this early, so we add it whenever the CF Vite plugin is\n        // absent — it's inert unless something actually imports the specifier\n        // (Rollup only externalizes specifiers that appear in the module graph).\n        // When the CF Vite plugin IS present (non-SvelteKit CF setups) it manages\n        // `cloudflare:*` externals itself, so we stay out of its way. Returned as a\n        // partial config so Vite's mergeConfig folds it into any existing externals.\n        return { build: { rollupOptions: { external: ['cloudflare:workers'] } } };\n      }\n    },\n    // hook to observe/modify config after it is resolved\n    async configResolved(config) {\n      debug('vite plugin - configResolved fn called');\n\n      await detectSvelteKitCloudflareTarget(config);\n\n      if (!varlockLoadedEnv) return;\n      // inject all .env files that varlock loaded into `configFileDependencies`\n      // so that vite will watch them and reload if they change\n      for (const varlockSource of varlockLoadedEnv.sources) {\n        if (!varlockSource.enabled) continue;\n        if (varlockLoadedEnv.basePath && varlockSource.path) {\n          const absPath = path.resolve(varlockLoadedEnv.basePath, varlockSource.path);\n          if (isExistingNonRegularFile(absPath)) {\n            warnNonRegularSourceOnce(absPath, varlockLoadedEnv.basePath);\n            continue;\n          }\n          config.configFileDependencies.push(absPath);\n        }\n      }\n    },\n    // hook to configure vite dev server\n    async configureServer(server) {\n      debug('vite plugin - configureServer fn called');\n\n      // Always register middleware — check configIsValid dynamically on each\n      // request so the error page appears/disappears as config is fixed/broken\n      server.middlewares.use((req, res, next) => {\n        if (configIsValid) return next();\n        // skip HMR websocket and vite internal requests\n        if (req.url?.startsWith('/@')) return next();\n\n        res.statusCode = 500;\n        res.setHeader('Content-Type', 'text/html; charset=utf-8');\n        res.end(buildErrorPageHtml(varlockLastError));\n      });\n    },\n\n    transform(code, id, options) {\n      // replace build-time ENV.x references\n      let magicString = replacerFn(this, code, id);\n\n      // Detect dev vs build.\n      // Use the environment API (vite 6+), falling back to command check (vite 5).\n      const isDevEnv = this.environment ? this.environment.mode === 'dev' : isDevCommand;\n\n      // Detect if this module is an entry point so we can inject varlock init.\n      // For regular files: try isEntry (build mode), fall back to moduleIds[0] (dev).\n      // For virtual modules: check ssrEntryModuleIds from integrations (e.g. CF plugin).\n      const fileExt = id.split('?')[0].split('#')[0].split('.').pop() || '';\n      let isEntry = false;\n      if (SUPPORTED_FILES.includes(fileExt)) {\n        try {\n          const moduleInfo = this.getModuleInfo(id);\n          if (moduleInfo?.isEntry) isEntry = true;\n        } catch {\n          // vite 6 throws \"isEntry property of ModuleInfo is not supported\" in dev\n        }\n        // The moduleIds[0] heuristic is only for dev, where isEntry is\n        // unavailable. During builds isEntry is authoritative — and under\n        // rolldown's parallel transforms, moduleIds[0] is timing-dependent and\n        // can misfire, injecting the init module into an arbitrary module\n        // (e.g. react-dom's CJS internals, where its top-level await then\n        // breaks require() paths — see issue #893).\n        if (!isEntry && isDevEnv) {\n          const moduleIds = Array.from(this.getModuleIds());\n          if (moduleIds[0] === id) isEntry = true;\n        }\n      }\n      if (vitePluginOptions?.ssrEntryModuleIds?.includes(id)) isEntry = true;\n\n      if (isEntry) {\n        debug(`detected entry: ${id}`);\n\n        const injectCode = ['// INJECTED BY @varlock/vite-integration ----'];\n\n        if (options?.ssr) {\n          // SSR entry: import the virtual init module. It has no transitive deps\n          // on user code so the bundler evaluates it first — ensuring\n          // initVarlockEnv() runs before any user modules.\n          injectCode.push(`import '${VARLOCK_INIT_MODULE_ID}';`);\n        } else {\n          // Client entry\n          injectCode.push('globalThis.__varlockThrowOnMissingKeys = true;');\n          if (isDevEnv) {\n            injectCode.push(\n              `globalThis.__varlockValidKeys = ${JSON.stringify(Object.keys(varlockLoadedEnv?.config || {}))};`,\n            );\n          }\n          injectCode.push(\n            `globalThis.__varlockPublicDynamicKeys = ${JSON.stringify(publicDynamicKeys)};`,\n          );\n        }\n\n        injectCode.push('// -------- ');\n\n        magicString ||= new MagicString(code);\n        magicString.prepend(`${injectCode.join('\\n')}\\n`);\n      }\n\n      if (!magicString) return null;\n      return {\n        code: magicString.toString(),\n        map: magicString.generateMap({ source: code, includeContent: true, hires: true }),\n      };\n    },\n    renderChunk(code, chunk) {\n      // Not 100% positive this is necessary if we've already replaced in transform\n      // but the rollup-plugin-define we used as a reference did it, so we'll keep it\n\n      // replace build-time ENV.x references\n      const magicString = replacerFn(this, code, chunk.fileName);\n\n      if (!magicString) return null;\n      return {\n        code: magicString.toString(),\n        map: magicString.generateMap({ source: code, includeContent: true, hires: true }),\n      };\n    },\n\n    // this enables replacing %ENV.xxx% constants in html entry-point files\n    // see https://vite.dev/guide/env-and-mode.html#html-constant-replacement\n    transformIndexHtml(html) {\n      debug('transformIndexHtml called, configIsValid =', configIsValid);\n      if (!configIsValid) {\n        return buildErrorPageHtml(varlockLastError);\n      }\n\n      //! Note on vite's built-in html constant replacement\n      // when using config.define, any import.meta.env.XXX replacements\n      // would be automatically added as constant replacements (%XXX%)\n      const replacedHtml = html.replace(\n        // look for \"%ENV.xxx%\"\n        /%ENV\\.([a-zA-Z_][a-zA-Z0-9._]*)%/g,\n        (_fullMatch, itemKey) => {\n          if (!varlockLoadedEnv.config[itemKey]) {\n            throw new Error(`Config item \\`${itemKey}\\` does not exist`);\n          } else if (varlockLoadedEnv.config[itemKey].isSensitive) {\n            // sensitive items are dynamic (not inlineable) by default, but the reason that\n            // matters to the user here is the secrecy one - lead with that\n            throw new Error(`Config item \\`${itemKey}\\` is sensitive and cannot be used in html replacements`);\n          } else if (varlockLoadedEnv.config[itemKey].isDynamic) {\n            throw new Error(`Config item \\`${itemKey}\\` is dynamic (runtime-resolved) and cannot be used in html replacements`);\n          } else {\n            // undefined will be turned into empty string in html replacements\n            return varlockLoadedEnv.config[itemKey].value ?? '';\n          }\n        },\n      );\n\n      return replacedHtml;\n    },\n  } satisfies Plugin;\n}\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}