{
  "version": 3,
  "sources": ["../../types/dist/rrweb-types.js", "../../utils/dist/rrweb-utils.js", "../src/utils.ts", "../src/snapshot.ts", "../src/css.ts", "../../../node_modules/picocolors/picocolors.browser.js", "../__vite-browser-external", "../node_modules/postcss/lib/css-syntax-error.js", "../node_modules/postcss/lib/symbols.js", "../node_modules/postcss/lib/stringifier.js", "../node_modules/postcss/lib/stringify.js", "../node_modules/postcss/lib/node.js", "../node_modules/postcss/lib/declaration.js", "../node_modules/nanoid/non-secure/index.cjs", "../node_modules/postcss/lib/previous-map.js", "../node_modules/postcss/lib/input.js", "../node_modules/postcss/lib/map-generator.js", "../node_modules/postcss/lib/comment.js", "../node_modules/postcss/lib/container.js", "../node_modules/postcss/lib/document.js", "../node_modules/postcss/lib/warn-once.js", "../node_modules/postcss/lib/warning.js", "../node_modules/postcss/lib/result.js", "../node_modules/postcss/lib/tokenize.js", "../node_modules/postcss/lib/at-rule.js", "../node_modules/postcss/lib/root.js", "../node_modules/postcss/lib/list.js", "../node_modules/postcss/lib/rule.js", "../node_modules/postcss/lib/parser.js", "../node_modules/postcss/lib/parse.js", "../node_modules/postcss/lib/lazy-result.js", "../node_modules/postcss/lib/no-work-result.js", "../node_modules/postcss/lib/processor.js", "../node_modules/postcss/lib/fromJSON.js", "../node_modules/postcss/lib/postcss.js", "../node_modules/postcss/lib/postcss.mjs", "../src/rebuild.ts"],
  "sourcesContent": ["var EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n  PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n  PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n  PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n  return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n  CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n  CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n  CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n  return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n  MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n  MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n  MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n  MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n  MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n  return MediaInteractions2;\n})(MediaInteractions || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n  ReplayerEvents2[\"Start\"] = \"start\";\n  ReplayerEvents2[\"Pause\"] = \"pause\";\n  ReplayerEvents2[\"Resume\"] = \"resume\";\n  ReplayerEvents2[\"Resize\"] = \"resize\";\n  ReplayerEvents2[\"Finish\"] = \"finish\";\n  ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n  ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n  ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n  ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n  ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n  ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n  ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n  ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n  ReplayerEvents2[\"Flush\"] = \"flush\";\n  ReplayerEvents2[\"StateChange\"] = \"state-change\";\n  ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n  ReplayerEvents2[\"Destroy\"] = \"destroy\";\n  ReplayerEvents2[\"SeekStart\"] = \"seek-start\";\n  ReplayerEvents2[\"SeekEnd\"] = \"seek-end\";\n  return ReplayerEvents2;\n})(ReplayerEvents || {});\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n  NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n  NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n  NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n  NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n  NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n  NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n  return NodeType2;\n})(NodeType || {});\nexport {\n  CanvasContext,\n  EventType,\n  IncrementalSource,\n  MediaInteractions,\n  MouseInteractions,\n  NodeType,\n  PointerTypes,\n  ReplayerEvents\n};\n//# sourceMappingURL=rrweb-types.js.map\n", "const testableAccessors = {\n  Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n  ShadowRoot: [\"host\", \"styleSheets\"],\n  Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n  MutationObserver: []\n};\nconst testableMethods = {\n  Node: [\"contains\", \"getRootNode\"],\n  ShadowRoot: [\"getSelection\"],\n  Element: [],\n  MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype = {};\nfunction angularZoneUnpatchedAlternative(key) {\n  var _a, _b;\n  const angularUnpatchedVersionSymbol = (_b = (_a = globalThis == null ? void 0 : globalThis.Zone) == null ? void 0 : _a.__symbol__) == null ? void 0 : _b.call(_a, key);\n  if (angularUnpatchedVersionSymbol && globalThis[angularUnpatchedVersionSymbol]) {\n    return globalThis[angularUnpatchedVersionSymbol];\n  } else {\n    return void 0;\n  }\n}\nfunction getUntaintedPrototype(key) {\n  if (untaintedBasePrototype[key])\n    return untaintedBasePrototype[key];\n  const candidate = angularZoneUnpatchedAlternative(key) || globalThis[key];\n  const defaultPrototype = candidate.prototype;\n  const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n  const isUntaintedAccessors = Boolean(\n    accessorNames && // @ts-expect-error 2345\n    accessorNames.every(\n      (accessor) => {\n        var _a, _b;\n        return Boolean(\n          (_b = (_a = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n        );\n      }\n    )\n  );\n  const methodNames = key in testableMethods ? testableMethods[key] : void 0;\n  const isUntaintedMethods = Boolean(\n    methodNames && methodNames.every(\n      // @ts-expect-error 2345\n      (method) => {\n        var _a;\n        return typeof defaultPrototype[method] === \"function\" && ((_a = defaultPrototype[method]) == null ? void 0 : _a.toString().includes(\"[native code]\"));\n      }\n    )\n  );\n  if (isUntaintedAccessors && isUntaintedMethods) {\n    untaintedBasePrototype[key] = candidate.prototype;\n    return candidate.prototype;\n  }\n  try {\n    const iframeEl = document.createElement(\"iframe\");\n    document.body.appendChild(iframeEl);\n    const win = iframeEl.contentWindow;\n    if (!win) return candidate.prototype;\n    const untaintedObject = win[key].prototype;\n    document.body.removeChild(iframeEl);\n    if (!untaintedObject) return defaultPrototype;\n    return untaintedBasePrototype[key] = untaintedObject;\n  } catch {\n    return defaultPrototype;\n  }\n}\nconst untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n  var _a;\n  const cacheKey = `${key}.${String(accessor)}`;\n  if (untaintedAccessorCache[cacheKey])\n    return untaintedAccessorCache[cacheKey].call(\n      instance\n    );\n  const untaintedPrototype = getUntaintedPrototype(key);\n  const untaintedAccessor = (_a = Object.getOwnPropertyDescriptor(\n    untaintedPrototype,\n    accessor\n  )) == null ? void 0 : _a.get;\n  if (!untaintedAccessor) return instance[accessor];\n  untaintedAccessorCache[cacheKey] = untaintedAccessor;\n  return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n  const cacheKey = `${key}.${String(method)}`;\n  if (untaintedMethodCache[cacheKey])\n    return untaintedMethodCache[cacheKey].bind(\n      instance\n    );\n  const untaintedPrototype = getUntaintedPrototype(key);\n  const untaintedMethod = untaintedPrototype[method];\n  if (typeof untaintedMethod !== \"function\") return instance[method];\n  untaintedMethodCache[cacheKey] = untaintedMethod;\n  return untaintedMethod.bind(instance);\n}\nfunction childNodes(n) {\n  return getUntaintedAccessor(\"Node\", n, \"childNodes\");\n}\nfunction parentNode(n) {\n  return getUntaintedAccessor(\"Node\", n, \"parentNode\");\n}\nfunction parentElement(n) {\n  return getUntaintedAccessor(\"Node\", n, \"parentElement\");\n}\nfunction textContent(n) {\n  return getUntaintedAccessor(\"Node\", n, \"textContent\");\n}\nfunction contains(n, other) {\n  return getUntaintedMethod(\"Node\", n, \"contains\")(other);\n}\nfunction getRootNode(n) {\n  return getUntaintedMethod(\"Node\", n, \"getRootNode\")();\n}\nfunction host(n) {\n  if (!n || !(\"host\" in n)) return null;\n  return getUntaintedAccessor(\"ShadowRoot\", n, \"host\");\n}\nfunction styleSheets(n) {\n  return n.styleSheets;\n}\nfunction shadowRoot(n) {\n  if (!n || !(\"shadowRoot\" in n)) return null;\n  return getUntaintedAccessor(\"Element\", n, \"shadowRoot\");\n}\nfunction querySelector(n, selectors) {\n  return getUntaintedAccessor(\"Element\", n, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n, selectors) {\n  return getUntaintedAccessor(\"Element\", n, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n  return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nconst index = {\n  childNodes,\n  parentNode,\n  parentElement,\n  textContent,\n  contains,\n  getRootNode,\n  host,\n  styleSheets,\n  shadowRoot,\n  querySelector,\n  querySelectorAll,\n  mutationObserver: mutationObserverCtor\n};\nexport {\n  childNodes,\n  contains,\n  index as default,\n  getRootNode,\n  getUntaintedAccessor,\n  getUntaintedMethod,\n  getUntaintedPrototype,\n  host,\n  mutationObserverCtor,\n  parentElement,\n  parentNode,\n  querySelector,\n  querySelectorAll,\n  shadowRoot,\n  styleSheets,\n  textContent\n};\n//# sourceMappingURL=rrweb-utils.js.map\n", "import type {\n  idNodeMap,\n  MaskInputFn,\n  MaskInputOptions,\n  nodeMetaMap,\n} from './types';\n\nimport { NodeType } from '@amplitude/rrweb-types';\nimport type {\n  IMirror,\n  serializedNodeWithId,\n  serializedNode,\n  documentNode,\n  documentTypeNode,\n  textNode,\n  elementNode,\n} from '@amplitude/rrweb-types';\nimport dom from '@amplitude/rrweb-utils';\n\nexport function isElement(n: Node): n is Element {\n  return n.nodeType === n.ELEMENT_NODE;\n}\n\nexport function isShadowRoot(n: Node): n is ShadowRoot {\n  const hostEl: Element | null =\n    // anchor and textarea elements also have a `host` property\n    // but only shadow roots have a `mode` property\n    (n && 'host' in n && 'mode' in n && dom.host(n as ShadowRoot)) || null;\n  return Boolean(\n    hostEl && 'shadowRoot' in hostEl && dom.shadowRoot(hostEl) === n,\n  );\n}\n\n/**\n * To fix the issue https://github.com/rrweb-io/rrweb/issues/933.\n * Some websites use polyfilled shadow dom and this function is used to detect this situation.\n */\nexport function isNativeShadowDom(shadowRoot: ShadowRoot): boolean {\n  return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\n}\n\n/**\n * Browsers sometimes destructively modify the css rules they receive.\n * This function tries to rectify the modifications the browser made to make it more cross platform compatible.\n * @param cssText - output of `CSSStyleRule.cssText`\n * @returns `cssText` with browser inconsistencies fixed.\n */\nfunction fixBrowserCompatibilityIssuesInCSS(cssText: string): string {\n  /**\n   * Chrome outputs `-webkit-background-clip` as `background-clip` in `CSSStyleRule.cssText`.\n   * But then Chrome ignores `background-clip` as css input.\n   * Re-introduce `-webkit-background-clip` to fix this issue.\n   */\n  if (\n    cssText.includes(' background-clip: text;') &&\n    !cssText.includes(' -webkit-background-clip: text;')\n  ) {\n    cssText = cssText.replace(\n      /\\sbackground-clip:\\s*text;/g,\n      ' -webkit-background-clip: text; background-clip: text;',\n    );\n  }\n  return cssText;\n}\n\n// Remove this declaration once typescript has added `CSSImportRule.supportsText` to the lib.\ndeclare interface CSSImportRule extends CSSRule {\n  readonly href: string;\n  readonly layerName: string | null;\n  readonly media: MediaList;\n  readonly styleSheet: CSSStyleSheet;\n  /**\n   * experimental API, currently only supported in firefox\n   * https://developer.mozilla.org/en-US/docs/Web/API/CSSImportRule/supportsText\n   */\n  readonly supportsText?: string | null;\n}\n\n/**\n * Browsers sometimes incorrectly escape `@import` on `.cssText` statements.\n * This function tries to correct the escaping.\n * more info: https://bugs.chromium.org/p/chromium/issues/detail?id=1472259\n * @param cssImportRule\n * @returns `cssText` with browser inconsistencies fixed, or null if not applicable.\n */\nexport function escapeImportStatement(rule: CSSImportRule): string {\n  const { cssText } = rule;\n  if (cssText.split('\"').length < 3) return cssText;\n\n  const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\n  if (rule.layerName === '') {\n    statement.push(`layer`);\n  } else if (rule.layerName) {\n    statement.push(`layer(${rule.layerName})`);\n  }\n  if (rule.supportsText) {\n    statement.push(`supports(${rule.supportsText})`);\n  }\n  if (rule.media.length) {\n    statement.push(rule.media.mediaText);\n  }\n  return statement.join(' ') + ';';\n}\n\n/*\n * serialize the css rules from the .sheet property\n * for <link rel=\"stylesheet\"> elements, this is the only way of getting the rules without a FETCH\n * for <style> elements, this is less preferable to looking at childNodes[0].textContent\n * (which will include vendor prefixed rules which may not be used or visible to the recorded browser,\n * but which might be needed by the replayer browser)\n * however, at snapshot time, we don't know whether the style element has suffered\n * any programmatic manipulation prior to the snapshot, in which case the .sheet would be more up to date\n */\nexport function stringifyStylesheet(s: CSSStyleSheet): string | null {\n  try {\n    const rules = s.rules || s.cssRules;\n    if (!rules) {\n      return null;\n    }\n    let sheetHref = s.href;\n    if (!sheetHref && s.ownerNode && s.ownerNode.ownerDocument) {\n      // an inline <style> element\n      sheetHref = s.ownerNode.ownerDocument.location.href;\n    }\n    const stringifiedRules = Array.from(rules, (rule: CSSRule) =>\n      stringifyRule(rule, sheetHref),\n    ).join('');\n    return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);\n  } catch (error) {\n    return null;\n  }\n}\n\nexport function stringifyRule(rule: CSSRule, sheetHref: string | null): string {\n  if (isCSSImportRule(rule)) {\n    let importStringified;\n    try {\n      importStringified =\n        // for same-origin stylesheets,\n        // we can access the imported stylesheet rules directly\n        stringifyStylesheet(rule.styleSheet) ||\n        // work around browser issues with the raw string `@import url(...)` statement\n        escapeImportStatement(rule);\n    } catch (error) {\n      importStringified = rule.cssText;\n    }\n    if (rule.styleSheet.href) {\n      // url()s within the imported stylesheet are relative to _that_ sheet's href\n      return absolutifyURLs(importStringified, rule.styleSheet.href);\n    }\n    return importStringified;\n  } else {\n    let ruleStringified = rule.cssText;\n    if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\n      // Safari does not escape selectors with : properly\n      // see https://bugs.webkit.org/show_bug.cgi?id=184604\n      ruleStringified = fixSafariColons(ruleStringified);\n    }\n    if (sheetHref) {\n      return absolutifyURLs(ruleStringified, sheetHref);\n    }\n    return ruleStringified;\n  }\n}\n\nexport function fixSafariColons(cssStringified: string): string {\n  // Replace e.g. [aa:bb] with [aa\\\\:bb]\n  const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n  return cssStringified.replace(regex, '$1\\\\$2');\n}\n\nexport function isCSSImportRule(rule: CSSRule): rule is CSSImportRule {\n  return 'styleSheet' in rule;\n}\n\nexport function isCSSStyleRule(rule: CSSRule): rule is CSSStyleRule {\n  return 'selectorText' in rule;\n}\n\nexport class Mirror implements IMirror<Node> {\n  private idNodeMap: idNodeMap = new Map();\n  private nodeMetaMap: nodeMetaMap = new WeakMap();\n\n  getId(n: Node | undefined | null): number {\n    if (!n) return -1;\n\n    const id = this.getMeta(n)?.id;\n\n    // if n is not a serialized Node, use -1 as its id.\n    return id ?? -1;\n  }\n\n  getNode(id: number): Node | null {\n    return this.idNodeMap.get(id) || null;\n  }\n\n  getIds(): number[] {\n    return Array.from(this.idNodeMap.keys());\n  }\n\n  getMeta(n: Node): serializedNodeWithId | null {\n    return this.nodeMetaMap.get(n) || null;\n  }\n\n  // removes the node from idNodeMap\n  // doesn't remove the node from nodeMetaMap\n  removeNodeFromMap(n: Node) {\n    const id = this.getId(n);\n    this.idNodeMap.delete(id);\n\n    if (n.childNodes) {\n      n.childNodes.forEach((childNode) =>\n        this.removeNodeFromMap(childNode as unknown as Node),\n      );\n    }\n  }\n  has(id: number): boolean {\n    return this.idNodeMap.has(id);\n  }\n\n  hasNode(node: Node): boolean {\n    return this.nodeMetaMap.has(node);\n  }\n\n  add(n: Node, meta: serializedNodeWithId) {\n    const id = meta.id;\n    this.idNodeMap.set(id, n);\n    this.nodeMetaMap.set(n, meta);\n  }\n\n  replace(id: number, n: Node) {\n    const oldNode = this.getNode(id);\n    if (oldNode) {\n      const meta = this.nodeMetaMap.get(oldNode);\n      if (meta) this.nodeMetaMap.set(n, meta);\n    }\n    this.idNodeMap.set(id, n);\n  }\n\n  reset() {\n    this.idNodeMap = new Map();\n    this.nodeMetaMap = new WeakMap();\n  }\n}\n\nexport function createMirror(): Mirror {\n  return new Mirror();\n}\n\nexport function maskInputValue({\n  element,\n  maskInputOptions,\n  tagName,\n  type,\n  value,\n  maskInputFn,\n}: {\n  element: HTMLElement;\n  maskInputOptions: MaskInputOptions;\n  tagName: string;\n  type: string | null;\n  value: string | null;\n  maskInputFn?: MaskInputFn;\n}): string {\n  let text = value || '';\n  const actualType = type && toLowerCase(type);\n\n  if (\n    maskInputOptions[tagName.toLowerCase() as keyof MaskInputOptions] ||\n    (actualType && maskInputOptions[actualType as keyof MaskInputOptions])\n  ) {\n    if (maskInputFn) {\n      text = maskInputFn(text, element);\n    } else {\n      text = '*'.repeat(text.length);\n    }\n  }\n  return text;\n}\n\nexport function toLowerCase<T extends string>(str: T): Lowercase<T> {\n  return str.toLowerCase() as unknown as Lowercase<T>;\n}\n\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\ntype PatchedGetImageData = {\n  [ORIGINAL_ATTRIBUTE_NAME]: CanvasImageData['getImageData'];\n} & CanvasImageData['getImageData'];\n\nexport function is2DCanvasBlank(canvas: HTMLCanvasElement): boolean {\n  const ctx = canvas.getContext('2d');\n  if (!ctx) return true;\n\n  const chunkSize = 50;\n\n  // get chunks of the canvas and check if it is blank\n  for (let x = 0; x < canvas.width; x += chunkSize) {\n    for (let y = 0; y < canvas.height; y += chunkSize) {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      const getImageData = ctx.getImageData as PatchedGetImageData;\n      const originalGetImageData =\n        ORIGINAL_ATTRIBUTE_NAME in getImageData\n          ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\n          : getImageData;\n      // by getting the canvas in chunks we avoid an expensive\n      // `getImageData` call that retrieves everything\n      // even if we can already tell from the first chunk(s) that\n      // the canvas isn't blank\n      const pixelBuffer = new Uint32Array(\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n        originalGetImageData.call(\n          ctx,\n          x,\n          y,\n          Math.min(chunkSize, canvas.width - x),\n          Math.min(chunkSize, canvas.height - y),\n        ).data.buffer,\n      );\n      if (pixelBuffer.some((pixel) => pixel !== 0)) return false;\n    }\n  }\n  return true;\n}\n\nexport function isNodeMetaEqual(a: serializedNode, b: serializedNode): boolean {\n  if (!a || !b || a.type !== b.type) return false;\n  if (a.type === NodeType.Document)\n    return a.compatMode === (b as documentNode).compatMode;\n  else if (a.type === NodeType.DocumentType)\n    return (\n      a.name === (b as documentTypeNode).name &&\n      a.publicId === (b as documentTypeNode).publicId &&\n      a.systemId === (b as documentTypeNode).systemId\n    );\n  else if (\n    a.type === NodeType.Comment ||\n    a.type === NodeType.Text ||\n    a.type === NodeType.CDATA\n  )\n    return a.textContent === (b as textNode).textContent;\n  else if (a.type === NodeType.Element)\n    return (\n      a.tagName === (b as elementNode).tagName &&\n      JSON.stringify(a.attributes) ===\n        JSON.stringify((b as elementNode).attributes) &&\n      a.isSVG === (b as elementNode).isSVG &&\n      a.needBlock === (b as elementNode).needBlock\n    );\n  return false;\n}\n\n/**\n * Get the type of an input element.\n * This takes care of the case where a password input is changed to a text input.\n * In this case, we continue to consider this of type password, in order to avoid leaking sensitive data\n * where passwords should be masked.\n */\nexport function getInputType(element: HTMLElement): Lowercase<string> | null {\n  // when omitting the type of input element(e.g. <input />), the type is treated as text\n  const type = (element as HTMLInputElement).type;\n\n  return element.hasAttribute('data-rr-is-password')\n    ? 'password'\n    : type\n    ? // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n      toLowerCase(type)\n    : null;\n}\n\n/**\n * Extracts the file extension from an a path, considering search parameters and fragments.\n * @param path - Path to file\n * @param baseURL - [optional] Base URL of the page, used to resolve relative paths. Defaults to current page URL.\n */\nexport function extractFileExtension(\n  path: string,\n  baseURL?: string,\n): string | null {\n  let url;\n  try {\n    url = new URL(path, baseURL ?? window.location.href);\n  } catch (err) {\n    return null;\n  }\n  const regex = /\\.([0-9a-z]+)(?:$)/i;\n  const match = url.pathname.match(regex);\n  return match?.[1] ?? null;\n}\n\nfunction extractOrigin(url: string): string {\n  let origin = '';\n  if (url.indexOf('//') > -1) {\n    origin = url.split('/').slice(0, 3).join('/');\n  } else {\n    origin = url.split('/')[0];\n  }\n  origin = origin.split('?')[0];\n  return origin;\n}\n\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nexport function absolutifyURLs(cssText: string | null, href: string): string {\n  return (cssText || '').replace(\n    URL_IN_CSS_REF,\n    (\n      origin: string,\n      quote1: string,\n      path1: string,\n      quote2: string,\n      path2: string,\n      path3: string,\n    ) => {\n      const filePath = path1 || path2 || path3;\n      const maybeQuote = quote1 || quote2 || '';\n      if (!filePath) {\n        return origin;\n      }\n      if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (DATA_URI.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (filePath[0] === '/') {\n        return `url(${maybeQuote}${\n          extractOrigin(href) + filePath\n        }${maybeQuote})`;\n      }\n      const stack = href.split('/');\n      const parts = filePath.split('/');\n      stack.pop();\n      for (const part of parts) {\n        if (part === '.') {\n          continue;\n        } else if (part === '..') {\n          stack.pop();\n        } else {\n          stack.push(part);\n        }\n      }\n      return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\n    },\n  );\n}\n\n/**\n * Intention is to normalize by remove spaces, semicolons and CSS comments\n * so that we can compare css as authored vs. output of stringifyStylesheet\n */\nexport function normalizeCssString(\n  cssText: string,\n  /**\n   * _testNoPxNorm: only used as part of the 'substring matching going from many to none'\n   * test case so that it will trigger a failure if the conditions that let to the creation of that test arise again\n   */\n  _testNoPxNorm = false,\n): string {\n  if (_testNoPxNorm) {\n    return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, '');\n  } else {\n    return cssText.replace(/(\\/\\*[^*]*\\*\\/)|[\\s;]/g, '').replace(/0px/g, '0');\n  }\n}\n\n/**\n * Maps the output of stringifyStylesheet to individual text nodes of a <style> element\n * which occurs when javascript is used to append to the style element\n * and may also occur when browsers opt to break up large text nodes\n * performance needs to be considered, see e.g. #1603\n */\nexport function splitCssText(\n  cssText: string,\n  style: HTMLStyleElement,\n  _testNoPxNorm = false,\n): string[] {\n  const childNodes = Array.from(style.childNodes);\n  const splits: string[] = [];\n  let iterCount = 0;\n  if (childNodes.length > 1 && cssText && typeof cssText === 'string') {\n    let cssTextNorm = normalizeCssString(cssText, _testNoPxNorm);\n    const normFactor = cssTextNorm.length / cssText.length;\n    for (let i = 1; i < childNodes.length; i++) {\n      if (\n        childNodes[i].textContent &&\n        typeof childNodes[i].textContent === 'string'\n      ) {\n        const textContentNorm = normalizeCssString(\n          childNodes[i].textContent!,\n          _testNoPxNorm,\n        );\n        const jLimit = 100; // how many iterations for the first part of searching\n        let j = 3;\n        for (; j < textContentNorm.length; j++) {\n          if (\n            // keep consuming css identifiers (to get a decent chunk more quickly)\n            textContentNorm[j].match(/[a-zA-Z0-9]/) ||\n            // substring needs to be unique to this section\n            textContentNorm.indexOf(textContentNorm.substring(0, j), 1) !== -1\n          ) {\n            continue;\n          }\n          break;\n        }\n        for (; j < textContentNorm.length; j++) {\n          let startSubstring = textContentNorm.substring(0, j);\n          // this substring should appears only once in overall text too\n          let cssNormSplits = cssTextNorm.split(startSubstring);\n          let splitNorm = -1;\n          if (cssNormSplits.length === 2) {\n            splitNorm = cssNormSplits[0].length;\n          } else if (\n            cssNormSplits.length > 2 &&\n            cssNormSplits[0] === '' &&\n            childNodes[i - 1].textContent !== ''\n          ) {\n            // this childNode has same starting content as previous\n            splitNorm = cssTextNorm.indexOf(startSubstring, 1);\n          } else if (cssNormSplits.length === 1) {\n            // try to roll back to get multiple matches again\n            startSubstring = startSubstring.substring(\n              0,\n              startSubstring.length - 1,\n            );\n            cssNormSplits = cssTextNorm.split(startSubstring);\n            if (cssNormSplits.length <= 1) {\n              // no split possible\n              splits.push(cssText);\n              return splits;\n            }\n            j = jLimit + 1; // trigger end of search\n          } else if (j === textContentNorm.length - 1) {\n            // we're about to end loop without a split point\n            splitNorm = cssTextNorm.indexOf(startSubstring);\n          }\n          if (cssNormSplits.length >= 2 && j > jLimit) {\n            const prevTextContent = childNodes[i - 1].textContent;\n            if (prevTextContent && typeof prevTextContent === 'string') {\n              // pick the first matching point which respects the previous chunk's approx size\n              const prevMinLength = normalizeCssString(prevTextContent).length;\n              splitNorm = cssTextNorm.indexOf(startSubstring, prevMinLength);\n            }\n            if (splitNorm === -1) {\n              // fall back to pick the first matching point of many\n              splitNorm = cssNormSplits[0].length;\n            }\n          }\n          if (splitNorm !== -1) {\n            // find the split point in the original text\n            let k = Math.floor(splitNorm / normFactor);\n            for (; k > 0 && k < cssText.length; ) {\n              iterCount += 1;\n              if (iterCount > 50 * childNodes.length) {\n                // quit for performance purposes\n                splits.push(cssText);\n                return splits;\n              }\n              const normPart = normalizeCssString(\n                cssText.substring(0, k),\n                _testNoPxNorm,\n              );\n              if (normPart.length === splitNorm) {\n                splits.push(cssText.substring(0, k));\n                cssText = cssText.substring(k);\n                cssTextNorm = cssTextNorm.substring(splitNorm);\n                break;\n              } else if (normPart.length < splitNorm) {\n                k += Math.max(\n                  1,\n                  Math.floor((splitNorm - normPart.length) / normFactor),\n                );\n              } else {\n                k -= Math.max(\n                  1,\n                  Math.floor((normPart.length - splitNorm) * normFactor),\n                );\n              }\n            }\n            break;\n          }\n        }\n      }\n    }\n  }\n  splits.push(cssText); // either the full thing if no splits were found, or the last split\n  return splits;\n}\n\nexport function markCssSplits(\n  cssText: string,\n  style: HTMLStyleElement,\n): string {\n  return splitCssText(cssText, style).join('/* rr_split */');\n}\n", "import type {\n  MaskInputOptions,\n  SlimDOMOptions,\n  MaskTextFn,\n  MaskInputFn,\n  MaskAttributeFn,\n  KeepIframeSrcFn,\n  ICanvas,\n  DialogAttributes,\n} from './types';\nimport { NodeType } from '@amplitude/rrweb-types';\nimport type {\n  serializedNode,\n  serializedNodeWithId,\n  serializedElementNodeWithId,\n  elementNode,\n  documentNode,\n  serializedAdoptedStyleSheet,\n  attributes,\n  mediaAttributes,\n  DataURLOptions,\n} from '@amplitude/rrweb-types';\nimport {\n  Mirror,\n  is2DCanvasBlank,\n  isElement,\n  isShadowRoot,\n  maskInputValue,\n  isNativeShadowDom,\n  stringifyStylesheet,\n  stringifyRule,\n  getInputType,\n  toLowerCase,\n  extractFileExtension,\n  absolutifyURLs,\n  markCssSplits,\n} from './utils';\nimport dom from '@amplitude/rrweb-utils';\n\nconst _DEFAULT_BLOCKED_ELEMENT_BACKGROUND_COLOR = 'lightgrey';\n\nlet _id = 1;\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\n\nexport const IGNORED_NODE = -2;\n\nexport function genId(): number {\n  return _id++;\n}\n\nfunction getValidTagName(element: HTMLElement): Lowercase<string> {\n  if (element instanceof HTMLFormElement) {\n    return 'form';\n  }\n\n  const processedTagName = toLowerCase(element.tagName);\n\n  if (tagNameRegex.test(processedTagName)) {\n    // if the tag name is odd and we cannot extract\n    // anything from the string, then we return a\n    // generic div\n    return 'div';\n  }\n\n  return processedTagName;\n}\n\nlet canvasService: HTMLCanvasElement | null;\nlet canvasCtx: CanvasRenderingContext2D | null;\n\n// eslint-disable-next-line no-control-regex\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/; // Don't use \\s, to avoid matching non-breaking space\n// eslint-disable-next-line no-control-regex\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc: Document, attributeValue: string) {\n  /*\n    run absoluteToDoc over every url in the srcset\n\n    this is adapted from https://github.com/albell/parse-srcset/\n    without the parsing of the descriptors (we return these as-is)\n    parce-srcset is in turn based on\n    https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-srcset-attribute\n  */\n  if (attributeValue.trim() === '') {\n    return attributeValue;\n  }\n\n  let pos = 0;\n\n  function collectCharacters(regEx: RegExp) {\n    let chars: string;\n    const match = regEx.exec(attributeValue.substring(pos));\n    if (match) {\n      chars = match[0];\n      pos += chars.length;\n      return chars;\n    }\n    return '';\n  }\n\n  const output = [];\n  // eslint-disable-next-line no-constant-condition\n  while (true) {\n    collectCharacters(SRCSET_COMMAS_OR_SPACES);\n    if (pos >= attributeValue.length) {\n      break;\n    }\n    // don't split on commas within urls\n    let url = collectCharacters(SRCSET_NOT_SPACES);\n    if (url.slice(-1) === ',') {\n      // aside: according to spec more than one comma at the end is a parse error, but we ignore that\n      url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n      // the trailing comma splits the srcset, so the interpretion is that\n      // another url will follow, and the descriptor is empty\n      output.push(url);\n    } else {\n      let descriptorsStr = '';\n      url = absoluteToDoc(doc, url);\n      let inParens = false;\n      // eslint-disable-next-line no-constant-condition\n      while (true) {\n        const c = attributeValue.charAt(pos);\n        if (c === '') {\n          output.push((url + descriptorsStr).trim());\n          break;\n        } else if (!inParens) {\n          if (c === ',') {\n            pos += 1;\n            output.push((url + descriptorsStr).trim());\n            break; // parse the next url\n          } else if (c === '(') {\n            inParens = true;\n          }\n        } else {\n          // in parenthesis; ignore commas\n          // (parenthesis may be supported by future additions to spec)\n          if (c === ')') {\n            inParens = false;\n          }\n        }\n        descriptorsStr += c;\n        pos += 1;\n      }\n    }\n  }\n  return output.join(', ');\n}\n\nconst cachedDocument = new WeakMap<Document, HTMLAnchorElement>();\n\nexport function absoluteToDoc(doc: Document, attributeValue: string): string {\n  if (!attributeValue || attributeValue.trim() === '') {\n    return attributeValue;\n  }\n\n  return getHref(doc, attributeValue);\n}\n\nfunction isSVGElement(el: Element): boolean {\n  return Boolean(el.tagName === 'svg' || (el as SVGElement).ownerSVGElement);\n}\n\nfunction getHref(doc: Document, customHref?: string) {\n  let a = cachedDocument.get(doc);\n  if (!a) {\n    a = doc.createElement('a');\n    cachedDocument.set(doc, a);\n  }\n  if (!customHref) {\n    customHref = '';\n  } else if (customHref.startsWith('blob:') || customHref.startsWith('data:')) {\n    return customHref;\n  }\n  // note: using `new URL` is slower. See #1434 or https://jsbench.me/uqlud17rxo/1\n  a.setAttribute('href', customHref);\n  return a.href;\n}\n\nexport function transformAttribute(\n  doc: Document,\n  tagName: Lowercase<string>,\n  name: Lowercase<string>,\n  value: string | null,\n): string | null {\n  if (!value) {\n    return value;\n  }\n\n  // relative path in attribute\n  if (\n    name === 'src' ||\n    (name === 'href' && !(tagName === 'use' && value[0] === '#'))\n  ) {\n    // href starts with a # is an id pointer for svg\n    return absoluteToDoc(doc, value);\n  } else if (name === 'xlink:href' && value[0] !== '#') {\n    // xlink:href starts with # is an id pointer\n    return absoluteToDoc(doc, value);\n  } else if (\n    name === 'background' &&\n    (tagName === 'table' || tagName === 'td' || tagName === 'th')\n  ) {\n    return absoluteToDoc(doc, value);\n  } else if (name === 'srcset') {\n    return getAbsoluteSrcsetString(doc, value);\n  } else if (name === 'style') {\n    return absolutifyURLs(value, getHref(doc));\n  } else if (tagName === 'object' && name === 'data') {\n    return absoluteToDoc(doc, value);\n  }\n\n  return value;\n}\n\nexport function ignoreAttribute(\n  tagName: string,\n  name: string,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  _value: unknown,\n): boolean {\n  return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\n}\n\nexport function _isBlockedElement(\n  element: HTMLElement,\n  blockClass: string | RegExp,\n  blockSelector: string | null,\n): boolean {\n  try {\n    if (typeof blockClass === 'string') {\n      if (element.classList.contains(blockClass)) {\n        return true;\n      }\n    } else {\n      for (let eIndex = element.classList.length; eIndex--; ) {\n        const className = element.classList[eIndex];\n        if (blockClass.test(className)) {\n          return true;\n        }\n      }\n    }\n    if (blockSelector) {\n      return element.matches(blockSelector);\n    }\n  } catch (e) {\n    //\n  }\n\n  return false;\n}\n\nexport function classMatchesRegex(\n  node: Node | null,\n  regex: RegExp,\n  checkAncestors: boolean,\n): boolean {\n  if (!node) return false;\n  if (node.nodeType !== node.ELEMENT_NODE) {\n    if (!checkAncestors) return false;\n    return classMatchesRegex(dom.parentNode(node), regex, checkAncestors);\n  }\n\n  for (let eIndex = (node as HTMLElement).classList.length; eIndex--; ) {\n    const className = (node as HTMLElement).classList[eIndex];\n    if (regex.test(className)) {\n      return true;\n    }\n  }\n  if (!checkAncestors) return false;\n  return classMatchesRegex(dom.parentNode(node), regex, checkAncestors);\n}\n\nexport function needMaskingText(\n  node: Node,\n  maskTextClass: string | RegExp,\n  maskTextSelector: string | null,\n  checkAncestors: boolean,\n): boolean {\n  let el: Element;\n  if (isElement(node)) {\n    el = node;\n    if (!dom.childNodes(el).length) {\n      // optimisation: we can avoid any of the below checks on leaf elements\n      // as masking is applied to child text nodes only\n      return false;\n    }\n  } else if (dom.parentElement(node) === null) {\n    // should warn? maybe a text node isn't attached to a parent node yet?\n    return false;\n  } else {\n    el = dom.parentElement(node)!;\n  }\n  try {\n    if (typeof maskTextClass === 'string') {\n      if (checkAncestors) {\n        if (el.closest(`.${maskTextClass}`)) return true;\n      } else {\n        if (el.classList.contains(maskTextClass)) return true;\n      }\n    } else {\n      if (classMatchesRegex(el, maskTextClass, checkAncestors)) return true;\n    }\n    if (maskTextSelector) {\n      if (checkAncestors) {\n        if (el.closest(maskTextSelector)) return true;\n      } else {\n        if (el.matches(maskTextSelector)) return true;\n      }\n    }\n  } catch (e) {\n    //\n  }\n  return false;\n}\n\n// https://stackoverflow.com/a/36155560\nfunction onceIframeLoaded(\n  iframeEl: HTMLIFrameElement,\n  listener: () => unknown,\n  iframeLoadTimeout: number,\n) {\n  const win = iframeEl.contentWindow;\n  if (!win) {\n    return;\n  }\n  // document is loading\n  let fired = false;\n\n  let readyState: DocumentReadyState;\n  try {\n    readyState = win.document.readyState;\n  } catch (error) {\n    return;\n  }\n  if (readyState !== 'complete') {\n    const timer = setTimeout(() => {\n      if (!fired) {\n        listener();\n        fired = true;\n      }\n    }, iframeLoadTimeout);\n    iframeEl.addEventListener('load', () => {\n      clearTimeout(timer);\n      fired = true;\n      listener();\n    });\n    return;\n  }\n  // check blank frame for Chrome\n  const blankUrl = 'about:blank';\n  if (\n    win.location.href !== blankUrl ||\n    iframeEl.src === blankUrl ||\n    iframeEl.src === ''\n  ) {\n    // iframe was already loaded, make sure we wait to trigger the listener\n    // till _after_ the mutation that found this iframe has had time to process\n    setTimeout(listener, 0);\n\n    return iframeEl.addEventListener('load', listener); // keep listing for future loads\n  }\n  // use default listener\n  iframeEl.addEventListener('load', listener);\n}\n\nfunction onceStylesheetLoaded(\n  link: HTMLLinkElement,\n  listener: () => unknown,\n  styleSheetLoadTimeout: number,\n) {\n  let fired = false;\n  let styleSheetLoaded: StyleSheet | null;\n  try {\n    styleSheetLoaded = link.sheet;\n  } catch (error) {\n    return;\n  }\n\n  if (styleSheetLoaded) return;\n\n  const timer = setTimeout(() => {\n    if (!fired) {\n      listener();\n      fired = true;\n    }\n  }, styleSheetLoadTimeout);\n\n  link.addEventListener('load', () => {\n    clearTimeout(timer);\n    fired = true;\n    listener();\n  });\n}\n\nfunction serializeNode(\n  n: Node,\n  options: {\n    doc: Document;\n    mirror: Mirror;\n    blockClass: string | RegExp;\n    blockSelector: string | null;\n    needsMask: boolean;\n    inlineStylesheet: boolean;\n    maskInputOptions: MaskInputOptions;\n    maskTextFn: MaskTextFn | undefined;\n    maskInputFn: MaskInputFn | undefined;\n    maskAttributeFn: MaskAttributeFn | undefined;\n    dataURLOptions?: DataURLOptions;\n    inlineImages: boolean;\n    recordCanvas: boolean;\n    keepIframeSrcFn: KeepIframeSrcFn;\n    /**\n     * `newlyAddedElement: true` skips scrollTop and scrollLeft check\n     */\n    newlyAddedElement?: boolean;\n    cssCaptured?: boolean;\n    applyBackgroundColorToBlockedElements?: boolean;\n  },\n): serializedNode | false {\n  const {\n    doc,\n    mirror,\n    blockClass,\n    blockSelector,\n    needsMask,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskTextFn,\n    maskInputFn,\n    maskAttributeFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false,\n    cssCaptured = false,\n    applyBackgroundColorToBlockedElements = false,\n  } = options;\n  // Only record root id when document object is not the base document\n  const rootId = getRootId(doc, mirror);\n  switch (n.nodeType) {\n    case n.DOCUMENT_NODE:\n      if ((n as Document).compatMode !== 'CSS1Compat') {\n        return {\n          type: NodeType.Document,\n          childNodes: [],\n          compatMode: (n as Document).compatMode, // probably \"BackCompat\"\n        };\n      } else {\n        return {\n          type: NodeType.Document,\n          childNodes: [],\n        };\n      }\n    case n.DOCUMENT_TYPE_NODE:\n      return {\n        type: NodeType.DocumentType,\n        name: (n as DocumentType).name,\n        publicId: (n as DocumentType).publicId,\n        systemId: (n as DocumentType).systemId,\n        rootId,\n      };\n    case n.ELEMENT_NODE:\n      return serializeElementNode(n as HTMLElement, {\n        doc,\n        blockClass,\n        blockSelector,\n        inlineStylesheet,\n        maskInputOptions,\n        maskInputFn,\n        maskAttributeFn,\n        dataURLOptions,\n        inlineImages,\n        recordCanvas,\n        keepIframeSrcFn,\n        newlyAddedElement,\n        rootId,\n        applyBackgroundColorToBlockedElements,\n      });\n    case n.TEXT_NODE:\n      return serializeTextNode(n as Text, {\n        doc,\n        needsMask,\n        maskTextFn,\n        rootId,\n        cssCaptured,\n      });\n    case n.CDATA_SECTION_NODE:\n      return {\n        type: NodeType.CDATA,\n        textContent: '',\n        rootId,\n      };\n    case n.COMMENT_NODE:\n      return {\n        type: NodeType.Comment,\n        textContent: dom.textContent(n as Comment) || '',\n        rootId,\n      };\n    default:\n      return false;\n  }\n}\n\nfunction getRootId(doc: Document, mirror: Mirror): number | undefined {\n  if (!mirror.hasNode(doc)) return undefined;\n  const docId = mirror.getId(doc);\n  return docId === 1 ? undefined : docId;\n}\n\nfunction serializeTextNode(\n  n: Text,\n  options: {\n    doc: Document;\n    needsMask: boolean;\n    maskTextFn: MaskTextFn | undefined;\n    rootId: number | undefined;\n    cssCaptured?: boolean;\n  },\n): serializedNode {\n  const { needsMask, maskTextFn, rootId, cssCaptured } = options;\n  // The parent node may not be a html element which has a tagName attribute.\n  // So just let it be undefined which is ok in this use case.\n  const parent = dom.parentNode(n);\n  const parentTagName = parent && (parent as HTMLElement).tagName;\n  let textContent: string | null = '';\n  const isStyle = parentTagName === 'STYLE' ? true : undefined;\n  const isScript = parentTagName === 'SCRIPT' ? true : undefined;\n  if (isScript) {\n    textContent = 'SCRIPT_PLACEHOLDER';\n  } else if (!cssCaptured) {\n    textContent = dom.textContent(n);\n    if (isStyle && textContent) {\n      // mutation only: we don't need to use stringifyStylesheet\n      // as a <style> text node mutation obliterates any previous\n      // programmatic rule manipulation (.insertRule etc.)\n      // so the current textContent represents the most up to date state\n      textContent = absolutifyURLs(textContent, getHref(options.doc));\n    }\n  }\n  if (!isStyle && !isScript && textContent && needsMask) {\n    textContent = maskTextFn\n      ? maskTextFn(textContent, dom.parentElement(n))\n      : textContent.replace(/[\\S]/g, '*');\n  }\n\n  return {\n    type: NodeType.Text,\n    textContent: textContent || '',\n    rootId,\n  };\n}\n\nfunction serializeElementNode(\n  n: HTMLElement,\n  options: {\n    doc: Document;\n    blockClass: string | RegExp;\n    blockSelector: string | null;\n    inlineStylesheet: boolean;\n    maskInputOptions: MaskInputOptions;\n    maskInputFn: MaskInputFn | undefined;\n    maskAttributeFn: MaskAttributeFn | undefined;\n    dataURLOptions?: DataURLOptions;\n    inlineImages: boolean;\n    recordCanvas: boolean;\n    keepIframeSrcFn: KeepIframeSrcFn;\n    /**\n     * `newlyAddedElement: true` skips scrollTop and scrollLeft check\n     */\n    newlyAddedElement?: boolean;\n    rootId: number | undefined;\n    applyBackgroundColorToBlockedElements?: boolean;\n  },\n): serializedNode | false {\n  const {\n    doc,\n    blockClass,\n    blockSelector,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskInputFn,\n    maskAttributeFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false,\n    rootId,\n    applyBackgroundColorToBlockedElements = false,\n  } = options;\n  const needBlock = _isBlockedElement(n, blockClass, blockSelector);\n  const tagName = getValidTagName(n);\n  let attributes: attributes = {};\n  const len = n.attributes.length;\n  for (let i = 0; i < len; i++) {\n    const attr = n.attributes[i];\n    if (!ignoreAttribute(tagName, attr.name, attr.value)) {\n      const transformedValue = transformAttribute(\n        doc,\n        tagName,\n        toLowerCase(attr.name),\n        attr.value,\n      );\n      if (maskAttributeFn && transformedValue !== null) {\n        const maskedValue = maskAttributeFn(attr.name, transformedValue, n);\n        if (maskedValue !== null) {\n          attributes[attr.name] = maskedValue;\n        }\n      } else {\n        attributes[attr.name] = transformedValue;\n      }\n    }\n  }\n  // remote css\n  if (tagName === 'link' && inlineStylesheet) {\n    //TODO: maybe replace this `.styleSheets` with original one\n    const stylesheet = Array.from(doc.styleSheets).find((s) => {\n      return s.href === (n as HTMLLinkElement).href;\n    });\n    let cssText: string | null = null;\n    if (stylesheet) {\n      cssText = stringifyStylesheet(stylesheet);\n    }\n    if (cssText) {\n      delete attributes.rel;\n      delete attributes.href;\n      attributes._cssText = cssText;\n    }\n  }\n  if (tagName === 'style' && (n as HTMLStyleElement).sheet) {\n    let cssText = stringifyStylesheet(\n      (n as HTMLStyleElement).sheet as CSSStyleSheet,\n    );\n    if (cssText) {\n      if (n.childNodes.length > 1) {\n        cssText = markCssSplits(cssText, n as HTMLStyleElement);\n      }\n      attributes._cssText = cssText;\n    }\n  }\n  // form fields\n  if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\n    const value = (n as HTMLInputElement | HTMLTextAreaElement).value;\n    const checked = (n as HTMLInputElement).checked;\n    if (\n      attributes.type !== 'radio' &&\n      attributes.type !== 'checkbox' &&\n      attributes.type !== 'submit' &&\n      attributes.type !== 'button' &&\n      value\n    ) {\n      attributes.value = maskInputValue({\n        element: n,\n        type: getInputType(n),\n        tagName,\n        value,\n        maskInputOptions,\n        maskInputFn,\n      });\n    } else if (checked) {\n      attributes.checked = checked;\n    }\n  }\n  if (tagName === 'option') {\n    if ((n as HTMLOptionElement).selected && !maskInputOptions['select']) {\n      attributes.selected = true;\n    } else {\n      // ignore the html attribute (which corresponds to DOM (n as HTMLOptionElement).defaultSelected)\n      // if it's already been changed\n      delete attributes.selected;\n    }\n  }\n\n  if (tagName === 'dialog' && (n as HTMLDialogElement).open) {\n    // register what type of dialog is this\n    // `modal` or `non-modal`\n    // this is used to trigger `showModal()` or `show()` on replay (outside of rrweb-snapshot, in rrweb)\n    (attributes as DialogAttributes).rr_open_mode = n.matches('dialog:modal')\n      ? 'modal'\n      : 'non-modal';\n  }\n\n  // canvas image data\n  if (tagName === 'canvas' && recordCanvas) {\n    if ((n as ICanvas).__context === '2d') {\n      // only record this on 2d canvas\n      if (!is2DCanvasBlank(n as HTMLCanvasElement)) {\n        attributes.rr_dataURL = (n as HTMLCanvasElement).toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality,\n        );\n      }\n    } else if (!('__context' in n)) {\n      // context is unknown, better not call getContext to trigger it\n      const canvasDataURL = (n as HTMLCanvasElement).toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality,\n      );\n\n      // create blank canvas of same dimensions\n      const blankCanvas = doc.createElement('canvas');\n      blankCanvas.width = (n as HTMLCanvasElement).width;\n      blankCanvas.height = (n as HTMLCanvasElement).height;\n      const blankCanvasDataURL = blankCanvas.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality,\n      );\n\n      // no need to save dataURL if it's the same as blank canvas\n      if (canvasDataURL !== blankCanvasDataURL) {\n        attributes.rr_dataURL = canvasDataURL;\n      }\n    }\n  }\n  // save image offline\n  if (tagName === 'img' && inlineImages) {\n    if (!canvasService) {\n      canvasService = doc.createElement('canvas');\n      canvasCtx = canvasService.getContext('2d');\n    }\n    const image = n as HTMLImageElement;\n    const imageSrc: string =\n      image.currentSrc || image.getAttribute('src') || '<unknown-src>';\n    const priorCrossOrigin = image.crossOrigin;\n    const recordInlineImage = () => {\n      image.removeEventListener('load', recordInlineImage);\n      try {\n        canvasService!.width = image.naturalWidth;\n        canvasService!.height = image.naturalHeight;\n        canvasCtx!.drawImage(image, 0, 0);\n        attributes.rr_dataURL = canvasService!.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality,\n        );\n      } catch (err) {\n        if (image.crossOrigin !== 'anonymous') {\n          image.crossOrigin = 'anonymous';\n          if (image.complete && image.naturalWidth !== 0)\n            recordInlineImage(); // too early due to image reload\n          else image.addEventListener('load', recordInlineImage);\n          return;\n        } else {\n          console.warn(\n            `Cannot inline img src=${imageSrc}! Error: ${err as string}`,\n          );\n        }\n      }\n      if (image.crossOrigin === 'anonymous') {\n        priorCrossOrigin\n          ? (attributes.crossOrigin = priorCrossOrigin)\n          : image.removeAttribute('crossorigin');\n      }\n    };\n    // The image content may not have finished loading yet.\n    if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n    else image.addEventListener('load', recordInlineImage);\n  }\n  // media elements\n  if (tagName === 'audio' || tagName === 'video') {\n    const mediaAttributes = attributes as mediaAttributes;\n    mediaAttributes.rr_mediaState = (n as HTMLMediaElement).paused\n      ? 'paused'\n      : 'played';\n    mediaAttributes.rr_mediaCurrentTime = (n as HTMLMediaElement).currentTime;\n    mediaAttributes.rr_mediaPlaybackRate = (n as HTMLMediaElement).playbackRate;\n    mediaAttributes.rr_mediaMuted = (n as HTMLMediaElement).muted;\n    mediaAttributes.rr_mediaLoop = (n as HTMLMediaElement).loop;\n    mediaAttributes.rr_mediaVolume = (n as HTMLMediaElement).volume;\n  }\n  // Scroll\n  if (!newlyAddedElement) {\n    // `scrollTop` and `scrollLeft` are expensive calls because they trigger reflow.\n    // Since `scrollTop` & `scrollLeft` are always 0 when an element is added to the DOM.\n    // And scrolls also get picked up by rrweb's ScrollObserver\n    // So we can safely skip the `scrollTop/Left` calls for newly added elements\n    if (n.scrollLeft) {\n      attributes.rr_scrollLeft = n.scrollLeft;\n    }\n    if (n.scrollTop) {\n      attributes.rr_scrollTop = n.scrollTop;\n    }\n  }\n  // block element\n  if (needBlock) {\n    const { width, height } = n.getBoundingClientRect();\n    attributes = {\n      class: attributes.class,\n      rr_width: `${width}px`,\n      rr_height: `${height}px`,\n      ...(applyBackgroundColorToBlockedElements\n        ? { rr_background_color: _DEFAULT_BLOCKED_ELEMENT_BACKGROUND_COLOR }\n        : {}),\n    };\n  }\n  // iframe\n  if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src as string)) {\n    if (!(n as HTMLIFrameElement).contentDocument) {\n      // we can't record it directly as we can't see into it\n      // preserve the src attribute so a decision can be taken at replay time\n      attributes.rr_src = attributes.src;\n    }\n    delete attributes.src; // prevent auto loading\n  }\n\n  let isCustomElement: true | undefined;\n  try {\n    if (customElements.get(tagName)) isCustomElement = true;\n  } catch (e) {\n    // In case old browsers don't support customElements\n  }\n\n  return {\n    type: NodeType.Element,\n    tagName,\n    attributes,\n    childNodes: [],\n    isSVG: isSVGElement(n as Element) || undefined,\n    needBlock,\n    rootId,\n    isCustom: isCustomElement,\n  };\n}\n\nfunction lowerIfExists(\n  maybeAttr: string | number | boolean | undefined | null,\n): string {\n  if (maybeAttr === undefined || maybeAttr === null) {\n    return '';\n  } else {\n    return (maybeAttr as string).toLowerCase();\n  }\n}\n\nfunction slimDOMExcluded(\n  sn: serializedNode,\n  slimDOMOptions: SlimDOMOptions,\n): boolean {\n  if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\n    // TODO: convert IE conditional comments to real nodes\n    return true;\n  } else if (sn.type === NodeType.Element) {\n    if (\n      slimDOMOptions.script &&\n      // script tag\n      (sn.tagName === 'script' ||\n        // (module)preload link\n        (sn.tagName === 'link' &&\n          (sn.attributes.rel === 'preload' ||\n            sn.attributes.rel === 'modulepreload') &&\n          sn.attributes.as === 'script') ||\n        // prefetch link\n        (sn.tagName === 'link' &&\n          sn.attributes.rel === 'prefetch' &&\n          typeof sn.attributes.href === 'string' &&\n          extractFileExtension(sn.attributes.href) === 'js'))\n    ) {\n      return true;\n    } else if (\n      slimDOMOptions.headFavicon &&\n      ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\n        (sn.tagName === 'meta' &&\n          (lowerIfExists(sn.attributes.name).match(\n            /^msapplication-tile(image|color)$/,\n          ) ||\n            lowerIfExists(sn.attributes.name) === 'application-name' ||\n            lowerIfExists(sn.attributes.rel) === 'icon' ||\n            lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\n            lowerIfExists(sn.attributes.rel) === 'shortcut icon')))\n    ) {\n      return true;\n    } else if (sn.tagName === 'meta') {\n      if (\n        slimDOMOptions.headMetaDescKeywords &&\n        lowerIfExists(sn.attributes.name).match(/^description|keywords$/)\n      ) {\n        return true;\n      } else if (\n        slimDOMOptions.headMetaSocial &&\n        (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n          lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\n          lowerIfExists(sn.attributes.name) === 'pinterest')\n      ) {\n        return true;\n      } else if (\n        slimDOMOptions.headMetaRobots &&\n        (lowerIfExists(sn.attributes.name) === 'robots' ||\n          lowerIfExists(sn.attributes.name) === 'googlebot' ||\n          lowerIfExists(sn.attributes.name) === 'bingbot')\n      ) {\n        return true;\n      } else if (\n        slimDOMOptions.headMetaHttpEquiv &&\n        sn.attributes['http-equiv'] !== undefined\n      ) {\n        // e.g. X-UA-Compatible, Content-Type, Content-Language,\n        // cache-control, X-Translated-By\n        return true;\n      } else if (\n        slimDOMOptions.headMetaAuthorship &&\n        (lowerIfExists(sn.attributes.name) === 'author' ||\n          lowerIfExists(sn.attributes.name) === 'generator' ||\n          lowerIfExists(sn.attributes.name) === 'framework' ||\n          lowerIfExists(sn.attributes.name) === 'publisher' ||\n          lowerIfExists(sn.attributes.name) === 'progid' ||\n          lowerIfExists(sn.attributes.property).match(/^article:/) ||\n          lowerIfExists(sn.attributes.property).match(/^product:/))\n      ) {\n        return true;\n      } else if (\n        slimDOMOptions.headMetaVerification &&\n        (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\n          lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\n          lowerIfExists(sn.attributes.name) === 'csrf-token' ||\n          lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\n          lowerIfExists(sn.attributes.name) === 'verify-v1' ||\n          lowerIfExists(sn.attributes.name) === 'verification' ||\n          lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')\n      ) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\nfunction serializeAdoptedStyleSheets(\n  sheets: CSSStyleSheet[] | readonly CSSStyleSheet[],\n  onAdoptedStyleSheet: (sheet: CSSStyleSheet) => number,\n  emittedStyleIds: Set<number>,\n): serializedAdoptedStyleSheet[] {\n  return Array.from(sheets).map((sheet) => {\n    const styleId = onAdoptedStyleSheet(sheet);\n    let rules: serializedAdoptedStyleSheet['rules'] = [];\n    if (!emittedStyleIds.has(styleId)) {\n      emittedStyleIds.add(styleId);\n      try {\n        rules = Array.from(sheet.cssRules, (rule, index) => ({\n          rule: stringifyRule(rule, sheet.href),\n          index,\n        }));\n      } catch (e) {\n        if (e instanceof DOMException && e.name === 'SecurityError') {\n          // Cross-origin stylesheet: cssRules is intentionally blocked.\n        } else {\n          throw e;\n        }\n      }\n    }\n    return { styleId, rules };\n  });\n}\n\nexport function serializeNodeWithId(\n  n: Node,\n  options: {\n    doc: Document;\n    mirror: Mirror;\n    blockClass: string | RegExp;\n    blockSelector: string | null;\n    maskTextClass: string | RegExp;\n    maskTextSelector: string | null;\n    skipChild: boolean;\n    inlineStylesheet: boolean;\n    newlyAddedElement?: boolean;\n    maskInputOptions?: MaskInputOptions;\n    needsMask?: boolean;\n    maskTextFn: MaskTextFn | undefined;\n    maskInputFn: MaskInputFn | undefined;\n    maskAttributeFn?: MaskAttributeFn;\n    slimDOMOptions: SlimDOMOptions;\n    dataURLOptions?: DataURLOptions;\n    keepIframeSrcFn?: KeepIframeSrcFn;\n    inlineImages?: boolean;\n    recordCanvas?: boolean;\n    preserveWhiteSpace?: boolean;\n    onSerialize?: (n: Node) => unknown;\n    onAdoptedStyleSheet?: (sheet: CSSStyleSheet) => number;\n    /** @internal Tracks styleIds whose rules have already been serialized; shared across recursive calls within one document traversal. Not forwarded into iframe documents because CSSStyleSheet instances cannot be shared across browsing contexts. */\n    _emittedStyleIds?: Set<number>;\n    onIframeLoad?: (\n      iframeNode: HTMLIFrameElement,\n      node: serializedElementNodeWithId,\n    ) => unknown;\n    iframeLoadTimeout?: number;\n    onStylesheetLoad?: (\n      linkNode: HTMLLinkElement,\n      node: serializedElementNodeWithId,\n    ) => unknown;\n    stylesheetLoadTimeout?: number;\n    cssCaptured?: boolean;\n    applyBackgroundColorToBlockedElements?: boolean;\n  },\n): serializedNodeWithId | null {\n  const {\n    doc,\n    mirror,\n    blockClass,\n    blockSelector,\n    maskTextClass,\n    maskTextSelector,\n    skipChild = false,\n    inlineStylesheet = true,\n    maskInputOptions = {},\n    maskTextFn,\n    maskInputFn,\n    maskAttributeFn,\n    slimDOMOptions,\n    dataURLOptions = {},\n    inlineImages = false,\n    recordCanvas = false,\n    onSerialize,\n    onAdoptedStyleSheet,\n    onIframeLoad,\n    iframeLoadTimeout = 5000,\n    onStylesheetLoad,\n    stylesheetLoadTimeout = 5000,\n    keepIframeSrcFn = () => false,\n    newlyAddedElement = false,\n    cssCaptured = false,\n    applyBackgroundColorToBlockedElements = false,\n  } = options;\n  const emittedStyleIds = options._emittedStyleIds ?? new Set<number>();\n  let { needsMask } = options;\n  let { preserveWhiteSpace = true } = options;\n\n  if (!needsMask) {\n    // perf: if needsMask = true, children won't also need to check\n    const checkAncestors = needsMask === undefined; // if false, we've already checked ancestors\n    needsMask = needMaskingText(\n      n as Element,\n      maskTextClass,\n      maskTextSelector,\n      checkAncestors,\n    );\n  }\n\n  const _serializedNode = serializeNode(n, {\n    doc,\n    mirror,\n    blockClass,\n    blockSelector,\n    needsMask,\n    inlineStylesheet,\n    maskInputOptions,\n    maskTextFn,\n    maskInputFn,\n    maskAttributeFn,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement,\n    cssCaptured,\n    applyBackgroundColorToBlockedElements,\n  });\n  if (!_serializedNode) {\n    // TODO: dev only\n    console.warn(n, 'not serialized');\n    return null;\n  }\n\n  let id: number | undefined;\n  if (mirror.hasNode(n)) {\n    // Reuse the previous id\n    id = mirror.getId(n);\n  } else if (\n    slimDOMExcluded(_serializedNode, slimDOMOptions) ||\n    (!preserveWhiteSpace &&\n      _serializedNode.type === NodeType.Text &&\n      !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)\n  ) {\n    id = IGNORED_NODE;\n  } else {\n    id = genId();\n  }\n\n  const serializedNode = Object.assign(_serializedNode, { id });\n  // add IGNORED_NODE to mirror to track nextSiblings\n  mirror.add(n, serializedNode);\n\n  if (id === IGNORED_NODE) {\n    return null; // slimDOM\n  }\n\n  if (onSerialize) {\n    onSerialize(n);\n  }\n  let recordChild = !skipChild;\n  if (serializedNode.type === NodeType.Element) {\n    recordChild = recordChild && !serializedNode.needBlock;\n    // this property was not needed in replay side\n    delete serializedNode.needBlock;\n    const shadowRootEl = dom.shadowRoot(n);\n    if (shadowRootEl && isNativeShadowDom(shadowRootEl)) {\n      serializedNode.isShadowHost = true;\n      if (onAdoptedStyleSheet && shadowRootEl.adoptedStyleSheets?.length) {\n        serializedNode.adoptedStyleSheets = serializeAdoptedStyleSheets(\n          shadowRootEl.adoptedStyleSheets,\n          onAdoptedStyleSheet,\n          emittedStyleIds,\n        );\n      }\n    }\n  }\n  if (serializedNode.type === NodeType.Document && onAdoptedStyleSheet) {\n    const doc = n as Document;\n    if (doc.adoptedStyleSheets?.length) {\n      (serializedNode as documentNode).adoptedStyleSheets =\n        serializeAdoptedStyleSheets(\n          doc.adoptedStyleSheets,\n          onAdoptedStyleSheet,\n          emittedStyleIds,\n        );\n    }\n  }\n  if (\n    (serializedNode.type === NodeType.Document ||\n      serializedNode.type === NodeType.Element) &&\n    recordChild\n  ) {\n    if (\n      slimDOMOptions.headWhitespace &&\n      serializedNode.type === NodeType.Element &&\n      serializedNode.tagName === 'head'\n      // would impede performance: || getComputedStyle(n)['white-space'] === 'normal'\n    ) {\n      preserveWhiteSpace = false;\n    }\n    const bypassOptions = {\n      doc,\n      mirror,\n      blockClass,\n      blockSelector,\n      needsMask,\n      maskTextClass,\n      maskTextSelector,\n      skipChild,\n      inlineStylesheet,\n      maskInputOptions,\n      maskTextFn,\n      maskInputFn,\n      maskAttributeFn,\n      slimDOMOptions,\n      dataURLOptions,\n      inlineImages,\n      recordCanvas,\n      preserveWhiteSpace,\n      onSerialize,\n      onAdoptedStyleSheet,\n      _emittedStyleIds: emittedStyleIds,\n      onIframeLoad,\n      iframeLoadTimeout,\n      onStylesheetLoad,\n      stylesheetLoadTimeout,\n      keepIframeSrcFn,\n      cssCaptured: false,\n      applyBackgroundColorToBlockedElements,\n    };\n\n    if (\n      serializedNode.type === NodeType.Element &&\n      serializedNode.tagName === 'textarea' &&\n      (serializedNode as elementNode).attributes.value !== undefined\n    ) {\n      // value parameter in DOM reflects the correct value, so ignore childNode\n    } else {\n      if (\n        serializedNode.type === NodeType.Element &&\n        (serializedNode as elementNode).attributes._cssText !== undefined &&\n        typeof serializedNode.attributes._cssText === 'string'\n      ) {\n        bypassOptions.cssCaptured = true;\n      }\n      for (const childN of Array.from(dom.childNodes(n))) {\n        const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n        if (serializedChildNode) {\n          serializedNode.childNodes.push(serializedChildNode);\n        }\n      }\n    }\n\n    let shadowRootEl: ShadowRoot | null = null;\n    if (isElement(n) && (shadowRootEl = dom.shadowRoot(n))) {\n      for (const childN of Array.from(dom.childNodes(shadowRootEl))) {\n        const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n        if (serializedChildNode) {\n          isNativeShadowDom(shadowRootEl) &&\n            (serializedChildNode.isShadow = true);\n          serializedNode.childNodes.push(serializedChildNode);\n        }\n      }\n    }\n  }\n\n  const parent = dom.parentNode(n);\n  if (parent && isShadowRoot(parent) && isNativeShadowDom(parent)) {\n    serializedNode.isShadow = true;\n  }\n\n  if (\n    serializedNode.type === NodeType.Element &&\n    serializedNode.tagName === 'iframe'\n  ) {\n    onceIframeLoaded(\n      n as HTMLIFrameElement,\n      () => {\n        const iframeDoc = (n as HTMLIFrameElement).contentDocument;\n        if (iframeDoc && onIframeLoad) {\n          const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n            doc: iframeDoc,\n            mirror,\n            blockClass,\n            blockSelector,\n            needsMask,\n            maskTextClass,\n            maskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskTextFn,\n            maskInputFn,\n            maskAttributeFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onAdoptedStyleSheet,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn,\n          });\n\n          if (serializedIframeNode) {\n            onIframeLoad(\n              n as HTMLIFrameElement,\n              serializedIframeNode as serializedElementNodeWithId,\n            );\n          }\n        }\n      },\n      iframeLoadTimeout,\n    );\n  }\n\n  // <link rel=stylesheet href=...>\n  if (\n    serializedNode.type === NodeType.Element &&\n    serializedNode.tagName === 'link' &&\n    typeof serializedNode.attributes.rel === 'string' &&\n    (serializedNode.attributes.rel === 'stylesheet' ||\n      (serializedNode.attributes.rel === 'preload' &&\n        typeof serializedNode.attributes.href === 'string' &&\n        extractFileExtension(serializedNode.attributes.href) === 'css'))\n  ) {\n    onceStylesheetLoaded(\n      n as HTMLLinkElement,\n      () => {\n        if (onStylesheetLoad) {\n          const serializedLinkNode = serializeNodeWithId(n, {\n            doc,\n            mirror,\n            blockClass,\n            blockSelector,\n            needsMask,\n            maskTextClass,\n            maskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskTextFn,\n            maskInputFn,\n            maskAttributeFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn,\n          });\n\n          if (serializedLinkNode) {\n            onStylesheetLoad(\n              n as HTMLLinkElement,\n              serializedLinkNode as serializedElementNodeWithId,\n            );\n          }\n        }\n      },\n      stylesheetLoadTimeout,\n    );\n  }\n\n  return serializedNode;\n}\n\nfunction snapshot(\n  n: Document,\n  options?: {\n    mirror?: Mirror;\n    blockClass?: string | RegExp;\n    blockSelector?: string | null;\n    maskTextClass?: string | RegExp;\n    maskTextSelector?: string | null;\n    inlineStylesheet?: boolean;\n    maskAllInputs?: boolean | MaskInputOptions;\n    maskTextFn?: MaskTextFn;\n    maskInputFn?: MaskInputFn;\n    maskAttributeFn?: MaskAttributeFn;\n    slimDOM?: 'all' | boolean | SlimDOMOptions;\n    dataURLOptions?: DataURLOptions;\n    inlineImages?: boolean;\n    recordCanvas?: boolean;\n    preserveWhiteSpace?: boolean;\n    onSerialize?: (n: Node) => unknown;\n    onAdoptedStyleSheet?: (sheet: CSSStyleSheet) => number;\n    onIframeLoad?: (\n      iframeNode: HTMLIFrameElement,\n      node: serializedElementNodeWithId,\n    ) => unknown;\n    iframeLoadTimeout?: number;\n    onStylesheetLoad?: (\n      linkNode: HTMLLinkElement,\n      node: serializedElementNodeWithId,\n    ) => unknown;\n    stylesheetLoadTimeout?: number;\n    keepIframeSrcFn?: KeepIframeSrcFn;\n    applyBackgroundColorToBlockedElements?: boolean;\n  },\n): serializedNodeWithId | null {\n  const {\n    mirror = new Mirror(),\n    blockClass = 'rr-block',\n    blockSelector = null,\n    maskTextClass = 'rr-mask',\n    maskTextSelector = null,\n    inlineStylesheet = true,\n    inlineImages = false,\n    recordCanvas = false,\n    maskAllInputs = false,\n    maskTextFn,\n    maskInputFn,\n    maskAttributeFn,\n    slimDOM = false,\n    dataURLOptions,\n    preserveWhiteSpace,\n    onSerialize,\n    onAdoptedStyleSheet,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn = () => false,\n    applyBackgroundColorToBlockedElements = false,\n  } = options || {};\n  const maskInputOptions: MaskInputOptions =\n    maskAllInputs === true\n      ? {\n          color: true,\n          date: true,\n          'datetime-local': true,\n          email: true,\n          month: true,\n          number: true,\n          range: true,\n          search: true,\n          tel: true,\n          text: true,\n          time: true,\n          url: true,\n          week: true,\n          textarea: true,\n          select: true,\n          password: true,\n        }\n      : maskAllInputs === false\n      ? {\n          password: true,\n        }\n      : maskAllInputs;\n  const slimDOMOptions: SlimDOMOptions =\n    slimDOM === true || slimDOM === 'all'\n      ? // if true: set of sensible options that should not throw away any information\n        {\n          script: true,\n          comment: true,\n          headFavicon: true,\n          headWhitespace: true,\n          headMetaDescKeywords: slimDOM === 'all', // destructive\n          headMetaSocial: true,\n          headMetaRobots: true,\n          headMetaHttpEquiv: true,\n          headMetaAuthorship: true,\n          headMetaVerification: true,\n        }\n      : slimDOM === false\n      ? {}\n      : slimDOM;\n  return serializeNodeWithId(n, {\n    doc: n,\n    mirror,\n    blockClass,\n    blockSelector,\n    maskTextClass,\n    maskTextSelector,\n    skipChild: false,\n    inlineStylesheet,\n    maskInputOptions,\n    maskTextFn,\n    maskInputFn,\n    maskAttributeFn,\n    slimDOMOptions,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    preserveWhiteSpace,\n    onSerialize,\n    onAdoptedStyleSheet,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn,\n    newlyAddedElement: false,\n    applyBackgroundColorToBlockedElements,\n  });\n}\n\nexport function visitSnapshot(\n  node: serializedNodeWithId,\n  onVisit: (node: serializedNodeWithId) => unknown,\n) {\n  function walk(current: serializedNodeWithId) {\n    onVisit(current);\n    if (\n      current.type === NodeType.Document ||\n      current.type === NodeType.Element\n    ) {\n      current.childNodes.forEach(walk);\n    }\n  }\n\n  walk(node);\n}\n\nexport function cleanupSnapshot() {\n  // allow a new recording to start numbering nodes from scratch\n  _id = 1;\n}\n\nexport default snapshot;\n", "import type { AcceptedPlugin, Rule } from 'postcss';\n\nconst MEDIA_SELECTOR = /(max|min)-device-(width|height)/;\nconst MEDIA_SELECTOR_GLOBAL = new RegExp(MEDIA_SELECTOR.source, 'g');\n\nconst mediaSelectorPlugin: AcceptedPlugin = {\n  postcssPlugin: 'postcss-custom-selectors',\n  prepare() {\n    return {\n      postcssPlugin: 'postcss-custom-selectors',\n      AtRule: function (atrule) {\n        if (atrule.params.match(MEDIA_SELECTOR_GLOBAL)) {\n          atrule.params = atrule.params.replace(MEDIA_SELECTOR_GLOBAL, '$1-$2');\n        }\n      },\n    };\n  },\n};\n\n// Simplified from https://github.com/giuseppeg/postcss-pseudo-classes/blob/master/index.js\nconst pseudoClassPlugin: AcceptedPlugin = {\n  postcssPlugin: 'postcss-hover-classes',\n  prepare: function () {\n    const fixed: Rule[] = [];\n    return {\n      Rule: function (rule) {\n        if (fixed.indexOf(rule) !== -1) {\n          return;\n        }\n        fixed.push(rule);\n        rule.selectors.forEach(function (selector) {\n          if (selector.includes(':hover')) {\n            rule.selector += ',\\n' + selector.replace(/:hover/g, '.\\\\:hover');\n          }\n        });\n      },\n    };\n  },\n};\n\nexport { mediaSelectorPlugin, pseudoClassPlugin };\n", "var x=String;\nvar create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x}};\nmodule.exports=create();\nmodule.exports.createColors = create;\n", "export default {}", "'use strict'\n\nlet pico = require('picocolors')\n\nlet terminalHighlight = require('./terminal-highlight')\n\nclass CssSyntaxError extends Error {\n  constructor(message, line, column, source, file, plugin) {\n    super(message)\n    this.name = 'CssSyntaxError'\n    this.reason = message\n\n    if (file) {\n      this.file = file\n    }\n    if (source) {\n      this.source = source\n    }\n    if (plugin) {\n      this.plugin = plugin\n    }\n    if (typeof line !== 'undefined' && typeof column !== 'undefined') {\n      if (typeof line === 'number') {\n        this.line = line\n        this.column = column\n      } else {\n        this.line = line.line\n        this.column = line.column\n        this.endLine = column.line\n        this.endColumn = column.column\n      }\n    }\n\n    this.setMessage()\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, CssSyntaxError)\n    }\n  }\n\n  setMessage() {\n    this.message = this.plugin ? this.plugin + ': ' : ''\n    this.message += this.file ? this.file : '<css input>'\n    if (typeof this.line !== 'undefined') {\n      this.message += ':' + this.line + ':' + this.column\n    }\n    this.message += ': ' + this.reason\n  }\n\n  showSourceCode(color) {\n    if (!this.source) return ''\n\n    let css = this.source\n    if (color == null) color = pico.isColorSupported\n    if (terminalHighlight) {\n      if (color) css = terminalHighlight(css)\n    }\n\n    let lines = css.split(/\\r?\\n/)\n    let start = Math.max(this.line - 3, 0)\n    let end = Math.min(this.line + 2, lines.length)\n\n    let maxWidth = String(end).length\n\n    let mark, aside\n    if (color) {\n      let { bold, gray, red } = pico.createColors(true)\n      mark = text => bold(red(text))\n      aside = text => gray(text)\n    } else {\n      mark = aside = str => str\n    }\n\n    return lines\n      .slice(start, end)\n      .map((line, index) => {\n        let number = start + 1 + index\n        let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | '\n        if (number === this.line) {\n          let spacing =\n            aside(gutter.replace(/\\d/g, ' ')) +\n            line.slice(0, this.column - 1).replace(/[^\\t]/g, ' ')\n          return mark('>') + aside(gutter) + line + '\\n ' + spacing + mark('^')\n        }\n        return ' ' + aside(gutter) + line\n      })\n      .join('\\n')\n  }\n\n  toString() {\n    let code = this.showSourceCode()\n    if (code) {\n      code = '\\n\\n' + code + '\\n'\n    }\n    return this.name + ': ' + this.message + code\n  }\n}\n\nmodule.exports = CssSyntaxError\nCssSyntaxError.default = CssSyntaxError\n", "'use strict'\n\nmodule.exports.isClean = Symbol('isClean')\n\nmodule.exports.my = Symbol('my')\n", "'use strict'\n\nconst DEFAULT_RAW = {\n  after: '\\n',\n  beforeClose: '\\n',\n  beforeComment: '\\n',\n  beforeDecl: '\\n',\n  beforeOpen: ' ',\n  beforeRule: '\\n',\n  colon: ': ',\n  commentLeft: ' ',\n  commentRight: ' ',\n  emptyBody: '',\n  indent: '    ',\n  semicolon: false\n}\n\nfunction capitalize(str) {\n  return str[0].toUpperCase() + str.slice(1)\n}\n\nclass Stringifier {\n  constructor(builder) {\n    this.builder = builder\n  }\n\n  atrule(node, semicolon) {\n    let name = '@' + node.name\n    let params = node.params ? this.rawValue(node, 'params') : ''\n\n    if (typeof node.raws.afterName !== 'undefined') {\n      name += node.raws.afterName\n    } else if (params) {\n      name += ' '\n    }\n\n    if (node.nodes) {\n      this.block(node, name + params)\n    } else {\n      let end = (node.raws.between || '') + (semicolon ? ';' : '')\n      this.builder(name + params + end, node)\n    }\n  }\n\n  beforeAfter(node, detect) {\n    let value\n    if (node.type === 'decl') {\n      value = this.raw(node, null, 'beforeDecl')\n    } else if (node.type === 'comment') {\n      value = this.raw(node, null, 'beforeComment')\n    } else if (detect === 'before') {\n      value = this.raw(node, null, 'beforeRule')\n    } else {\n      value = this.raw(node, null, 'beforeClose')\n    }\n\n    let buf = node.parent\n    let depth = 0\n    while (buf && buf.type !== 'root') {\n      depth += 1\n      buf = buf.parent\n    }\n\n    if (value.includes('\\n')) {\n      let indent = this.raw(node, null, 'indent')\n      if (indent.length) {\n        for (let step = 0; step < depth; step++) value += indent\n      }\n    }\n\n    return value\n  }\n\n  block(node, start) {\n    let between = this.raw(node, 'between', 'beforeOpen')\n    this.builder(start + between + '{', node, 'start')\n\n    let after\n    if (node.nodes && node.nodes.length) {\n      this.body(node)\n      after = this.raw(node, 'after')\n    } else {\n      after = this.raw(node, 'after', 'emptyBody')\n    }\n\n    if (after) this.builder(after)\n    this.builder('}', node, 'end')\n  }\n\n  body(node) {\n    let last = node.nodes.length - 1\n    while (last > 0) {\n      if (node.nodes[last].type !== 'comment') break\n      last -= 1\n    }\n\n    let semicolon = this.raw(node, 'semicolon')\n    for (let i = 0; i < node.nodes.length; i++) {\n      let child = node.nodes[i]\n      let before = this.raw(child, 'before')\n      if (before) this.builder(before)\n      this.stringify(child, last !== i || semicolon)\n    }\n  }\n\n  comment(node) {\n    let left = this.raw(node, 'left', 'commentLeft')\n    let right = this.raw(node, 'right', 'commentRight')\n    this.builder('/*' + left + node.text + right + '*/', node)\n  }\n\n  decl(node, semicolon) {\n    let between = this.raw(node, 'between', 'colon')\n    let string = node.prop + between + this.rawValue(node, 'value')\n\n    if (node.important) {\n      string += node.raws.important || ' !important'\n    }\n\n    if (semicolon) string += ';'\n    this.builder(string, node)\n  }\n\n  document(node) {\n    this.body(node)\n  }\n\n  raw(node, own, detect) {\n    let value\n    if (!detect) detect = own\n\n    // Already had\n    if (own) {\n      value = node.raws[own]\n      if (typeof value !== 'undefined') return value\n    }\n\n    let parent = node.parent\n\n    if (detect === 'before') {\n      // Hack for first rule in CSS\n      if (!parent || (parent.type === 'root' && parent.first === node)) {\n        return ''\n      }\n\n      // `root` nodes in `document` should use only their own raws\n      if (parent && parent.type === 'document') {\n        return ''\n      }\n    }\n\n    // Floating child without parent\n    if (!parent) return DEFAULT_RAW[detect]\n\n    // Detect style by other nodes\n    let root = node.root()\n    if (!root.rawCache) root.rawCache = {}\n    if (typeof root.rawCache[detect] !== 'undefined') {\n      return root.rawCache[detect]\n    }\n\n    if (detect === 'before' || detect === 'after') {\n      return this.beforeAfter(node, detect)\n    } else {\n      let method = 'raw' + capitalize(detect)\n      if (this[method]) {\n        value = this[method](root, node)\n      } else {\n        root.walk(i => {\n          value = i.raws[own]\n          if (typeof value !== 'undefined') return false\n        })\n      }\n    }\n\n    if (typeof value === 'undefined') value = DEFAULT_RAW[detect]\n\n    root.rawCache[detect] = value\n    return value\n  }\n\n  rawBeforeClose(root) {\n    let value\n    root.walk(i => {\n      if (i.nodes && i.nodes.length > 0) {\n        if (typeof i.raws.after !== 'undefined') {\n          value = i.raws.after\n          if (value.includes('\\n')) {\n            value = value.replace(/[^\\n]+$/, '')\n          }\n          return false\n        }\n      }\n    })\n    if (value) value = value.replace(/\\S/g, '')\n    return value\n  }\n\n  rawBeforeComment(root, node) {\n    let value\n    root.walkComments(i => {\n      if (typeof i.raws.before !== 'undefined') {\n        value = i.raws.before\n        if (value.includes('\\n')) {\n          value = value.replace(/[^\\n]+$/, '')\n        }\n        return false\n      }\n    })\n    if (typeof value === 'undefined') {\n      value = this.raw(node, null, 'beforeDecl')\n    } else if (value) {\n      value = value.replace(/\\S/g, '')\n    }\n    return value\n  }\n\n  rawBeforeDecl(root, node) {\n    let value\n    root.walkDecls(i => {\n      if (typeof i.raws.before !== 'undefined') {\n        value = i.raws.before\n        if (value.includes('\\n')) {\n          value = value.replace(/[^\\n]+$/, '')\n        }\n        return false\n      }\n    })\n    if (typeof value === 'undefined') {\n      value = this.raw(node, null, 'beforeRule')\n    } else if (value) {\n      value = value.replace(/\\S/g, '')\n    }\n    return value\n  }\n\n  rawBeforeOpen(root) {\n    let value\n    root.walk(i => {\n      if (i.type !== 'decl') {\n        value = i.raws.between\n        if (typeof value !== 'undefined') return false\n      }\n    })\n    return value\n  }\n\n  rawBeforeRule(root) {\n    let value\n    root.walk(i => {\n      if (i.nodes && (i.parent !== root || root.first !== i)) {\n        if (typeof i.raws.before !== 'undefined') {\n          value = i.raws.before\n          if (value.includes('\\n')) {\n            value = value.replace(/[^\\n]+$/, '')\n          }\n          return false\n        }\n      }\n    })\n    if (value) value = value.replace(/\\S/g, '')\n    return value\n  }\n\n  rawColon(root) {\n    let value\n    root.walkDecls(i => {\n      if (typeof i.raws.between !== 'undefined') {\n        value = i.raws.between.replace(/[^\\s:]/g, '')\n        return false\n      }\n    })\n    return value\n  }\n\n  rawEmptyBody(root) {\n    let value\n    root.walk(i => {\n      if (i.nodes && i.nodes.length === 0) {\n        value = i.raws.after\n        if (typeof value !== 'undefined') return false\n      }\n    })\n    return value\n  }\n\n  rawIndent(root) {\n    if (root.raws.indent) return root.raws.indent\n    let value\n    root.walk(i => {\n      let p = i.parent\n      if (p && p !== root && p.parent && p.parent === root) {\n        if (typeof i.raws.before !== 'undefined') {\n          let parts = i.raws.before.split('\\n')\n          value = parts[parts.length - 1]\n          value = value.replace(/\\S/g, '')\n          return false\n        }\n      }\n    })\n    return value\n  }\n\n  rawSemicolon(root) {\n    let value\n    root.walk(i => {\n      if (i.nodes && i.nodes.length && i.last.type === 'decl') {\n        value = i.raws.semicolon\n        if (typeof value !== 'undefined') return false\n      }\n    })\n    return value\n  }\n\n  rawValue(node, prop) {\n    let value = node[prop]\n    let raw = node.raws[prop]\n    if (raw && raw.value === value) {\n      return raw.raw\n    }\n\n    return value\n  }\n\n  root(node) {\n    this.body(node)\n    if (node.raws.after) this.builder(node.raws.after)\n  }\n\n  rule(node) {\n    this.block(node, this.rawValue(node, 'selector'))\n    if (node.raws.ownSemicolon) {\n      this.builder(node.raws.ownSemicolon, node, 'end')\n    }\n  }\n\n  stringify(node, semicolon) {\n    /* c8 ignore start */\n    if (!this[node.type]) {\n      throw new Error(\n        'Unknown AST node type ' +\n          node.type +\n          '. ' +\n          'Maybe you need to change PostCSS stringifier.'\n      )\n    }\n    /* c8 ignore stop */\n    this[node.type](node, semicolon)\n  }\n}\n\nmodule.exports = Stringifier\nStringifier.default = Stringifier\n", "'use strict'\n\nlet Stringifier = require('./stringifier')\n\nfunction stringify(node, builder) {\n  let str = new Stringifier(builder)\n  str.stringify(node)\n}\n\nmodule.exports = stringify\nstringify.default = stringify\n", "'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet CssSyntaxError = require('./css-syntax-error')\nlet Stringifier = require('./stringifier')\nlet stringify = require('./stringify')\n\nfunction cloneNode(obj, parent) {\n  let cloned = new obj.constructor()\n\n  for (let i in obj) {\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n      /* c8 ignore next 2 */\n      continue\n    }\n    if (i === 'proxyCache') continue\n    let value = obj[i]\n    let type = typeof value\n\n    if (i === 'parent' && type === 'object') {\n      if (parent) cloned[i] = parent\n    } else if (i === 'source') {\n      cloned[i] = value\n    } else if (Array.isArray(value)) {\n      cloned[i] = value.map(j => cloneNode(j, cloned))\n    } else {\n      if (type === 'object' && value !== null) value = cloneNode(value)\n      cloned[i] = value\n    }\n  }\n\n  return cloned\n}\n\nclass Node {\n  constructor(defaults = {}) {\n    this.raws = {}\n    this[isClean] = false\n    this[my] = true\n\n    for (let name in defaults) {\n      if (name === 'nodes') {\n        this.nodes = []\n        for (let node of defaults[name]) {\n          if (typeof node.clone === 'function') {\n            this.append(node.clone())\n          } else {\n            this.append(node)\n          }\n        }\n      } else {\n        this[name] = defaults[name]\n      }\n    }\n  }\n\n  addToError(error) {\n    error.postcssNode = this\n    if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n      let s = this.source\n      error.stack = error.stack.replace(\n        /\\n\\s{4}at /,\n        `$&${s.input.from}:${s.start.line}:${s.start.column}$&`\n      )\n    }\n    return error\n  }\n\n  after(add) {\n    this.parent.insertAfter(this, add)\n    return this\n  }\n\n  assign(overrides = {}) {\n    for (let name in overrides) {\n      this[name] = overrides[name]\n    }\n    return this\n  }\n\n  before(add) {\n    this.parent.insertBefore(this, add)\n    return this\n  }\n\n  cleanRaws(keepBetween) {\n    delete this.raws.before\n    delete this.raws.after\n    if (!keepBetween) delete this.raws.between\n  }\n\n  clone(overrides = {}) {\n    let cloned = cloneNode(this)\n    for (let name in overrides) {\n      cloned[name] = overrides[name]\n    }\n    return cloned\n  }\n\n  cloneAfter(overrides = {}) {\n    let cloned = this.clone(overrides)\n    this.parent.insertAfter(this, cloned)\n    return cloned\n  }\n\n  cloneBefore(overrides = {}) {\n    let cloned = this.clone(overrides)\n    this.parent.insertBefore(this, cloned)\n    return cloned\n  }\n\n  error(message, opts = {}) {\n    if (this.source) {\n      let { end, start } = this.rangeBy(opts)\n      return this.source.input.error(\n        message,\n        { column: start.column, line: start.line },\n        { column: end.column, line: end.line },\n        opts\n      )\n    }\n    return new CssSyntaxError(message)\n  }\n\n  getProxyProcessor() {\n    return {\n      get(node, prop) {\n        if (prop === 'proxyOf') {\n          return node\n        } else if (prop === 'root') {\n          return () => node.root().toProxy()\n        } else {\n          return node[prop]\n        }\n      },\n\n      set(node, prop, value) {\n        if (node[prop] === value) return true\n        node[prop] = value\n        if (\n          prop === 'prop' ||\n          prop === 'value' ||\n          prop === 'name' ||\n          prop === 'params' ||\n          prop === 'important' ||\n          /* c8 ignore next */\n          prop === 'text'\n        ) {\n          node.markDirty()\n        }\n        return true\n      }\n    }\n  }\n\n  markDirty() {\n    if (this[isClean]) {\n      this[isClean] = false\n      let next = this\n      while ((next = next.parent)) {\n        next[isClean] = false\n      }\n    }\n  }\n\n  next() {\n    if (!this.parent) return undefined\n    let index = this.parent.index(this)\n    return this.parent.nodes[index + 1]\n  }\n\n  positionBy(opts, stringRepresentation) {\n    let pos = this.source.start\n    if (opts.index) {\n      pos = this.positionInside(opts.index, stringRepresentation)\n    } else if (opts.word) {\n      stringRepresentation = this.toString()\n      let index = stringRepresentation.indexOf(opts.word)\n      if (index !== -1) pos = this.positionInside(index, stringRepresentation)\n    }\n    return pos\n  }\n\n  positionInside(index, stringRepresentation) {\n    let string = stringRepresentation || this.toString()\n    let column = this.source.start.column\n    let line = this.source.start.line\n\n    for (let i = 0; i < index; i++) {\n      if (string[i] === '\\n') {\n        column = 1\n        line += 1\n      } else {\n        column += 1\n      }\n    }\n\n    return { column, line }\n  }\n\n  prev() {\n    if (!this.parent) return undefined\n    let index = this.parent.index(this)\n    return this.parent.nodes[index - 1]\n  }\n\n  rangeBy(opts) {\n    let start = {\n      column: this.source.start.column,\n      line: this.source.start.line\n    }\n    let end = this.source.end\n      ? {\n        column: this.source.end.column + 1,\n        line: this.source.end.line\n      }\n      : {\n        column: start.column + 1,\n        line: start.line\n      }\n\n    if (opts.word) {\n      let stringRepresentation = this.toString()\n      let index = stringRepresentation.indexOf(opts.word)\n      if (index !== -1) {\n        start = this.positionInside(index, stringRepresentation)\n        end = this.positionInside(index + opts.word.length, stringRepresentation)\n      }\n    } else {\n      if (opts.start) {\n        start = {\n          column: opts.start.column,\n          line: opts.start.line\n        }\n      } else if (opts.index) {\n        start = this.positionInside(opts.index)\n      }\n\n      if (opts.end) {\n        end = {\n          column: opts.end.column,\n          line: opts.end.line\n        }\n      } else if (typeof opts.endIndex === 'number') {\n        end = this.positionInside(opts.endIndex)\n      } else if (opts.index) {\n        end = this.positionInside(opts.index + 1)\n      }\n    }\n\n    if (\n      end.line < start.line ||\n      (end.line === start.line && end.column <= start.column)\n    ) {\n      end = { column: start.column + 1, line: start.line }\n    }\n\n    return { end, start }\n  }\n\n  raw(prop, defaultType) {\n    let str = new Stringifier()\n    return str.raw(this, prop, defaultType)\n  }\n\n  remove() {\n    if (this.parent) {\n      this.parent.removeChild(this)\n    }\n    this.parent = undefined\n    return this\n  }\n\n  replaceWith(...nodes) {\n    if (this.parent) {\n      let bookmark = this\n      let foundSelf = false\n      for (let node of nodes) {\n        if (node === this) {\n          foundSelf = true\n        } else if (foundSelf) {\n          this.parent.insertAfter(bookmark, node)\n          bookmark = node\n        } else {\n          this.parent.insertBefore(bookmark, node)\n        }\n      }\n\n      if (!foundSelf) {\n        this.remove()\n      }\n    }\n\n    return this\n  }\n\n  root() {\n    let result = this\n    while (result.parent && result.parent.type !== 'document') {\n      result = result.parent\n    }\n    return result\n  }\n\n  toJSON(_, inputs) {\n    let fixed = {}\n    let emitInputs = inputs == null\n    inputs = inputs || new Map()\n    let inputsNextIndex = 0\n\n    for (let name in this) {\n      if (!Object.prototype.hasOwnProperty.call(this, name)) {\n        /* c8 ignore next 2 */\n        continue\n      }\n      if (name === 'parent' || name === 'proxyCache') continue\n      let value = this[name]\n\n      if (Array.isArray(value)) {\n        fixed[name] = value.map(i => {\n          if (typeof i === 'object' && i.toJSON) {\n            return i.toJSON(null, inputs)\n          } else {\n            return i\n          }\n        })\n      } else if (typeof value === 'object' && value.toJSON) {\n        fixed[name] = value.toJSON(null, inputs)\n      } else if (name === 'source') {\n        let inputId = inputs.get(value.input)\n        if (inputId == null) {\n          inputId = inputsNextIndex\n          inputs.set(value.input, inputsNextIndex)\n          inputsNextIndex++\n        }\n        fixed[name] = {\n          end: value.end,\n          inputId,\n          start: value.start\n        }\n      } else {\n        fixed[name] = value\n      }\n    }\n\n    if (emitInputs) {\n      fixed.inputs = [...inputs.keys()].map(input => input.toJSON())\n    }\n\n    return fixed\n  }\n\n  toProxy() {\n    if (!this.proxyCache) {\n      this.proxyCache = new Proxy(this, this.getProxyProcessor())\n    }\n    return this.proxyCache\n  }\n\n  toString(stringifier = stringify) {\n    if (stringifier.stringify) stringifier = stringifier.stringify\n    let result = ''\n    stringifier(this, i => {\n      result += i\n    })\n    return result\n  }\n\n  warn(result, text, opts) {\n    let data = { node: this }\n    for (let i in opts) data[i] = opts[i]\n    return result.warn(text, data)\n  }\n\n  get proxyOf() {\n    return this\n  }\n}\n\nmodule.exports = Node\nNode.default = Node\n", "'use strict'\n\nlet Node = require('./node')\n\nclass Declaration extends Node {\n  constructor(defaults) {\n    if (\n      defaults &&\n      typeof defaults.value !== 'undefined' &&\n      typeof defaults.value !== 'string'\n    ) {\n      defaults = { ...defaults, value: String(defaults.value) }\n    }\n    super(defaults)\n    this.type = 'decl'\n  }\n\n  get variable() {\n    return this.prop.startsWith('--') || this.prop[0] === '$'\n  }\n}\n\nmodule.exports = Declaration\nDeclaration.default = Declaration\n", "let urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n  return (size = defaultSize) => {\n    let id = ''\n    let i = size\n    while (i--) {\n      id += alphabet[(Math.random() * alphabet.length) | 0]\n    }\n    return id\n  }\n}\nlet nanoid = (size = 21) => {\n  let id = ''\n  let i = size\n  while (i--) {\n    id += urlAlphabet[(Math.random() * 64) | 0]\n  }\n  return id\n}\nmodule.exports = { nanoid, customAlphabet }\n", "'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { existsSync, readFileSync } = require('fs')\nlet { dirname, join } = require('path')\n\nfunction fromBase64(str) {\n  if (Buffer) {\n    return Buffer.from(str, 'base64').toString()\n  } else {\n    /* c8 ignore next 2 */\n    return window.atob(str)\n  }\n}\n\nclass PreviousMap {\n  constructor(css, opts) {\n    if (opts.map === false) return\n    this.loadAnnotation(css)\n    this.inline = this.startWith(this.annotation, 'data:')\n\n    let prev = opts.map ? opts.map.prev : undefined\n    let text = this.loadMap(opts.from, prev)\n    if (!this.mapFile && opts.from) {\n      this.mapFile = opts.from\n    }\n    if (this.mapFile) this.root = dirname(this.mapFile)\n    if (text) this.text = text\n  }\n\n  consumer() {\n    if (!this.consumerCache) {\n      this.consumerCache = new SourceMapConsumer(this.text)\n    }\n    return this.consumerCache\n  }\n\n  decodeInline(text) {\n    let baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/\n    let baseUri = /^data:application\\/json;base64,/\n    let charsetUri = /^data:application\\/json;charset=utf-?8,/\n    let uri = /^data:application\\/json,/\n\n    if (charsetUri.test(text) || uri.test(text)) {\n      return decodeURIComponent(text.substr(RegExp.lastMatch.length))\n    }\n\n    if (baseCharsetUri.test(text) || baseUri.test(text)) {\n      return fromBase64(text.substr(RegExp.lastMatch.length))\n    }\n\n    let encoding = text.match(/data:application\\/json;([^,]+),/)[1]\n    throw new Error('Unsupported source map encoding ' + encoding)\n  }\n\n  getAnnotationURL(sourceMapString) {\n    return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, '').trim()\n  }\n\n  isMap(map) {\n    if (typeof map !== 'object') return false\n    return (\n      typeof map.mappings === 'string' ||\n      typeof map._mappings === 'string' ||\n      Array.isArray(map.sections)\n    )\n  }\n\n  loadAnnotation(css) {\n    let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm)\n    if (!comments) return\n\n    // sourceMappingURLs from comments, strings, etc.\n    let start = css.lastIndexOf(comments.pop())\n    let end = css.indexOf('*/', start)\n\n    if (start > -1 && end > -1) {\n      // Locate the last sourceMappingURL to avoid pickin\n      this.annotation = this.getAnnotationURL(css.substring(start, end))\n    }\n  }\n\n  loadFile(path) {\n    this.root = dirname(path)\n    if (existsSync(path)) {\n      this.mapFile = path\n      return readFileSync(path, 'utf-8').toString().trim()\n    }\n  }\n\n  loadMap(file, prev) {\n    if (prev === false) return false\n\n    if (prev) {\n      if (typeof prev === 'string') {\n        return prev\n      } else if (typeof prev === 'function') {\n        let prevPath = prev(file)\n        if (prevPath) {\n          let map = this.loadFile(prevPath)\n          if (!map) {\n            throw new Error(\n              'Unable to load previous source map: ' + prevPath.toString()\n            )\n          }\n          return map\n        }\n      } else if (prev instanceof SourceMapConsumer) {\n        return SourceMapGenerator.fromSourceMap(prev).toString()\n      } else if (prev instanceof SourceMapGenerator) {\n        return prev.toString()\n      } else if (this.isMap(prev)) {\n        return JSON.stringify(prev)\n      } else {\n        throw new Error(\n          'Unsupported previous source map format: ' + prev.toString()\n        )\n      }\n    } else if (this.inline) {\n      return this.decodeInline(this.annotation)\n    } else if (this.annotation) {\n      let map = this.annotation\n      if (file) map = join(dirname(file), map)\n      return this.loadFile(map)\n    }\n  }\n\n  startWith(string, start) {\n    if (!string) return false\n    return string.substr(0, start.length) === start\n  }\n\n  withContent() {\n    return !!(\n      this.consumer().sourcesContent &&\n      this.consumer().sourcesContent.length > 0\n    )\n  }\n}\n\nmodule.exports = PreviousMap\nPreviousMap.default = PreviousMap\n", "'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { fileURLToPath, pathToFileURL } = require('url')\nlet { isAbsolute, resolve } = require('path')\nlet { nanoid } = require('nanoid/non-secure')\n\nlet terminalHighlight = require('./terminal-highlight')\nlet CssSyntaxError = require('./css-syntax-error')\nlet PreviousMap = require('./previous-map')\n\nlet fromOffsetCache = Symbol('fromOffsetCache')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(resolve && isAbsolute)\n\nclass Input {\n  constructor(css, opts = {}) {\n    if (\n      css === null ||\n      typeof css === 'undefined' ||\n      (typeof css === 'object' && !css.toString)\n    ) {\n      throw new Error(`PostCSS received ${css} instead of CSS string`)\n    }\n\n    this.css = css.toString()\n\n    if (this.css[0] === '\\uFEFF' || this.css[0] === '\\uFFFE') {\n      this.hasBOM = true\n      this.css = this.css.slice(1)\n    } else {\n      this.hasBOM = false\n    }\n\n    if (opts.from) {\n      if (\n        !pathAvailable ||\n        /^\\w+:\\/\\//.test(opts.from) ||\n        isAbsolute(opts.from)\n      ) {\n        this.file = opts.from\n      } else {\n        this.file = resolve(opts.from)\n      }\n    }\n\n    if (pathAvailable && sourceMapAvailable) {\n      let map = new PreviousMap(this.css, opts)\n      if (map.text) {\n        this.map = map\n        let file = map.consumer().file\n        if (!this.file && file) this.file = this.mapResolve(file)\n      }\n    }\n\n    if (!this.file) {\n      this.id = '<input css ' + nanoid(6) + '>'\n    }\n    if (this.map) this.map.file = this.from\n  }\n\n  error(message, line, column, opts = {}) {\n    let result, endLine, endColumn\n\n    if (line && typeof line === 'object') {\n      let start = line\n      let end = column\n      if (typeof start.offset === 'number') {\n        let pos = this.fromOffset(start.offset)\n        line = pos.line\n        column = pos.col\n      } else {\n        line = start.line\n        column = start.column\n      }\n      if (typeof end.offset === 'number') {\n        let pos = this.fromOffset(end.offset)\n        endLine = pos.line\n        endColumn = pos.col\n      } else {\n        endLine = end.line\n        endColumn = end.column\n      }\n    } else if (!column) {\n      let pos = this.fromOffset(line)\n      line = pos.line\n      column = pos.col\n    }\n\n    let origin = this.origin(line, column, endLine, endColumn)\n    if (origin) {\n      result = new CssSyntaxError(\n        message,\n        origin.endLine === undefined\n          ? origin.line\n          : { column: origin.column, line: origin.line },\n        origin.endLine === undefined\n          ? origin.column\n          : { column: origin.endColumn, line: origin.endLine },\n        origin.source,\n        origin.file,\n        opts.plugin\n      )\n    } else {\n      result = new CssSyntaxError(\n        message,\n        endLine === undefined ? line : { column, line },\n        endLine === undefined ? column : { column: endColumn, line: endLine },\n        this.css,\n        this.file,\n        opts.plugin\n      )\n    }\n\n    result.input = { column, endColumn, endLine, line, source: this.css }\n    if (this.file) {\n      if (pathToFileURL) {\n        result.input.url = pathToFileURL(this.file).toString()\n      }\n      result.input.file = this.file\n    }\n\n    return result\n  }\n\n  fromOffset(offset) {\n    let lastLine, lineToIndex\n    if (!this[fromOffsetCache]) {\n      let lines = this.css.split('\\n')\n      lineToIndex = new Array(lines.length)\n      let prevIndex = 0\n\n      for (let i = 0, l = lines.length; i < l; i++) {\n        lineToIndex[i] = prevIndex\n        prevIndex += lines[i].length + 1\n      }\n\n      this[fromOffsetCache] = lineToIndex\n    } else {\n      lineToIndex = this[fromOffsetCache]\n    }\n    lastLine = lineToIndex[lineToIndex.length - 1]\n\n    let min = 0\n    if (offset >= lastLine) {\n      min = lineToIndex.length - 1\n    } else {\n      let max = lineToIndex.length - 2\n      let mid\n      while (min < max) {\n        mid = min + ((max - min) >> 1)\n        if (offset < lineToIndex[mid]) {\n          max = mid - 1\n        } else if (offset >= lineToIndex[mid + 1]) {\n          min = mid + 1\n        } else {\n          min = mid\n          break\n        }\n      }\n    }\n    return {\n      col: offset - lineToIndex[min] + 1,\n      line: min + 1\n    }\n  }\n\n  mapResolve(file) {\n    if (/^\\w+:\\/\\//.test(file)) {\n      return file\n    }\n    return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file)\n  }\n\n  origin(line, column, endLine, endColumn) {\n    if (!this.map) return false\n    let consumer = this.map.consumer()\n\n    let from = consumer.originalPositionFor({ column, line })\n    if (!from.source) return false\n\n    let to\n    if (typeof endLine === 'number') {\n      to = consumer.originalPositionFor({ column: endColumn, line: endLine })\n    }\n\n    let fromUrl\n\n    if (isAbsolute(from.source)) {\n      fromUrl = pathToFileURL(from.source)\n    } else {\n      fromUrl = new URL(\n        from.source,\n        this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)\n      )\n    }\n\n    let result = {\n      column: from.column,\n      endColumn: to && to.column,\n      endLine: to && to.line,\n      line: from.line,\n      url: fromUrl.toString()\n    }\n\n    if (fromUrl.protocol === 'file:') {\n      if (fileURLToPath) {\n        result.file = fileURLToPath(fromUrl)\n      } else {\n        /* c8 ignore next 2 */\n        throw new Error(`file: protocol is not available in this PostCSS build`)\n      }\n    }\n\n    let source = consumer.sourceContentFor(from.source)\n    if (source) result.source = source\n\n    return result\n  }\n\n  toJSON() {\n    let json = {}\n    for (let name of ['hasBOM', 'css', 'file', 'id']) {\n      if (this[name] != null) {\n        json[name] = this[name]\n      }\n    }\n    if (this.map) {\n      json.map = { ...this.map }\n      if (json.map.consumerCache) {\n        json.map.consumerCache = undefined\n      }\n    }\n    return json\n  }\n\n  get from() {\n    return this.file || this.id\n  }\n}\n\nmodule.exports = Input\nInput.default = Input\n\nif (terminalHighlight && terminalHighlight.registerInput) {\n  terminalHighlight.registerInput(Input)\n}\n", "'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { dirname, relative, resolve, sep } = require('path')\nlet { pathToFileURL } = require('url')\n\nlet Input = require('./input')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(dirname && resolve && relative && sep)\n\nclass MapGenerator {\n  constructor(stringify, root, opts, cssString) {\n    this.stringify = stringify\n    this.mapOpts = opts.map || {}\n    this.root = root\n    this.opts = opts\n    this.css = cssString\n    this.originalCSS = cssString\n    this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute\n\n    this.memoizedFileURLs = new Map()\n    this.memoizedPaths = new Map()\n    this.memoizedURLs = new Map()\n  }\n\n  addAnnotation() {\n    let content\n\n    if (this.isInline()) {\n      content =\n        'data:application/json;base64,' + this.toBase64(this.map.toString())\n    } else if (typeof this.mapOpts.annotation === 'string') {\n      content = this.mapOpts.annotation\n    } else if (typeof this.mapOpts.annotation === 'function') {\n      content = this.mapOpts.annotation(this.opts.to, this.root)\n    } else {\n      content = this.outputFile() + '.map'\n    }\n    let eol = '\\n'\n    if (this.css.includes('\\r\\n')) eol = '\\r\\n'\n\n    this.css += eol + '/*# sourceMappingURL=' + content + ' */'\n  }\n\n  applyPrevMaps() {\n    for (let prev of this.previous()) {\n      let from = this.toUrl(this.path(prev.file))\n      let root = prev.root || dirname(prev.file)\n      let map\n\n      if (this.mapOpts.sourcesContent === false) {\n        map = new SourceMapConsumer(prev.text)\n        if (map.sourcesContent) {\n          map.sourcesContent = null\n        }\n      } else {\n        map = prev.consumer()\n      }\n\n      this.map.applySourceMap(map, from, this.toUrl(this.path(root)))\n    }\n  }\n\n  clearAnnotation() {\n    if (this.mapOpts.annotation === false) return\n\n    if (this.root) {\n      let node\n      for (let i = this.root.nodes.length - 1; i >= 0; i--) {\n        node = this.root.nodes[i]\n        if (node.type !== 'comment') continue\n        if (node.text.indexOf('# sourceMappingURL=') === 0) {\n          this.root.removeChild(i)\n        }\n      }\n    } else if (this.css) {\n      this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, '')\n    }\n  }\n\n  generate() {\n    this.clearAnnotation()\n    if (pathAvailable && sourceMapAvailable && this.isMap()) {\n      return this.generateMap()\n    } else {\n      let result = ''\n      this.stringify(this.root, i => {\n        result += i\n      })\n      return [result]\n    }\n  }\n\n  generateMap() {\n    if (this.root) {\n      this.generateString()\n    } else if (this.previous().length === 1) {\n      let prev = this.previous()[0].consumer()\n      prev.file = this.outputFile()\n      this.map = SourceMapGenerator.fromSourceMap(prev, {\n        ignoreInvalidMapping: true\n      })\n    } else {\n      this.map = new SourceMapGenerator({\n        file: this.outputFile(),\n        ignoreInvalidMapping: true\n      })\n      this.map.addMapping({\n        generated: { column: 0, line: 1 },\n        original: { column: 0, line: 1 },\n        source: this.opts.from\n          ? this.toUrl(this.path(this.opts.from))\n          : '<no source>'\n      })\n    }\n\n    if (this.isSourcesContent()) this.setSourcesContent()\n    if (this.root && this.previous().length > 0) this.applyPrevMaps()\n    if (this.isAnnotation()) this.addAnnotation()\n\n    if (this.isInline()) {\n      return [this.css]\n    } else {\n      return [this.css, this.map]\n    }\n  }\n\n  generateString() {\n    this.css = ''\n    this.map = new SourceMapGenerator({\n      file: this.outputFile(),\n      ignoreInvalidMapping: true\n    })\n\n    let line = 1\n    let column = 1\n\n    let noSource = '<no source>'\n    let mapping = {\n      generated: { column: 0, line: 0 },\n      original: { column: 0, line: 0 },\n      source: ''\n    }\n\n    let lines, last\n    this.stringify(this.root, (str, node, type) => {\n      this.css += str\n\n      if (node && type !== 'end') {\n        mapping.generated.line = line\n        mapping.generated.column = column - 1\n        if (node.source && node.source.start) {\n          mapping.source = this.sourcePath(node)\n          mapping.original.line = node.source.start.line\n          mapping.original.column = node.source.start.column - 1\n          this.map.addMapping(mapping)\n        } else {\n          mapping.source = noSource\n          mapping.original.line = 1\n          mapping.original.column = 0\n          this.map.addMapping(mapping)\n        }\n      }\n\n      lines = str.match(/\\n/g)\n      if (lines) {\n        line += lines.length\n        last = str.lastIndexOf('\\n')\n        column = str.length - last\n      } else {\n        column += str.length\n      }\n\n      if (node && type !== 'start') {\n        let p = node.parent || { raws: {} }\n        let childless =\n          node.type === 'decl' || (node.type === 'atrule' && !node.nodes)\n        if (!childless || node !== p.last || p.raws.semicolon) {\n          if (node.source && node.source.end) {\n            mapping.source = this.sourcePath(node)\n            mapping.original.line = node.source.end.line\n            mapping.original.column = node.source.end.column - 1\n            mapping.generated.line = line\n            mapping.generated.column = column - 2\n            this.map.addMapping(mapping)\n          } else {\n            mapping.source = noSource\n            mapping.original.line = 1\n            mapping.original.column = 0\n            mapping.generated.line = line\n            mapping.generated.column = column - 1\n            this.map.addMapping(mapping)\n          }\n        }\n      }\n    })\n  }\n\n  isAnnotation() {\n    if (this.isInline()) {\n      return true\n    }\n    if (typeof this.mapOpts.annotation !== 'undefined') {\n      return this.mapOpts.annotation\n    }\n    if (this.previous().length) {\n      return this.previous().some(i => i.annotation)\n    }\n    return true\n  }\n\n  isInline() {\n    if (typeof this.mapOpts.inline !== 'undefined') {\n      return this.mapOpts.inline\n    }\n\n    let annotation = this.mapOpts.annotation\n    if (typeof annotation !== 'undefined' && annotation !== true) {\n      return false\n    }\n\n    if (this.previous().length) {\n      return this.previous().some(i => i.inline)\n    }\n    return true\n  }\n\n  isMap() {\n    if (typeof this.opts.map !== 'undefined') {\n      return !!this.opts.map\n    }\n    return this.previous().length > 0\n  }\n\n  isSourcesContent() {\n    if (typeof this.mapOpts.sourcesContent !== 'undefined') {\n      return this.mapOpts.sourcesContent\n    }\n    if (this.previous().length) {\n      return this.previous().some(i => i.withContent())\n    }\n    return true\n  }\n\n  outputFile() {\n    if (this.opts.to) {\n      return this.path(this.opts.to)\n    } else if (this.opts.from) {\n      return this.path(this.opts.from)\n    } else {\n      return 'to.css'\n    }\n  }\n\n  path(file) {\n    if (this.mapOpts.absolute) return file\n    if (file.charCodeAt(0) === 60 /* `<` */) return file\n    if (/^\\w+:\\/\\//.test(file)) return file\n    let cached = this.memoizedPaths.get(file)\n    if (cached) return cached\n\n    let from = this.opts.to ? dirname(this.opts.to) : '.'\n\n    if (typeof this.mapOpts.annotation === 'string') {\n      from = dirname(resolve(from, this.mapOpts.annotation))\n    }\n\n    let path = relative(from, file)\n    this.memoizedPaths.set(file, path)\n\n    return path\n  }\n\n  previous() {\n    if (!this.previousMaps) {\n      this.previousMaps = []\n      if (this.root) {\n        this.root.walk(node => {\n          if (node.source && node.source.input.map) {\n            let map = node.source.input.map\n            if (!this.previousMaps.includes(map)) {\n              this.previousMaps.push(map)\n            }\n          }\n        })\n      } else {\n        let input = new Input(this.originalCSS, this.opts)\n        if (input.map) this.previousMaps.push(input.map)\n      }\n    }\n\n    return this.previousMaps\n  }\n\n  setSourcesContent() {\n    let already = {}\n    if (this.root) {\n      this.root.walk(node => {\n        if (node.source) {\n          let from = node.source.input.from\n          if (from && !already[from]) {\n            already[from] = true\n            let fromUrl = this.usesFileUrls\n              ? this.toFileUrl(from)\n              : this.toUrl(this.path(from))\n            this.map.setSourceContent(fromUrl, node.source.input.css)\n          }\n        }\n      })\n    } else if (this.css) {\n      let from = this.opts.from\n        ? this.toUrl(this.path(this.opts.from))\n        : '<no source>'\n      this.map.setSourceContent(from, this.css)\n    }\n  }\n\n  sourcePath(node) {\n    if (this.mapOpts.from) {\n      return this.toUrl(this.mapOpts.from)\n    } else if (this.usesFileUrls) {\n      return this.toFileUrl(node.source.input.from)\n    } else {\n      return this.toUrl(this.path(node.source.input.from))\n    }\n  }\n\n  toBase64(str) {\n    if (Buffer) {\n      return Buffer.from(str).toString('base64')\n    } else {\n      return window.btoa(unescape(encodeURIComponent(str)))\n    }\n  }\n\n  toFileUrl(path) {\n    let cached = this.memoizedFileURLs.get(path)\n    if (cached) return cached\n\n    if (pathToFileURL) {\n      let fileURL = pathToFileURL(path).toString()\n      this.memoizedFileURLs.set(path, fileURL)\n\n      return fileURL\n    } else {\n      throw new Error(\n        '`map.absolute` option is not available in this PostCSS build'\n      )\n    }\n  }\n\n  toUrl(path) {\n    let cached = this.memoizedURLs.get(path)\n    if (cached) return cached\n\n    if (sep === '\\\\') {\n      path = path.replace(/\\\\/g, '/')\n    }\n\n    let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent)\n    this.memoizedURLs.set(path, url)\n\n    return url\n  }\n}\n\nmodule.exports = MapGenerator\n", "'use strict'\n\nlet Node = require('./node')\n\nclass Comment extends Node {\n  constructor(defaults) {\n    super(defaults)\n    this.type = 'comment'\n  }\n}\n\nmodule.exports = Comment\nComment.default = Comment\n", "'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet Declaration = require('./declaration')\nlet Comment = require('./comment')\nlet Node = require('./node')\n\nlet parse, Rule, AtRule, Root\n\nfunction cleanSource(nodes) {\n  return nodes.map(i => {\n    if (i.nodes) i.nodes = cleanSource(i.nodes)\n    delete i.source\n    return i\n  })\n}\n\nfunction markDirtyUp(node) {\n  node[isClean] = false\n  if (node.proxyOf.nodes) {\n    for (let i of node.proxyOf.nodes) {\n      markDirtyUp(i)\n    }\n  }\n}\n\nclass Container extends Node {\n  append(...children) {\n    for (let child of children) {\n      let nodes = this.normalize(child, this.last)\n      for (let node of nodes) this.proxyOf.nodes.push(node)\n    }\n\n    this.markDirty()\n\n    return this\n  }\n\n  cleanRaws(keepBetween) {\n    super.cleanRaws(keepBetween)\n    if (this.nodes) {\n      for (let node of this.nodes) node.cleanRaws(keepBetween)\n    }\n  }\n\n  each(callback) {\n    if (!this.proxyOf.nodes) return undefined\n    let iterator = this.getIterator()\n\n    let index, result\n    while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n      index = this.indexes[iterator]\n      result = callback(this.proxyOf.nodes[index], index)\n      if (result === false) break\n\n      this.indexes[iterator] += 1\n    }\n\n    delete this.indexes[iterator]\n    return result\n  }\n\n  every(condition) {\n    return this.nodes.every(condition)\n  }\n\n  getIterator() {\n    if (!this.lastEach) this.lastEach = 0\n    if (!this.indexes) this.indexes = {}\n\n    this.lastEach += 1\n    let iterator = this.lastEach\n    this.indexes[iterator] = 0\n\n    return iterator\n  }\n\n  getProxyProcessor() {\n    return {\n      get(node, prop) {\n        if (prop === 'proxyOf') {\n          return node\n        } else if (!node[prop]) {\n          return node[prop]\n        } else if (\n          prop === 'each' ||\n          (typeof prop === 'string' && prop.startsWith('walk'))\n        ) {\n          return (...args) => {\n            return node[prop](\n              ...args.map(i => {\n                if (typeof i === 'function') {\n                  return (child, index) => i(child.toProxy(), index)\n                } else {\n                  return i\n                }\n              })\n            )\n          }\n        } else if (prop === 'every' || prop === 'some') {\n          return cb => {\n            return node[prop]((child, ...other) =>\n              cb(child.toProxy(), ...other)\n            )\n          }\n        } else if (prop === 'root') {\n          return () => node.root().toProxy()\n        } else if (prop === 'nodes') {\n          return node.nodes.map(i => i.toProxy())\n        } else if (prop === 'first' || prop === 'last') {\n          return node[prop].toProxy()\n        } else {\n          return node[prop]\n        }\n      },\n\n      set(node, prop, value) {\n        if (node[prop] === value) return true\n        node[prop] = value\n        if (prop === 'name' || prop === 'params' || prop === 'selector') {\n          node.markDirty()\n        }\n        return true\n      }\n    }\n  }\n\n  index(child) {\n    if (typeof child === 'number') return child\n    if (child.proxyOf) child = child.proxyOf\n    return this.proxyOf.nodes.indexOf(child)\n  }\n\n  insertAfter(exist, add) {\n    let existIndex = this.index(exist)\n    let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()\n    existIndex = this.index(exist)\n    for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)\n\n    let index\n    for (let id in this.indexes) {\n      index = this.indexes[id]\n      if (existIndex < index) {\n        this.indexes[id] = index + nodes.length\n      }\n    }\n\n    this.markDirty()\n\n    return this\n  }\n\n  insertBefore(exist, add) {\n    let existIndex = this.index(exist)\n    let type = existIndex === 0 ? 'prepend' : false\n    let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse()\n    existIndex = this.index(exist)\n    for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)\n\n    let index\n    for (let id in this.indexes) {\n      index = this.indexes[id]\n      if (existIndex <= index) {\n        this.indexes[id] = index + nodes.length\n      }\n    }\n\n    this.markDirty()\n\n    return this\n  }\n\n  normalize(nodes, sample) {\n    if (typeof nodes === 'string') {\n      nodes = cleanSource(parse(nodes).nodes)\n    } else if (typeof nodes === 'undefined') {\n      nodes = []\n    } else if (Array.isArray(nodes)) {\n      nodes = nodes.slice(0)\n      for (let i of nodes) {\n        if (i.parent) i.parent.removeChild(i, 'ignore')\n      }\n    } else if (nodes.type === 'root' && this.type !== 'document') {\n      nodes = nodes.nodes.slice(0)\n      for (let i of nodes) {\n        if (i.parent) i.parent.removeChild(i, 'ignore')\n      }\n    } else if (nodes.type) {\n      nodes = [nodes]\n    } else if (nodes.prop) {\n      if (typeof nodes.value === 'undefined') {\n        throw new Error('Value field is missed in node creation')\n      } else if (typeof nodes.value !== 'string') {\n        nodes.value = String(nodes.value)\n      }\n      nodes = [new Declaration(nodes)]\n    } else if (nodes.selector) {\n      nodes = [new Rule(nodes)]\n    } else if (nodes.name) {\n      nodes = [new AtRule(nodes)]\n    } else if (nodes.text) {\n      nodes = [new Comment(nodes)]\n    } else {\n      throw new Error('Unknown node type in node creation')\n    }\n\n    let processed = nodes.map(i => {\n      /* c8 ignore next */\n      if (!i[my]) Container.rebuild(i)\n      i = i.proxyOf\n      if (i.parent) i.parent.removeChild(i)\n      if (i[isClean]) markDirtyUp(i)\n      if (typeof i.raws.before === 'undefined') {\n        if (sample && typeof sample.raws.before !== 'undefined') {\n          i.raws.before = sample.raws.before.replace(/\\S/g, '')\n        }\n      }\n      i.parent = this.proxyOf\n      return i\n    })\n\n    return processed\n  }\n\n  prepend(...children) {\n    children = children.reverse()\n    for (let child of children) {\n      let nodes = this.normalize(child, this.first, 'prepend').reverse()\n      for (let node of nodes) this.proxyOf.nodes.unshift(node)\n      for (let id in this.indexes) {\n        this.indexes[id] = this.indexes[id] + nodes.length\n      }\n    }\n\n    this.markDirty()\n\n    return this\n  }\n\n  push(child) {\n    child.parent = this\n    this.proxyOf.nodes.push(child)\n    return this\n  }\n\n  removeAll() {\n    for (let node of this.proxyOf.nodes) node.parent = undefined\n    this.proxyOf.nodes = []\n\n    this.markDirty()\n\n    return this\n  }\n\n  removeChild(child) {\n    child = this.index(child)\n    this.proxyOf.nodes[child].parent = undefined\n    this.proxyOf.nodes.splice(child, 1)\n\n    let index\n    for (let id in this.indexes) {\n      index = this.indexes[id]\n      if (index >= child) {\n        this.indexes[id] = index - 1\n      }\n    }\n\n    this.markDirty()\n\n    return this\n  }\n\n  replaceValues(pattern, opts, callback) {\n    if (!callback) {\n      callback = opts\n      opts = {}\n    }\n\n    this.walkDecls(decl => {\n      if (opts.props && !opts.props.includes(decl.prop)) return\n      if (opts.fast && !decl.value.includes(opts.fast)) return\n\n      decl.value = decl.value.replace(pattern, callback)\n    })\n\n    this.markDirty()\n\n    return this\n  }\n\n  some(condition) {\n    return this.nodes.some(condition)\n  }\n\n  walk(callback) {\n    return this.each((child, i) => {\n      let result\n      try {\n        result = callback(child, i)\n      } catch (e) {\n        throw child.addToError(e)\n      }\n      if (result !== false && child.walk) {\n        result = child.walk(callback)\n      }\n\n      return result\n    })\n  }\n\n  walkAtRules(name, callback) {\n    if (!callback) {\n      callback = name\n      return this.walk((child, i) => {\n        if (child.type === 'atrule') {\n          return callback(child, i)\n        }\n      })\n    }\n    if (name instanceof RegExp) {\n      return this.walk((child, i) => {\n        if (child.type === 'atrule' && name.test(child.name)) {\n          return callback(child, i)\n        }\n      })\n    }\n    return this.walk((child, i) => {\n      if (child.type === 'atrule' && child.name === name) {\n        return callback(child, i)\n      }\n    })\n  }\n\n  walkComments(callback) {\n    return this.walk((child, i) => {\n      if (child.type === 'comment') {\n        return callback(child, i)\n      }\n    })\n  }\n\n  walkDecls(prop, callback) {\n    if (!callback) {\n      callback = prop\n      return this.walk((child, i) => {\n        if (child.type === 'decl') {\n          return callback(child, i)\n        }\n      })\n    }\n    if (prop instanceof RegExp) {\n      return this.walk((child, i) => {\n        if (child.type === 'decl' && prop.test(child.prop)) {\n          return callback(child, i)\n        }\n      })\n    }\n    return this.walk((child, i) => {\n      if (child.type === 'decl' && child.prop === prop) {\n        return callback(child, i)\n      }\n    })\n  }\n\n  walkRules(selector, callback) {\n    if (!callback) {\n      callback = selector\n\n      return this.walk((child, i) => {\n        if (child.type === 'rule') {\n          return callback(child, i)\n        }\n      })\n    }\n    if (selector instanceof RegExp) {\n      return this.walk((child, i) => {\n        if (child.type === 'rule' && selector.test(child.selector)) {\n          return callback(child, i)\n        }\n      })\n    }\n    return this.walk((child, i) => {\n      if (child.type === 'rule' && child.selector === selector) {\n        return callback(child, i)\n      }\n    })\n  }\n\n  get first() {\n    if (!this.proxyOf.nodes) return undefined\n    return this.proxyOf.nodes[0]\n  }\n\n  get last() {\n    if (!this.proxyOf.nodes) return undefined\n    return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]\n  }\n}\n\nContainer.registerParse = dependant => {\n  parse = dependant\n}\n\nContainer.registerRule = dependant => {\n  Rule = dependant\n}\n\nContainer.registerAtRule = dependant => {\n  AtRule = dependant\n}\n\nContainer.registerRoot = dependant => {\n  Root = dependant\n}\n\nmodule.exports = Container\nContainer.default = Container\n\n/* c8 ignore start */\nContainer.rebuild = node => {\n  if (node.type === 'atrule') {\n    Object.setPrototypeOf(node, AtRule.prototype)\n  } else if (node.type === 'rule') {\n    Object.setPrototypeOf(node, Rule.prototype)\n  } else if (node.type === 'decl') {\n    Object.setPrototypeOf(node, Declaration.prototype)\n  } else if (node.type === 'comment') {\n    Object.setPrototypeOf(node, Comment.prototype)\n  } else if (node.type === 'root') {\n    Object.setPrototypeOf(node, Root.prototype)\n  }\n\n  node[my] = true\n\n  if (node.nodes) {\n    node.nodes.forEach(child => {\n      Container.rebuild(child)\n    })\n  }\n}\n/* c8 ignore stop */\n", "'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Document extends Container {\n  constructor(defaults) {\n    // type needs to be passed to super, otherwise child roots won't be normalized correctly\n    super({ type: 'document', ...defaults })\n\n    if (!this.nodes) {\n      this.nodes = []\n    }\n  }\n\n  toResult(opts = {}) {\n    let lazy = new LazyResult(new Processor(), this, opts)\n\n    return lazy.stringify()\n  }\n}\n\nDocument.registerLazyResult = dependant => {\n  LazyResult = dependant\n}\n\nDocument.registerProcessor = dependant => {\n  Processor = dependant\n}\n\nmodule.exports = Document\nDocument.default = Document\n", "/* eslint-disable no-console */\n'use strict'\n\nlet printed = {}\n\nmodule.exports = function warnOnce(message) {\n  if (printed[message]) return\n  printed[message] = true\n\n  if (typeof console !== 'undefined' && console.warn) {\n    console.warn(message)\n  }\n}\n", "'use strict'\n\nclass Warning {\n  constructor(text, opts = {}) {\n    this.type = 'warning'\n    this.text = text\n\n    if (opts.node && opts.node.source) {\n      let range = opts.node.rangeBy(opts)\n      this.line = range.start.line\n      this.column = range.start.column\n      this.endLine = range.end.line\n      this.endColumn = range.end.column\n    }\n\n    for (let opt in opts) this[opt] = opts[opt]\n  }\n\n  toString() {\n    if (this.node) {\n      return this.node.error(this.text, {\n        index: this.index,\n        plugin: this.plugin,\n        word: this.word\n      }).message\n    }\n\n    if (this.plugin) {\n      return this.plugin + ': ' + this.text\n    }\n\n    return this.text\n  }\n}\n\nmodule.exports = Warning\nWarning.default = Warning\n", "'use strict'\n\nlet Warning = require('./warning')\n\nclass Result {\n  constructor(processor, root, opts) {\n    this.processor = processor\n    this.messages = []\n    this.root = root\n    this.opts = opts\n    this.css = undefined\n    this.map = undefined\n  }\n\n  toString() {\n    return this.css\n  }\n\n  warn(text, opts = {}) {\n    if (!opts.plugin) {\n      if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n        opts.plugin = this.lastPlugin.postcssPlugin\n      }\n    }\n\n    let warning = new Warning(text, opts)\n    this.messages.push(warning)\n\n    return warning\n  }\n\n  warnings() {\n    return this.messages.filter(i => i.type === 'warning')\n  }\n\n  get content() {\n    return this.css\n  }\n}\n\nmodule.exports = Result\nResult.default = Result\n", "'use strict'\n\nconst SINGLE_QUOTE = \"'\".charCodeAt(0)\nconst DOUBLE_QUOTE = '\"'.charCodeAt(0)\nconst BACKSLASH = '\\\\'.charCodeAt(0)\nconst SLASH = '/'.charCodeAt(0)\nconst NEWLINE = '\\n'.charCodeAt(0)\nconst SPACE = ' '.charCodeAt(0)\nconst FEED = '\\f'.charCodeAt(0)\nconst TAB = '\\t'.charCodeAt(0)\nconst CR = '\\r'.charCodeAt(0)\nconst OPEN_SQUARE = '['.charCodeAt(0)\nconst CLOSE_SQUARE = ']'.charCodeAt(0)\nconst OPEN_PARENTHESES = '('.charCodeAt(0)\nconst CLOSE_PARENTHESES = ')'.charCodeAt(0)\nconst OPEN_CURLY = '{'.charCodeAt(0)\nconst CLOSE_CURLY = '}'.charCodeAt(0)\nconst SEMICOLON = ';'.charCodeAt(0)\nconst ASTERISK = '*'.charCodeAt(0)\nconst COLON = ':'.charCodeAt(0)\nconst AT = '@'.charCodeAt(0)\n\nconst RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g\nconst RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g\nconst RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/\nconst RE_HEX_ESCAPE = /[\\da-f]/i\n\nmodule.exports = function tokenizer(input, options = {}) {\n  let css = input.css.valueOf()\n  let ignore = options.ignoreErrors\n\n  let code, next, quote, content, escape\n  let escaped, escapePos, prev, n, currentToken\n\n  let length = css.length\n  let pos = 0\n  let buffer = []\n  let returned = []\n\n  function position() {\n    return pos\n  }\n\n  function unclosed(what) {\n    throw input.error('Unclosed ' + what, pos)\n  }\n\n  function endOfFile() {\n    return returned.length === 0 && pos >= length\n  }\n\n  function nextToken(opts) {\n    if (returned.length) return returned.pop()\n    if (pos >= length) return\n\n    let ignoreUnclosed = opts ? opts.ignoreUnclosed : false\n\n    code = css.charCodeAt(pos)\n\n    switch (code) {\n      case NEWLINE:\n      case SPACE:\n      case TAB:\n      case CR:\n      case FEED: {\n        next = pos\n        do {\n          next += 1\n          code = css.charCodeAt(next)\n        } while (\n          code === SPACE ||\n          code === NEWLINE ||\n          code === TAB ||\n          code === CR ||\n          code === FEED\n        )\n\n        currentToken = ['space', css.slice(pos, next)]\n        pos = next - 1\n        break\n      }\n\n      case OPEN_SQUARE:\n      case CLOSE_SQUARE:\n      case OPEN_CURLY:\n      case CLOSE_CURLY:\n      case COLON:\n      case SEMICOLON:\n      case CLOSE_PARENTHESES: {\n        let controlChar = String.fromCharCode(code)\n        currentToken = [controlChar, controlChar, pos]\n        break\n      }\n\n      case OPEN_PARENTHESES: {\n        prev = buffer.length ? buffer.pop()[1] : ''\n        n = css.charCodeAt(pos + 1)\n        if (\n          prev === 'url' &&\n          n !== SINGLE_QUOTE &&\n          n !== DOUBLE_QUOTE &&\n          n !== SPACE &&\n          n !== NEWLINE &&\n          n !== TAB &&\n          n !== FEED &&\n          n !== CR\n        ) {\n          next = pos\n          do {\n            escaped = false\n            next = css.indexOf(')', next + 1)\n            if (next === -1) {\n              if (ignore || ignoreUnclosed) {\n                next = pos\n                break\n              } else {\n                unclosed('bracket')\n              }\n            }\n            escapePos = next\n            while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n              escapePos -= 1\n              escaped = !escaped\n            }\n          } while (escaped)\n\n          currentToken = ['brackets', css.slice(pos, next + 1), pos, next]\n\n          pos = next\n        } else {\n          next = css.indexOf(')', pos + 1)\n          content = css.slice(pos, next + 1)\n\n          if (next === -1 || RE_BAD_BRACKET.test(content)) {\n            currentToken = ['(', '(', pos]\n          } else {\n            currentToken = ['brackets', content, pos, next]\n            pos = next\n          }\n        }\n\n        break\n      }\n\n      case SINGLE_QUOTE:\n      case DOUBLE_QUOTE: {\n        quote = code === SINGLE_QUOTE ? \"'\" : '\"'\n        next = pos\n        do {\n          escaped = false\n          next = css.indexOf(quote, next + 1)\n          if (next === -1) {\n            if (ignore || ignoreUnclosed) {\n              next = pos + 1\n              break\n            } else {\n              unclosed('string')\n            }\n          }\n          escapePos = next\n          while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n            escapePos -= 1\n            escaped = !escaped\n          }\n        } while (escaped)\n\n        currentToken = ['string', css.slice(pos, next + 1), pos, next]\n        pos = next\n        break\n      }\n\n      case AT: {\n        RE_AT_END.lastIndex = pos + 1\n        RE_AT_END.test(css)\n        if (RE_AT_END.lastIndex === 0) {\n          next = css.length - 1\n        } else {\n          next = RE_AT_END.lastIndex - 2\n        }\n\n        currentToken = ['at-word', css.slice(pos, next + 1), pos, next]\n\n        pos = next\n        break\n      }\n\n      case BACKSLASH: {\n        next = pos\n        escape = true\n        while (css.charCodeAt(next + 1) === BACKSLASH) {\n          next += 1\n          escape = !escape\n        }\n        code = css.charCodeAt(next + 1)\n        if (\n          escape &&\n          code !== SLASH &&\n          code !== SPACE &&\n          code !== NEWLINE &&\n          code !== TAB &&\n          code !== CR &&\n          code !== FEED\n        ) {\n          next += 1\n          if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n            while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {\n              next += 1\n            }\n            if (css.charCodeAt(next + 1) === SPACE) {\n              next += 1\n            }\n          }\n        }\n\n        currentToken = ['word', css.slice(pos, next + 1), pos, next]\n\n        pos = next\n        break\n      }\n\n      default: {\n        if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n          next = css.indexOf('*/', pos + 2) + 1\n          if (next === 0) {\n            if (ignore || ignoreUnclosed) {\n              next = css.length\n            } else {\n              unclosed('comment')\n            }\n          }\n\n          currentToken = ['comment', css.slice(pos, next + 1), pos, next]\n          pos = next\n        } else {\n          RE_WORD_END.lastIndex = pos + 1\n          RE_WORD_END.test(css)\n          if (RE_WORD_END.lastIndex === 0) {\n            next = css.length - 1\n          } else {\n            next = RE_WORD_END.lastIndex - 2\n          }\n\n          currentToken = ['word', css.slice(pos, next + 1), pos, next]\n          buffer.push(currentToken)\n          pos = next\n        }\n\n        break\n      }\n    }\n\n    pos++\n    return currentToken\n  }\n\n  function back(token) {\n    returned.push(token)\n  }\n\n  return {\n    back,\n    endOfFile,\n    nextToken,\n    position\n  }\n}\n", "'use strict'\n\nlet Container = require('./container')\n\nclass AtRule extends Container {\n  constructor(defaults) {\n    super(defaults)\n    this.type = 'atrule'\n  }\n\n  append(...children) {\n    if (!this.proxyOf.nodes) this.nodes = []\n    return super.append(...children)\n  }\n\n  prepend(...children) {\n    if (!this.proxyOf.nodes) this.nodes = []\n    return super.prepend(...children)\n  }\n}\n\nmodule.exports = AtRule\nAtRule.default = AtRule\n\nContainer.registerAtRule(AtRule)\n", "'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Root extends Container {\n  constructor(defaults) {\n    super(defaults)\n    this.type = 'root'\n    if (!this.nodes) this.nodes = []\n  }\n\n  normalize(child, sample, type) {\n    let nodes = super.normalize(child)\n\n    if (sample) {\n      if (type === 'prepend') {\n        if (this.nodes.length > 1) {\n          sample.raws.before = this.nodes[1].raws.before\n        } else {\n          delete sample.raws.before\n        }\n      } else if (this.first !== sample) {\n        for (let node of nodes) {\n          node.raws.before = sample.raws.before\n        }\n      }\n    }\n\n    return nodes\n  }\n\n  removeChild(child, ignore) {\n    let index = this.index(child)\n\n    if (!ignore && index === 0 && this.nodes.length > 1) {\n      this.nodes[1].raws.before = this.nodes[index].raws.before\n    }\n\n    return super.removeChild(child)\n  }\n\n  toResult(opts = {}) {\n    let lazy = new LazyResult(new Processor(), this, opts)\n    return lazy.stringify()\n  }\n}\n\nRoot.registerLazyResult = dependant => {\n  LazyResult = dependant\n}\n\nRoot.registerProcessor = dependant => {\n  Processor = dependant\n}\n\nmodule.exports = Root\nRoot.default = Root\n\nContainer.registerRoot(Root)\n", "'use strict'\n\nlet list = {\n  comma(string) {\n    return list.split(string, [','], true)\n  },\n\n  space(string) {\n    let spaces = [' ', '\\n', '\\t']\n    return list.split(string, spaces)\n  },\n\n  split(string, separators, last) {\n    let array = []\n    let current = ''\n    let split = false\n\n    let func = 0\n    let inQuote = false\n    let prevQuote = ''\n    let escape = false\n\n    for (let letter of string) {\n      if (escape) {\n        escape = false\n      } else if (letter === '\\\\') {\n        escape = true\n      } else if (inQuote) {\n        if (letter === prevQuote) {\n          inQuote = false\n        }\n      } else if (letter === '\"' || letter === \"'\") {\n        inQuote = true\n        prevQuote = letter\n      } else if (letter === '(') {\n        func += 1\n      } else if (letter === ')') {\n        if (func > 0) func -= 1\n      } else if (func === 0) {\n        if (separators.includes(letter)) split = true\n      }\n\n      if (split) {\n        if (current !== '') array.push(current.trim())\n        current = ''\n        split = false\n      } else {\n        current += letter\n      }\n    }\n\n    if (last || current !== '') array.push(current.trim())\n    return array\n  }\n}\n\nmodule.exports = list\nlist.default = list\n", "'use strict'\n\nlet Container = require('./container')\nlet list = require('./list')\n\nclass Rule extends Container {\n  constructor(defaults) {\n    super(defaults)\n    this.type = 'rule'\n    if (!this.nodes) this.nodes = []\n  }\n\n  get selectors() {\n    return list.comma(this.selector)\n  }\n\n  set selectors(values) {\n    let match = this.selector ? this.selector.match(/,\\s*/) : null\n    let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen')\n    this.selector = values.join(sep)\n  }\n}\n\nmodule.exports = Rule\nRule.default = Rule\n\nContainer.registerRule(Rule)\n", "'use strict'\n\nlet Declaration = require('./declaration')\nlet tokenizer = require('./tokenize')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Root = require('./root')\nlet Rule = require('./rule')\n\nconst SAFE_COMMENT_NEIGHBOR = {\n  empty: true,\n  space: true\n}\n\nfunction findLastWithPosition(tokens) {\n  for (let i = tokens.length - 1; i >= 0; i--) {\n    let token = tokens[i]\n    let pos = token[3] || token[2]\n    if (pos) return pos\n  }\n}\n\nclass Parser {\n  constructor(input) {\n    this.input = input\n\n    this.root = new Root()\n    this.current = this.root\n    this.spaces = ''\n    this.semicolon = false\n\n    this.createTokenizer()\n    this.root.source = { input, start: { column: 1, line: 1, offset: 0 } }\n  }\n\n  atrule(token) {\n    let node = new AtRule()\n    node.name = token[1].slice(1)\n    if (node.name === '') {\n      this.unnamedAtrule(node, token)\n    }\n    this.init(node, token[2])\n\n    let type\n    let prev\n    let shift\n    let last = false\n    let open = false\n    let params = []\n    let brackets = []\n\n    while (!this.tokenizer.endOfFile()) {\n      token = this.tokenizer.nextToken()\n      type = token[0]\n\n      if (type === '(' || type === '[') {\n        brackets.push(type === '(' ? ')' : ']')\n      } else if (type === '{' && brackets.length > 0) {\n        brackets.push('}')\n      } else if (type === brackets[brackets.length - 1]) {\n        brackets.pop()\n      }\n\n      if (brackets.length === 0) {\n        if (type === ';') {\n          node.source.end = this.getPosition(token[2])\n          node.source.end.offset++\n          this.semicolon = true\n          break\n        } else if (type === '{') {\n          open = true\n          break\n        } else if (type === '}') {\n          if (params.length > 0) {\n            shift = params.length - 1\n            prev = params[shift]\n            while (prev && prev[0] === 'space') {\n              prev = params[--shift]\n            }\n            if (prev) {\n              node.source.end = this.getPosition(prev[3] || prev[2])\n              node.source.end.offset++\n            }\n          }\n          this.end(token)\n          break\n        } else {\n          params.push(token)\n        }\n      } else {\n        params.push(token)\n      }\n\n      if (this.tokenizer.endOfFile()) {\n        last = true\n        break\n      }\n    }\n\n    node.raws.between = this.spacesAndCommentsFromEnd(params)\n    if (params.length) {\n      node.raws.afterName = this.spacesAndCommentsFromStart(params)\n      this.raw(node, 'params', params)\n      if (last) {\n        token = params[params.length - 1]\n        node.source.end = this.getPosition(token[3] || token[2])\n        node.source.end.offset++\n        this.spaces = node.raws.between\n        node.raws.between = ''\n      }\n    } else {\n      node.raws.afterName = ''\n      node.params = ''\n    }\n\n    if (open) {\n      node.nodes = []\n      this.current = node\n    }\n  }\n\n  checkMissedSemicolon(tokens) {\n    let colon = this.colon(tokens)\n    if (colon === false) return\n\n    let founded = 0\n    let token\n    for (let j = colon - 1; j >= 0; j--) {\n      token = tokens[j]\n      if (token[0] !== 'space') {\n        founded += 1\n        if (founded === 2) break\n      }\n    }\n    // If the token is a word, e.g. `!important`, `red` or any other valid property's value.\n    // Then we need to return the colon after that word token. [3] is the \"end\" colon of that word.\n    // And because we need it after that one we do +1 to get the next one.\n    throw this.input.error(\n      'Missed semicolon',\n      token[0] === 'word' ? token[3] + 1 : token[2]\n    )\n  }\n\n  colon(tokens) {\n    let brackets = 0\n    let token, type, prev\n    for (let [i, element] of tokens.entries()) {\n      token = element\n      type = token[0]\n\n      if (type === '(') {\n        brackets += 1\n      }\n      if (type === ')') {\n        brackets -= 1\n      }\n      if (brackets === 0 && type === ':') {\n        if (!prev) {\n          this.doubleColon(token)\n        } else if (prev[0] === 'word' && prev[1] === 'progid') {\n          continue\n        } else {\n          return i\n        }\n      }\n\n      prev = token\n    }\n    return false\n  }\n\n  comment(token) {\n    let node = new Comment()\n    this.init(node, token[2])\n    node.source.end = this.getPosition(token[3] || token[2])\n    node.source.end.offset++\n\n    let text = token[1].slice(2, -2)\n    if (/^\\s*$/.test(text)) {\n      node.text = ''\n      node.raws.left = text\n      node.raws.right = ''\n    } else {\n      let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/)\n      node.text = match[2]\n      node.raws.left = match[1]\n      node.raws.right = match[3]\n    }\n  }\n\n  createTokenizer() {\n    this.tokenizer = tokenizer(this.input)\n  }\n\n  decl(tokens, customProperty) {\n    let node = new Declaration()\n    this.init(node, tokens[0][2])\n\n    let last = tokens[tokens.length - 1]\n    if (last[0] === ';') {\n      this.semicolon = true\n      tokens.pop()\n    }\n\n    node.source.end = this.getPosition(\n      last[3] || last[2] || findLastWithPosition(tokens)\n    )\n    node.source.end.offset++\n\n    while (tokens[0][0] !== 'word') {\n      if (tokens.length === 1) this.unknownWord(tokens)\n      node.raws.before += tokens.shift()[1]\n    }\n    node.source.start = this.getPosition(tokens[0][2])\n\n    node.prop = ''\n    while (tokens.length) {\n      let type = tokens[0][0]\n      if (type === ':' || type === 'space' || type === 'comment') {\n        break\n      }\n      node.prop += tokens.shift()[1]\n    }\n\n    node.raws.between = ''\n\n    let token\n    while (tokens.length) {\n      token = tokens.shift()\n\n      if (token[0] === ':') {\n        node.raws.between += token[1]\n        break\n      } else {\n        if (token[0] === 'word' && /\\w/.test(token[1])) {\n          this.unknownWord([token])\n        }\n        node.raws.between += token[1]\n      }\n    }\n\n    if (node.prop[0] === '_' || node.prop[0] === '*') {\n      node.raws.before += node.prop[0]\n      node.prop = node.prop.slice(1)\n    }\n\n    let firstSpaces = []\n    let next\n    while (tokens.length) {\n      next = tokens[0][0]\n      if (next !== 'space' && next !== 'comment') break\n      firstSpaces.push(tokens.shift())\n    }\n\n    this.precheckMissedSemicolon(tokens)\n\n    for (let i = tokens.length - 1; i >= 0; i--) {\n      token = tokens[i]\n      if (token[1].toLowerCase() === '!important') {\n        node.important = true\n        let string = this.stringFrom(tokens, i)\n        string = this.spacesFromEnd(tokens) + string\n        if (string !== ' !important') node.raws.important = string\n        break\n      } else if (token[1].toLowerCase() === 'important') {\n        let cache = tokens.slice(0)\n        let str = ''\n        for (let j = i; j > 0; j--) {\n          let type = cache[j][0]\n          if (str.trim().indexOf('!') === 0 && type !== 'space') {\n            break\n          }\n          str = cache.pop()[1] + str\n        }\n        if (str.trim().indexOf('!') === 0) {\n          node.important = true\n          node.raws.important = str\n          tokens = cache\n        }\n      }\n\n      if (token[0] !== 'space' && token[0] !== 'comment') {\n        break\n      }\n    }\n\n    let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment')\n\n    if (hasWord) {\n      node.raws.between += firstSpaces.map(i => i[1]).join('')\n      firstSpaces = []\n    }\n    this.raw(node, 'value', firstSpaces.concat(tokens), customProperty)\n\n    if (node.value.includes(':') && !customProperty) {\n      this.checkMissedSemicolon(tokens)\n    }\n  }\n\n  doubleColon(token) {\n    throw this.input.error(\n      'Double colon',\n      { offset: token[2] },\n      { offset: token[2] + token[1].length }\n    )\n  }\n\n  emptyRule(token) {\n    let node = new Rule()\n    this.init(node, token[2])\n    node.selector = ''\n    node.raws.between = ''\n    this.current = node\n  }\n\n  end(token) {\n    if (this.current.nodes && this.current.nodes.length) {\n      this.current.raws.semicolon = this.semicolon\n    }\n    this.semicolon = false\n\n    this.current.raws.after = (this.current.raws.after || '') + this.spaces\n    this.spaces = ''\n\n    if (this.current.parent) {\n      this.current.source.end = this.getPosition(token[2])\n      this.current.source.end.offset++\n      this.current = this.current.parent\n    } else {\n      this.unexpectedClose(token)\n    }\n  }\n\n  endFile() {\n    if (this.current.parent) this.unclosedBlock()\n    if (this.current.nodes && this.current.nodes.length) {\n      this.current.raws.semicolon = this.semicolon\n    }\n    this.current.raws.after = (this.current.raws.after || '') + this.spaces\n    this.root.source.end = this.getPosition(this.tokenizer.position())\n  }\n\n  freeSemicolon(token) {\n    this.spaces += token[1]\n    if (this.current.nodes) {\n      let prev = this.current.nodes[this.current.nodes.length - 1]\n      if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {\n        prev.raws.ownSemicolon = this.spaces\n        this.spaces = ''\n      }\n    }\n  }\n\n  // Helpers\n\n  getPosition(offset) {\n    let pos = this.input.fromOffset(offset)\n    return {\n      column: pos.col,\n      line: pos.line,\n      offset\n    }\n  }\n\n  init(node, offset) {\n    this.current.push(node)\n    node.source = {\n      input: this.input,\n      start: this.getPosition(offset)\n    }\n    node.raws.before = this.spaces\n    this.spaces = ''\n    if (node.type !== 'comment') this.semicolon = false\n  }\n\n  other(start) {\n    let end = false\n    let type = null\n    let colon = false\n    let bracket = null\n    let brackets = []\n    let customProperty = start[1].startsWith('--')\n\n    let tokens = []\n    let token = start\n    while (token) {\n      type = token[0]\n      tokens.push(token)\n\n      if (type === '(' || type === '[') {\n        if (!bracket) bracket = token\n        brackets.push(type === '(' ? ')' : ']')\n      } else if (customProperty && colon && type === '{') {\n        if (!bracket) bracket = token\n        brackets.push('}')\n      } else if (brackets.length === 0) {\n        if (type === ';') {\n          if (colon) {\n            this.decl(tokens, customProperty)\n            return\n          } else {\n            break\n          }\n        } else if (type === '{') {\n          this.rule(tokens)\n          return\n        } else if (type === '}') {\n          this.tokenizer.back(tokens.pop())\n          end = true\n          break\n        } else if (type === ':') {\n          colon = true\n        }\n      } else if (type === brackets[brackets.length - 1]) {\n        brackets.pop()\n        if (brackets.length === 0) bracket = null\n      }\n\n      token = this.tokenizer.nextToken()\n    }\n\n    if (this.tokenizer.endOfFile()) end = true\n    if (brackets.length > 0) this.unclosedBracket(bracket)\n\n    if (end && colon) {\n      if (!customProperty) {\n        while (tokens.length) {\n          token = tokens[tokens.length - 1][0]\n          if (token !== 'space' && token !== 'comment') break\n          this.tokenizer.back(tokens.pop())\n        }\n      }\n      this.decl(tokens, customProperty)\n    } else {\n      this.unknownWord(tokens)\n    }\n  }\n\n  parse() {\n    let token\n    while (!this.tokenizer.endOfFile()) {\n      token = this.tokenizer.nextToken()\n\n      switch (token[0]) {\n        case 'space':\n          this.spaces += token[1]\n          break\n\n        case ';':\n          this.freeSemicolon(token)\n          break\n\n        case '}':\n          this.end(token)\n          break\n\n        case 'comment':\n          this.comment(token)\n          break\n\n        case 'at-word':\n          this.atrule(token)\n          break\n\n        case '{':\n          this.emptyRule(token)\n          break\n\n        default:\n          this.other(token)\n          break\n      }\n    }\n    this.endFile()\n  }\n\n  precheckMissedSemicolon(/* tokens */) {\n    // Hook for Safe Parser\n  }\n\n  raw(node, prop, tokens, customProperty) {\n    let token, type\n    let length = tokens.length\n    let value = ''\n    let clean = true\n    let next, prev\n\n    for (let i = 0; i < length; i += 1) {\n      token = tokens[i]\n      type = token[0]\n      if (type === 'space' && i === length - 1 && !customProperty) {\n        clean = false\n      } else if (type === 'comment') {\n        prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty'\n        next = tokens[i + 1] ? tokens[i + 1][0] : 'empty'\n        if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n          if (value.slice(-1) === ',') {\n            clean = false\n          } else {\n            value += token[1]\n          }\n        } else {\n          clean = false\n        }\n      } else {\n        value += token[1]\n      }\n    }\n    if (!clean) {\n      let raw = tokens.reduce((all, i) => all + i[1], '')\n      node.raws[prop] = { raw, value }\n    }\n    node[prop] = value\n  }\n\n  rule(tokens) {\n    tokens.pop()\n\n    let node = new Rule()\n    this.init(node, tokens[0][2])\n\n    node.raws.between = this.spacesAndCommentsFromEnd(tokens)\n    this.raw(node, 'selector', tokens)\n    this.current = node\n  }\n\n  spacesAndCommentsFromEnd(tokens) {\n    let lastTokenType\n    let spaces = ''\n    while (tokens.length) {\n      lastTokenType = tokens[tokens.length - 1][0]\n      if (lastTokenType !== 'space' && lastTokenType !== 'comment') break\n      spaces = tokens.pop()[1] + spaces\n    }\n    return spaces\n  }\n\n  // Errors\n\n  spacesAndCommentsFromStart(tokens) {\n    let next\n    let spaces = ''\n    while (tokens.length) {\n      next = tokens[0][0]\n      if (next !== 'space' && next !== 'comment') break\n      spaces += tokens.shift()[1]\n    }\n    return spaces\n  }\n\n  spacesFromEnd(tokens) {\n    let lastTokenType\n    let spaces = ''\n    while (tokens.length) {\n      lastTokenType = tokens[tokens.length - 1][0]\n      if (lastTokenType !== 'space') break\n      spaces = tokens.pop()[1] + spaces\n    }\n    return spaces\n  }\n\n  stringFrom(tokens, from) {\n    let result = ''\n    for (let i = from; i < tokens.length; i++) {\n      result += tokens[i][1]\n    }\n    tokens.splice(from, tokens.length - from)\n    return result\n  }\n\n  unclosedBlock() {\n    let pos = this.current.source.start\n    throw this.input.error('Unclosed block', pos.line, pos.column)\n  }\n\n  unclosedBracket(bracket) {\n    throw this.input.error(\n      'Unclosed bracket',\n      { offset: bracket[2] },\n      { offset: bracket[2] + 1 }\n    )\n  }\n\n  unexpectedClose(token) {\n    throw this.input.error(\n      'Unexpected }',\n      { offset: token[2] },\n      { offset: token[2] + 1 }\n    )\n  }\n\n  unknownWord(tokens) {\n    throw this.input.error(\n      'Unknown word',\n      { offset: tokens[0][2] },\n      { offset: tokens[0][2] + tokens[0][1].length }\n    )\n  }\n\n  unnamedAtrule(node, token) {\n    throw this.input.error(\n      'At-rule without name',\n      { offset: token[2] },\n      { offset: token[2] + token[1].length }\n    )\n  }\n}\n\nmodule.exports = Parser\n", "'use strict'\n\nlet Container = require('./container')\nlet Parser = require('./parser')\nlet Input = require('./input')\n\nfunction parse(css, opts) {\n  let input = new Input(css, opts)\n  let parser = new Parser(input)\n  try {\n    parser.parse()\n  } catch (e) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (e.name === 'CssSyntaxError' && opts && opts.from) {\n        if (/\\.scss$/i.test(opts.from)) {\n          e.message +=\n            '\\nYou tried to parse SCSS with ' +\n            'the standard CSS parser; ' +\n            'try again with the postcss-scss parser'\n        } else if (/\\.sass/i.test(opts.from)) {\n          e.message +=\n            '\\nYou tried to parse Sass with ' +\n            'the standard CSS parser; ' +\n            'try again with the postcss-sass parser'\n        } else if (/\\.less$/i.test(opts.from)) {\n          e.message +=\n            '\\nYou tried to parse Less with ' +\n            'the standard CSS parser; ' +\n            'try again with the postcss-less parser'\n        }\n      }\n    }\n    throw e\n  }\n\n  return parser.root\n}\n\nmodule.exports = parse\nparse.default = parse\n\nContainer.registerParse(parse)\n", "'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet MapGenerator = require('./map-generator')\nlet stringify = require('./stringify')\nlet Container = require('./container')\nlet Document = require('./document')\nlet warnOnce = require('./warn-once')\nlet Result = require('./result')\nlet parse = require('./parse')\nlet Root = require('./root')\n\nconst TYPE_TO_CLASS_NAME = {\n  atrule: 'AtRule',\n  comment: 'Comment',\n  decl: 'Declaration',\n  document: 'Document',\n  root: 'Root',\n  rule: 'Rule'\n}\n\nconst PLUGIN_PROPS = {\n  AtRule: true,\n  AtRuleExit: true,\n  Comment: true,\n  CommentExit: true,\n  Declaration: true,\n  DeclarationExit: true,\n  Document: true,\n  DocumentExit: true,\n  Once: true,\n  OnceExit: true,\n  postcssPlugin: true,\n  prepare: true,\n  Root: true,\n  RootExit: true,\n  Rule: true,\n  RuleExit: true\n}\n\nconst NOT_VISITORS = {\n  Once: true,\n  postcssPlugin: true,\n  prepare: true\n}\n\nconst CHILDREN = 0\n\nfunction isPromise(obj) {\n  return typeof obj === 'object' && typeof obj.then === 'function'\n}\n\nfunction getEvents(node) {\n  let key = false\n  let type = TYPE_TO_CLASS_NAME[node.type]\n  if (node.type === 'decl') {\n    key = node.prop.toLowerCase()\n  } else if (node.type === 'atrule') {\n    key = node.name.toLowerCase()\n  }\n\n  if (key && node.append) {\n    return [\n      type,\n      type + '-' + key,\n      CHILDREN,\n      type + 'Exit',\n      type + 'Exit-' + key\n    ]\n  } else if (key) {\n    return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key]\n  } else if (node.append) {\n    return [type, CHILDREN, type + 'Exit']\n  } else {\n    return [type, type + 'Exit']\n  }\n}\n\nfunction toStack(node) {\n  let events\n  if (node.type === 'document') {\n    events = ['Document', CHILDREN, 'DocumentExit']\n  } else if (node.type === 'root') {\n    events = ['Root', CHILDREN, 'RootExit']\n  } else {\n    events = getEvents(node)\n  }\n\n  return {\n    eventIndex: 0,\n    events,\n    iterator: 0,\n    node,\n    visitorIndex: 0,\n    visitors: []\n  }\n}\n\nfunction cleanMarks(node) {\n  node[isClean] = false\n  if (node.nodes) node.nodes.forEach(i => cleanMarks(i))\n  return node\n}\n\nlet postcss = {}\n\nclass LazyResult {\n  constructor(processor, css, opts) {\n    this.stringified = false\n    this.processed = false\n\n    let root\n    if (\n      typeof css === 'object' &&\n      css !== null &&\n      (css.type === 'root' || css.type === 'document')\n    ) {\n      root = cleanMarks(css)\n    } else if (css instanceof LazyResult || css instanceof Result) {\n      root = cleanMarks(css.root)\n      if (css.map) {\n        if (typeof opts.map === 'undefined') opts.map = {}\n        if (!opts.map.inline) opts.map.inline = false\n        opts.map.prev = css.map\n      }\n    } else {\n      let parser = parse\n      if (opts.syntax) parser = opts.syntax.parse\n      if (opts.parser) parser = opts.parser\n      if (parser.parse) parser = parser.parse\n\n      try {\n        root = parser(css, opts)\n      } catch (error) {\n        this.processed = true\n        this.error = error\n      }\n\n      if (root && !root[my]) {\n        /* c8 ignore next 2 */\n        Container.rebuild(root)\n      }\n    }\n\n    this.result = new Result(processor, root, opts)\n    this.helpers = { ...postcss, postcss, result: this.result }\n    this.plugins = this.processor.plugins.map(plugin => {\n      if (typeof plugin === 'object' && plugin.prepare) {\n        return { ...plugin, ...plugin.prepare(this.result) }\n      } else {\n        return plugin\n      }\n    })\n  }\n\n  async() {\n    if (this.error) return Promise.reject(this.error)\n    if (this.processed) return Promise.resolve(this.result)\n    if (!this.processing) {\n      this.processing = this.runAsync()\n    }\n    return this.processing\n  }\n\n  catch(onRejected) {\n    return this.async().catch(onRejected)\n  }\n\n  finally(onFinally) {\n    return this.async().then(onFinally, onFinally)\n  }\n\n  getAsyncError() {\n    throw new Error('Use process(css).then(cb) to work with async plugins')\n  }\n\n  handleError(error, node) {\n    let plugin = this.result.lastPlugin\n    try {\n      if (node) node.addToError(error)\n      this.error = error\n      if (error.name === 'CssSyntaxError' && !error.plugin) {\n        error.plugin = plugin.postcssPlugin\n        error.setMessage()\n      } else if (plugin.postcssVersion) {\n        if (process.env.NODE_ENV !== 'production') {\n          let pluginName = plugin.postcssPlugin\n          let pluginVer = plugin.postcssVersion\n          let runtimeVer = this.result.processor.version\n          let a = pluginVer.split('.')\n          let b = runtimeVer.split('.')\n\n          if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n            // eslint-disable-next-line no-console\n            console.error(\n              'Unknown error from PostCSS plugin. Your current PostCSS ' +\n                'version is ' +\n                runtimeVer +\n                ', but ' +\n                pluginName +\n                ' uses ' +\n                pluginVer +\n                '. Perhaps this is the source of the error below.'\n            )\n          }\n        }\n      }\n    } catch (err) {\n      /* c8 ignore next 3 */\n      // eslint-disable-next-line no-console\n      if (console && console.error) console.error(err)\n    }\n    return error\n  }\n\n  prepareVisitors() {\n    this.listeners = {}\n    let add = (plugin, type, cb) => {\n      if (!this.listeners[type]) this.listeners[type] = []\n      this.listeners[type].push([plugin, cb])\n    }\n    for (let plugin of this.plugins) {\n      if (typeof plugin === 'object') {\n        for (let event in plugin) {\n          if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n            throw new Error(\n              `Unknown event ${event} in ${plugin.postcssPlugin}. ` +\n                `Try to update PostCSS (${this.processor.version} now).`\n            )\n          }\n          if (!NOT_VISITORS[event]) {\n            if (typeof plugin[event] === 'object') {\n              for (let filter in plugin[event]) {\n                if (filter === '*') {\n                  add(plugin, event, plugin[event][filter])\n                } else {\n                  add(\n                    plugin,\n                    event + '-' + filter.toLowerCase(),\n                    plugin[event][filter]\n                  )\n                }\n              }\n            } else if (typeof plugin[event] === 'function') {\n              add(plugin, event, plugin[event])\n            }\n          }\n        }\n      }\n    }\n    this.hasListener = Object.keys(this.listeners).length > 0\n  }\n\n  async runAsync() {\n    this.plugin = 0\n    for (let i = 0; i < this.plugins.length; i++) {\n      let plugin = this.plugins[i]\n      let promise = this.runOnRoot(plugin)\n      if (isPromise(promise)) {\n        try {\n          await promise\n        } catch (error) {\n          throw this.handleError(error)\n        }\n      }\n    }\n\n    this.prepareVisitors()\n    if (this.hasListener) {\n      let root = this.result.root\n      while (!root[isClean]) {\n        root[isClean] = true\n        let stack = [toStack(root)]\n        while (stack.length > 0) {\n          let promise = this.visitTick(stack)\n          if (isPromise(promise)) {\n            try {\n              await promise\n            } catch (e) {\n              let node = stack[stack.length - 1].node\n              throw this.handleError(e, node)\n            }\n          }\n        }\n      }\n\n      if (this.listeners.OnceExit) {\n        for (let [plugin, visitor] of this.listeners.OnceExit) {\n          this.result.lastPlugin = plugin\n          try {\n            if (root.type === 'document') {\n              let roots = root.nodes.map(subRoot =>\n                visitor(subRoot, this.helpers)\n              )\n\n              await Promise.all(roots)\n            } else {\n              await visitor(root, this.helpers)\n            }\n          } catch (e) {\n            throw this.handleError(e)\n          }\n        }\n      }\n    }\n\n    this.processed = true\n    return this.stringify()\n  }\n\n  runOnRoot(plugin) {\n    this.result.lastPlugin = plugin\n    try {\n      if (typeof plugin === 'object' && plugin.Once) {\n        if (this.result.root.type === 'document') {\n          let roots = this.result.root.nodes.map(root =>\n            plugin.Once(root, this.helpers)\n          )\n\n          if (isPromise(roots[0])) {\n            return Promise.all(roots)\n          }\n\n          return roots\n        }\n\n        return plugin.Once(this.result.root, this.helpers)\n      } else if (typeof plugin === 'function') {\n        return plugin(this.result.root, this.result)\n      }\n    } catch (error) {\n      throw this.handleError(error)\n    }\n  }\n\n  stringify() {\n    if (this.error) throw this.error\n    if (this.stringified) return this.result\n    this.stringified = true\n\n    this.sync()\n\n    let opts = this.result.opts\n    let str = stringify\n    if (opts.syntax) str = opts.syntax.stringify\n    if (opts.stringifier) str = opts.stringifier\n    if (str.stringify) str = str.stringify\n\n    let map = new MapGenerator(str, this.result.root, this.result.opts)\n    let data = map.generate()\n    this.result.css = data[0]\n    this.result.map = data[1]\n\n    return this.result\n  }\n\n  sync() {\n    if (this.error) throw this.error\n    if (this.processed) return this.result\n    this.processed = true\n\n    if (this.processing) {\n      throw this.getAsyncError()\n    }\n\n    for (let plugin of this.plugins) {\n      let promise = this.runOnRoot(plugin)\n      if (isPromise(promise)) {\n        throw this.getAsyncError()\n      }\n    }\n\n    this.prepareVisitors()\n    if (this.hasListener) {\n      let root = this.result.root\n      while (!root[isClean]) {\n        root[isClean] = true\n        this.walkSync(root)\n      }\n      if (this.listeners.OnceExit) {\n        if (root.type === 'document') {\n          for (let subRoot of root.nodes) {\n            this.visitSync(this.listeners.OnceExit, subRoot)\n          }\n        } else {\n          this.visitSync(this.listeners.OnceExit, root)\n        }\n      }\n    }\n\n    return this.result\n  }\n\n  then(onFulfilled, onRejected) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (!('from' in this.opts)) {\n        warnOnce(\n          'Without `from` option PostCSS could generate wrong source map ' +\n            'and will not find Browserslist config. Set it to CSS file path ' +\n            'or to `undefined` to prevent this warning.'\n        )\n      }\n    }\n    return this.async().then(onFulfilled, onRejected)\n  }\n\n  toString() {\n    return this.css\n  }\n\n  visitSync(visitors, node) {\n    for (let [plugin, visitor] of visitors) {\n      this.result.lastPlugin = plugin\n      let promise\n      try {\n        promise = visitor(node, this.helpers)\n      } catch (e) {\n        throw this.handleError(e, node.proxyOf)\n      }\n      if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n        return true\n      }\n      if (isPromise(promise)) {\n        throw this.getAsyncError()\n      }\n    }\n  }\n\n  visitTick(stack) {\n    let visit = stack[stack.length - 1]\n    let { node, visitors } = visit\n\n    if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n      stack.pop()\n      return\n    }\n\n    if (visitors.length > 0 && visit.visitorIndex < visitors.length) {\n      let [plugin, visitor] = visitors[visit.visitorIndex]\n      visit.visitorIndex += 1\n      if (visit.visitorIndex === visitors.length) {\n        visit.visitors = []\n        visit.visitorIndex = 0\n      }\n      this.result.lastPlugin = plugin\n      try {\n        return visitor(node.toProxy(), this.helpers)\n      } catch (e) {\n        throw this.handleError(e, node)\n      }\n    }\n\n    if (visit.iterator !== 0) {\n      let iterator = visit.iterator\n      let child\n      while ((child = node.nodes[node.indexes[iterator]])) {\n        node.indexes[iterator] += 1\n        if (!child[isClean]) {\n          child[isClean] = true\n          stack.push(toStack(child))\n          return\n        }\n      }\n      visit.iterator = 0\n      delete node.indexes[iterator]\n    }\n\n    let events = visit.events\n    while (visit.eventIndex < events.length) {\n      let event = events[visit.eventIndex]\n      visit.eventIndex += 1\n      if (event === CHILDREN) {\n        if (node.nodes && node.nodes.length) {\n          node[isClean] = true\n          visit.iterator = node.getIterator()\n        }\n        return\n      } else if (this.listeners[event]) {\n        visit.visitors = this.listeners[event]\n        return\n      }\n    }\n    stack.pop()\n  }\n\n  walkSync(node) {\n    node[isClean] = true\n    let events = getEvents(node)\n    for (let event of events) {\n      if (event === CHILDREN) {\n        if (node.nodes) {\n          node.each(child => {\n            if (!child[isClean]) this.walkSync(child)\n          })\n        }\n      } else {\n        let visitors = this.listeners[event]\n        if (visitors) {\n          if (this.visitSync(visitors, node.toProxy())) return\n        }\n      }\n    }\n  }\n\n  warnings() {\n    return this.sync().warnings()\n  }\n\n  get content() {\n    return this.stringify().content\n  }\n\n  get css() {\n    return this.stringify().css\n  }\n\n  get map() {\n    return this.stringify().map\n  }\n\n  get messages() {\n    return this.sync().messages\n  }\n\n  get opts() {\n    return this.result.opts\n  }\n\n  get processor() {\n    return this.result.processor\n  }\n\n  get root() {\n    return this.sync().root\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'LazyResult'\n  }\n}\n\nLazyResult.registerPostcss = dependant => {\n  postcss = dependant\n}\n\nmodule.exports = LazyResult\nLazyResult.default = LazyResult\n\nRoot.registerLazyResult(LazyResult)\nDocument.registerLazyResult(LazyResult)\n", "'use strict'\n\nlet MapGenerator = require('./map-generator')\nlet stringify = require('./stringify')\nlet warnOnce = require('./warn-once')\nlet parse = require('./parse')\nconst Result = require('./result')\n\nclass NoWorkResult {\n  constructor(processor, css, opts) {\n    css = css.toString()\n    this.stringified = false\n\n    this._processor = processor\n    this._css = css\n    this._opts = opts\n    this._map = undefined\n    let root\n\n    let str = stringify\n    this.result = new Result(this._processor, root, this._opts)\n    this.result.css = css\n\n    let self = this\n    Object.defineProperty(this.result, 'root', {\n      get() {\n        return self.root\n      }\n    })\n\n    let map = new MapGenerator(str, root, this._opts, css)\n    if (map.isMap()) {\n      let [generatedCSS, generatedMap] = map.generate()\n      if (generatedCSS) {\n        this.result.css = generatedCSS\n      }\n      if (generatedMap) {\n        this.result.map = generatedMap\n      }\n    } else {\n      map.clearAnnotation()\n      this.result.css = map.css\n    }\n  }\n\n  async() {\n    if (this.error) return Promise.reject(this.error)\n    return Promise.resolve(this.result)\n  }\n\n  catch(onRejected) {\n    return this.async().catch(onRejected)\n  }\n\n  finally(onFinally) {\n    return this.async().then(onFinally, onFinally)\n  }\n\n  sync() {\n    if (this.error) throw this.error\n    return this.result\n  }\n\n  then(onFulfilled, onRejected) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (!('from' in this._opts)) {\n        warnOnce(\n          'Without `from` option PostCSS could generate wrong source map ' +\n            'and will not find Browserslist config. Set it to CSS file path ' +\n            'or to `undefined` to prevent this warning.'\n        )\n      }\n    }\n\n    return this.async().then(onFulfilled, onRejected)\n  }\n\n  toString() {\n    return this._css\n  }\n\n  warnings() {\n    return []\n  }\n\n  get content() {\n    return this.result.css\n  }\n\n  get css() {\n    return this.result.css\n  }\n\n  get map() {\n    return this.result.map\n  }\n\n  get messages() {\n    return []\n  }\n\n  get opts() {\n    return this.result.opts\n  }\n\n  get processor() {\n    return this.result.processor\n  }\n\n  get root() {\n    if (this._root) {\n      return this._root\n    }\n\n    let root\n    let parser = parse\n\n    try {\n      root = parser(this._css, this._opts)\n    } catch (error) {\n      this.error = error\n    }\n\n    if (this.error) {\n      throw this.error\n    } else {\n      this._root = root\n      return root\n    }\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'NoWorkResult'\n  }\n}\n\nmodule.exports = NoWorkResult\nNoWorkResult.default = NoWorkResult\n", "'use strict'\n\nlet NoWorkResult = require('./no-work-result')\nlet LazyResult = require('./lazy-result')\nlet Document = require('./document')\nlet Root = require('./root')\n\nclass Processor {\n  constructor(plugins = []) {\n    this.version = '8.4.38'\n    this.plugins = this.normalize(plugins)\n  }\n\n  normalize(plugins) {\n    let normalized = []\n    for (let i of plugins) {\n      if (i.postcss === true) {\n        i = i()\n      } else if (i.postcss) {\n        i = i.postcss\n      }\n\n      if (typeof i === 'object' && Array.isArray(i.plugins)) {\n        normalized = normalized.concat(i.plugins)\n      } else if (typeof i === 'object' && i.postcssPlugin) {\n        normalized.push(i)\n      } else if (typeof i === 'function') {\n        normalized.push(i)\n      } else if (typeof i === 'object' && (i.parse || i.stringify)) {\n        if (process.env.NODE_ENV !== 'production') {\n          throw new Error(\n            'PostCSS syntaxes cannot be used as plugins. Instead, please use ' +\n              'one of the syntax/parser/stringifier options as outlined ' +\n              'in your PostCSS runner documentation.'\n          )\n        }\n      } else {\n        throw new Error(i + ' is not a PostCSS plugin')\n      }\n    }\n    return normalized\n  }\n\n  process(css, opts = {}) {\n    if (\n      !this.plugins.length &&\n      !opts.parser &&\n      !opts.stringifier &&\n      !opts.syntax\n    ) {\n      return new NoWorkResult(this, css, opts)\n    } else {\n      return new LazyResult(this, css, opts)\n    }\n  }\n\n  use(plugin) {\n    this.plugins = this.plugins.concat(this.normalize([plugin]))\n    return this\n  }\n}\n\nmodule.exports = Processor\nProcessor.default = Processor\n\nRoot.registerProcessor(Processor)\nDocument.registerProcessor(Processor)\n", "'use strict'\n\nlet Declaration = require('./declaration')\nlet PreviousMap = require('./previous-map')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Input = require('./input')\nlet Root = require('./root')\nlet Rule = require('./rule')\n\nfunction fromJSON(json, inputs) {\n  if (Array.isArray(json)) return json.map(n => fromJSON(n))\n\n  let { inputs: ownInputs, ...defaults } = json\n  if (ownInputs) {\n    inputs = []\n    for (let input of ownInputs) {\n      let inputHydrated = { ...input, __proto__: Input.prototype }\n      if (inputHydrated.map) {\n        inputHydrated.map = {\n          ...inputHydrated.map,\n          __proto__: PreviousMap.prototype\n        }\n      }\n      inputs.push(inputHydrated)\n    }\n  }\n  if (defaults.nodes) {\n    defaults.nodes = json.nodes.map(n => fromJSON(n, inputs))\n  }\n  if (defaults.source) {\n    let { inputId, ...source } = defaults.source\n    defaults.source = source\n    if (inputId != null) {\n      defaults.source.input = inputs[inputId]\n    }\n  }\n  if (defaults.type === 'root') {\n    return new Root(defaults)\n  } else if (defaults.type === 'decl') {\n    return new Declaration(defaults)\n  } else if (defaults.type === 'rule') {\n    return new Rule(defaults)\n  } else if (defaults.type === 'comment') {\n    return new Comment(defaults)\n  } else if (defaults.type === 'atrule') {\n    return new AtRule(defaults)\n  } else {\n    throw new Error('Unknown node type: ' + json.type)\n  }\n}\n\nmodule.exports = fromJSON\nfromJSON.default = fromJSON\n", "'use strict'\n\nlet CssSyntaxError = require('./css-syntax-error')\nlet Declaration = require('./declaration')\nlet LazyResult = require('./lazy-result')\nlet Container = require('./container')\nlet Processor = require('./processor')\nlet stringify = require('./stringify')\nlet fromJSON = require('./fromJSON')\nlet Document = require('./document')\nlet Warning = require('./warning')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Result = require('./result.js')\nlet Input = require('./input')\nlet parse = require('./parse')\nlet list = require('./list')\nlet Rule = require('./rule')\nlet Root = require('./root')\nlet Node = require('./node')\n\nfunction postcss(...plugins) {\n  if (plugins.length === 1 && Array.isArray(plugins[0])) {\n    plugins = plugins[0]\n  }\n  return new Processor(plugins)\n}\n\npostcss.plugin = function plugin(name, initializer) {\n  let warningPrinted = false\n  function creator(...args) {\n    // eslint-disable-next-line no-console\n    if (console && console.warn && !warningPrinted) {\n      warningPrinted = true\n      // eslint-disable-next-line no-console\n      console.warn(\n        name +\n          ': postcss.plugin was deprecated. Migration guide:\\n' +\n          'https://evilmartians.com/chronicles/postcss-8-plugin-migration'\n      )\n      if (process.env.LANG && process.env.LANG.startsWith('cn')) {\n        /* c8 ignore next 7 */\n        // eslint-disable-next-line no-console\n        console.warn(\n          name +\n            ': 里面 postcss.plugin 被弃用. 迁移指南:\\n' +\n            'https://www.w3ctech.com/topic/2226'\n        )\n      }\n    }\n    let transformer = initializer(...args)\n    transformer.postcssPlugin = name\n    transformer.postcssVersion = new Processor().version\n    return transformer\n  }\n\n  let cache\n  Object.defineProperty(creator, 'postcss', {\n    get() {\n      if (!cache) cache = creator()\n      return cache\n    }\n  })\n\n  creator.process = function (css, processOpts, pluginOpts) {\n    return postcss([creator(pluginOpts)]).process(css, processOpts)\n  }\n\n  return creator\n}\n\npostcss.stringify = stringify\npostcss.parse = parse\npostcss.fromJSON = fromJSON\npostcss.list = list\n\npostcss.comment = defaults => new Comment(defaults)\npostcss.atRule = defaults => new AtRule(defaults)\npostcss.decl = defaults => new Declaration(defaults)\npostcss.rule = defaults => new Rule(defaults)\npostcss.root = defaults => new Root(defaults)\npostcss.document = defaults => new Document(defaults)\n\npostcss.CssSyntaxError = CssSyntaxError\npostcss.Declaration = Declaration\npostcss.Container = Container\npostcss.Processor = Processor\npostcss.Document = Document\npostcss.Comment = Comment\npostcss.Warning = Warning\npostcss.AtRule = AtRule\npostcss.Result = Result\npostcss.Input = Input\npostcss.Rule = Rule\npostcss.Root = Root\npostcss.Node = Node\n\nLazyResult.registerPostcss(postcss)\n\nmodule.exports = postcss\npostcss.default = postcss\n", "import postcss from './postcss.js'\n\nexport default postcss\n\nexport const stringify = postcss.stringify\nexport const fromJSON = postcss.fromJSON\nexport const plugin = postcss.plugin\nexport const parse = postcss.parse\nexport const list = postcss.list\n\nexport const document = postcss.document\nexport const comment = postcss.comment\nexport const atRule = postcss.atRule\nexport const rule = postcss.rule\nexport const decl = postcss.decl\nexport const root = postcss.root\n\nexport const CssSyntaxError = postcss.CssSyntaxError\nexport const Declaration = postcss.Declaration\nexport const Container = postcss.Container\nexport const Processor = postcss.Processor\nexport const Document = postcss.Document\nexport const Comment = postcss.Comment\nexport const Warning = postcss.Warning\nexport const AtRule = postcss.AtRule\nexport const Result = postcss.Result\nexport const Input = postcss.Input\nexport const Rule = postcss.Rule\nexport const Root = postcss.Root\nexport const Node = postcss.Node\n", "import { mediaSelectorPlugin, pseudoClassPlugin } from './css';\nimport {\n  type serializedNodeWithId,\n  type serializedElementNodeWithId,\n  NodeType,\n  type elementNode,\n  type legacyAttributes,\n} from '@amplitude/rrweb-types';\nimport { type tagMap, type BuildCache } from './types';\nimport { isElement, Mirror, isNodeMetaEqual } from './utils';\nimport postcss from 'postcss';\n\n// Tag names that should not be defined as custom elements\nconst customElementExclusions = ['webview'];\n\nconst tagMap: tagMap = {\n  script: 'noscript',\n  // camel case svg element tag names\n  altglyph: 'altGlyph',\n  altglyphdef: 'altGlyphDef',\n  altglyphitem: 'altGlyphItem',\n  animatecolor: 'animateColor',\n  animatemotion: 'animateMotion',\n  animatetransform: 'animateTransform',\n  clippath: 'clipPath',\n  feblend: 'feBlend',\n  fecolormatrix: 'feColorMatrix',\n  fecomponenttransfer: 'feComponentTransfer',\n  fecomposite: 'feComposite',\n  feconvolvematrix: 'feConvolveMatrix',\n  fediffuselighting: 'feDiffuseLighting',\n  fedisplacementmap: 'feDisplacementMap',\n  fedistantlight: 'feDistantLight',\n  fedropshadow: 'feDropShadow',\n  feflood: 'feFlood',\n  fefunca: 'feFuncA',\n  fefuncb: 'feFuncB',\n  fefuncg: 'feFuncG',\n  fefuncr: 'feFuncR',\n  fegaussianblur: 'feGaussianBlur',\n  feimage: 'feImage',\n  femerge: 'feMerge',\n  femergenode: 'feMergeNode',\n  femorphology: 'feMorphology',\n  feoffset: 'feOffset',\n  fepointlight: 'fePointLight',\n  fespecularlighting: 'feSpecularLighting',\n  fespotlight: 'feSpotLight',\n  fetile: 'feTile',\n  feturbulence: 'feTurbulence',\n  foreignobject: 'foreignObject',\n  glyphref: 'glyphRef',\n  lineargradient: 'linearGradient',\n  radialgradient: 'radialGradient',\n};\nfunction getTagName(n: elementNode): string {\n  let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\n  if (tagName === 'link' && n.attributes._cssText) {\n    tagName = 'style';\n  }\n\n  return tagName;\n}\n\nexport function adaptCssForReplay(cssText: string, cache: BuildCache): string {\n  const cachedStyle = cache?.stylesWithHoverClass.get(cssText);\n  if (cachedStyle) return cachedStyle;\n\n  let result = cssText;\n  try {\n    const ast: { css: string } = postcss([\n      mediaSelectorPlugin,\n      pseudoClassPlugin,\n    ]).process(cssText);\n    result = ast.css;\n  } catch (error) {\n    console.warn('Failed to adapt css for replay', error);\n  }\n\n  cache?.stylesWithHoverClass.set(cssText, result);\n  return result;\n}\n\nexport function createCache(): BuildCache {\n  const stylesWithHoverClass: Map<string, string> = new Map();\n  return {\n    stylesWithHoverClass,\n  };\n}\n\n/**\n * undo splitCssText/markCssSplits\n * (would move to utils.ts but uses `adaptCssForReplay`)\n */\nexport function applyCssSplits(\n  n: serializedElementNodeWithId,\n  cssText: string,\n  hackCss: boolean,\n  cache: BuildCache,\n): void {\n  const childTextNodes = [];\n  for (const scn of n.childNodes) {\n    if (scn.type === NodeType.Text) {\n      childTextNodes.push(scn);\n    }\n  }\n  const cssTextSplits = cssText.split('/* rr_split */');\n  while (\n    cssTextSplits.length > 1 &&\n    cssTextSplits.length > childTextNodes.length\n  ) {\n    // unexpected: remerge the last two so that we don't discard any css\n    cssTextSplits.splice(-2, 2, cssTextSplits.slice(-2).join(''));\n  }\n  for (let i = 0; i < childTextNodes.length; i++) {\n    const childTextNode = childTextNodes[i];\n    const cssTextSection = cssTextSplits[i];\n    if (childTextNode && cssTextSection) {\n      // id will be assigned when these child nodes are\n      // iterated over in buildNodeWithSN\n      childTextNode.textContent = hackCss\n        ? adaptCssForReplay(cssTextSection, cache)\n        : cssTextSection;\n    }\n  }\n}\n\n/**\n * Normally a <style> element has a single textNode containing the rules.\n * During serialization, we bypass this (`styleEl.sheet`) to get the rules the\n * browser sees and serialize this to a special _cssText attribute, blanking\n * out any text nodes. This function reverses that and also handles cases where\n * there were no textNode children present (dynamic css/or a <link> element) as\n * well as multiple textNodes, which need to be repopulated (based on presence of\n * a special `rr_split` marker in case they are modified by subsequent mutations.\n */\nexport function buildStyleNode(\n  n: serializedElementNodeWithId,\n  styleEl: HTMLStyleElement, // when inlined, a <link type=\"stylesheet\"> also gets rebuilt as a <style>\n  cssText: string,\n  options: {\n    doc: Document;\n    hackCss: boolean;\n    cache: BuildCache;\n  },\n) {\n  const { doc, hackCss, cache } = options;\n  if (n.childNodes.length) {\n    applyCssSplits(n, cssText, hackCss, cache);\n  } else {\n    if (hackCss) {\n      cssText = adaptCssForReplay(cssText, cache);\n    }\n    /**\n       <link> element or dynamic <style> are serialized without any child nodes\n       we create the text node without an ID or presence in mirror as it can't\n    */\n    styleEl.appendChild(doc.createTextNode(cssText));\n  }\n}\n\nfunction buildNode(\n  n: serializedNodeWithId,\n  options: {\n    doc: Document;\n    hackCss: boolean;\n    cache: BuildCache;\n  },\n): Node | null {\n  const { doc, hackCss, cache } = options;\n  switch (n.type) {\n    case NodeType.Document:\n      return doc.implementation.createDocument(null, '', null);\n    case NodeType.DocumentType:\n      return doc.implementation.createDocumentType(\n        n.name || 'html',\n        n.publicId,\n        n.systemId,\n      );\n    case NodeType.Element: {\n      const tagName = getTagName(n);\n      let node: Element;\n      if (n.isSVG) {\n        node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\n      } else {\n        if (\n          // If the tag name is a custom element name\n          n.isCustom &&\n          // If the browser supports custom elements\n          doc.defaultView?.customElements &&\n          // If the custom element hasn't been defined yet\n          !doc.defaultView.customElements.get(n.tagName) &&\n          // If the tag is not in the exclusion list\n          !customElementExclusions.includes(n.tagName)\n        )\n          doc.defaultView.customElements.define(\n            n.tagName,\n            class extends doc.defaultView.HTMLElement {},\n          );\n        node = doc.createElement(tagName);\n      }\n      /**\n       * Attribute names start with `rr_` are internal attributes added by rrweb.\n       * They often overwrite other attributes on the element.\n       * We need to parse them last so they can overwrite conflicting attributes.\n       */\n      const specialAttributes: { [key: string]: string | number } = {};\n      for (const name in n.attributes) {\n        if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\n          continue;\n        }\n        let value = n.attributes[name];\n        if (\n          tagName === 'option' &&\n          name === 'selected' &&\n          (value as legacyAttributes[typeof name]) === false\n        ) {\n          // legacy fix (TODO: if `value === false` can be generated for other attrs,\n          // should we also omit those other attrs from build ?)\n          continue;\n        }\n\n        // null values mean the attribute was removed\n        if (value === null) {\n          continue;\n        }\n\n        /**\n         * Boolean attributes are considered to be true if they're present on the element at all.\n         * We should set value to the empty string (\"\") or the attribute's name, with no leading or trailing whitespace.\n         * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute#parameters\n         */\n        if (value === true) value = '';\n\n        if (name.startsWith('rr_')) {\n          specialAttributes[name] = value;\n          continue;\n        }\n\n        if (typeof value !== 'string') {\n          // pass\n        } else if (tagName === 'style' && name === '_cssText') {\n          buildStyleNode(n, node as HTMLStyleElement, value, options);\n          continue; // no need to set _cssText as attribute\n        } else if (tagName === 'textarea' && name === 'value') {\n          // create without an ID or presence in mirror\n          node.appendChild(doc.createTextNode(value));\n          n.childNodes = []; // value overrides childNodes\n          continue;\n        }\n\n        try {\n          if (n.isSVG && name === 'xlink:href') {\n            node.setAttributeNS(\n              'http://www.w3.org/1999/xlink',\n              name,\n              value.toString(),\n            );\n          } else if (\n            name === 'onload' ||\n            name === 'onclick' ||\n            name.substring(0, 7) === 'onmouse'\n          ) {\n            // Rename some of the more common atttributes from https://www.w3schools.com/tags/ref_eventattributes.asp\n            // as setting them triggers a console.error (which shows up despite the try/catch)\n            // Assumption: these attributes are not used to css\n            node.setAttribute('_' + name, value.toString());\n          } else if (\n            tagName === 'meta' &&\n            n.attributes['http-equiv'] === 'Content-Security-Policy' &&\n            name === 'content'\n          ) {\n            // If CSP contains style-src and inline-style is disabled, there will be an error \"Refused to apply inline style because it violates the following Content Security Policy directive: style-src '*'\".\n            // And the function insertStyleRules in rrweb replayer will throw an error \"Uncaught TypeError: Cannot read property 'insertRule' of null\".\n            node.setAttribute('csp-content', value.toString());\n            continue;\n          } else if (\n            tagName === 'link' &&\n            (n.attributes.rel === 'preload' ||\n              n.attributes.rel === 'modulepreload') &&\n            n.attributes.as === 'script'\n          ) {\n            // ignore\n          } else if (\n            tagName === 'link' &&\n            n.attributes.rel === 'prefetch' &&\n            typeof n.attributes.href === 'string' &&\n            n.attributes.href.endsWith('.js')\n          ) {\n            // ignore\n          } else if (\n            tagName === 'img' &&\n            n.attributes.srcset &&\n            n.attributes.rr_dataURL\n          ) {\n            // backup original img srcset\n            node.setAttribute(\n              'rrweb-original-srcset',\n              n.attributes.srcset as string,\n            );\n          } else {\n            node.setAttribute(name, value.toString());\n          }\n        } catch (error) {\n          // skip invalid attribute\n        }\n      }\n\n      for (const name in specialAttributes) {\n        const value = specialAttributes[name];\n        // handle internal attributes\n        if (tagName === 'canvas' && name === 'rr_dataURL') {\n          const image = doc.createElement('img');\n          image.onload = () => {\n            const ctx = (node as HTMLCanvasElement).getContext('2d');\n            if (ctx) {\n              ctx.drawImage(image, 0, 0, image.width, image.height);\n            }\n          };\n          image.src = value.toString();\n          type RRCanvasElement = {\n            RRNodeType: NodeType;\n            rr_dataURL: string;\n          };\n          // If the canvas element is created in RRDom runtime (seeking to a time point), the canvas context isn't supported. So the data has to be stored and not handled until diff process. https://github.com/rrweb-io/rrweb/pull/944\n          if ((node as unknown as RRCanvasElement).RRNodeType)\n            (node as unknown as RRCanvasElement).rr_dataURL = value.toString();\n        } else if (tagName === 'img' && name === 'rr_dataURL') {\n          const image = node as HTMLImageElement;\n          if (!image.currentSrc.startsWith('data:')) {\n            // Backup original img src. It may not have been set yet.\n            image.setAttribute(\n              'rrweb-original-src',\n              n.attributes.src as string,\n            );\n            image.src = value.toString();\n          }\n        }\n\n        if (name === 'rr_width') {\n          (node as HTMLElement).style.setProperty('width', value.toString());\n        } else if (name === 'rr_height') {\n          (node as HTMLElement).style.setProperty('height', value.toString());\n        } else if (name === 'rr_background_color') {\n          (node as HTMLElement).style.setProperty(\n            'background-color',\n            value.toString(),\n          );\n        } else if (\n          name === 'rr_mediaCurrentTime' &&\n          typeof value === 'number'\n        ) {\n          (node as HTMLMediaElement).currentTime = value;\n        } else if (name === 'rr_mediaState') {\n          switch (value) {\n            case 'played':\n              (node as HTMLMediaElement)\n                .play()\n                .catch((e) => console.warn('media playback error', e));\n              break;\n            case 'paused':\n              (node as HTMLMediaElement).pause();\n              break;\n            default:\n          }\n        } else if (\n          name === 'rr_mediaPlaybackRate' &&\n          typeof value === 'number'\n        ) {\n          (node as HTMLMediaElement).playbackRate = value;\n        } else if (name === 'rr_mediaMuted' && typeof value === 'boolean') {\n          (node as HTMLMediaElement).muted = value;\n        } else if (name === 'rr_mediaLoop' && typeof value === 'boolean') {\n          (node as HTMLMediaElement).loop = value;\n        } else if (name === 'rr_mediaVolume' && typeof value === 'number') {\n          (node as HTMLMediaElement).volume = value;\n        } else if (name === 'rr_open_mode') {\n          (node as HTMLDialogElement).setAttribute(\n            'rr_open_mode',\n            value as string,\n          ); // keep this attribute for rrweb to trigger showModal\n        }\n      }\n\n      if (n.isShadowHost) {\n        /**\n         * Since node is newly rebuilt, it should be a normal element\n         * without shadowRoot.\n         * But if there are some weird situations that has defined\n         * custom element in the scope before we rebuild node, it may\n         * register the shadowRoot earlier.\n         * The logic in the 'else' block is just a try-my-best solution\n         * for the corner case, please let we know if it is wrong and\n         * we can remove it.\n         */\n        if (!node.shadowRoot) {\n          node.attachShadow({ mode: 'open' });\n        } else {\n          while (node.shadowRoot.firstChild) {\n            node.shadowRoot.removeChild(node.shadowRoot.firstChild);\n          }\n        }\n      }\n      return node;\n    }\n    case NodeType.Text:\n      if (n.isStyle && hackCss) {\n        // support legacy style\n        return doc.createTextNode(adaptCssForReplay(n.textContent, cache));\n      }\n      return doc.createTextNode(n.textContent);\n    case NodeType.CDATA:\n      return doc.createCDATASection(n.textContent);\n    case NodeType.Comment:\n      return doc.createComment(n.textContent);\n    default:\n      return null;\n  }\n}\n\nexport function buildNodeWithSN(\n  n: serializedNodeWithId,\n  options: {\n    doc: Document;\n    mirror: Mirror;\n    skipChild?: boolean;\n    hackCss: boolean;\n    /**\n     * This callback will be called for each of this nodes' `.childNodes` after they are appended to _this_ node.\n     * Caveat: This callback _doesn't_ get called when this node is appended to the DOM.\n     */\n    afterAppend?: (n: Node, id: number) => unknown;\n    cache: BuildCache;\n    /**\n     * Collector for nodes that have scroll data (rr_scrollLeft/rr_scrollTop).\n     * Populated during build so we can apply scrolls without iterating all nodes.\n     */\n    scrollNodes?: Node[];\n  },\n): Node | null {\n  const {\n    doc,\n    mirror,\n    skipChild = false,\n    hackCss = true,\n    afterAppend,\n    cache,\n    scrollNodes,\n  } = options;\n  /**\n   * Add a check to see if the node is already in the mirror. If it is, we can skip the whole process.\n   * This situation (duplicated nodes) can happen when recorder has some unfixed bugs and the same node is recorded twice. Or something goes wrong when saving or transferring event data.\n   * Duplicated node creation may cause unexpected errors in replayer. This check tries best effort to prevent the errors.\n   */\n  if (mirror.has(n.id)) {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const nodeInMirror = mirror.getNode(n.id)!;\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const meta = mirror.getMeta(nodeInMirror)!;\n    // For safety concern, check if the node in mirror is the same as the node we are trying to build\n    if (isNodeMetaEqual(meta, n)) return mirror.getNode(n.id);\n  }\n  let node = buildNode(n, { doc, hackCss, cache });\n  if (!node) {\n    return null;\n  }\n  // If the snapshot is created by checkout, the rootId doesn't change but the iframe's document can be changed automatically when a new iframe element is created.\n  if (n.rootId && (mirror.getNode(n.rootId) as Document) !== doc) {\n    mirror.replace(n.rootId, doc);\n  }\n  // use target document as root document\n  if (n.type === NodeType.Document) {\n    // close before open to make sure document was closed\n    doc.close();\n    doc.open();\n    if (\n      n.compatMode === 'BackCompat' &&\n      n.childNodes &&\n      n.childNodes[0].type !== NodeType.DocumentType // there isn't one already defined\n    ) {\n      // Trigger compatMode in the iframe\n      // this is needed as document.createElement('iframe') otherwise inherits a CSS1Compat mode from the parent replayer environment\n      if (\n        n.childNodes[0].type === NodeType.Element &&\n        'xmlns' in n.childNodes[0].attributes &&\n        n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml'\n      ) {\n        // might as well use an xhtml doctype if we've got an xhtml namespace\n        doc.write(\n          '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">',\n        );\n      } else {\n        doc.write(\n          '<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">',\n        );\n      }\n    }\n    node = doc;\n  }\n\n  mirror.add(node, n);\n\n  if (\n    scrollNodes &&\n    n.type === NodeType.Element &&\n    n.attributes &&\n    ('rr_scrollLeft' in n.attributes || 'rr_scrollTop' in n.attributes)\n  ) {\n    scrollNodes.push(node);\n  }\n\n  if (\n    (n.type === NodeType.Document || n.type === NodeType.Element) &&\n    !skipChild\n  ) {\n    for (const childN of n.childNodes) {\n      const childNode = buildNodeWithSN(childN, {\n        doc,\n        mirror,\n        skipChild: false,\n        hackCss,\n        afterAppend,\n        cache,\n        scrollNodes,\n      });\n      if (!childNode) {\n        console.warn('Failed to rebuild', childN);\n        continue;\n      }\n\n      if (childN.isShadow && isElement(node) && node.shadowRoot) {\n        node.shadowRoot.appendChild(childNode);\n      } else if (\n        n.type === NodeType.Document &&\n        childN.type == NodeType.Element\n      ) {\n        const htmlElement = childNode as HTMLElement;\n        let body: HTMLBodyElement | null = null;\n        htmlElement.childNodes.forEach((child) => {\n          if (child.nodeName === 'BODY') body = child as HTMLBodyElement;\n        });\n        if (body) {\n          // this branch solves a problem in Firefox where css transitions are incorrectly\n          // being applied upon rebuild.  Presumably FF doesn't finished parsing the styles\n          // in time, and applies e.g. a default margin:0 to elements which have a non-zero\n          // margin set in CSS, along with a transition on them\n          htmlElement.removeChild(body);\n          // append <head> and <style>s\n          node.appendChild(childNode);\n          // now append <body>\n          htmlElement.appendChild(body);\n        } else {\n          node.appendChild(childNode);\n        }\n      } else {\n        node.appendChild(childNode);\n      }\n      if (afterAppend) {\n        afterAppend(childNode, childN.id);\n      }\n    }\n  }\n\n  return node;\n}\n\nfunction visit(mirror: Mirror, onVisit: (node: Node) => void) {\n  function walk(node: Node) {\n    onVisit(node);\n  }\n\n  for (const id of mirror.getIds()) {\n    if (mirror.has(id)) {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      walk(mirror.getNode(id)!);\n    }\n  }\n}\n\nfunction handleScroll(node: Node, mirror: Mirror) {\n  const n = mirror.getMeta(node);\n  if (n?.type !== NodeType.Element) {\n    return;\n  }\n  const el = node as HTMLElement;\n  for (const name in n.attributes) {\n    if (\n      !(\n        Object.prototype.hasOwnProperty.call(n.attributes, name) &&\n        name.startsWith('rr_')\n      )\n    ) {\n      continue;\n    }\n    const value = n.attributes[name];\n    if (name === 'rr_scrollLeft') {\n      el.scrollLeft = value as number;\n    }\n    if (name === 'rr_scrollTop') {\n      el.scrollTop = value as number;\n    }\n  }\n}\n\nfunction rebuild(\n  n: serializedNodeWithId,\n  options: {\n    doc: Document;\n    onVisit?: (node: Node) => unknown;\n    hackCss?: boolean;\n    afterAppend?: (n: Node, id: number) => unknown;\n    cache: BuildCache;\n    mirror: Mirror;\n  },\n): Node | null {\n  const {\n    doc,\n    onVisit,\n    hackCss = true,\n    afterAppend,\n    cache,\n    mirror = new Mirror(),\n  } = options;\n  const scrollNodes: Node[] = [];\n  const node = buildNodeWithSN(n, {\n    doc,\n    mirror,\n    skipChild: false,\n    hackCss,\n    afterAppend,\n    cache,\n    scrollNodes,\n  });\n  if (onVisit) {\n    visit(mirror, onVisit);\n  }\n  // NOTE: Only iterate the nodes that actually have scroll data (rr_scrollLeft/rr_scrollTop),\n  // collected during buildNodeWithSN, rather than visiting every node in the mirror.\n  for (const scrollNode of scrollNodes) {\n    handleScroll(scrollNode, mirror);\n  }\n  return node;\n}\n\nexport default rebuild;\n"],
  "mappings": "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",
  "names": ["NodeType", "NodeType2", "testableAccessors", "testableMethods", "untaintedBasePrototype", "angularZoneUnpatchedAlternative", "key", "_a", "_b", "angularUnpatchedVersionSymbol", "getUntaintedPrototype", "candidate", "defaultPrototype", "accessorNames", "isUntaintedAccessors", "accessor", "methodNames", "isUntaintedMethods", "method", "iframeEl", "win", "untaintedObject", "e", "untaintedAccessorCache", "getUntaintedAccessor", "instance", "cacheKey", "untaintedPrototype", "untaintedAccessor", "untaintedMethodCache", "getUntaintedMethod", "untaintedMethod", "childNodes", "n", "parentNode", "parentElement", "textContent", "contains", "other", "getRootNode", "host", "styleSheets", "shadowRoot", "querySelector", "selectors", "querySelectorAll", "mutationObserverCtor", "index", "isElement", "isShadowRoot", "hostEl", "dom", "isNativeShadowDom", "fixBrowserCompatibilityIssuesInCSS", "cssText", "escapeImportStatement", "rule", "statement", "stringifyStylesheet", "s", "rules", "sheetHref", "stringifiedRules", "stringifyRule", "error", "isCSSImportRule", "importStringified", "absolutifyURLs", "ruleStringified", "isCSSStyleRule", "fixSafariColons", "cssStringified", "regex", "Mirror", "__publicField", "id", "childNode", "node", "meta", "oldNode", "createMirror", "maskInputValue", "element", "maskInputOptions", "tagName", "type", "value", "maskInputFn", "text", "actualType", "toLowerCase", "str", "ORIGINAL_ATTRIBUTE_NAME", "is2DCanvasBlank", "canvas", "ctx", "chunkSize", "x", "y", "getImageData", "originalGetImageData", "pixel", "isNodeMetaEqual", "a", "b", "getInputType", "extractFileExtension", "path", "baseURL", "url", "err", "match", "extractOrigin", "origin", "URL_IN_CSS_REF", "URL_PROTOCOL_MATCH", "URL_WWW_MATCH", "DATA_URI", "href", "quote1", "path1", "quote2", "path2", "path3", "filePath", "maybeQuote", "stack", "parts", "part", "normalizeCssString", "_testNoPxNorm", "splitCssText", "style", "splits", "iterCount", "cssTextNorm", "normFactor", "i", "textContentNorm", "jLimit", "j", "startSubstring", "cssNormSplits", "splitNorm", "prevTextContent", "prevMinLength", "k", "normPart", "markCssSplits", "_DEFAULT_BLOCKED_ELEMENT_BACKGROUND_COLOR", "_id", "tagNameRegex", "IGNORED_NODE", "genId", "getValidTagName", "processedTagName", "canvasService", "canvasCtx", "SRCSET_NOT_SPACES", "SRCSET_COMMAS_OR_SPACES", "getAbsoluteSrcsetString", "doc", "attributeValue", "pos", "collectCharacters", "regEx", "chars", "output", "absoluteToDoc", "descriptorsStr", "inParens", "c", "cachedDocument", "getHref", "isSVGElement", "el", "customHref", "transformAttribute", "name", "ignoreAttribute", "_value", "_isBlockedElement", "blockClass", "blockSelector", "eIndex", "className", "classMatchesRegex", "checkAncestors", "needMaskingText", "maskTextClass", "maskTextSelector", "onceIframeLoaded", "listener", "iframeLoadTimeout", "fired", "readyState", "timer", "blankUrl", "onceStylesheetLoaded", "link", "styleSheetLoadTimeout", "styleSheetLoaded", "serializeNode", "options", "mirror", "needsMask", "inlineStylesheet", "maskTextFn", "maskAttributeFn", "dataURLOptions", "inlineImages", "recordCanvas", "keepIframeSrcFn", "newlyAddedElement", "cssCaptured", "applyBackgroundColorToBlockedElements", "rootId", "getRootId", "serializeElementNode", "serializeTextNode", "docId", "parent", "parentTagName", "isStyle", "isScript", "needBlock", "attributes", "len", "attr", "transformedValue", "maskedValue", "stylesheet", "checked", "canvasDataURL", "blankCanvas", "blankCanvasDataURL", "image", "imageSrc", "priorCrossOrigin", "recordInlineImage", "mediaAttributes", "width", "height", "__spreadValues", "isCustomElement", "lowerIfExists", "maybeAttr", "slimDOMExcluded", "sn", "slimDOMOptions", "serializeAdoptedStyleSheets", "sheets", "onAdoptedStyleSheet", "emittedStyleIds", "sheet", "styleId", "serializeNodeWithId", "skipChild", "onSerialize", "onIframeLoad", "onStylesheetLoad", "stylesheetLoadTimeout", "preserveWhiteSpace", "_serializedNode", "serializedNode", "recordChild", "shadowRootEl", "bypassOptions", "childN", "serializedChildNode", "iframeDoc", "serializedIframeNode", "serializedLinkNode", "snapshot", "maskAllInputs", "slimDOM", "visitSnapshot", "onVisit", "walk", "current", "cleanupSnapshot", "MEDIA_SELECTOR", "MEDIA_SELECTOR_GLOBAL", "mediaSelectorPlugin", "atrule", "pseudoClassPlugin", "fixed", "selector", "create", "picocolors_browserModule", "__viteBrowserExternal", "pico", "require$$0", "terminalHighlight", "require$$1", "CssSyntaxError", "message", "line", "column", "source", "file", "plugin", "color", "css", "lines", "start", "end", "maxWidth", "mark", "aside", "bold", "gray", "red", "number", "gutter", "spacing", "code", "cssSyntaxError", "symbols", "DEFAULT_RAW", "capitalize", "Stringifier", "builder", "semicolon", "params", "detect", "buf", "depth", "indent", "step", "between", "after", "last", "child", "before", "left", "right", "string", "own", "root", "prop", "raw", "stringifier", "stringify", "stringify_1", "isClean", "my", "require$$2", "require$$3", "cloneNode", "obj", "cloned", "Node", "defaults", "add", "overrides", "keepBetween", "opts", "next", "stringRepresentation", "defaultType", "nodes", "bookmark", "foundSelf", "result", "_", "inputs", "emitInputs", "inputsNextIndex", "inputId", "input", "data", "Declaration", "__spreadProps", "declaration", "urlAlphabet", "nonSecure", "size", "alphabet", "defaultSize", "SourceMapConsumer", "SourceMapGenerator", "existsSync", "readFileSync", "dirname", "join", "fromBase64", "PreviousMap", "prev", "baseCharsetUri", "baseUri", "charsetUri", "uri", "encoding", "sourceMapString", "map", "comments", "prevPath", "previousMap", "fileURLToPath", "pathToFileURL", "isAbsolute", "resolve", "nanoid", "require$$4", "require$$5", "require$$6", "fromOffsetCache", "sourceMapAvailable", "pathAvailable", "Input", "endLine", "endColumn", "offset", "lastLine", "lineToIndex", "prevIndex", "l", "min", "max", "mid", "consumer", "from", "to", "fromUrl", "json", "relative", "sep", "MapGenerator", "cssString", "content", "eol", "noSource", "mapping", "p", "annotation", "cached", "already", "fileURL", "mapGenerator", "Comment", "comment", "parse", "Rule", "AtRule", "Root", "cleanSource", "markDirtyUp", "Container", "children", "callback", "iterator", "condition", "args", "cb", "exist", "existIndex", "sample", "pattern", "decl", "dependant", "container", "LazyResult", "Processor", "Document", "document", "printed", "warnOnce", "Warning", "range", "opt", "warning", "Result", "processor", "SINGLE_QUOTE", "DOUBLE_QUOTE", "BACKSLASH", "SLASH", "NEWLINE", "SPACE", "FEED", "TAB", "CR", "OPEN_SQUARE", "CLOSE_SQUARE", "OPEN_PARENTHESES", "CLOSE_PARENTHESES", "OPEN_CURLY", "CLOSE_CURLY", "SEMICOLON", "ASTERISK", "COLON", "AT", "RE_AT_END", "RE_WORD_END", "RE_BAD_BRACKET", "RE_HEX_ESCAPE", "tokenize", "ignore", "quote", "escape", "escaped", "escapePos", "currentToken", "length", "buffer", "returned", "position", "unclosed", "what", "endOfFile", "nextToken", "ignoreUnclosed", "controlChar", "back", "token", "atRule", "list", "spaces", "separators", "array", "split", "func", "inQuote", "prevQuote", "letter", "list_1", "values", "tokenizer", "SAFE_COMMENT_NEIGHBOR", "findLastWithPosition", "tokens", "Parser", "shift", "open", "brackets", "colon", "founded", "customProperty", "firstSpaces", "cache", "bracket", "clean", "all", "lastTokenType", "parser", "parse_1", "require$$7", "require$$8", "TYPE_TO_CLASS_NAME", "PLUGIN_PROPS", "NOT_VISITORS", "CHILDREN", "isPromise", "getEvents", "toStack", "events", "cleanMarks", "postcss", "onRejected", "onFinally", "event", "filter", "promise", "visitor", "roots", "subRoot", "onFulfilled", "visitors", "visit", "lazyResult", "NoWorkResult", "self", "generatedCSS", "generatedMap", "noWorkResult", "plugins", "normalized", "fromJSON", "ownInputs", "__objRest", "inputHydrated", "fromJSON_1", "require$$9", "require$$10", "require$$11", "require$$12", "require$$13", "require$$14", "require$$15", "require$$16", "require$$17", "initializer", "warningPrinted", "creator", "transformer", "processOpts", "pluginOpts", "postcss_1", "customElementExclusions", "tagMap", "getTagName", "adaptCssForReplay", "cachedStyle", "createCache", "applyCssSplits", "hackCss", "childTextNodes", "scn", "cssTextSplits", "childTextNode", "cssTextSection", "buildStyleNode", "styleEl", "buildNode", "specialAttributes", "buildNodeWithSN", "afterAppend", "scrollNodes", "nodeInMirror", "htmlElement", "body", "handleScroll", "rebuild", "scrollNode"]
}
