happo 6.2.2 → 6.2.4
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.
- package/dist/browser/assertElement.d.ts +1 -1
- package/dist/browser/assertElement.d.ts.map +1 -1
- package/dist/browser/main.js +33 -9
- package/dist/browser/main.js.map +3 -3
- package/dist/cli/{cancelJob-GSKS46TB.js → cancelJob-CTUTMG7N.js} +4 -4
- package/dist/cli/{chunk-NGLSIV6L.js → chunk-AQNTUXWB.js} +4 -3
- package/dist/cli/chunk-AQNTUXWB.js.map +7 -0
- package/dist/cli/{chunk-55SEC3JJ.js → chunk-AVYSZMPH.js} +2 -2
- package/dist/cli/{chunk-ASKP4L7R.js → chunk-LYUNC7YA.js} +2 -2
- package/dist/cli/{chunk-JP3VGTB2.js → chunk-WJEV6WIF.js} +2 -2
- package/dist/cli/createAsyncComparison-OUBLWBXB.js +10 -0
- package/dist/cli/{createAsyncReport-NQDKCCIK.js → createAsyncReport-KZXYSJIB.js} +4 -4
- package/dist/cli/main.js +10 -10
- package/dist/cli/package-K7WMWOHI.js +7 -0
- package/dist/cli/{prepareSnapRequests-APMV2VBI.js → prepareSnapRequests-VH2P6JTO.js} +4 -4
- package/dist/cli/{startJob-2U53W3V6.js → startJob-NYURR3W4.js} +4 -4
- package/dist/cli/{wrapper-C5BC2R2A.js → wrapper-4XC6EZJZ.js} +5 -5
- package/dist/cypress/index.js +32 -8
- package/dist/cypress/index.js.map +2 -2
- package/dist/cypress/task.js +3 -2
- package/dist/cypress/task.js.map +2 -2
- package/dist/playwright/index.js +3 -2
- package/dist/playwright/index.js.map +2 -2
- package/package.json +3 -2
- package/preset.js +5 -0
- package/dist/cli/chunk-NGLSIV6L.js.map +0 -7
- package/dist/cli/createAsyncComparison-U2A5HP3C.js +0 -10
- package/dist/cli/package-4VJLMKE2.js +0 -7
- /package/dist/cli/{cancelJob-GSKS46TB.js.map → cancelJob-CTUTMG7N.js.map} +0 -0
- /package/dist/cli/{chunk-55SEC3JJ.js.map → chunk-AVYSZMPH.js.map} +0 -0
- /package/dist/cli/{chunk-ASKP4L7R.js.map → chunk-LYUNC7YA.js.map} +0 -0
- /package/dist/cli/{chunk-JP3VGTB2.js.map → chunk-WJEV6WIF.js.map} +0 -0
- /package/dist/cli/{createAsyncComparison-U2A5HP3C.js.map → createAsyncComparison-OUBLWBXB.js.map} +0 -0
- /package/dist/cli/{createAsyncReport-NQDKCCIK.js.map → createAsyncReport-KZXYSJIB.js.map} +0 -0
- /package/dist/cli/{package-4VJLMKE2.js.map → package-K7WMWOHI.js.map} +0 -0
- /package/dist/cli/{prepareSnapRequests-APMV2VBI.js.map → prepareSnapRequests-VH2P6JTO.js.map} +0 -0
- /package/dist/cli/{startJob-2U53W3V6.js.map → startJob-NYURR3W4.js.map} +0 -0
- /package/dist/cli/{wrapper-C5BC2R2A.js.map → wrapper-4XC6EZJZ.js.map} +0 -0
package/dist/cli/main.js
CHANGED
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
} from "./chunk-JTRP4JVC.js";
|
|
5
5
|
import {
|
|
6
6
|
fetchWithRetry
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-LYUNC7YA.js";
|
|
8
8
|
import {
|
|
9
9
|
package_default
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-AQNTUXWB.js";
|
|
11
11
|
|
|
12
12
|
// src/cli/index.ts
|
|
13
13
|
import path3 from "node:path";
|
|
@@ -1000,7 +1000,7 @@ function createReporter(opts = {}) {
|
|
|
1000
1000
|
|
|
1001
1001
|
// src/cli/index.ts
|
|
1002
1002
|
async function getVersion() {
|
|
1003
|
-
const packageJson = await import("./package-
|
|
1003
|
+
const packageJson = await import("./package-K7WMWOHI.js");
|
|
1004
1004
|
return packageJson.default.version;
|
|
1005
1005
|
}
|
|
1006
1006
|
function parseDashdashCommandParts(rawArgs) {
|
|
@@ -1190,10 +1190,10 @@ async function main(rawArgs = process.argv, logger = console) {
|
|
|
1190
1190
|
async function handleDefaultCommand(config, environment, logger) {
|
|
1191
1191
|
logger.log("Running happo tests...");
|
|
1192
1192
|
const [startJob, createAsyncComparison, createAsyncReport, prepareSnapRequests] = await Promise.all([
|
|
1193
|
-
(await import("./startJob-
|
|
1194
|
-
(await import("./createAsyncComparison-
|
|
1195
|
-
(await import("./createAsyncReport-
|
|
1196
|
-
(await import("./prepareSnapRequests-
|
|
1193
|
+
(await import("./startJob-NYURR3W4.js")).default,
|
|
1194
|
+
(await import("./createAsyncComparison-OUBLWBXB.js")).default,
|
|
1195
|
+
(await import("./createAsyncReport-KZXYSJIB.js")).default,
|
|
1196
|
+
(await import("./prepareSnapRequests-VH2P6JTO.js")).default
|
|
1197
1197
|
]);
|
|
1198
1198
|
await startJob(config, environment, logger);
|
|
1199
1199
|
try {
|
|
@@ -1226,7 +1226,7 @@ async function handleDefaultCommand(config, environment, logger) {
|
|
|
1226
1226
|
} catch (e) {
|
|
1227
1227
|
const message = e instanceof Error ? e.message : String(e);
|
|
1228
1228
|
logger.error(`${config.integration.type} run failed: ${message}`, e);
|
|
1229
|
-
const cancelJob = (await import("./cancelJob-
|
|
1229
|
+
const cancelJob = (await import("./cancelJob-CTUTMG7N.js")).default;
|
|
1230
1230
|
await cancelJob("failure", message, config, environment, logger);
|
|
1231
1231
|
process.exitCode = 1;
|
|
1232
1232
|
return;
|
|
@@ -1237,7 +1237,7 @@ async function handleFinalizeCommand(config, environment, logger) {
|
|
|
1237
1237
|
logger.log("Config:", config);
|
|
1238
1238
|
logger.log("Environment:", environment);
|
|
1239
1239
|
try {
|
|
1240
|
-
const finalizeAll = (await import("./wrapper-
|
|
1240
|
+
const finalizeAll = (await import("./wrapper-4XC6EZJZ.js")).finalizeAll;
|
|
1241
1241
|
await finalizeAll({ happoConfig: config, environment, logger });
|
|
1242
1242
|
} catch (e) {
|
|
1243
1243
|
logger.error(e instanceof Error ? e.message : String(e), e);
|
|
@@ -1266,7 +1266,7 @@ async function handleE2ECommand(config, environment, dashdashCommandParts, confi
|
|
|
1266
1266
|
logger.log("Config:", config);
|
|
1267
1267
|
logger.log("Environment:", environment);
|
|
1268
1268
|
logger.log("Dashdash command parts:", dashdashCommandParts);
|
|
1269
|
-
const runWithWrapper = (await import("./wrapper-
|
|
1269
|
+
const runWithWrapper = (await import("./wrapper-4XC6EZJZ.js")).default;
|
|
1270
1270
|
const exitCode = await runWithWrapper(
|
|
1271
1271
|
dashdashCommandParts,
|
|
1272
1272
|
config,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
makeHappoAPIRequest
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-WJEV6WIF.js";
|
|
4
|
+
import "./chunk-LYUNC7YA.js";
|
|
5
|
+
import "./chunk-AQNTUXWB.js";
|
|
6
6
|
|
|
7
7
|
// src/network/prepareSnapRequests.ts
|
|
8
8
|
import fs5 from "node:fs";
|
|
@@ -732,4 +732,4 @@ async function prepareSnapRequests(config) {
|
|
|
732
732
|
export {
|
|
733
733
|
prepareSnapRequests as default
|
|
734
734
|
};
|
|
735
|
-
//# sourceMappingURL=prepareSnapRequests-
|
|
735
|
+
//# sourceMappingURL=prepareSnapRequests-VH2P6JTO.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
makeHappoAPIRequest
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-WJEV6WIF.js";
|
|
4
|
+
import "./chunk-LYUNC7YA.js";
|
|
5
|
+
import "./chunk-AQNTUXWB.js";
|
|
6
6
|
|
|
7
7
|
// src/network/startJob.ts
|
|
8
8
|
function assertResultIsStartJobResult(result) {
|
|
@@ -37,4 +37,4 @@ async function startJob(config, { beforeSha, afterSha, link, message }, logger)
|
|
|
37
37
|
export {
|
|
38
38
|
startJob as default
|
|
39
39
|
};
|
|
40
|
-
//# sourceMappingURL=startJob-
|
|
40
|
+
//# sourceMappingURL=startJob-NYURR3W4.js.map
|
|
@@ -3,15 +3,15 @@ import {
|
|
|
3
3
|
} from "./chunk-JTRP4JVC.js";
|
|
4
4
|
import {
|
|
5
5
|
createAsyncComparison
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-AVYSZMPH.js";
|
|
7
7
|
import {
|
|
8
8
|
postGitHubComment
|
|
9
9
|
} from "./chunk-X4TE2VNY.js";
|
|
10
10
|
import {
|
|
11
11
|
makeHappoAPIRequest
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-WJEV6WIF.js";
|
|
13
|
+
import "./chunk-LYUNC7YA.js";
|
|
14
|
+
import "./chunk-AQNTUXWB.js";
|
|
15
15
|
|
|
16
16
|
// src/e2e/wrapper.ts
|
|
17
17
|
import { spawn } from "node:child_process";
|
|
@@ -237,4 +237,4 @@ export {
|
|
|
237
237
|
runWithWrapper as default,
|
|
238
238
|
finalizeAll
|
|
239
239
|
};
|
|
240
|
-
//# sourceMappingURL=wrapper-
|
|
240
|
+
//# sourceMappingURL=wrapper-4XC6EZJZ.js.map
|
package/dist/cypress/index.js
CHANGED
|
@@ -136,24 +136,48 @@ function applyConstructedStylesPatch(win = globalThis.window) {
|
|
|
136
136
|
import { parseSrcset } from "srcset";
|
|
137
137
|
|
|
138
138
|
// src/browser/assertElement.ts
|
|
139
|
-
function
|
|
139
|
+
function isIterableCollection(element) {
|
|
140
|
+
if (typeof element !== "object") {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
if (!("length" in element)) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
if (typeof element.length !== "number") {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
if (!("item" in element)) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
if (typeof element.item !== "function") {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
if (!(Symbol.iterator in element)) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
if (typeof element[Symbol.iterator] !== "function") {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
function assertElement(element) {
|
|
140
164
|
if (element == null) {
|
|
141
165
|
throw new Error("element cannot be null or undefined");
|
|
142
166
|
}
|
|
143
167
|
if (typeof element !== "object") {
|
|
144
168
|
throw new TypeError("element must be an object");
|
|
145
169
|
}
|
|
146
|
-
if (Array.isArray(element) || element
|
|
170
|
+
if (Array.isArray(element) || isIterableCollection(element)) {
|
|
147
171
|
for (const el of element) {
|
|
148
|
-
assertElement(el
|
|
172
|
+
assertElement(el);
|
|
149
173
|
}
|
|
150
174
|
return;
|
|
151
175
|
}
|
|
152
|
-
if ("nodeType" in element
|
|
153
|
-
throw new
|
|
176
|
+
if (!("nodeType" in element)) {
|
|
177
|
+
throw new TypeError("element must have a nodeType property");
|
|
154
178
|
}
|
|
155
|
-
if (
|
|
156
|
-
throw new
|
|
179
|
+
if (element.nodeType !== 1) {
|
|
180
|
+
throw new Error("element must have a nodeType of ELEMENT_NODE");
|
|
157
181
|
}
|
|
158
182
|
}
|
|
159
183
|
|
|
@@ -831,7 +855,7 @@ function takeDOMSnapshot({
|
|
|
831
855
|
if (doc.defaultView == null) {
|
|
832
856
|
throw new Error("doc.defaultView cannot be null or undefined");
|
|
833
857
|
}
|
|
834
|
-
assertElement(oneOrMoreElements
|
|
858
|
+
assertElement(oneOrMoreElements);
|
|
835
859
|
const allElements = transformToElementArray(oneOrMoreElements);
|
|
836
860
|
const htmlParts = [];
|
|
837
861
|
const assetUrls = [];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/browser/applyConstructedStylesPatch.ts", "../../src/browser/takeDOMSnapshot.ts", "../../src/browser/assertElement.ts", "../../src/browser/md5.ts", "../../src/cypress/chunked.ts", "../../src/cypress/index.ts"],
|
|
4
|
-
"sourcesContent": ["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", "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, doc.defaultView);\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", "/**\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 gt: typeof globalThis = globalThis.window,\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) || element instanceof gt.NodeList) {\n for (const el of element) {\n assertElement(el, gt);\n }\n return;\n }\n\n if ('nodeType' in element && element.nodeType !== gt.Node.ELEMENT_NODE) {\n throw new Error('element must have a nodeType of ELEMENT_NODE');\n }\n\n if (!(element instanceof gt.Element)) {\n throw new TypeError('element must be an Element instance');\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", "export default function chunked(\n string: string,\n charactersPerChunk: number,\n): Array<string> {\n if (string.length < charactersPerChunk) {\n // micro-optimization for small lists\n return [string];\n }\n const chunks = [];\n let i = 0;\n while (i < string.length) {\n chunks.push(string.slice(i, (i += charactersPerChunk)));\n }\n\n return chunks;\n}\n", "import applyConstructedStylesPatch, {\n isExtendedWindow,\n} from '../browser/applyConstructedStylesPatch.ts';\nimport takeDOMSnapshot from '../browser/takeDOMSnapshot.ts';\nimport type { TakeDOMSnapshotOptions } from '../isomorphic/types.ts';\nimport chunked from './chunked.ts';\n\ninterface HappoScreenshotOptions {\n component?: string;\n variant?: string;\n includeAllElements?: boolean;\n targets?: Array<string>;\n snapshotStrategy?: 'hoist' | 'clip';\n responsiveInlinedCanvases?: boolean;\n canvasChunkSize?: number;\n transformDOM?: {\n selector: string;\n transform: (element: Element, doc: Document) => Element;\n };\n\n /**\n * Options passed to the `cy.task` command\n */\n log?: boolean;\n timeout?: number;\n}\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Cypress {\n interface Chainable {\n happoScreenshot(options?: HappoScreenshotOptions): Chainable<Element>;\n }\n }\n}\n\nCypress.on('window:before:load', (win: Window) => {\n console.log('[Happo] Applying constructed styles patch');\n if (!isExtendedWindow(win)) {\n throw new TypeError('CSSStyleSheet is not supported in this browser');\n }\n applyConstructedStylesPatch(win);\n});\n\ninterface CypressConfig {\n responsiveInlinedCanvases: boolean;\n canvasChunkSize: number;\n}\n\nlet config: CypressConfig = {\n responsiveInlinedCanvases: false,\n canvasChunkSize: 200_000, // 800 Kb per chunk\n};\n\nexport const configure = (userConfig?: Partial<CypressConfig>): void => {\n config = { ...config, ...userConfig };\n};\n\nCypress.Commands.add(\n 'happoScreenshot',\n { prevSubject: true },\n (originalSubject: Array<Element>, options: HappoScreenshotOptions = {}) => {\n const {\n // `cy.state` is an internal command not exposed in the type definitions.\n // We use it here to get the full title of the current test.\n component = cy\n // @ts-expect-error - cy.state is not exposed in the type definitions\n .state('runnable')\n .fullTitle(),\n variant = 'default',\n responsiveInlinedCanvases,\n includeAllElements,\n transformDOM,\n targets,\n snapshotStrategy = 'hoist',\n log = false,\n timeout = 10_000,\n } = options;\n\n const doc = originalSubject[0]?.ownerDocument;\n if (!doc) {\n throw new Error('ownerDocument cannot be null or undefined');\n }\n\n const taskOptions: Partial<Cypress.Loggable & Cypress.Timeoutable> = {\n log,\n timeout,\n };\n\n const resInCan =\n typeof responsiveInlinedCanvases === 'boolean'\n ? responsiveInlinedCanvases\n : config.responsiveInlinedCanvases;\n\n const element = includeAllElements ? originalSubject : originalSubject[0];\n if (!element) {\n throw new Error('element cannot be null or undefined');\n }\n\n const properties: TakeDOMSnapshotOptions = {\n doc,\n element,\n responsiveInlinedCanvases: resInCan,\n strategy: snapshotStrategy,\n handleBase64Image: ({ base64Url }) => {\n const rawBase64 = base64Url.replace(/^data:image\\/png;base64,/, '');\n const chunks = chunked(rawBase64, config.canvasChunkSize);\n for (let i = 0; i < chunks.length; i++) {\n const base64Chunk = chunks[i];\n const isFirst = i === 0;\n const isLast = i === chunks.length - 1;\n cy.task(\n 'happoRegisterBase64Image',\n {\n base64Chunk,\n isFirst,\n isLast,\n },\n taskOptions,\n );\n }\n },\n };\n\n if (transformDOM) {\n properties.transformDOM = transformDOM;\n }\n\n const domSnapshot = takeDOMSnapshot(properties);\n\n cy.task(\n 'happoRegisterSnapshot',\n {\n timestamp: Date.now(),\n component,\n variant,\n targets,\n ...domSnapshot,\n },\n taskOptions,\n );\n },\n);\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["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", "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", "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", "export default function chunked(\n string: string,\n charactersPerChunk: number,\n): Array<string> {\n if (string.length < charactersPerChunk) {\n // micro-optimization for small lists\n return [string];\n }\n const chunks = [];\n let i = 0;\n while (i < string.length) {\n chunks.push(string.slice(i, (i += charactersPerChunk)));\n }\n\n return chunks;\n}\n", "import applyConstructedStylesPatch, {\n isExtendedWindow,\n} from '../browser/applyConstructedStylesPatch.ts';\nimport takeDOMSnapshot from '../browser/takeDOMSnapshot.ts';\nimport type { TakeDOMSnapshotOptions } from '../isomorphic/types.ts';\nimport chunked from './chunked.ts';\n\ninterface HappoScreenshotOptions {\n component?: string;\n variant?: string;\n includeAllElements?: boolean;\n targets?: Array<string>;\n snapshotStrategy?: 'hoist' | 'clip';\n responsiveInlinedCanvases?: boolean;\n canvasChunkSize?: number;\n transformDOM?: {\n selector: string;\n transform: (element: Element, doc: Document) => Element;\n };\n\n /**\n * Options passed to the `cy.task` command\n */\n log?: boolean;\n timeout?: number;\n}\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Cypress {\n interface Chainable {\n happoScreenshot(options?: HappoScreenshotOptions): Chainable<Element>;\n }\n }\n}\n\nCypress.on('window:before:load', (win: Window) => {\n console.log('[Happo] Applying constructed styles patch');\n if (!isExtendedWindow(win)) {\n throw new TypeError('CSSStyleSheet is not supported in this browser');\n }\n applyConstructedStylesPatch(win);\n});\n\ninterface CypressConfig {\n responsiveInlinedCanvases: boolean;\n canvasChunkSize: number;\n}\n\nlet config: CypressConfig = {\n responsiveInlinedCanvases: false,\n canvasChunkSize: 200_000, // 800 Kb per chunk\n};\n\nexport const configure = (userConfig?: Partial<CypressConfig>): void => {\n config = { ...config, ...userConfig };\n};\n\nCypress.Commands.add(\n 'happoScreenshot',\n { prevSubject: true },\n (originalSubject: Array<Element>, options: HappoScreenshotOptions = {}) => {\n const {\n // `cy.state` is an internal command not exposed in the type definitions.\n // We use it here to get the full title of the current test.\n component = cy\n // @ts-expect-error - cy.state is not exposed in the type definitions\n .state('runnable')\n .fullTitle(),\n variant = 'default',\n responsiveInlinedCanvases,\n includeAllElements,\n transformDOM,\n targets,\n snapshotStrategy = 'hoist',\n log = false,\n timeout = 10_000,\n } = options;\n\n const doc = originalSubject[0]?.ownerDocument;\n if (!doc) {\n throw new Error('ownerDocument cannot be null or undefined');\n }\n\n const taskOptions: Partial<Cypress.Loggable & Cypress.Timeoutable> = {\n log,\n timeout,\n };\n\n const resInCan =\n typeof responsiveInlinedCanvases === 'boolean'\n ? responsiveInlinedCanvases\n : config.responsiveInlinedCanvases;\n\n const element = includeAllElements ? originalSubject : originalSubject[0];\n if (!element) {\n throw new Error('element cannot be null or undefined');\n }\n\n const properties: TakeDOMSnapshotOptions = {\n doc,\n element,\n responsiveInlinedCanvases: resInCan,\n strategy: snapshotStrategy,\n handleBase64Image: ({ base64Url }) => {\n const rawBase64 = base64Url.replace(/^data:image\\/png;base64,/, '');\n const chunks = chunked(rawBase64, config.canvasChunkSize);\n for (let i = 0; i < chunks.length; i++) {\n const base64Chunk = chunks[i];\n const isFirst = i === 0;\n const isLast = i === chunks.length - 1;\n cy.task(\n 'happoRegisterBase64Image',\n {\n base64Chunk,\n isFirst,\n isLast,\n },\n taskOptions,\n );\n }\n },\n };\n\n if (transformDOM) {\n properties.transformDOM = transformDOM;\n }\n\n const domSnapshot = takeDOMSnapshot(properties);\n\n cy.task(\n 'happoRegisterSnapshot',\n {\n timestamp: Date.now(),\n component,\n variant,\n targets,\n ...domSnapshot,\n },\n taskOptions,\n );\n },\n);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["element"]
|
|
7
7
|
}
|
package/dist/cypress/task.js
CHANGED
|
@@ -18,7 +18,7 @@ import asyncRetry from "async-retry";
|
|
|
18
18
|
// package.json
|
|
19
19
|
var package_default = {
|
|
20
20
|
name: "happo",
|
|
21
|
-
version: "6.2.
|
|
21
|
+
version: "6.2.4",
|
|
22
22
|
description: "Catch unexpected visual and accessibility changes and UI bugs",
|
|
23
23
|
license: "MIT",
|
|
24
24
|
repository: {
|
|
@@ -72,7 +72,8 @@ var package_default = {
|
|
|
72
72
|
}
|
|
73
73
|
},
|
|
74
74
|
files: [
|
|
75
|
-
"dist"
|
|
75
|
+
"dist",
|
|
76
|
+
"preset.js"
|
|
76
77
|
],
|
|
77
78
|
scripts: {
|
|
78
79
|
all: "node ./scripts/allchecks.ts",
|