@chromatic-com/playwright 0.12.3 → 0.13.0-22011a2-20250519203755
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/.eslintrc.js +13 -1
- package/dist/bin/archive-storybook.js +3 -3
- package/dist/bin/archive-storybook.js.map +1 -1
- package/dist/bin/build-archive-storybook.js +3 -3
- package/dist/bin/build-archive-storybook.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/storybook-config/main.js +2 -2
- package/dist/storybook-config/main.js.map +1 -1
- package/dist/storybook-config/manager.js +1 -1
- package/dist/storybook-config/manager.js.map +1 -1
- package/dist/storybook-config/preview.d.mts +1 -262
- package/dist/storybook-config/preview.mjs +1 -1
- package/dist/storybook-config/preview.mjs.map +1 -1
- package/package.json +7 -7
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/makeTest.ts","../src/takeSnapshot.ts","../src/createResourceArchive.ts"],"names":["test","base","expect","join","readFileSync","dedent","rrweb","require","resolve","chromaticSnapshots","Map","takeSnapshot","page","nameOrTestInfo","maybeTestInfo","name","testId","Error","has","get","size","number","on","msg","logger","log","text","domSnapshot","evaluate","bufferedSnapshot","Buffer","from","JSON","stringify","set","idle","__name","networkTimeoutMs","DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS","globalNetworkTimerId","globalNetworkResolver","globalNetworkTimeout","Promise","setTimeout","warn","networkIdlePromise","waitForLoadState","finally","clearTimeout","race","createResourceArchive","networkTimeout","assetDomains","httpCredentials","cdpClient","context","newCDPSession","resourceArchiver","ResourceArchiver","watch","archive","performChromaticSnapshot","delay","diffIncludeAntiAliasing","diffThreshold","disableAutoSnapshot","forcedColors","pauseAnimationAtEnd","prefersReducedMotion","resourceArchiveTimeout","cropToViewport","ignoreSelectors","use","testInfo","project","trackRun","browser","browserType","completeArchive","resourceArchive","snapshots","chromaticStorybookParams","outputDir","writeTestResult","pageUrl","url","viewport","viewportSize","Object","fromEntries","trackComplete","delete","makeTest","extend","undefined","option","chromaticSnapshot","auto"],"mappings":"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","sourcesContent":["import { test as base, expect } from '@playwright/test';\n\nimport { makeTest } from './makeTest';\n\nexport const test = makeTest(base);\nexport { expect };\n\nexport { takeSnapshot } from './takeSnapshot';\nexport type { ChromaticConfig } from '@chromatic-com/shared-e2e';\n","import type {\n TestType,\n PlaywrightTestArgs,\n PlaywrightTestOptions,\n PlaywrightWorkerArgs,\n PlaywrightWorkerOptions,\n TestInfo,\n Page,\n} from '@playwright/test';\nimport type { ChromaticConfig } from '@chromatic-com/shared-e2e';\nimport {\n writeTestResult,\n trackComplete,\n trackRun,\n DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS,\n} from '@chromatic-com/shared-e2e';\nimport { join } from 'node:path';\nimport { chromaticSnapshots, takeSnapshot } from './takeSnapshot';\nimport { createResourceArchive } from './createResourceArchive';\n\nexport const performChromaticSnapshot = async (\n {\n page,\n delay,\n diffIncludeAntiAliasing,\n diffThreshold,\n disableAutoSnapshot,\n forcedColors,\n pauseAnimationAtEnd,\n prefersReducedMotion,\n resourceArchiveTimeout,\n assetDomains,\n cropToViewport,\n ignoreSelectors,\n }: ChromaticConfig & { page: Page },\n use: () => Promise<void>,\n testInfo: TestInfo\n) => {\n const { testId, project } = testInfo;\n const httpCredentials = project?.use?.httpCredentials;\n\n try {\n trackRun();\n\n // CDP only works in Chromium, so we only capture archives in Chromium.\n // We can later snapshot them in different browsers in the cloud.\n // TODO: I'm not sure if this is the best way to detect the browser version, but\n // it seems to work\n if (page.context().browser().browserType().name() !== 'chromium') {\n await use();\n return;\n }\n\n const completeArchive = await createResourceArchive({\n page,\n networkTimeout: resourceArchiveTimeout,\n assetDomains,\n httpCredentials,\n });\n await use();\n\n if (!disableAutoSnapshot) {\n await takeSnapshot(page, testInfo);\n }\n\n const resourceArchive = await completeArchive();\n const snapshots: Map<string, Buffer> = chromaticSnapshots.get(testId) || new Map();\n\n const chromaticStorybookParams = {\n ...(delay && { delay }),\n ...(diffIncludeAntiAliasing && { diffIncludeAntiAliasing }),\n ...(diffThreshold && { diffThreshold }),\n ...(forcedColors && { forcedColors }),\n ...(pauseAnimationAtEnd && { pauseAnimationAtEnd }),\n ...(prefersReducedMotion && { prefersReducedMotion }),\n ...(cropToViewport && { cropToViewport }),\n ...(ignoreSelectors && { ignoreSelectors }),\n };\n\n // TestInfo.outputDir gives us the test-specific subfolder (https://playwright.dev/docs/api/class-testconfig#test-config-output-dir);\n // we want to write one level above that\n const outputDir = join(testInfo.outputDir, '..');\n await writeTestResult(\n { ...testInfo, outputDir, pageUrl: page.url(), viewport: page.viewportSize() },\n Object.fromEntries(snapshots),\n resourceArchive,\n chromaticStorybookParams\n );\n\n trackComplete();\n } finally {\n // make sure we clear the value associated with this test ID, so the shared chromaticSnapshots object stays small\n chromaticSnapshots.delete(testId);\n }\n};\n\n// We do this slightly odd thing (makeTest) to avoid importing playwright multiple times when\n// linking this package. To avoid the main entry, you can:\n//\n// import { makeTest } from '@chromaui/test-archiver/src/playwright-api/makeTest';\n// import { takeSnapshot as snapshot } from '@chromaui/test-archiver/src/playwright-api/takeSnapshot';\nexport const makeTest = (\n base: TestType<\n PlaywrightTestArgs & PlaywrightTestOptions,\n PlaywrightWorkerArgs & PlaywrightWorkerOptions\n >\n) =>\n base.extend<ChromaticConfig & { chromaticSnapshot: void }>({\n // ChromaticConfig defaults\n delay: [undefined, { option: true }],\n diffIncludeAntiAliasing: [undefined, { option: true }],\n diffThreshold: [undefined, { option: true }],\n disableAutoSnapshot: [false, { option: true }],\n forcedColors: [undefined, { option: true }],\n pauseAnimationAtEnd: [undefined, { option: true }],\n prefersReducedMotion: [undefined, { option: true }],\n resourceArchiveTimeout: [DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS, { option: true }],\n assetDomains: [[], { option: true }],\n cropToViewport: [undefined, { option: true }],\n ignoreSelectors: [undefined, { option: true }],\n\n chromaticSnapshot: [\n performChromaticSnapshot,\n // ensures this fixture runs without having to be explicitly called (https://playwright.dev/docs/test-fixtures#automatic-fixtures)\n { auto: true },\n ],\n });\n","import type { Page, TestInfo } from '@playwright/test';\nimport { readFileSync } from 'fs';\nimport { dedent } from 'ts-dedent';\nimport type { serializedNodeWithId } from '@rrweb/types';\nimport { logger } from '@chromatic-com/shared-e2e';\n\nconst rrweb = readFileSync(require.resolve('@chromaui/rrweb-snapshot'), 'utf8');\n\n// top-level key is the test ID, next level key is the name of the snapshot (which we expect to be unique)\nexport const chromaticSnapshots: Map<string, Map<string, Buffer>> = new Map();\n\nasync function takeSnapshot(page: Page, testInfo: TestInfo): Promise<void>;\nasync function takeSnapshot(page: Page, name: string, testInfo: TestInfo): Promise<void>;\nasync function takeSnapshot(\n page: Page,\n nameOrTestInfo: string | TestInfo,\n maybeTestInfo?: TestInfo\n): Promise<void> {\n let name: string;\n let testId: string;\n if (typeof nameOrTestInfo === 'string') {\n if (!maybeTestInfo) throw new Error('Incorrect usage');\n testId = maybeTestInfo.testId;\n name = nameOrTestInfo;\n } else {\n testId = nameOrTestInfo.testId;\n const number = chromaticSnapshots.has(testId) ? chromaticSnapshots.get(testId).size + 1 : 1;\n name = `Snapshot #${number}`;\n }\n\n page.on('console', (msg) => {\n logger.log(`CONSOLE: \"${msg.text()}\"`);\n });\n\n // Serialize and capture the DOM\n const domSnapshot: serializedNodeWithId = await page.evaluate(dedent`\n ${rrweb};\n\n // this code was erroring the page.evaluate() when it was passed as a function to page.evaluate(),\n // so for now it is being passed as a string until that can be resolved.\n const doPostProcessing = (rrwebSnapshotInstance, documentToSnapshot) => {\n return new Promise((resolve) => {\n const domSnapshot = rrwebSnapshotInstance.snapshot(documentToSnapshot, { recordCanvas: true });\n // do some post-processing on the snapshot\n const toDataURL = async (url) => {\n // read contents of the blob URL\n const response = await fetch(url);\n const blob = await response.blob();\n return new Promise((resolveFileRead, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolveFileRead(reader.result);\n reader.onerror = reject;\n // convert the blob to base64 string\n reader.readAsDataURL(blob);\n });\n };\n\n const replaceBlobUrls = async (node) => {\n await Promise.all(\n node.childNodes.map(async (childNode) => {\n if (childNode.tagName === 'img' && childNode.attributes.src?.startsWith('blob:')) {\n const base64Url = await toDataURL(childNode.attributes.src);\n // eslint-disable-next-line no-param-reassign\n childNode.attributes.src = base64Url;\n }\n\n if (childNode.childNodes?.length) {\n await replaceBlobUrls(childNode);\n }\n })\n );\n };\n\n replaceBlobUrls(domSnapshot).then(() => {\n resolve(domSnapshot);\n });\n });\n };\n\n // page.evaluate returns the value of the function being evaluated. In this case, it means that\n // it is returning either the resolved value of the Promise or the return value of the call to\n // the snapshot function. See https://playwright.dev/docs/api/class-page#page-evaluate.\n if (typeof define === 'function' && define.amd) {\n // AMD support is detected, so we need to load rrwebSnapshot asynchronously\n new Promise((resolve) => {\n // eslint-disable-next-line import/no-dynamic-require, global-require\n require(['rrwebSnapshot'], (rrwebSnapshot) => {\n doPostProcessing(rrwebSnapshot, document).then((domSnapshot) => {\n resolve(domSnapshot);\n });\n });\n });\n } else {\n new Promise((resolve) => {\n doPostProcessing(rrwebSnapshot, document).then((domSnapshot) => {\n resolve(domSnapshot);\n }); \n });\n } \n `);\n\n const bufferedSnapshot = Buffer.from(JSON.stringify(domSnapshot));\n if (!chromaticSnapshots.has(testId)) {\n // map used so the snapshots are always in order\n chromaticSnapshots.set(testId, new Map());\n }\n chromaticSnapshots.get(testId).set(name, bufferedSnapshot);\n}\n\nexport { takeSnapshot };\n","import type { Page } from 'playwright';\nimport {\n ResourceArchiver,\n ResourceArchive,\n DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS,\n logger,\n HttpCredentials,\n} from '@chromatic-com/shared-e2e';\n\nconst idle = async (page: Page, networkTimeoutMs = DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS) => {\n let globalNetworkTimerId: null | ReturnType<typeof setTimeout> = null;\n let globalNetworkResolver: null | (() => void) = null;\n // XXX_jwir3: The way this works is as follows:\n // There are two promises created here. They wrap two separate timers, and we await on a race of both Promises.\n\n // The first promise wraps a global timeout, where all requests MUST complete before that timeout has passed.\n // If the timeout passes, an error is thrown. This promise can only throw errors, it cannot resolve successfully.\n const globalNetworkTimeout = new Promise<void>((resolve) => {\n globalNetworkResolver = resolve;\n\n globalNetworkTimerId = setTimeout(() => {\n logger.warn(`Global timeout of ${networkTimeoutMs}ms reached`);\n globalNetworkResolver();\n }, networkTimeoutMs);\n });\n\n // The second promise wraps a network idle timeout. This uses playwright's built-in functionality to detect when the network\n // is idle.\n const networkIdlePromise = page.waitForLoadState('networkidle').finally(() => {\n clearTimeout(globalNetworkTimerId);\n });\n\n await Promise.race([globalNetworkTimeout, networkIdlePromise]);\n};\n\nexport const createResourceArchive = async ({\n page,\n networkTimeout,\n assetDomains,\n httpCredentials,\n}: {\n page: Page;\n networkTimeout?: number;\n assetDomains?: string[];\n httpCredentials?: HttpCredentials;\n}): Promise<() => Promise<ResourceArchive>> => {\n const cdpClient = await page.context().newCDPSession(page);\n\n const resourceArchiver = new ResourceArchiver(cdpClient, assetDomains, httpCredentials);\n await resourceArchiver.watch();\n\n return async () => {\n await idle(page, networkTimeout ?? DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS);\n\n return resourceArchiver.archive;\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/makeTest.ts","../src/takeSnapshot.ts","../src/createResourceArchive.ts"],"names":["test","base","expect","join","readFileSync","dedent","rrweb","require","resolve","chromaticSnapshots","Map","takeSnapshot","page","nameOrTestInfo","maybeTestInfo","name","testId","Error","has","get","size","number","on","msg","logger","log","text","domSnapshot","evaluate","bufferedSnapshot","Buffer","from","JSON","stringify","set","idle","__name","networkTimeoutMs","DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS","globalNetworkTimerId","globalNetworkResolver","globalNetworkTimeout","Promise","setTimeout","warn","networkIdlePromise","waitForLoadState","finally","clearTimeout","race","createResourceArchive","networkTimeout","assetDomains","httpCredentials","cdpClient","context","newCDPSession","resourceArchiver","ResourceArchiver","watch","archive","performChromaticSnapshot","delay","diffIncludeAntiAliasing","diffThreshold","disableAutoSnapshot","forcedColors","pauseAnimationAtEnd","prefersReducedMotion","resourceArchiveTimeout","cropToViewport","ignoreSelectors","use","testInfo","project","trackRun","browser","browserType","completeArchive","resourceArchive","snapshots","chromaticStorybookParams","outputDir","writeTestResult","pageUrl","url","viewport","viewportSize","Object","fromEntries","trackComplete","delete","makeTest","extend","undefined","option","chromaticSnapshot","auto"],"mappings":"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","sourcesContent":["import { test as base, expect } from '@playwright/test';\n\nimport { makeTest } from './makeTest';\n\nexport const test = makeTest(base);\nexport { expect };\n\nexport { takeSnapshot } from './takeSnapshot';\nexport type { ChromaticConfig } from '@chromatic-com/shared-e2e';\n","import type {\n TestType,\n PlaywrightTestArgs,\n PlaywrightTestOptions,\n PlaywrightWorkerArgs,\n PlaywrightWorkerOptions,\n TestInfo,\n Page,\n} from '@playwright/test';\nimport type { ChromaticConfig } from '@chromatic-com/shared-e2e';\nimport {\n writeTestResult,\n trackComplete,\n trackRun,\n DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS,\n} from '@chromatic-com/shared-e2e';\nimport { join } from 'node:path';\nimport { chromaticSnapshots, takeSnapshot } from './takeSnapshot';\nimport { createResourceArchive } from './createResourceArchive';\n\nexport const performChromaticSnapshot = async (\n {\n page,\n delay,\n diffIncludeAntiAliasing,\n diffThreshold,\n disableAutoSnapshot,\n forcedColors,\n pauseAnimationAtEnd,\n prefersReducedMotion,\n resourceArchiveTimeout,\n assetDomains,\n cropToViewport,\n ignoreSelectors,\n }: ChromaticConfig & { page: Page },\n use: () => Promise<void>,\n testInfo: TestInfo\n) => {\n const { testId, project } = testInfo;\n const httpCredentials = project?.use?.httpCredentials;\n\n try {\n trackRun();\n\n // CDP only works in Chromium, so we only capture archives in Chromium.\n // We can later snapshot them in different browsers in the cloud.\n // TODO: I'm not sure if this is the best way to detect the browser version, but\n // it seems to work\n if (page.context().browser().browserType().name() !== 'chromium') {\n await use();\n return;\n }\n\n const completeArchive = await createResourceArchive({\n page,\n networkTimeout: resourceArchiveTimeout,\n assetDomains,\n httpCredentials,\n });\n await use();\n\n if (!disableAutoSnapshot) {\n await takeSnapshot(page, testInfo);\n }\n\n const resourceArchive = await completeArchive();\n const snapshots: Map<string, Buffer> = chromaticSnapshots.get(testId) || new Map();\n\n const chromaticStorybookParams = {\n ...(delay && { delay }),\n ...(diffIncludeAntiAliasing && { diffIncludeAntiAliasing }),\n ...(diffThreshold && { diffThreshold }),\n ...(forcedColors && { forcedColors }),\n ...(pauseAnimationAtEnd && { pauseAnimationAtEnd }),\n ...(prefersReducedMotion && { prefersReducedMotion }),\n ...(cropToViewport && { cropToViewport }),\n ...(ignoreSelectors && { ignoreSelectors }),\n };\n\n // TestInfo.outputDir gives us the test-specific subfolder (https://playwright.dev/docs/api/class-testconfig#test-config-output-dir);\n // we want to write one level above that\n const outputDir = join(testInfo.outputDir, '..');\n await writeTestResult(\n { ...testInfo, outputDir, pageUrl: page.url(), viewport: page.viewportSize() },\n Object.fromEntries(snapshots),\n resourceArchive,\n chromaticStorybookParams\n );\n\n trackComplete();\n } finally {\n // make sure we clear the value associated with this test ID, so the shared chromaticSnapshots object stays small\n chromaticSnapshots.delete(testId);\n }\n};\n\n// We do this slightly odd thing (makeTest) to avoid importing playwright multiple times when\n// linking this package. To avoid the main entry, you can:\n//\n// import { makeTest } from '@chromaui/test-archiver/src/playwright-api/makeTest';\n// import { takeSnapshot as snapshot } from '@chromaui/test-archiver/src/playwright-api/takeSnapshot';\nexport const makeTest = (\n base: TestType<\n PlaywrightTestArgs & PlaywrightTestOptions,\n PlaywrightWorkerArgs & PlaywrightWorkerOptions\n >\n) =>\n base.extend<ChromaticConfig & { chromaticSnapshot: void }>({\n // ChromaticConfig defaults\n delay: [undefined, { option: true }],\n diffIncludeAntiAliasing: [undefined, { option: true }],\n diffThreshold: [undefined, { option: true }],\n disableAutoSnapshot: [false, { option: true }],\n forcedColors: [undefined, { option: true }],\n pauseAnimationAtEnd: [undefined, { option: true }],\n prefersReducedMotion: [undefined, { option: true }],\n resourceArchiveTimeout: [DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS, { option: true }],\n assetDomains: [[], { option: true }],\n cropToViewport: [undefined, { option: true }],\n ignoreSelectors: [undefined, { option: true }],\n\n chromaticSnapshot: [\n performChromaticSnapshot,\n // ensures this fixture runs without having to be explicitly called (https://playwright.dev/docs/test-fixtures#automatic-fixtures)\n { auto: true },\n ],\n });\n","import type { Page, TestInfo } from '@playwright/test';\nimport { readFileSync } from 'fs';\nimport { dedent } from 'ts-dedent';\nimport type { serializedNodeWithId } from '@rrweb/types';\nimport { logger } from '@chromatic-com/shared-e2e';\n\nconst rrweb = readFileSync(require.resolve('@chromaui/rrweb-snapshot'), 'utf8');\n\n// top-level key is the test ID, next level key is the name of the snapshot (which we expect to be unique)\nexport const chromaticSnapshots: Map<string, Map<string, Buffer>> = new Map();\n\nasync function takeSnapshot(page: Page, testInfo: TestInfo): Promise<void>;\nasync function takeSnapshot(page: Page, name: string, testInfo: TestInfo): Promise<void>;\nasync function takeSnapshot(\n page: Page,\n nameOrTestInfo: string | TestInfo,\n maybeTestInfo?: TestInfo\n): Promise<void> {\n let name: string;\n let testId: string;\n if (typeof nameOrTestInfo === 'string') {\n if (!maybeTestInfo) throw new Error('Incorrect usage');\n testId = maybeTestInfo.testId;\n name = nameOrTestInfo;\n } else {\n testId = nameOrTestInfo.testId;\n const number = chromaticSnapshots.has(testId) ? chromaticSnapshots.get(testId).size + 1 : 1;\n name = `Snapshot #${number}`;\n }\n\n page.on('console', (msg) => {\n logger.log(`CONSOLE: \"${msg.text()}\"`);\n });\n\n // Serialize and capture the DOM\n const domSnapshot: serializedNodeWithId = await page.evaluate(dedent`\n ${rrweb};\n\n // this code was erroring the page.evaluate() when it was passed as a function to page.evaluate(),\n // so for now it is being passed as a string until that can be resolved.\n const doPostProcessing = (rrwebSnapshotInstance, documentToSnapshot) => {\n return new Promise((resolve) => {\n const domSnapshot = rrwebSnapshotInstance.snapshot(documentToSnapshot, { recordCanvas: true });\n // do some post-processing on the snapshot\n const toDataURL = async (url) => {\n // read contents of the blob URL\n const response = await fetch(url);\n const blob = await response.blob();\n return new Promise((resolveFileRead, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolveFileRead(reader.result);\n reader.onerror = reject;\n // convert the blob to base64 string\n reader.readAsDataURL(blob);\n });\n };\n\n const replaceBlobUrls = async (node) => {\n await Promise.all(\n node.childNodes.map(async (childNode) => {\n if (childNode.tagName === 'img' && childNode.attributes.src?.startsWith('blob:')) {\n const base64Url = await toDataURL(childNode.attributes.src);\n // eslint-disable-next-line no-param-reassign\n childNode.attributes.src = base64Url;\n }\n\n if (childNode.childNodes?.length) {\n await replaceBlobUrls(childNode);\n }\n })\n );\n };\n\n replaceBlobUrls(domSnapshot).then(() => {\n resolve(domSnapshot);\n });\n });\n };\n\n // page.evaluate returns the value of the function being evaluated. In this case, it means that\n // it is returning either the resolved value of the Promise or the return value of the call to\n // the snapshot function. See https://playwright.dev/docs/api/class-page#page-evaluate.\n if (typeof define === 'function' && define.amd) {\n // AMD support is detected, so we need to load rrwebSnapshot asynchronously\n new Promise((resolve) => {\n // eslint-disable-next-line import/no-dynamic-require, global-require\n require(['rrwebSnapshot'], (rrwebSnapshot) => {\n doPostProcessing(rrwebSnapshot, document).then((domSnapshot) => {\n resolve(domSnapshot);\n });\n });\n });\n } else {\n new Promise((resolve) => {\n doPostProcessing(rrwebSnapshot, document).then((domSnapshot) => {\n resolve(domSnapshot);\n }); \n });\n } \n `);\n\n const bufferedSnapshot = Buffer.from(JSON.stringify(domSnapshot));\n if (!chromaticSnapshots.has(testId)) {\n // map used so the snapshots are always in order\n chromaticSnapshots.set(testId, new Map());\n }\n chromaticSnapshots.get(testId).set(name, bufferedSnapshot);\n}\n\nexport { takeSnapshot };\n","import type { Page } from 'playwright';\nimport {\n ResourceArchiver,\n ResourceArchive,\n DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS,\n logger,\n HttpCredentials,\n} from '@chromatic-com/shared-e2e';\n\nconst idle = async (page: Page, networkTimeoutMs = DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS) => {\n let globalNetworkTimerId: null | ReturnType<typeof setTimeout> = null;\n let globalNetworkResolver: null | (() => void) = null;\n // XXX_jwir3: The way this works is as follows:\n // There are two promises created here. They wrap two separate timers, and we await on a race of both Promises.\n\n // The first promise wraps a global timeout, where all requests MUST complete before that timeout has passed.\n // If the timeout passes, an error is thrown. This promise can only throw errors, it cannot resolve successfully.\n const globalNetworkTimeout = new Promise<void>((resolve) => {\n globalNetworkResolver = resolve;\n\n globalNetworkTimerId = setTimeout(() => {\n logger.warn(`Global timeout of ${networkTimeoutMs}ms reached`);\n globalNetworkResolver();\n }, networkTimeoutMs);\n });\n\n // The second promise wraps a network idle timeout. This uses playwright's built-in functionality to detect when the network\n // is idle.\n const networkIdlePromise = page.waitForLoadState('networkidle').finally(() => {\n clearTimeout(globalNetworkTimerId);\n });\n\n await Promise.race([globalNetworkTimeout, networkIdlePromise]);\n};\n\nexport const createResourceArchive = async ({\n page,\n networkTimeout,\n assetDomains,\n httpCredentials,\n}: {\n page: Page;\n networkTimeout?: number;\n assetDomains?: string[];\n httpCredentials?: HttpCredentials;\n}): Promise<() => Promise<ResourceArchive>> => {\n const cdpClient = await page.context().newCDPSession(page);\n\n const resourceArchiver = new ResourceArchiver(cdpClient, assetDomains, httpCredentials);\n await resourceArchiver.watch();\n\n return async () => {\n await idle(page, networkTimeout ?? DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS);\n\n return resourceArchiver.archive;\n };\n};\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -9,7 +9,7 @@ import { Analytics } from '@segment/analytics-node';
|
|
|
9
9
|
import { dedent } from 'ts-dedent';
|
|
10
10
|
|
|
11
11
|
const require = createRequire(import.meta.url);
|
|
12
|
-
var da=Object.defineProperty;var s=(t,a)=>da(t,"name",{value:a,configurable:!0}),G=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(a,i)=>(typeof require<"u"?require:a)[i]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var fa=Object.create,U=Object.defineProperty,ha=Object.getOwnPropertyDescriptor,ga=Object.getOwnPropertyNames,ba=Object.getPrototypeOf,wa=Object.prototype.hasOwnProperty,ka=s((t,a,i)=>a in t?U(t,a,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[a]=i,"hi"),d=s((t,a)=>U(t,"name",{value:a,configurable:!0}),"o"),T=s((t,a)=>()=>(a||t((a={exports:{}}).exports,a),a.exports),"z"),ya=s((t,a,i,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let p of ga(a))!wa.call(t,p)&&p!==i&&U(t,p,{get:()=>a[p],enumerable:!(e=ha(a,p))||e.enumerable});return t},"gi"),Z=s((t,a,i)=>(i=t!=null?fa(ba(t)):{},ya(a||!t||!t.__esModule?U(i,"default",{value:t,enumerable:!0}):i,t)),"G"),b=s((t,a,i)=>(ka(t,typeof a!="symbol"?a+"":a,i),i),"d"),ja=T((t,a)=>{function i(){this._types=Object.create(null),this._extensions=Object.create(null);for(let e=0;e<arguments.length;e++)this.define(arguments[e]);this.define=this.define.bind(this),this.getType=this.getType.bind(this),this.getExtension=this.getExtension.bind(this);}s(i,"_"),d(i,"Mime"),i.prototype.define=function(e,p){for(let n in e){let c=e[n].map(function(o){return o.toLowerCase()});n=n.toLowerCase();for(let o=0;o<c.length;o++){let l=c[o];if(l[0]!=="*"){if(!p&&l in this._types)throw new Error('Attempt to change mapping for "'+l+'" extension from "'+this._types[l]+'" to "'+n+'". Pass `force=true` to allow this, otherwise remove "'+l+'" from the list of extensions for "'+n+'".');this._types[l]=n;}}if(p||!this._extensions[n]){let o=c[0];this._extensions[n]=o[0]!=="*"?o:o.substr(1);}}},i.prototype.getType=function(e){e=String(e);let p=e.replace(/^.*[/\\]/,"").toLowerCase(),n=p.replace(/^.*\./,"").toLowerCase(),c=p.length<e.length;return (n.length<p.length-1||!c)&&this._types[n]||null},i.prototype.getExtension=function(e){return e=/^\s*([^;\s]*)/.test(e)&&RegExp.$1,e&&this._extensions[e.toLowerCase()]||null},a.exports=i;}),za=T((t,a)=>{a.exports={"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["es","ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]};}),Sa=T((t,a)=>{a.exports={"application/prs.cww":["cww"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mapbox-vector-tile":["mvt"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-iwork-keynote-sffkey":["*key"],"application/x-iwork-numbers-sffnumbers":["*numbers"],"application/x-iwork-pages-sffpages":["*pages"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.sap.vds":["vds"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]};}),qa=T((t,a)=>{var i=ja();a.exports=new i(za(),Sa());}),Ea=T(t=>{var a=/\s*([^,]\S*[^,](?:\s+[^,]+)?)\s*(?:,|$)/,i=d((o,l,r)=>{if(o[r]=o[r]||{},o[r][l])throw new Error(`No more than one image candidate is allowed for a given descriptor: ${l}${r}`);o[r][l]=!0;},"duplicateDescriptorCheck"),e=d(o=>{if(o.fallback)throw new Error("Only one fallback image candidate is allowed");if(o.x[1])throw new Error("A fallback image is equivalent to a 1x descriptor, providing both is invalid.");o.fallback=!0;},"fallbackDescriptorDuplicateCheck"),p=d((o,l)=>{if(l.length===0)e(o);else if(l.length>1)throw new Error(`Image candidate may have no more than one descriptor, found ${l.length}: ${l.join(" ")}`)},"descriptorCountCheck"),n=d((o,l,r)=>{if(Number.isNaN(o))throw new TypeError(`${r||o} is not a valid number`);switch(l){case"w":{if(o<=0)throw new Error("Width descriptor must be greater than zero");if(!Number.isInteger(o))throw new TypeError("Width descriptor must be an integer");break}case"x":{if(o<=0)throw new Error("Pixel density descriptor must be greater than zero");break}case"h":throw new Error("Height descriptor is no longer allowed");default:throw new Error(`Invalid srcset descriptor: ${r}`)}},"validDescriptorCheck");t.parse=(o,{strict:l=!1}={})=>{let r=l?{}:void 0;return o.split(a).filter((m,f)=>f%2===1).map(m=>{let[f,...g]=m.trim().split(/\s+/),v={url:f};l&&p(r,g);for(let u of g){let x=u[u.length-1],h=Number.parseFloat(u.slice(0,-1));switch(l&&(n(h,x,u),i(r,h,x)),x){case"w":{v.width=h;break}case"h":{v.height=h;break}case"x":{v.density=h;break}}}return v})};var c=new Set(["width","height","density"]);t.stringify=(o,{strict:l=!1}={})=>{let r=l?{}:null;return o.map(m=>{if(!m.url){if(l)throw new Error("URL is required");return ""}let f=Object.keys(m).filter(v=>c.has(v));l&&p(r,f);let g=[m.url];for(let v of f){let u=m[v],x;switch(v){case"width":{x="w";break}case"height":{x="h";break}case"density":{x="x";break}}let h=`${u}${x}`;l&&(n(u,x),i(r,u,x)),g.push(h);}return g.join(" ")}).join(", ")};}),w=process.env.LOG?console:{log:(...t)=>{},warn:(...t)=>{}},N,Y=(N=class{constructor(a,i,e){b(this,"archive",{}),b(this,"client"),b(this,"assetDomains"),b(this,"firstUrl"),b(this,"httpCredentials"),this.client=a,this.assetDomains=(i||[]).map(p=>`https://${p}`),this.httpCredentials=e;}async watch(){this.client.on("Fetch.requestPaused",this.requestPaused.bind(this)),this.client.on("Fetch.authRequired",this.authRequired.bind(this)),await this.client.send("Fetch.enable",{handleAuthRequests:!0});}async clientSend(a,i,e){try{return await this.client.send(i,e)}catch(p){return w.log("Client error",a.url,p),this.archive[a.url]={error:p},null}}async authRequired({requestId:a,request:i}){await this.clientSend(i,"Fetch.continueWithAuth",{requestId:a,authChallengeResponse:{response:"ProvideCredentials",...this.httpCredentials}});}async requestPaused({requestId:a,request:i,responseStatusCode:e,responseStatusText:p,responseErrorReason:n,responseHeaders:c}){if(!i.method.match(/get/i)){await this.clientSend(i,"Fetch.continueRequest",{requestId:a});return}if(e===304){await this.clientSend(i,"Fetch.continueRequest",{requestId:a});return}let o=new URL(i.url);this.firstUrl??(this.firstUrl=o);let l=o.origin===this.firstUrl.origin||this.assetDomains.includes(o.origin);if(w.log("requestPaused",o.toString(),e||n?"response":"request",this.firstUrl.toString(),l),n){w.log(`Got response error: ${n}`),await this.clientSend(i,"Fetch.continueRequest",{requestId:a});return}if(e){await this.handleSuccessfulResponse({request:i,requestId:a,responseStatusCode:e,responseStatusText:p,responseHeaders:c},o,l);return}await this.clientSend(i,"Fetch.continueRequest",{requestId:a,interceptResponse:!0});}async handleSuccessfulResponse(a,i,e){let{request:p,requestId:n,responseStatusCode:c,responseStatusText:o,responseHeaders:l}=a;if([301,302,303,307,308].includes(c)){await this.clientSend(p,"Fetch.continueRequest",{requestId:n,interceptResponse:!0});return}let r=await this.clientSend(p,"Fetch.getResponseBody",{requestId:n});if(r===null)return;let{body:m,base64Encoded:f}=r,g=l.find(({name:u})=>u.toLowerCase()==="content-type"),v=i.toString()===this.firstUrl.toString();e&&!v&&(this.archive[p.url]={statusCode:c,statusText:o,body:Buffer.from(m,f?"base64":"utf8"),contentType:g?.value}),await this.clientSend(p,"Fetch.continueRequest",{requestId:n});}},s(N,"P"),N);d(Y,"ResourceArchiver");var X=Y;function L(t){existsSync(t)||mkdirSync(t,{recursive:!0});}s(L,"R");d(L,"ensureDir");async function P(t,a){return L(y.dirname(t)),writeFile(t,a,{mode:511})}s(P,"E");d(P,"outputFile");async function O(t,a){return P(t,JSON.stringify(a))}s(O,"O");d(O,"outputJSONFile");function aa(t){return createHash("shake256",{outputLength:2}).update(t).digest("hex")}s(aa,"zi");d(aa,"hash");var A=255;function D(t,a=A){let i=new TextEncoder,e=new TextDecoder,p=t.split("/"),n=p.pop();if(i.encode(n).byteLength<=a)return t;let c=aa(n),[o,...l]=n.split("."),r=i.encode(o),m=l.join("."),f=m.length===0?0:i.encode(m).byteLength+1,g=i.encode(c).byteLength+f,v=r.slice(0,a-g),u=[`${e.decode(v)}${c}`,m].filter(Boolean).join(".");return [...p,u].join("/")}s(D,"L");d(D,"truncateFileName");var Na=Z(qa()),Ca=["/index.json","/iframe.html","/index.html","/main.iframe.bundle.js","/runtime~main.iframe.bundle.js","/sb-preview/runtime.js"],C,ia=(C=class{constructor(a,i,e){b(this,"url"),b(this,"response"),b(this,"shortenedFileNameLength"),b(this,"pageUrl"),this.url=new URL(a),this.response=i,this.shortenedFileNameLength=250,this.pageUrl=new URL(e);}originalSrc(){return this.url.toString()}toFileSystemPath(){let a=this.url.pathname;return a=this.preserveExternalDomain(),a=this.ensureNonDirectory(a),a=this.encodeQueryString(a),a=this.truncateFileName(a),a=this.removeSpecialChars(a),a=this.renameReservedPathnames(a),a=this.addExtension(a),a}ensureNonDirectory(a){return a.endsWith("/")?`${a}index.html`:a}encodeQueryString(a){let i=this.url.search;if(!i)return a;let e=this.hash(i);return `${a}-${e}`}truncateFileName(a){let i=a.split("/"),e=[];return i.forEach((p,n)=>{let c=p;p.length>this.shortenedFileNameLength&&(c=p.substring(0,this.shortenedFileNameLength),w.log(`Chunk of filename '${p}' is too long. Shortening to '${c}'`)),e.push(c);}),`${a.startsWith("/")?"/":""}${y.join(...e)}`}removeSpecialChars(a){return a.replace(/[%]/g,"")}addExtension(a){if("error"in this.response)return a;let i=a;if(!y.extname(i)){let e=Na.default.getExtension(this.response.contentType)||"tmp";i=`${a}.${e}`;}return i}preserveExternalDomain(){return this.url.origin===this.pageUrl.origin?this.url.pathname:`/${encodeURIComponent(this.url.host)}/${this.url.pathname}`}hash(a){return createHash("md5").update(a).digest("hex")}renameReservedPathnames(a){if(this.url.origin===this.pageUrl.origin&&Ca.includes(a)){let i=this.hash(this.url.toString()),e=y.basename(a,y.extname(a));return `${y.dirname(a)}/${e}-${i}${y.extname(a)}`}return a}},s(C,"U"),C);d(ia,"ArchiveFile");var Ra=ia,E=(t=>(t[t.Document=0]="Document",t[t.DocumentType=1]="DocumentType",t[t.Element=2]="Element",t[t.Text=3]="Text",t[t.CDATA=4]="CDATA",t[t.Comment=5]="Comment",t))(E||{}),J=Z(Ea()),Ta=/url\((?!['"]?(?:data):)['"]?([^'")]*)['"]?\)/gi,R,ta=(R=class{constructor(a){if(b(this,"snapshot"),Buffer.isBuffer(a)){let i=a.toString("utf-8");this.snapshot=JSON.parse(i);}else this.snapshot=JSON.parse(a);}async mapAssetPaths(a){let i=await this.mapNode(this.snapshot,a);return JSON.stringify(i)}async mapNode(a,i){return a=this.mapNodeAttributes(a,i),a=this.mapTextElement(a,i),"childNodes"in a&&(a.childNodes=await Promise.all(a.childNodes.map(async e=>this.mapNode(e,i)))),a}mapNodeAttributes(a,i){if(a.type===E.Element){if(a.attributes.src){let e=a.attributes.src;i.has(e)&&(a.attributes.src=i.get(e));}if(a.attributes.style){let e=a.attributes.style,p=this.mapCssUrls(e,i);a.attributes.style=p;}if(a.attributes._cssText){let e=a.attributes._cssText,p=this.mapCssUrls(e,i);a.attributes._cssText=p;}if(["link","use"].includes(a.tagName)&&a.attributes.href){let e=a.attributes.href.split("#"),p=e[0];i.has(p)&&(e[0]=i.get(p),a.attributes.href=e.join("#"));}if(a.tagName==="img"&&a.attributes.srcset){let e=a.attributes.srcset,p=this.mapSrcsetUrls(e,i);p&&(a.attributes.src=p,delete a.attributes.srcset,delete a.attributes.sizes);}a.tagName==="picture"&&this.mapPictureElement(a,i);}return a}mapPictureElement(a,i){let e=a.childNodes.filter(this.isSourceElement).map(p=>J.default.parse(p.attributes?.srcset??"").map(n=>n.url)).flat().find(p=>i.has(p));if(e){a.childNodes=a.childNodes.filter(n=>!this.isSourceElement(n));let p=a.childNodes.find(n=>n.type===E.Element&&n.tagName==="img");p&&p.attributes&&(p.attributes.src=i.get(e));}}isSourceElement(a){return a.type===E.Element&&a.tagName==="source"}mapTextElement(a,i){if(a.type===E.Text&&a.isStyle&&a.textContent){let e=this.mapCssUrls(a.textContent,i);a.textContent=e;}return a}mapCssUrls(a,i){return a.replace(Ta,(e,p)=>{let n=e;return i.has(p)&&(n=e.replace(p,i.get(p))),n})}mapSrcsetUrls(a,i){let e=J.default.parse(a),p;return e.forEach(n=>{i.has(n.url)&&(p=i.get(n.url));}),p}},s(R,"W"),R);d(ta,"DOMSnapshot");var $a=ta;function ea(t){return `w${t.width}h${t.height}`}s(ea,"H");d(ea,"viewportToString");function Pa(t){let a=t.match(/w(\d+)h(\d+)/);return {width:Number(a[1]),height:Number(a[2])}}s(Pa,"_i");d(Pa,"parseViewport");var F=d(t=>t.toLowerCase().replace(/[ ’–—―′¿'`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi,"-").replace(/-+/g,"-").replace(/^-+/,"").replace(/-+$/,""),"sanitize"),Ua="snapshot.json";function _(t,a){let i=`${F(t)}-${F(a)}`,e=A-25;return D(i,e)}s(_,"A");d(_,"snapshotId");function pa(t,a){return [t,ea(a),Ua].join(".")}s(pa,"oi");d(pa,"snapshotFileName");var Oa="stories.json";function na(t){let a=[F(t),Oa].join("."),i=A-25;return D(a,i)}s(na,"li");d(na,"storiesFileName");function oa(t,a,i){return {title:t,stories:Object.keys(a).map(e=>({name:e,parameters:{server:{id:_(t,e)},chromatic:{...i}}}))}}s(oa,"si");d(oa,"createStories");async function I(t,a,i,e){let{titlePath:p,outputDir:n,pageUrl:c,viewport:o}=t,l=p.map(x=>x.replace(/\.(ts|js|mjs|cjs|tsx|jsx|cjsx|coffee)$/,"").replace(/\.(spec|test|cy)$/,"")).join("/"),r=join(n,"chromatic-archives"),m=join(r,"archive");await L(m),w.log(`Writing test results for "${l}"`);let f=new Map;await Promise.all(Object.entries(i).map(async([x,h])=>{if("error"in h)return;let j=new Ra(x,h,c),z=j.originalSrc(),q=j.toFileSystemPath();z!==q&&f.set(z,q),await P(join(m,q),h.body);})),await Promise.all(await Object.entries(a).map(async([x,h])=>{let j=await new $a(h).mapAssetPaths(f),z=pa(_(l,x),o);await P(join(m,z),j);}));let g=na(l),v=oa(l,a,e);await O(join(r,g),v);let u=Object.entries(i).filter(([,x])=>"error"in x);u.length>0&&(w.log(`Encountered ${u.length} errors archiving resources, writing to 'errors.json'`),await O(join(m,"errors.json"),{errors:Object.fromEntries(u)}));}s(I,"$a");d(I,"writeTestResult");var Fa=new Analytics({writeKey:process.env.SEGMENT_WRITE_KEY||"cwWhBWso2gwzyenW29CnCp30Kjz4DogE"}),La="@chromaui/test-archiver run";function B(t,a){Fa.track({userId:La,event:t,properties:a});}s(B,"di");d(B,"track");var K=!1;function M(t={}){K||(B("run",t),K=!0);}s(M,"Ra");d(M,"trackRun");var Q=!1;function W(t={}){Q||(B("complete",t),Q=!0);}s(W,"Oa");d(W,"trackComplete");var $=1e4;var _a=readFileSync(G.resolve("@chromaui/rrweb-snapshot"),"utf8"),k=new Map;async function H(t,a,i){let e,p;if(typeof a=="string"){if(!i)throw new Error("Incorrect usage");p=i.testId,e=a;}else p=a.testId,e=`Snapshot #${k.has(p)?k.get(p).size+1:1}`;t.on("console",o=>{w.log(`CONSOLE: "${o.text()}"`);});let n=await t.evaluate(dedent`
|
|
12
|
+
var da=Object.defineProperty;var s=(t,a)=>da(t,"name",{value:a,configurable:!0}),G=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(a,i)=>(typeof require<"u"?require:a)[i]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var fa=Object.create,U=Object.defineProperty,ha=Object.getOwnPropertyDescriptor,ga=Object.getOwnPropertyNames,ba=Object.getPrototypeOf,wa=Object.prototype.hasOwnProperty,ka=s((t,a,i)=>a in t?U(t,a,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[a]=i,"hi"),d=s((t,a)=>U(t,"name",{value:a,configurable:!0}),"o"),T=s((t,a)=>()=>(a||t((a={exports:{}}).exports,a),a.exports),"z"),ya=s((t,a,i,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let p of ga(a))!wa.call(t,p)&&p!==i&&U(t,p,{get:()=>a[p],enumerable:!(e=ha(a,p))||e.enumerable});return t},"gi"),Z=s((t,a,i)=>(i=t!=null?fa(ba(t)):{},ya(a||!t||!t.__esModule?U(i,"default",{value:t,enumerable:!0}):i,t)),"G"),b=s((t,a,i)=>(ka(t,typeof a!="symbol"?a+"":a,i),i),"d"),ja=T((t,a)=>{function i(){this._types=Object.create(null),this._extensions=Object.create(null);for(let e=0;e<arguments.length;e++)this.define(arguments[e]);this.define=this.define.bind(this),this.getType=this.getType.bind(this),this.getExtension=this.getExtension.bind(this);}s(i,"D"),d(i,"Mime"),i.prototype.define=function(e,p){for(let n in e){let c=e[n].map(function(o){return o.toLowerCase()});n=n.toLowerCase();for(let o=0;o<c.length;o++){let l=c[o];if(l[0]!=="*"){if(!p&&l in this._types)throw new Error('Attempt to change mapping for "'+l+'" extension from "'+this._types[l]+'" to "'+n+'". Pass `force=true` to allow this, otherwise remove "'+l+'" from the list of extensions for "'+n+'".');this._types[l]=n;}}if(p||!this._extensions[n]){let o=c[0];this._extensions[n]=o[0]!=="*"?o:o.substr(1);}}},i.prototype.getType=function(e){e=String(e);let p=e.replace(/^.*[/\\]/,"").toLowerCase(),n=p.replace(/^.*\./,"").toLowerCase(),c=p.length<e.length;return (n.length<p.length-1||!c)&&this._types[n]||null},i.prototype.getExtension=function(e){return e=/^\s*([^;\s]*)/.test(e)&&RegExp.$1,e&&this._extensions[e.toLowerCase()]||null},a.exports=i;}),za=T((t,a)=>{a.exports={"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["es","ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]};}),Sa=T((t,a)=>{a.exports={"application/prs.cww":["cww"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mapbox-vector-tile":["mvt"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-iwork-keynote-sffkey":["*key"],"application/x-iwork-numbers-sffnumbers":["*numbers"],"application/x-iwork-pages-sffpages":["*pages"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.sap.vds":["vds"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]};}),qa=T((t,a)=>{var i=ja();a.exports=new i(za(),Sa());}),Ea=T(t=>{var a=/\s*([^,]\S*[^,](?:\s+[^,]+)?)\s*(?:,|$)/,i=d((o,l,r)=>{if(o[r]=o[r]||{},o[r][l])throw new Error(`No more than one image candidate is allowed for a given descriptor: ${l}${r}`);o[r][l]=!0;},"duplicateDescriptorCheck"),e=d(o=>{if(o.fallback)throw new Error("Only one fallback image candidate is allowed");if(o.x[1])throw new Error("A fallback image is equivalent to a 1x descriptor, providing both is invalid.");o.fallback=!0;},"fallbackDescriptorDuplicateCheck"),p=d((o,l)=>{if(l.length===0)e(o);else if(l.length>1)throw new Error(`Image candidate may have no more than one descriptor, found ${l.length}: ${l.join(" ")}`)},"descriptorCountCheck"),n=d((o,l,r)=>{if(Number.isNaN(o))throw new TypeError(`${r||o} is not a valid number`);switch(l){case"w":{if(o<=0)throw new Error("Width descriptor must be greater than zero");if(!Number.isInteger(o))throw new TypeError("Width descriptor must be an integer");break}case"x":{if(o<=0)throw new Error("Pixel density descriptor must be greater than zero");break}case"h":throw new Error("Height descriptor is no longer allowed");default:throw new Error(`Invalid srcset descriptor: ${r}`)}},"validDescriptorCheck");t.parse=(o,{strict:l=!1}={})=>{let r=l?{}:void 0;return o.split(a).filter((m,f)=>f%2===1).map(m=>{let[f,...g]=m.trim().split(/\s+/),v={url:f};l&&p(r,g);for(let u of g){let x=u[u.length-1],h=Number.parseFloat(u.slice(0,-1));switch(l&&(n(h,x,u),i(r,h,x)),x){case"w":{v.width=h;break}case"h":{v.height=h;break}case"x":{v.density=h;break}}}return v})};var c=new Set(["width","height","density"]);t.stringify=(o,{strict:l=!1}={})=>{let r=l?{}:null;return o.map(m=>{if(!m.url){if(l)throw new Error("URL is required");return ""}let f=Object.keys(m).filter(v=>c.has(v));l&&p(r,f);let g=[m.url];for(let v of f){let u=m[v],x;switch(v){case"width":{x="w";break}case"height":{x="h";break}case"density":{x="x";break}}let h=`${u}${x}`;l&&(n(u,x),i(r,u,x)),g.push(h);}return g.join(" ")}).join(", ")};}),w=process.env.LOG?console:{log:()=>{},warn:()=>{}},N,Y=(N=class{constructor(a,i,e){b(this,"archive",{}),b(this,"client"),b(this,"assetDomains"),b(this,"firstUrl"),b(this,"httpCredentials"),this.client=a,this.assetDomains=(i||[]).map(p=>`https://${p}`),this.httpCredentials=e;}async watch(){this.client.on("Fetch.requestPaused",this.requestPaused.bind(this)),this.client.on("Fetch.authRequired",this.authRequired.bind(this)),await this.client.send("Fetch.enable",{handleAuthRequests:!0});}async clientSend(a,i,e){try{return await this.client.send(i,e)}catch(p){return w.log("Client error",a.url,p),this.archive[a.url]={error:p},null}}async authRequired({requestId:a,request:i}){await this.clientSend(i,"Fetch.continueWithAuth",{requestId:a,authChallengeResponse:{response:"ProvideCredentials",...this.httpCredentials}});}async requestPaused({requestId:a,request:i,responseStatusCode:e,responseStatusText:p,responseErrorReason:n,responseHeaders:c}){if(!i.method.match(/get/i)){await this.clientSend(i,"Fetch.continueRequest",{requestId:a});return}if(e===304){await this.clientSend(i,"Fetch.continueRequest",{requestId:a});return}let o=new URL(i.url);this.firstUrl??(this.firstUrl=o);let l=o.origin===this.firstUrl.origin||this.assetDomains.includes(o.origin);if(w.log("requestPaused",o.toString(),e||n?"response":"request",this.firstUrl.toString(),l),n){w.log(`Got response error: ${n}`),await this.clientSend(i,"Fetch.continueRequest",{requestId:a});return}if(e){await this.handleSuccessfulResponse({request:i,requestId:a,responseStatusCode:e,responseStatusText:p,responseHeaders:c},o,l);return}await this.clientSend(i,"Fetch.continueRequest",{requestId:a,interceptResponse:!0});}async handleSuccessfulResponse(a,i,e){let{request:p,requestId:n,responseStatusCode:c,responseStatusText:o,responseHeaders:l}=a;if([301,302,303,307,308].includes(c)){await this.clientSend(p,"Fetch.continueRequest",{requestId:n,interceptResponse:!0});return}let r=await this.clientSend(p,"Fetch.getResponseBody",{requestId:n});if(r===null)return;let{body:m,base64Encoded:f}=r,g=l.find(({name:u})=>u.toLowerCase()==="content-type"),v=i.toString()===this.firstUrl.toString();e&&!v&&(this.archive[p.url]={statusCode:c,statusText:o,body:Buffer.from(m,f?"base64":"utf8"),contentType:g?.value}),await this.clientSend(p,"Fetch.continueRequest",{requestId:n});}},s(N,"P"),N);d(Y,"ResourceArchiver");var X=Y;function L(t){existsSync(t)||mkdirSync(t,{recursive:!0});}s(L,"R");d(L,"ensureDir");async function P(t,a){return L(y.dirname(t)),writeFile(t,a,{mode:511})}s(P,"E");d(P,"outputFile");async function O(t,a){return P(t,JSON.stringify(a))}s(O,"O");d(O,"outputJSONFile");function aa(t){return createHash("shake256",{outputLength:2}).update(t).digest("hex")}s(aa,"zi");d(aa,"hash");var A=255;function D(t,a=A){let i=new TextEncoder,e=new TextDecoder,p=t.split("/"),n=p.pop();if(i.encode(n).byteLength<=a)return t;let c=aa(n),[o,...l]=n.split("."),r=i.encode(o),m=l.join("."),f=m.length===0?0:i.encode(m).byteLength+1,g=i.encode(c).byteLength+f,v=r.slice(0,a-g),u=[`${e.decode(v)}${c}`,m].filter(Boolean).join(".");return [...p,u].join("/")}s(D,"L");d(D,"truncateFileName");var Na=Z(qa()),Ca=["/index.json","/iframe.html","/index.html","/main.iframe.bundle.js","/runtime~main.iframe.bundle.js","/sb-preview/runtime.js"],C,ia=(C=class{constructor(a,i,e){b(this,"url"),b(this,"response"),b(this,"shortenedFileNameLength"),b(this,"pageUrl"),this.url=new URL(a),this.response=i,this.shortenedFileNameLength=250,this.pageUrl=new URL(e);}originalSrc(){return this.url.toString()}toFileSystemPath(){let a=this.url.pathname;return a=this.preserveExternalDomain(),a=this.ensureNonDirectory(a),a=this.encodeQueryString(a),a=this.truncateFileName(a),a=this.removeSpecialChars(a),a=this.renameReservedPathnames(a),a=this.addExtension(a),a}ensureNonDirectory(a){return a.endsWith("/")?`${a}index.html`:a}encodeQueryString(a){let i=this.url.search;if(!i)return a;let e=this.hash(i);return `${a}-${e}`}truncateFileName(a){let i=a.split("/"),e=[];return i.forEach(p=>{let n=p;p.length>this.shortenedFileNameLength&&(n=p.substring(0,this.shortenedFileNameLength),w.log(`Chunk of filename '${p}' is too long. Shortening to '${n}'`)),e.push(n);}),`${a.startsWith("/")?"/":""}${y.join(...e)}`}removeSpecialChars(a){return a.replace(/[%]/g,"")}addExtension(a){if("error"in this.response)return a;let i=a;if(!y.extname(i)){let e=Na.default.getExtension(this.response.contentType)||"tmp";i=`${a}.${e}`;}return i}preserveExternalDomain(){return this.url.origin===this.pageUrl.origin?this.url.pathname:`/${encodeURIComponent(this.url.host)}/${this.url.pathname}`}hash(a){return createHash("md5").update(a).digest("hex")}renameReservedPathnames(a){if(this.url.origin===this.pageUrl.origin&&Ca.includes(a)){let i=this.hash(this.url.toString()),e=y.basename(a,y.extname(a));return `${y.dirname(a)}/${e}-${i}${y.extname(a)}`}return a}},s(C,"U"),C);d(ia,"ArchiveFile");var Ra=ia,E=(t=>(t[t.Document=0]="Document",t[t.DocumentType=1]="DocumentType",t[t.Element=2]="Element",t[t.Text=3]="Text",t[t.CDATA=4]="CDATA",t[t.Comment=5]="Comment",t))(E||{}),J=Z(Ea()),Ta=/url\((?!['"]?(?:data):)['"]?([^'")]*)['"]?\)/gi,R,ta=(R=class{constructor(a){if(b(this,"snapshot"),Buffer.isBuffer(a)){let i=a.toString("utf-8");this.snapshot=JSON.parse(i);}else this.snapshot=JSON.parse(a);}async mapAssetPaths(a){let i=await this.mapNode(this.snapshot,a);return JSON.stringify(i)}async mapNode(a,i){return a=this.mapNodeAttributes(a,i),a=this.mapTextElement(a,i),"childNodes"in a&&(a.childNodes=await Promise.all(a.childNodes.map(async e=>this.mapNode(e,i)))),a}mapNodeAttributes(a,i){if(a.type===E.Element){if(a.attributes.src){let e=a.attributes.src;i.has(e)&&(a.attributes.src=i.get(e));}if(a.attributes.style){let e=a.attributes.style,p=this.mapCssUrls(e,i);a.attributes.style=p;}if(a.attributes._cssText){let e=a.attributes._cssText,p=this.mapCssUrls(e,i);a.attributes._cssText=p;}if(["link","use"].includes(a.tagName)&&a.attributes.href){let e=a.attributes.href.split("#"),p=e[0];i.has(p)&&(e[0]=i.get(p),a.attributes.href=e.join("#"));}if(a.tagName==="img"&&a.attributes.srcset){let e=a.attributes.srcset,p=this.mapSrcsetUrls(e,i);p&&(a.attributes.src=p,delete a.attributes.srcset,delete a.attributes.sizes);}a.tagName==="picture"&&this.mapPictureElement(a,i);}return a}mapPictureElement(a,i){let e=a.childNodes.filter(this.isSourceElement).map(p=>J.default.parse(p.attributes?.srcset??"").map(n=>n.url)).flat().find(p=>i.has(p));if(e){a.childNodes=a.childNodes.filter(n=>!this.isSourceElement(n));let p=a.childNodes.find(n=>n.type===E.Element&&n.tagName==="img");p&&p.attributes&&(p.attributes.src=i.get(e));}}isSourceElement(a){return a.type===E.Element&&a.tagName==="source"}mapTextElement(a,i){if(a.type===E.Text&&a.isStyle&&a.textContent){let e=this.mapCssUrls(a.textContent,i);a.textContent=e;}return a}mapCssUrls(a,i){return a.replace(Ta,(e,p)=>{let n=e;return i.has(p)&&(n=e.replace(p,i.get(p))),n})}mapSrcsetUrls(a,i){let e=J.default.parse(a),p;return e.forEach(n=>{i.has(n.url)&&(p=i.get(n.url));}),p}},s(R,"W"),R);d(ta,"DOMSnapshot");var $a=ta;function ea(t){return `w${t.width}h${t.height}`}s(ea,"H");d(ea,"viewportToString");function Pa(t){let a=t.match(/w(\d+)h(\d+)/);return {width:Number(a[1]),height:Number(a[2])}}s(Pa,"Di");d(Pa,"parseViewport");var F=d(t=>t.toLowerCase().replace(/[ ’–—―′¿'`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi,"-").replace(/-+/g,"-").replace(/^-+/,"").replace(/-+$/,""),"sanitize"),Ua="snapshot.json";function _(t,a){let i=`${F(t)}-${F(a)}`,e=A-25;return D(i,e)}s(_,"A");d(_,"snapshotId");function pa(t,a){return [t,ea(a),Ua].join(".")}s(pa,"oi");d(pa,"snapshotFileName");var Oa="stories.json";function na(t){let a=[F(t),Oa].join("."),i=A-25;return D(a,i)}s(na,"li");d(na,"storiesFileName");function oa(t,a,i){return {title:t,stories:Object.keys(a).map(e=>({name:e,parameters:{server:{id:_(t,e)},chromatic:{...i}}}))}}s(oa,"si");d(oa,"createStories");async function I(t,a,i,e){let{titlePath:p,outputDir:n,pageUrl:c,viewport:o}=t,l=p.map(x=>x.replace(/\.(ts|js|mjs|cjs|tsx|jsx|cjsx|coffee)$/,"").replace(/\.(spec|test|cy)$/,"")).join("/"),r=join(n,"chromatic-archives"),m=join(r,"archive");await L(m),w.log(`Writing test results for "${l}"`);let f=new Map;await Promise.all(Object.entries(i).map(async([x,h])=>{if("error"in h)return;let j=new Ra(x,h,c),z=j.originalSrc(),q=j.toFileSystemPath();z!==q&&f.set(z,q),await P(join(m,q),h.body);})),await Promise.all(await Object.entries(a).map(async([x,h])=>{let j=await new $a(h).mapAssetPaths(f),z=pa(_(l,x),o);await P(join(m,z),j);}));let g=na(l),v=oa(l,a,e);await O(join(r,g),v);let u=Object.entries(i).filter(([,x])=>"error"in x);u.length>0&&(w.log(`Encountered ${u.length} errors archiving resources, writing to 'errors.json'`),await O(join(m,"errors.json"),{errors:Object.fromEntries(u)}));}s(I,"$a");d(I,"writeTestResult");var Fa=new Analytics({writeKey:process.env.SEGMENT_WRITE_KEY||"cwWhBWso2gwzyenW29CnCp30Kjz4DogE"}),La="@chromaui/test-archiver run";function B(t,a){Fa.track({userId:La,event:t,properties:a});}s(B,"di");d(B,"track");var K=!1;function M(t={}){K||(B("run",t),K=!0);}s(M,"Ra");d(M,"trackRun");var Q=!1;function W(t={}){Q||(B("complete",t),Q=!0);}s(W,"Oa");d(W,"trackComplete");var $=1e4;var _a=readFileSync(G.resolve("@chromaui/rrweb-snapshot"),"utf8"),k=new Map;async function H(t,a,i){let e,p;if(typeof a=="string"){if(!i)throw new Error("Incorrect usage");p=i.testId,e=a;}else p=a.testId,e=`Snapshot #${k.has(p)?k.get(p).size+1:1}`;t.on("console",o=>{w.log(`CONSOLE: "${o.text()}"`);});let n=await t.evaluate(dedent`
|
|
13
13
|
${_a};
|
|
14
14
|
|
|
15
15
|
// this code was erroring the page.evaluate() when it was passed as a function to page.evaluate(),
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/makeTest.ts","../src/takeSnapshot.ts","../src/createResourceArchive.ts"],"names":["test","base","expect","join","readFileSync","dedent","rrweb","require","resolve","chromaticSnapshots","Map","takeSnapshot","page","nameOrTestInfo","maybeTestInfo","name","testId","Error","has","get","size","number","on","msg","logger","log","text","domSnapshot","evaluate","bufferedSnapshot","Buffer","from","JSON","stringify","set","idle","__name","networkTimeoutMs","DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS","globalNetworkTimerId","globalNetworkResolver","globalNetworkTimeout","Promise","setTimeout","warn","networkIdlePromise","waitForLoadState","finally","clearTimeout","race","createResourceArchive","networkTimeout","assetDomains","httpCredentials","cdpClient","context","newCDPSession","resourceArchiver","ResourceArchiver","watch","archive","performChromaticSnapshot","delay","diffIncludeAntiAliasing","diffThreshold","disableAutoSnapshot","forcedColors","pauseAnimationAtEnd","prefersReducedMotion","resourceArchiveTimeout","cropToViewport","ignoreSelectors","use","testInfo","project","trackRun","browser","browserType","completeArchive","resourceArchive","snapshots","chromaticStorybookParams","outputDir","writeTestResult","pageUrl","url","viewport","viewportSize","Object","fromEntries","trackComplete","delete","makeTest","extend","undefined","option","chromaticSnapshot","auto"],"mappings":"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","sourcesContent":["import { test as base, expect } from '@playwright/test';\n\nimport { makeTest } from './makeTest';\n\nexport const test = makeTest(base);\nexport { expect };\n\nexport { takeSnapshot } from './takeSnapshot';\nexport type { ChromaticConfig } from '@chromatic-com/shared-e2e';\n","import type {\n TestType,\n PlaywrightTestArgs,\n PlaywrightTestOptions,\n PlaywrightWorkerArgs,\n PlaywrightWorkerOptions,\n TestInfo,\n Page,\n} from '@playwright/test';\nimport type { ChromaticConfig } from '@chromatic-com/shared-e2e';\nimport {\n writeTestResult,\n trackComplete,\n trackRun,\n DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS,\n} from '@chromatic-com/shared-e2e';\nimport { join } from 'node:path';\nimport { chromaticSnapshots, takeSnapshot } from './takeSnapshot';\nimport { createResourceArchive } from './createResourceArchive';\n\nexport const performChromaticSnapshot = async (\n {\n page,\n delay,\n diffIncludeAntiAliasing,\n diffThreshold,\n disableAutoSnapshot,\n forcedColors,\n pauseAnimationAtEnd,\n prefersReducedMotion,\n resourceArchiveTimeout,\n assetDomains,\n cropToViewport,\n ignoreSelectors,\n }: ChromaticConfig & { page: Page },\n use: () => Promise<void>,\n testInfo: TestInfo\n) => {\n const { testId, project } = testInfo;\n const httpCredentials = project?.use?.httpCredentials;\n\n try {\n trackRun();\n\n // CDP only works in Chromium, so we only capture archives in Chromium.\n // We can later snapshot them in different browsers in the cloud.\n // TODO: I'm not sure if this is the best way to detect the browser version, but\n // it seems to work\n if (page.context().browser().browserType().name() !== 'chromium') {\n await use();\n return;\n }\n\n const completeArchive = await createResourceArchive({\n page,\n networkTimeout: resourceArchiveTimeout,\n assetDomains,\n httpCredentials,\n });\n await use();\n\n if (!disableAutoSnapshot) {\n await takeSnapshot(page, testInfo);\n }\n\n const resourceArchive = await completeArchive();\n const snapshots: Map<string, Buffer> = chromaticSnapshots.get(testId) || new Map();\n\n const chromaticStorybookParams = {\n ...(delay && { delay }),\n ...(diffIncludeAntiAliasing && { diffIncludeAntiAliasing }),\n ...(diffThreshold && { diffThreshold }),\n ...(forcedColors && { forcedColors }),\n ...(pauseAnimationAtEnd && { pauseAnimationAtEnd }),\n ...(prefersReducedMotion && { prefersReducedMotion }),\n ...(cropToViewport && { cropToViewport }),\n ...(ignoreSelectors && { ignoreSelectors }),\n };\n\n // TestInfo.outputDir gives us the test-specific subfolder (https://playwright.dev/docs/api/class-testconfig#test-config-output-dir);\n // we want to write one level above that\n const outputDir = join(testInfo.outputDir, '..');\n await writeTestResult(\n { ...testInfo, outputDir, pageUrl: page.url(), viewport: page.viewportSize() },\n Object.fromEntries(snapshots),\n resourceArchive,\n chromaticStorybookParams\n );\n\n trackComplete();\n } finally {\n // make sure we clear the value associated with this test ID, so the shared chromaticSnapshots object stays small\n chromaticSnapshots.delete(testId);\n }\n};\n\n// We do this slightly odd thing (makeTest) to avoid importing playwright multiple times when\n// linking this package. To avoid the main entry, you can:\n//\n// import { makeTest } from '@chromaui/test-archiver/src/playwright-api/makeTest';\n// import { takeSnapshot as snapshot } from '@chromaui/test-archiver/src/playwright-api/takeSnapshot';\nexport const makeTest = (\n base: TestType<\n PlaywrightTestArgs & PlaywrightTestOptions,\n PlaywrightWorkerArgs & PlaywrightWorkerOptions\n >\n) =>\n base.extend<ChromaticConfig & { chromaticSnapshot: void }>({\n // ChromaticConfig defaults\n delay: [undefined, { option: true }],\n diffIncludeAntiAliasing: [undefined, { option: true }],\n diffThreshold: [undefined, { option: true }],\n disableAutoSnapshot: [false, { option: true }],\n forcedColors: [undefined, { option: true }],\n pauseAnimationAtEnd: [undefined, { option: true }],\n prefersReducedMotion: [undefined, { option: true }],\n resourceArchiveTimeout: [DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS, { option: true }],\n assetDomains: [[], { option: true }],\n cropToViewport: [undefined, { option: true }],\n ignoreSelectors: [undefined, { option: true }],\n\n chromaticSnapshot: [\n performChromaticSnapshot,\n // ensures this fixture runs without having to be explicitly called (https://playwright.dev/docs/test-fixtures#automatic-fixtures)\n { auto: true },\n ],\n });\n","import type { Page, TestInfo } from '@playwright/test';\nimport { readFileSync } from 'fs';\nimport { dedent } from 'ts-dedent';\nimport type { serializedNodeWithId } from '@rrweb/types';\nimport { logger } from '@chromatic-com/shared-e2e';\n\nconst rrweb = readFileSync(require.resolve('@chromaui/rrweb-snapshot'), 'utf8');\n\n// top-level key is the test ID, next level key is the name of the snapshot (which we expect to be unique)\nexport const chromaticSnapshots: Map<string, Map<string, Buffer>> = new Map();\n\nasync function takeSnapshot(page: Page, testInfo: TestInfo): Promise<void>;\nasync function takeSnapshot(page: Page, name: string, testInfo: TestInfo): Promise<void>;\nasync function takeSnapshot(\n page: Page,\n nameOrTestInfo: string | TestInfo,\n maybeTestInfo?: TestInfo\n): Promise<void> {\n let name: string;\n let testId: string;\n if (typeof nameOrTestInfo === 'string') {\n if (!maybeTestInfo) throw new Error('Incorrect usage');\n testId = maybeTestInfo.testId;\n name = nameOrTestInfo;\n } else {\n testId = nameOrTestInfo.testId;\n const number = chromaticSnapshots.has(testId) ? chromaticSnapshots.get(testId).size + 1 : 1;\n name = `Snapshot #${number}`;\n }\n\n page.on('console', (msg) => {\n logger.log(`CONSOLE: \"${msg.text()}\"`);\n });\n\n // Serialize and capture the DOM\n const domSnapshot: serializedNodeWithId = await page.evaluate(dedent`\n ${rrweb};\n\n // this code was erroring the page.evaluate() when it was passed as a function to page.evaluate(),\n // so for now it is being passed as a string until that can be resolved.\n const doPostProcessing = (rrwebSnapshotInstance, documentToSnapshot) => {\n return new Promise((resolve) => {\n const domSnapshot = rrwebSnapshotInstance.snapshot(documentToSnapshot, { recordCanvas: true });\n // do some post-processing on the snapshot\n const toDataURL = async (url) => {\n // read contents of the blob URL\n const response = await fetch(url);\n const blob = await response.blob();\n return new Promise((resolveFileRead, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolveFileRead(reader.result);\n reader.onerror = reject;\n // convert the blob to base64 string\n reader.readAsDataURL(blob);\n });\n };\n\n const replaceBlobUrls = async (node) => {\n await Promise.all(\n node.childNodes.map(async (childNode) => {\n if (childNode.tagName === 'img' && childNode.attributes.src?.startsWith('blob:')) {\n const base64Url = await toDataURL(childNode.attributes.src);\n // eslint-disable-next-line no-param-reassign\n childNode.attributes.src = base64Url;\n }\n\n if (childNode.childNodes?.length) {\n await replaceBlobUrls(childNode);\n }\n })\n );\n };\n\n replaceBlobUrls(domSnapshot).then(() => {\n resolve(domSnapshot);\n });\n });\n };\n\n // page.evaluate returns the value of the function being evaluated. In this case, it means that\n // it is returning either the resolved value of the Promise or the return value of the call to\n // the snapshot function. See https://playwright.dev/docs/api/class-page#page-evaluate.\n if (typeof define === 'function' && define.amd) {\n // AMD support is detected, so we need to load rrwebSnapshot asynchronously\n new Promise((resolve) => {\n // eslint-disable-next-line import/no-dynamic-require, global-require\n require(['rrwebSnapshot'], (rrwebSnapshot) => {\n doPostProcessing(rrwebSnapshot, document).then((domSnapshot) => {\n resolve(domSnapshot);\n });\n });\n });\n } else {\n new Promise((resolve) => {\n doPostProcessing(rrwebSnapshot, document).then((domSnapshot) => {\n resolve(domSnapshot);\n }); \n });\n } \n `);\n\n const bufferedSnapshot = Buffer.from(JSON.stringify(domSnapshot));\n if (!chromaticSnapshots.has(testId)) {\n // map used so the snapshots are always in order\n chromaticSnapshots.set(testId, new Map());\n }\n chromaticSnapshots.get(testId).set(name, bufferedSnapshot);\n}\n\nexport { takeSnapshot };\n","import type { Page } from 'playwright';\nimport {\n ResourceArchiver,\n ResourceArchive,\n DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS,\n logger,\n HttpCredentials,\n} from '@chromatic-com/shared-e2e';\n\nconst idle = async (page: Page, networkTimeoutMs = DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS) => {\n let globalNetworkTimerId: null | ReturnType<typeof setTimeout> = null;\n let globalNetworkResolver: null | (() => void) = null;\n // XXX_jwir3: The way this works is as follows:\n // There are two promises created here. They wrap two separate timers, and we await on a race of both Promises.\n\n // The first promise wraps a global timeout, where all requests MUST complete before that timeout has passed.\n // If the timeout passes, an error is thrown. This promise can only throw errors, it cannot resolve successfully.\n const globalNetworkTimeout = new Promise<void>((resolve) => {\n globalNetworkResolver = resolve;\n\n globalNetworkTimerId = setTimeout(() => {\n logger.warn(`Global timeout of ${networkTimeoutMs}ms reached`);\n globalNetworkResolver();\n }, networkTimeoutMs);\n });\n\n // The second promise wraps a network idle timeout. This uses playwright's built-in functionality to detect when the network\n // is idle.\n const networkIdlePromise = page.waitForLoadState('networkidle').finally(() => {\n clearTimeout(globalNetworkTimerId);\n });\n\n await Promise.race([globalNetworkTimeout, networkIdlePromise]);\n};\n\nexport const createResourceArchive = async ({\n page,\n networkTimeout,\n assetDomains,\n httpCredentials,\n}: {\n page: Page;\n networkTimeout?: number;\n assetDomains?: string[];\n httpCredentials?: HttpCredentials;\n}): Promise<() => Promise<ResourceArchive>> => {\n const cdpClient = await page.context().newCDPSession(page);\n\n const resourceArchiver = new ResourceArchiver(cdpClient, assetDomains, httpCredentials);\n await resourceArchiver.watch();\n\n return async () => {\n await idle(page, networkTimeout ?? DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS);\n\n return resourceArchiver.archive;\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/makeTest.ts","../src/takeSnapshot.ts","../src/createResourceArchive.ts"],"names":["test","base","expect","join","readFileSync","dedent","rrweb","require","resolve","chromaticSnapshots","Map","takeSnapshot","page","nameOrTestInfo","maybeTestInfo","name","testId","Error","has","get","size","number","on","msg","logger","log","text","domSnapshot","evaluate","bufferedSnapshot","Buffer","from","JSON","stringify","set","idle","__name","networkTimeoutMs","DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS","globalNetworkTimerId","globalNetworkResolver","globalNetworkTimeout","Promise","setTimeout","warn","networkIdlePromise","waitForLoadState","finally","clearTimeout","race","createResourceArchive","networkTimeout","assetDomains","httpCredentials","cdpClient","context","newCDPSession","resourceArchiver","ResourceArchiver","watch","archive","performChromaticSnapshot","delay","diffIncludeAntiAliasing","diffThreshold","disableAutoSnapshot","forcedColors","pauseAnimationAtEnd","prefersReducedMotion","resourceArchiveTimeout","cropToViewport","ignoreSelectors","use","testInfo","project","trackRun","browser","browserType","completeArchive","resourceArchive","snapshots","chromaticStorybookParams","outputDir","writeTestResult","pageUrl","url","viewport","viewportSize","Object","fromEntries","trackComplete","delete","makeTest","extend","undefined","option","chromaticSnapshot","auto"],"mappings":"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","sourcesContent":["import { test as base, expect } from '@playwright/test';\n\nimport { makeTest } from './makeTest';\n\nexport const test = makeTest(base);\nexport { expect };\n\nexport { takeSnapshot } from './takeSnapshot';\nexport type { ChromaticConfig } from '@chromatic-com/shared-e2e';\n","import type {\n TestType,\n PlaywrightTestArgs,\n PlaywrightTestOptions,\n PlaywrightWorkerArgs,\n PlaywrightWorkerOptions,\n TestInfo,\n Page,\n} from '@playwright/test';\nimport type { ChromaticConfig } from '@chromatic-com/shared-e2e';\nimport {\n writeTestResult,\n trackComplete,\n trackRun,\n DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS,\n} from '@chromatic-com/shared-e2e';\nimport { join } from 'node:path';\nimport { chromaticSnapshots, takeSnapshot } from './takeSnapshot';\nimport { createResourceArchive } from './createResourceArchive';\n\nexport const performChromaticSnapshot = async (\n {\n page,\n delay,\n diffIncludeAntiAliasing,\n diffThreshold,\n disableAutoSnapshot,\n forcedColors,\n pauseAnimationAtEnd,\n prefersReducedMotion,\n resourceArchiveTimeout,\n assetDomains,\n cropToViewport,\n ignoreSelectors,\n }: ChromaticConfig & { page: Page },\n use: () => Promise<void>,\n testInfo: TestInfo\n) => {\n const { testId, project } = testInfo;\n const httpCredentials = project?.use?.httpCredentials;\n\n try {\n trackRun();\n\n // CDP only works in Chromium, so we only capture archives in Chromium.\n // We can later snapshot them in different browsers in the cloud.\n // TODO: I'm not sure if this is the best way to detect the browser version, but\n // it seems to work\n if (page.context().browser().browserType().name() !== 'chromium') {\n await use();\n return;\n }\n\n const completeArchive = await createResourceArchive({\n page,\n networkTimeout: resourceArchiveTimeout,\n assetDomains,\n httpCredentials,\n });\n await use();\n\n if (!disableAutoSnapshot) {\n await takeSnapshot(page, testInfo);\n }\n\n const resourceArchive = await completeArchive();\n const snapshots: Map<string, Buffer> = chromaticSnapshots.get(testId) || new Map();\n\n const chromaticStorybookParams = {\n ...(delay && { delay }),\n ...(diffIncludeAntiAliasing && { diffIncludeAntiAliasing }),\n ...(diffThreshold && { diffThreshold }),\n ...(forcedColors && { forcedColors }),\n ...(pauseAnimationAtEnd && { pauseAnimationAtEnd }),\n ...(prefersReducedMotion && { prefersReducedMotion }),\n ...(cropToViewport && { cropToViewport }),\n ...(ignoreSelectors && { ignoreSelectors }),\n };\n\n // TestInfo.outputDir gives us the test-specific subfolder (https://playwright.dev/docs/api/class-testconfig#test-config-output-dir);\n // we want to write one level above that\n const outputDir = join(testInfo.outputDir, '..');\n await writeTestResult(\n { ...testInfo, outputDir, pageUrl: page.url(), viewport: page.viewportSize() },\n Object.fromEntries(snapshots),\n resourceArchive,\n chromaticStorybookParams\n );\n\n trackComplete();\n } finally {\n // make sure we clear the value associated with this test ID, so the shared chromaticSnapshots object stays small\n chromaticSnapshots.delete(testId);\n }\n};\n\n// We do this slightly odd thing (makeTest) to avoid importing playwright multiple times when\n// linking this package. To avoid the main entry, you can:\n//\n// import { makeTest } from '@chromaui/test-archiver/src/playwright-api/makeTest';\n// import { takeSnapshot as snapshot } from '@chromaui/test-archiver/src/playwright-api/takeSnapshot';\nexport const makeTest = (\n base: TestType<\n PlaywrightTestArgs & PlaywrightTestOptions,\n PlaywrightWorkerArgs & PlaywrightWorkerOptions\n >\n) =>\n base.extend<ChromaticConfig & { chromaticSnapshot: void }>({\n // ChromaticConfig defaults\n delay: [undefined, { option: true }],\n diffIncludeAntiAliasing: [undefined, { option: true }],\n diffThreshold: [undefined, { option: true }],\n disableAutoSnapshot: [false, { option: true }],\n forcedColors: [undefined, { option: true }],\n pauseAnimationAtEnd: [undefined, { option: true }],\n prefersReducedMotion: [undefined, { option: true }],\n resourceArchiveTimeout: [DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS, { option: true }],\n assetDomains: [[], { option: true }],\n cropToViewport: [undefined, { option: true }],\n ignoreSelectors: [undefined, { option: true }],\n\n chromaticSnapshot: [\n performChromaticSnapshot,\n // ensures this fixture runs without having to be explicitly called (https://playwright.dev/docs/test-fixtures#automatic-fixtures)\n { auto: true },\n ],\n });\n","import type { Page, TestInfo } from '@playwright/test';\nimport { readFileSync } from 'fs';\nimport { dedent } from 'ts-dedent';\nimport type { serializedNodeWithId } from '@rrweb/types';\nimport { logger } from '@chromatic-com/shared-e2e';\n\nconst rrweb = readFileSync(require.resolve('@chromaui/rrweb-snapshot'), 'utf8');\n\n// top-level key is the test ID, next level key is the name of the snapshot (which we expect to be unique)\nexport const chromaticSnapshots: Map<string, Map<string, Buffer>> = new Map();\n\nasync function takeSnapshot(page: Page, testInfo: TestInfo): Promise<void>;\nasync function takeSnapshot(page: Page, name: string, testInfo: TestInfo): Promise<void>;\nasync function takeSnapshot(\n page: Page,\n nameOrTestInfo: string | TestInfo,\n maybeTestInfo?: TestInfo\n): Promise<void> {\n let name: string;\n let testId: string;\n if (typeof nameOrTestInfo === 'string') {\n if (!maybeTestInfo) throw new Error('Incorrect usage');\n testId = maybeTestInfo.testId;\n name = nameOrTestInfo;\n } else {\n testId = nameOrTestInfo.testId;\n const number = chromaticSnapshots.has(testId) ? chromaticSnapshots.get(testId).size + 1 : 1;\n name = `Snapshot #${number}`;\n }\n\n page.on('console', (msg) => {\n logger.log(`CONSOLE: \"${msg.text()}\"`);\n });\n\n // Serialize and capture the DOM\n const domSnapshot: serializedNodeWithId = await page.evaluate(dedent`\n ${rrweb};\n\n // this code was erroring the page.evaluate() when it was passed as a function to page.evaluate(),\n // so for now it is being passed as a string until that can be resolved.\n const doPostProcessing = (rrwebSnapshotInstance, documentToSnapshot) => {\n return new Promise((resolve) => {\n const domSnapshot = rrwebSnapshotInstance.snapshot(documentToSnapshot, { recordCanvas: true });\n // do some post-processing on the snapshot\n const toDataURL = async (url) => {\n // read contents of the blob URL\n const response = await fetch(url);\n const blob = await response.blob();\n return new Promise((resolveFileRead, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolveFileRead(reader.result);\n reader.onerror = reject;\n // convert the blob to base64 string\n reader.readAsDataURL(blob);\n });\n };\n\n const replaceBlobUrls = async (node) => {\n await Promise.all(\n node.childNodes.map(async (childNode) => {\n if (childNode.tagName === 'img' && childNode.attributes.src?.startsWith('blob:')) {\n const base64Url = await toDataURL(childNode.attributes.src);\n // eslint-disable-next-line no-param-reassign\n childNode.attributes.src = base64Url;\n }\n\n if (childNode.childNodes?.length) {\n await replaceBlobUrls(childNode);\n }\n })\n );\n };\n\n replaceBlobUrls(domSnapshot).then(() => {\n resolve(domSnapshot);\n });\n });\n };\n\n // page.evaluate returns the value of the function being evaluated. In this case, it means that\n // it is returning either the resolved value of the Promise or the return value of the call to\n // the snapshot function. See https://playwright.dev/docs/api/class-page#page-evaluate.\n if (typeof define === 'function' && define.amd) {\n // AMD support is detected, so we need to load rrwebSnapshot asynchronously\n new Promise((resolve) => {\n // eslint-disable-next-line import/no-dynamic-require, global-require\n require(['rrwebSnapshot'], (rrwebSnapshot) => {\n doPostProcessing(rrwebSnapshot, document).then((domSnapshot) => {\n resolve(domSnapshot);\n });\n });\n });\n } else {\n new Promise((resolve) => {\n doPostProcessing(rrwebSnapshot, document).then((domSnapshot) => {\n resolve(domSnapshot);\n }); \n });\n } \n `);\n\n const bufferedSnapshot = Buffer.from(JSON.stringify(domSnapshot));\n if (!chromaticSnapshots.has(testId)) {\n // map used so the snapshots are always in order\n chromaticSnapshots.set(testId, new Map());\n }\n chromaticSnapshots.get(testId).set(name, bufferedSnapshot);\n}\n\nexport { takeSnapshot };\n","import type { Page } from 'playwright';\nimport {\n ResourceArchiver,\n ResourceArchive,\n DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS,\n logger,\n HttpCredentials,\n} from '@chromatic-com/shared-e2e';\n\nconst idle = async (page: Page, networkTimeoutMs = DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS) => {\n let globalNetworkTimerId: null | ReturnType<typeof setTimeout> = null;\n let globalNetworkResolver: null | (() => void) = null;\n // XXX_jwir3: The way this works is as follows:\n // There are two promises created here. They wrap two separate timers, and we await on a race of both Promises.\n\n // The first promise wraps a global timeout, where all requests MUST complete before that timeout has passed.\n // If the timeout passes, an error is thrown. This promise can only throw errors, it cannot resolve successfully.\n const globalNetworkTimeout = new Promise<void>((resolve) => {\n globalNetworkResolver = resolve;\n\n globalNetworkTimerId = setTimeout(() => {\n logger.warn(`Global timeout of ${networkTimeoutMs}ms reached`);\n globalNetworkResolver();\n }, networkTimeoutMs);\n });\n\n // The second promise wraps a network idle timeout. This uses playwright's built-in functionality to detect when the network\n // is idle.\n const networkIdlePromise = page.waitForLoadState('networkidle').finally(() => {\n clearTimeout(globalNetworkTimerId);\n });\n\n await Promise.race([globalNetworkTimeout, networkIdlePromise]);\n};\n\nexport const createResourceArchive = async ({\n page,\n networkTimeout,\n assetDomains,\n httpCredentials,\n}: {\n page: Page;\n networkTimeout?: number;\n assetDomains?: string[];\n httpCredentials?: HttpCredentials;\n}): Promise<() => Promise<ResourceArchive>> => {\n const cdpClient = await page.context().newCDPSession(page);\n\n const resourceArchiver = new ResourceArchiver(cdpClient, assetDomains, httpCredentials);\n await resourceArchiver.watch();\n\n return async () => {\n await idle(page, networkTimeout ?? DEFAULT_GLOBAL_RESOURCE_ARCHIVE_TIMEOUT_MS);\n\n return resourceArchiver.archive;\n };\n};\n"]}
|
|
@@ -9,9 +9,9 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
9
9
|
|
|
10
10
|
var s__default = /*#__PURE__*/_interopDefault(s);
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var x=Object.defineProperty;var t=(e,r)=>x(e,"name",{value:r,configurable:!0}),p=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(r,i)=>(typeof require<"u"?require:r)[i]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var I=Object.defineProperty,o=t((e,r)=>I(e,"name",{value:r,configurable:!0}),"r");function m(){return process.cwd()}t(m,"C");o(m,"rootDir");function v(){let{CHROMATIC_ARCHIVE_LOCATION:e}=process.env;return e}t(v,"F");o(v,"outputDirOverride");function n(e){let r=v()||e;return s__default.default.resolve(m(),r,"chromatic-archives")}t(n,"d");o(n,"archivesDir");function S(e){return s__default.default.resolve(n(e),"archive")}t(S,"J");o(S,"assetsDir");function j(e){let r=n(e);if(!fs.existsSync(r))throw new Error(`Chromatic archives directory cannot be found: ${r}
|
|
13
13
|
|
|
14
|
-
Please make sure that you have run your E2E tests, or have set the CHROMATIC_ARCHIVE_LOCATION env var if the output directory for the tests is not in the standard location.`)}t(
|
|
14
|
+
Please make sure that you have run your E2E tests, or have set the CHROMATIC_ARCHIVE_LOCATION env var if the output directory for the tests is not in the standard location.`)}t(j,"M");o(j,"checkArchivesDirExists");function D(e){fs.existsSync(e)||fs.mkdirSync(e,{recursive:!0});}t(D,"B");o(D,"ensureDir");async function y(e,r){return D(s__default.default.dirname(e)),promises.writeFile(e,r,{mode:511})}t(y,"D");o(y,"outputFile");async function J(e,r){return y(e,JSON.stringify(r))}t(J,"R");o(J,"outputJSONFile");async function R(e){let r=await promises.readFile(e);return JSON.parse(r.toString())}t(R,"j");o(R,"readJSONFile");function O(e){return crypto.createHash("shake256",{outputLength:2}).update(e).digest("hex")}t(O,"L");o(O,"hash");var H=255;function U(e,r=H){let i=new TextEncoder,T=new TextDecoder,h=e.split("/"),a=h.pop();if(i.encode(a).byteLength<=r)return e;let f=O(a),[E,...F]=a.split("."),A=i.encode(E),c=F.join("."),N=c.length===0?0:i.encode(c).byteLength+1,_=i.encode(f).byteLength+N,g=A.slice(0,r-_),L=[`${T.decode(g)}${f}`,c].filter(Boolean).join(".");return [...h,L].join("/")}t(U,"$");o(U,"truncateFileName");var l="test-results";function M(e){return s__default.default.dirname(p.resolve(s__default.default.join(e,"package.json")))}t(M,"getAbsolutePath");var W={stories:[s__default.default.resolve(n(l),"*.stories.json")],addons:["."],framework:{name:M("@storybook/server-webpack5"),options:{}},staticDirs:[s__default.default.resolve(n(l),"archive")]};
|
|
15
15
|
|
|
16
16
|
module.exports = W;
|
|
17
17
|
//# sourceMappingURL=out.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/storybook-config/main.ts","../../src/constants.ts"],"names":["path","DEFAULT_OUTPUT_DIR","getAbsolutePath","value","dirname","require","resolve","join","main_default","stories","archivesDir","addons","framework","name","options","staticDirs"],"mappings":"oUAAA,OAAOA,MAAU;;6gCCAV,IAAMC,EAAqB,eDIlC,SAASC,EAAgBC,EAAa,CACpC,OAAOH,EAAKI,QAAQC,EAAQC,QAAQN,EAAKO,KAAKJ,EAAO,cAAA,CAAA,CAAA,CACvD,CAFSD,EAAAA,EAAAA,mBAKT,IAAAM,EAAe,CACbC,QAAS,CAACT,EAAKM,QAAQI,EAAYT,CAAAA,EAAqB,gBAAA,GACxDU,OAAQ,
|
|
1
|
+
{"version":3,"sources":["../../src/storybook-config/main.ts","../../src/constants.ts"],"names":["path","DEFAULT_OUTPUT_DIR","getAbsolutePath","value","dirname","require","resolve","join","main_default","stories","archivesDir","addons","framework","name","options","staticDirs"],"mappings":"oUAAA,OAAOA,MAAU;;6gCCAV,IAAMC,EAAqB,eDIlC,SAASC,EAAgBC,EAAa,CACpC,OAAOH,EAAKI,QAAQC,EAAQC,QAAQN,EAAKO,KAAKJ,EAAO,cAAA,CAAA,CAAA,CACvD,CAFSD,EAAAA,EAAAA,mBAKT,IAAAM,EAAe,CACbC,QAAS,CAACT,EAAKM,QAAQI,EAAYT,CAAAA,EAAqB,gBAAA,GACxDU,OAAQ,CAAC,KACTC,UAAW,CACTC,KAAMX,EAAgB,4BAAA,EACtBY,QAAS,CAAC,CACZ,EACAC,WAAY,CAACf,EAAKM,QAAQI,EAAYT,CAAAA,EAAqB,SAAA,EAC7D","sourcesContent":["import path from 'path';\nimport { archivesDir } from '@chromatic-com/shared-e2e/utils/filePaths';\nimport { DEFAULT_OUTPUT_DIR } from '../constants';\n\nfunction getAbsolutePath(value: string) {\n return path.dirname(require.resolve(path.join(value, 'package.json')));\n}\n\n/** @type { import('@storybook/server-webpack5').StorybookConfig } */\nexport default {\n stories: [path.resolve(archivesDir(DEFAULT_OUTPUT_DIR), '*.stories.json')],\n addons: ['.'],\n framework: {\n name: getAbsolutePath('@storybook/server-webpack5'),\n options: {},\n },\n staticDirs: [path.resolve(archivesDir(DEFAULT_OUTPUT_DIR), 'archive')],\n};\n","export const DEFAULT_OUTPUT_DIR = 'test-results';\n"]}
|