{"version":3,"file":"rrweb-snapshot.cjs","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"],"names":["dom","shadowRoot","rule","node","childNodes","textContent","index","doc","picocolors_browserModule","require$$0","require$$1","root","require$$2","require$$3","result","input","stringifier","require$$4","require$$5","require$$6","document","warnOnce","processor","warning","parser","require$$7","require$$8","postcss","visit","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17"],"mappings":"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","x_google_ignoreList":[5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35]}