happo 6.2.6 → 6.3.0
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/main.js +4 -4
- package/dist/browser/main.js.map +3 -3
- package/dist/cli/cancelJob-LSNOE34P.js +10 -0
- package/dist/cli/{chunk-UBNAHFZ5.js → chunk-2TMK44N3.js} +2 -2
- package/dist/cli/{chunk-2GWYMCM5.js → chunk-3EXZUW2Z.js} +15 -11
- package/dist/cli/chunk-3EXZUW2Z.js.map +7 -0
- package/dist/cli/{chunk-4SMOBHQY.js → chunk-AR3AP6FT.js} +2 -2
- package/dist/cli/{chunk-HFWMNEW7.js → chunk-DJLG5MCW.js} +3 -3
- package/dist/cli/{chunk-Q3DT6FIT.js → chunk-HELH6UTI.js} +2 -2
- package/dist/cli/{chunk-Q3DT6FIT.js.map → chunk-HELH6UTI.js.map} +1 -1
- package/dist/cli/{chunk-56XY3V7T.js → chunk-O7N6QKIL.js} +2 -2
- package/dist/cli/createAsyncComparison-T7JOBG7A.js +10 -0
- package/dist/cli/{createAsyncReport-EAFZGNCW.js → createAsyncReport-EEY5VHG4.js} +4 -4
- package/dist/cli/getFlakes-H7UPZETQ.js +73 -0
- package/dist/cli/getFlakes-H7UPZETQ.js.map +7 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/main.js +186 -11
- package/dist/cli/main.js.map +2 -2
- package/dist/cli/package-TFI74YPA.js +7 -0
- package/dist/cli/{prepareSnapRequests-FQJAOJNF.js → prepareSnapRequests-7OHC5YSR.js} +4 -4
- package/dist/cli/startJob-ULCBWJ3I.js +10 -0
- package/dist/cli/telemetry.d.ts.map +1 -1
- package/dist/cli/{wrapper-LPL52GIF.js → wrapper-YN56WRXE.js} +7 -7
- package/dist/config/index.d.ts +43 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js.map +2 -2
- package/dist/config/loadConfig.d.ts.map +1 -1
- package/dist/cypress/index.js +3 -3
- package/dist/cypress/index.js.map +1 -1
- package/dist/cypress/task.js +45 -1
- package/dist/cypress/task.js.map +2 -2
- package/dist/network/createAsyncComparison.d.ts.map +1 -1
- package/dist/network/getFlakes.d.ts +39 -0
- package/dist/network/getFlakes.d.ts.map +1 -0
- package/dist/playwright/index.js +45 -1
- package/dist/playwright/index.js.map +2 -2
- package/package.json +1 -1
- package/dist/cli/cancelJob-JVBWGU62.js +0 -10
- package/dist/cli/chunk-2GWYMCM5.js.map +0 -7
- package/dist/cli/createAsyncComparison-IVFALQTJ.js +0 -10
- package/dist/cli/package-LZDJBDUK.js +0 -7
- package/dist/cli/startJob-ZYTK6OMK.js +0 -10
- /package/dist/cli/{cancelJob-JVBWGU62.js.map → cancelJob-LSNOE34P.js.map} +0 -0
- /package/dist/cli/{chunk-UBNAHFZ5.js.map → chunk-2TMK44N3.js.map} +0 -0
- /package/dist/cli/{chunk-4SMOBHQY.js.map → chunk-AR3AP6FT.js.map} +0 -0
- /package/dist/cli/{chunk-HFWMNEW7.js.map → chunk-DJLG5MCW.js.map} +0 -0
- /package/dist/cli/{chunk-56XY3V7T.js.map → chunk-O7N6QKIL.js.map} +0 -0
- /package/dist/cli/{createAsyncComparison-IVFALQTJ.js.map → createAsyncComparison-T7JOBG7A.js.map} +0 -0
- /package/dist/cli/{createAsyncReport-EAFZGNCW.js.map → createAsyncReport-EEY5VHG4.js.map} +0 -0
- /package/dist/cli/{package-LZDJBDUK.js.map → package-TFI74YPA.js.map} +0 -0
- /package/dist/cli/{prepareSnapRequests-FQJAOJNF.js.map → prepareSnapRequests-7OHC5YSR.js.map} +0 -0
- /package/dist/cli/{startJob-ZYTK6OMK.js.map → startJob-ULCBWJ3I.js.map} +0 -0
- /package/dist/cli/{wrapper-LPL52GIF.js.map → wrapper-YN56WRXE.js.map} +0 -0
package/dist/config/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/config/index.ts"],
|
|
4
|
-
"sourcesContent": ["import type { SkipItems } from '../storybook/isomorphic/types.ts';\n\nexport interface StorybookIntegration {\n type: 'storybook';\n\n /**\n * The directory containing the Storybook configuration\n */\n configDir?: string;\n\n /**\n * The directory containing the static files to serve\n */\n staticDir?: string;\n\n /**\n * The directory to output the static Storybook package to\n */\n outputDir?: string;\n\n /**\n * Whether to use a prebuilt Storybook package. If you use this option, make\n * sure that files are built to the outputDir.\n */\n usePrebuiltPackage?: boolean;\n\n /**\n * Items to skip when generating snapshots.\n *\n * Can be an async function that resolves to an array of `{component,\n * variant}`, or an array of `{component, variant}`.\n */\n skip?: SkipItems | (() => Promise<SkipItems>) | undefined;\n}\n\ninterface BaseE2EIntegration {\n /**\n * Whether to allow failures.\n */\n allowFailures?: boolean;\n\n /**\n * Whether to download and include all assets in the asset package. If false\n * (default), only local assets will be included. When true, even external\n * assets will be included.\n */\n downloadAllAssets?: boolean;\n}\n\ninterface CypressIntegration extends BaseE2EIntegration {\n type: 'cypress';\n}\n\ninterface PlaywrightIntegration extends BaseE2EIntegration {\n type: 'playwright';\n}\n\nexport type E2EIntegration = CypressIntegration | PlaywrightIntegration;\n\ninterface CustomIntegration {\n type: 'custom';\n\n /**\n * An async function that generates a custom package. Returns an object with\n * the path to the folder containing the custom files and the path to the\n * entry point file relative to the root directory.\n *\n * @example\n * { rootDir: 'dist/custom', entryPoint: 'index.js' }\n */\n build: () => Promise<{ rootDir: string; entryPoint: string }>;\n}\n\nexport interface Page {\n /**\n * URL of the page to screenshot\n *\n * Note: The URLs to the website need to be publicly available, otherwise\n * Happo workers won't be able to access the pages.\n */\n url: string;\n\n /**\n * Title of the page to screenshot\n *\n * This is used as the \"component\" identifier in Happo reports, so ensure\n * it is unique for each page.\n */\n title: string;\n\n /**\n * Wait for the content to appear on the page before taking the screenshot.\n */\n waitForContent?: string;\n\n /**\n * Wait for a condition to be true before taking the screenshot.\n */\n waitForSelector?: string;\n}\n\ninterface PagesIntegration {\n type: 'pages';\n\n /**\n * A list of pages to screenshot.\n */\n pages: Array<Page>;\n}\n\nexport interface Config {\n /**\n * Key used to authenticate with the Happo API. Never store this in plain\n * text.\n */\n apiKey?: string;\n\n /**\n * Secret used to authenticate with the Happo API. Never store this in plain\n * text.\n */\n apiSecret?: string;\n\n /**\n * The endpoint to use for the happo run. Defaults to `https://happo.io`\n */\n endpoint?: string;\n\n /**\n * The name of the project to associate the Happo run with. If not provided,\n * the default project will be used.\n */\n project?: string;\n\n /**\n * Use this to post Happo statuses as comments to your PR. This can be useful\n * if the Happo server doesn't have access to your GitHub repository.\n *\n * The default is `'https://api.github.com'`. If you are using GitHub\n * Enterprise, enter the URL to your local GitHub API here, such as\n * `'https://ghe.mycompany.zone/api/v3'` (the default for GHE installation is\n * for the API to be located at `/api/v3`).\n */\n githubApiUrl?: string;\n\n /**\n * Browsers to use when generating snapshots\n */\n targets: Record<string, Target>;\n\n /**\n * Type of integration to use\n *\n * - 'storybook': Use Storybook to generate snapshots\n * - 'e2e': Use Playwright or Cypress to generate snapshots\n * - 'custom': Use a custom JS bundle to generate snapshots\n *\n * - 'pages': Use a list of pages to generate snapshots\n */\n integration?:\n | StorybookIntegration\n | CypressIntegration\n | PlaywrightIntegration\n | CustomIntegration\n | PagesIntegration;\n}\n\ntype MobileSafariBrowserType = 'ios-safari' | 'ipad-safari';\ntype DesktopBrowserType = 'chrome' | 'firefox' | 'edge' | 'safari' | 'accessibility';\nexport type BrowserType = MobileSafariBrowserType | DesktopBrowserType;\n\ninterface BaseTarget {\n type: BrowserType;\n\n /**\n * Split the target into chunks to be run on multiple workers in parallel\n *\n * This adds some overhead, so if your test suite isn't large, using more than\n * one chunk might actually slow things down.\n */\n chunks?: number;\n\n /**\n * Override the default maximum height (5000px) used by Happo workers\n *\n * This is useful when taking screenshots of tall components or pages.\n *\n * Note: The maximum width defaults to the maximum height, so if you set\n * `maxHeight`, you may also want to set `maxWidth` at the same time.\n */\n maxHeight?: number;\n\n /**\n * Override the default maximum width used by Happo workers (defaults to\n * `maxHeight`, which defaults to 5000 pixels)\n *\n * This is useful when taking screenshots of wide components or pages.\n */\n maxWidth?: number;\n\n /**\n * Controls how Happo handles elements with the `data-happo-hide` attribute.\n * By default, elements with this attribute are made invisible. Use the value\n * `'ignore'` to make the content appear in screenshots but exclude it from\n * comparison.\n */\n hideBehavior?: 'ignore';\n\n /**\n * When set to `true`, this option allows you to add `data-happo-hover`,\n * `data-happo-focus`, and `data-happo-active` attributes to your DOM elements\n * and have Happo apply the corresponding `:hover`, `:focus`, or `:active`\n * styles.\n *\n * For example, if you have this markup:\n *\n * ```html\n * <button>Hover me</button>\n * <style>\n * button:hover {\n * background-color: blue;\n * }\n * </style>\n * ```\n *\n * To apply the hover style before taking the screenshot (making the button\n * blue), change the markup to:\n *\n * ```html\n * <button data-happo-hover>Hover me</button>\n * <style>\n * button:hover {\n * background-color: blue;\n * }\n * </style>\n * ```\n *\n * Similarly, you can add focus to elements using `data-happo-focus`:\n *\n * ```html\n * <input type=\"text\" data-happo-focus />\n * ```\n *\n * And add `data-happo-active` to elements to simulate the `:active` state:\n *\n * ```html\n * <button data-happo-active>Click me</button>\n * <style>\n * button:active {\n * background-color: red;\n * }\n * </style>\n * ```\n */\n applyPseudoClasses?: boolean;\n\n /**\n * Set `prefersColorScheme: 'dark'` or `prefersColorScheme: 'light'` to set\n * the color scheme preference in the browser.\n */\n prefersColorScheme?: 'light' | 'dark';\n\n /**\n * Set `allowPointerEvents: true` to allow pointer events in the browser\n *\n * By default Happo injects some CSS to prevent spurious hover effects caused\n * by the system mouse pointer. If you rely on mouse interaction in your tests\n * (e.g., when using Storybook interactive stories), you might see an error\n * like this in your logs:\n *\n * > Error: Unable to perform pointer interaction as the element has\n * > `pointer-events: none`\n *\n * In some cases, this error prevents the variant from being included in the\n * report.\n *\n * To resolve this, set `allowPointerEvents: true` to tell Happo to skip\n * injecting the CSS that disables pointer events.\n *\n * If you're interested in testing `:hover`, `:focus`, and `:active` states\n * with Happo, you may also want to use the `applyPseudoClasses` option.\n */\n allowPointerEvents?: boolean;\n\n /**\n * Set `freezeAnimations: 'last-frame'` to freeze the animations at the last\n * frame. This is the default behavior.\n *\n * Set `freezeAnimations: 'first-frame'` to freeze the animations at the first\n * frame.\n */\n freezeAnimations?: 'last-frame' | 'first-frame';\n}\n\ninterface MobileSafariTarget extends BaseTarget {\n type: MobileSafariBrowserType;\n}\n\ninterface DesktopTarget extends BaseTarget {\n type: DesktopBrowserType;\n\n /**\n * Set the viewport size for the browser\n */\n viewport: `${number}x${number}`;\n\n /**\n * By default, Happo makes the browser prefer reduced motion when rendering\n * the UI. Set `prefersReducedMotion: false` to disable this behavior.\n */\n prefersReducedMotion?: boolean;\n\n /**\n * Add additional headers to the outgoing requests from the browser. This is\n * useful if you for instance need to tell a CDN that the request originates\n * from a Happo run.\n */\n outgoingRequestHeaders?: Array<{ name: string; value: string }>;\n}\n\nexport type Target = MobileSafariTarget | DesktopTarget;\n\nexport interface TargetWithDefaults extends BaseTarget {\n viewport: `${number}x${number}`;\n __dynamic: boolean;\n prefersReducedMotion?: boolean;\n}\n\nexport interface ConfigWithDefaults extends Config {\n apiKey: NonNullable<Config['apiKey']>;\n apiSecret: NonNullable<Config['apiSecret']>;\n integration: NonNullable<Config['integration']>;\n endpoint: NonNullable<Config['endpoint']>;\n githubApiUrl: NonNullable<Config['githubApiUrl']>;\n targets: Record<string, TargetWithDefaults>;\n}\n\nexport function defineConfig(config: Config): Config {\n return config;\n}\n"],
|
|
5
|
-
"mappings": ";
|
|
4
|
+
"sourcesContent": ["import type { SkipItems } from '../storybook/isomorphic/types.ts';\n\nexport interface StorybookIntegration {\n type: 'storybook';\n\n /**\n * The directory containing the Storybook configuration\n */\n configDir?: string;\n\n /**\n * The directory containing the static files to serve\n */\n staticDir?: string;\n\n /**\n * The directory to output the static Storybook package to\n */\n outputDir?: string;\n\n /**\n * Whether to use a prebuilt Storybook package. If you use this option, make\n * sure that files are built to the outputDir.\n */\n usePrebuiltPackage?: boolean;\n\n /**\n * Items to skip when generating snapshots.\n *\n * Can be an async function that resolves to an array of `{component,\n * variant}`, or an array of `{component, variant}`.\n */\n skip?: SkipItems | (() => Promise<SkipItems>) | undefined;\n}\n\ninterface BaseE2EIntegration {\n /**\n * Whether to allow failures.\n */\n allowFailures?: boolean;\n\n /**\n * Whether to download and include all assets in the asset package. If false\n * (default), only local assets will be included. When true, even external\n * assets will be included.\n */\n downloadAllAssets?: boolean;\n}\n\ninterface CypressIntegration extends BaseE2EIntegration {\n type: 'cypress';\n}\n\ninterface PlaywrightIntegration extends BaseE2EIntegration {\n type: 'playwright';\n}\n\nexport type E2EIntegration = CypressIntegration | PlaywrightIntegration;\n\ninterface CustomIntegration {\n type: 'custom';\n\n /**\n * An async function that generates a custom package. Returns an object with\n * the path to the folder containing the custom files and the path to the\n * entry point file relative to the root directory.\n *\n * @example\n * { rootDir: 'dist/custom', entryPoint: 'index.js' }\n */\n build: () => Promise<{ rootDir: string; entryPoint: string }>;\n}\n\nexport interface Page {\n /**\n * URL of the page to screenshot\n *\n * Note: The URLs to the website need to be publicly available, otherwise\n * Happo workers won't be able to access the pages.\n */\n url: string;\n\n /**\n * Title of the page to screenshot\n *\n * This is used as the \"component\" identifier in Happo reports, so ensure\n * it is unique for each page.\n */\n title: string;\n\n /**\n * Wait for the content to appear on the page before taking the screenshot.\n */\n waitForContent?: string;\n\n /**\n * Wait for a condition to be true before taking the screenshot.\n */\n waitForSelector?: string;\n}\n\ninterface PagesIntegration {\n type: 'pages';\n\n /**\n * A list of pages to screenshot.\n */\n pages: Array<Page>;\n}\n\n/**\n * Settings for deep compare functionality\n */\nexport interface DeepCompareSettings {\n /**\n * Threshold for comparing images with the given diff algorithm (float between\n * 0 and 1). 1 means all differences are allowed. 0 means no differences are\n * allowed. A good starting value is 0.03 for color-delta and 0.01 for ssim.\n */\n compareThreshold: number;\n\n /**\n * Algorithm to use for diff comparison. Must be \"color-delta\" or \"ssim\".\n * Defaults to \"color-delta\" if not provided. Note that \"ssim\" is experimental\n * and may be removed in the future.\n */\n diffAlgorithm?: 'color-delta' | 'ssim';\n\n /**\n * Threshold for ignoring individual pixel differences, side-stepping the\n * compare threshold. Used relatively to the image size. E.g. a value of 0.01\n * means 1% of the pixels can be above the compare threshold. Use this option\n * if your screenshots contain images or graphics with sharp noise. It is not\n * recommended to use this option for other types of diffs. (float\n * between 0 and 1).\n */\n ignoreThreshold?: number;\n\n /**\n * Whether to ignore whitespace in the diff. If true, whitespace differences\n * will not be considered when comparing images. Whitespace is defined as a\n * vertical section in a screenshot containing a single solid color.\n */\n ignoreWhitespace?: boolean;\n\n /**\n * Whether to apply blur to the diff. This can be used to smooth out subtle\n * differences that would otherwise be above the compare threshold. This\n * should mainly be used when your screenshots have a high contrast and you\n * want to smooth out some of the sharpness that can otherwise cause flakiness.\n */\n applyBlur?: boolean;\n}\n\nexport interface Config {\n /**\n * Key used to authenticate with the Happo API. Never store this in plain\n * text.\n */\n apiKey?: string;\n\n /**\n * Secret used to authenticate with the Happo API. Never store this in plain\n * text.\n */\n apiSecret?: string;\n\n /**\n * The endpoint to use for the happo run. Defaults to `https://happo.io`\n */\n endpoint?: string;\n\n /**\n * The name of the project to associate the Happo run with. If not provided,\n * the default project will be used.\n */\n project?: string;\n\n /**\n * Use this to post Happo statuses as comments to your PR. This can be useful\n * if the Happo server doesn't have access to your GitHub repository.\n *\n * The default is `'https://api.github.com'`. If you are using GitHub\n * Enterprise, enter the URL to your local GitHub API here, such as\n * `'https://ghe.mycompany.zone/api/v3'` (the default for GHE installation is\n * for the API to be located at `/api/v3`).\n */\n githubApiUrl?: string;\n\n /**\n * Browsers to use when generating snapshots\n */\n targets: Record<string, Target>;\n\n /**\n * Type of integration to use\n *\n * - 'storybook': Use Storybook to generate snapshots\n * - 'e2e': Use Playwright or Cypress to generate snapshots\n * - 'custom': Use a custom JS bundle to generate snapshots\n *\n * - 'pages': Use a list of pages to generate snapshots\n */\n integration?:\n | StorybookIntegration\n | CypressIntegration\n | PlaywrightIntegration\n | CustomIntegration\n | PagesIntegration;\n\n /**\n * An object with settings for deep compare.\n */\n deepCompare?: DeepCompareSettings;\n}\n\ntype MobileSafariBrowserType = 'ios-safari' | 'ipad-safari';\ntype DesktopBrowserType = 'chrome' | 'firefox' | 'edge' | 'safari' | 'accessibility';\nexport type BrowserType = MobileSafariBrowserType | DesktopBrowserType;\n\ninterface BaseTarget {\n type: BrowserType;\n\n /**\n * Split the target into chunks to be run on multiple workers in parallel\n *\n * This adds some overhead, so if your test suite isn't large, using more than\n * one chunk might actually slow things down.\n */\n chunks?: number;\n\n /**\n * Override the default maximum height (5000px) used by Happo workers\n *\n * This is useful when taking screenshots of tall components or pages.\n *\n * Note: The maximum width defaults to the maximum height, so if you set\n * `maxHeight`, you may also want to set `maxWidth` at the same time.\n */\n maxHeight?: number;\n\n /**\n * Override the default maximum width used by Happo workers (defaults to\n * `maxHeight`, which defaults to 5000 pixels)\n *\n * This is useful when taking screenshots of wide components or pages.\n */\n maxWidth?: number;\n\n /**\n * Controls how Happo handles elements with the `data-happo-hide` attribute.\n * By default, elements with this attribute are made invisible. Use the value\n * `'ignore'` to make the content appear in screenshots but exclude it from\n * comparison.\n */\n hideBehavior?: 'ignore';\n\n /**\n * When set to `true`, this option allows you to add `data-happo-hover`,\n * `data-happo-focus`, and `data-happo-active` attributes to your DOM elements\n * and have Happo apply the corresponding `:hover`, `:focus`, or `:active`\n * styles.\n *\n * For example, if you have this markup:\n *\n * ```html\n * <button>Hover me</button>\n * <style>\n * button:hover {\n * background-color: blue;\n * }\n * </style>\n * ```\n *\n * To apply the hover style before taking the screenshot (making the button\n * blue), change the markup to:\n *\n * ```html\n * <button data-happo-hover>Hover me</button>\n * <style>\n * button:hover {\n * background-color: blue;\n * }\n * </style>\n * ```\n *\n * Similarly, you can add focus to elements using `data-happo-focus`:\n *\n * ```html\n * <input type=\"text\" data-happo-focus />\n * ```\n *\n * And add `data-happo-active` to elements to simulate the `:active` state:\n *\n * ```html\n * <button data-happo-active>Click me</button>\n * <style>\n * button:active {\n * background-color: red;\n * }\n * </style>\n * ```\n */\n applyPseudoClasses?: boolean;\n\n /**\n * Set `prefersColorScheme: 'dark'` or `prefersColorScheme: 'light'` to set\n * the color scheme preference in the browser.\n */\n prefersColorScheme?: 'light' | 'dark';\n\n /**\n * Set `allowPointerEvents: true` to allow pointer events in the browser\n *\n * By default Happo injects some CSS to prevent spurious hover effects caused\n * by the system mouse pointer. If you rely on mouse interaction in your tests\n * (e.g., when using Storybook interactive stories), you might see an error\n * like this in your logs:\n *\n * > Error: Unable to perform pointer interaction as the element has\n * > `pointer-events: none`\n *\n * In some cases, this error prevents the variant from being included in the\n * report.\n *\n * To resolve this, set `allowPointerEvents: true` to tell Happo to skip\n * injecting the CSS that disables pointer events.\n *\n * If you're interested in testing `:hover`, `:focus`, and `:active` states\n * with Happo, you may also want to use the `applyPseudoClasses` option.\n */\n allowPointerEvents?: boolean;\n\n /**\n * Set `freezeAnimations: 'last-frame'` to freeze the animations at the last\n * frame. This is the default behavior.\n *\n * Set `freezeAnimations: 'first-frame'` to freeze the animations at the first\n * frame.\n */\n freezeAnimations?: 'last-frame' | 'first-frame';\n}\n\ninterface MobileSafariTarget extends BaseTarget {\n type: MobileSafariBrowserType;\n}\n\ninterface DesktopTarget extends BaseTarget {\n type: DesktopBrowserType;\n\n /**\n * Set the viewport size for the browser\n */\n viewport: `${number}x${number}`;\n\n /**\n * By default, Happo makes the browser prefer reduced motion when rendering\n * the UI. Set `prefersReducedMotion: false` to disable this behavior.\n */\n prefersReducedMotion?: boolean;\n\n /**\n * Add additional headers to the outgoing requests from the browser. This is\n * useful if you for instance need to tell a CDN that the request originates\n * from a Happo run.\n */\n outgoingRequestHeaders?: Array<{ name: string; value: string }>;\n}\n\nexport type Target = MobileSafariTarget | DesktopTarget;\n\nexport interface TargetWithDefaults extends BaseTarget {\n viewport: `${number}x${number}`;\n __dynamic: boolean;\n prefersReducedMotion?: boolean;\n}\n\nexport interface ConfigWithDefaults extends Config {\n apiKey: NonNullable<Config['apiKey']>;\n apiSecret: NonNullable<Config['apiSecret']>;\n integration: NonNullable<Config['integration']>;\n endpoint: NonNullable<Config['endpoint']>;\n githubApiUrl: NonNullable<Config['githubApiUrl']>;\n targets: Record<string, TargetWithDefaults>;\n}\n\nexport function defineConfig(config: Config): Config {\n return config;\n}\n"],
|
|
5
|
+
"mappings": ";AAkYO,SAAS,aAAa,QAAwB;AACnD,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadConfig.d.ts","sourceRoot":"","sources":["../../src/config/loadConfig.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,KAAK,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"loadConfig.d.ts","sourceRoot":"","sources":["../../src/config/loadConfig.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,KAAK,EAAE,kBAAkB,EAA2C,MAAM,YAAY,CAAC;AAa9F,wBAAgB,cAAc,IAAI,MAAM,CAcvC;AA8ID,wBAAsB,cAAc,CAClC,cAAc,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC,EACpD,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAiI7B"}
|
package/dist/cypress/index.js
CHANGED
|
@@ -3,9 +3,9 @@ import {
|
|
|
3
3
|
} from "./chunk-RKK2MPML.js";
|
|
4
4
|
|
|
5
5
|
// src/browser/applyConstructedStylesPatch.ts
|
|
6
|
-
var recordedCSSSymbol =
|
|
7
|
-
var hasBrokenIndexesSymbol =
|
|
8
|
-
var isInstalledSymbol =
|
|
6
|
+
var recordedCSSSymbol = Symbol("recordedCssRules");
|
|
7
|
+
var hasBrokenIndexesSymbol = Symbol("hasBrokenIndexes");
|
|
8
|
+
var isInstalledSymbol = Symbol("isInstalled");
|
|
9
9
|
function isExtendedWindow(w) {
|
|
10
10
|
return "CSSStyleSheet" in w && typeof w.CSSStyleSheet === "function";
|
|
11
11
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
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
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, { isElementWithDataset, isIterableCollection } 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 (typeof e === 'object' && e !== null && 'name' in e && 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\n // Check if 'elements' is an iterable collection, like a NodeList\n if (isIterableCollection(elements)) {\n return Array.from(elements);\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 isElementWithDataset(doc.activeElement)\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 (!isElementWithDataset(element)) {\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", "export function isElementWithDataset(\n element: unknown,\n): element is HTMLElement | SVGElement | MathMLElement {\n if (typeof element !== 'object') {\n return false;\n }\n\n if (element == null) {\n return false;\n }\n\n if (!('dataset' in element)) {\n return false;\n }\n\n if (typeof element.dataset !== 'object') {\n return false;\n }\n\n if (element.dataset == null) {\n return false;\n }\n\n return true;\n}\n\nexport 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\n ? Array.from(originalSubject)\n : 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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",
|
|
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.
|
|
21
|
+
version: "6.3.0",
|
|
22
22
|
description: "Catch unexpected visual and accessibility changes and UI bugs",
|
|
23
23
|
license: "MIT",
|
|
24
24
|
repository: {
|
|
@@ -514,6 +514,44 @@ async function getFallbackApiToken(endpoint, environment, logger) {
|
|
|
514
514
|
}
|
|
515
515
|
return void 0;
|
|
516
516
|
}
|
|
517
|
+
function validateDeepCompareSettings(deepCompare, configFilePath) {
|
|
518
|
+
if (typeof deepCompare !== "object" || Array.isArray(deepCompare)) {
|
|
519
|
+
throw new TypeError(
|
|
520
|
+
`Invalid \`deepCompare\` in config file ${configFilePath}: must be an object, got: ${Array.isArray(deepCompare) ? "array" : typeof deepCompare}.`
|
|
521
|
+
);
|
|
522
|
+
}
|
|
523
|
+
const settings = deepCompare;
|
|
524
|
+
if (!("compareThreshold" in settings) || settings.compareThreshold === void 0) {
|
|
525
|
+
throw new TypeError(
|
|
526
|
+
`Invalid \`deepCompare\` in config file ${configFilePath}: \`compareThreshold\` is required.`
|
|
527
|
+
);
|
|
528
|
+
}
|
|
529
|
+
if (typeof settings.compareThreshold !== "number" || settings.compareThreshold < 0 || settings.compareThreshold > 1) {
|
|
530
|
+
throw new TypeError(
|
|
531
|
+
`Invalid \`deepCompare.compareThreshold\` in config file ${configFilePath}: must be a number between 0 and 1, got: ${JSON.stringify(settings.compareThreshold)}.`
|
|
532
|
+
);
|
|
533
|
+
}
|
|
534
|
+
if ("diffAlgorithm" in settings && settings.diffAlgorithm !== void 0 && (typeof settings.diffAlgorithm !== "string" || settings.diffAlgorithm !== "color-delta" && settings.diffAlgorithm !== "ssim")) {
|
|
535
|
+
throw new TypeError(
|
|
536
|
+
`Invalid \`deepCompare.diffAlgorithm\` in config file ${configFilePath}: must be "color-delta" or "ssim", got: ${JSON.stringify(settings.diffAlgorithm)}.`
|
|
537
|
+
);
|
|
538
|
+
}
|
|
539
|
+
if ("ignoreThreshold" in settings && settings.ignoreThreshold !== void 0 && (typeof settings.ignoreThreshold !== "number" || settings.ignoreThreshold < 0 || settings.ignoreThreshold > 1)) {
|
|
540
|
+
throw new TypeError(
|
|
541
|
+
`Invalid \`deepCompare.ignoreThreshold\` in config file ${configFilePath}: must be a number between 0 and 1, got: ${JSON.stringify(settings.ignoreThreshold)}.`
|
|
542
|
+
);
|
|
543
|
+
}
|
|
544
|
+
if ("ignoreWhitespace" in settings && settings.ignoreWhitespace !== void 0 && typeof settings.ignoreWhitespace !== "boolean") {
|
|
545
|
+
throw new TypeError(
|
|
546
|
+
`Invalid \`deepCompare.ignoreWhitespace\` in config file ${configFilePath}: must be a boolean, got: ${JSON.stringify(settings.ignoreWhitespace)}.`
|
|
547
|
+
);
|
|
548
|
+
}
|
|
549
|
+
if ("applyBlur" in settings && settings.applyBlur !== void 0 && typeof settings.applyBlur !== "boolean") {
|
|
550
|
+
throw new TypeError(
|
|
551
|
+
`Invalid \`deepCompare.applyBlur\` in config file ${configFilePath}: must be a boolean, got: ${JSON.stringify(settings.applyBlur)}.`
|
|
552
|
+
);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
517
555
|
async function loadConfigFile(configFilePath, environment, logger = console) {
|
|
518
556
|
try {
|
|
519
557
|
const stats = await fs.promises.stat(configFilePath);
|
|
@@ -600,6 +638,12 @@ async function loadConfigFile(configFilePath, environment, logger = console) {
|
|
|
600
638
|
target.freezeAnimations = target.freezeAnimations || "last-frame";
|
|
601
639
|
target.prefersReducedMotion = target.prefersReducedMotion ?? true;
|
|
602
640
|
}
|
|
641
|
+
if (config.deepCompare !== void 0 && config.deepCompare !== null) {
|
|
642
|
+
validateDeepCompareSettings(config.deepCompare, configFilePath);
|
|
643
|
+
if (!config.deepCompare.diffAlgorithm) {
|
|
644
|
+
config.deepCompare.diffAlgorithm = "color-delta";
|
|
645
|
+
}
|
|
646
|
+
}
|
|
603
647
|
const configWithDefaults = {
|
|
604
648
|
endpoint: DEFAULT_ENDPOINT,
|
|
605
649
|
githubApiUrl: "https://api.github.com",
|