happo 6.2.4 → 6.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/browser/main.js +4 -4
  2. package/dist/browser/main.js.map +3 -3
  3. package/dist/cli/{cancelJob-CTUTMG7N.js → cancelJob-GOUNFBOJ.js} +4 -4
  4. package/dist/cli/{chunk-AQNTUXWB.js → chunk-375RAU4V.js} +2 -2
  5. package/dist/cli/{chunk-AQNTUXWB.js.map → chunk-375RAU4V.js.map} +1 -1
  6. package/dist/cli/{chunk-AVYSZMPH.js → chunk-FT5XBCZC.js} +2 -2
  7. package/dist/cli/{chunk-WJEV6WIF.js → chunk-PURYA5WA.js} +2 -2
  8. package/dist/cli/{chunk-LYUNC7YA.js → chunk-UGH275RL.js} +2 -2
  9. package/dist/cli/createAsyncComparison-VXTOVLKN.js +10 -0
  10. package/dist/cli/{createAsyncReport-KZXYSJIB.js → createAsyncReport-3NIRYOEG.js} +4 -4
  11. package/dist/cli/main.js +10 -10
  12. package/dist/cli/package-4Y7MCBOA.js +7 -0
  13. package/dist/cli/{prepareSnapRequests-VH2P6JTO.js → prepareSnapRequests-MHPA62SN.js} +4 -4
  14. package/dist/cli/{startJob-NYURR3W4.js → startJob-OYUB63PQ.js} +4 -4
  15. package/dist/cli/{wrapper-4XC6EZJZ.js → wrapper-PB35T36R.js} +5 -5
  16. package/dist/cypress/index.js +4 -4
  17. package/dist/cypress/index.js.map +2 -2
  18. package/dist/cypress/task.js +1 -1
  19. package/dist/cypress/task.js.map +1 -1
  20. package/dist/playwright/index.js +1 -1
  21. package/dist/playwright/index.js.map +1 -1
  22. package/package.json +1 -1
  23. package/dist/cli/createAsyncComparison-OUBLWBXB.js +0 -10
  24. package/dist/cli/package-K7WMWOHI.js +0 -7
  25. /package/dist/cli/{cancelJob-CTUTMG7N.js.map → cancelJob-GOUNFBOJ.js.map} +0 -0
  26. /package/dist/cli/{chunk-AVYSZMPH.js.map → chunk-FT5XBCZC.js.map} +0 -0
  27. /package/dist/cli/{chunk-WJEV6WIF.js.map → chunk-PURYA5WA.js.map} +0 -0
  28. /package/dist/cli/{chunk-LYUNC7YA.js.map → chunk-UGH275RL.js.map} +0 -0
  29. /package/dist/cli/{createAsyncComparison-OUBLWBXB.js.map → createAsyncComparison-VXTOVLKN.js.map} +0 -0
  30. /package/dist/cli/{createAsyncReport-KZXYSJIB.js.map → createAsyncReport-3NIRYOEG.js.map} +0 -0
  31. /package/dist/cli/{package-K7WMWOHI.js.map → package-4Y7MCBOA.js.map} +0 -0
  32. /package/dist/cli/{prepareSnapRequests-VH2P6JTO.js.map → prepareSnapRequests-MHPA62SN.js.map} +0 -0
  33. /package/dist/cli/{startJob-NYURR3W4.js.map → startJob-OYUB63PQ.js.map} +0 -0
  34. /package/dist/cli/{wrapper-4XC6EZJZ.js.map → wrapper-PB35T36R.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  (() => {
2
- // node_modules/.pnpm/srcset@5.0.3/node_modules/srcset/index.js
2
+ // node_modules/.pnpm/srcset@5.0.2/node_modules/srcset/index.js
3
3
  var imageCandidateRegex = /\s*([^,]\S*[^,](?:\s+[^,]+)?)\s*(?:,|$)/;
4
4
  var duplicateDescriptorCheck = (allDescriptors, value, postfix) => {
5
5
  allDescriptors[postfix] = allDescriptors[postfix] || {};
@@ -112,9 +112,9 @@
112
112
  var findCSSAssetUrls_default = findCSSAssetUrls;
113
113
 
114
114
  // src/browser/applyConstructedStylesPatch.ts
115
- var recordedCSSSymbol = /* @__PURE__ */ Symbol("recordedCssRules");
116
- var hasBrokenIndexesSymbol = /* @__PURE__ */ Symbol("hasBrokenIndexes");
117
- var isInstalledSymbol = /* @__PURE__ */ Symbol("isInstalled");
115
+ var recordedCSSSymbol = Symbol("recordedCssRules");
116
+ var hasBrokenIndexesSymbol = Symbol("hasBrokenIndexes");
117
+ var isInstalledSymbol = Symbol("isInstalled");
118
118
  function ensureRecord(sheet) {
119
119
  if (!sheet[recordedCSSSymbol]) {
120
120
  sheet[recordedCSSSymbol] = [];
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/srcset@5.0.3/node_modules/srcset/index.js", "../../src/isomorphic/findCSSAssetUrls.ts", "../../src/browser/applyConstructedStylesPatch.ts", "../../src/browser/assertElement.ts", "../../src/browser/md5.ts", "../../src/browser/takeDOMSnapshot.ts", "../../src/browser/main.ts"],
4
- "sourcesContent": ["/**\nThis regex represents a loose rule of an \u201Cimage candidate string\u201D.\n\n@see https://html.spec.whatwg.org/multipage/images.html#srcset-attribute\n\nAn \u201Cimage candidate string\u201D roughly consists of the following:\n1. Zero or more whitespace characters.\n2. A non-empty URL that does not start or end with `,`.\n3. Zero or more whitespace characters.\n4. An optional \u201Cdescriptor\u201D that starts with a whitespace character.\n5. Zero or more whitespace characters.\n6. Each image candidate string is separated by a `,`.\n\nWe intentionally implement a loose rule here so that we can perform more aggressive error handling and reporting in the below code.\n*/\nconst imageCandidateRegex = /\\s*([^,]\\S*[^,](?:\\s+[^,]+)?)\\s*(?:,|$)/;\n\nconst duplicateDescriptorCheck = (allDescriptors, value, postfix) => {\n\tallDescriptors[postfix] = allDescriptors[postfix] || {};\n\tif (allDescriptors[postfix][value]) {\n\t\tthrow new Error(`No more than one image candidate is allowed for a given descriptor: ${value}${postfix}`);\n\t}\n\n\tallDescriptors[postfix][value] = true;\n};\n\nconst fallbackDescriptorDuplicateCheck = allDescriptors => {\n\tif (allDescriptors.fallback) {\n\t\tthrow new Error('Only one fallback image candidate is allowed');\n\t}\n\n\t// TODO: Use `?`.\n\tif (allDescriptors.x && allDescriptors.x['1']) {\n\t\tthrow new Error('A fallback image is equivalent to a 1x descriptor, providing both is invalid.');\n\t}\n\n\tallDescriptors.fallback = true;\n};\n\nconst descriptorCountCheck = (allDescriptors, currentDescriptors) => {\n\tif (currentDescriptors.length === 0) {\n\t\tfallbackDescriptorDuplicateCheck(allDescriptors);\n\t} else if (currentDescriptors.length > 1) {\n\t\tthrow new Error(`Image candidate may have no more than one descriptor, found ${currentDescriptors.length}: ${currentDescriptors.join(' ')}`);\n\t}\n};\n\nconst validDescriptorCheck = (value, postfix, descriptor) => {\n\tif (Number.isNaN(value)) {\n\t\tthrow new TypeError(`${descriptor || value} is not a valid number`);\n\t}\n\n\tswitch (postfix) {\n\t\tcase 'w': {\n\t\t\t// Check that the descriptor (minus the 'w') consists only of ASCII digits\n\t\t\tconst widthString = descriptor.slice(0, -1);\n\t\t\tif (!/^\\d+$/.test(widthString)) {\n\t\t\t\tthrow new TypeError(`Width descriptor must be a valid non-negative integer: ${descriptor}`);\n\t\t\t}\n\n\t\t\tif (value <= 0) {\n\t\t\t\tthrow new Error('Width descriptor must be greater than zero');\n\t\t\t} else if (!Number.isInteger(value)) {\n\t\t\t\tthrow new TypeError('Width descriptor must be an integer');\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'x': {\n\t\t\t// Check that the descriptor (minus the 'x') is a valid floating-point number per HTML spec\n\t\t\tconst densityString = descriptor.slice(0, -1);\n\n\t\t\t// HTML spec: valid floating-point number cannot be Infinity or NaN\n\t\t\tif (!Number.isFinite(value)) {\n\t\t\t\tthrow new TypeError(`Density descriptor must be a valid floating-point number: ${descriptor}`);\n\t\t\t}\n\n\t\t\t// Validate the string format follows HTML floating-point number rules\n\t\t\t// Must be: optional sign, then either (digits + optional decimal + digits) or (decimal + digits), then optional exponent\n\t\t\tif (!/^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/.test(densityString)) {\n\t\t\t\tthrow new TypeError(`Density descriptor must be a valid floating-point number: ${descriptor}`);\n\t\t\t}\n\n\t\t\tif (value <= 0) {\n\t\t\t\tthrow new Error('Pixel density descriptor must be greater than zero');\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'h': {\n\t\t\tthrow new Error('Height descriptor is no longer allowed');\n\t\t}\n\n\t\tdefault: {\n\t\t\tthrow new Error(`Invalid srcset descriptor: ${descriptor}`);\n\t\t}\n\t}\n};\n\nexport function parseSrcset(string, {strict = false} = {}) {\n\tconst allDescriptors = strict ? {} : undefined;\n\n\treturn string\n\t\t.replace(/\\r?\\n/, '')\n\t\t.replace(/,\\s+/, ', ')\n\t\t.split(imageCandidateRegex)\n\t\t.filter((part, index) => index % 2 === 1)\n\t\t.map(part => {\n\t\t\tconst [url, ...descriptors] = part.trim().split(/\\s+/);\n\n\t\t\tconst result = {url};\n\n\t\t\tif (strict) {\n\t\t\t\tdescriptorCountCheck(allDescriptors, descriptors);\n\t\t\t}\n\n\t\t\tfor (const descriptor of descriptors) {\n\t\t\t\tconst postfix = descriptor[descriptor.length - 1];\n\t\t\t\tconst value = Number.parseFloat(descriptor.slice(0, -1));\n\n\t\t\t\tif (strict) {\n\t\t\t\t\tvalidDescriptorCheck(value, postfix, descriptor);\n\t\t\t\t\tduplicateDescriptorCheck(allDescriptors, value, postfix);\n\t\t\t\t}\n\n\t\t\t\tswitch (postfix) {\n\t\t\t\t\tcase 'w': {\n\t\t\t\t\t\tresult.width = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'h': {\n\t\t\t\t\t\tresult.height = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'x': {\n\t\t\t\t\t\tresult.density = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// No default\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t});\n}\n\nconst knownDescriptors = new Set(['width', 'height', 'density']);\n\nexport function stringifySrcset(array, {strict = false} = {}) {\n\tconst allDescriptors = strict ? {} : undefined;\n\n\treturn array.map(element => {\n\t\tif (!element.url) {\n\t\t\tif (strict) {\n\t\t\t\tthrow new Error('URL is required');\n\t\t\t}\n\n\t\t\treturn '';\n\t\t}\n\n\t\tconst descriptorKeys = Object.keys(element).filter(key => knownDescriptors.has(key));\n\n\t\tif (strict) {\n\t\t\tdescriptorCountCheck(allDescriptors, descriptorKeys);\n\t\t}\n\n\t\tconst result = [element.url];\n\n\t\tfor (const descriptorKey of descriptorKeys) {\n\t\t\tconst value = element[descriptorKey];\n\t\t\tlet postfix;\n\t\t\tswitch (descriptorKey) {\n\t\t\t\tcase 'width': {\n\t\t\t\t\tpostfix = 'w';\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'height': {\n\t\t\t\t\tpostfix = 'h';\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'density': {\n\t\t\t\t\tpostfix = 'x';\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t// No default\n\t\t\t}\n\n\t\t\tconst descriptor = `${value}${postfix}`;\n\n\t\t\tif (strict) {\n\t\t\t\tvalidDescriptorCheck(value, postfix, descriptor);\n\t\t\t\tduplicateDescriptorCheck(allDescriptors, value, postfix);\n\t\t\t}\n\n\t\t\tresult.push(descriptor);\n\t\t}\n\n\t\treturn result.join(' ');\n\t}).join(', ');\n}\n", "const URL_PATTERN: RegExp = /(url\\(['\"]?)(.*?)(['\"]?\\))/g;\n\nfunction findCSSAssetUrls(string: string): Array<string> {\n const result: Array<string> = [];\n let match: RegExpExecArray | null;\n while ((match = URL_PATTERN.exec(string))) {\n const url = match[2];\n if (url && !url.startsWith('data:')) {\n result.push(url);\n }\n }\n return result;\n}\n\nexport { URL_PATTERN };\nexport default findCSSAssetUrls;\n", "const recordedCSSSymbol: unique symbol = Symbol('recordedCssRules');\nconst hasBrokenIndexesSymbol: unique symbol = Symbol('hasBrokenIndexes');\nconst isInstalledSymbol: unique symbol = Symbol('isInstalled');\n\n// Extend CSSStyleSheet interface to include our custom properties\ninterface ExtendedCSSStyleSheet extends CSSStyleSheet {\n [recordedCSSSymbol]?: Array<string>;\n [hasBrokenIndexesSymbol]?: boolean;\n}\n\n// Extend CSSStyleSheet constructor to include our custom properties\ninterface ExtendedCSSStyleSheetConstructor {\n new (options?: CSSStyleSheetInit): CSSStyleSheet;\n [isInstalledSymbol]?: boolean;\n prototype: CSSStyleSheet;\n}\n\n// Extend Window interface to include CSSStyleSheet\ninterface ExtendedWindow extends Window {\n CSSStyleSheet: ExtendedCSSStyleSheetConstructor;\n}\n\nexport function isExtendedWindow(w: Window): w is ExtendedWindow {\n return (\n 'CSSStyleSheet' in w &&\n typeof (w as unknown as { CSSStyleSheet: unknown }).CSSStyleSheet === 'function'\n );\n}\n\n// Helper to ensure our custom recorded array exists on the sheet.\nfunction ensureRecord(sheet: ExtendedCSSStyleSheet): void {\n if (!sheet[recordedCSSSymbol]) {\n sheet[recordedCSSSymbol] = [];\n }\n}\n\nfunction displayError(message: string): void {\n console.error(message);\n\n const el = document.createElement('div');\n el.setAttribute(\n 'style',\n `\n position: fixed;\n display: flex;\n align-items: center;\n justify-content: center;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n padding: 30px;\n background: red;\n font-weight: bold;\n color: white;\n z-index: 1000;\n font-family: monospace;\n `,\n );\n const inner = document.createElement('div');\n inner.textContent = message;\n el.append(inner);\n document.addEventListener('DOMContentLoaded', () => {\n document.body.append(el);\n });\n}\n\nexport default function applyConstructedStylesPatch(\n win: ExtendedWindow = globalThis.window as ExtendedWindow,\n): void {\n if (win.CSSStyleSheet === undefined) {\n console.error('CSSStyleSheet is not supported in this browser');\n return;\n }\n\n const CSSStyleSheetConstructor =\n win.CSSStyleSheet as ExtendedCSSStyleSheetConstructor;\n if (CSSStyleSheetConstructor[isInstalledSymbol]) {\n return;\n }\n CSSStyleSheetConstructor[isInstalledSymbol] = true;\n\n // Patch insertRule to record each rule string.\n const originalInsertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = function (\n rule: string,\n index: number = 0,\n ): number {\n const extendedThis = this as ExtendedCSSStyleSheet;\n ensureRecord(extendedThis);\n\n if (extendedThis[hasBrokenIndexesSymbol] && index) {\n displayError(\n 'CSSStyleSheet.prototype.insertRule with a non-zero index does not work with Happo after first having called replace/replaceSync. Reach out to support@happo.io if you need help with this.',\n );\n return originalInsertRule.call(this, rule, index);\n }\n\n // If index is not provided or invalid, default to appending.\n if (\n index === undefined ||\n index < 0 ||\n index > (extendedThis[recordedCSSSymbol]?.length || 0)\n ) {\n extendedThis[recordedCSSSymbol]?.push(rule);\n } else {\n extendedThis[recordedCSSSymbol]?.splice(index, 0, rule);\n }\n return originalInsertRule.call(this, rule, index);\n };\n\n const originalAddRule = win.CSSStyleSheet.prototype.addRule;\n win.CSSStyleSheet.prototype.addRule = function (\n selector: string,\n styleBlock: string,\n index?: number,\n ): number {\n const extendedThis = this as ExtendedCSSStyleSheet;\n ensureRecord(extendedThis);\n if (extendedThis[hasBrokenIndexesSymbol] && index) {\n displayError(\n 'CSSStyleSheet.prototype.addRule with a non-zero index does not work with Happo after first having called replace/replaceSync. Reach out to support@happo.io if you need help with this.',\n );\n return originalAddRule.call(this, selector, styleBlock, index);\n }\n\n const rule = `${selector} { ${styleBlock} }`;\n if (\n index === undefined ||\n index < 0 ||\n index > (extendedThis[recordedCSSSymbol]?.length || 0)\n ) {\n extendedThis[recordedCSSSymbol]?.push(rule);\n } else {\n extendedThis[recordedCSSSymbol]?.splice(index, 0, rule);\n }\n return originalAddRule.call(this, selector, styleBlock, index);\n };\n\n // Patch deleteRule so that removed rules are taken out of our record.\n const originalDeleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = function (index: number): void {\n const extendedThis = this as ExtendedCSSStyleSheet;\n ensureRecord(extendedThis);\n if (extendedThis[hasBrokenIndexesSymbol]) {\n displayError(\n 'CSSStyleSheet.prototype.deleteRule does not work with Happo after first having called replace/replaceSync. Reach out to support@happo.io if you need help with this.',\n );\n } else if (\n index >= 0 &&\n index < (extendedThis[recordedCSSSymbol]?.length || 0)\n ) {\n extendedThis[recordedCSSSymbol]?.splice(index, 1);\n }\n return originalDeleteRule.call(this, index);\n };\n\n const originalRemoveRule = win.CSSStyleSheet.prototype.removeRule;\n win.CSSStyleSheet.prototype.removeRule = function (index?: number): void {\n const extendedThis = this as ExtendedCSSStyleSheet;\n ensureRecord(extendedThis);\n if (extendedThis[hasBrokenIndexesSymbol]) {\n displayError(\n 'CSSStyleSheet.prototype.removeRule does not work with Happo after first having called replace/replaceSync. Reach out to support@happo.io if you need help with this.',\n );\n } else if (\n index !== undefined &&\n index >= 0 &&\n index < (extendedThis[recordedCSSSymbol]?.length || 0)\n ) {\n extendedThis[recordedCSSSymbol]?.splice(index, 1);\n }\n return originalRemoveRule.call(this, index);\n };\n\n // Patch replaceSync to capture the new CSS text.\n const originalReplaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = function (text: string): void {\n const extendedThis = this as ExtendedCSSStyleSheet;\n extendedThis[recordedCSSSymbol] = text.split('\\n').map((rule) => rule.trim());\n extendedThis[hasBrokenIndexesSymbol] = true;\n return originalReplaceSync.call(this, text);\n };\n\n // Patch replace (the asynchronous version) similarly.\n const originalReplace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = function (\n text: string,\n ): Promise<CSSStyleSheet> {\n const sheet = this as ExtendedCSSStyleSheet;\n return originalReplace.call(sheet, text).then(function (result: CSSStyleSheet) {\n sheet[recordedCSSSymbol] = text.split('\\n').map((rule) => rule.trim());\n sheet[hasBrokenIndexesSymbol] = true;\n return result;\n });\n };\n}\n\nexport { recordedCSSSymbol };\n", "function isIterableCollection(\n element: NonNullable<unknown>,\n): element is Iterable<unknown> {\n if (typeof element !== 'object') {\n return false;\n }\n\n if (!('length' in element)) {\n return false;\n }\n\n if (typeof element.length !== 'number') {\n return false;\n }\n\n if (!('item' in element)) {\n return false;\n }\n\n if (typeof element.item !== 'function') {\n return false;\n }\n\n if (!(Symbol.iterator in element)) {\n return false;\n }\n\n if (typeof element[Symbol.iterator] !== 'function') {\n return false;\n }\n\n return true;\n}\n\n/**\n * Throws if the element is not a valid Element instance, an array of elements,\n * or a NodeList of elements.\n */\nexport default function assertElement(\n element: unknown,\n): asserts element is Element | Array<Element> | NodeListOf<Element> {\n if (element == null) {\n throw new Error('element cannot be null or undefined');\n }\n\n if (typeof element !== 'object') {\n throw new TypeError('element must be an object');\n }\n\n if (Array.isArray(element) || isIterableCollection(element)) {\n for (const el of element) {\n assertElement(el);\n }\n\n return;\n }\n\n if (!('nodeType' in element)) {\n throw new TypeError('element must have a nodeType property');\n }\n\n if (element.nodeType !== 1 /* ELEMENT_NODE */) {\n throw new Error('element must have a nodeType of ELEMENT_NODE');\n }\n}\n", "/* eslint-disable unicorn/prefer-math-trunc */\n\n/*\n\nTypeScript MD5\n==============\n\nBased on work by\n* Joseph Myers: http://www.myersdaily.org/joseph/javascript/md5-text.html\n* Andr\u00E9 Cruz: https://github.com/satazor/SparkMD5\n* Raymond Hill: https://github.com/gorhill/yamd5.js\n\nEffectively a TypeScrypt re-write of Raymond Hill JS Library\n\nThe MIT License (MIT)\n\nCopyright (C) 2014 Raymond Hill\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\n\n DO WHAT YOU WANT TO PUBLIC LICENSE\n Version 2, December 2004\n\n Copyright (C) 2015 Andr\u00E9 Cruz <amdfcruz@gmail.com>\n\n Everyone is permitted to copy and distribute verbatim or modified\n copies of this license document, and changing it is allowed as long\n as the name is changed.\n\n DO WHAT YOU WANT TO PUBLIC LICENSE\n TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n 0. You just DO WHAT YOU WANT TO.\n\n\n*/\n\ninterface HasherState {\n buffer: string;\n buflen: number;\n length: number;\n state: Array<number>;\n}\n\nconst EMPTY_STATE = new Int32Array(4);\n\nexport class MD5 {\n /**\n * Hash a UTF-8 string on the spot\n * @param str String to hash\n * @param raw Whether to return the value as an `Int32Array`\n */\n public static hashStr(str: string, raw?: false): string;\n public static hashStr(str: string, raw: true): Int32Array;\n public static hashStr(str: string, raw: boolean = false) {\n return this.onePassHasher.start().appendStr(str).end(raw);\n }\n\n /**\n * Hash a ASCII string on the spot\n * @param str String to hash\n * @param raw Whether to return the value as an `Int32Array`\n */\n public static hashAsciiStr(str: string, raw?: false): string;\n public static hashAsciiStr(str: string, raw: true): Int32Array;\n public static hashAsciiStr(str: string, raw: boolean = false) {\n return this.onePassHasher.start().appendAsciiStr(str).end(raw);\n }\n // Private Static Variables\n private static stateIdentity = new Int32Array([\n 1_732_584_193, -271_733_879, -1_732_584_194, 271_733_878,\n ]);\n private static buffer32Identity = new Int32Array([\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ]);\n private static hexChars = '0123456789abcdef';\n private static hexOut: Array<string> = [];\n\n // Permanent instance is to use for one-call hashing\n private static onePassHasher = new MD5();\n\n private static _hex(x: Int32Array): string {\n const hc = MD5.hexChars;\n const ho = MD5.hexOut;\n let n;\n let offset;\n let j;\n let i;\n\n for (i = 0; i < 4; i += 1) {\n offset = i * 8;\n n = x[i]!;\n for (j = 0; j < 8; j += 2) {\n ho[offset + 1 + j] = hc.charAt(n & 0x0f);\n n >>>= 4;\n ho[offset + 0 + j] = hc.charAt(n & 0x0f);\n n >>>= 4;\n }\n }\n return ho.join('');\n }\n\n private static _md5cycle(\n x: Int32Array | Uint32Array,\n k: Int32Array | Uint32Array,\n ) {\n let a = x[0]!;\n let b = x[1]!;\n let c = x[2]!;\n let d = x[3]!;\n // ff()\n a += (((b & c) | (~b & d)) + k[0]! - 680_876_936) | 0;\n a = (((a << 7) | (a >>> 25)) + b) | 0;\n d += (((a & b) | (~a & c)) + k[1]! - 389_564_586) | 0;\n d = (((d << 12) | (d >>> 20)) + a) | 0;\n c += (((d & a) | (~d & b)) + k[2]! + 606_105_819) | 0;\n c = (((c << 17) | (c >>> 15)) + d) | 0;\n b += (((c & d) | (~c & a)) + k[3]! - 1_044_525_330) | 0;\n b = (((b << 22) | (b >>> 10)) + c) | 0;\n a += (((b & c) | (~b & d)) + k[4]! - 176_418_897) | 0;\n a = (((a << 7) | (a >>> 25)) + b) | 0;\n d += (((a & b) | (~a & c)) + k[5]! + 1_200_080_426) | 0;\n d = (((d << 12) | (d >>> 20)) + a) | 0;\n c += (((d & a) | (~d & b)) + k[6]! - 1_473_231_341) | 0;\n c = (((c << 17) | (c >>> 15)) + d) | 0;\n b += (((c & d) | (~c & a)) + k[7]! - 45_705_983) | 0;\n b = (((b << 22) | (b >>> 10)) + c) | 0;\n a += (((b & c) | (~b & d)) + k[8]! + 1_770_035_416) | 0;\n a = (((a << 7) | (a >>> 25)) + b) | 0;\n d += (((a & b) | (~a & c)) + k[9]! - 1_958_414_417) | 0;\n d = (((d << 12) | (d >>> 20)) + a) | 0;\n c += (((d & a) | (~d & b)) + k[10]! - 42_063) | 0;\n c = (((c << 17) | (c >>> 15)) + d) | 0;\n b += (((c & d) | (~c & a)) + k[11]! - 1_990_404_162) | 0;\n b = (((b << 22) | (b >>> 10)) + c) | 0;\n a += (((b & c) | (~b & d)) + k[12]! + 1_804_603_682) | 0;\n a = (((a << 7) | (a >>> 25)) + b) | 0;\n d += (((a & b) | (~a & c)) + k[13]! - 40_341_101) | 0;\n d = (((d << 12) | (d >>> 20)) + a) | 0;\n c += (((d & a) | (~d & b)) + k[14]! - 1_502_002_290) | 0;\n c = (((c << 17) | (c >>> 15)) + d) | 0;\n b += (((c & d) | (~c & a)) + k[15]! + 1_236_535_329) | 0;\n b = (((b << 22) | (b >>> 10)) + c) | 0;\n // gg()\n a += (((b & d) | (c & ~d)) + k[1]! - 165_796_510) | 0;\n a = (((a << 5) | (a >>> 27)) + b) | 0;\n d += (((a & c) | (b & ~c)) + k[6]! - 1_069_501_632) | 0;\n d = (((d << 9) | (d >>> 23)) + a) | 0;\n c += (((d & b) | (a & ~b)) + k[11]! + 643_717_713) | 0;\n c = (((c << 14) | (c >>> 18)) + d) | 0;\n b += (((c & a) | (d & ~a)) + k[0]! - 373_897_302) | 0;\n b = (((b << 20) | (b >>> 12)) + c) | 0;\n a += (((b & d) | (c & ~d)) + k[5]! - 701_558_691) | 0;\n a = (((a << 5) | (a >>> 27)) + b) | 0;\n d += (((a & c) | (b & ~c)) + k[10]! + 38_016_083) | 0;\n d = (((d << 9) | (d >>> 23)) + a) | 0;\n c += (((d & b) | (a & ~b)) + k[15]! - 660_478_335) | 0;\n c = (((c << 14) | (c >>> 18)) + d) | 0;\n b += (((c & a) | (d & ~a)) + k[4]! - 405_537_848) | 0;\n b = (((b << 20) | (b >>> 12)) + c) | 0;\n a += (((b & d) | (c & ~d)) + k[9]! + 568_446_438) | 0;\n a = (((a << 5) | (a >>> 27)) + b) | 0;\n d += (((a & c) | (b & ~c)) + k[14]! - 1_019_803_690) | 0;\n d = (((d << 9) | (d >>> 23)) + a) | 0;\n c += (((d & b) | (a & ~b)) + k[3]! - 187_363_961) | 0;\n c = (((c << 14) | (c >>> 18)) + d) | 0;\n b += (((c & a) | (d & ~a)) + k[8]! + 1_163_531_501) | 0;\n b = (((b << 20) | (b >>> 12)) + c) | 0;\n a += (((b & d) | (c & ~d)) + k[13]! - 1_444_681_467) | 0;\n a = (((a << 5) | (a >>> 27)) + b) | 0;\n d += (((a & c) | (b & ~c)) + k[2]! - 51_403_784) | 0;\n d = (((d << 9) | (d >>> 23)) + a) | 0;\n c += (((d & b) | (a & ~b)) + k[7]! + 1_735_328_473) | 0;\n c = (((c << 14) | (c >>> 18)) + d) | 0;\n b += (((c & a) | (d & ~a)) + k[12]! - 1_926_607_734) | 0;\n b = (((b << 20) | (b >>> 12)) + c) | 0;\n // hh()\n a += ((b ^ c ^ d) + k[5]! - 378_558) | 0;\n a = (((a << 4) | (a >>> 28)) + b) | 0;\n d += ((a ^ b ^ c) + k[8]! - 2_022_574_463) | 0;\n d = (((d << 11) | (d >>> 21)) + a) | 0;\n c += ((d ^ a ^ b) + k[11]! + 1_839_030_562) | 0;\n c = (((c << 16) | (c >>> 16)) + d) | 0;\n b += ((c ^ d ^ a) + k[14]! - 35_309_556) | 0;\n b = (((b << 23) | (b >>> 9)) + c) | 0;\n a += ((b ^ c ^ d) + k[1]! - 1_530_992_060) | 0;\n a = (((a << 4) | (a >>> 28)) + b) | 0;\n d += ((a ^ b ^ c) + k[4]! + 1_272_893_353) | 0;\n d = (((d << 11) | (d >>> 21)) + a) | 0;\n c += ((d ^ a ^ b) + k[7]! - 155_497_632) | 0;\n c = (((c << 16) | (c >>> 16)) + d) | 0;\n b += ((c ^ d ^ a) + k[10]! - 1_094_730_640) | 0;\n b = (((b << 23) | (b >>> 9)) + c) | 0;\n a += ((b ^ c ^ d) + k[13]! + 681_279_174) | 0;\n a = (((a << 4) | (a >>> 28)) + b) | 0;\n d += ((a ^ b ^ c) + k[0]! - 358_537_222) | 0;\n d = (((d << 11) | (d >>> 21)) + a) | 0;\n c += ((d ^ a ^ b) + k[3]! - 722_521_979) | 0;\n c = (((c << 16) | (c >>> 16)) + d) | 0;\n b += ((c ^ d ^ a) + k[6]! + 76_029_189) | 0;\n b = (((b << 23) | (b >>> 9)) + c) | 0;\n a += ((b ^ c ^ d) + k[9]! - 640_364_487) | 0;\n a = (((a << 4) | (a >>> 28)) + b) | 0;\n d += ((a ^ b ^ c) + k[12]! - 421_815_835) | 0;\n d = (((d << 11) | (d >>> 21)) + a) | 0;\n c += ((d ^ a ^ b) + k[15]! + 530_742_520) | 0;\n c = (((c << 16) | (c >>> 16)) + d) | 0;\n b += ((c ^ d ^ a) + k[2]! - 995_338_651) | 0;\n b = (((b << 23) | (b >>> 9)) + c) | 0;\n // ii()\n a += ((c ^ (b | ~d)) + k[0]! - 198_630_844) | 0;\n a = (((a << 6) | (a >>> 26)) + b) | 0;\n d += ((b ^ (a | ~c)) + k[7]! + 1_126_891_415) | 0;\n d = (((d << 10) | (d >>> 22)) + a) | 0;\n c += ((a ^ (d | ~b)) + k[14]! - 1_416_354_905) | 0;\n c = (((c << 15) | (c >>> 17)) + d) | 0;\n b += ((d ^ (c | ~a)) + k[5]! - 57_434_055) | 0;\n b = (((b << 21) | (b >>> 11)) + c) | 0;\n a += ((c ^ (b | ~d)) + k[12]! + 1_700_485_571) | 0;\n a = (((a << 6) | (a >>> 26)) + b) | 0;\n d += ((b ^ (a | ~c)) + k[3]! - 1_894_986_606) | 0;\n d = (((d << 10) | (d >>> 22)) + a) | 0;\n c += ((a ^ (d | ~b)) + k[10]! - 1_051_523) | 0;\n c = (((c << 15) | (c >>> 17)) + d) | 0;\n b += ((d ^ (c | ~a)) + k[1]! - 2_054_922_799) | 0;\n b = (((b << 21) | (b >>> 11)) + c) | 0;\n a += ((c ^ (b | ~d)) + k[8]! + 1_873_313_359) | 0;\n a = (((a << 6) | (a >>> 26)) + b) | 0;\n d += ((b ^ (a | ~c)) + k[15]! - 30_611_744) | 0;\n d = (((d << 10) | (d >>> 22)) + a) | 0;\n c += ((a ^ (d | ~b)) + k[6]! - 1_560_198_380) | 0;\n c = (((c << 15) | (c >>> 17)) + d) | 0;\n b += ((d ^ (c | ~a)) + k[13]! + 1_309_151_649) | 0;\n b = (((b << 21) | (b >>> 11)) + c) | 0;\n a += ((c ^ (b | ~d)) + k[4]! - 145_523_070) | 0;\n a = (((a << 6) | (a >>> 26)) + b) | 0;\n d += ((b ^ (a | ~c)) + k[11]! - 1_120_210_379) | 0;\n d = (((d << 10) | (d >>> 22)) + a) | 0;\n c += ((a ^ (d | ~b)) + k[2]! + 718_787_259) | 0;\n c = (((c << 15) | (c >>> 17)) + d) | 0;\n b += ((d ^ (c | ~a)) + k[9]! - 343_485_551) | 0;\n b = (((b << 21) | (b >>> 11)) + c) | 0;\n\n x[0] = (a + x[0]!) | 0;\n x[1] = (b + x[1]!) | 0;\n x[2] = (c + x[2]!) | 0;\n x[3] = (d + x[3]!) | 0;\n }\n\n private _dataLength = 0;\n private _bufferLength = 0;\n\n private _state: Int32Array = new Int32Array(4);\n private _buffer: ArrayBuffer = new ArrayBuffer(68);\n private _buffer8: Uint8Array;\n private _buffer32: Uint32Array;\n\n constructor() {\n this._buffer8 = new Uint8Array(this._buffer, 0, 68);\n this._buffer32 = new Uint32Array(this._buffer, 0, 17);\n this.start();\n }\n\n /**\n * Initialise buffer to be hashed\n */\n public start(): this {\n this._dataLength = 0;\n this._bufferLength = 0;\n this._state.set(MD5.stateIdentity);\n return this;\n }\n\n // Char to code point to to array conversion:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n // #Example.3A_Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_unknown\n\n /**\n * Append a UTF-8 string to the hash buffer\n * @param str String to append\n */\n public appendStr(str: string): this {\n const buf8 = this._buffer8;\n const buf32 = this._buffer32;\n let bufLen = this._bufferLength;\n let code;\n let i;\n\n for (i = 0; i < str.length; i += 1) {\n code = str.codePointAt(i) ?? 0;\n if (code < 128) {\n buf8[bufLen++] = code;\n } else if (code < 0x8_00) {\n buf8[bufLen++] = (code >>> 6) + 0xc0;\n buf8[bufLen++] = (code & 0x3f) | 0x80;\n } else if (code < 0xd8_00 || code > 0xdb_ff) {\n buf8[bufLen++] = (code >>> 12) + 0xe0;\n buf8[bufLen++] = ((code >>> 6) & 0x3f) | 0x80;\n buf8[bufLen++] = (code & 0x3f) | 0x80;\n } else {\n code =\n (code - 0xd8_00) * 0x4_00 +\n (str.codePointAt(++i) ?? 0 - 0xdc_00) +\n 0x1_00_00;\n if (code > 0x10_ff_ff) {\n throw new Error('Unicode standard supports code points up to U+10FFFF');\n }\n buf8[bufLen++] = (code >>> 18) + 0xf0;\n buf8[bufLen++] = ((code >>> 12) & 0x3f) | 0x80;\n buf8[bufLen++] = ((code >>> 6) & 0x3f) | 0x80;\n buf8[bufLen++] = (code & 0x3f) | 0x80;\n }\n if (bufLen >= 64) {\n this._dataLength += 64;\n MD5._md5cycle(this._state, buf32);\n bufLen -= 64;\n buf32[0] = buf32[16]!;\n }\n }\n this._bufferLength = bufLen;\n return this;\n }\n\n /**\n * Append an ASCII string to the hash buffer\n * @param str String to append\n */\n public appendAsciiStr(str: string): this {\n const buf8 = this._buffer8;\n const buf32 = this._buffer32;\n let bufLen = this._bufferLength;\n let i;\n let j = 0;\n\n for (;;) {\n i = Math.min(str.length - j, 64 - bufLen);\n while (i--) {\n buf8[bufLen++] = str.codePointAt(j++) ?? 0;\n }\n if (bufLen < 64) {\n break;\n }\n this._dataLength += 64;\n MD5._md5cycle(this._state, buf32);\n bufLen = 0;\n }\n this._bufferLength = bufLen;\n return this;\n }\n\n /**\n * Append a byte array to the hash buffer\n * @param input array to append\n */\n public appendByteArray(input: Uint8Array): this {\n const buf8 = this._buffer8;\n const buf32 = this._buffer32;\n let bufLen = this._bufferLength;\n let i;\n let j = 0;\n\n for (;;) {\n i = Math.min(input.length - j, 64 - bufLen);\n while (i--) {\n buf8[bufLen++] = input[j++]!;\n }\n if (bufLen < 64) {\n break;\n }\n this._dataLength += 64;\n MD5._md5cycle(this._state, buf32);\n bufLen = 0;\n }\n this._bufferLength = bufLen;\n return this;\n }\n\n /**\n * Get the state of the hash buffer\n */\n public getState(): HasherState {\n const s = this._state;\n\n return {\n // eslint-disable-next-line unicorn/prefer-code-point\n buffer: String.fromCharCode.apply(null, Array.from(this._buffer8)),\n buflen: this._bufferLength,\n length: this._dataLength,\n state: [s[0]!, s[1]!, s[2]!, s[3]!],\n };\n }\n\n /**\n * Override the current state of the hash buffer\n * @param state New hash buffer state\n */\n public setState(state: HasherState): void {\n const buf = state.buffer;\n const x = state.state;\n const s = this._state;\n let i;\n\n this._dataLength = state.length;\n this._bufferLength = state.buflen;\n s[0] = x[0]!;\n s[1] = x[1]!;\n s[2] = x[2]!;\n s[3] = x[3]!;\n\n for (i = 0; i < buf.length; i += 1) {\n this._buffer8[i] = buf.codePointAt(i) ?? 0;\n }\n }\n\n /**\n * Hash the current state of the hash buffer and return the result\n * @param raw Whether to return the value as an `Int32Array`\n */\n public end(raw: boolean = false): Int32Array | string {\n const bufLen = this._bufferLength;\n const buf8 = this._buffer8;\n const buf32 = this._buffer32;\n const i = (bufLen >> 2) + 1;\n\n this._dataLength += bufLen;\n const dataBitsLen = this._dataLength * 8;\n\n buf8[bufLen] = 0x80;\n buf8[bufLen + 1] = buf8[bufLen + 2] = buf8[bufLen + 3] = 0;\n buf32.set(MD5.buffer32Identity.subarray(i), i);\n\n if (bufLen > 55) {\n MD5._md5cycle(this._state, buf32);\n buf32.set(MD5.buffer32Identity);\n }\n\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n if (dataBitsLen <= 0xff_ff_ff_ff) {\n buf32[14] = dataBitsLen;\n } else {\n const matches = dataBitsLen.toString(16).match(/(.*?)(.{0,8})$/);\n if (matches === null) return raw ? EMPTY_STATE : '';\n\n const lo = Number.parseInt(matches[2]!, 16);\n const hi = Number.parseInt(matches[1]!, 16) || 0;\n\n buf32[14] = lo;\n buf32[15] = hi;\n }\n\n MD5._md5cycle(this._state, buf32);\n\n return raw ? this._state : MD5._hex(this._state);\n }\n}\n\nif (MD5.hashStr('hello') !== '5d41402abc4b2a76b9719d911017c592') {\n throw new Error('MD5 self test failed.');\n}\n", "import { parseSrcset } from 'srcset';\n\nimport findCSSAssetUrls from '../isomorphic/findCSSAssetUrls.ts';\nimport type {\n AssetUrl,\n CSSBlock,\n DOMSnapshotResult,\n TakeDOMSnapshotOptions,\n} from '../isomorphic/types.ts';\nimport applyConstructedStylesPatch, {\n recordedCSSSymbol,\n} from './applyConstructedStylesPatch.ts';\nimport assertElement from './assertElement.ts';\nimport { MD5 } from './md5.ts';\n\nexport { applyConstructedStylesPatch };\n\nconst CSS_ELEMENTS_SELECTOR = 'style,link[rel=\"stylesheet\"][href]';\nconst COMMENT_PATTERN = /^\\/\\*.+\\*\\/$/;\n\nif (globalThis.window) {\n applyConstructedStylesPatch(globalThis.window);\n}\n\n// Extend HTMLElement and CSSStyleSheet to include our custom properties\ninterface ExtendedHTMLElement extends HTMLElement {\n [recordedCSSSymbol]?: Array<string>;\n}\n\ninterface ExtendedCSSStyleSheet extends CSSStyleSheet {\n [recordedCSSSymbol]?: Array<string>;\n}\n\nfunction getContentFromStyleSheet(element: HTMLElement | CSSStyleSheet): string {\n let lines: Array<string>;\n\n if ('textContent' in element && element.textContent) {\n // Handle <style> elements with direct textContent\n lines = element.textContent.split('\\n').map((line) => line.trim());\n } else if (\n recordedCSSSymbol in element &&\n (element as ExtendedHTMLElement | ExtendedCSSStyleSheet)[recordedCSSSymbol]\n ) {\n lines = (element as ExtendedHTMLElement | ExtendedCSSStyleSheet)[\n recordedCSSSymbol\n ]!;\n } else if (\n 'sheet' in element &&\n element.sheet &&\n (element.sheet as CSSStyleSheet).cssRules\n ) {\n // Handle <style> or <link> elements that have a sheet property\n const cssRules = (element.sheet as CSSStyleSheet).cssRules as CSSRuleList;\n lines = Array.from(cssRules).map((rule: CSSRule) => rule.cssText);\n } else if ((element as CSSStyleSheet).cssRules) {\n // Handle CSSStyleSheet objects (including adoptedStyleSheets)\n const cssRules = (element as CSSStyleSheet).cssRules as CSSRuleList;\n lines = Array.from(cssRules).map((rule: CSSRule) => rule.cssText);\n } else {\n return '';\n }\n\n return lines.filter((line) => line && !COMMENT_PATTERN.test(line)).join('\\n');\n}\n\nfunction extractCSSBlocks(doc: Document): Array<CSSBlock> {\n const blocks: Array<CSSBlock> = [];\n const styleElements = doc.querySelectorAll(CSS_ELEMENTS_SELECTOR);\n\n for (const element of styleElements) {\n if (element.closest('happo-shadow-content')) {\n // Skip if element is inside a happo-shadow-content element. These need to\n // be scoped to the shadow root and cannot be part of the global styles.\n continue;\n }\n if (element.tagName === 'LINK') {\n // <link href>\n const href = (element as HTMLLinkElement).href || element.getAttribute('href');\n blocks.push({\n key: href || '',\n href: href || undefined,\n baseUrl: element.baseURI,\n });\n } else {\n const content = getContentFromStyleSheet(element as HTMLElement);\n // Create a hash so that we can dedupe equal styles\n const key = MD5.hashStr(content);\n blocks.push({ content, key, baseUrl: element.baseURI });\n }\n }\n\n for (const sheet of doc.adoptedStyleSheets || []) {\n const content = getContentFromStyleSheet(sheet);\n const key = MD5.hashStr(content);\n blocks.push({ key, content, baseUrl: sheet.href || document.baseURI });\n }\n return blocks;\n}\n\nfunction defaultHandleBase64Image({\n base64Url,\n element,\n}: {\n base64Url: string;\n element: HTMLImageElement;\n}): void {\n // Simply make the base64Url the src of the image\n element.src = base64Url;\n}\n\n// Extend HTMLElement to include custom properties\ninterface ExtendedHTMLElementWithBase64 extends HTMLElement {\n _base64Url?: string;\n}\n\nfunction getElementAssetUrls(\n element: Element,\n {\n handleBase64Image = defaultHandleBase64Image,\n }: {\n handleBase64Image?: (params: {\n base64Url: string;\n element: HTMLImageElement;\n }) => void;\n } = {},\n): Array<AssetUrl> {\n const allUrls: Array<AssetUrl> = [];\n const allElements = [element].concat(Array.from(element.querySelectorAll('*')));\n for (const element of allElements) {\n if (element.tagName === 'SCRIPT') {\n // skip script elements\n continue;\n }\n const srcset = element.getAttribute('srcset');\n const src = element.getAttribute('src');\n const imageHref =\n element.tagName.toLowerCase() === 'image' && element.getAttribute('href');\n const linkHref =\n element.tagName.toLowerCase() === 'link' &&\n element.getAttribute('rel') === 'stylesheet' &&\n element.getAttribute('href');\n\n const style = element.getAttribute('style');\n const base64Url = (element as ExtendedHTMLElementWithBase64)._base64Url;\n if (base64Url && element.tagName === 'IMG') {\n handleBase64Image({ base64Url, element: element as HTMLImageElement });\n }\n if (src) {\n allUrls.push({ url: src, baseUrl: element.baseURI });\n }\n if (srcset) {\n allUrls.push(\n ...parseSrcset(srcset).map((p) => ({\n url: p.url,\n baseUrl: element.baseURI,\n })),\n );\n }\n if (style) {\n allUrls.push(\n ...findCSSAssetUrls(style).map((url) => ({\n url,\n baseUrl: element.baseURI,\n })),\n );\n }\n if (imageHref) {\n allUrls.push({ url: imageHref, baseUrl: element.baseURI });\n }\n if (linkHref) {\n allUrls.push({ url: linkHref, baseUrl: element.baseURI });\n }\n }\n return allUrls.filter(({ url }) => !url.startsWith('data:'));\n}\n\nfunction copyStyles(sourceElement: HTMLElement, targetElement: HTMLElement): void {\n const computedStyle = globalThis.getComputedStyle(sourceElement);\n\n for (let i = 0; i < computedStyle.length; i++) {\n const key = computedStyle[i];\n if (!key) continue;\n const value = computedStyle.getPropertyValue(key);\n if (value !== '') {\n targetElement.style.setProperty(key, value);\n }\n }\n}\n\nfunction inlineCanvases(\n element: Element,\n {\n doc,\n responsiveInlinedCanvases = false,\n }: { doc: Document; responsiveInlinedCanvases?: boolean },\n): { element: Element; cleanup: () => void } {\n const canvases: Array<HTMLCanvasElement> = [];\n if (element.tagName === 'CANVAS') {\n canvases.push(element as HTMLCanvasElement);\n }\n canvases.push(...Array.from(element.querySelectorAll('canvas')));\n\n let newElement = element;\n const replacements: Array<{ from: HTMLCanvasElement; to: HTMLImageElement }> = [];\n for (const canvas of canvases) {\n try {\n const canvasImageBase64 = canvas.toDataURL('image/png');\n if (canvasImageBase64 === 'data:,') {\n continue;\n }\n const image = doc.createElement('img');\n\n const url = `/.happo-tmp/_inlined/${MD5.hashStr(canvasImageBase64)}.png`;\n image.src = url;\n (image as ExtendedHTMLElementWithBase64)._base64Url = canvasImageBase64;\n const style = canvas.getAttribute('style');\n if (style) {\n image.setAttribute('style', style);\n }\n const className = canvas.getAttribute('class');\n if (className) {\n image.setAttribute('class', className);\n }\n if (responsiveInlinedCanvases) {\n image.style.width = '100%';\n image.style.height = 'auto';\n } else {\n const width = canvas.getAttribute('width');\n const height = canvas.getAttribute('height');\n if (width) image.setAttribute('width', width);\n if (height) image.setAttribute('height', height);\n copyStyles(canvas, image);\n }\n canvas.replaceWith(image);\n if (canvas === element) {\n // We're inlining the element. Make sure we return the modified element.\n newElement = image;\n }\n replacements.push({ from: canvas, to: image });\n } catch (e) {\n if (e instanceof Error && e.name === 'SecurityError') {\n console.warn('[HAPPO] Failed to convert tainted canvas to PNG image');\n console.warn(e);\n } else {\n throw e;\n }\n }\n }\n\n function cleanup(): void {\n for (const { from, to } of replacements) {\n to.replaceWith(from);\n }\n }\n return { element: newElement, cleanup };\n}\n\nfunction registerScrollPositions(doc: Document): void {\n const elements = doc.body.querySelectorAll<HTMLElement | SVGElement>('*');\n for (const node of elements) {\n if (node.scrollTop !== 0 || node.scrollLeft !== 0) {\n node.dataset.happoScrollposition = `${node.scrollTop},${node.scrollLeft}`;\n }\n }\n}\n\nfunction registerCheckedInputs(doc: Document): void {\n const elements = doc.body.querySelectorAll(\n 'input[type=\"checkbox\"], input[type=\"radio\"]',\n );\n for (const node of elements) {\n const input = node as HTMLInputElement;\n if (input.checked) {\n input.setAttribute('checked', 'checked');\n } else {\n input.removeAttribute('checked');\n }\n }\n}\n\nfunction extractElementAttributes(el: Element): Record<string, string> {\n const result: Record<string, string> = {};\n for (const item of el.attributes) {\n result[item.name] = item.value;\n }\n return result;\n}\n\nfunction performDOMTransform({\n doc,\n selector,\n transform,\n element,\n}: {\n doc: Document;\n selector: string;\n transform: (element: Element, doc: Document) => Element;\n element: Element;\n}): (() => void) | undefined {\n const elements = Array.from(element.querySelectorAll(selector));\n if (!elements.length) {\n return;\n }\n const replacements: Array<{ from: Element; to: Element }> = [];\n for (const element of elements) {\n const replacement = transform(element, doc);\n replacements.push({ from: element, to: replacement });\n element.replaceWith(replacement);\n }\n return () => {\n for (const { from, to } of replacements) {\n to.replaceWith(from);\n }\n };\n}\n\nfunction transformToElementArray(\n elements: Element | Array<Element> | NodeListOf<Element>,\n): Array<Element> {\n // Check if 'elements' is already an array\n if (Array.isArray(elements)) {\n return elements;\n }\n // Check if 'elements' is a NodeList\n if (elements instanceof globalThis.window.NodeList) {\n return Array.from(elements);\n }\n // Check if 'elements' is a single Element\n if (elements instanceof globalThis.window.Element) {\n return [elements];\n }\n\n // Handle array-like objects\n if ((elements as NodeListOf<Element>).length !== undefined) {\n return Array.from(elements as NodeListOf<Element>);\n }\n\n return [elements];\n}\n\n/**\n * Injects all shadow roots from the given element.\n *\n * @param {HTMLElement} element\n */\nfunction inlineShadowRoots(element: Element): void {\n const elements = [element];\n\n const elementsToProcess: Array<Element> = [];\n while (elements.length) {\n const currentElement = elements.shift();\n if (!currentElement) continue;\n\n if (currentElement.shadowRoot) {\n elementsToProcess.unshift(currentElement); // LIFO so that leaf nodes are processed first\n }\n elements.unshift(...(Array.from(currentElement.children) as Array<HTMLElement>)); // LIFO so that leaf nodes are processed first\n }\n\n for (const element of elementsToProcess) {\n const hiddenElement = document.createElement('happo-shadow-content');\n hiddenElement.style.display = 'none';\n\n // Add adopted stylesheets as <style> elements\n if (element.shadowRoot) {\n for (const styleSheet of element.shadowRoot.adoptedStyleSheets) {\n const styleElement = document.createElement('style');\n styleElement.dataset.happoInlined = 'true';\n const styleContent = getContentFromStyleSheet(styleSheet);\n styleElement.textContent = styleContent;\n hiddenElement.append(styleElement);\n }\n\n hiddenElement.innerHTML += element.shadowRoot.innerHTML;\n element.append(hiddenElement);\n }\n }\n}\n\n/**\n * Adds data-happo-modal to the first modal dialog that is open, and removes it\n * from all other dialogs.\n */\nfunction markModalDialogs(element: Element): void {\n const cleanups = element.querySelectorAll<HTMLDialogElement>(\n 'dialog[data-happo-modal]',\n );\n for (const cleanup of cleanups) {\n delete cleanup.dataset.happoModal;\n }\n\n const openModal = element.querySelector<HTMLDialogElement>('dialog:modal[open]');\n if (!openModal) {\n return;\n }\n openModal.dataset.happoModal = 'true';\n}\n\nfunction findSvgElementsWithSymbols(element: Element): Array<SVGElement> {\n return [...element.ownerDocument.querySelectorAll('svg')].filter((svg) =>\n svg.querySelector('symbol'),\n );\n}\n\nexport default function takeDOMSnapshot({\n doc,\n element: oneOrMoreElements,\n responsiveInlinedCanvases = false,\n transformDOM,\n handleBase64Image,\n strategy = 'hoist',\n}: TakeDOMSnapshotOptions): DOMSnapshotResult {\n if (doc == null) {\n throw new Error('doc cannot be null or undefined');\n }\n if (doc.defaultView == null) {\n throw new Error('doc.defaultView cannot be null or undefined');\n }\n\n assertElement(oneOrMoreElements);\n\n const allElements = transformToElementArray(oneOrMoreElements);\n const htmlParts: Array<string> = [];\n const assetUrls: Array<AssetUrl> = [];\n for (const originalElement of allElements) {\n const { element, cleanup: canvasCleanup } = inlineCanvases(originalElement, {\n doc,\n responsiveInlinedCanvases,\n });\n\n registerScrollPositions(doc);\n registerCheckedInputs(doc);\n\n const transformCleanup = transformDOM\n ? performDOMTransform({\n doc,\n element,\n ...transformDOM,\n })\n : undefined;\n\n for (const scriptEl of element.querySelectorAll('script')) {\n if (scriptEl.parentNode) {\n scriptEl.remove();\n }\n }\n\n for (const e of doc.querySelectorAll<HTMLElement | SVGElement | MathMLElement>(\n '[data-happo-focus]',\n )) {\n delete e.dataset.happoFocus;\n }\n\n if (\n doc.activeElement &&\n doc.activeElement !== doc.body &&\n (doc.activeElement instanceof globalThis.window.HTMLElement ||\n doc.activeElement instanceof globalThis.window.SVGElement ||\n doc.activeElement instanceof globalThis.window.MathMLElement)\n ) {\n doc.activeElement.dataset.happoFocus = 'true';\n }\n\n inlineShadowRoots(element);\n markModalDialogs(element);\n\n assetUrls.push(\n ...getElementAssetUrls(\n element,\n handleBase64Image ? { handleBase64Image } : {},\n ),\n );\n\n if (strategy === 'hoist') {\n htmlParts.push(element.outerHTML);\n } else if (strategy === 'clip') {\n if (\n !(element instanceof HTMLElement) &&\n !(element instanceof SVGElement) &&\n !(element instanceof MathMLElement)\n ) {\n throw new TypeError(\n 'element does not support the dataset property, i.e. it is not an HTMLElement or SVGElement or MathMLElement',\n );\n }\n\n element.dataset.happoClip = 'true';\n htmlParts.push(doc.body.outerHTML);\n } else {\n throw new Error(`Unknown strategy: ${strategy}`);\n }\n\n if (strategy === 'hoist') {\n const svgElementsWithSymbols = findSvgElementsWithSymbols(element);\n for (const svgElement of svgElementsWithSymbols) {\n htmlParts.push(`<div style=\"display: none;\">${svgElement.outerHTML}</div>`);\n }\n }\n if (canvasCleanup) canvasCleanup();\n if (transformCleanup) transformCleanup();\n }\n\n const cssBlocks = extractCSSBlocks(doc);\n const htmlElementAttrs = extractElementAttributes(doc.documentElement);\n const bodyElementAttrs = extractElementAttributes(doc.body);\n\n // Remove our shadow content elements so that they don't affect the page\n for (const e of doc.querySelectorAll('happo-shadow-content')) e.remove();\n if (strategy === 'clip') {\n for (const e of doc.querySelectorAll<HTMLElement | SVGElement>(\n '[data-happo-clip]',\n )) {\n delete e.dataset.happoClip;\n }\n }\n\n return {\n html: htmlParts.join('\\n'),\n assetUrls,\n cssBlocks,\n htmlElementAttrs,\n bodyElementAttrs,\n };\n}\n", "import type { WindowHappo } from '../isomorphic/types.ts';\nimport takeDOMSnapshot from './takeDOMSnapshot.ts';\n\ndeclare global {\n var happo: WindowHappo | undefined;\n}\n\nconst happo: WindowHappo = {\n takeDOMSnapshot,\n};\n\nglobalThis.happo = happo;\n"],
5
- "mappings": "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",
3
+ "sources": ["../../node_modules/.pnpm/srcset@5.0.2/node_modules/srcset/index.js", "../../src/isomorphic/findCSSAssetUrls.ts", "../../src/browser/applyConstructedStylesPatch.ts", "../../src/browser/assertElement.ts", "../../src/browser/md5.ts", "../../src/browser/takeDOMSnapshot.ts", "../../src/browser/main.ts"],
4
+ "sourcesContent": ["/**\nThis regex represents a loose rule of an \u201Cimage candidate string\u201D.\n\n@see https://html.spec.whatwg.org/multipage/images.html#srcset-attribute\n\nAn \u201Cimage candidate string\u201D roughly consists of the following:\n1. Zero or more whitespace characters.\n2. A non-empty URL that does not start or end with `,`.\n3. Zero or more whitespace characters.\n4. An optional \u201Cdescriptor\u201D that starts with a whitespace character.\n5. Zero or more whitespace characters.\n6. Each image candidate string is separated by a `,`.\n\nWe intentionally implement a loose rule here so that we can perform more aggressive error handling and reporting in the below code.\n*/\nconst imageCandidateRegex = /\\s*([^,]\\S*[^,](?:\\s+[^,]+)?)\\s*(?:,|$)/;\n\nconst duplicateDescriptorCheck = (allDescriptors, value, postfix) => {\n\tallDescriptors[postfix] = allDescriptors[postfix] || {};\n\tif (allDescriptors[postfix][value]) {\n\t\tthrow new Error(`No more than one image candidate is allowed for a given descriptor: ${value}${postfix}`);\n\t}\n\n\tallDescriptors[postfix][value] = true;\n};\n\nconst fallbackDescriptorDuplicateCheck = allDescriptors => {\n\tif (allDescriptors.fallback) {\n\t\tthrow new Error('Only one fallback image candidate is allowed');\n\t}\n\n\t// TODO: Use `?`.\n\tif (allDescriptors.x && allDescriptors.x['1']) {\n\t\tthrow new Error('A fallback image is equivalent to a 1x descriptor, providing both is invalid.');\n\t}\n\n\tallDescriptors.fallback = true;\n};\n\nconst descriptorCountCheck = (allDescriptors, currentDescriptors) => {\n\tif (currentDescriptors.length === 0) {\n\t\tfallbackDescriptorDuplicateCheck(allDescriptors);\n\t} else if (currentDescriptors.length > 1) {\n\t\tthrow new Error(`Image candidate may have no more than one descriptor, found ${currentDescriptors.length}: ${currentDescriptors.join(' ')}`);\n\t}\n};\n\nconst validDescriptorCheck = (value, postfix, descriptor) => {\n\tif (Number.isNaN(value)) {\n\t\tthrow new TypeError(`${descriptor || value} is not a valid number`);\n\t}\n\n\tswitch (postfix) {\n\t\tcase 'w': {\n\t\t\t// Check that the descriptor (minus the 'w') consists only of ASCII digits\n\t\t\tconst widthString = descriptor.slice(0, -1);\n\t\t\tif (!/^\\d+$/.test(widthString)) {\n\t\t\t\tthrow new TypeError(`Width descriptor must be a valid non-negative integer: ${descriptor}`);\n\t\t\t}\n\n\t\t\tif (value <= 0) {\n\t\t\t\tthrow new Error('Width descriptor must be greater than zero');\n\t\t\t} else if (!Number.isInteger(value)) {\n\t\t\t\tthrow new TypeError('Width descriptor must be an integer');\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'x': {\n\t\t\t// Check that the descriptor (minus the 'x') is a valid floating-point number per HTML spec\n\t\t\tconst densityString = descriptor.slice(0, -1);\n\n\t\t\t// HTML spec: valid floating-point number cannot be Infinity or NaN\n\t\t\tif (!Number.isFinite(value)) {\n\t\t\t\tthrow new TypeError(`Density descriptor must be a valid floating-point number: ${descriptor}`);\n\t\t\t}\n\n\t\t\t// Validate the string format follows HTML floating-point number rules\n\t\t\t// Must be: optional sign, then either (digits + optional decimal + digits) or (decimal + digits), then optional exponent\n\t\t\tif (!/^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/.test(densityString)) {\n\t\t\t\tthrow new TypeError(`Density descriptor must be a valid floating-point number: ${descriptor}`);\n\t\t\t}\n\n\t\t\tif (value <= 0) {\n\t\t\t\tthrow new Error('Pixel density descriptor must be greater than zero');\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'h': {\n\t\t\tthrow new Error('Height descriptor is no longer allowed');\n\t\t}\n\n\t\tdefault: {\n\t\t\tthrow new Error(`Invalid srcset descriptor: ${descriptor}`);\n\t\t}\n\t}\n};\n\nexport function parseSrcset(string, {strict = false} = {}) {\n\tconst allDescriptors = strict ? {} : undefined;\n\n\treturn string\n\t\t.replace(/\\r?\\n/, '')\n\t\t.replace(/,\\s+/, ', ')\n\t\t.split(imageCandidateRegex)\n\t\t.filter((part, index) => index % 2 === 1)\n\t\t.map(part => {\n\t\t\tconst [url, ...descriptors] = part.trim().split(/\\s+/);\n\n\t\t\tconst result = {url};\n\n\t\t\tif (strict) {\n\t\t\t\tdescriptorCountCheck(allDescriptors, descriptors);\n\t\t\t}\n\n\t\t\tfor (const descriptor of descriptors) {\n\t\t\t\tconst postfix = descriptor[descriptor.length - 1];\n\t\t\t\tconst value = Number.parseFloat(descriptor.slice(0, -1));\n\n\t\t\t\tif (strict) {\n\t\t\t\t\tvalidDescriptorCheck(value, postfix, descriptor);\n\t\t\t\t\tduplicateDescriptorCheck(allDescriptors, value, postfix);\n\t\t\t\t}\n\n\t\t\t\tswitch (postfix) {\n\t\t\t\t\tcase 'w': {\n\t\t\t\t\t\tresult.width = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'h': {\n\t\t\t\t\t\tresult.height = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'x': {\n\t\t\t\t\t\tresult.density = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// No default\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t});\n}\n\nconst knownDescriptors = new Set(['width', 'height', 'density']);\n\nexport function stringifySrcset(array, {strict = false} = {}) {\n\tconst allDescriptors = strict ? {} : undefined;\n\n\treturn array.map(element => {\n\t\tif (!element.url) {\n\t\t\tif (strict) {\n\t\t\t\tthrow new Error('URL is required');\n\t\t\t}\n\n\t\t\treturn '';\n\t\t}\n\n\t\tconst descriptorKeys = Object.keys(element).filter(key => knownDescriptors.has(key));\n\n\t\tif (strict) {\n\t\t\tdescriptorCountCheck(allDescriptors, descriptorKeys);\n\t\t}\n\n\t\tconst result = [element.url];\n\n\t\tfor (const descriptorKey of descriptorKeys) {\n\t\t\tconst value = element[descriptorKey];\n\t\t\tlet postfix;\n\t\t\tswitch (descriptorKey) {\n\t\t\t\tcase 'width': {\n\t\t\t\t\tpostfix = 'w';\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'height': {\n\t\t\t\t\tpostfix = 'h';\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'density': {\n\t\t\t\t\tpostfix = 'x';\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t// No default\n\t\t\t}\n\n\t\t\tconst descriptor = `${value}${postfix}`;\n\n\t\t\tif (strict) {\n\t\t\t\tvalidDescriptorCheck(value, postfix);\n\t\t\t\tduplicateDescriptorCheck(allDescriptors, value, postfix);\n\t\t\t}\n\n\t\t\tresult.push(descriptor);\n\t\t}\n\n\t\treturn result.join(' ');\n\t}).join(', ');\n}\n", "const URL_PATTERN: RegExp = /(url\\(['\"]?)(.*?)(['\"]?\\))/g;\n\nfunction findCSSAssetUrls(string: string): Array<string> {\n const result: Array<string> = [];\n let match: RegExpExecArray | null;\n while ((match = URL_PATTERN.exec(string))) {\n const url = match[2];\n if (url && !url.startsWith('data:')) {\n result.push(url);\n }\n }\n return result;\n}\n\nexport { URL_PATTERN };\nexport default findCSSAssetUrls;\n", "const recordedCSSSymbol: unique symbol = Symbol('recordedCssRules');\nconst hasBrokenIndexesSymbol: unique symbol = Symbol('hasBrokenIndexes');\nconst isInstalledSymbol: unique symbol = Symbol('isInstalled');\n\n// Extend CSSStyleSheet interface to include our custom properties\ninterface ExtendedCSSStyleSheet extends CSSStyleSheet {\n [recordedCSSSymbol]?: Array<string>;\n [hasBrokenIndexesSymbol]?: boolean;\n}\n\n// Extend CSSStyleSheet constructor to include our custom properties\ninterface ExtendedCSSStyleSheetConstructor {\n new (options?: CSSStyleSheetInit): CSSStyleSheet;\n [isInstalledSymbol]?: boolean;\n prototype: CSSStyleSheet;\n}\n\n// Extend Window interface to include CSSStyleSheet\ninterface ExtendedWindow extends Window {\n CSSStyleSheet: ExtendedCSSStyleSheetConstructor;\n}\n\nexport function isExtendedWindow(w: Window): w is ExtendedWindow {\n return (\n 'CSSStyleSheet' in w &&\n typeof (w as unknown as { CSSStyleSheet: unknown }).CSSStyleSheet === 'function'\n );\n}\n\n// Helper to ensure our custom recorded array exists on the sheet.\nfunction ensureRecord(sheet: ExtendedCSSStyleSheet): void {\n if (!sheet[recordedCSSSymbol]) {\n sheet[recordedCSSSymbol] = [];\n }\n}\n\nfunction displayError(message: string): void {\n console.error(message);\n\n const el = document.createElement('div');\n el.setAttribute(\n 'style',\n `\n position: fixed;\n display: flex;\n align-items: center;\n justify-content: center;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n padding: 30px;\n background: red;\n font-weight: bold;\n color: white;\n z-index: 1000;\n font-family: monospace;\n `,\n );\n const inner = document.createElement('div');\n inner.textContent = message;\n el.append(inner);\n document.addEventListener('DOMContentLoaded', () => {\n document.body.append(el);\n });\n}\n\nexport default function applyConstructedStylesPatch(\n win: ExtendedWindow = globalThis.window as ExtendedWindow,\n): void {\n if (win.CSSStyleSheet === undefined) {\n console.error('CSSStyleSheet is not supported in this browser');\n return;\n }\n\n const CSSStyleSheetConstructor =\n win.CSSStyleSheet as ExtendedCSSStyleSheetConstructor;\n if (CSSStyleSheetConstructor[isInstalledSymbol]) {\n return;\n }\n CSSStyleSheetConstructor[isInstalledSymbol] = true;\n\n // Patch insertRule to record each rule string.\n const originalInsertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = function (\n rule: string,\n index: number = 0,\n ): number {\n const extendedThis = this as ExtendedCSSStyleSheet;\n ensureRecord(extendedThis);\n\n if (extendedThis[hasBrokenIndexesSymbol] && index) {\n displayError(\n 'CSSStyleSheet.prototype.insertRule with a non-zero index does not work with Happo after first having called replace/replaceSync. Reach out to support@happo.io if you need help with this.',\n );\n return originalInsertRule.call(this, rule, index);\n }\n\n // If index is not provided or invalid, default to appending.\n if (\n index === undefined ||\n index < 0 ||\n index > (extendedThis[recordedCSSSymbol]?.length || 0)\n ) {\n extendedThis[recordedCSSSymbol]?.push(rule);\n } else {\n extendedThis[recordedCSSSymbol]?.splice(index, 0, rule);\n }\n return originalInsertRule.call(this, rule, index);\n };\n\n const originalAddRule = win.CSSStyleSheet.prototype.addRule;\n win.CSSStyleSheet.prototype.addRule = function (\n selector: string,\n styleBlock: string,\n index?: number,\n ): number {\n const extendedThis = this as ExtendedCSSStyleSheet;\n ensureRecord(extendedThis);\n if (extendedThis[hasBrokenIndexesSymbol] && index) {\n displayError(\n 'CSSStyleSheet.prototype.addRule with a non-zero index does not work with Happo after first having called replace/replaceSync. Reach out to support@happo.io if you need help with this.',\n );\n return originalAddRule.call(this, selector, styleBlock, index);\n }\n\n const rule = `${selector} { ${styleBlock} }`;\n if (\n index === undefined ||\n index < 0 ||\n index > (extendedThis[recordedCSSSymbol]?.length || 0)\n ) {\n extendedThis[recordedCSSSymbol]?.push(rule);\n } else {\n extendedThis[recordedCSSSymbol]?.splice(index, 0, rule);\n }\n return originalAddRule.call(this, selector, styleBlock, index);\n };\n\n // Patch deleteRule so that removed rules are taken out of our record.\n const originalDeleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = function (index: number): void {\n const extendedThis = this as ExtendedCSSStyleSheet;\n ensureRecord(extendedThis);\n if (extendedThis[hasBrokenIndexesSymbol]) {\n displayError(\n 'CSSStyleSheet.prototype.deleteRule does not work with Happo after first having called replace/replaceSync. Reach out to support@happo.io if you need help with this.',\n );\n } else if (\n index >= 0 &&\n index < (extendedThis[recordedCSSSymbol]?.length || 0)\n ) {\n extendedThis[recordedCSSSymbol]?.splice(index, 1);\n }\n return originalDeleteRule.call(this, index);\n };\n\n const originalRemoveRule = win.CSSStyleSheet.prototype.removeRule;\n win.CSSStyleSheet.prototype.removeRule = function (index?: number): void {\n const extendedThis = this as ExtendedCSSStyleSheet;\n ensureRecord(extendedThis);\n if (extendedThis[hasBrokenIndexesSymbol]) {\n displayError(\n 'CSSStyleSheet.prototype.removeRule does not work with Happo after first having called replace/replaceSync. Reach out to support@happo.io if you need help with this.',\n );\n } else if (\n index !== undefined &&\n index >= 0 &&\n index < (extendedThis[recordedCSSSymbol]?.length || 0)\n ) {\n extendedThis[recordedCSSSymbol]?.splice(index, 1);\n }\n return originalRemoveRule.call(this, index);\n };\n\n // Patch replaceSync to capture the new CSS text.\n const originalReplaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = function (text: string): void {\n const extendedThis = this as ExtendedCSSStyleSheet;\n extendedThis[recordedCSSSymbol] = text.split('\\n').map((rule) => rule.trim());\n extendedThis[hasBrokenIndexesSymbol] = true;\n return originalReplaceSync.call(this, text);\n };\n\n // Patch replace (the asynchronous version) similarly.\n const originalReplace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = function (\n text: string,\n ): Promise<CSSStyleSheet> {\n const sheet = this as ExtendedCSSStyleSheet;\n return originalReplace.call(sheet, text).then(function (result: CSSStyleSheet) {\n sheet[recordedCSSSymbol] = text.split('\\n').map((rule) => rule.trim());\n sheet[hasBrokenIndexesSymbol] = true;\n return result;\n });\n };\n}\n\nexport { recordedCSSSymbol };\n", "function isIterableCollection(\n element: NonNullable<unknown>,\n): element is Iterable<unknown> {\n if (typeof element !== 'object') {\n return false;\n }\n\n if (!('length' in element)) {\n return false;\n }\n\n if (typeof element.length !== 'number') {\n return false;\n }\n\n if (!('item' in element)) {\n return false;\n }\n\n if (typeof element.item !== 'function') {\n return false;\n }\n\n if (!(Symbol.iterator in element)) {\n return false;\n }\n\n if (typeof element[Symbol.iterator] !== 'function') {\n return false;\n }\n\n return true;\n}\n\n/**\n * Throws if the element is not a valid Element instance, an array of elements,\n * or a NodeList of elements.\n */\nexport default function assertElement(\n element: unknown,\n): asserts element is Element | Array<Element> | NodeListOf<Element> {\n if (element == null) {\n throw new Error('element cannot be null or undefined');\n }\n\n if (typeof element !== 'object') {\n throw new TypeError('element must be an object');\n }\n\n if (Array.isArray(element) || isIterableCollection(element)) {\n for (const el of element) {\n assertElement(el);\n }\n\n return;\n }\n\n if (!('nodeType' in element)) {\n throw new TypeError('element must have a nodeType property');\n }\n\n if (element.nodeType !== 1 /* ELEMENT_NODE */) {\n throw new Error('element must have a nodeType of ELEMENT_NODE');\n }\n}\n", "/* eslint-disable unicorn/prefer-math-trunc */\n\n/*\n\nTypeScript MD5\n==============\n\nBased on work by\n* Joseph Myers: http://www.myersdaily.org/joseph/javascript/md5-text.html\n* Andr\u00E9 Cruz: https://github.com/satazor/SparkMD5\n* Raymond Hill: https://github.com/gorhill/yamd5.js\n\nEffectively a TypeScrypt re-write of Raymond Hill JS Library\n\nThe MIT License (MIT)\n\nCopyright (C) 2014 Raymond Hill\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\n\n DO WHAT YOU WANT TO PUBLIC LICENSE\n Version 2, December 2004\n\n Copyright (C) 2015 Andr\u00E9 Cruz <amdfcruz@gmail.com>\n\n Everyone is permitted to copy and distribute verbatim or modified\n copies of this license document, and changing it is allowed as long\n as the name is changed.\n\n DO WHAT YOU WANT TO PUBLIC LICENSE\n TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n 0. You just DO WHAT YOU WANT TO.\n\n\n*/\n\ninterface HasherState {\n buffer: string;\n buflen: number;\n length: number;\n state: Array<number>;\n}\n\nconst EMPTY_STATE = new Int32Array(4);\n\nexport class MD5 {\n /**\n * Hash a UTF-8 string on the spot\n * @param str String to hash\n * @param raw Whether to return the value as an `Int32Array`\n */\n public static hashStr(str: string, raw?: false): string;\n public static hashStr(str: string, raw: true): Int32Array;\n public static hashStr(str: string, raw: boolean = false) {\n return this.onePassHasher.start().appendStr(str).end(raw);\n }\n\n /**\n * Hash a ASCII string on the spot\n * @param str String to hash\n * @param raw Whether to return the value as an `Int32Array`\n */\n public static hashAsciiStr(str: string, raw?: false): string;\n public static hashAsciiStr(str: string, raw: true): Int32Array;\n public static hashAsciiStr(str: string, raw: boolean = false) {\n return this.onePassHasher.start().appendAsciiStr(str).end(raw);\n }\n // Private Static Variables\n private static stateIdentity = new Int32Array([\n 1_732_584_193, -271_733_879, -1_732_584_194, 271_733_878,\n ]);\n private static buffer32Identity = new Int32Array([\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ]);\n private static hexChars = '0123456789abcdef';\n private static hexOut: Array<string> = [];\n\n // Permanent instance is to use for one-call hashing\n private static onePassHasher = new MD5();\n\n private static _hex(x: Int32Array): string {\n const hc = MD5.hexChars;\n const ho = MD5.hexOut;\n let n;\n let offset;\n let j;\n let i;\n\n for (i = 0; i < 4; i += 1) {\n offset = i * 8;\n n = x[i]!;\n for (j = 0; j < 8; j += 2) {\n ho[offset + 1 + j] = hc.charAt(n & 0x0f);\n n >>>= 4;\n ho[offset + 0 + j] = hc.charAt(n & 0x0f);\n n >>>= 4;\n }\n }\n return ho.join('');\n }\n\n private static _md5cycle(\n x: Int32Array | Uint32Array,\n k: Int32Array | Uint32Array,\n ) {\n let a = x[0]!;\n let b = x[1]!;\n let c = x[2]!;\n let d = x[3]!;\n // ff()\n a += (((b & c) | (~b & d)) + k[0]! - 680_876_936) | 0;\n a = (((a << 7) | (a >>> 25)) + b) | 0;\n d += (((a & b) | (~a & c)) + k[1]! - 389_564_586) | 0;\n d = (((d << 12) | (d >>> 20)) + a) | 0;\n c += (((d & a) | (~d & b)) + k[2]! + 606_105_819) | 0;\n c = (((c << 17) | (c >>> 15)) + d) | 0;\n b += (((c & d) | (~c & a)) + k[3]! - 1_044_525_330) | 0;\n b = (((b << 22) | (b >>> 10)) + c) | 0;\n a += (((b & c) | (~b & d)) + k[4]! - 176_418_897) | 0;\n a = (((a << 7) | (a >>> 25)) + b) | 0;\n d += (((a & b) | (~a & c)) + k[5]! + 1_200_080_426) | 0;\n d = (((d << 12) | (d >>> 20)) + a) | 0;\n c += (((d & a) | (~d & b)) + k[6]! - 1_473_231_341) | 0;\n c = (((c << 17) | (c >>> 15)) + d) | 0;\n b += (((c & d) | (~c & a)) + k[7]! - 45_705_983) | 0;\n b = (((b << 22) | (b >>> 10)) + c) | 0;\n a += (((b & c) | (~b & d)) + k[8]! + 1_770_035_416) | 0;\n a = (((a << 7) | (a >>> 25)) + b) | 0;\n d += (((a & b) | (~a & c)) + k[9]! - 1_958_414_417) | 0;\n d = (((d << 12) | (d >>> 20)) + a) | 0;\n c += (((d & a) | (~d & b)) + k[10]! - 42_063) | 0;\n c = (((c << 17) | (c >>> 15)) + d) | 0;\n b += (((c & d) | (~c & a)) + k[11]! - 1_990_404_162) | 0;\n b = (((b << 22) | (b >>> 10)) + c) | 0;\n a += (((b & c) | (~b & d)) + k[12]! + 1_804_603_682) | 0;\n a = (((a << 7) | (a >>> 25)) + b) | 0;\n d += (((a & b) | (~a & c)) + k[13]! - 40_341_101) | 0;\n d = (((d << 12) | (d >>> 20)) + a) | 0;\n c += (((d & a) | (~d & b)) + k[14]! - 1_502_002_290) | 0;\n c = (((c << 17) | (c >>> 15)) + d) | 0;\n b += (((c & d) | (~c & a)) + k[15]! + 1_236_535_329) | 0;\n b = (((b << 22) | (b >>> 10)) + c) | 0;\n // gg()\n a += (((b & d) | (c & ~d)) + k[1]! - 165_796_510) | 0;\n a = (((a << 5) | (a >>> 27)) + b) | 0;\n d += (((a & c) | (b & ~c)) + k[6]! - 1_069_501_632) | 0;\n d = (((d << 9) | (d >>> 23)) + a) | 0;\n c += (((d & b) | (a & ~b)) + k[11]! + 643_717_713) | 0;\n c = (((c << 14) | (c >>> 18)) + d) | 0;\n b += (((c & a) | (d & ~a)) + k[0]! - 373_897_302) | 0;\n b = (((b << 20) | (b >>> 12)) + c) | 0;\n a += (((b & d) | (c & ~d)) + k[5]! - 701_558_691) | 0;\n a = (((a << 5) | (a >>> 27)) + b) | 0;\n d += (((a & c) | (b & ~c)) + k[10]! + 38_016_083) | 0;\n d = (((d << 9) | (d >>> 23)) + a) | 0;\n c += (((d & b) | (a & ~b)) + k[15]! - 660_478_335) | 0;\n c = (((c << 14) | (c >>> 18)) + d) | 0;\n b += (((c & a) | (d & ~a)) + k[4]! - 405_537_848) | 0;\n b = (((b << 20) | (b >>> 12)) + c) | 0;\n a += (((b & d) | (c & ~d)) + k[9]! + 568_446_438) | 0;\n a = (((a << 5) | (a >>> 27)) + b) | 0;\n d += (((a & c) | (b & ~c)) + k[14]! - 1_019_803_690) | 0;\n d = (((d << 9) | (d >>> 23)) + a) | 0;\n c += (((d & b) | (a & ~b)) + k[3]! - 187_363_961) | 0;\n c = (((c << 14) | (c >>> 18)) + d) | 0;\n b += (((c & a) | (d & ~a)) + k[8]! + 1_163_531_501) | 0;\n b = (((b << 20) | (b >>> 12)) + c) | 0;\n a += (((b & d) | (c & ~d)) + k[13]! - 1_444_681_467) | 0;\n a = (((a << 5) | (a >>> 27)) + b) | 0;\n d += (((a & c) | (b & ~c)) + k[2]! - 51_403_784) | 0;\n d = (((d << 9) | (d >>> 23)) + a) | 0;\n c += (((d & b) | (a & ~b)) + k[7]! + 1_735_328_473) | 0;\n c = (((c << 14) | (c >>> 18)) + d) | 0;\n b += (((c & a) | (d & ~a)) + k[12]! - 1_926_607_734) | 0;\n b = (((b << 20) | (b >>> 12)) + c) | 0;\n // hh()\n a += ((b ^ c ^ d) + k[5]! - 378_558) | 0;\n a = (((a << 4) | (a >>> 28)) + b) | 0;\n d += ((a ^ b ^ c) + k[8]! - 2_022_574_463) | 0;\n d = (((d << 11) | (d >>> 21)) + a) | 0;\n c += ((d ^ a ^ b) + k[11]! + 1_839_030_562) | 0;\n c = (((c << 16) | (c >>> 16)) + d) | 0;\n b += ((c ^ d ^ a) + k[14]! - 35_309_556) | 0;\n b = (((b << 23) | (b >>> 9)) + c) | 0;\n a += ((b ^ c ^ d) + k[1]! - 1_530_992_060) | 0;\n a = (((a << 4) | (a >>> 28)) + b) | 0;\n d += ((a ^ b ^ c) + k[4]! + 1_272_893_353) | 0;\n d = (((d << 11) | (d >>> 21)) + a) | 0;\n c += ((d ^ a ^ b) + k[7]! - 155_497_632) | 0;\n c = (((c << 16) | (c >>> 16)) + d) | 0;\n b += ((c ^ d ^ a) + k[10]! - 1_094_730_640) | 0;\n b = (((b << 23) | (b >>> 9)) + c) | 0;\n a += ((b ^ c ^ d) + k[13]! + 681_279_174) | 0;\n a = (((a << 4) | (a >>> 28)) + b) | 0;\n d += ((a ^ b ^ c) + k[0]! - 358_537_222) | 0;\n d = (((d << 11) | (d >>> 21)) + a) | 0;\n c += ((d ^ a ^ b) + k[3]! - 722_521_979) | 0;\n c = (((c << 16) | (c >>> 16)) + d) | 0;\n b += ((c ^ d ^ a) + k[6]! + 76_029_189) | 0;\n b = (((b << 23) | (b >>> 9)) + c) | 0;\n a += ((b ^ c ^ d) + k[9]! - 640_364_487) | 0;\n a = (((a << 4) | (a >>> 28)) + b) | 0;\n d += ((a ^ b ^ c) + k[12]! - 421_815_835) | 0;\n d = (((d << 11) | (d >>> 21)) + a) | 0;\n c += ((d ^ a ^ b) + k[15]! + 530_742_520) | 0;\n c = (((c << 16) | (c >>> 16)) + d) | 0;\n b += ((c ^ d ^ a) + k[2]! - 995_338_651) | 0;\n b = (((b << 23) | (b >>> 9)) + c) | 0;\n // ii()\n a += ((c ^ (b | ~d)) + k[0]! - 198_630_844) | 0;\n a = (((a << 6) | (a >>> 26)) + b) | 0;\n d += ((b ^ (a | ~c)) + k[7]! + 1_126_891_415) | 0;\n d = (((d << 10) | (d >>> 22)) + a) | 0;\n c += ((a ^ (d | ~b)) + k[14]! - 1_416_354_905) | 0;\n c = (((c << 15) | (c >>> 17)) + d) | 0;\n b += ((d ^ (c | ~a)) + k[5]! - 57_434_055) | 0;\n b = (((b << 21) | (b >>> 11)) + c) | 0;\n a += ((c ^ (b | ~d)) + k[12]! + 1_700_485_571) | 0;\n a = (((a << 6) | (a >>> 26)) + b) | 0;\n d += ((b ^ (a | ~c)) + k[3]! - 1_894_986_606) | 0;\n d = (((d << 10) | (d >>> 22)) + a) | 0;\n c += ((a ^ (d | ~b)) + k[10]! - 1_051_523) | 0;\n c = (((c << 15) | (c >>> 17)) + d) | 0;\n b += ((d ^ (c | ~a)) + k[1]! - 2_054_922_799) | 0;\n b = (((b << 21) | (b >>> 11)) + c) | 0;\n a += ((c ^ (b | ~d)) + k[8]! + 1_873_313_359) | 0;\n a = (((a << 6) | (a >>> 26)) + b) | 0;\n d += ((b ^ (a | ~c)) + k[15]! - 30_611_744) | 0;\n d = (((d << 10) | (d >>> 22)) + a) | 0;\n c += ((a ^ (d | ~b)) + k[6]! - 1_560_198_380) | 0;\n c = (((c << 15) | (c >>> 17)) + d) | 0;\n b += ((d ^ (c | ~a)) + k[13]! + 1_309_151_649) | 0;\n b = (((b << 21) | (b >>> 11)) + c) | 0;\n a += ((c ^ (b | ~d)) + k[4]! - 145_523_070) | 0;\n a = (((a << 6) | (a >>> 26)) + b) | 0;\n d += ((b ^ (a | ~c)) + k[11]! - 1_120_210_379) | 0;\n d = (((d << 10) | (d >>> 22)) + a) | 0;\n c += ((a ^ (d | ~b)) + k[2]! + 718_787_259) | 0;\n c = (((c << 15) | (c >>> 17)) + d) | 0;\n b += ((d ^ (c | ~a)) + k[9]! - 343_485_551) | 0;\n b = (((b << 21) | (b >>> 11)) + c) | 0;\n\n x[0] = (a + x[0]!) | 0;\n x[1] = (b + x[1]!) | 0;\n x[2] = (c + x[2]!) | 0;\n x[3] = (d + x[3]!) | 0;\n }\n\n private _dataLength = 0;\n private _bufferLength = 0;\n\n private _state: Int32Array = new Int32Array(4);\n private _buffer: ArrayBuffer = new ArrayBuffer(68);\n private _buffer8: Uint8Array;\n private _buffer32: Uint32Array;\n\n constructor() {\n this._buffer8 = new Uint8Array(this._buffer, 0, 68);\n this._buffer32 = new Uint32Array(this._buffer, 0, 17);\n this.start();\n }\n\n /**\n * Initialise buffer to be hashed\n */\n public start(): this {\n this._dataLength = 0;\n this._bufferLength = 0;\n this._state.set(MD5.stateIdentity);\n return this;\n }\n\n // Char to code point to to array conversion:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n // #Example.3A_Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_unknown\n\n /**\n * Append a UTF-8 string to the hash buffer\n * @param str String to append\n */\n public appendStr(str: string): this {\n const buf8 = this._buffer8;\n const buf32 = this._buffer32;\n let bufLen = this._bufferLength;\n let code;\n let i;\n\n for (i = 0; i < str.length; i += 1) {\n code = str.codePointAt(i) ?? 0;\n if (code < 128) {\n buf8[bufLen++] = code;\n } else if (code < 0x8_00) {\n buf8[bufLen++] = (code >>> 6) + 0xc0;\n buf8[bufLen++] = (code & 0x3f) | 0x80;\n } else if (code < 0xd8_00 || code > 0xdb_ff) {\n buf8[bufLen++] = (code >>> 12) + 0xe0;\n buf8[bufLen++] = ((code >>> 6) & 0x3f) | 0x80;\n buf8[bufLen++] = (code & 0x3f) | 0x80;\n } else {\n code =\n (code - 0xd8_00) * 0x4_00 +\n (str.codePointAt(++i) ?? 0 - 0xdc_00) +\n 0x1_00_00;\n if (code > 0x10_ff_ff) {\n throw new Error('Unicode standard supports code points up to U+10FFFF');\n }\n buf8[bufLen++] = (code >>> 18) + 0xf0;\n buf8[bufLen++] = ((code >>> 12) & 0x3f) | 0x80;\n buf8[bufLen++] = ((code >>> 6) & 0x3f) | 0x80;\n buf8[bufLen++] = (code & 0x3f) | 0x80;\n }\n if (bufLen >= 64) {\n this._dataLength += 64;\n MD5._md5cycle(this._state, buf32);\n bufLen -= 64;\n buf32[0] = buf32[16]!;\n }\n }\n this._bufferLength = bufLen;\n return this;\n }\n\n /**\n * Append an ASCII string to the hash buffer\n * @param str String to append\n */\n public appendAsciiStr(str: string): this {\n const buf8 = this._buffer8;\n const buf32 = this._buffer32;\n let bufLen = this._bufferLength;\n let i;\n let j = 0;\n\n for (;;) {\n i = Math.min(str.length - j, 64 - bufLen);\n while (i--) {\n buf8[bufLen++] = str.codePointAt(j++) ?? 0;\n }\n if (bufLen < 64) {\n break;\n }\n this._dataLength += 64;\n MD5._md5cycle(this._state, buf32);\n bufLen = 0;\n }\n this._bufferLength = bufLen;\n return this;\n }\n\n /**\n * Append a byte array to the hash buffer\n * @param input array to append\n */\n public appendByteArray(input: Uint8Array): this {\n const buf8 = this._buffer8;\n const buf32 = this._buffer32;\n let bufLen = this._bufferLength;\n let i;\n let j = 0;\n\n for (;;) {\n i = Math.min(input.length - j, 64 - bufLen);\n while (i--) {\n buf8[bufLen++] = input[j++]!;\n }\n if (bufLen < 64) {\n break;\n }\n this._dataLength += 64;\n MD5._md5cycle(this._state, buf32);\n bufLen = 0;\n }\n this._bufferLength = bufLen;\n return this;\n }\n\n /**\n * Get the state of the hash buffer\n */\n public getState(): HasherState {\n const s = this._state;\n\n return {\n // eslint-disable-next-line unicorn/prefer-code-point\n buffer: String.fromCharCode.apply(null, Array.from(this._buffer8)),\n buflen: this._bufferLength,\n length: this._dataLength,\n state: [s[0]!, s[1]!, s[2]!, s[3]!],\n };\n }\n\n /**\n * Override the current state of the hash buffer\n * @param state New hash buffer state\n */\n public setState(state: HasherState): void {\n const buf = state.buffer;\n const x = state.state;\n const s = this._state;\n let i;\n\n this._dataLength = state.length;\n this._bufferLength = state.buflen;\n s[0] = x[0]!;\n s[1] = x[1]!;\n s[2] = x[2]!;\n s[3] = x[3]!;\n\n for (i = 0; i < buf.length; i += 1) {\n this._buffer8[i] = buf.codePointAt(i) ?? 0;\n }\n }\n\n /**\n * Hash the current state of the hash buffer and return the result\n * @param raw Whether to return the value as an `Int32Array`\n */\n public end(raw: boolean = false): Int32Array | string {\n const bufLen = this._bufferLength;\n const buf8 = this._buffer8;\n const buf32 = this._buffer32;\n const i = (bufLen >> 2) + 1;\n\n this._dataLength += bufLen;\n const dataBitsLen = this._dataLength * 8;\n\n buf8[bufLen] = 0x80;\n buf8[bufLen + 1] = buf8[bufLen + 2] = buf8[bufLen + 3] = 0;\n buf32.set(MD5.buffer32Identity.subarray(i), i);\n\n if (bufLen > 55) {\n MD5._md5cycle(this._state, buf32);\n buf32.set(MD5.buffer32Identity);\n }\n\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n if (dataBitsLen <= 0xff_ff_ff_ff) {\n buf32[14] = dataBitsLen;\n } else {\n const matches = dataBitsLen.toString(16).match(/(.*?)(.{0,8})$/);\n if (matches === null) return raw ? EMPTY_STATE : '';\n\n const lo = Number.parseInt(matches[2]!, 16);\n const hi = Number.parseInt(matches[1]!, 16) || 0;\n\n buf32[14] = lo;\n buf32[15] = hi;\n }\n\n MD5._md5cycle(this._state, buf32);\n\n return raw ? this._state : MD5._hex(this._state);\n }\n}\n\nif (MD5.hashStr('hello') !== '5d41402abc4b2a76b9719d911017c592') {\n throw new Error('MD5 self test failed.');\n}\n", "import { parseSrcset } from 'srcset';\n\nimport findCSSAssetUrls from '../isomorphic/findCSSAssetUrls.ts';\nimport type {\n AssetUrl,\n CSSBlock,\n DOMSnapshotResult,\n TakeDOMSnapshotOptions,\n} from '../isomorphic/types.ts';\nimport applyConstructedStylesPatch, {\n recordedCSSSymbol,\n} from './applyConstructedStylesPatch.ts';\nimport assertElement from './assertElement.ts';\nimport { MD5 } from './md5.ts';\n\nexport { applyConstructedStylesPatch };\n\nconst CSS_ELEMENTS_SELECTOR = 'style,link[rel=\"stylesheet\"][href]';\nconst COMMENT_PATTERN = /^\\/\\*.+\\*\\/$/;\n\nif (globalThis.window) {\n applyConstructedStylesPatch(globalThis.window);\n}\n\n// Extend HTMLElement and CSSStyleSheet to include our custom properties\ninterface ExtendedHTMLElement extends HTMLElement {\n [recordedCSSSymbol]?: Array<string>;\n}\n\ninterface ExtendedCSSStyleSheet extends CSSStyleSheet {\n [recordedCSSSymbol]?: Array<string>;\n}\n\nfunction getContentFromStyleSheet(element: HTMLElement | CSSStyleSheet): string {\n let lines: Array<string>;\n\n if ('textContent' in element && element.textContent) {\n // Handle <style> elements with direct textContent\n lines = element.textContent.split('\\n').map((line) => line.trim());\n } else if (\n recordedCSSSymbol in element &&\n (element as ExtendedHTMLElement | ExtendedCSSStyleSheet)[recordedCSSSymbol]\n ) {\n lines = (element as ExtendedHTMLElement | ExtendedCSSStyleSheet)[\n recordedCSSSymbol\n ]!;\n } else if (\n 'sheet' in element &&\n element.sheet &&\n (element.sheet as CSSStyleSheet).cssRules\n ) {\n // Handle <style> or <link> elements that have a sheet property\n const cssRules = (element.sheet as CSSStyleSheet).cssRules as CSSRuleList;\n lines = Array.from(cssRules).map((rule: CSSRule) => rule.cssText);\n } else if ((element as CSSStyleSheet).cssRules) {\n // Handle CSSStyleSheet objects (including adoptedStyleSheets)\n const cssRules = (element as CSSStyleSheet).cssRules as CSSRuleList;\n lines = Array.from(cssRules).map((rule: CSSRule) => rule.cssText);\n } else {\n return '';\n }\n\n return lines.filter((line) => line && !COMMENT_PATTERN.test(line)).join('\\n');\n}\n\nfunction extractCSSBlocks(doc: Document): Array<CSSBlock> {\n const blocks: Array<CSSBlock> = [];\n const styleElements = doc.querySelectorAll(CSS_ELEMENTS_SELECTOR);\n\n for (const element of styleElements) {\n if (element.closest('happo-shadow-content')) {\n // Skip if element is inside a happo-shadow-content element. These need to\n // be scoped to the shadow root and cannot be part of the global styles.\n continue;\n }\n if (element.tagName === 'LINK') {\n // <link href>\n const href = (element as HTMLLinkElement).href || element.getAttribute('href');\n blocks.push({\n key: href || '',\n href: href || undefined,\n baseUrl: element.baseURI,\n });\n } else {\n const content = getContentFromStyleSheet(element as HTMLElement);\n // Create a hash so that we can dedupe equal styles\n const key = MD5.hashStr(content);\n blocks.push({ content, key, baseUrl: element.baseURI });\n }\n }\n\n for (const sheet of doc.adoptedStyleSheets || []) {\n const content = getContentFromStyleSheet(sheet);\n const key = MD5.hashStr(content);\n blocks.push({ key, content, baseUrl: sheet.href || document.baseURI });\n }\n return blocks;\n}\n\nfunction defaultHandleBase64Image({\n base64Url,\n element,\n}: {\n base64Url: string;\n element: HTMLImageElement;\n}): void {\n // Simply make the base64Url the src of the image\n element.src = base64Url;\n}\n\n// Extend HTMLElement to include custom properties\ninterface ExtendedHTMLElementWithBase64 extends HTMLElement {\n _base64Url?: string;\n}\n\nfunction getElementAssetUrls(\n element: Element,\n {\n handleBase64Image = defaultHandleBase64Image,\n }: {\n handleBase64Image?: (params: {\n base64Url: string;\n element: HTMLImageElement;\n }) => void;\n } = {},\n): Array<AssetUrl> {\n const allUrls: Array<AssetUrl> = [];\n const allElements = [element].concat(Array.from(element.querySelectorAll('*')));\n for (const element of allElements) {\n if (element.tagName === 'SCRIPT') {\n // skip script elements\n continue;\n }\n const srcset = element.getAttribute('srcset');\n const src = element.getAttribute('src');\n const imageHref =\n element.tagName.toLowerCase() === 'image' && element.getAttribute('href');\n const linkHref =\n element.tagName.toLowerCase() === 'link' &&\n element.getAttribute('rel') === 'stylesheet' &&\n element.getAttribute('href');\n\n const style = element.getAttribute('style');\n const base64Url = (element as ExtendedHTMLElementWithBase64)._base64Url;\n if (base64Url && element.tagName === 'IMG') {\n handleBase64Image({ base64Url, element: element as HTMLImageElement });\n }\n if (src) {\n allUrls.push({ url: src, baseUrl: element.baseURI });\n }\n if (srcset) {\n allUrls.push(\n ...parseSrcset(srcset).map((p) => ({\n url: p.url,\n baseUrl: element.baseURI,\n })),\n );\n }\n if (style) {\n allUrls.push(\n ...findCSSAssetUrls(style).map((url) => ({\n url,\n baseUrl: element.baseURI,\n })),\n );\n }\n if (imageHref) {\n allUrls.push({ url: imageHref, baseUrl: element.baseURI });\n }\n if (linkHref) {\n allUrls.push({ url: linkHref, baseUrl: element.baseURI });\n }\n }\n return allUrls.filter(({ url }) => !url.startsWith('data:'));\n}\n\nfunction copyStyles(sourceElement: HTMLElement, targetElement: HTMLElement): void {\n const computedStyle = globalThis.getComputedStyle(sourceElement);\n\n for (let i = 0; i < computedStyle.length; i++) {\n const key = computedStyle[i];\n if (!key) continue;\n const value = computedStyle.getPropertyValue(key);\n if (value !== '') {\n targetElement.style.setProperty(key, value);\n }\n }\n}\n\nfunction inlineCanvases(\n element: Element,\n {\n doc,\n responsiveInlinedCanvases = false,\n }: { doc: Document; responsiveInlinedCanvases?: boolean },\n): { element: Element; cleanup: () => void } {\n const canvases: Array<HTMLCanvasElement> = [];\n if (element.tagName === 'CANVAS') {\n canvases.push(element as HTMLCanvasElement);\n }\n canvases.push(...Array.from(element.querySelectorAll('canvas')));\n\n let newElement = element;\n const replacements: Array<{ from: HTMLCanvasElement; to: HTMLImageElement }> = [];\n for (const canvas of canvases) {\n try {\n const canvasImageBase64 = canvas.toDataURL('image/png');\n if (canvasImageBase64 === 'data:,') {\n continue;\n }\n const image = doc.createElement('img');\n\n const url = `/.happo-tmp/_inlined/${MD5.hashStr(canvasImageBase64)}.png`;\n image.src = url;\n (image as ExtendedHTMLElementWithBase64)._base64Url = canvasImageBase64;\n const style = canvas.getAttribute('style');\n if (style) {\n image.setAttribute('style', style);\n }\n const className = canvas.getAttribute('class');\n if (className) {\n image.setAttribute('class', className);\n }\n if (responsiveInlinedCanvases) {\n image.style.width = '100%';\n image.style.height = 'auto';\n } else {\n const width = canvas.getAttribute('width');\n const height = canvas.getAttribute('height');\n if (width) image.setAttribute('width', width);\n if (height) image.setAttribute('height', height);\n copyStyles(canvas, image);\n }\n canvas.replaceWith(image);\n if (canvas === element) {\n // We're inlining the element. Make sure we return the modified element.\n newElement = image;\n }\n replacements.push({ from: canvas, to: image });\n } catch (e) {\n if (e instanceof Error && e.name === 'SecurityError') {\n console.warn('[HAPPO] Failed to convert tainted canvas to PNG image');\n console.warn(e);\n } else {\n throw e;\n }\n }\n }\n\n function cleanup(): void {\n for (const { from, to } of replacements) {\n to.replaceWith(from);\n }\n }\n return { element: newElement, cleanup };\n}\n\nfunction registerScrollPositions(doc: Document): void {\n const elements = doc.body.querySelectorAll<HTMLElement | SVGElement>('*');\n for (const node of elements) {\n if (node.scrollTop !== 0 || node.scrollLeft !== 0) {\n node.dataset.happoScrollposition = `${node.scrollTop},${node.scrollLeft}`;\n }\n }\n}\n\nfunction registerCheckedInputs(doc: Document): void {\n const elements = doc.body.querySelectorAll(\n 'input[type=\"checkbox\"], input[type=\"radio\"]',\n );\n for (const node of elements) {\n const input = node as HTMLInputElement;\n if (input.checked) {\n input.setAttribute('checked', 'checked');\n } else {\n input.removeAttribute('checked');\n }\n }\n}\n\nfunction extractElementAttributes(el: Element): Record<string, string> {\n const result: Record<string, string> = {};\n for (const item of el.attributes) {\n result[item.name] = item.value;\n }\n return result;\n}\n\nfunction performDOMTransform({\n doc,\n selector,\n transform,\n element,\n}: {\n doc: Document;\n selector: string;\n transform: (element: Element, doc: Document) => Element;\n element: Element;\n}): (() => void) | undefined {\n const elements = Array.from(element.querySelectorAll(selector));\n if (!elements.length) {\n return;\n }\n const replacements: Array<{ from: Element; to: Element }> = [];\n for (const element of elements) {\n const replacement = transform(element, doc);\n replacements.push({ from: element, to: replacement });\n element.replaceWith(replacement);\n }\n return () => {\n for (const { from, to } of replacements) {\n to.replaceWith(from);\n }\n };\n}\n\nfunction transformToElementArray(\n elements: Element | Array<Element> | NodeListOf<Element>,\n): Array<Element> {\n // Check if 'elements' is already an array\n if (Array.isArray(elements)) {\n return elements;\n }\n // Check if 'elements' is a NodeList\n if (elements instanceof globalThis.window.NodeList) {\n return Array.from(elements);\n }\n // Check if 'elements' is a single Element\n if (elements instanceof globalThis.window.Element) {\n return [elements];\n }\n\n // Handle array-like objects\n if ((elements as NodeListOf<Element>).length !== undefined) {\n return Array.from(elements as NodeListOf<Element>);\n }\n\n return [elements];\n}\n\n/**\n * Injects all shadow roots from the given element.\n *\n * @param {HTMLElement} element\n */\nfunction inlineShadowRoots(element: Element): void {\n const elements = [element];\n\n const elementsToProcess: Array<Element> = [];\n while (elements.length) {\n const currentElement = elements.shift();\n if (!currentElement) continue;\n\n if (currentElement.shadowRoot) {\n elementsToProcess.unshift(currentElement); // LIFO so that leaf nodes are processed first\n }\n elements.unshift(...(Array.from(currentElement.children) as Array<HTMLElement>)); // LIFO so that leaf nodes are processed first\n }\n\n for (const element of elementsToProcess) {\n const hiddenElement = document.createElement('happo-shadow-content');\n hiddenElement.style.display = 'none';\n\n // Add adopted stylesheets as <style> elements\n if (element.shadowRoot) {\n for (const styleSheet of element.shadowRoot.adoptedStyleSheets) {\n const styleElement = document.createElement('style');\n styleElement.dataset.happoInlined = 'true';\n const styleContent = getContentFromStyleSheet(styleSheet);\n styleElement.textContent = styleContent;\n hiddenElement.append(styleElement);\n }\n\n hiddenElement.innerHTML += element.shadowRoot.innerHTML;\n element.append(hiddenElement);\n }\n }\n}\n\n/**\n * Adds data-happo-modal to the first modal dialog that is open, and removes it\n * from all other dialogs.\n */\nfunction markModalDialogs(element: Element): void {\n const cleanups = element.querySelectorAll<HTMLDialogElement>(\n 'dialog[data-happo-modal]',\n );\n for (const cleanup of cleanups) {\n delete cleanup.dataset.happoModal;\n }\n\n const openModal = element.querySelector<HTMLDialogElement>('dialog:modal[open]');\n if (!openModal) {\n return;\n }\n openModal.dataset.happoModal = 'true';\n}\n\nfunction findSvgElementsWithSymbols(element: Element): Array<SVGElement> {\n return [...element.ownerDocument.querySelectorAll('svg')].filter((svg) =>\n svg.querySelector('symbol'),\n );\n}\n\nexport default function takeDOMSnapshot({\n doc,\n element: oneOrMoreElements,\n responsiveInlinedCanvases = false,\n transformDOM,\n handleBase64Image,\n strategy = 'hoist',\n}: TakeDOMSnapshotOptions): DOMSnapshotResult {\n if (doc == null) {\n throw new Error('doc cannot be null or undefined');\n }\n if (doc.defaultView == null) {\n throw new Error('doc.defaultView cannot be null or undefined');\n }\n\n assertElement(oneOrMoreElements);\n\n const allElements = transformToElementArray(oneOrMoreElements);\n const htmlParts: Array<string> = [];\n const assetUrls: Array<AssetUrl> = [];\n for (const originalElement of allElements) {\n const { element, cleanup: canvasCleanup } = inlineCanvases(originalElement, {\n doc,\n responsiveInlinedCanvases,\n });\n\n registerScrollPositions(doc);\n registerCheckedInputs(doc);\n\n const transformCleanup = transformDOM\n ? performDOMTransform({\n doc,\n element,\n ...transformDOM,\n })\n : undefined;\n\n for (const scriptEl of element.querySelectorAll('script')) {\n if (scriptEl.parentNode) {\n scriptEl.remove();\n }\n }\n\n for (const e of doc.querySelectorAll<HTMLElement | SVGElement | MathMLElement>(\n '[data-happo-focus]',\n )) {\n delete e.dataset.happoFocus;\n }\n\n if (\n doc.activeElement &&\n doc.activeElement !== doc.body &&\n (doc.activeElement instanceof globalThis.window.HTMLElement ||\n doc.activeElement instanceof globalThis.window.SVGElement ||\n doc.activeElement instanceof globalThis.window.MathMLElement)\n ) {\n doc.activeElement.dataset.happoFocus = 'true';\n }\n\n inlineShadowRoots(element);\n markModalDialogs(element);\n\n assetUrls.push(\n ...getElementAssetUrls(\n element,\n handleBase64Image ? { handleBase64Image } : {},\n ),\n );\n\n if (strategy === 'hoist') {\n htmlParts.push(element.outerHTML);\n } else if (strategy === 'clip') {\n if (\n !(element instanceof HTMLElement) &&\n !(element instanceof SVGElement) &&\n !(element instanceof MathMLElement)\n ) {\n throw new TypeError(\n 'element does not support the dataset property, i.e. it is not an HTMLElement or SVGElement or MathMLElement',\n );\n }\n\n element.dataset.happoClip = 'true';\n htmlParts.push(doc.body.outerHTML);\n } else {\n throw new Error(`Unknown strategy: ${strategy}`);\n }\n\n if (strategy === 'hoist') {\n const svgElementsWithSymbols = findSvgElementsWithSymbols(element);\n for (const svgElement of svgElementsWithSymbols) {\n htmlParts.push(`<div style=\"display: none;\">${svgElement.outerHTML}</div>`);\n }\n }\n if (canvasCleanup) canvasCleanup();\n if (transformCleanup) transformCleanup();\n }\n\n const cssBlocks = extractCSSBlocks(doc);\n const htmlElementAttrs = extractElementAttributes(doc.documentElement);\n const bodyElementAttrs = extractElementAttributes(doc.body);\n\n // Remove our shadow content elements so that they don't affect the page\n for (const e of doc.querySelectorAll('happo-shadow-content')) e.remove();\n if (strategy === 'clip') {\n for (const e of doc.querySelectorAll<HTMLElement | SVGElement>(\n '[data-happo-clip]',\n )) {\n delete e.dataset.happoClip;\n }\n }\n\n return {\n html: htmlParts.join('\\n'),\n assetUrls,\n cssBlocks,\n htmlElementAttrs,\n bodyElementAttrs,\n };\n}\n", "import type { WindowHappo } from '../isomorphic/types.ts';\nimport takeDOMSnapshot from './takeDOMSnapshot.ts';\n\ndeclare global {\n var happo: WindowHappo | undefined;\n}\n\nconst happo: WindowHappo = {\n takeDOMSnapshot,\n};\n\nglobalThis.happo = happo;\n"],
5
+ "mappings": "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",
6
6
  "names": ["element"]
7
7
  }
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-WJEV6WIF.js";
3
+ } from "./chunk-PURYA5WA.js";
4
4
  import {
5
5
  ErrorWithStatusCode
6
- } from "./chunk-LYUNC7YA.js";
7
- import "./chunk-AQNTUXWB.js";
6
+ } from "./chunk-UGH275RL.js";
7
+ import "./chunk-375RAU4V.js";
8
8
 
9
9
  // src/network/cancelJob.ts
10
10
  async function cancelJob(status, message, config, { beforeSha, afterSha, link }, logger) {
@@ -38,4 +38,4 @@ async function cancelJob(status, message, config, { beforeSha, afterSha, link },
38
38
  export {
39
39
  cancelJob as default
40
40
  };
41
- //# sourceMappingURL=cancelJob-CTUTMG7N.js.map
41
+ //# sourceMappingURL=cancelJob-GOUNFBOJ.js.map
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var package_default = {
3
3
  name: "happo",
4
- version: "6.2.4",
4
+ version: "6.2.5",
5
5
  description: "Catch unexpected visual and accessibility changes and UI bugs",
6
6
  license: "MIT",
7
7
  repository: {
@@ -185,4 +185,4 @@ var package_default = {
185
185
  export {
186
186
  package_default
187
187
  };
188
- //# sourceMappingURL=chunk-AQNTUXWB.js.map
188
+ //# sourceMappingURL=chunk-375RAU4V.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../package.json"],
4
- "sourcesContent": ["{\n \"name\": \"happo\",\n \"version\": \"6.2.4\",\n \"description\": \"Catch unexpected visual and accessibility changes and UI bugs\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/happo/happo.git\"\n },\n \"bugs\": \"https://github.com/happo/happo/issues\",\n \"homepage\": \"https://happo.io\",\n \"bin\": {\n \"happo\": \"dist/cli/main.js\"\n },\n \"type\": \"module\",\n \"main\": \"./dist/config/index.js\",\n \"types\": \"./dist/config/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/config/index.d.ts\",\n \"default\": \"./dist/config/index.js\"\n },\n \"./cypress\": {\n \"types\": \"./dist/cypress/index.d.ts\",\n \"default\": \"./dist/cypress/index.js\"\n },\n \"./cypress/task\": {\n \"types\": \"./dist/cypress/task.d.ts\",\n \"default\": \"./dist/cypress/task.js\"\n },\n \"./playwright\": {\n \"types\": \"./dist/playwright/index.d.ts\",\n \"default\": \"./dist/playwright/index.js\"\n },\n \"./custom\": {\n \"types\": \"./dist/custom/index.d.ts\",\n \"default\": \"./dist/custom/index.js\"\n },\n \"./storybook/addon\": {\n \"types\": \"./dist/storybook/browser/addon.d.ts\",\n \"default\": \"./dist/storybook/browser/addon.js\"\n },\n \"./storybook/decorator\": {\n \"types\": \"./dist/storybook/browser/decorator.d.ts\",\n \"default\": \"./dist/storybook/browser/decorator.js\"\n },\n \"./storybook/preset\": {\n \"types\": \"./dist/storybook/preset.d.ts\",\n \"default\": \"./dist/storybook/preset.js\"\n },\n \"./storybook/register\": {\n \"types\": \"./dist/storybook/browser/register.d.ts\",\n \"default\": \"./dist/storybook/browser/register.js\"\n }\n },\n \"files\": [\n \"dist\",\n \"preset.js\"\n ],\n \"scripts\": {\n \"all\": \"node ./scripts/allchecks.ts\",\n \"build\": \"pnpm build:types && pnpm build:dist\",\n \"build:custom\": \"esbuild src/custom/__happo__/index.ts --bundle --format=iife --global-name=happoCustom --outfile=tmp/happo-custom/bundle.js --platform=browser --target=esnext\",\n \"build:dist\": \"./scripts/build.ts\",\n \"build:types\": \"pnpm tsc --pretty\",\n \"build:watch\": \"tsc --build --watch\",\n \"clean\": \"rm -rf dist tmp/tsc tmp/happo-custom\",\n \"lint\": \"eslint .\",\n \"prepublishOnly\": \"pnpm clean && pnpm build\",\n \"storybook:dev\": \"storybook dev --config-dir src/storybook/__tests__/storybook-app -p ${PORT:-6007}\",\n \"test\": \"node --env-file-if-exists=.env.local ./scripts/test.ts\",\n \"test:custom\": \"pnpm build:dist && pnpm build:custom && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.custom.config.ts\",\n \"test:cypress\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.cypress.config.ts e2e -- cypress run -C src/cypress/__cypress__/cypress.config.ts\",\n \"test:cypress:open\": \"cypress open -C src/cypress/__cypress__/cypress.config.ts\",\n \"test:playwright\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.playwright.config.ts e2e -- playwright test\",\n \"test:storybook\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.storybook.config.ts\",\n \"test:pages\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.pages.config.ts\",\n \"tsc\": \"tsc --build tsconfig.json\"\n },\n \"browserslist\": {\n \"node\": [\n \"node 22\"\n ],\n \"browser\": [\n \"last 2 Chrome major versions\",\n \"last 2 Firefox major versions\",\n \"last 2 Safari major versions\",\n \"last 2 Edge major versions\"\n ],\n \"isomorphic\": [\n \"node 22\",\n \"last 2 Chrome major versions\",\n \"last 2 Firefox major versions\",\n \"last 2 Safari major versions\",\n \"last 2 Edge major versions\"\n ]\n },\n \"prettier\": {\n \"printWidth\": 85,\n \"singleQuote\": true,\n \"trailingComma\": \"all\",\n \"arrowParens\": \"always\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.36.0\",\n \"@playwright/test\": \"^1.55.1\",\n \"@reporters/github\": \"^1.11.0\",\n \"@storybook/builder-vite\": \"^10.0.1\",\n \"@storybook/react-vite\": \"^10.0.1\",\n \"@types/async-retry\": \"^1.4.9\",\n \"@types/base64-stream\": \"^1.0.5\",\n \"@types/jsdom\": \"^27.0.0\",\n \"@types/mime-types\": \"^3.0.1\",\n \"@types/multiparty\": \"^4.2.1\",\n \"@types/node\": \"^24.9.1\",\n \"@types/react\": \"^19.2.0\",\n \"@types/react-dom\": \"^19.2.0\",\n \"@types/serve-handler\": \"^6.1.4\",\n \"cypress\": \"^15.5.0\",\n \"esbuild\": \"^0.27.0\",\n \"eslint\": \"^9.36.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-compat\": \"^6.0.2\",\n \"eslint-plugin-depend\": \"^1.3.1\",\n \"eslint-plugin-simple-import-sort\": \"^12.1.1\",\n \"eslint-plugin-unicorn\": \"^62.0.0\",\n \"jiti\": \"^2.6.0\",\n \"jsdom\": \"^27.0.0\",\n \"multiparty\": \"^4.2.3\",\n \"prettier\": \"^3.6.2\",\n \"react\": \"^19.2.0\",\n \"react-dom\": \"^19.2.0\",\n \"react-error-boundary\": \"^6.0.0\",\n \"serve-handler\": \"^6.1.6\",\n \"storybook\": \"^10.0.1\",\n \"typescript\": \"^5.9.2\",\n \"typescript-eslint\": \"^8.44.1\"\n },\n \"dependencies\": {\n \"async-retry\": \"^1.3.3\",\n \"base64-stream\": \"^1.0.0\",\n \"empathic\": \"^2.0.0\",\n \"fflate\": \"^0.8.2\",\n \"jose\": \"^6.1.0\",\n \"limit-concur\": \"^4.0.0\",\n \"mime-types\": \"^3.0.1\",\n \"srcset\": \"^5.0.2\"\n },\n \"storybook\": {\n \"displayName\": \"Happo\",\n \"icon\": \"https://happo.io/static/happo-hippo.png\",\n \"supportedFrameworks\": [\n \"angular\",\n \"ember\",\n \"html\",\n \"preact\",\n \"react\",\n \"react-native\",\n \"svelte\",\n \"vue\",\n \"web-components\"\n ],\n \"unsupportedFrameworks\": []\n },\n \"keywords\": [\n \"storybook-addon\",\n \"accessibility\",\n \"cypress\",\n \"playwright\",\n \"regression\",\n \"storybook\",\n \"test\",\n \"testing\",\n \"ui\",\n \"visual-regression\",\n \"visual\",\n \"vrt\"\n ],\n \"engines\": {\n \"node\": \"^22.18.0 || ^23.6.0 || >=24.0.0\"\n }\n}\n"],
4
+ "sourcesContent": ["{\n \"name\": \"happo\",\n \"version\": \"6.2.5\",\n \"description\": \"Catch unexpected visual and accessibility changes and UI bugs\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/happo/happo.git\"\n },\n \"bugs\": \"https://github.com/happo/happo/issues\",\n \"homepage\": \"https://happo.io\",\n \"bin\": {\n \"happo\": \"dist/cli/main.js\"\n },\n \"type\": \"module\",\n \"main\": \"./dist/config/index.js\",\n \"types\": \"./dist/config/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/config/index.d.ts\",\n \"default\": \"./dist/config/index.js\"\n },\n \"./cypress\": {\n \"types\": \"./dist/cypress/index.d.ts\",\n \"default\": \"./dist/cypress/index.js\"\n },\n \"./cypress/task\": {\n \"types\": \"./dist/cypress/task.d.ts\",\n \"default\": \"./dist/cypress/task.js\"\n },\n \"./playwright\": {\n \"types\": \"./dist/playwright/index.d.ts\",\n \"default\": \"./dist/playwright/index.js\"\n },\n \"./custom\": {\n \"types\": \"./dist/custom/index.d.ts\",\n \"default\": \"./dist/custom/index.js\"\n },\n \"./storybook/addon\": {\n \"types\": \"./dist/storybook/browser/addon.d.ts\",\n \"default\": \"./dist/storybook/browser/addon.js\"\n },\n \"./storybook/decorator\": {\n \"types\": \"./dist/storybook/browser/decorator.d.ts\",\n \"default\": \"./dist/storybook/browser/decorator.js\"\n },\n \"./storybook/preset\": {\n \"types\": \"./dist/storybook/preset.d.ts\",\n \"default\": \"./dist/storybook/preset.js\"\n },\n \"./storybook/register\": {\n \"types\": \"./dist/storybook/browser/register.d.ts\",\n \"default\": \"./dist/storybook/browser/register.js\"\n }\n },\n \"files\": [\n \"dist\",\n \"preset.js\"\n ],\n \"scripts\": {\n \"all\": \"node ./scripts/allchecks.ts\",\n \"build\": \"pnpm build:types && pnpm build:dist\",\n \"build:custom\": \"esbuild src/custom/__happo__/index.ts --bundle --format=iife --global-name=happoCustom --outfile=tmp/happo-custom/bundle.js --platform=browser --target=esnext\",\n \"build:dist\": \"./scripts/build.ts\",\n \"build:types\": \"pnpm tsc --pretty\",\n \"build:watch\": \"tsc --build --watch\",\n \"clean\": \"rm -rf dist tmp/tsc tmp/happo-custom\",\n \"lint\": \"eslint .\",\n \"prepublishOnly\": \"pnpm clean && pnpm build\",\n \"storybook:dev\": \"storybook dev --config-dir src/storybook/__tests__/storybook-app -p ${PORT:-6007}\",\n \"test\": \"node --env-file-if-exists=.env.local ./scripts/test.ts\",\n \"test:custom\": \"pnpm build:dist && pnpm build:custom && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.custom.config.ts\",\n \"test:cypress\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.cypress.config.ts e2e -- cypress run -C src/cypress/__cypress__/cypress.config.ts\",\n \"test:cypress:open\": \"cypress open -C src/cypress/__cypress__/cypress.config.ts\",\n \"test:playwright\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.playwright.config.ts e2e -- playwright test\",\n \"test:storybook\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.storybook.config.ts\",\n \"test:pages\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.pages.config.ts\",\n \"tsc\": \"tsc --build tsconfig.json\"\n },\n \"browserslist\": {\n \"node\": [\n \"node 22\"\n ],\n \"browser\": [\n \"last 2 Chrome major versions\",\n \"last 2 Firefox major versions\",\n \"last 2 Safari major versions\",\n \"last 2 Edge major versions\"\n ],\n \"isomorphic\": [\n \"node 22\",\n \"last 2 Chrome major versions\",\n \"last 2 Firefox major versions\",\n \"last 2 Safari major versions\",\n \"last 2 Edge major versions\"\n ]\n },\n \"prettier\": {\n \"printWidth\": 85,\n \"singleQuote\": true,\n \"trailingComma\": \"all\",\n \"arrowParens\": \"always\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.36.0\",\n \"@playwright/test\": \"^1.55.1\",\n \"@reporters/github\": \"^1.11.0\",\n \"@storybook/builder-vite\": \"^10.0.1\",\n \"@storybook/react-vite\": \"^10.0.1\",\n \"@types/async-retry\": \"^1.4.9\",\n \"@types/base64-stream\": \"^1.0.5\",\n \"@types/jsdom\": \"^27.0.0\",\n \"@types/mime-types\": \"^3.0.1\",\n \"@types/multiparty\": \"^4.2.1\",\n \"@types/node\": \"^24.9.1\",\n \"@types/react\": \"^19.2.0\",\n \"@types/react-dom\": \"^19.2.0\",\n \"@types/serve-handler\": \"^6.1.4\",\n \"cypress\": \"^15.5.0\",\n \"esbuild\": \"^0.27.0\",\n \"eslint\": \"^9.36.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-compat\": \"^6.0.2\",\n \"eslint-plugin-depend\": \"^1.3.1\",\n \"eslint-plugin-simple-import-sort\": \"^12.1.1\",\n \"eslint-plugin-unicorn\": \"^62.0.0\",\n \"jiti\": \"^2.6.0\",\n \"jsdom\": \"^27.0.0\",\n \"multiparty\": \"^4.2.3\",\n \"prettier\": \"^3.6.2\",\n \"react\": \"^19.2.0\",\n \"react-dom\": \"^19.2.0\",\n \"react-error-boundary\": \"^6.0.0\",\n \"serve-handler\": \"^6.1.6\",\n \"storybook\": \"^10.0.1\",\n \"typescript\": \"^5.9.2\",\n \"typescript-eslint\": \"^8.44.1\"\n },\n \"dependencies\": {\n \"async-retry\": \"^1.3.3\",\n \"base64-stream\": \"^1.0.0\",\n \"empathic\": \"^2.0.0\",\n \"fflate\": \"^0.8.2\",\n \"jose\": \"^6.1.0\",\n \"limit-concur\": \"^4.0.0\",\n \"mime-types\": \"^3.0.1\",\n \"srcset\": \"^5.0.2\"\n },\n \"storybook\": {\n \"displayName\": \"Happo\",\n \"icon\": \"https://happo.io/static/happo-hippo.png\",\n \"supportedFrameworks\": [\n \"angular\",\n \"ember\",\n \"html\",\n \"preact\",\n \"react\",\n \"react-native\",\n \"svelte\",\n \"vue\",\n \"web-components\"\n ],\n \"unsupportedFrameworks\": []\n },\n \"keywords\": [\n \"storybook-addon\",\n \"accessibility\",\n \"cypress\",\n \"playwright\",\n \"regression\",\n \"storybook\",\n \"test\",\n \"testing\",\n \"ui\",\n \"visual-regression\",\n \"visual\",\n \"vrt\"\n ],\n \"engines\": {\n \"node\": \"^22.18.0 || ^23.6.0 || >=24.0.0\"\n }\n}\n"],
5
5
  "mappings": ";AAAA;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,SAAW;AAAA,EACX,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,KAAO;AAAA,IACL,OAAS;AAAA,EACX;AAAA,EACA,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAS;AAAA,EACT,SAAW;AAAA,IACT,KAAK;AAAA,MACH,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,aAAa;AAAA,MACX,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,kBAAkB;AAAA,MAChB,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,gBAAgB;AAAA,MACd,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,YAAY;AAAA,MACV,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,qBAAqB;AAAA,MACnB,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,yBAAyB;AAAA,MACvB,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,sBAAsB;AAAA,MACpB,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,wBAAwB;AAAA,MACtB,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,OAAS;AAAA,IACP;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,KAAO;AAAA,IACP,OAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,eAAe;AAAA,IACf,eAAe;AAAA,IACf,OAAS;AAAA,IACT,MAAQ;AAAA,IACR,gBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,MAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,qBAAqB;AAAA,IACrB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,KAAO;AAAA,EACT;AAAA,EACA,cAAgB;AAAA,IACd,MAAQ;AAAA,MACN;AAAA,IACF;AAAA,IACA,SAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAY;AAAA,IACV,YAAc;AAAA,IACd,aAAe;AAAA,IACf,eAAiB;AAAA,IACjB,aAAe;AAAA,EACjB;AAAA,EACA,iBAAmB;AAAA,IACjB,cAAc;AAAA,IACd,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,2BAA2B;AAAA,IAC3B,yBAAyB;AAAA,IACzB,sBAAsB;AAAA,IACtB,wBAAwB;AAAA,IACxB,gBAAgB;AAAA,IAChB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,wBAAwB;AAAA,IACxB,SAAW;AAAA,IACX,SAAW;AAAA,IACX,QAAU;AAAA,IACV,0BAA0B;AAAA,IAC1B,wBAAwB;AAAA,IACxB,wBAAwB;AAAA,IACxB,oCAAoC;AAAA,IACpC,yBAAyB;AAAA,IACzB,MAAQ;AAAA,IACR,OAAS;AAAA,IACT,YAAc;AAAA,IACd,UAAY;AAAA,IACZ,OAAS;AAAA,IACT,aAAa;AAAA,IACb,wBAAwB;AAAA,IACxB,iBAAiB;AAAA,IACjB,WAAa;AAAA,IACb,YAAc;AAAA,IACd,qBAAqB;AAAA,EACvB;AAAA,EACA,cAAgB;AAAA,IACd,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,UAAY;AAAA,IACZ,QAAU;AAAA,IACV,MAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,QAAU;AAAA,EACZ;AAAA,EACA,WAAa;AAAA,IACX,aAAe;AAAA,IACf,MAAQ;AAAA,IACR,qBAAuB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,uBAAyB,CAAC;AAAA,EAC5B;AAAA,EACA,UAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-WJEV6WIF.js";
3
+ } from "./chunk-PURYA5WA.js";
4
4
 
5
5
  // src/network/createAsyncComparison.ts
6
6
  function assertResultIsCreateAsyncComparisonResult(result) {
@@ -56,4 +56,4 @@ async function createAsyncComparison(config, {
56
56
  export {
57
57
  createAsyncComparison
58
58
  };
59
- //# sourceMappingURL=chunk-AVYSZMPH.js.map
59
+ //# sourceMappingURL=chunk-FT5XBCZC.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  fetchWithRetry
3
- } from "./chunk-LYUNC7YA.js";
3
+ } from "./chunk-UGH275RL.js";
4
4
 
5
5
  // src/network/makeHappoAPIRequest.ts
6
6
  import { SignJWT } from "jose";
@@ -51,4 +51,4 @@ async function makeHappoAPIRequest({ url, path, method = "GET", formData, body }
51
51
  export {
52
52
  makeHappoAPIRequest
53
53
  };
54
- //# sourceMappingURL=chunk-WJEV6WIF.js.map
54
+ //# sourceMappingURL=chunk-PURYA5WA.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  package_default
3
- } from "./chunk-AQNTUXWB.js";
3
+ } from "./chunk-375RAU4V.js";
4
4
 
5
5
  // src/network/fetchWithRetry.ts
6
6
  import asyncRetry from "async-retry";
@@ -94,4 +94,4 @@ export {
94
94
  ErrorWithStatusCode,
95
95
  fetchWithRetry
96
96
  };
97
- //# sourceMappingURL=chunk-LYUNC7YA.js.map
97
+ //# sourceMappingURL=chunk-UGH275RL.js.map
@@ -0,0 +1,10 @@
1
+ import {
2
+ createAsyncComparison
3
+ } from "./chunk-FT5XBCZC.js";
4
+ import "./chunk-PURYA5WA.js";
5
+ import "./chunk-UGH275RL.js";
6
+ import "./chunk-375RAU4V.js";
7
+ export {
8
+ createAsyncComparison as default
9
+ };
10
+ //# sourceMappingURL=createAsyncComparison-VXTOVLKN.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-WJEV6WIF.js";
4
- import "./chunk-LYUNC7YA.js";
5
- import "./chunk-AQNTUXWB.js";
3
+ } from "./chunk-PURYA5WA.js";
4
+ import "./chunk-UGH275RL.js";
5
+ import "./chunk-375RAU4V.js";
6
6
 
7
7
  // src/network/createAsyncReport.ts
8
8
  function assertResultIsCreateAsyncReportResult(result) {
@@ -38,4 +38,4 @@ async function createAsyncReport(snapRequestIds, config, { afterSha, link, messa
38
38
  export {
39
39
  createAsyncReport as default
40
40
  };
41
- //# sourceMappingURL=createAsyncReport-KZXYSJIB.js.map
41
+ //# sourceMappingURL=createAsyncReport-3NIRYOEG.js.map