@telefonica/acceptance-testing 2.18.1 → 2.19.0-beta0

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.
@@ -10,6 +10,7 @@ var findRoot = _interopDefault(require('find-root'));
10
10
  var pptrTestingLibrary = require('pptr-testing-library');
11
11
  var jestImageSnapshot = require('jest-image-snapshot');
12
12
  var globToRegExp = _interopDefault(require('glob-to-regexp'));
13
+ var child_process = require('child_process');
13
14
 
14
15
  function _regeneratorRuntime() {
15
16
  _regeneratorRuntime = function () {
@@ -369,14 +370,102 @@ function _objectWithoutPropertiesLoose(source, excluded) {
369
370
  return target;
370
371
  }
371
372
 
373
+ var getGlobalPage = function getGlobalPage() {
374
+ return global.page;
375
+ };
376
+ var getRootPath = function getRootPath() {
377
+ var rootPath = expect.getState().snapshotState._rootDir;
378
+ if (!rootPath) {
379
+ throw new Error('Root path not found');
380
+ }
381
+ return rootPath;
382
+ };
383
+ /**
384
+ * We want to clear coverage files from previous runs, but at this point it is not easy because each
385
+ * worker runs a different instance of this script, so we can't just clear the coverage folder at
386
+ * the beginning of the test run.
387
+ *
388
+ * The solution is to remove the coverage folder when the stored ppid (parent process id) is
389
+ * different from the current one
390
+ */
391
+ var prepareCoverageReportPath = function prepareCoverageReportPath(_ref) {
392
+ var coveragePath = _ref.coveragePath;
393
+ var ppidFile = path.join(coveragePath, '.ppid');
394
+ var ppid = process.ppid.toString();
395
+ if (!fs.existsSync(ppidFile) || fs.readFileSync(ppidFile, 'utf-8') !== ppid) {
396
+ // the condition is just to make sure we don't remove files outside the repo
397
+ if (getRootPath() === process.cwd() && path.normalize(coveragePath).startsWith(process.cwd())) {
398
+ fs.rmSync(coveragePath, {
399
+ recursive: true,
400
+ force: true
401
+ });
402
+ }
403
+ fs.mkdirSync(coveragePath, {
404
+ recursive: true
405
+ });
406
+ fs.writeFileSync(ppidFile, ppid);
407
+ }
408
+ };
409
+ /**
410
+ * Asumes the code was instrumented with istanbul and the coverage report stored in `window.__coverage__`.
411
+ * If not, this function does nothing.
412
+ */
413
+ var collectCoverageIfAvailable = /*#__PURE__*/function () {
414
+ var _ref3 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref2) {
415
+ var coveragePath, coverage, nycOutputPath;
416
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
417
+ while (1) switch (_context.prev = _context.next) {
418
+ case 0:
419
+ coveragePath = _ref2.coveragePath;
420
+ _context.prev = 1;
421
+ _context.next = 4;
422
+ return getGlobalPage().evaluate(function () {
423
+ return window.__coverage__;
424
+ });
425
+ case 4:
426
+ coverage = _context.sent;
427
+ if (coverage) {
428
+ _context.next = 7;
429
+ break;
430
+ }
431
+ return _context.abrupt("return");
432
+ case 7:
433
+ prepareCoverageReportPath({
434
+ coveragePath: coveragePath
435
+ });
436
+ nycOutputPath = path.join(coveragePath, '.nyc_output');
437
+ fs.mkdirSync(nycOutputPath, {
438
+ recursive: true
439
+ });
440
+ Object.values(coverage).forEach(function (cov) {
441
+ if (cov && cov.path && cov.hash) {
442
+ var _JSON$stringify;
443
+ fs.writeFileSync(path.join(nycOutputPath, cov.hash + '.json'), JSON.stringify((_JSON$stringify = {}, _JSON$stringify[cov.path] = cov, _JSON$stringify)));
444
+ }
445
+ });
446
+ _context.next = 15;
447
+ break;
448
+ case 13:
449
+ _context.prev = 13;
450
+ _context.t0 = _context["catch"](1);
451
+ case 15:
452
+ case "end":
453
+ return _context.stop();
454
+ }
455
+ }, _callee, null, [[1, 13]]);
456
+ }));
457
+ return function collectCoverageIfAvailable(_x) {
458
+ return _ref3.apply(this, arguments);
459
+ };
460
+ }();
461
+
372
462
  var _excluded = ["captureBeyondViewport"],
373
463
  _excluded2 = ["userAgent", "isDarkMode", "viewport", "cookies"];
374
- var _pkg$acceptanceTests, _ref;
375
- var execSync = /*#__PURE__*/require('child_process').execSync;
464
+ var _pkg$acceptanceTests, _ref, _projectConfig$covera;
376
465
  var getGlobalBrowser = function getGlobalBrowser() {
377
466
  return global.browser;
378
467
  };
379
- var getGlobalPage = function getGlobalPage() {
468
+ var getGlobalPage$1 = function getGlobalPage() {
380
469
  return global.page;
381
470
  };
382
471
  var isCi = /*#__PURE__*/process.argv.includes('--ci') || process.env.CI;
@@ -394,6 +483,7 @@ var rootDir = /*#__PURE__*/findRoot( /*#__PURE__*/process.cwd());
394
483
  var pkg = /*#__PURE__*/JSON.parse( /*#__PURE__*/fs.readFileSync( /*#__PURE__*/path.join(rootDir, 'package.json'), 'utf-8'));
395
484
  var projectConfig = (_pkg$acceptanceTests = pkg.acceptanceTests) != null ? _pkg$acceptanceTests : {};
396
485
  var server = (_ref = isCi ? projectConfig.ciServer : projectConfig.devServer) != null ? _ref : projectConfig.server;
486
+ var coveragePath = /*#__PURE__*/path.join(rootDir, (_projectConfig$covera = projectConfig.coveragePath) != null ? _projectConfig$covera : 'reports/coverage-acceptance');
397
487
  var serverPort = server == null ? void 0 : server.port;
398
488
  var toMatchImageSnapshot = /*#__PURE__*/jestImageSnapshot.configureToMatchImageSnapshot({
399
489
  failureThreshold: 0,
@@ -748,7 +838,7 @@ var openPage = /*#__PURE__*/function () {
748
838
  _context7.t0 = _context7.sent;
749
839
  case 7:
750
840
  currentUserAgent = _context7.t0;
751
- page = getGlobalPage();
841
+ page = getGlobalPage$1();
752
842
  _context7.next = 11;
753
843
  return page.bringToFront();
754
844
  case 11:
@@ -849,7 +939,7 @@ var buildQueryMethods = function buildQueryMethods(_temp3) {
849
939
  while (1) switch (_context12.prev = _context12.next) {
850
940
  case 0:
851
941
  _context12.next = 2;
852
- return pptrTestingLibrary.getDocument(page != null ? page : getGlobalPage());
942
+ return pptrTestingLibrary.getDocument(page != null ? page : getGlobalPage$1());
853
943
  case 2:
854
944
  doc = _context12.sent;
855
945
  _context12.next = 5;
@@ -883,7 +973,7 @@ var buildQueryMethods = function buildQueryMethods(_temp3) {
883
973
  break;
884
974
  }
885
975
  _context8.next = 3;
886
- return (page != null ? page : getGlobalPage()).waitForNetworkIdle();
976
+ return (page != null ? page : getGlobalPage$1()).waitForNetworkIdle();
887
977
  case 3:
888
978
  _context8.next = 5;
889
979
  return waitForPaintEnd(elementHandle, _extends({}, options, {
@@ -983,7 +1073,7 @@ beforeEach( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().m
983
1073
  while (1) switch (_context13.prev = _context13.next) {
984
1074
  case 0:
985
1075
  _context13.next = 2;
986
- return getGlobalPage().setRequestInterception(false);
1076
+ return getGlobalPage$1().setRequestInterception(false);
987
1077
  case 2:
988
1078
  _context13.next = 4;
989
1079
  return global.jestPuppeteer.resetPage();
@@ -998,25 +1088,30 @@ afterEach( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().ma
998
1088
  return _regeneratorRuntime().wrap(function _callee14$(_context14) {
999
1089
  while (1) switch (_context14.prev = _context14.next) {
1000
1090
  case 0:
1001
- _context14.prev = 0;
1002
- page = getGlobalPage();
1091
+ _context14.next = 2;
1092
+ return collectCoverageIfAvailable({
1093
+ coveragePath: coveragePath
1094
+ });
1095
+ case 2:
1096
+ _context14.prev = 2;
1097
+ page = getGlobalPage$1();
1003
1098
  requestHandlers = [];
1004
1099
  needsRequestInterception = false;
1005
1100
  page.off('request', requestInterceptor);
1006
1101
  // clear tab, this way we clear the DOM and stop js execution or pending requests
1007
- _context14.next = 7;
1102
+ _context14.next = 9;
1008
1103
  return page["goto"]('about:blank');
1009
- case 7:
1010
- _context14.next = 11;
1011
- break;
1012
1104
  case 9:
1013
- _context14.prev = 9;
1014
- _context14.t0 = _context14["catch"](0);
1105
+ _context14.next = 13;
1106
+ break;
1015
1107
  case 11:
1108
+ _context14.prev = 11;
1109
+ _context14.t0 = _context14["catch"](2);
1110
+ case 13:
1016
1111
  case "end":
1017
1112
  return _context14.stop();
1018
1113
  }
1019
- }, _callee14, null, [[0, 9]]);
1114
+ }, _callee14, null, [[2, 11]]);
1020
1115
  })));
1021
1116
  /**
1022
1117
  * Returns a new path to the file that can be used by chromium in acceptance tests
@@ -1033,11 +1128,11 @@ var prepareFile = function prepareFile(filepath) {
1033
1128
  var usesDocker = isLocal && isHeadless;
1034
1129
  var dockerComposeFile = path.join(__dirname, '..', 'docker-compose.yaml');
1035
1130
  if (usesDocker) {
1036
- var containerId = execSync("docker-compose -f " + dockerComposeFile + " ps -q").toString().trim();
1131
+ var containerId = child_process.execSync("docker-compose -f " + dockerComposeFile + " ps -q").toString().trim();
1037
1132
  if (!containerId) {
1038
1133
  throw Error('acceptance-testing container not found');
1039
1134
  }
1040
- execSync("docker cp " + filepath + " " + containerId + ":/tmp");
1135
+ child_process.execSync("docker cp " + filepath + " " + containerId + ":/tmp");
1041
1136
  var newPath = path.join('/tmp', path.basename(filepath));
1042
1137
  fs.copyFileSync(filepath, newPath);
1043
1138
  return newPath;
@@ -1142,7 +1237,7 @@ var waitForElementToBeRemoved = function waitForElementToBeRemoved(element, time
1142
1237
 
1143
1238
  exports.createApiEndpointMock = createApiEndpointMock;
1144
1239
  exports.getGlobalBrowser = getGlobalBrowser;
1145
- exports.getGlobalPage = getGlobalPage;
1240
+ exports.getGlobalPage = getGlobalPage$1;
1146
1241
  exports.getPageApi = getPageApi;
1147
1242
  exports.getScreen = getScreen;
1148
1243
  exports.interceptRequest = interceptRequest;
@@ -1 +1 @@
1
- {"version":3,"file":"acceptance-testing.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport findRoot from 'find-root';\nimport {getDocument, queries} from 'pptr-testing-library';\nimport {configureToMatchImageSnapshot} from 'jest-image-snapshot';\nimport globToRegExp from 'glob-to-regexp';\nconst execSync = require('child_process').execSync;\n\nimport type {\n Page,\n ElementHandle,\n ScreenshotOptions,\n Browser,\n ClickOptions,\n Viewport,\n GeolocationOptions,\n HTTPRequest,\n ResponseForRequest,\n} from 'puppeteer';\nimport type {getQueriesForElement} from 'pptr-testing-library';\n\ntype CustomScreenshotOptions = ScreenshotOptions & {\n skipNetworkWait?: boolean;\n};\n\nexport const getGlobalBrowser = (): Browser => (global as any).browser;\nexport const getGlobalPage = (): Page => (global as any).page;\n\nconst isCi = process.argv.includes('--ci') || process.env.CI;\nconst isUsingDockerizedChromium = isCi || new URL(getGlobalBrowser().wsEndpoint()).port === '9223';\n\nexport const serverHostName = ((): string => {\n if (isCi) {\n return 'localhost';\n }\n\n if (isUsingDockerizedChromium) {\n return process.platform === 'linux' ? '172.17.0.1' : 'host.docker.internal';\n }\n\n return 'localhost';\n})();\n\nconst rootDir = findRoot(process.cwd());\nconst pkg = JSON.parse(fs.readFileSync(path.join(rootDir, 'package.json'), 'utf-8'));\nconst projectConfig = pkg.acceptanceTests ?? {};\nconst server = (isCi ? projectConfig.ciServer : projectConfig.devServer) ?? projectConfig.server;\n\nexport const serverPort = server?.port;\n\nconst toMatchImageSnapshot = configureToMatchImageSnapshot({\n failureThreshold: 0,\n failureThresholdType: 'percent',\n customSnapshotIdentifier: ({defaultIdentifier}) => defaultIdentifier,\n});\n\nlet calledToMatchImageSnapshotOutsideDocker = false;\n\nconst localToMatchImageSnapshot = () => {\n calledToMatchImageSnapshotOutsideDocker = true;\n // let the expectation pass, then fail in afterEach. This way we allow developers to debug screenshot tests in local\n // but don't allow them to save screenshots taken outside the dockerized chromium\n return {\n message: () => '',\n pass: true,\n };\n};\n\nexpect.extend({\n toMatchImageSnapshot: isUsingDockerizedChromium ? toMatchImageSnapshot : localToMatchImageSnapshot,\n});\n\nafterEach(() => {\n if (calledToMatchImageSnapshotOutsideDocker) {\n const error = new Error(\n `Calling .toMatchImageSnapshot() is not allowed outside dockerized browser. Please, run your screenshot test in headless mode.`\n );\n error.stack = (error.stack || '').split('\\n')[0];\n throw error;\n }\n});\n\ntype WaitForPaintEndOptions = {\n fullPage?: boolean;\n captureBeyondViewport?: boolean;\n};\n\nconst waitForPaintEnd = async (\n element: ElementHandle | Page,\n {fullPage = true, captureBeyondViewport}: WaitForPaintEndOptions = {}\n) => {\n const MAX_WAIT = 15000;\n const STEP_TIME = 250;\n const t0 = Date.now();\n\n let buf1 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n await new Promise((r) => setTimeout(r, STEP_TIME));\n let buf2 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n\n // buffers are different if compare != 0\n while (buf1.compare(buf2)) {\n if (Date.now() - t0 > MAX_WAIT) {\n throw Error('Paint end timeout');\n }\n buf1 = buf2;\n await new Promise((r) => setTimeout(r, STEP_TIME));\n buf2 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n }\n};\n\nexport interface PageApi extends Omit<Page, 'click' | 'type' | 'select'> {\n clear: (selector: ElementHandle) => Promise<void>;\n // These are overridden:\n type: (selector: ElementHandle, text: string, options?: {delay: number}) => Promise<void>;\n click: (selector: ElementHandle, options?: ClickOptions) => Promise<void>;\n select: (selector: ElementHandle, ...values: string[]) => Promise<string[]>;\n screenshot: (options?: CustomScreenshotOptions) => Promise<Buffer | string | void>;\n}\n\nconst normalizeSreenshotOptions = ({captureBeyondViewport = false, ...options}: ScreenshotOptions = {}) => {\n // Puppeter default for captureBeyondViewport is true, but we think false is a better default.\n // When this is true, the fixed elements (like fixed footers) are relative to the original page\n // viewport, not to the full page, so those elements look weird in fullPage screenshots.\n return {...options, captureBeyondViewport};\n};\n\n// Puppeteer already calls scrollIntoViewIfNeeded before clicking an element. But it doesn't work in all situations\n// For example, when there is a fixed footer in the page and the element to click is under it, the browser won't scroll\n// because the element is already in the viewport (the ifNeeded part is important here). By forcing the scroll to the\n// center, we manage to fix these edge cases.\nconst scrollIntoView = (el: ElementHandle) => el.evaluate((e) => e.scrollIntoView({block: 'center'}));\n\nexport const getPageApi = (page: Page): PageApi => {\n const api: PageApi = Object.create(page);\n\n api.type = async (elementHandle, text, options) => {\n await scrollIntoView(elementHandle);\n return elementHandle.type(text, options);\n };\n api.click = async (elementHandle, options) => {\n await scrollIntoView(elementHandle);\n return elementHandle.click(options);\n };\n api.select = async (elementHandle, ...values) => {\n await scrollIntoView(elementHandle);\n return elementHandle.select(...values);\n };\n\n api.screenshot = async (options?: CustomScreenshotOptions) => {\n if (!options?.skipNetworkWait) {\n await page.waitForNetworkIdle();\n }\n await waitForPaintEnd(page, options);\n return page.screenshot(normalizeSreenshotOptions(options));\n };\n\n api.clear = async (elementHandle) => {\n await elementHandle.click({clickCount: 3});\n await elementHandle.press('Delete');\n };\n\n // For some reason, puppeteer browserContext.overridePermissions doesn't work with newer chrome versions.\n // This workaround polyfills the browser geolocation api to return the mocked position\n api.setGeolocation = (position: GeolocationOptions) =>\n page.evaluate((position) => {\n window.navigator.geolocation.getCurrentPosition = (callback) => {\n // @ts-ignore\n callback({\n coords: position,\n });\n };\n }, position as any);\n\n return api;\n};\n\nlet needsRequestInterception = false;\ntype RequestMatcherFn = (req: HTTPRequest) => boolean;\nlet requestHandlers: Array<{\n matcher: RequestMatcherFn;\n handler: jest.Mock<any, any>;\n}> = [];\n\nconst requestInterceptor = (req: HTTPRequest) => {\n const {handler} = requestHandlers.find(({matcher}) => matcher(req)) ?? {handler: null};\n if (!handler) {\n req.continue();\n return;\n }\n const response = handler(req);\n req.respond(response);\n};\n\nexport const interceptRequest = (\n matcher: RequestMatcherFn\n): jest.Mock<Partial<ResponseForRequest>, [HTTPRequest]> => {\n needsRequestInterception = true;\n const spy = jest.fn();\n requestHandlers.push({matcher, handler: spy});\n return spy;\n};\n\ntype ApiEndpointMock = {\n spyOn(path: string, method?: string): jest.Mock<unknown, [HTTPRequest]>;\n};\n\nexport const createApiEndpointMock = ({baseUrl}: {baseUrl: string}): ApiEndpointMock => {\n interceptRequest((req) => req.method() === 'OPTIONS' && req.url().startsWith(baseUrl)).mockImplementation(\n () => ({\n status: 204,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST,PATCH,PUT,GET,OPTIONS',\n 'Access-Control-Allow-Headers': '*',\n },\n })\n );\n\n return {\n spyOn(path: string, method: string = 'GET') {\n const matcher = (req: HTTPRequest) => {\n const url = req.url();\n const urlPath = url.substring(baseUrl.length);\n return (\n req.method() === method && url.startsWith(baseUrl) && !!urlPath.match(globToRegExp(path))\n );\n };\n\n const spy = jest.fn();\n\n interceptRequest(matcher).mockImplementation((req) => {\n const spyResult = spy(req);\n const status = spyResult.status ?? 200;\n const resBody = spyResult.body || spyResult;\n return {\n status,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n },\n contentType: 'application/json',\n body: JSON.stringify(resBody),\n };\n });\n\n return spy;\n },\n };\n};\n\ntype CookieConfig = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'Strict' | 'Lax' | 'None';\n expires?: number;\n priority?: 'Low' | 'Medium' | 'High';\n sameParty?: boolean;\n sourceScheme?: 'Unset' | 'NonSecure' | 'Secure';\n sourcePort?: number;\n};\n\ninterface OpenPageCommonConfig {\n userAgent?: string;\n viewport?: Viewport;\n isDarkMode?: boolean;\n cookies?: Array<CookieConfig>;\n}\n\ninterface OpenPageUrlConfig extends OpenPageCommonConfig {\n url: string;\n}\n\ninterface OpenPagePathConfig extends OpenPageCommonConfig {\n url?: undefined;\n\n path?: string;\n port?: number;\n protocol?: string;\n hostname?: string;\n}\n\ntype OpenPageConfig = OpenPageUrlConfig | OpenPagePathConfig;\n\nexport const openPage = async ({\n userAgent,\n isDarkMode,\n viewport,\n cookies,\n ...urlConfig\n}: OpenPageConfig): Promise<PageApi> => {\n const url = ((): string => {\n if (urlConfig.url !== undefined) {\n return urlConfig.url;\n }\n\n const {path = '/', port = serverPort, protocol = 'http', hostname = serverHostName} = urlConfig;\n\n if (!port) {\n const error = new Error(\n 'You must specify a port. You can specify it when calling openPage() or by configuring a dev and ci server in the acceptanceTests config in your package.json'\n );\n // Error.captureStackTrace(error, openPage);\n throw error;\n }\n\n return `${protocol}://${hostname}:${port}${path}`;\n })();\n\n const currentUserAgent = userAgent || (await getGlobalBrowser().userAgent());\n const page = getGlobalPage();\n\n await page.bringToFront();\n if (viewport) {\n await page.setViewport(viewport);\n }\n if (cookies) {\n await page.setCookie(...cookies);\n }\n await page.setUserAgent(`${currentUserAgent} acceptance-test`);\n await page.emulateMediaFeatures([{name: 'prefers-color-scheme', value: isDarkMode ? 'dark' : 'light'}]);\n\n // A set of styles to make screenshot tests more reliable.\n await page.evaluateOnNewDocument(() => {\n const style = document.createElement('style');\n style.innerHTML = `\n *, *:after, *:before {\n transition-delay: 0s !important;\n transition-duration: 0s !important;\n animation-delay: -0.0001s !important;\n animation-duration: 0s !important;\n animation-play-state: paused !important;\n caret-color: transparent !important;\n font-variant-ligatures: none !important;\n }\n *::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n }\n `;\n window.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild(style);\n });\n });\n\n if (needsRequestInterception) {\n await page.setRequestInterception(true);\n page.on('request', requestInterceptor);\n }\n\n try {\n await page.goto(url);\n } catch (e) {\n if ((e as Error).message.includes('net::ERR_CONNECTION_REFUSED')) {\n const connectionError = new Error(`Could not connect to ${url}. Is the server running?`);\n Error.captureStackTrace(connectionError, openPage);\n throw connectionError;\n } else {\n throw e;\n }\n }\n await page.waitForFunction('document.fonts.status === \"loaded\"');\n\n return getPageApi(page);\n};\n\nconst buildQueryMethods = ({page, element}: {page?: Page; element?: ElementHandle} = {}): ReturnType<\n typeof getQueriesForElement\n> => {\n const boundQueries: any = {};\n for (const [queryName, queryFn] of Object.entries(queries)) {\n boundQueries[queryName] = async (...args: any) => {\n const doc = await getDocument(page ?? getGlobalPage());\n const body = await doc.$('body');\n const queryArgs = [...args];\n if (queryName.startsWith('findBy')) {\n if (queryArgs.length === 1) {\n queryArgs.push(undefined);\n }\n queryArgs.push({timeout: 10000});\n }\n const elementHandle: ElementHandle = await queryFn(element ?? body, ...queryArgs);\n\n const newElementHandle = Object.create(elementHandle);\n\n newElementHandle.screenshot = async (options: CustomScreenshotOptions) => {\n if (!options?.skipNetworkWait) {\n await (page ?? getGlobalPage()).waitForNetworkIdle();\n }\n await waitForPaintEnd(elementHandle, {...options, fullPage: false});\n return elementHandle.screenshot(normalizeSreenshotOptions(options));\n };\n\n newElementHandle.click = async (options?: ClickOptions) => {\n await scrollIntoView(elementHandle);\n return elementHandle.click(options);\n };\n\n newElementHandle.type = async (text: string, options?: {delay: number}) => {\n await scrollIntoView(elementHandle);\n return elementHandle.type(text, options);\n };\n\n newElementHandle.select = async (...values: Array<string>) => {\n await scrollIntoView(elementHandle);\n return elementHandle.select(...values);\n };\n\n return newElementHandle;\n };\n }\n return boundQueries;\n};\n\nexport const getScreen = (page: Page) => buildQueryMethods({page});\n\nexport const screen = buildQueryMethods();\n\nexport const within = (element: ElementHandle) => buildQueryMethods({element});\n\nexport type {ElementHandle, Viewport} from 'puppeteer';\n\nbeforeEach(async () => {\n await getGlobalPage().setRequestInterception(false);\n // by resetting the page we clean up all the evaluateOnNewDocument calls, which are persistent between documents\n await (global as any).jestPuppeteer.resetPage();\n});\n\nafterEach(async () => {\n try {\n const page = getGlobalPage();\n requestHandlers = [];\n needsRequestInterception = false;\n page.off('request', requestInterceptor);\n\n // clear tab, this way we clear the DOM and stop js execution or pending requests\n await page.goto('about:blank');\n } catch (e) {\n // ignore, at this point page might be destroyed\n }\n});\n\n/**\n * Returns a new path to the file that can be used by chromium in acceptance tests\n *\n * To be able to use `element.uploadFile()` in a dockerized chromium, the file must exist in the\n * host and the docker, and both sides must use the same path.\n *\n * To workaround this bug or limitation, this function prepares the file by copying it to /tmp in\n * the host and the container.\n */\nexport const prepareFile = (filepath: string): string => {\n const isLocal = !isCi;\n const isHeadless = !!process.env.HEADLESS;\n const usesDocker = isLocal && isHeadless;\n\n const dockerComposeFile = path.join(__dirname, '..', 'docker-compose.yaml');\n\n if (usesDocker) {\n const containerId = execSync(`docker-compose -f ${dockerComposeFile} ps -q`).toString().trim();\n\n if (!containerId) {\n throw Error('acceptance-testing container not found');\n }\n\n execSync(`docker cp ${filepath} ${containerId}:/tmp`);\n\n const newPath = path.join('/tmp', path.basename(filepath));\n\n fs.copyFileSync(filepath, newPath);\n\n return newPath;\n } else {\n return filepath;\n }\n};\n\n/**\n * A convenience method to defer an expectation\n */\nexport const wait = <T>(expectation: () => Promise<T> | T, timeout = 10000, interval = 50): Promise<T> => {\n const startTime = Date.now();\n const startStack = new Error().stack;\n\n return new Promise((resolve, reject) => {\n const rejectOrRerun = (error: unknown) => {\n if (Date.now() - startTime >= timeout) {\n if (error instanceof Error) {\n if (error.message === 'Element not removed') {\n error.stack = startStack;\n }\n }\n reject(error);\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n setTimeout(runExpectation, interval);\n };\n const runExpectation = () => {\n try {\n Promise.resolve(expectation())\n .then((r) => resolve(r))\n .catch(rejectOrRerun);\n } catch (error) {\n rejectOrRerun(error);\n }\n };\n setTimeout(runExpectation, 0);\n });\n};\n\nexport const waitForElementToBeRemoved = (\n element: ElementHandle<Element>,\n timeout = 10000,\n interval = 100\n): Promise<void> => {\n const startStack = new Error().stack;\n\n const wait = async () => {\n const t0 = Date.now();\n while (Date.now() - t0 < timeout) {\n // boundingBox returns null when the element is not in the DOM\n const box = await element.boundingBox();\n if (!box) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n throw new Error('Element not removed');\n };\n\n return wait().catch((error) => {\n if (error.message === 'Element not removed') {\n error.stack = startStack;\n }\n throw error;\n });\n};\n"],"names":["execSync","require","getGlobalBrowser","global","browser","getGlobalPage","page","isCi","process","argv","includes","env","CI","isUsingDockerizedChromium","URL","wsEndpoint","port","serverHostName","platform","rootDir","findRoot","cwd","pkg","JSON","parse","fs","readFileSync","path","join","projectConfig","_pkg$acceptanceTests","acceptanceTests","server","_ref","ciServer","devServer","serverPort","toMatchImageSnapshot","configureToMatchImageSnapshot","failureThreshold","failureThresholdType","customSnapshotIdentifier","_ref2","defaultIdentifier","calledToMatchImageSnapshotOutsideDocker","localToMatchImageSnapshot","message","pass","expect","extend","afterEach","error","Error","stack","split","waitForPaintEnd","_ref3","_asyncToGenerator","_regeneratorRuntime","mark","_callee","element","_temp","_ref4","_ref4$fullPage","fullPage","captureBeyondViewport","MAX_WAIT","STEP_TIME","t0","buf1","buf2","wrap","_callee$","_context","prev","next","Date","now","screenshot","normalizeSreenshotOptions","sent","Promise","r","setTimeout","compare","stop","_x","_x2","apply","arguments","_temp2","_ref5$captureBeyondVi","_ref5","options","_objectWithoutPropertiesLoose","_excluded","_extends","scrollIntoView","el","evaluate","e","block","getPageApi","api","Object","create","type","_ref6","_callee2","elementHandle","text","_callee2$","_context2","abrupt","_x3","_x4","_x5","click","_ref7","_callee3","_callee3$","_context3","_x6","_x7","select","_ref8","_callee4","_len","values","_key","_args4","_callee4$","_context4","length","Array","_x8","_ref9","_callee5","_callee5$","_context5","skipNetworkWait","waitForNetworkIdle","_x9","clear","_ref10","_callee6","_callee6$","_context6","clickCount","press","_x10","setGeolocation","position","window","navigator","geolocation","getCurrentPosition","callback","coords","needsRequestInterception","requestHandlers","requestInterceptor","req","_ref11","_requestHandlers$find","find","_ref12","matcher","handler","response","respond","interceptRequest","spy","jest","fn","push","createApiEndpointMock","_ref13","baseUrl","method","url","startsWith","mockImplementation","status","headers","spyOn","urlPath","substring","match","globToRegExp","spyResult","_spyResult$status","resBody","body","contentType","stringify","openPage","_ref15","_callee7","_ref14","userAgent","isDarkMode","viewport","cookies","urlConfig","currentUserAgent","connectionError","_callee7$","_context7","_excluded2","undefined","_urlConfig$path","_urlConfig$port","_urlConfig$protocol","protocol","_urlConfig$hostname","hostname","bringToFront","setViewport","setCookie","setUserAgent","emulateMediaFeatures","name","value","evaluateOnNewDocument","style","document","createElement","innerHTML","addEventListener","head","appendChild","setRequestInterception","on","t1","captureStackTrace","waitForFunction","_x11","buildQueryMethods","_temp3","_ref16","boundQueries","_loop","_Object$entries$_i","_Object$entries","_i","queryName","queryFn","_callee12","doc","_len2","args","_key2","queryArgs","newElementHandle","_args12","_callee12$","_context12","getDocument","$","concat","timeout","_ref18","_callee8","_callee8$","_context8","_x12","_ref19","_callee9","_callee9$","_context9","_x13","_ref20","_callee10","_callee10$","_context10","_x14","_x15","_callee11","_args11","_callee11$","_context11","entries","queries","getScreen","screen","within","beforeEach","_callee13","_callee13$","_context13","jestPuppeteer","resetPage","_callee14","_callee14$","_context14","off","prepareFile","filepath","isLocal","isHeadless","HEADLESS","usesDocker","dockerComposeFile","__dirname","containerId","toString","trim","newPath","basename","copyFileSync","wait","expectation","interval","startTime","startStack","resolve","reject","rejectOrRerun","runExpectation","then","waitForElementToBeRemoved","_ref24","_callee15","box","_callee15$","_context15","boundingBox"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAMA,QAAQ,gBAAGC,OAAO,CAAC,eAAe,CAAC,CAACD,QAAQ;IAmBrCE,gBAAgB,GAAG,SAAnBA,gBAAgBA;EAAA,OAAmBC,MAAc,CAACC,OAAO;AAAA;IACzDC,aAAa,GAAG,SAAhBA,aAAaA;EAAA,OAAgBF,MAAc,CAACG,IAAI;AAAA;AAE7D,IAAMC,IAAI,gBAAGC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAAC,MAAM,CAAC,IAAIF,OAAO,CAACG,GAAG,CAACC,EAAE;AAC5D,IAAMC,yBAAyB,GAAGN,IAAI,qBAAQO,GAAG,eAACZ,gBAAgB,EAAE,CAACa,UAAU,EAAE,CAAC,CAACC,IAAI,KAAK,MAAM;IAErFC,cAAc,gBAAI;EAC3B,IAAIV,IAAI,EAAE;IACN,OAAO,WAAW;;EAGtB,IAAIM,yBAAyB,EAAE;IAC3B,OAAOL,OAAO,CAACU,QAAQ,KAAK,OAAO,GAAG,YAAY,GAAG,sBAAsB;;EAG/E,OAAO,WAAW;AACtB,CAAC;AAED,IAAMC,OAAO,gBAAGC,QAAQ,eAACZ,OAAO,CAACa,GAAG,EAAE,CAAC;AACvC,IAAMC,GAAG,gBAAGC,IAAI,CAACC,KAAK,eAACC,EAAE,CAACC,YAAY,eAACC,IAAI,CAACC,IAAI,CAACT,OAAO,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;AACpF,IAAMU,aAAa,IAAAC,oBAAA,GAAGR,GAAG,CAACS,eAAe,YAAAD,oBAAA,GAAI,EAAE;AAC/C,IAAME,MAAM,IAAAC,IAAA,GAAI1B,IAAI,GAAGsB,aAAa,CAACK,QAAQ,GAAGL,aAAa,CAACM,SAAS,YAAAF,IAAA,GAAKJ,aAAa,CAACG,MAAM;IAEnFI,UAAU,GAAGJ,MAAM,oBAANA,MAAM,CAAEhB;AAElC,IAAMqB,oBAAoB,gBAAGC,+CAA6B,CAAC;EACvDC,gBAAgB,EAAE,CAAC;EACnBC,oBAAoB,EAAE,SAAS;EAC/BC,wBAAwB,EAAE,SAAAA,yBAAAC,KAAA;IAAA,IAAEC,iBAAiB,GAAAD,KAAA,CAAjBC,iBAAiB;IAAA,OAAMA,iBAAiB;;CACvE,CAAC;AAEF,IAAIC,uCAAuC,GAAG,KAAK;AAEnD,IAAMC,yBAAyB,GAAG,SAA5BA,yBAAyBA;EAC3BD,uCAAuC,GAAG,IAAI;;;EAG9C,OAAO;IACHE,OAAO,EAAE,SAAAA;MAAA,OAAM,EAAE;;IACjBC,IAAI,EAAE;GACT;AACL,CAAC;AAEDC,MAAM,CAACC,MAAM,CAAC;EACVZ,oBAAoB,EAAExB,yBAAyB,GAAGwB,oBAAoB,GAAGQ;CAC5E,CAAC;AAEFK,SAAS,CAAC;EACN,IAAIN,uCAAuC,EAAE;IACzC,IAAMO,KAAK,GAAG,IAAIC,KAAK,gIAC4G,CAClI;IACDD,KAAK,CAACE,KAAK,GAAG,CAACF,KAAK,CAACE,KAAK,IAAI,EAAE,EAAEC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,MAAMH,KAAK;;AAEnB,CAAC,CAAC;AAOF,IAAMI,eAAe;EAAA,IAAAC,KAAA,gBAAAC,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAC,QACpBC,OAA6B,EAAAC,KAAA;IAAA,IAAAC,KAAA,EAAAC,cAAA,EAAAC,QAAA,EAAAC,qBAAA,EAAAC,QAAA,EAAAC,SAAA,EAAAC,EAAA,EAAAC,IAAA,EAAAC,IAAA;IAAA,OAAAb,mBAAA,GAAAc,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UAAAb,KAAA,GAAAD,KAAA,cACsC,EAAE,GAAAA,KAAA,EAAAE,cAAA,GAAAD,KAAA,CAApEE,QAAQ,EAARA,QAAQ,GAAAD,cAAA,cAAG,IAAI,GAAAA,cAAA,EAAEE,qBAAqB,GAAAH,KAAA,CAArBG,qBAAqB;UAEjCC,QAAQ,GAAG,KAAK;UAChBC,SAAS,GAAG,GAAG;UACfC,EAAE,GAAGQ,IAAI,CAACC,GAAG,EAAE;UAAAJ,QAAA,CAAAE,IAAA;UAAA,OAEHf,OAAO,CAACkB,UAAU,CAChCC,yBAAyB,CAAC;YAACf,QAAQ,EAARA,QAAQ;YAAEC,qBAAqB,EAArBA;WAAsB,CAAC,CAC/D;QAAA;UAFGI,IAAI,GAAAI,QAAA,CAAAO,IAAA;UAAAP,QAAA,CAAAE,IAAA;UAAA,OAGF,IAAIM,OAAO,CAAC,UAACC,CAAC;YAAA,OAAKC,UAAU,CAACD,CAAC,EAAEf,SAAS,CAAC;YAAC;QAAA;UAAAM,QAAA,CAAAE,IAAA;UAAA,OAChCf,OAAO,CAACkB,UAAU,CAChCC,yBAAyB,CAAC;YAACf,QAAQ,EAARA,QAAQ;YAAEC,qBAAqB,EAArBA;WAAsB,CAAC,CAC/D;QAAA;UAFGK,IAAI,GAAAG,QAAA,CAAAO,IAAA;QAAA;UAAA,KAKDX,IAAI,CAACe,OAAO,CAACd,IAAI,CAAC;YAAAG,QAAA,CAAAE,IAAA;YAAA;;UAAA,MACjBC,IAAI,CAACC,GAAG,EAAE,GAAGT,EAAE,GAAGF,QAAQ;YAAAO,QAAA,CAAAE,IAAA;YAAA;;UAAA,MACpBxB,KAAK,CAAC,mBAAmB,CAAC;QAAA;UAEpCkB,IAAI,GAAGC,IAAI;UAACG,QAAA,CAAAE,IAAA;UAAA,OACN,IAAIM,OAAO,CAAC,UAACC,CAAC;YAAA,OAAKC,UAAU,CAACD,CAAC,EAAEf,SAAS,CAAC;YAAC;QAAA;UAAAM,QAAA,CAAAE,IAAA;UAAA,OACpCf,OAAO,CAACkB,UAAU,CAC5BC,yBAAyB,CAAC;YAACf,QAAQ,EAARA,QAAQ;YAAEC,qBAAqB,EAArBA;WAAsB,CAAC,CAC/D;QAAA;UAFDK,IAAI,GAAAG,QAAA,CAAAO,IAAA;UAAAP,QAAA,CAAAE,IAAA;UAAA;QAAA;QAAA;UAAA,OAAAF,QAAA,CAAAY,IAAA;;OAAA1B,OAAA;GAIX;EAAA,gBA3BKL,eAAeA,CAAAgC,EAAA,EAAAC,GAAA;IAAA,OAAAhC,KAAA,CAAAiC,KAAA,OAAAC,SAAA;;AAAA,GA2BpB;AAWD,IAAMV,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAAW,MAAA;kCAAqE,EAAE,GAAAA,MAAA;IAAAC,qBAAA,GAAAC,KAAA,CAAlE3B,qBAAqB;IAArBA,qBAAqB,GAAA0B,qBAAA,cAAG,KAAK,GAAAA,qBAAA;IAAKE,OAAO,GAAAC,6BAAA,CAAAF,KAAA,EAAAG,SAAA;;;;EAIzE,OAAAC,QAAA,KAAWH,OAAO;IAAE5B,qBAAqB,EAArBA;;AACxB,CAAC;AAED;AACA;AACA;AACA;AACA,IAAMgC,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,EAAiB;EAAA,OAAKA,EAAE,CAACC,QAAQ,CAAC,UAACC,CAAC;IAAA,OAAKA,CAAC,CAACH,cAAc,CAAC;MAACI,KAAK,EAAE;KAAS,CAAC;IAAC;AAAA;IAExFC,UAAU,GAAG,SAAbA,UAAUA,CAAIjG,IAAU;EACjC,IAAMkG,GAAG,GAAYC,MAAM,CAACC,MAAM,CAACpG,IAAI,CAAC;EAExCkG,GAAG,CAACG,IAAI;IAAA,IAAAC,KAAA,GAAAnD,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAkD,SAAOC,aAAa,EAAEC,IAAI,EAAEjB,OAAO;MAAA,OAAApC,mBAAA,GAAAc,IAAA,UAAAwC,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAAtC,IAAA,GAAAsC,SAAA,CAAArC,IAAA;UAAA;YAAAqC,SAAA,CAAArC,IAAA;YAAA,OACpCsB,cAAc,CAACY,aAAa,CAAC;UAAA;YAAA,OAAAG,SAAA,CAAAC,MAAA,WAC5BJ,aAAa,CAACH,IAAI,CAACI,IAAI,EAAEjB,OAAO,CAAC;UAAA;UAAA;YAAA,OAAAmB,SAAA,CAAA3B,IAAA;;SAAAuB,QAAA;KAC3C;IAAA,iBAAAM,GAAA,EAAAC,GAAA,EAAAC,GAAA;MAAA,OAAAT,KAAA,CAAAnB,KAAA,OAAAC,SAAA;;;EACDc,GAAG,CAACc,KAAK;IAAA,IAAAC,KAAA,GAAA9D,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA6D,SAAOV,aAAa,EAAEhB,OAAO;MAAA,OAAApC,mBAAA,GAAAc,IAAA,UAAAiD,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAA/C,IAAA,GAAA+C,SAAA,CAAA9C,IAAA;UAAA;YAAA8C,SAAA,CAAA9C,IAAA;YAAA,OAC/BsB,cAAc,CAACY,aAAa,CAAC;UAAA;YAAA,OAAAY,SAAA,CAAAR,MAAA,WAC5BJ,aAAa,CAACQ,KAAK,CAACxB,OAAO,CAAC;UAAA;UAAA;YAAA,OAAA4B,SAAA,CAAApC,IAAA;;SAAAkC,QAAA;KACtC;IAAA,iBAAAG,GAAA,EAAAC,GAAA;MAAA,OAAAL,KAAA,CAAA9B,KAAA,OAAAC,SAAA;;;EACDc,GAAG,CAACqB,MAAM;IAAA,IAAAC,KAAA,GAAArE,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAoE,SAAOjB,aAAa;MAAA,IAAAkB,IAAA;QAAAC,MAAA;QAAAC,IAAA;QAAAC,MAAA,GAAAzC,SAAA;MAAA,OAAAhC,mBAAA,GAAAc,IAAA,UAAA4D,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAA1D,IAAA,GAAA0D,SAAA,CAAAzD,IAAA;UAAA;YAAAyD,SAAA,CAAAzD,IAAA;YAAA,OACvBsB,cAAc,CAACY,aAAa,CAAC;UAAA;YAAA,KAAAkB,IAAA,GAAAG,MAAA,CAAAG,MAAA,EADDL,MAAM,OAAAM,KAAA,CAAAP,IAAA,OAAAA,IAAA,WAAAE,IAAA,MAAAA,IAAA,GAAAF,IAAA,EAAAE,IAAA;cAAND,MAAM,CAAAC,IAAA,QAAAC,MAAA,CAAAD,IAAA;;YAAA,OAAAG,SAAA,CAAAnB,MAAA,WAEjCJ,aAAa,CAACe,MAAM,CAAApC,KAAA,CAApBqB,aAAa,EAAWmB,MAAM,CAAC;UAAA;UAAA;YAAA,OAAAI,SAAA,CAAA/C,IAAA;;SAAAyC,QAAA;KACzC;IAAA,iBAAAS,GAAA;MAAA,OAAAV,KAAA,CAAArC,KAAA,OAAAC,SAAA;;;EAEDc,GAAG,CAACzB,UAAU;IAAA,IAAA0D,KAAA,GAAAhF,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA+E,SAAO5C,OAAiC;MAAA,OAAApC,mBAAA,GAAAc,IAAA,UAAAmE,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAAjE,IAAA,GAAAiE,SAAA,CAAAhE,IAAA;UAAA;YAAA,IAChDkB,OAAO,YAAPA,OAAO,CAAE+C,eAAe;cAAAD,SAAA,CAAAhE,IAAA;cAAA;;YAAAgE,SAAA,CAAAhE,IAAA;YAAA,OACnBtE,IAAI,CAACwI,kBAAkB,EAAE;UAAA;YAAAF,SAAA,CAAAhE,IAAA;YAAA,OAE7BrB,eAAe,CAACjD,IAAI,EAAEwF,OAAO,CAAC;UAAA;YAAA,OAAA8C,SAAA,CAAA1B,MAAA,WAC7B5G,IAAI,CAACyE,UAAU,CAACC,yBAAyB,CAACc,OAAO,CAAC,CAAC;UAAA;UAAA;YAAA,OAAA8C,SAAA,CAAAtD,IAAA;;SAAAoD,QAAA;KAC7D;IAAA,iBAAAK,GAAA;MAAA,OAAAN,KAAA,CAAAhD,KAAA,OAAAC,SAAA;;;EAEDc,GAAG,CAACwC,KAAK;IAAA,IAAAC,MAAA,GAAAxF,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAuF,SAAOpC,aAAa;MAAA,OAAApD,mBAAA,GAAAc,IAAA,UAAA2E,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAAzE,IAAA,GAAAyE,SAAA,CAAAxE,IAAA;UAAA;YAAAwE,SAAA,CAAAxE,IAAA;YAAA,OACtBkC,aAAa,CAACQ,KAAK,CAAC;cAAC+B,UAAU,EAAE;aAAE,CAAC;UAAA;YAAAD,SAAA,CAAAxE,IAAA;YAAA,OACpCkC,aAAa,CAACwC,KAAK,CAAC,QAAQ,CAAC;UAAA;UAAA;YAAA,OAAAF,SAAA,CAAA9D,IAAA;;SAAA4D,QAAA;KACtC;IAAA,iBAAAK,IAAA;MAAA,OAAAN,MAAA,CAAAxD,KAAA,OAAAC,SAAA;;;;;EAIDc,GAAG,CAACgD,cAAc,GAAG,UAACC,QAA4B;IAAA,OAC9CnJ,IAAI,CAAC8F,QAAQ,CAAC,UAACqD,QAAQ;MACnBC,MAAM,CAACC,SAAS,CAACC,WAAW,CAACC,kBAAkB,GAAG,UAACC,QAAQ;;QAEvDA,QAAQ,CAAC;UACLC,MAAM,EAAEN;SACX,CAAC;OACL;KACJ,EAAEA,QAAe,CAAC;;EAEvB,OAAOjD,GAAG;AACd;AAEA,IAAIwD,wBAAwB,GAAG,KAAK;AAEpC,IAAIC,eAAe,GAGd,EAAE;AAEP,IAAMC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIC,GAAgB;;EACxC,IAAAC,MAAA,IAAAC,qBAAA,GAAkBJ,eAAe,CAACK,IAAI,CAAC,UAAAC,MAAA;MAAA,IAAEC,OAAO,GAAAD,MAAA,CAAPC,OAAO;MAAA,OAAMA,OAAO,CAACL,GAAG,CAAC;MAAC,YAAAE,qBAAA,GAAI;MAACI,OAAO,EAAE;KAAK;IAA/EA,OAAO,GAAAL,MAAA,CAAPK,OAAO;EACd,IAAI,CAACA,OAAO,EAAE;IACVN,GAAG,YAAS,EAAE;IACd;;EAEJ,IAAMO,QAAQ,GAAGD,OAAO,CAACN,GAAG,CAAC;EAC7BA,GAAG,CAACQ,OAAO,CAACD,QAAQ,CAAC;AACzB,CAAC;IAEYE,gBAAgB,GAAG,SAAnBA,gBAAgBA,CACzBJ,OAAyB;EAEzBR,wBAAwB,GAAG,IAAI;EAC/B,IAAMa,GAAG,GAAGC,IAAI,CAACC,EAAE,EAAE;EACrBd,eAAe,CAACe,IAAI,CAAC;IAACR,OAAO,EAAPA,OAAO;IAAEC,OAAO,EAAEI;GAAI,CAAC;EAC7C,OAAOA,GAAG;AACd;IAMaI,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAAC,MAAA;MAAKC,OAAO,GAAAD,MAAA,CAAPC,OAAO;EAC1CP,gBAAgB,CAAC,UAACT,GAAG;IAAA,OAAKA,GAAG,CAACiB,MAAM,EAAE,KAAK,SAAS,IAAIjB,GAAG,CAACkB,GAAG,EAAE,CAACC,UAAU,CAACH,OAAO,CAAC;IAAC,CAACI,kBAAkB,CACrG;IAAA,OAAO;MACHC,MAAM,EAAE,GAAG;MACXC,OAAO,EAAE;QACL,6BAA6B,EAAE,GAAG;QAClC,8BAA8B,EAAE,4BAA4B;QAC5D,8BAA8B,EAAE;;KAEvC;GAAC,CACL;EAED,OAAO;IACHC,KAAK,WAAAA,MAAC/J,IAAY,EAAEyJ;UAAAA;QAAAA,SAAiB,KAAK;;MACtC,IAAMZ,OAAO,GAAG,SAAVA,OAAOA,CAAIL,GAAgB;QAC7B,IAAMkB,GAAG,GAAGlB,GAAG,CAACkB,GAAG,EAAE;QACrB,IAAMM,OAAO,GAAGN,GAAG,CAACO,SAAS,CAACT,OAAO,CAAC7C,MAAM,CAAC;QAC7C,OACI6B,GAAG,CAACiB,MAAM,EAAE,KAAKA,MAAM,IAAIC,GAAG,CAACC,UAAU,CAACH,OAAO,CAAC,IAAI,CAAC,CAACQ,OAAO,CAACE,KAAK,CAACC,YAAY,CAACnK,IAAI,CAAC,CAAC;OAEhG;MAED,IAAMkJ,GAAG,GAAGC,IAAI,CAACC,EAAE,EAAE;MAErBH,gBAAgB,CAACJ,OAAO,CAAC,CAACe,kBAAkB,CAAC,UAACpB,GAAG;;QAC7C,IAAM4B,SAAS,GAAGlB,GAAG,CAACV,GAAG,CAAC;QAC1B,IAAMqB,MAAM,IAAAQ,iBAAA,GAAGD,SAAS,CAACP,MAAM,YAAAQ,iBAAA,GAAI,GAAG;QACtC,IAAMC,OAAO,GAAGF,SAAS,CAACG,IAAI,IAAIH,SAAS;QAC3C,OAAO;UACHP,MAAM,EAANA,MAAM;UACNC,OAAO,EAAE;YACL,6BAA6B,EAAE;WAClC;UACDU,WAAW,EAAE,kBAAkB;UAC/BD,IAAI,EAAE3K,IAAI,CAAC6K,SAAS,CAACH,OAAO;SAC/B;OACJ,CAAC;MAEF,OAAOpB,GAAG;;GAEjB;AACL;IAwCawB,QAAQ;EAAA,IAAAC,MAAA,gBAAA7I,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA4I,SAAAC,MAAA;IAAA,IAAAC,SAAA,EAAAC,UAAA,EAAAC,QAAA,EAAAC,OAAA,EAAAC,SAAA,EAAAxB,GAAA,EAAAyB,gBAAA,EAAAxM,IAAA,EAAAyM,eAAA;IAAA,OAAArJ,mBAAA,GAAAc,IAAA,UAAAwI,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAtI,IAAA,GAAAsI,SAAA,CAAArI,IAAA;QAAA;UACpB6H,SAAS,GAAAD,MAAA,CAATC,SAAS,EACTC,UAAU,GAAAF,MAAA,CAAVE,UAAU,EACVC,QAAQ,GAAAH,MAAA,CAARG,QAAQ,EACRC,OAAO,GAAAJ,MAAA,CAAPI,OAAO,EACJC,SAAS,gBAAA9G,6BAAA,CAAAyG,MAAA,EAAAU,UAAA;UAEN7B,GAAG,GAAI;YACT,IAAIwB,SAAS,CAACxB,GAAG,KAAK8B,SAAS,EAAE;cAC7B,OAAON,SAAS,CAACxB,GAAG;;YAGxB,IAAA+B,eAAA,GAAsFP,SAAS,CAAxFlL,IAAI;cAAJA,IAAI,GAAAyL,eAAA,cAAG,GAAG,GAAAA,eAAA;cAAAC,eAAA,GAAqER,SAAS,CAA5E7L,IAAI;cAAJA,IAAI,GAAAqM,eAAA,cAAGjL,UAAU,GAAAiL,eAAA;cAAAC,mBAAA,GAAkDT,SAAS,CAAzDU,QAAQ;cAARA,QAAQ,GAAAD,mBAAA,cAAG,MAAM,GAAAA,mBAAA;cAAAE,mBAAA,GAA+BX,SAAS,CAAtCY,QAAQ;cAARA,QAAQ,GAAAD,mBAAA,cAAGvM,cAAc,GAAAuM,mBAAA;YAElF,IAAI,CAACxM,IAAI,EAAE;cACP,IAAMmC,KAAK,GAAG,IAAIC,KAAK,CACnB,8JAA8J,CACjK;;cAED,MAAMD,KAAK;;YAGf,OAAUoK,QAAQ,WAAME,QAAQ,SAAIzM,IAAI,GAAGW,IAAI;WAClD,EAAG;UAAAsL,SAAA,CAAA5I,EAAA,GAEqBoI,SAAS;UAAA,IAAAQ,SAAA,CAAA5I,EAAA;YAAA4I,SAAA,CAAArI,IAAA;YAAA;;UAAAqI,SAAA,CAAArI,IAAA;UAAA,OAAW1E,gBAAgB,EAAE,CAACuM,SAAS,EAAE;QAAA;UAAAQ,SAAA,CAAA5I,EAAA,GAAA4I,SAAA,CAAAhI,IAAA;QAAA;UAArE6H,gBAAgB,GAAAG,SAAA,CAAA5I,EAAA;UAChB/D,IAAI,GAAGD,aAAa,EAAE;UAAA4M,SAAA,CAAArI,IAAA;UAAA,OAEtBtE,IAAI,CAACoN,YAAY,EAAE;QAAA;UAAA,KACrBf,QAAQ;YAAAM,SAAA,CAAArI,IAAA;YAAA;;UAAAqI,SAAA,CAAArI,IAAA;UAAA,OACFtE,IAAI,CAACqN,WAAW,CAAChB,QAAQ,CAAC;QAAA;UAAA,KAEhCC,OAAO;YAAAK,SAAA,CAAArI,IAAA;YAAA;;UAAAqI,SAAA,CAAArI,IAAA;UAAA,OACDtE,IAAI,CAACsN,SAAS,CAAAnI,KAAA,CAAdnF,IAAI,EAAcsM,OAAO,CAAC;QAAA;UAAAK,SAAA,CAAArI,IAAA;UAAA,OAE9BtE,IAAI,CAACuN,YAAY,CAAIf,gBAAgB,qBAAkB,CAAC;QAAA;UAAAG,SAAA,CAAArI,IAAA;UAAA,OACxDtE,IAAI,CAACwN,oBAAoB,CAAC,CAAC;YAACC,IAAI,EAAE,sBAAsB;YAAEC,KAAK,EAAEtB,UAAU,GAAG,MAAM,GAAG;WAAQ,CAAC,CAAC;QAAA;UAAAO,SAAA,CAAArI,IAAA;UAAA,OAGjGtE,IAAI,CAAC2N,qBAAqB,CAAC;YAC7B,IAAMC,KAAK,GAAGC,QAAQ,CAACC,aAAa,CAAC,OAAO,CAAC;YAC7CF,KAAK,CAACG,SAAS,ymBAed;YACD3E,MAAM,CAAC4E,gBAAgB,CAAC,kBAAkB,EAAE;cACxCH,QAAQ,CAACI,IAAI,CAACC,WAAW,CAACN,KAAK,CAAC;aACnC,CAAC;WACL,CAAC;QAAA;UAAA,KAEElE,wBAAwB;YAAAiD,SAAA,CAAArI,IAAA;YAAA;;UAAAqI,SAAA,CAAArI,IAAA;UAAA,OAClBtE,IAAI,CAACmO,sBAAsB,CAAC,IAAI,CAAC;QAAA;UACvCnO,IAAI,CAACoO,EAAE,CAAC,SAAS,EAAExE,kBAAkB,CAAC;QAAC;UAAA+C,SAAA,CAAAtI,IAAA;UAAAsI,SAAA,CAAArI,IAAA;UAAA,OAIjCtE,IAAI,QAAK,CAAC+K,GAAG,CAAC;QAAA;UAAA4B,SAAA,CAAArI,IAAA;UAAA;QAAA;UAAAqI,SAAA,CAAAtI,IAAA;UAAAsI,SAAA,CAAA0B,EAAA,GAAA1B,SAAA;UAAA,KAEfA,SAAA,CAAA0B,EAAA,CAAY7L,OAAO,CAACpC,QAAQ,CAAC,6BAA6B,CAAC;YAAAuM,SAAA,CAAArI,IAAA;YAAA;;UACtDmI,eAAe,GAAG,IAAI3J,KAAK,2BAAyBiI,GAAG,6BAA0B,CAAC;UACxFjI,KAAK,CAACwL,iBAAiB,CAAC7B,eAAe,EAAEV,QAAQ,CAAC;UAAC,MAC7CU,eAAe;QAAA;UAAA,MAAAE,SAAA,CAAA0B,EAAA;QAAA;UAAA1B,SAAA,CAAArI,IAAA;UAAA,OAKvBtE,IAAI,CAACuO,eAAe,CAAC,oCAAoC,CAAC;QAAA;UAAA,OAAA5B,SAAA,CAAA/F,MAAA,WAEzDX,UAAU,CAACjG,IAAI,CAAC;QAAA;QAAA;UAAA,OAAA2M,SAAA,CAAA3H,IAAA;;OAAAiH,QAAA;GAC1B;EAAA,gBAjFYF,QAAQA,CAAAyC,IAAA;IAAA,OAAAxC,MAAA,CAAA7G,KAAA,OAAAC,SAAA;;AAAA;AAmFrB,IAAMqJ,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAAC,MAAA;mCAA8D,EAAE,GAAAA,MAAA;IAA3D1O,IAAI,GAAA2O,MAAA,CAAJ3O,IAAI;IAAEuD,OAAO,GAAAoL,MAAA,CAAPpL,OAAO;EAGrC,IAAMqL,YAAY,GAAQ,EAAE;EAAC,IAAAC,KAAA,YAAAA,QAC+B;IAAvD,IAAAC,kBAAA,GAAAC,eAAA,CAAAC,EAAA;MAAOC,SAAS,GAAAH,kBAAA;MAAEI,OAAO,GAAAJ,kBAAA;IAC1BF,YAAY,CAACK,SAAS,CAAC,gBAAA9L,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA8L;MAAA,IAAAC,GAAA;QAAAxD,IAAA;QAAAyD,KAAA;QAAAC,IAAA;QAAAC,KAAA;QAAAC,SAAA;QAAAhJ,aAAA;QAAAiJ,gBAAA;QAAAC,OAAA,GAAAtK,SAAA;MAAA,OAAAhC,mBAAA,GAAAc,IAAA,UAAAyL,WAAAC,UAAA;QAAA,kBAAAA,UAAA,CAAAvL,IAAA,GAAAuL,UAAA,CAAAtL,IAAA;UAAA;YAAAsL,UAAA,CAAAtL,IAAA;YAAA,OACJuL,8BAAW,CAAC7P,IAAI,WAAJA,IAAI,GAAID,aAAa,EAAE,CAAC;UAAA;YAAhDqP,GAAG,GAAAQ,UAAA,CAAAjL,IAAA;YAAAiL,UAAA,CAAAtL,IAAA;YAAA,OACU8K,GAAG,CAACU,CAAC,CAAC,MAAM,CAAC;UAAA;YAA1BlE,IAAI,GAAAgE,UAAA,CAAAjL,IAAA;YAAA,KAAA0K,KAAA,GAAAK,OAAA,CAAA1H,MAAA,EAFsBsH,IAAS,OAAArH,KAAA,CAAAoH,KAAA,GAAAE,KAAA,MAAAA,KAAA,GAAAF,KAAA,EAAAE,KAAA;cAATD,IAAS,CAAAC,KAAA,IAAAG,OAAA,CAAAH,KAAA;;YAGnCC,SAAS,MAAAO,MAAA,CAAOT,IAAI;YAC1B,IAAIL,SAAS,CAACjE,UAAU,CAAC,QAAQ,CAAC,EAAE;cAChC,IAAIwE,SAAS,CAACxH,MAAM,KAAK,CAAC,EAAE;gBACxBwH,SAAS,CAAC9E,IAAI,CAACmC,SAAS,CAAC;;cAE7B2C,SAAS,CAAC9E,IAAI,CAAC;gBAACsF,OAAO,EAAE;eAAM,CAAC;;YACnCJ,UAAA,CAAAtL,IAAA;YAAA,OAC0C4K,OAAO,CAAA/J,KAAA,UAAC5B,OAAO,WAAPA,OAAO,GAAIqI,IAAI,EAAAmE,MAAA,CAAKP,SAAS,EAAC;UAAA;YAA3EhJ,aAAa,GAAAoJ,UAAA,CAAAjL,IAAA;YAEb8K,gBAAgB,GAAGtJ,MAAM,CAACC,MAAM,CAACI,aAAa,CAAC;YAErDiJ,gBAAgB,CAAChL,UAAU;cAAA,IAAAwL,MAAA,GAAA9M,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA6M,SAAO1K,OAAgC;gBAAA,OAAApC,mBAAA,GAAAc,IAAA,UAAAiM,UAAAC,SAAA;kBAAA,kBAAAA,SAAA,CAAA/L,IAAA,GAAA+L,SAAA,CAAA9L,IAAA;oBAAA;sBAAA,IAC5DkB,OAAO,YAAPA,OAAO,CAAE+C,eAAe;wBAAA6H,SAAA,CAAA9L,IAAA;wBAAA;;sBAAA8L,SAAA,CAAA9L,IAAA;sBAAA,OACnB,CAACtE,IAAI,WAAJA,IAAI,GAAID,aAAa,EAAE,EAAEyI,kBAAkB,EAAE;oBAAA;sBAAA4H,SAAA,CAAA9L,IAAA;sBAAA,OAElDrB,eAAe,CAACuD,aAAa,EAAAb,QAAA,KAAMH,OAAO;wBAAE7B,QAAQ,EAAE;wBAAM,CAAC;oBAAA;sBAAA,OAAAyM,SAAA,CAAAxJ,MAAA,WAC5DJ,aAAa,CAAC/B,UAAU,CAACC,yBAAyB,CAACc,OAAO,CAAC,CAAC;oBAAA;oBAAA;sBAAA,OAAA4K,SAAA,CAAApL,IAAA;;mBAAAkL,QAAA;eACtE;cAAA,iBAAAG,IAAA;gBAAA,OAAAJ,MAAA,CAAA9K,KAAA,OAAAC,SAAA;;;YAEDqK,gBAAgB,CAACzI,KAAK;cAAA,IAAAsJ,MAAA,GAAAnN,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAkN,SAAO/K,OAAsB;gBAAA,OAAApC,mBAAA,GAAAc,IAAA,UAAAsM,UAAAC,SAAA;kBAAA,kBAAAA,SAAA,CAAApM,IAAA,GAAAoM,SAAA,CAAAnM,IAAA;oBAAA;sBAAAmM,SAAA,CAAAnM,IAAA;sBAAA,OAC5CsB,cAAc,CAACY,aAAa,CAAC;oBAAA;sBAAA,OAAAiK,SAAA,CAAA7J,MAAA,WAC5BJ,aAAa,CAACQ,KAAK,CAACxB,OAAO,CAAC;oBAAA;oBAAA;sBAAA,OAAAiL,SAAA,CAAAzL,IAAA;;mBAAAuL,QAAA;eACtC;cAAA,iBAAAG,IAAA;gBAAA,OAAAJ,MAAA,CAAAnL,KAAA,OAAAC,SAAA;;;YAEDqK,gBAAgB,CAACpJ,IAAI;cAAA,IAAAsK,MAAA,GAAAxN,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAuN,UAAOnK,IAAY,EAAEjB,OAAyB;gBAAA,OAAApC,mBAAA,GAAAc,IAAA,UAAA2M,WAAAC,UAAA;kBAAA,kBAAAA,UAAA,CAAAzM,IAAA,GAAAyM,UAAA,CAAAxM,IAAA;oBAAA;sBAAAwM,UAAA,CAAAxM,IAAA;sBAAA,OAC5DsB,cAAc,CAACY,aAAa,CAAC;oBAAA;sBAAA,OAAAsK,UAAA,CAAAlK,MAAA,WAC5BJ,aAAa,CAACH,IAAI,CAACI,IAAI,EAAEjB,OAAO,CAAC;oBAAA;oBAAA;sBAAA,OAAAsL,UAAA,CAAA9L,IAAA;;mBAAA4L,SAAA;eAC3C;cAAA,iBAAAG,IAAA,EAAAC,IAAA;gBAAA,OAAAL,MAAA,CAAAxL,KAAA,OAAAC,SAAA;;;YAEDqK,gBAAgB,CAAClI,MAAM,gBAAApE,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA4N;cAAA,IAAAC,OAAA,GAAA9L,SAAA;cAAA,OAAAhC,mBAAA,GAAAc,IAAA,UAAAiN,WAAAC,UAAA;gBAAA,kBAAAA,UAAA,CAAA/M,IAAA,GAAA+M,UAAA,CAAA9M,IAAA;kBAAA;oBAAA8M,UAAA,CAAA9M,IAAA;oBAAA,OAChBsB,cAAc,CAACY,aAAa,CAAC;kBAAA;oBAAA,OAAA4K,UAAA,CAAAxK,MAAA,WAC5BJ,aAAa,CAACe,MAAM,CAAApC,KAAA,CAApBqB,aAAa,EAAA0K,OAAiB,CAAC;kBAAA;kBAAA;oBAAA,OAAAE,UAAA,CAAApM,IAAA;;iBAAAiM,SAAA;aACzC;YAAC,OAAArB,UAAA,CAAAhJ,MAAA,WAEK6I,gBAAgB;UAAA;UAAA;YAAA,OAAAG,UAAA,CAAA5K,IAAA;;SAAAmK,SAAA;KAC1B;GACJ;EAxCD,SAAAH,EAAA,MAAAD,eAAA,GAAmC5I,MAAM,CAACkL,OAAO,CAACC,0BAAO,CAAC,EAAAtC,EAAA,GAAAD,eAAA,CAAA/G,MAAA,EAAAgH,EAAA;IAAAH,KAAA;;EAyC1D,OAAOD,YAAY;AACvB,CAAC;IAEY2C,SAAS,GAAG,SAAZA,SAASA,CAAIvR,IAAU;EAAA,OAAKyO,iBAAiB,CAAC;IAACzO,IAAI,EAAJA;GAAK,CAAC;AAAA;IAErDwR,MAAM,gBAAG/C,iBAAiB;IAE1BgD,MAAM,GAAG,SAATA,MAAMA,CAAIlO,OAAsB;EAAA,OAAKkL,iBAAiB,CAAC;IAAClL,OAAO,EAAPA;GAAQ,CAAC;AAAA;AAI9EmO,UAAU,eAAAvO,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAC,SAAAsO;EAAA,OAAAvO,mBAAA,GAAAc,IAAA,UAAA0N,WAAAC,UAAA;IAAA,kBAAAA,UAAA,CAAAxN,IAAA,GAAAwN,UAAA,CAAAvN,IAAA;MAAA;QAAAuN,UAAA,CAAAvN,IAAA;QAAA,OACDvE,aAAa,EAAE,CAACoO,sBAAsB,CAAC,KAAK,CAAC;MAAA;QAAA0D,UAAA,CAAAvN,IAAA;QAAA,OAE5CzE,MAAc,CAACiS,aAAa,CAACC,SAAS,EAAE;MAAA;MAAA;QAAA,OAAAF,UAAA,CAAA7M,IAAA;;KAAA2M,SAAA;AAAA,CAClD,GAAC;AAEF/O,SAAS,eAAAO,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAC,SAAA2O;EAAA,IAAAhS,IAAA;EAAA,OAAAoD,mBAAA,GAAAc,IAAA,UAAA+N,WAAAC,UAAA;IAAA,kBAAAA,UAAA,CAAA7N,IAAA,GAAA6N,UAAA,CAAA5N,IAAA;MAAA;QAAA4N,UAAA,CAAA7N,IAAA;QAEIrE,IAAI,GAAGD,aAAa,EAAE;QAC5B4J,eAAe,GAAG,EAAE;QACpBD,wBAAwB,GAAG,KAAK;QAChC1J,IAAI,CAACmS,GAAG,CAAC,SAAS,EAAEvI,kBAAkB,CAAC;;QAEvCsI,UAAA,CAAA5N,IAAA;QAAA,OACMtE,IAAI,QAAK,CAAC,aAAa,CAAC;MAAA;QAAAkS,UAAA,CAAA5N,IAAA;QAAA;MAAA;QAAA4N,UAAA,CAAA7N,IAAA;QAAA6N,UAAA,CAAAnO,EAAA,GAAAmO,UAAA;MAAA;MAAA;QAAA,OAAAA,UAAA,CAAAlN,IAAA;;KAAAgN,SAAA;AAAA,CAIrC,GAAC;AAEF;;;;;;;;;IASaI,WAAW,GAAG,SAAdA,WAAWA,CAAIC,QAAgB;EACxC,IAAMC,OAAO,GAAG,CAACrS,IAAI;EACrB,IAAMsS,UAAU,GAAG,CAAC,CAACrS,OAAO,CAACG,GAAG,CAACmS,QAAQ;EACzC,IAAMC,UAAU,GAAGH,OAAO,IAAIC,UAAU;EAExC,IAAMG,iBAAiB,GAAGrR,IAAI,CAACC,IAAI,CAACqR,SAAS,EAAE,IAAI,EAAE,qBAAqB,CAAC;EAE3E,IAAIF,UAAU,EAAE;IACZ,IAAMG,WAAW,GAAGlT,QAAQ,wBAAsBgT,iBAAiB,WAAQ,CAAC,CAACG,QAAQ,EAAE,CAACC,IAAI,EAAE;IAE9F,IAAI,CAACF,WAAW,EAAE;MACd,MAAM9P,KAAK,CAAC,wCAAwC,CAAC;;IAGzDpD,QAAQ,gBAAc2S,QAAQ,SAAIO,WAAW,UAAO,CAAC;IAErD,IAAMG,OAAO,GAAG1R,IAAI,CAACC,IAAI,CAAC,MAAM,EAAED,IAAI,CAAC2R,QAAQ,CAACX,QAAQ,CAAC,CAAC;IAE1DlR,EAAE,CAAC8R,YAAY,CAACZ,QAAQ,EAAEU,OAAO,CAAC;IAElC,OAAOA,OAAO;GACjB,MAAM;IACH,OAAOV,QAAQ;;AAEvB;AAEA;;;IAGaa,IAAI,GAAG,SAAPA,IAAIA,CAAOC,WAAiC,EAAEnD,OAAO,EAAUoD,QAAQ;MAAzBpD,OAAO;IAAPA,OAAO,GAAG,KAAK;;EAAA,IAAEoD,QAAQ;IAARA,QAAQ,GAAG,EAAE;;EACrF,IAAMC,SAAS,GAAG9O,IAAI,CAACC,GAAG,EAAE;EAC5B,IAAM8O,UAAU,GAAG,IAAIxQ,KAAK,EAAE,CAACC,KAAK;EAEpC,OAAO,IAAI6B,OAAO,CAAC,UAAC2O,OAAO,EAAEC,MAAM;IAC/B,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAI5Q,KAAc;MACjC,IAAI0B,IAAI,CAACC,GAAG,EAAE,GAAG6O,SAAS,IAAIrD,OAAO,EAAE;QACnC,IAAInN,KAAK,YAAYC,KAAK,EAAE;UACxB,IAAID,KAAK,CAACL,OAAO,KAAK,qBAAqB,EAAE;YACzCK,KAAK,CAACE,KAAK,GAAGuQ,UAAU;;;QAGhCE,MAAM,CAAC3Q,KAAK,CAAC;QACb;;;MAGJiC,UAAU,CAAC4O,cAAc,EAAEN,QAAQ,CAAC;KACvC;IACD,IAAMM,cAAc,GAAG,SAAjBA,cAAcA;MAChB,IAAI;QACA9O,OAAO,CAAC2O,OAAO,CAACJ,WAAW,EAAE,CAAC,CACzBQ,IAAI,CAAC,UAAC9O,CAAC;UAAA,OAAK0O,OAAO,CAAC1O,CAAC,CAAC;UAAC,SAClB,CAAC4O,aAAa,CAAC;OAC5B,CAAC,OAAO5Q,KAAK,EAAE;QACZ4Q,aAAa,CAAC5Q,KAAK,CAAC;;KAE3B;IACDiC,UAAU,CAAC4O,cAAc,EAAE,CAAC,CAAC;GAChC,CAAC;AACN;IAEaE,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAClCrQ,OAA+B,EAC/ByM,OAAO,EACPoD,QAAQ;MADRpD,OAAO;IAAPA,OAAO,GAAG,KAAK;;EAAA,IACfoD,QAAQ;IAARA,QAAQ,GAAG,GAAG;;EAEd,IAAME,UAAU,GAAG,IAAIxQ,KAAK,EAAE,CAACC,KAAK;EAEpC,IAAMmQ,IAAI;IAAA,IAAAW,MAAA,GAAA1Q,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAyQ;MAAA,IAAA/P,EAAA,EAAAgQ,GAAA;MAAA,OAAA3Q,mBAAA,GAAAc,IAAA,UAAA8P,WAAAC,UAAA;QAAA,kBAAAA,UAAA,CAAA5P,IAAA,GAAA4P,UAAA,CAAA3P,IAAA;UAAA;YACHP,EAAE,GAAGQ,IAAI,CAACC,GAAG,EAAE;UAAA;YAAA,MACdD,IAAI,CAACC,GAAG,EAAE,GAAGT,EAAE,GAAGiM,OAAO;cAAAiE,UAAA,CAAA3P,IAAA;cAAA;;YAAA2P,UAAA,CAAA3P,IAAA;YAAA,OAEVf,OAAO,CAAC2Q,WAAW,EAAE;UAAA;YAAjCH,GAAG,GAAAE,UAAA,CAAAtP,IAAA;YAAA,IACJoP,GAAG;cAAAE,UAAA,CAAA3P,IAAA;cAAA;;YAAA,OAAA2P,UAAA,CAAArN,MAAA;UAAA;YAAAqN,UAAA,CAAA3P,IAAA;YAAA,OAGF,IAAIM,OAAO,CAAC,UAAC2O,OAAO;cAAA,OAAKzO,UAAU,CAACyO,OAAO,EAAEH,QAAQ,CAAC;cAAC;UAAA;YAAAa,UAAA,CAAA3P,IAAA;YAAA;UAAA;YAAA,MAE3D,IAAIxB,KAAK,CAAC,qBAAqB,CAAC;UAAA;UAAA;YAAA,OAAAmR,UAAA,CAAAjP,IAAA;;SAAA8O,SAAA;KACzC;IAAA,gBAXKZ,IAAIA;MAAA,OAAAW,MAAA,CAAA1O,KAAA,OAAAC,SAAA;;KAWT;EAED,OAAO8N,IAAI,EAAE,SAAM,CAAC,UAACrQ,KAAK;IACtB,IAAIA,KAAK,CAACL,OAAO,KAAK,qBAAqB,EAAE;MACzCK,KAAK,CAACE,KAAK,GAAGuQ,UAAU;;IAE5B,MAAMzQ,KAAK;GACd,CAAC;AACN;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"acceptance-testing.cjs.development.js","sources":["../src/coverage.ts","../src/index.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\n\nimport type {Page} from 'puppeteer';\n\nconst getGlobalPage = (): Page => (global as any).page;\n\nexport const getRootPath = () => {\n const rootPath = expect.getState().snapshotState._rootDir;\n if (!rootPath) {\n throw new Error('Root path not found');\n }\n return rootPath;\n};\n\n/**\n * We want to clear coverage files from previous runs, but at this point it is not easy because each\n * worker runs a different instance of this script, so we can't just clear the coverage folder at\n * the beginning of the test run.\n *\n * The solution is to remove the coverage folder when the stored ppid (parent process id) is\n * different from the current one\n */\nconst prepareCoverageReportPath = ({coveragePath}: {coveragePath: string}) => {\n const ppidFile = path.join(coveragePath, '.ppid');\n const ppid = process.ppid.toString();\n if (!fs.existsSync(ppidFile) || fs.readFileSync(ppidFile, 'utf-8') !== ppid) {\n // the condition is just to make sure we don't remove files outside the repo\n if (getRootPath() === process.cwd() && path.normalize(coveragePath).startsWith(process.cwd())) {\n fs.rmSync(coveragePath, {recursive: true, force: true});\n }\n fs.mkdirSync(coveragePath, {recursive: true});\n fs.writeFileSync(ppidFile, ppid);\n }\n};\n\n/**\n * Asumes the code was instrumented with istanbul and the coverage report stored in `window.__coverage__`.\n * If not, this function does nothing.\n */\nexport const collectCoverageIfAvailable = async ({coveragePath}: {coveragePath: string}): Promise<void> => {\n try {\n const coverage = await getGlobalPage().evaluate(() => {\n return (window as any).__coverage__;\n });\n if (!coverage) {\n return;\n }\n\n prepareCoverageReportPath({coveragePath});\n const nycOutputPath = path.join(coveragePath, '.nyc_output');\n fs.mkdirSync(nycOutputPath, {recursive: true});\n\n Object.values(coverage).forEach((cov: any) => {\n if (cov && cov.path && cov.hash) {\n fs.writeFileSync(\n path.join(nycOutputPath, cov.hash + '.json'),\n JSON.stringify({[cov.path]: cov})\n );\n }\n });\n } catch (e) {\n // ignore\n }\n};\n","import path from 'path';\nimport fs from 'fs';\nimport findRoot from 'find-root';\nimport {getDocument, queries} from 'pptr-testing-library';\nimport {configureToMatchImageSnapshot} from 'jest-image-snapshot';\nimport globToRegExp from 'glob-to-regexp';\nimport {execSync} from 'child_process';\nimport {collectCoverageIfAvailable} from './coverage';\n\nimport type {\n Page,\n ElementHandle,\n ScreenshotOptions,\n Browser,\n ClickOptions,\n Viewport,\n GeolocationOptions,\n HTTPRequest,\n ResponseForRequest,\n} from 'puppeteer';\nimport type {getQueriesForElement} from 'pptr-testing-library';\n\ntype CustomScreenshotOptions = ScreenshotOptions & {\n skipNetworkWait?: boolean;\n};\n\nexport const getGlobalBrowser = (): Browser => (global as any).browser;\nexport const getGlobalPage = (): Page => (global as any).page;\n\nconst isCi = process.argv.includes('--ci') || process.env.CI;\nconst isUsingDockerizedChromium = isCi || new URL(getGlobalBrowser().wsEndpoint()).port === '9223';\n\nexport const serverHostName = ((): string => {\n if (isCi) {\n return 'localhost';\n }\n\n if (isUsingDockerizedChromium) {\n return process.platform === 'linux' ? '172.17.0.1' : 'host.docker.internal';\n }\n\n return 'localhost';\n})();\n\nconst rootDir = findRoot(process.cwd());\nconst pkg = JSON.parse(fs.readFileSync(path.join(rootDir, 'package.json'), 'utf-8'));\nconst projectConfig = pkg.acceptanceTests ?? {};\nconst server = (isCi ? projectConfig.ciServer : projectConfig.devServer) ?? projectConfig.server;\nconst coveragePath = path.join(rootDir, projectConfig.coveragePath ?? 'reports/coverage-acceptance');\n\nexport const serverPort = server?.port;\n\nconst toMatchImageSnapshot = configureToMatchImageSnapshot({\n failureThreshold: 0,\n failureThresholdType: 'percent',\n customSnapshotIdentifier: ({defaultIdentifier}) => defaultIdentifier,\n});\n\nlet calledToMatchImageSnapshotOutsideDocker = false;\n\nconst localToMatchImageSnapshot = () => {\n calledToMatchImageSnapshotOutsideDocker = true;\n // let the expectation pass, then fail in afterEach. This way we allow developers to debug screenshot tests in local\n // but don't allow them to save screenshots taken outside the dockerized chromium\n return {\n message: () => '',\n pass: true,\n };\n};\n\nexpect.extend({\n toMatchImageSnapshot: isUsingDockerizedChromium ? toMatchImageSnapshot : localToMatchImageSnapshot,\n});\n\nafterEach(() => {\n if (calledToMatchImageSnapshotOutsideDocker) {\n const error = new Error(\n `Calling .toMatchImageSnapshot() is not allowed outside dockerized browser. Please, run your screenshot test in headless mode.`\n );\n error.stack = (error.stack || '').split('\\n')[0];\n throw error;\n }\n});\n\ntype WaitForPaintEndOptions = {\n fullPage?: boolean;\n captureBeyondViewport?: boolean;\n};\n\nconst waitForPaintEnd = async (\n element: ElementHandle | Page,\n {fullPage = true, captureBeyondViewport}: WaitForPaintEndOptions = {}\n) => {\n const MAX_WAIT = 15000;\n const STEP_TIME = 250;\n const t0 = Date.now();\n\n let buf1 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n await new Promise((r) => setTimeout(r, STEP_TIME));\n let buf2 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n\n // buffers are different if compare != 0\n while (buf1.compare(buf2)) {\n if (Date.now() - t0 > MAX_WAIT) {\n throw Error('Paint end timeout');\n }\n buf1 = buf2;\n await new Promise((r) => setTimeout(r, STEP_TIME));\n buf2 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n }\n};\n\nexport interface PageApi extends Omit<Page, 'click' | 'type' | 'select'> {\n clear: (selector: ElementHandle) => Promise<void>;\n // These are overridden:\n type: (selector: ElementHandle, text: string, options?: {delay: number}) => Promise<void>;\n click: (selector: ElementHandle, options?: ClickOptions) => Promise<void>;\n select: (selector: ElementHandle, ...values: string[]) => Promise<string[]>;\n screenshot: (options?: CustomScreenshotOptions) => Promise<Buffer | string | void>;\n}\n\nconst normalizeSreenshotOptions = ({captureBeyondViewport = false, ...options}: ScreenshotOptions = {}) => {\n // Puppeter default for captureBeyondViewport is true, but we think false is a better default.\n // When this is true, the fixed elements (like fixed footers) are relative to the original page\n // viewport, not to the full page, so those elements look weird in fullPage screenshots.\n return {...options, captureBeyondViewport};\n};\n\n// Puppeteer already calls scrollIntoViewIfNeeded before clicking an element. But it doesn't work in all situations\n// For example, when there is a fixed footer in the page and the element to click is under it, the browser won't scroll\n// because the element is already in the viewport (the ifNeeded part is important here). By forcing the scroll to the\n// center, we manage to fix these edge cases.\nconst scrollIntoView = (el: ElementHandle) => el.evaluate((e) => e.scrollIntoView({block: 'center'}));\n\nexport const getPageApi = (page: Page): PageApi => {\n const api: PageApi = Object.create(page);\n\n api.type = async (elementHandle, text, options) => {\n await scrollIntoView(elementHandle);\n return elementHandle.type(text, options);\n };\n api.click = async (elementHandle, options) => {\n await scrollIntoView(elementHandle);\n return elementHandle.click(options);\n };\n api.select = async (elementHandle, ...values) => {\n await scrollIntoView(elementHandle);\n return elementHandle.select(...values);\n };\n\n api.screenshot = async (options?: CustomScreenshotOptions) => {\n if (!options?.skipNetworkWait) {\n await page.waitForNetworkIdle();\n }\n await waitForPaintEnd(page, options);\n return page.screenshot(normalizeSreenshotOptions(options));\n };\n\n api.clear = async (elementHandle) => {\n await elementHandle.click({clickCount: 3});\n await elementHandle.press('Delete');\n };\n\n // For some reason, puppeteer browserContext.overridePermissions doesn't work with newer chrome versions.\n // This workaround polyfills the browser geolocation api to return the mocked position\n api.setGeolocation = (position: GeolocationOptions) =>\n page.evaluate((position) => {\n window.navigator.geolocation.getCurrentPosition = (callback) => {\n // @ts-ignore\n callback({\n coords: position,\n });\n };\n }, position as any);\n\n return api;\n};\n\nlet needsRequestInterception = false;\ntype RequestMatcherFn = (req: HTTPRequest) => boolean;\nlet requestHandlers: Array<{\n matcher: RequestMatcherFn;\n handler: jest.Mock<any, any>;\n}> = [];\n\nconst requestInterceptor = (req: HTTPRequest) => {\n const {handler} = requestHandlers.find(({matcher}) => matcher(req)) ?? {handler: null};\n if (!handler) {\n req.continue();\n return;\n }\n const response = handler(req);\n req.respond(response);\n};\n\nexport const interceptRequest = (\n matcher: RequestMatcherFn\n): jest.Mock<Partial<ResponseForRequest>, [HTTPRequest]> => {\n needsRequestInterception = true;\n const spy = jest.fn();\n requestHandlers.push({matcher, handler: spy});\n return spy;\n};\n\ntype ApiEndpointMock = {\n spyOn(path: string, method?: string): jest.Mock<unknown, [HTTPRequest]>;\n};\n\nexport const createApiEndpointMock = ({baseUrl}: {baseUrl: string}): ApiEndpointMock => {\n interceptRequest((req) => req.method() === 'OPTIONS' && req.url().startsWith(baseUrl)).mockImplementation(\n () => ({\n status: 204,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST,PATCH,PUT,GET,OPTIONS',\n 'Access-Control-Allow-Headers': '*',\n },\n })\n );\n\n return {\n spyOn(path: string, method: string = 'GET') {\n const matcher = (req: HTTPRequest) => {\n const url = req.url();\n const urlPath = url.substring(baseUrl.length);\n return (\n req.method() === method && url.startsWith(baseUrl) && !!urlPath.match(globToRegExp(path))\n );\n };\n\n const spy = jest.fn();\n\n interceptRequest(matcher).mockImplementation((req) => {\n const spyResult = spy(req);\n const status = spyResult.status ?? 200;\n const resBody = spyResult.body || spyResult;\n return {\n status,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n },\n contentType: 'application/json',\n body: JSON.stringify(resBody),\n };\n });\n\n return spy;\n },\n };\n};\n\ntype CookieConfig = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'Strict' | 'Lax' | 'None';\n expires?: number;\n priority?: 'Low' | 'Medium' | 'High';\n sameParty?: boolean;\n sourceScheme?: 'Unset' | 'NonSecure' | 'Secure';\n sourcePort?: number;\n};\n\ninterface OpenPageCommonConfig {\n userAgent?: string;\n viewport?: Viewport;\n isDarkMode?: boolean;\n cookies?: Array<CookieConfig>;\n}\n\ninterface OpenPageUrlConfig extends OpenPageCommonConfig {\n url: string;\n}\n\ninterface OpenPagePathConfig extends OpenPageCommonConfig {\n url?: undefined;\n\n path?: string;\n port?: number;\n protocol?: string;\n hostname?: string;\n}\n\ntype OpenPageConfig = OpenPageUrlConfig | OpenPagePathConfig;\n\nexport const openPage = async ({\n userAgent,\n isDarkMode,\n viewport,\n cookies,\n ...urlConfig\n}: OpenPageConfig): Promise<PageApi> => {\n const url = ((): string => {\n if (urlConfig.url !== undefined) {\n return urlConfig.url;\n }\n\n const {path = '/', port = serverPort, protocol = 'http', hostname = serverHostName} = urlConfig;\n\n if (!port) {\n const error = new Error(\n 'You must specify a port. You can specify it when calling openPage() or by configuring a dev and ci server in the acceptanceTests config in your package.json'\n );\n // Error.captureStackTrace(error, openPage);\n throw error;\n }\n\n return `${protocol}://${hostname}:${port}${path}`;\n })();\n\n const currentUserAgent = userAgent || (await getGlobalBrowser().userAgent());\n const page = getGlobalPage();\n\n await page.bringToFront();\n if (viewport) {\n await page.setViewport(viewport);\n }\n if (cookies) {\n await page.setCookie(...cookies);\n }\n await page.setUserAgent(`${currentUserAgent} acceptance-test`);\n await page.emulateMediaFeatures([{name: 'prefers-color-scheme', value: isDarkMode ? 'dark' : 'light'}]);\n\n // A set of styles to make screenshot tests more reliable.\n await page.evaluateOnNewDocument(() => {\n const style = document.createElement('style');\n style.innerHTML = `\n *, *:after, *:before {\n transition-delay: 0s !important;\n transition-duration: 0s !important;\n animation-delay: -0.0001s !important;\n animation-duration: 0s !important;\n animation-play-state: paused !important;\n caret-color: transparent !important;\n font-variant-ligatures: none !important;\n }\n *::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n }\n `;\n window.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild(style);\n });\n });\n\n if (needsRequestInterception) {\n await page.setRequestInterception(true);\n page.on('request', requestInterceptor);\n }\n\n try {\n await page.goto(url);\n } catch (e) {\n if ((e as Error).message.includes('net::ERR_CONNECTION_REFUSED')) {\n const connectionError = new Error(`Could not connect to ${url}. Is the server running?`);\n Error.captureStackTrace(connectionError, openPage);\n throw connectionError;\n } else {\n throw e;\n }\n }\n await page.waitForFunction('document.fonts.status === \"loaded\"');\n\n return getPageApi(page);\n};\n\nconst buildQueryMethods = ({page, element}: {page?: Page; element?: ElementHandle} = {}): ReturnType<\n typeof getQueriesForElement\n> => {\n const boundQueries: any = {};\n for (const [queryName, queryFn] of Object.entries(queries)) {\n boundQueries[queryName] = async (...args: any) => {\n const doc = await getDocument(page ?? getGlobalPage());\n const body = await doc.$('body');\n const queryArgs = [...args];\n if (queryName.startsWith('findBy')) {\n if (queryArgs.length === 1) {\n queryArgs.push(undefined);\n }\n queryArgs.push({timeout: 10000});\n }\n const elementHandle: ElementHandle = await queryFn(element ?? body, ...queryArgs);\n\n const newElementHandle = Object.create(elementHandle);\n\n newElementHandle.screenshot = async (options: CustomScreenshotOptions) => {\n if (!options?.skipNetworkWait) {\n await (page ?? getGlobalPage()).waitForNetworkIdle();\n }\n await waitForPaintEnd(elementHandle, {...options, fullPage: false});\n return elementHandle.screenshot(normalizeSreenshotOptions(options));\n };\n\n newElementHandle.click = async (options?: ClickOptions) => {\n await scrollIntoView(elementHandle);\n return elementHandle.click(options);\n };\n\n newElementHandle.type = async (text: string, options?: {delay: number}) => {\n await scrollIntoView(elementHandle);\n return elementHandle.type(text, options);\n };\n\n newElementHandle.select = async (...values: Array<string>) => {\n await scrollIntoView(elementHandle);\n return elementHandle.select(...values);\n };\n\n return newElementHandle;\n };\n }\n return boundQueries;\n};\n\nexport const getScreen = (page: Page) => buildQueryMethods({page});\n\nexport const screen = buildQueryMethods();\n\nexport const within = (element: ElementHandle) => buildQueryMethods({element});\n\nexport type {ElementHandle, Viewport} from 'puppeteer';\n\nbeforeEach(async () => {\n await getGlobalPage().setRequestInterception(false);\n\n // by resetting the page we clean up all the evaluateOnNewDocument calls, which are persistent between documents\n await (global as any).jestPuppeteer.resetPage();\n});\n\nafterEach(async () => {\n await collectCoverageIfAvailable({coveragePath});\n\n try {\n const page = getGlobalPage();\n requestHandlers = [];\n needsRequestInterception = false;\n page.off('request', requestInterceptor);\n\n // clear tab, this way we clear the DOM and stop js execution or pending requests\n await page.goto('about:blank');\n } catch (e) {\n // ignore, at this point page might be destroyed\n }\n});\n\n/**\n * Returns a new path to the file that can be used by chromium in acceptance tests\n *\n * To be able to use `element.uploadFile()` in a dockerized chromium, the file must exist in the\n * host and the docker, and both sides must use the same path.\n *\n * To workaround this bug or limitation, this function prepares the file by copying it to /tmp in\n * the host and the container.\n */\nexport const prepareFile = (filepath: string): string => {\n const isLocal = !isCi;\n const isHeadless = !!process.env.HEADLESS;\n const usesDocker = isLocal && isHeadless;\n\n const dockerComposeFile = path.join(__dirname, '..', 'docker-compose.yaml');\n\n if (usesDocker) {\n const containerId = execSync(`docker-compose -f ${dockerComposeFile} ps -q`).toString().trim();\n\n if (!containerId) {\n throw Error('acceptance-testing container not found');\n }\n\n execSync(`docker cp ${filepath} ${containerId}:/tmp`);\n\n const newPath = path.join('/tmp', path.basename(filepath));\n\n fs.copyFileSync(filepath, newPath);\n\n return newPath;\n } else {\n return filepath;\n }\n};\n\n/**\n * A convenience method to defer an expectation\n */\nexport const wait = <T>(expectation: () => Promise<T> | T, timeout = 10000, interval = 50): Promise<T> => {\n const startTime = Date.now();\n const startStack = new Error().stack;\n\n return new Promise((resolve, reject) => {\n const rejectOrRerun = (error: unknown) => {\n if (Date.now() - startTime >= timeout) {\n if (error instanceof Error) {\n if (error.message === 'Element not removed') {\n error.stack = startStack;\n }\n }\n reject(error);\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n setTimeout(runExpectation, interval);\n };\n const runExpectation = () => {\n try {\n Promise.resolve(expectation())\n .then((r) => resolve(r))\n .catch(rejectOrRerun);\n } catch (error) {\n rejectOrRerun(error);\n }\n };\n setTimeout(runExpectation, 0);\n });\n};\n\nexport const waitForElementToBeRemoved = (\n element: ElementHandle<Element>,\n timeout = 10000,\n interval = 100\n): Promise<void> => {\n const startStack = new Error().stack;\n\n const wait = async () => {\n const t0 = Date.now();\n while (Date.now() - t0 < timeout) {\n // boundingBox returns null when the element is not in the DOM\n const box = await element.boundingBox();\n if (!box) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n throw new Error('Element not removed');\n };\n\n return wait().catch((error) => {\n if (error.message === 'Element not removed') {\n error.stack = startStack;\n }\n throw error;\n });\n};\n"],"names":["getGlobalPage","global","page","getRootPath","rootPath","expect","getState","snapshotState","_rootDir","Error","prepareCoverageReportPath","_ref","coveragePath","ppidFile","path","join","ppid","process","toString","fs","existsSync","readFileSync","cwd","normalize","startsWith","rmSync","recursive","force","mkdirSync","writeFileSync","collectCoverageIfAvailable","_ref3","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_ref2","coverage","nycOutputPath","wrap","_callee$","_context","prev","next","evaluate","window","__coverage__","sent","abrupt","Object","values","forEach","cov","hash","_JSON$stringify","JSON","stringify","t0","stop","_x","apply","arguments","getGlobalBrowser","browser","isCi","argv","includes","env","CI","isUsingDockerizedChromium","URL","wsEndpoint","port","serverHostName","platform","rootDir","findRoot","pkg","parse","projectConfig","_pkg$acceptanceTests","acceptanceTests","server","ciServer","devServer","_projectConfig$covera","serverPort","toMatchImageSnapshot","configureToMatchImageSnapshot","failureThreshold","failureThresholdType","customSnapshotIdentifier","defaultIdentifier","calledToMatchImageSnapshotOutsideDocker","localToMatchImageSnapshot","message","pass","extend","afterEach","error","stack","split","waitForPaintEnd","element","_temp","_ref4","_ref4$fullPage","fullPage","captureBeyondViewport","MAX_WAIT","STEP_TIME","buf1","buf2","Date","now","screenshot","normalizeSreenshotOptions","Promise","r","setTimeout","compare","_x2","_temp2","_ref5$captureBeyondVi","_ref5","options","_objectWithoutPropertiesLoose","_excluded","_extends","scrollIntoView","el","e","block","getPageApi","api","create","type","_ref6","_callee2","elementHandle","text","_callee2$","_context2","_x3","_x4","_x5","click","_ref7","_callee3","_callee3$","_context3","_x6","_x7","select","_ref8","_callee4","_len","_key","_args4","_callee4$","_context4","length","Array","_x8","_ref9","_callee5","_callee5$","_context5","skipNetworkWait","waitForNetworkIdle","_x9","clear","_ref10","_callee6","_callee6$","_context6","clickCount","press","_x10","setGeolocation","position","navigator","geolocation","getCurrentPosition","callback","coords","needsRequestInterception","requestHandlers","requestInterceptor","req","_ref11","_requestHandlers$find","find","_ref12","matcher","handler","response","respond","interceptRequest","spy","jest","fn","push","createApiEndpointMock","_ref13","baseUrl","method","url","mockImplementation","status","headers","spyOn","urlPath","substring","match","globToRegExp","spyResult","_spyResult$status","resBody","body","contentType","openPage","_ref15","_callee7","_ref14","userAgent","isDarkMode","viewport","cookies","urlConfig","currentUserAgent","connectionError","_callee7$","_context7","_excluded2","undefined","_urlConfig$path","_urlConfig$port","_urlConfig$protocol","protocol","_urlConfig$hostname","hostname","bringToFront","setViewport","setCookie","setUserAgent","emulateMediaFeatures","name","value","evaluateOnNewDocument","style","document","createElement","innerHTML","addEventListener","head","appendChild","setRequestInterception","on","t1","captureStackTrace","waitForFunction","_x11","buildQueryMethods","_temp3","_ref16","boundQueries","_loop","_Object$entries$_i","_Object$entries","_i","queryName","queryFn","_callee12","doc","_len2","args","_key2","queryArgs","newElementHandle","_args12","_callee12$","_context12","getDocument","$","concat","timeout","_ref18","_callee8","_callee8$","_context8","_x12","_ref19","_callee9","_callee9$","_context9","_x13","_ref20","_callee10","_callee10$","_context10","_x14","_x15","_callee11","_args11","_callee11$","_context11","entries","queries","getScreen","screen","within","beforeEach","_callee13","_callee13$","_context13","jestPuppeteer","resetPage","_callee14","_callee14$","_context14","off","prepareFile","filepath","isLocal","isHeadless","HEADLESS","usesDocker","dockerComposeFile","__dirname","containerId","execSync","trim","newPath","basename","copyFileSync","wait","expectation","interval","startTime","startStack","resolve","reject","rejectOrRerun","runExpectation","then","waitForElementToBeRemoved","_ref24","_callee15","box","_callee15$","_context15","boundingBox"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAMA,aAAa,GAAG,SAAhBA,aAAaA;EAAA,OAAgBC,MAAc,CAACC,IAAI;AAAA;AAE/C,IAAMC,WAAW,GAAG,SAAdA,WAAWA;EACpB,IAAMC,QAAQ,GAAGC,MAAM,CAACC,QAAQ,EAAE,CAACC,aAAa,CAACC,QAAQ;EACzD,IAAI,CAACJ,QAAQ,EAAE;IACX,MAAM,IAAIK,KAAK,CAAC,qBAAqB,CAAC;;EAE1C,OAAOL,QAAQ;AACnB,CAAC;AAED;;;;;;;;AAQA,IAAMM,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAAC,IAAA;MAAKC,YAAY,GAAAD,IAAA,CAAZC,YAAY;EAC5C,IAAMC,QAAQ,GAAGC,IAAI,CAACC,IAAI,CAACH,YAAY,EAAE,OAAO,CAAC;EACjD,IAAMI,IAAI,GAAGC,OAAO,CAACD,IAAI,CAACE,QAAQ,EAAE;EACpC,IAAI,CAACC,EAAE,CAACC,UAAU,CAACP,QAAQ,CAAC,IAAIM,EAAE,CAACE,YAAY,CAACR,QAAQ,EAAE,OAAO,CAAC,KAAKG,IAAI,EAAE;;IAEzE,IAAIb,WAAW,EAAE,KAAKc,OAAO,CAACK,GAAG,EAAE,IAAIR,IAAI,CAACS,SAAS,CAACX,YAAY,CAAC,CAACY,UAAU,CAACP,OAAO,CAACK,GAAG,EAAE,CAAC,EAAE;MAC3FH,EAAE,CAACM,MAAM,CAACb,YAAY,EAAE;QAACc,SAAS,EAAE,IAAI;QAAEC,KAAK,EAAE;OAAK,CAAC;;IAE3DR,EAAE,CAACS,SAAS,CAAChB,YAAY,EAAE;MAACc,SAAS,EAAE;KAAK,CAAC;IAC7CP,EAAE,CAACU,aAAa,CAAChB,QAAQ,EAAEG,IAAI,CAAC;;AAExC,CAAC;AAED;;;;AAIO,IAAMc,0BAA0B;EAAA,IAAAC,KAAA,gBAAAC,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAC,QAAAC,KAAA;IAAA,IAAAxB,YAAA,EAAAyB,QAAA,EAAAC,aAAA;IAAA,OAAAL,mBAAA,GAAAM,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UAAQ/B,YAAY,GAAAwB,KAAA,CAAZxB,YAAY;UAAA6B,QAAA,CAAAC,IAAA;UAAAD,QAAA,CAAAE,IAAA;UAAA,OAE/B3C,aAAa,EAAE,CAAC4C,QAAQ,CAAC;YAC5C,OAAQC,MAAc,CAACC,YAAY;WACtC,CAAC;QAAA;UAFIT,QAAQ,GAAAI,QAAA,CAAAM,IAAA;UAAA,IAGTV,QAAQ;YAAAI,QAAA,CAAAE,IAAA;YAAA;;UAAA,OAAAF,QAAA,CAAAO,MAAA;QAAA;UAIbtC,yBAAyB,CAAC;YAACE,YAAY,EAAZA;WAAa,CAAC;UACnC0B,aAAa,GAAGxB,IAAI,CAACC,IAAI,CAACH,YAAY,EAAE,aAAa,CAAC;UAC5DO,EAAE,CAACS,SAAS,CAACU,aAAa,EAAE;YAACZ,SAAS,EAAE;WAAK,CAAC;UAE9CuB,MAAM,CAACC,MAAM,CAACb,QAAQ,CAAC,CAACc,OAAO,CAAC,UAACC,GAAQ;YACrC,IAAIA,GAAG,IAAIA,GAAG,CAACtC,IAAI,IAAIsC,GAAG,CAACC,IAAI,EAAE;cAAA,IAAAC,eAAA;cAC7BnC,EAAE,CAACU,aAAa,CACZf,IAAI,CAACC,IAAI,CAACuB,aAAa,EAAEc,GAAG,CAACC,IAAI,GAAG,OAAO,CAAC,EAC5CE,IAAI,CAACC,SAAS,EAAAF,eAAA,OAAAA,eAAA,CAAGF,GAAG,CAACtC,IAAI,IAAGsC,GAAG,EAAAE,eAAA,EAAE,CACpC;;WAER,CAAC;UAACb,QAAA,CAAAE,IAAA;UAAA;QAAA;UAAAF,QAAA,CAAAC,IAAA;UAAAD,QAAA,CAAAgB,EAAA,GAAAhB,QAAA;QAAA;QAAA;UAAA,OAAAA,QAAA,CAAAiB,IAAA;;OAAAvB,OAAA;GAIV;EAAA,gBAxBYL,0BAA0BA,CAAA6B,EAAA;IAAA,OAAA5B,KAAA,CAAA6B,KAAA,OAAAC,SAAA;;AAAA,GAwBtC;;;;;AChED,IA0BaC,gBAAgB,GAAG,SAAnBA,gBAAgBA;EAAA,OAAmB7D,MAAc,CAAC8D,OAAO;AAAA;AACtE,IAAa/D,eAAa,GAAG,SAAhBA,aAAaA;EAAA,OAAgBC,MAAc,CAACC,IAAI;AAAA;AAE7D,IAAM8D,IAAI,gBAAG/C,OAAO,CAACgD,IAAI,CAACC,QAAQ,CAAC,MAAM,CAAC,IAAIjD,OAAO,CAACkD,GAAG,CAACC,EAAE;AAC5D,IAAMC,yBAAyB,GAAGL,IAAI,qBAAQM,GAAG,eAACR,gBAAgB,EAAE,CAACS,UAAU,EAAE,CAAC,CAACC,IAAI,KAAK,MAAM;AAElG,IAAaC,cAAc,gBAAI;EAC3B,IAAIT,IAAI,EAAE;IACN,OAAO,WAAW;;EAGtB,IAAIK,yBAAyB,EAAE;IAC3B,OAAOpD,OAAO,CAACyD,QAAQ,KAAK,OAAO,GAAG,YAAY,GAAG,sBAAsB;;EAG/E,OAAO,WAAW;AACtB,CAAC,EAAG;AAEJ,IAAMC,OAAO,gBAAGC,QAAQ,eAAC3D,OAAO,CAACK,GAAG,EAAE,CAAC;AACvC,IAAMuD,GAAG,gBAAGtB,IAAI,CAACuB,KAAK,eAAC3D,EAAE,CAACE,YAAY,eAACP,IAAI,CAACC,IAAI,CAAC4D,OAAO,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;AACpF,IAAMI,aAAa,IAAAC,oBAAA,GAAGH,GAAG,CAACI,eAAe,YAAAD,oBAAA,GAAI,EAAE;AAC/C,IAAME,MAAM,IAAAvE,IAAA,GAAIqD,IAAI,GAAGe,aAAa,CAACI,QAAQ,GAAGJ,aAAa,CAACK,SAAS,YAAAzE,IAAA,GAAKoE,aAAa,CAACG,MAAM;AAChG,IAAMtE,YAAY,gBAAGE,IAAI,CAACC,IAAI,CAAC4D,OAAO,GAAAU,qBAAA,GAAEN,aAAa,CAACnE,YAAY,YAAAyE,qBAAA,GAAI,6BAA6B,CAAC;AAEpG,IAAaC,UAAU,GAAGJ,MAAM,oBAANA,MAAM,CAAEV,IAAI;AAEtC,IAAMe,oBAAoB,gBAAGC,+CAA6B,CAAC;EACvDC,gBAAgB,EAAE,CAAC;EACnBC,oBAAoB,EAAE,SAAS;EAC/BC,wBAAwB,EAAE,SAAAA,yBAAAvD,KAAA;IAAA,IAAEwD,iBAAiB,GAAAxD,KAAA,CAAjBwD,iBAAiB;IAAA,OAAMA,iBAAiB;;CACvE,CAAC;AAEF,IAAIC,uCAAuC,GAAG,KAAK;AAEnD,IAAMC,yBAAyB,GAAG,SAA5BA,yBAAyBA;EAC3BD,uCAAuC,GAAG,IAAI;;;EAG9C,OAAO;IACHE,OAAO,EAAE,SAAAA;MAAA,OAAM,EAAE;;IACjBC,IAAI,EAAE;GACT;AACL,CAAC;AAED3F,MAAM,CAAC4F,MAAM,CAAC;EACVV,oBAAoB,EAAElB,yBAAyB,GAAGkB,oBAAoB,GAAGO;CAC5E,CAAC;AAEFI,SAAS,CAAC;EACN,IAAIL,uCAAuC,EAAE;IACzC,IAAMM,KAAK,GAAG,IAAI1F,KAAK,gIAC4G,CAClI;IACD0F,KAAK,CAACC,KAAK,GAAG,CAACD,KAAK,CAACC,KAAK,IAAI,EAAE,EAAEC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,MAAMF,KAAK;;AAEnB,CAAC,CAAC;AAOF,IAAMG,eAAe;EAAA,IAAAvE,KAAA,gBAAAC,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAC,QACpBoE,OAA6B,EAAAC,KAAA;IAAA,IAAAC,KAAA,EAAAC,cAAA,EAAAC,QAAA,EAAAC,qBAAA,EAAAC,QAAA,EAAAC,SAAA,EAAArD,EAAA,EAAAsD,IAAA,EAAAC,IAAA;IAAA,OAAA/E,mBAAA,GAAAM,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UAAA8D,KAAA,GAAAD,KAAA,cACsC,EAAE,GAAAA,KAAA,EAAAE,cAAA,GAAAD,KAAA,CAApEE,QAAQ,EAARA,QAAQ,GAAAD,cAAA,cAAG,IAAI,GAAAA,cAAA,EAAEE,qBAAqB,GAAAH,KAAA,CAArBG,qBAAqB;UAEjCC,QAAQ,GAAG,KAAK;UAChBC,SAAS,GAAG,GAAG;UACfrD,EAAE,GAAGwD,IAAI,CAACC,GAAG,EAAE;UAAAzE,QAAA,CAAAE,IAAA;UAAA,OAEH4D,OAAO,CAACY,UAAU,CAChCC,yBAAyB,CAAC;YAACT,QAAQ,EAARA,QAAQ;YAAEC,qBAAqB,EAArBA;WAAsB,CAAC,CAC/D;QAAA;UAFGG,IAAI,GAAAtE,QAAA,CAAAM,IAAA;UAAAN,QAAA,CAAAE,IAAA;UAAA,OAGF,IAAI0E,OAAO,CAAC,UAACC,CAAC;YAAA,OAAKC,UAAU,CAACD,CAAC,EAAER,SAAS,CAAC;YAAC;QAAA;UAAArE,QAAA,CAAAE,IAAA;UAAA,OAChC4D,OAAO,CAACY,UAAU,CAChCC,yBAAyB,CAAC;YAACT,QAAQ,EAARA,QAAQ;YAAEC,qBAAqB,EAArBA;WAAsB,CAAC,CAC/D;QAAA;UAFGI,IAAI,GAAAvE,QAAA,CAAAM,IAAA;QAAA;UAAA,KAKDgE,IAAI,CAACS,OAAO,CAACR,IAAI,CAAC;YAAAvE,QAAA,CAAAE,IAAA;YAAA;;UAAA,MACjBsE,IAAI,CAACC,GAAG,EAAE,GAAGzD,EAAE,GAAGoD,QAAQ;YAAApE,QAAA,CAAAE,IAAA;YAAA;;UAAA,MACpBlC,KAAK,CAAC,mBAAmB,CAAC;QAAA;UAEpCsG,IAAI,GAAGC,IAAI;UAACvE,QAAA,CAAAE,IAAA;UAAA,OACN,IAAI0E,OAAO,CAAC,UAACC,CAAC;YAAA,OAAKC,UAAU,CAACD,CAAC,EAAER,SAAS,CAAC;YAAC;QAAA;UAAArE,QAAA,CAAAE,IAAA;UAAA,OACpC4D,OAAO,CAACY,UAAU,CAC5BC,yBAAyB,CAAC;YAACT,QAAQ,EAARA,QAAQ;YAAEC,qBAAqB,EAArBA;WAAsB,CAAC,CAC/D;QAAA;UAFDI,IAAI,GAAAvE,QAAA,CAAAM,IAAA;UAAAN,QAAA,CAAAE,IAAA;UAAA;QAAA;QAAA;UAAA,OAAAF,QAAA,CAAAiB,IAAA;;OAAAvB,OAAA;GAIX;EAAA,gBA3BKmE,eAAeA,CAAA3C,EAAA,EAAA8D,GAAA;IAAA,OAAA1F,KAAA,CAAA6B,KAAA,OAAAC,SAAA;;AAAA,GA2BpB;AAWD,IAAMuD,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAAM,MAAA;kCAAqE,EAAE,GAAAA,MAAA;IAAAC,qBAAA,GAAAC,KAAA,CAAlEhB,qBAAqB;IAArBA,qBAAqB,GAAAe,qBAAA,cAAG,KAAK,GAAAA,qBAAA;IAAKE,OAAO,GAAAC,6BAAA,CAAAF,KAAA,EAAAG,SAAA;;;;EAIzE,OAAAC,QAAA,KAAWH,OAAO;IAAEjB,qBAAqB,EAArBA;;AACxB,CAAC;AAED;AACA;AACA;AACA;AACA,IAAMqB,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,EAAiB;EAAA,OAAKA,EAAE,CAACtF,QAAQ,CAAC,UAACuF,CAAC;IAAA,OAAKA,CAAC,CAACF,cAAc,CAAC;MAACG,KAAK,EAAE;KAAS,CAAC;IAAC;AAAA;AAErG,IAAaC,UAAU,GAAG,SAAbA,UAAUA,CAAInI,IAAU;EACjC,IAAMoI,GAAG,GAAYrF,MAAM,CAACsF,MAAM,CAACrI,IAAI,CAAC;EAExCoI,GAAG,CAACE,IAAI;IAAA,IAAAC,KAAA,GAAAzG,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAwG,SAAOC,aAAa,EAAEC,IAAI,EAAEf,OAAO;MAAA,OAAA5F,mBAAA,GAAAM,IAAA,UAAAsG,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAApG,IAAA,GAAAoG,SAAA,CAAAnG,IAAA;UAAA;YAAAmG,SAAA,CAAAnG,IAAA;YAAA,OACpCsF,cAAc,CAACU,aAAa,CAAC;UAAA;YAAA,OAAAG,SAAA,CAAA9F,MAAA,WAC5B2F,aAAa,CAACH,IAAI,CAACI,IAAI,EAAEf,OAAO,CAAC;UAAA;UAAA;YAAA,OAAAiB,SAAA,CAAApF,IAAA;;SAAAgF,QAAA;KAC3C;IAAA,iBAAAK,GAAA,EAAAC,GAAA,EAAAC,GAAA;MAAA,OAAAR,KAAA,CAAA7E,KAAA,OAAAC,SAAA;;;EACDyE,GAAG,CAACY,KAAK;IAAA,IAAAC,KAAA,GAAAnH,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAkH,SAAOT,aAAa,EAAEd,OAAO;MAAA,OAAA5F,mBAAA,GAAAM,IAAA,UAAA8G,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAA5G,IAAA,GAAA4G,SAAA,CAAA3G,IAAA;UAAA;YAAA2G,SAAA,CAAA3G,IAAA;YAAA,OAC/BsF,cAAc,CAACU,aAAa,CAAC;UAAA;YAAA,OAAAW,SAAA,CAAAtG,MAAA,WAC5B2F,aAAa,CAACO,KAAK,CAACrB,OAAO,CAAC;UAAA;UAAA;YAAA,OAAAyB,SAAA,CAAA5F,IAAA;;SAAA0F,QAAA;KACtC;IAAA,iBAAAG,GAAA,EAAAC,GAAA;MAAA,OAAAL,KAAA,CAAAvF,KAAA,OAAAC,SAAA;;;EACDyE,GAAG,CAACmB,MAAM;IAAA,IAAAC,KAAA,GAAA1H,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAyH,SAAOhB,aAAa;MAAA,IAAAiB,IAAA;QAAA1G,MAAA;QAAA2G,IAAA;QAAAC,MAAA,GAAAjG,SAAA;MAAA,OAAA5B,mBAAA,GAAAM,IAAA,UAAAwH,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAAtH,IAAA,GAAAsH,SAAA,CAAArH,IAAA;UAAA;YAAAqH,SAAA,CAAArH,IAAA;YAAA,OACvBsF,cAAc,CAACU,aAAa,CAAC;UAAA;YAAA,KAAAiB,IAAA,GAAAE,MAAA,CAAAG,MAAA,EADD/G,MAAM,OAAAgH,KAAA,CAAAN,IAAA,OAAAA,IAAA,WAAAC,IAAA,MAAAA,IAAA,GAAAD,IAAA,EAAAC,IAAA;cAAN3G,MAAM,CAAA2G,IAAA,QAAAC,MAAA,CAAAD,IAAA;;YAAA,OAAAG,SAAA,CAAAhH,MAAA,WAEjC2F,aAAa,CAACc,MAAM,CAAA7F,KAAA,CAApB+E,aAAa,EAAWzF,MAAM,CAAC;UAAA;UAAA;YAAA,OAAA8G,SAAA,CAAAtG,IAAA;;SAAAiG,QAAA;KACzC;IAAA,iBAAAQ,GAAA;MAAA,OAAAT,KAAA,CAAA9F,KAAA,OAAAC,SAAA;;;EAEDyE,GAAG,CAACnB,UAAU;IAAA,IAAAiD,KAAA,GAAApI,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAmI,SAAOxC,OAAiC;MAAA,OAAA5F,mBAAA,GAAAM,IAAA,UAAA+H,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAA7H,IAAA,GAAA6H,SAAA,CAAA5H,IAAA;UAAA;YAAA,IAChDkF,OAAO,YAAPA,OAAO,CAAE2C,eAAe;cAAAD,SAAA,CAAA5H,IAAA;cAAA;;YAAA4H,SAAA,CAAA5H,IAAA;YAAA,OACnBzC,IAAI,CAACuK,kBAAkB,EAAE;UAAA;YAAAF,SAAA,CAAA5H,IAAA;YAAA,OAE7B2D,eAAe,CAACpG,IAAI,EAAE2H,OAAO,CAAC;UAAA;YAAA,OAAA0C,SAAA,CAAAvH,MAAA,WAC7B9C,IAAI,CAACiH,UAAU,CAACC,yBAAyB,CAACS,OAAO,CAAC,CAAC;UAAA;UAAA;YAAA,OAAA0C,SAAA,CAAA7G,IAAA;;SAAA2G,QAAA;KAC7D;IAAA,iBAAAK,GAAA;MAAA,OAAAN,KAAA,CAAAxG,KAAA,OAAAC,SAAA;;;EAEDyE,GAAG,CAACqC,KAAK;IAAA,IAAAC,MAAA,GAAA5I,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA2I,SAAOlC,aAAa;MAAA,OAAA1G,mBAAA,GAAAM,IAAA,UAAAuI,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAArI,IAAA,GAAAqI,SAAA,CAAApI,IAAA;UAAA;YAAAoI,SAAA,CAAApI,IAAA;YAAA,OACtBgG,aAAa,CAACO,KAAK,CAAC;cAAC8B,UAAU,EAAE;aAAE,CAAC;UAAA;YAAAD,SAAA,CAAApI,IAAA;YAAA,OACpCgG,aAAa,CAACsC,KAAK,CAAC,QAAQ,CAAC;UAAA;UAAA;YAAA,OAAAF,SAAA,CAAArH,IAAA;;SAAAmH,QAAA;KACtC;IAAA,iBAAAK,IAAA;MAAA,OAAAN,MAAA,CAAAhH,KAAA,OAAAC,SAAA;;;;;EAIDyE,GAAG,CAAC6C,cAAc,GAAG,UAACC,QAA4B;IAAA,OAC9ClL,IAAI,CAAC0C,QAAQ,CAAC,UAACwI,QAAQ;MACnBvI,MAAM,CAACwI,SAAS,CAACC,WAAW,CAACC,kBAAkB,GAAG,UAACC,QAAQ;;QAEvDA,QAAQ,CAAC;UACLC,MAAM,EAAEL;SACX,CAAC;OACL;KACJ,EAAEA,QAAe,CAAC;;EAEvB,OAAO9C,GAAG;AACd,CAAC;AAED,IAAIoD,wBAAwB,GAAG,KAAK;AAEpC,IAAIC,eAAe,GAGd,EAAE;AAEP,IAAMC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIC,GAAgB;;EACxC,IAAAC,MAAA,IAAAC,qBAAA,GAAkBJ,eAAe,CAACK,IAAI,CAAC,UAAAC,MAAA;MAAA,IAAEC,OAAO,GAAAD,MAAA,CAAPC,OAAO;MAAA,OAAMA,OAAO,CAACL,GAAG,CAAC;MAAC,YAAAE,qBAAA,GAAI;MAACI,OAAO,EAAE;KAAK;IAA/EA,OAAO,GAAAL,MAAA,CAAPK,OAAO;EACd,IAAI,CAACA,OAAO,EAAE;IACVN,GAAG,YAAS,EAAE;IACd;;EAEJ,IAAMO,QAAQ,GAAGD,OAAO,CAACN,GAAG,CAAC;EAC7BA,GAAG,CAACQ,OAAO,CAACD,QAAQ,CAAC;AACzB,CAAC;AAED,IAAaE,gBAAgB,GAAG,SAAnBA,gBAAgBA,CACzBJ,OAAyB;EAEzBR,wBAAwB,GAAG,IAAI;EAC/B,IAAMa,GAAG,GAAGC,IAAI,CAACC,EAAE,EAAE;EACrBd,eAAe,CAACe,IAAI,CAAC;IAACR,OAAO,EAAPA,OAAO;IAAEC,OAAO,EAAEI;GAAI,CAAC;EAC7C,OAAOA,GAAG;AACd,CAAC;AAMD,IAAaI,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAAC,MAAA;MAAKC,OAAO,GAAAD,MAAA,CAAPC,OAAO;EAC1CP,gBAAgB,CAAC,UAACT,GAAG;IAAA,OAAKA,GAAG,CAACiB,MAAM,EAAE,KAAK,SAAS,IAAIjB,GAAG,CAACkB,GAAG,EAAE,CAACvL,UAAU,CAACqL,OAAO,CAAC;IAAC,CAACG,kBAAkB,CACrG;IAAA,OAAO;MACHC,MAAM,EAAE,GAAG;MACXC,OAAO,EAAE;QACL,6BAA6B,EAAE,GAAG;QAClC,8BAA8B,EAAE,4BAA4B;QAC5D,8BAA8B,EAAE;;KAEvC;GAAC,CACL;EAED,OAAO;IACHC,KAAK,WAAAA,MAACrM,IAAY,EAAEgM;UAAAA;QAAAA,SAAiB,KAAK;;MACtC,IAAMZ,OAAO,GAAG,SAAVA,OAAOA,CAAIL,GAAgB;QAC7B,IAAMkB,GAAG,GAAGlB,GAAG,CAACkB,GAAG,EAAE;QACrB,IAAMK,OAAO,GAAGL,GAAG,CAACM,SAAS,CAACR,OAAO,CAAC5C,MAAM,CAAC;QAC7C,OACI4B,GAAG,CAACiB,MAAM,EAAE,KAAKA,MAAM,IAAIC,GAAG,CAACvL,UAAU,CAACqL,OAAO,CAAC,IAAI,CAAC,CAACO,OAAO,CAACE,KAAK,CAACC,YAAY,CAACzM,IAAI,CAAC,CAAC;OAEhG;MAED,IAAMyL,GAAG,GAAGC,IAAI,CAACC,EAAE,EAAE;MAErBH,gBAAgB,CAACJ,OAAO,CAAC,CAACc,kBAAkB,CAAC,UAACnB,GAAG;;QAC7C,IAAM2B,SAAS,GAAGjB,GAAG,CAACV,GAAG,CAAC;QAC1B,IAAMoB,MAAM,IAAAQ,iBAAA,GAAGD,SAAS,CAACP,MAAM,YAAAQ,iBAAA,GAAI,GAAG;QACtC,IAAMC,OAAO,GAAGF,SAAS,CAACG,IAAI,IAAIH,SAAS;QAC3C,OAAO;UACHP,MAAM,EAANA,MAAM;UACNC,OAAO,EAAE;YACL,6BAA6B,EAAE;WAClC;UACDU,WAAW,EAAE,kBAAkB;UAC/BD,IAAI,EAAEpK,IAAI,CAACC,SAAS,CAACkK,OAAO;SAC/B;OACJ,CAAC;MAEF,OAAOnB,GAAG;;GAEjB;AACL,CAAC;AAwCD,IAAasB,QAAQ;EAAA,IAAAC,MAAA,gBAAA9L,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA6L,SAAAC,MAAA;IAAA,IAAAC,SAAA,EAAAC,UAAA,EAAAC,QAAA,EAAAC,OAAA,EAAAC,SAAA,EAAAtB,GAAA,EAAAuB,gBAAA,EAAApO,IAAA,EAAAqO,eAAA;IAAA,OAAAtM,mBAAA,GAAAM,IAAA,UAAAiM,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAA/L,IAAA,GAAA+L,SAAA,CAAA9L,IAAA;QAAA;UACpBsL,SAAS,GAAAD,MAAA,CAATC,SAAS,EACTC,UAAU,GAAAF,MAAA,CAAVE,UAAU,EACVC,QAAQ,GAAAH,MAAA,CAARG,QAAQ,EACRC,OAAO,GAAAJ,MAAA,CAAPI,OAAO,EACJC,SAAS,gBAAAvG,6BAAA,CAAAkG,MAAA,EAAAU,UAAA;UAEN3B,GAAG,GAAI;YACT,IAAIsB,SAAS,CAACtB,GAAG,KAAK4B,SAAS,EAAE;cAC7B,OAAON,SAAS,CAACtB,GAAG;;YAGxB,IAAA6B,eAAA,GAAsFP,SAAS,CAAxFvN,IAAI;cAAJA,IAAI,GAAA8N,eAAA,cAAG,GAAG,GAAAA,eAAA;cAAAC,eAAA,GAAqER,SAAS,CAA5E7J,IAAI;cAAJA,IAAI,GAAAqK,eAAA,cAAGvJ,UAAU,GAAAuJ,eAAA;cAAAC,mBAAA,GAAkDT,SAAS,CAAzDU,QAAQ;cAARA,QAAQ,GAAAD,mBAAA,cAAG,MAAM,GAAAA,mBAAA;cAAAE,mBAAA,GAA+BX,SAAS,CAAtCY,QAAQ;cAARA,QAAQ,GAAAD,mBAAA,cAAGvK,cAAc,GAAAuK,mBAAA;YAElF,IAAI,CAACxK,IAAI,EAAE;cACP,IAAM2B,KAAK,GAAG,IAAI1F,KAAK,CACnB,8JAA8J,CACjK;;cAED,MAAM0F,KAAK;;YAGf,OAAU4I,QAAQ,WAAME,QAAQ,SAAIzK,IAAI,GAAG1D,IAAI;WAClD,EAAG;UAAA2N,SAAA,CAAAhL,EAAA,GAEqBwK,SAAS;UAAA,IAAAQ,SAAA,CAAAhL,EAAA;YAAAgL,SAAA,CAAA9L,IAAA;YAAA;;UAAA8L,SAAA,CAAA9L,IAAA;UAAA,OAAWmB,gBAAgB,EAAE,CAACmK,SAAS,EAAE;QAAA;UAAAQ,SAAA,CAAAhL,EAAA,GAAAgL,SAAA,CAAA1L,IAAA;QAAA;UAArEuL,gBAAgB,GAAAG,SAAA,CAAAhL,EAAA;UAChBvD,IAAI,GAAGF,eAAa,EAAE;UAAAyO,SAAA,CAAA9L,IAAA;UAAA,OAEtBzC,IAAI,CAACgP,YAAY,EAAE;QAAA;UAAA,KACrBf,QAAQ;YAAAM,SAAA,CAAA9L,IAAA;YAAA;;UAAA8L,SAAA,CAAA9L,IAAA;UAAA,OACFzC,IAAI,CAACiP,WAAW,CAAChB,QAAQ,CAAC;QAAA;UAAA,KAEhCC,OAAO;YAAAK,SAAA,CAAA9L,IAAA;YAAA;;UAAA8L,SAAA,CAAA9L,IAAA;UAAA,OACDzC,IAAI,CAACkP,SAAS,CAAAxL,KAAA,CAAd1D,IAAI,EAAckO,OAAO,CAAC;QAAA;UAAAK,SAAA,CAAA9L,IAAA;UAAA,OAE9BzC,IAAI,CAACmP,YAAY,CAAIf,gBAAgB,qBAAkB,CAAC;QAAA;UAAAG,SAAA,CAAA9L,IAAA;UAAA,OACxDzC,IAAI,CAACoP,oBAAoB,CAAC,CAAC;YAACC,IAAI,EAAE,sBAAsB;YAAEC,KAAK,EAAEtB,UAAU,GAAG,MAAM,GAAG;WAAQ,CAAC,CAAC;QAAA;UAAAO,SAAA,CAAA9L,IAAA;UAAA,OAGjGzC,IAAI,CAACuP,qBAAqB,CAAC;YAC7B,IAAMC,KAAK,GAAGC,QAAQ,CAACC,aAAa,CAAC,OAAO,CAAC;YAC7CF,KAAK,CAACG,SAAS,ymBAed;YACDhN,MAAM,CAACiN,gBAAgB,CAAC,kBAAkB,EAAE;cACxCH,QAAQ,CAACI,IAAI,CAACC,WAAW,CAACN,KAAK,CAAC;aACnC,CAAC;WACL,CAAC;QAAA;UAAA,KAEEhE,wBAAwB;YAAA+C,SAAA,CAAA9L,IAAA;YAAA;;UAAA8L,SAAA,CAAA9L,IAAA;UAAA,OAClBzC,IAAI,CAAC+P,sBAAsB,CAAC,IAAI,CAAC;QAAA;UACvC/P,IAAI,CAACgQ,EAAE,CAAC,SAAS,EAAEtE,kBAAkB,CAAC;QAAC;UAAA6C,SAAA,CAAA/L,IAAA;UAAA+L,SAAA,CAAA9L,IAAA;UAAA,OAIjCzC,IAAI,QAAK,CAAC6M,GAAG,CAAC;QAAA;UAAA0B,SAAA,CAAA9L,IAAA;UAAA;QAAA;UAAA8L,SAAA,CAAA/L,IAAA;UAAA+L,SAAA,CAAA0B,EAAA,GAAA1B,SAAA;UAAA,KAEfA,SAAA,CAAA0B,EAAA,CAAYpK,OAAO,CAAC7B,QAAQ,CAAC,6BAA6B,CAAC;YAAAuK,SAAA,CAAA9L,IAAA;YAAA;;UACtD4L,eAAe,GAAG,IAAI9N,KAAK,2BAAyBsM,GAAG,6BAA0B,CAAC;UACxFtM,KAAK,CAAC2P,iBAAiB,CAAC7B,eAAe,EAAEV,QAAQ,CAAC;UAAC,MAC7CU,eAAe;QAAA;UAAA,MAAAE,SAAA,CAAA0B,EAAA;QAAA;UAAA1B,SAAA,CAAA9L,IAAA;UAAA,OAKvBzC,IAAI,CAACmQ,eAAe,CAAC,oCAAoC,CAAC;QAAA;UAAA,OAAA5B,SAAA,CAAAzL,MAAA,WAEzDqF,UAAU,CAACnI,IAAI,CAAC;QAAA;QAAA;UAAA,OAAAuO,SAAA,CAAA/K,IAAA;;OAAAqK,QAAA;GAC1B;EAAA,gBAjFYF,QAAQA,CAAAyC,IAAA;IAAA,OAAAxC,MAAA,CAAAlK,KAAA,OAAAC,SAAA;;AAAA,GAiFpB;AAED,IAAM0M,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAAC,MAAA;mCAA8D,EAAE,GAAAA,MAAA;IAA3DtQ,IAAI,GAAAuQ,MAAA,CAAJvQ,IAAI;IAAEqG,OAAO,GAAAkK,MAAA,CAAPlK,OAAO;EAGrC,IAAMmK,YAAY,GAAQ,EAAE;EAAC,IAAAC,KAAA,YAAAA,QAC+B;IAAvD,IAAAC,kBAAA,GAAAC,eAAA,CAAAC,EAAA;MAAOC,SAAS,GAAAH,kBAAA;MAAEI,OAAO,GAAAJ,kBAAA;IAC1BF,YAAY,CAACK,SAAS,CAAC,gBAAA/O,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA+O;MAAA,IAAAC,GAAA;QAAAvD,IAAA;QAAAwD,KAAA;QAAAC,IAAA;QAAAC,KAAA;QAAAC,SAAA;QAAA3I,aAAA;QAAA4I,gBAAA;QAAAC,OAAA,GAAA3N,SAAA;MAAA,OAAA5B,mBAAA,GAAAM,IAAA,UAAAkP,WAAAC,UAAA;QAAA,kBAAAA,UAAA,CAAAhP,IAAA,GAAAgP,UAAA,CAAA/O,IAAA;UAAA;YAAA+O,UAAA,CAAA/O,IAAA;YAAA,OACJgP,8BAAW,CAACzR,IAAI,WAAJA,IAAI,GAAIF,eAAa,EAAE,CAAC;UAAA;YAAhDkR,GAAG,GAAAQ,UAAA,CAAA3O,IAAA;YAAA2O,UAAA,CAAA/O,IAAA;YAAA,OACUuO,GAAG,CAACU,CAAC,CAAC,MAAM,CAAC;UAAA;YAA1BjE,IAAI,GAAA+D,UAAA,CAAA3O,IAAA;YAAA,KAAAoO,KAAA,GAAAK,OAAA,CAAAvH,MAAA,EAFsBmH,IAAS,OAAAlH,KAAA,CAAAiH,KAAA,GAAAE,KAAA,MAAAA,KAAA,GAAAF,KAAA,EAAAE,KAAA;cAATD,IAAS,CAAAC,KAAA,IAAAG,OAAA,CAAAH,KAAA;;YAGnCC,SAAS,MAAAO,MAAA,CAAOT,IAAI;YAC1B,IAAIL,SAAS,CAACvP,UAAU,CAAC,QAAQ,CAAC,EAAE;cAChC,IAAI8P,SAAS,CAACrH,MAAM,KAAK,CAAC,EAAE;gBACxBqH,SAAS,CAAC5E,IAAI,CAACiC,SAAS,CAAC;;cAE7B2C,SAAS,CAAC5E,IAAI,CAAC;gBAACoF,OAAO,EAAE;eAAM,CAAC;;YACnCJ,UAAA,CAAA/O,IAAA;YAAA,OAC0CqO,OAAO,CAAApN,KAAA,UAAC2C,OAAO,WAAPA,OAAO,GAAIoH,IAAI,EAAAkE,MAAA,CAAKP,SAAS,EAAC;UAAA;YAA3E3I,aAAa,GAAA+I,UAAA,CAAA3O,IAAA;YAEbwO,gBAAgB,GAAGtO,MAAM,CAACsF,MAAM,CAACI,aAAa,CAAC;YAErD4I,gBAAgB,CAACpK,UAAU;cAAA,IAAA4K,MAAA,GAAA/P,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA8P,SAAOnK,OAAgC;gBAAA,OAAA5F,mBAAA,GAAAM,IAAA,UAAA0P,UAAAC,SAAA;kBAAA,kBAAAA,SAAA,CAAAxP,IAAA,GAAAwP,SAAA,CAAAvP,IAAA;oBAAA;sBAAA,IAC5DkF,OAAO,YAAPA,OAAO,CAAE2C,eAAe;wBAAA0H,SAAA,CAAAvP,IAAA;wBAAA;;sBAAAuP,SAAA,CAAAvP,IAAA;sBAAA,OACnB,CAACzC,IAAI,WAAJA,IAAI,GAAIF,eAAa,EAAE,EAAEyK,kBAAkB,EAAE;oBAAA;sBAAAyH,SAAA,CAAAvP,IAAA;sBAAA,OAElD2D,eAAe,CAACqC,aAAa,EAAAX,QAAA,KAAMH,OAAO;wBAAElB,QAAQ,EAAE;wBAAM,CAAC;oBAAA;sBAAA,OAAAuL,SAAA,CAAAlP,MAAA,WAC5D2F,aAAa,CAACxB,UAAU,CAACC,yBAAyB,CAACS,OAAO,CAAC,CAAC;oBAAA;oBAAA;sBAAA,OAAAqK,SAAA,CAAAxO,IAAA;;mBAAAsO,QAAA;eACtE;cAAA,iBAAAG,IAAA;gBAAA,OAAAJ,MAAA,CAAAnO,KAAA,OAAAC,SAAA;;;YAED0N,gBAAgB,CAACrI,KAAK;cAAA,IAAAkJ,MAAA,GAAApQ,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAmQ,SAAOxK,OAAsB;gBAAA,OAAA5F,mBAAA,GAAAM,IAAA,UAAA+P,UAAAC,SAAA;kBAAA,kBAAAA,SAAA,CAAA7P,IAAA,GAAA6P,SAAA,CAAA5P,IAAA;oBAAA;sBAAA4P,SAAA,CAAA5P,IAAA;sBAAA,OAC5CsF,cAAc,CAACU,aAAa,CAAC;oBAAA;sBAAA,OAAA4J,SAAA,CAAAvP,MAAA,WAC5B2F,aAAa,CAACO,KAAK,CAACrB,OAAO,CAAC;oBAAA;oBAAA;sBAAA,OAAA0K,SAAA,CAAA7O,IAAA;;mBAAA2O,QAAA;eACtC;cAAA,iBAAAG,IAAA;gBAAA,OAAAJ,MAAA,CAAAxO,KAAA,OAAAC,SAAA;;;YAED0N,gBAAgB,CAAC/I,IAAI;cAAA,IAAAiK,MAAA,GAAAzQ,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAwQ,UAAO9J,IAAY,EAAEf,OAAyB;gBAAA,OAAA5F,mBAAA,GAAAM,IAAA,UAAAoQ,WAAAC,UAAA;kBAAA,kBAAAA,UAAA,CAAAlQ,IAAA,GAAAkQ,UAAA,CAAAjQ,IAAA;oBAAA;sBAAAiQ,UAAA,CAAAjQ,IAAA;sBAAA,OAC5DsF,cAAc,CAACU,aAAa,CAAC;oBAAA;sBAAA,OAAAiK,UAAA,CAAA5P,MAAA,WAC5B2F,aAAa,CAACH,IAAI,CAACI,IAAI,EAAEf,OAAO,CAAC;oBAAA;oBAAA;sBAAA,OAAA+K,UAAA,CAAAlP,IAAA;;mBAAAgP,SAAA;eAC3C;cAAA,iBAAAG,IAAA,EAAAC,IAAA;gBAAA,OAAAL,MAAA,CAAA7O,KAAA,OAAAC,SAAA;;;YAED0N,gBAAgB,CAAC9H,MAAM,gBAAAzH,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA6Q;cAAA,IAAAC,OAAA,GAAAnP,SAAA;cAAA,OAAA5B,mBAAA,GAAAM,IAAA,UAAA0Q,WAAAC,UAAA;gBAAA,kBAAAA,UAAA,CAAAxQ,IAAA,GAAAwQ,UAAA,CAAAvQ,IAAA;kBAAA;oBAAAuQ,UAAA,CAAAvQ,IAAA;oBAAA,OAChBsF,cAAc,CAACU,aAAa,CAAC;kBAAA;oBAAA,OAAAuK,UAAA,CAAAlQ,MAAA,WAC5B2F,aAAa,CAACc,MAAM,CAAA7F,KAAA,CAApB+E,aAAa,EAAAqK,OAAiB,CAAC;kBAAA;kBAAA;oBAAA,OAAAE,UAAA,CAAAxP,IAAA;;iBAAAqP,SAAA;aACzC;YAAC,OAAArB,UAAA,CAAA1O,MAAA,WAEKuO,gBAAgB;UAAA;UAAA;YAAA,OAAAG,UAAA,CAAAhO,IAAA;;SAAAuN,SAAA;KAC1B;GACJ;EAxCD,SAAAH,EAAA,MAAAD,eAAA,GAAmC5N,MAAM,CAACkQ,OAAO,CAACC,0BAAO,CAAC,EAAAtC,EAAA,GAAAD,eAAA,CAAA5G,MAAA,EAAA6G,EAAA;IAAAH,KAAA;;EAyC1D,OAAOD,YAAY;AACvB,CAAC;AAED,IAAa2C,SAAS,GAAG,SAAZA,SAASA,CAAInT,IAAU;EAAA,OAAKqQ,iBAAiB,CAAC;IAACrQ,IAAI,EAAJA;GAAK,CAAC;AAAA;AAElE,IAAaoT,MAAM,gBAAG/C,iBAAiB,EAAE;AAEzC,IAAagD,MAAM,GAAG,SAATA,MAAMA,CAAIhN,OAAsB;EAAA,OAAKgK,iBAAiB,CAAC;IAAChK,OAAO,EAAPA;GAAQ,CAAC;AAAA;AAI9EiN,UAAU,eAAAxR,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAC,SAAAuR;EAAA,OAAAxR,mBAAA,GAAAM,IAAA,UAAAmR,WAAAC,UAAA;IAAA,kBAAAA,UAAA,CAAAjR,IAAA,GAAAiR,UAAA,CAAAhR,IAAA;MAAA;QAAAgR,UAAA,CAAAhR,IAAA;QAAA,OACD3C,eAAa,EAAE,CAACiQ,sBAAsB,CAAC,KAAK,CAAC;MAAA;QAAA0D,UAAA,CAAAhR,IAAA;QAAA,OAG5C1C,MAAc,CAAC2T,aAAa,CAACC,SAAS,EAAE;MAAA;MAAA;QAAA,OAAAF,UAAA,CAAAjQ,IAAA;;KAAA+P,SAAA;AAAA,CAClD,GAAC;AAEFvN,SAAS,eAAAlE,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAC,SAAA4R;EAAA,IAAA5T,IAAA;EAAA,OAAA+B,mBAAA,GAAAM,IAAA,UAAAwR,WAAAC,UAAA;IAAA,kBAAAA,UAAA,CAAAtR,IAAA,GAAAsR,UAAA,CAAArR,IAAA;MAAA;QAAAqR,UAAA,CAAArR,IAAA;QAAA,OACAb,0BAA0B,CAAC;UAAClB,YAAY,EAAZA;SAAa,CAAC;MAAA;QAAAoT,UAAA,CAAAtR,IAAA;QAGtCxC,IAAI,GAAGF,eAAa,EAAE;QAC5B2L,eAAe,GAAG,EAAE;QACpBD,wBAAwB,GAAG,KAAK;QAChCxL,IAAI,CAAC+T,GAAG,CAAC,SAAS,EAAErI,kBAAkB,CAAC;;QAEvCoI,UAAA,CAAArR,IAAA;QAAA,OACMzC,IAAI,QAAK,CAAC,aAAa,CAAC;MAAA;QAAA8T,UAAA,CAAArR,IAAA;QAAA;MAAA;QAAAqR,UAAA,CAAAtR,IAAA;QAAAsR,UAAA,CAAAvQ,EAAA,GAAAuQ,UAAA;MAAA;MAAA;QAAA,OAAAA,UAAA,CAAAtQ,IAAA;;KAAAoQ,SAAA;AAAA,CAIrC,GAAC;AAEF;;;;;;;;;AASA,IAAaI,WAAW,GAAG,SAAdA,WAAWA,CAAIC,QAAgB;EACxC,IAAMC,OAAO,GAAG,CAACpQ,IAAI;EACrB,IAAMqQ,UAAU,GAAG,CAAC,CAACpT,OAAO,CAACkD,GAAG,CAACmQ,QAAQ;EACzC,IAAMC,UAAU,GAAGH,OAAO,IAAIC,UAAU;EAExC,IAAMG,iBAAiB,GAAG1T,IAAI,CAACC,IAAI,CAAC0T,SAAS,EAAE,IAAI,EAAE,qBAAqB,CAAC;EAE3E,IAAIF,UAAU,EAAE;IACZ,IAAMG,WAAW,GAAGC,sBAAQ,wBAAsBH,iBAAiB,WAAQ,CAAC,CAACtT,QAAQ,EAAE,CAAC0T,IAAI,EAAE;IAE9F,IAAI,CAACF,WAAW,EAAE;MACd,MAAMjU,KAAK,CAAC,wCAAwC,CAAC;;IAGzDkU,sBAAQ,gBAAcR,QAAQ,SAAIO,WAAW,UAAO,CAAC;IAErD,IAAMG,OAAO,GAAG/T,IAAI,CAACC,IAAI,CAAC,MAAM,EAAED,IAAI,CAACgU,QAAQ,CAACX,QAAQ,CAAC,CAAC;IAE1DhT,EAAE,CAAC4T,YAAY,CAACZ,QAAQ,EAAEU,OAAO,CAAC;IAElC,OAAOA,OAAO;GACjB,MAAM;IACH,OAAOV,QAAQ;;AAEvB,CAAC;AAED;;;AAGA,IAAaa,IAAI,GAAG,SAAPA,IAAIA,CAAOC,WAAiC,EAAEnD,OAAO,EAAUoD,QAAQ;MAAzBpD,OAAO;IAAPA,OAAO,GAAG,KAAK;;EAAA,IAAEoD,QAAQ;IAARA,QAAQ,GAAG,EAAE;;EACrF,IAAMC,SAAS,GAAGlO,IAAI,CAACC,GAAG,EAAE;EAC5B,IAAMkO,UAAU,GAAG,IAAI3U,KAAK,EAAE,CAAC2F,KAAK;EAEpC,OAAO,IAAIiB,OAAO,CAAC,UAACgO,OAAO,EAAEC,MAAM;IAC/B,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAIpP,KAAc;MACjC,IAAIc,IAAI,CAACC,GAAG,EAAE,GAAGiO,SAAS,IAAIrD,OAAO,EAAE;QACnC,IAAI3L,KAAK,YAAY1F,KAAK,EAAE;UACxB,IAAI0F,KAAK,CAACJ,OAAO,KAAK,qBAAqB,EAAE;YACzCI,KAAK,CAACC,KAAK,GAAGgP,UAAU;;;QAGhCE,MAAM,CAACnP,KAAK,CAAC;QACb;;;MAGJoB,UAAU,CAACiO,cAAc,EAAEN,QAAQ,CAAC;KACvC;IACD,IAAMM,cAAc,GAAG,SAAjBA,cAAcA;MAChB,IAAI;QACAnO,OAAO,CAACgO,OAAO,CAACJ,WAAW,EAAE,CAAC,CACzBQ,IAAI,CAAC,UAACnO,CAAC;UAAA,OAAK+N,OAAO,CAAC/N,CAAC,CAAC;UAAC,SAClB,CAACiO,aAAa,CAAC;OAC5B,CAAC,OAAOpP,KAAK,EAAE;QACZoP,aAAa,CAACpP,KAAK,CAAC;;KAE3B;IACDoB,UAAU,CAACiO,cAAc,EAAE,CAAC,CAAC;GAChC,CAAC;AACN,CAAC;AAED,IAAaE,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAClCnP,OAA+B,EAC/BuL,OAAO,EACPoD,QAAQ;MADRpD,OAAO;IAAPA,OAAO,GAAG,KAAK;;EAAA,IACfoD,QAAQ;IAARA,QAAQ,GAAG,GAAG;;EAEd,IAAME,UAAU,GAAG,IAAI3U,KAAK,EAAE,CAAC2F,KAAK;EAEpC,IAAM4O,IAAI;IAAA,IAAAW,MAAA,GAAA3T,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA0T;MAAA,IAAAnS,EAAA,EAAAoS,GAAA;MAAA,OAAA5T,mBAAA,GAAAM,IAAA,UAAAuT,WAAAC,UAAA;QAAA,kBAAAA,UAAA,CAAArT,IAAA,GAAAqT,UAAA,CAAApT,IAAA;UAAA;YACHc,EAAE,GAAGwD,IAAI,CAACC,GAAG,EAAE;UAAA;YAAA,MACdD,IAAI,CAACC,GAAG,EAAE,GAAGzD,EAAE,GAAGqO,OAAO;cAAAiE,UAAA,CAAApT,IAAA;cAAA;;YAAAoT,UAAA,CAAApT,IAAA;YAAA,OAEV4D,OAAO,CAACyP,WAAW,EAAE;UAAA;YAAjCH,GAAG,GAAAE,UAAA,CAAAhT,IAAA;YAAA,IACJ8S,GAAG;cAAAE,UAAA,CAAApT,IAAA;cAAA;;YAAA,OAAAoT,UAAA,CAAA/S,MAAA;UAAA;YAAA+S,UAAA,CAAApT,IAAA;YAAA,OAGF,IAAI0E,OAAO,CAAC,UAACgO,OAAO;cAAA,OAAK9N,UAAU,CAAC8N,OAAO,EAAEH,QAAQ,CAAC;cAAC;UAAA;YAAAa,UAAA,CAAApT,IAAA;YAAA;UAAA;YAAA,MAE3D,IAAIlC,KAAK,CAAC,qBAAqB,CAAC;UAAA;UAAA;YAAA,OAAAsV,UAAA,CAAArS,IAAA;;SAAAkS,SAAA;KACzC;IAAA,gBAXKZ,IAAIA;MAAA,OAAAW,MAAA,CAAA/R,KAAA,OAAAC,SAAA;;KAWT;EAED,OAAOmR,IAAI,EAAE,SAAM,CAAC,UAAC7O,KAAK;IACtB,IAAIA,KAAK,CAACJ,OAAO,KAAK,qBAAqB,EAAE;MACzCI,KAAK,CAACC,KAAK,GAAGgP,UAAU;;IAE5B,MAAMjP,KAAK;GACd,CAAC;AACN,CAAC;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";function t(t){return t&&"object"==typeof t&&"default"in t?t.default:t}Object.defineProperty(exports,"__esModule",{value:!0});var e=t(require("path")),r=t(require("fs")),n=t(require("find-root")),o=require("pptr-testing-library"),a=require("jest-image-snapshot"),i=t(require("glob-to-regexp"));function c(){c=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",i=o.asyncIterator||"@@asyncIterator",u=o.toStringTag||"@@toStringTag";function s(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{s({},"")}catch(t){s=function(t,e,r){return t[e]=r}}function p(t,e,r,o){var a=Object.create((e&&e.prototype instanceof h?e:h).prototype),i=new L(o||[]);return n(a,"_invoke",{value:k(t,r,i)}),a}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=p;var l={};function h(){}function d(){}function v(){}var m={};s(m,a,(function(){return this}));var y=Object.getPrototypeOf,w=y&&y(y(j([])));w&&w!==e&&r.call(w,a)&&(m=w);var g=v.prototype=h.prototype=Object.create(m);function x(t){["next","throw","return"].forEach((function(e){s(t,e,(function(t){return this._invoke(e,t)}))}))}function b(t,e){var o;n(this,"_invoke",{value:function(n,a){function i(){return new e((function(o,i){!function n(o,a,i,c){var u=f(t[o],t,a);if("throw"!==u.type){var s=u.arg,p=s.value;return p&&"object"==typeof p&&r.call(p,"__await")?e.resolve(p.__await).then((function(t){n("next",t,i,c)}),(function(t){n("throw",t,i,c)})):e.resolve(p).then((function(t){s.value=t,i(s)}),(function(t){return n("throw",t,i,c)}))}c(u.arg)}(n,a,o,i)}))}return o=o?o.then(i,i):i()}})}function k(t,e,r){var n="suspendedStart";return function(o,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw a;return{value:void 0,done:!0}}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var c=E(i,r);if(c){if(c===l)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var u=f(t,e,r);if("normal"===u.type){if(n=r.done?"completed":"suspendedYield",u.arg===l)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n="completed",r.method="throw",r.arg=u.arg)}}}function E(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,E(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),l;var o=f(n,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,l;var a=o.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,l):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,l)}function O(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function P(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function L(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(O,this),this.reset(!0)}function j(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n<t.length;)if(r.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=void 0,e.done=!0,e};return o.next=o}}return{next:T}}function T(){return{value:void 0,done:!0}}return d.prototype=v,n(g,"constructor",{value:v,configurable:!0}),n(v,"constructor",{value:d,configurable:!0}),d.displayName=s(v,u,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===d||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,v):(t.__proto__=v,s(t,u,"GeneratorFunction")),t.prototype=Object.create(g),t},t.awrap=function(t){return{__await:t}},x(b.prototype),s(b.prototype,i,(function(){return this})),t.AsyncIterator=b,t.async=function(e,r,n,o,a){void 0===a&&(a=Promise);var i=new b(p(e,r,n,o),a);return t.isGeneratorFunction(r)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},x(g),s(g,u,"Generator"),s(g,a,(function(){return this})),s(g,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},t.values=j,L.prototype={constructor:L,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(P),!t)for(var e in this)"t"===e.charAt(0)&&r.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(r,n){return i.type="throw",i.arg=t,e.next=r,n&&(e.method="next",e.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),u=r.call(a,"finallyLoc");if(c&&u){if(this.prev<a.catchLoc)return n(a.catchLoc,!0);if(this.prev<a.finallyLoc)return n(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return n(a.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return n(a.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===t||"continue"===t)&&a.tryLoc<=e&&e<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=t,i.arg=e,a?(this.method="next",this.next=a.finallyLoc,l):this.complete(i)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),l},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),P(r),l}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;P(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:j(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),l}},t}function u(t,e,r,n,o,a,i){try{var c=t[a](i),u=c.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}function s(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var a=t.apply(e,r);function i(t){u(a,n,o,i,c,"next",t)}function c(t){u(a,n,o,i,c,"throw",t)}i(void 0)}))}}function p(){return(p=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t}).apply(this,arguments)}function f(t,e){if(null==t)return{};var r,n,o={},a=Object.keys(t);for(n=0;n<a.length;n++)e.indexOf(r=a[n])>=0||(o[r]=t[r]);return o}var l,h,d=["captureBeyondViewport"],v=["userAgent","isDarkMode","viewport","cookies"],m=require("child_process").execSync,y=function(){return global.browser},w=function(){return global.page},g=process.argv.includes("--ci")||process.env.CI,x=g||"9223"===new URL(y().wsEndpoint()).port,b=function(){return g?"localhost":x?"linux"===process.platform?"172.17.0.1":"host.docker.internal":"localhost"}(),k=null!=(l=JSON.parse(r.readFileSync(e.join(n(process.cwd()),"package.json"),"utf-8")).acceptanceTests)?l:{},E=null!=(h=g?k.ciServer:k.devServer)?h:k.server,O=null==E?void 0:E.port,P=!1;expect.extend({toMatchImageSnapshot:x?a.configureToMatchImageSnapshot({failureThreshold:0,failureThresholdType:"percent",customSnapshotIdentifier:function(t){return t.defaultIdentifier}}):function(){return P=!0,{message:function(){return""},pass:!0}}}),afterEach((function(){if(P){var t=new Error("Calling .toMatchImageSnapshot() is not allowed outside dockerized browser. Please, run your screenshot test in headless mode.");throw t.stack=(t.stack||"").split("\n")[0],t}}));var L=function(){var t=s(c().mark((function t(e,r){var n,o,a,i,u,s,p,f,l;return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=void 0===(o=(n=void 0===r?{}:r).fullPage)||o,i=n.captureBeyondViewport,u=15e3,s=250,p=Date.now(),t.next=6,e.screenshot(j({fullPage:a,captureBeyondViewport:i}));case 6:return f=t.sent,t.next=9,new Promise((function(t){return setTimeout(t,s)}));case 9:return t.next=11,e.screenshot(j({fullPage:a,captureBeyondViewport:i}));case 11:l=t.sent;case 12:if(!f.compare(l)){t.next=23;break}if(!(Date.now()-p>u)){t.next=15;break}throw Error("Paint end timeout");case 15:return f=l,t.next=18,new Promise((function(t){return setTimeout(t,s)}));case 18:return t.next=20,e.screenshot(j({fullPage:a,captureBeyondViewport:i}));case 20:l=t.sent,t.next=12;break;case 23:case"end":return t.stop()}}),t)})));return function(e,r){return t.apply(this,arguments)}}(),j=function(t){var e=void 0===t?{}:t,r=e.captureBeyondViewport,n=void 0!==r&&r;return p({},f(e,d),{captureBeyondViewport:n})},T=function(t){return t.evaluate((function(t){return t.scrollIntoView({block:"center"})}))},S=function(t){var e=Object.create(t);return e.type=function(){var t=s(c().mark((function t(e,r,n){return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,T(e);case 2:return t.abrupt("return",e.type(r,n));case 3:case"end":return t.stop()}}),t)})));return function(e,r,n){return t.apply(this,arguments)}}(),e.click=function(){var t=s(c().mark((function t(e,r){return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,T(e);case 2:return t.abrupt("return",e.click(r));case 3:case"end":return t.stop()}}),t)})));return function(e,r){return t.apply(this,arguments)}}(),e.select=function(){var t=s(c().mark((function t(e){var r,n,o,a=arguments;return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,T(e);case 2:for(r=a.length,n=new Array(r>1?r-1:0),o=1;o<r;o++)n[o-1]=a[o];return t.abrupt("return",e.select.apply(e,n));case 4:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e.screenshot=function(){var e=s(c().mark((function e(r){return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!=r&&r.skipNetworkWait){e.next=3;break}return e.next=3,t.waitForNetworkIdle();case 3:return e.next=5,L(t,r);case 5:return e.abrupt("return",t.screenshot(j(r)));case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),e.clear=function(){var t=s(c().mark((function t(e){return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.click({clickCount:3});case 2:return t.next=4,e.press("Delete");case 4:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e.setGeolocation=function(e){return t.evaluate((function(t){window.navigator.geolocation.getCurrentPosition=function(e){e({coords:t})}}),e)},e},_=!1,N=[],A=function(t){var e,r=(null!=(e=N.find((function(e){return(0,e.matcher)(t)})))?e:{handler:null}).handler;if(r){var n=r(t);t.respond(n)}else t.continue()},I=function(t){_=!0;var e=jest.fn();return N.push({matcher:t,handler:e}),e},F=function(){var t=s(c().mark((function t(e){var r,n,o,a,i,u,s,p,l;return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=e.userAgent,n=e.isDarkMode,o=e.viewport,a=e.cookies,i=f(e,v),u=function(){if(void 0!==i.url)return i.url;var t=i.path,e=void 0===t?"/":t,r=i.port,n=void 0===r?O:r,o=i.protocol,a=void 0===o?"http":o,c=i.hostname,u=void 0===c?b:c;if(!n)throw new Error("You must specify a port. You can specify it when calling openPage() or by configuring a dev and ci server in the acceptanceTests config in your package.json");return a+"://"+u+":"+n+e}(),t.t0=r,t.t0){t.next=7;break}return t.next=6,y().userAgent();case 6:t.t0=t.sent;case 7:return s=t.t0,p=w(),t.next=11,p.bringToFront();case 11:if(!o){t.next=14;break}return t.next=14,p.setViewport(o);case 14:if(!a){t.next=17;break}return t.next=17,p.setCookie.apply(p,a);case 17:return t.next=19,p.setUserAgent(s+" acceptance-test");case 19:return t.next=21,p.emulateMediaFeatures([{name:"prefers-color-scheme",value:n?"dark":"light"}]);case 21:return t.next=23,p.evaluateOnNewDocument((function(){var t=document.createElement("style");t.innerHTML="\n *, *:after, *:before {\n transition-delay: 0s !important;\n transition-duration: 0s !important;\n animation-delay: -0.0001s !important;\n animation-duration: 0s !important;\n animation-play-state: paused !important;\n caret-color: transparent !important;\n font-variant-ligatures: none !important;\n }\n *::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n }\n ",window.addEventListener("DOMContentLoaded",(function(){document.head.appendChild(t)}))}));case 23:if(!_){t.next=27;break}return t.next=26,p.setRequestInterception(!0);case 26:p.on("request",A);case 27:return t.prev=27,t.next=30,p.goto(u);case 30:t.next=41;break;case 32:if(t.prev=32,t.t1=t.catch(27),!t.t1.message.includes("net::ERR_CONNECTION_REFUSED")){t.next=40;break}throw l=new Error("Could not connect to "+u+". Is the server running?"),Error.captureStackTrace(l,F),l;case 40:throw t.t1;case 41:return t.next=43,p.waitForFunction('document.fonts.status === "loaded"');case 43:return t.abrupt("return",S(p));case 44:case"end":return t.stop()}}),t,null,[[27,32]])})));return function(e){return t.apply(this,arguments)}}(),C=function(t){for(var e=void 0===t?{}:t,r=e.page,n=e.element,a={},i=function(){var t=f[u],e=t[0],i=t[1];a[e]=s(c().mark((function t(){var a,u,f,l,h,d,v,m,y=arguments;return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,o.getDocument(null!=r?r:w());case 2:return a=t.sent,t.next=5,a.$("body");case 5:for(u=t.sent,f=y.length,l=new Array(f),h=0;h<f;h++)l[h]=y[h];return d=[].concat(l),e.startsWith("findBy")&&(1===d.length&&d.push(void 0),d.push({timeout:1e4})),t.next=11,i.apply(void 0,[null!=n?n:u].concat(d));case 11:return v=t.sent,(m=Object.create(v)).screenshot=function(){var t=s(c().mark((function t(e){return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(null!=e&&e.skipNetworkWait){t.next=3;break}return t.next=3,(null!=r?r:w()).waitForNetworkIdle();case 3:return t.next=5,L(v,p({},e,{fullPage:!1}));case 5:return t.abrupt("return",v.screenshot(j(e)));case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),m.click=function(){var t=s(c().mark((function t(e){return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,T(v);case 2:return t.abrupt("return",v.click(e));case 3:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),m.type=function(){var t=s(c().mark((function t(e,r){return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,T(v);case 2:return t.abrupt("return",v.type(e,r));case 3:case"end":return t.stop()}}),t)})));return function(e,r){return t.apply(this,arguments)}}(),m.select=s(c().mark((function t(){var e=arguments;return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,T(v);case 2:return t.abrupt("return",v.select.apply(v,e));case 3:case"end":return t.stop()}}),t)}))),t.abrupt("return",m);case 18:case"end":return t.stop()}}),t)})))},u=0,f=Object.entries(o.queries);u<f.length;u++)i();return a},q=C();beforeEach(s(c().mark((function t(){return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,w().setRequestInterception(!1);case 2:return t.next=4,global.jestPuppeteer.resetPage();case 4:case"end":return t.stop()}}),t)})))),afterEach(s(c().mark((function t(){var e;return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,e=w(),N=[],_=!1,e.off("request",A),t.next=7,e.goto("about:blank");case 7:t.next=11;break;case 9:t.prev=9,t.t0=t.catch(0);case 11:case"end":return t.stop()}}),t,null,[[0,9]])})))),exports.createApiEndpointMock=function(t){var e=t.baseUrl;return I((function(t){return"OPTIONS"===t.method()&&t.url().startsWith(e)})).mockImplementation((function(){return{status:204,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"POST,PATCH,PUT,GET,OPTIONS","Access-Control-Allow-Headers":"*"}}})),{spyOn:function(t,r){void 0===r&&(r="GET");var n=jest.fn();return I((function(n){var o=n.url(),a=o.substring(e.length);return n.method()===r&&o.startsWith(e)&&!!a.match(i(t))})).mockImplementation((function(t){var e,r=n(t);return{status:null!=(e=r.status)?e:200,headers:{"Access-Control-Allow-Origin":"*"},contentType:"application/json",body:JSON.stringify(r.body||r)}})),n}}},exports.getGlobalBrowser=y,exports.getGlobalPage=w,exports.getPageApi=S,exports.getScreen=function(t){return C({page:t})},exports.interceptRequest=I,exports.openPage=F,exports.prepareFile=function(t){var n=!!process.env.HEADLESS,o=!g&&n,a=e.join(__dirname,"..","docker-compose.yaml");if(o){var i=m("docker-compose -f "+a+" ps -q").toString().trim();if(!i)throw Error("acceptance-testing container not found");m("docker cp "+t+" "+i+":/tmp");var c=e.join("/tmp",e.basename(t));return r.copyFileSync(t,c),c}return t},exports.screen=q,exports.serverHostName=b,exports.serverPort=O,exports.wait=function(t,e,r){void 0===e&&(e=1e4),void 0===r&&(r=50);var n=Date.now(),o=(new Error).stack;return new Promise((function(a,i){var c=function(t){if(Date.now()-n>=e)return t instanceof Error&&"Element not removed"===t.message&&(t.stack=o),void i(t);setTimeout(u,r)},u=function(){try{Promise.resolve(t()).then((function(t){return a(t)})).catch(c)}catch(t){c(t)}};setTimeout(u,0)}))},exports.waitForElementToBeRemoved=function(t,e,r){void 0===e&&(e=1e4),void 0===r&&(r=100);var n=(new Error).stack;return function(){var n=s(c().mark((function n(){var o;return c().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:o=Date.now();case 1:if(!(Date.now()-o<e)){n.next=11;break}return n.next=4,t.boundingBox();case 4:if(n.sent){n.next=7;break}return n.abrupt("return");case 7:return n.next=9,new Promise((function(t){return setTimeout(t,r)}));case 9:n.next=1;break;case 11:throw new Error("Element not removed");case 12:case"end":return n.stop()}}),n)})));return function(){return n.apply(this,arguments)}}()().catch((function(t){throw"Element not removed"===t.message&&(t.stack=n),t}))},exports.within=function(t){return C({element:t})};
1
+ "use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=e(require("path")),r=e(require("fs")),n=e(require("find-root")),o=require("pptr-testing-library"),a=require("jest-image-snapshot"),i=e(require("glob-to-regexp")),c=require("child_process");function u(){u=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",i=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function s(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,r){return e[t]=r}}function p(e,t,r,o){var a=Object.create((t&&t.prototype instanceof h?t:h).prototype),i=new S(o||[]);return n(a,"_invoke",{value:k(e,r,i)}),a}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=p;var l={};function h(){}function v(){}function d(){}var y={};s(y,a,(function(){return this}));var w=Object.getPrototypeOf,m=w&&w(w(j([])));m&&m!==t&&r.call(m,a)&&(y=m);var g=d.prototype=h.prototype=Object.create(y);function x(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){var o;n(this,"_invoke",{value:function(n,a){function i(){return new t((function(o,i){!function n(o,a,i,c){var u=f(e[o],e,a);if("throw"!==u.type){var s=u.arg,p=s.value;return p&&"object"==typeof p&&r.call(p,"__await")?t.resolve(p.__await).then((function(e){n("next",e,i,c)}),(function(e){n("throw",e,i,c)})):t.resolve(p).then((function(e){s.value=e,i(s)}),(function(e){return n("throw",e,i,c)}))}c(u.arg)}(n,a,o,i)}))}return o=o?o.then(i,i):i()}})}function k(e,t,r){var n="suspendedStart";return function(o,a){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw a;return{value:void 0,done:!0}}for(r.method=o,r.arg=a;;){var i=r.delegate;if(i){var c=E(i,r);if(c){if(c===l)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var u=f(e,t,r);if("normal"===u.type){if(n=r.done?"completed":"suspendedYield",u.arg===l)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n="completed",r.method="throw",r.arg=u.arg)}}}function E(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,E(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),l;var o=f(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,l;var a=o.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function P(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function S(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(P,this),this.reset(!0)}function j(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function t(){for(;++n<e.length;)if(r.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return o.next=o}}return{next:L}}function L(){return{value:void 0,done:!0}}return v.prototype=d,n(g,"constructor",{value:d,configurable:!0}),n(d,"constructor",{value:v,configurable:!0}),v.displayName=s(d,c,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===v||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,s(e,c,"GeneratorFunction")),e.prototype=Object.create(g),e},e.awrap=function(e){return{__await:e}},x(b.prototype),s(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,r,n,o,a){void 0===a&&(a=Promise);var i=new b(p(t,r,n,o),a);return e.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},x(g),s(g,c,"Generator"),s(g,a,(function(){return this})),s(g,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},e.values=j,S.prototype={constructor:S,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(r,n){return i.type="throw",i.arg=e,t.next=r,n&&(t.method="next",t.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),u=r.call(a,"finallyLoc");if(c&&u){if(this.prev<a.catchLoc)return n(a.catchLoc,!0);if(this.prev<a.finallyLoc)return n(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return n(a.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return n(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,l):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),O(r),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;O(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:j(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),l}},e}function s(e,t,r,n,o,a,i){try{var c=e[a](i),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,o)}function p(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function i(e){s(a,n,o,i,c,"next",e)}function c(e){s(a,n,o,i,c,"throw",e)}i(void 0)}))}}function f(){return(f=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}function l(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)t.indexOf(r=a[n])>=0||(o[r]=e[r]);return o}var h,v,d,y=function(e){var n=e.coveragePath,o=t.join(n,".ppid"),a=process.ppid.toString();r.existsSync(o)&&r.readFileSync(o,"utf-8")===a||(function(){var e=expect.getState().snapshotState._rootDir;if(!e)throw new Error("Root path not found");return e}()===process.cwd()&&t.normalize(n).startsWith(process.cwd())&&r.rmSync(n,{recursive:!0,force:!0}),r.mkdirSync(n,{recursive:!0}),r.writeFileSync(o,a))},w=function(){var e=p(u().mark((function e(n){var o,a,i;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=n.coveragePath,e.prev=1,e.next=4,global.page.evaluate((function(){return window.__coverage__}));case 4:if(a=e.sent){e.next=7;break}return e.abrupt("return");case 7:y({coveragePath:o}),i=t.join(o,".nyc_output"),r.mkdirSync(i,{recursive:!0}),Object.values(a).forEach((function(e){var n;e&&e.path&&e.hash&&r.writeFileSync(t.join(i,e.hash+".json"),JSON.stringify(((n={})[e.path]=e,n)))})),e.next=15;break;case 13:e.prev=13,e.t0=e.catch(1);case 15:case"end":return e.stop()}}),e,null,[[1,13]])})));return function(t){return e.apply(this,arguments)}}(),m=["captureBeyondViewport"],g=["userAgent","isDarkMode","viewport","cookies"],x=function(){return global.browser},b=function(){return global.page},k=process.argv.includes("--ci")||process.env.CI,E=k||"9223"===new URL(x().wsEndpoint()).port,P=function(){return k?"localhost":E?"linux"===process.platform?"172.17.0.1":"host.docker.internal":"localhost"}(),O=n(process.cwd()),S=null!=(h=JSON.parse(r.readFileSync(t.join(O,"package.json"),"utf-8")).acceptanceTests)?h:{},j=null!=(v=k?S.ciServer:S.devServer)?v:S.server,L=t.join(O,null!=(d=S.coveragePath)?d:"reports/coverage-acceptance"),T=null==j?void 0:j.port,_=!1;expect.extend({toMatchImageSnapshot:E?a.configureToMatchImageSnapshot({failureThreshold:0,failureThresholdType:"percent",customSnapshotIdentifier:function(e){return e.defaultIdentifier}}):function(){return _=!0,{message:function(){return""},pass:!0}}}),afterEach((function(){if(_){var e=new Error("Calling .toMatchImageSnapshot() is not allowed outside dockerized browser. Please, run your screenshot test in headless mode.");throw e.stack=(e.stack||"").split("\n")[0],e}}));var N=function(){var e=p(u().mark((function e(t,r){var n,o,a,i,c,s,p,f,l;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=void 0===(o=(n=void 0===r?{}:r).fullPage)||o,i=n.captureBeyondViewport,c=15e3,s=250,p=Date.now(),e.next=6,t.screenshot(A({fullPage:a,captureBeyondViewport:i}));case 6:return f=e.sent,e.next=9,new Promise((function(e){return setTimeout(e,s)}));case 9:return e.next=11,t.screenshot(A({fullPage:a,captureBeyondViewport:i}));case 11:l=e.sent;case 12:if(!f.compare(l)){e.next=23;break}if(!(Date.now()-p>c)){e.next=15;break}throw Error("Paint end timeout");case 15:return f=l,e.next=18,new Promise((function(e){return setTimeout(e,s)}));case 18:return e.next=20,t.screenshot(A({fullPage:a,captureBeyondViewport:i}));case 20:l=e.sent,e.next=12;break;case 23:case"end":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}(),A=function(e){var t=void 0===e?{}:e,r=t.captureBeyondViewport,n=void 0!==r&&r;return f({},l(t,m),{captureBeyondViewport:n})},I=function(e){return e.evaluate((function(e){return e.scrollIntoView({block:"center"})}))},F=function(e){var t=Object.create(e);return t.type=function(){var e=p(u().mark((function e(t,r,n){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,I(t);case 2:return e.abrupt("return",t.type(r,n));case 3:case"end":return e.stop()}}),e)})));return function(t,r,n){return e.apply(this,arguments)}}(),t.click=function(){var e=p(u().mark((function e(t,r){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,I(t);case 2:return e.abrupt("return",t.click(r));case 3:case"end":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}(),t.select=function(){var e=p(u().mark((function e(t){var r,n,o,a=arguments;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,I(t);case 2:for(r=a.length,n=new Array(r>1?r-1:0),o=1;o<r;o++)n[o-1]=a[o];return e.abrupt("return",t.select.apply(t,n));case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),t.screenshot=function(){var t=p(u().mark((function t(r){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(null!=r&&r.skipNetworkWait){t.next=3;break}return t.next=3,e.waitForNetworkIdle();case 3:return t.next=5,N(e,r);case 5:return t.abrupt("return",e.screenshot(A(r)));case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),t.clear=function(){var e=p(u().mark((function e(t){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.click({clickCount:3});case 2:return e.next=4,t.press("Delete");case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),t.setGeolocation=function(t){return e.evaluate((function(e){window.navigator.geolocation.getCurrentPosition=function(t){t({coords:e})}}),t)},t},C=!1,D=[],q=function(e){var t,r=(null!=(t=D.find((function(t){return(0,t.matcher)(e)})))?t:{handler:null}).handler;if(r){var n=r(e);e.respond(n)}else e.continue()},G=function(e){C=!0;var t=jest.fn();return D.push({matcher:e,handler:t}),t},B=function(){var e=p(u().mark((function e(t){var r,n,o,a,i,c,s,p,f;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=t.userAgent,n=t.isDarkMode,o=t.viewport,a=t.cookies,i=l(t,g),c=function(){if(void 0!==i.url)return i.url;var e=i.path,t=void 0===e?"/":e,r=i.port,n=void 0===r?T:r,o=i.protocol,a=void 0===o?"http":o,c=i.hostname,u=void 0===c?P:c;if(!n)throw new Error("You must specify a port. You can specify it when calling openPage() or by configuring a dev and ci server in the acceptanceTests config in your package.json");return a+"://"+u+":"+n+t}(),e.t0=r,e.t0){e.next=7;break}return e.next=6,x().userAgent();case 6:e.t0=e.sent;case 7:return s=e.t0,p=b(),e.next=11,p.bringToFront();case 11:if(!o){e.next=14;break}return e.next=14,p.setViewport(o);case 14:if(!a){e.next=17;break}return e.next=17,p.setCookie.apply(p,a);case 17:return e.next=19,p.setUserAgent(s+" acceptance-test");case 19:return e.next=21,p.emulateMediaFeatures([{name:"prefers-color-scheme",value:n?"dark":"light"}]);case 21:return e.next=23,p.evaluateOnNewDocument((function(){var e=document.createElement("style");e.innerHTML="\n *, *:after, *:before {\n transition-delay: 0s !important;\n transition-duration: 0s !important;\n animation-delay: -0.0001s !important;\n animation-duration: 0s !important;\n animation-play-state: paused !important;\n caret-color: transparent !important;\n font-variant-ligatures: none !important;\n }\n *::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n }\n ",window.addEventListener("DOMContentLoaded",(function(){document.head.appendChild(e)}))}));case 23:if(!C){e.next=27;break}return e.next=26,p.setRequestInterception(!0);case 26:p.on("request",q);case 27:return e.prev=27,e.next=30,p.goto(c);case 30:e.next=41;break;case 32:if(e.prev=32,e.t1=e.catch(27),!e.t1.message.includes("net::ERR_CONNECTION_REFUSED")){e.next=40;break}throw f=new Error("Could not connect to "+c+". Is the server running?"),Error.captureStackTrace(f,B),f;case 40:throw e.t1;case 41:return e.next=43,p.waitForFunction('document.fonts.status === "loaded"');case 43:return e.abrupt("return",F(p));case 44:case"end":return e.stop()}}),e,null,[[27,32]])})));return function(t){return e.apply(this,arguments)}}(),M=function(e){for(var t=void 0===e?{}:e,r=t.page,n=t.element,a={},i=function(){var e=s[c],t=e[0],i=e[1];a[t]=p(u().mark((function e(){var a,c,s,l,h,v,d,y,w=arguments;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,o.getDocument(null!=r?r:b());case 2:return a=e.sent,e.next=5,a.$("body");case 5:for(c=e.sent,s=w.length,l=new Array(s),h=0;h<s;h++)l[h]=w[h];return v=[].concat(l),t.startsWith("findBy")&&(1===v.length&&v.push(void 0),v.push({timeout:1e4})),e.next=11,i.apply(void 0,[null!=n?n:c].concat(v));case 11:return d=e.sent,(y=Object.create(d)).screenshot=function(){var e=p(u().mark((function e(t){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!=t&&t.skipNetworkWait){e.next=3;break}return e.next=3,(null!=r?r:b()).waitForNetworkIdle();case 3:return e.next=5,N(d,f({},t,{fullPage:!1}));case 5:return e.abrupt("return",d.screenshot(A(t)));case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),y.click=function(){var e=p(u().mark((function e(t){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,I(d);case 2:return e.abrupt("return",d.click(t));case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),y.type=function(){var e=p(u().mark((function e(t,r){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,I(d);case 2:return e.abrupt("return",d.type(t,r));case 3:case"end":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}(),y.select=p(u().mark((function e(){var t=arguments;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,I(d);case 2:return e.abrupt("return",d.select.apply(d,t));case 3:case"end":return e.stop()}}),e)}))),e.abrupt("return",y);case 18:case"end":return e.stop()}}),e)})))},c=0,s=Object.entries(o.queries);c<s.length;c++)i();return a},R=M();beforeEach(p(u().mark((function e(){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,b().setRequestInterception(!1);case 2:return e.next=4,global.jestPuppeteer.resetPage();case 4:case"end":return e.stop()}}),e)})))),afterEach(p(u().mark((function e(){var t;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,w({coveragePath:L});case 2:return e.prev=2,t=b(),D=[],C=!1,t.off("request",q),e.next=9,t.goto("about:blank");case 9:e.next=13;break;case 11:e.prev=11,e.t0=e.catch(2);case 13:case"end":return e.stop()}}),e,null,[[2,11]])})))),exports.createApiEndpointMock=function(e){var t=e.baseUrl;return G((function(e){return"OPTIONS"===e.method()&&e.url().startsWith(t)})).mockImplementation((function(){return{status:204,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"POST,PATCH,PUT,GET,OPTIONS","Access-Control-Allow-Headers":"*"}}})),{spyOn:function(e,r){void 0===r&&(r="GET");var n=jest.fn();return G((function(n){var o=n.url(),a=o.substring(t.length);return n.method()===r&&o.startsWith(t)&&!!a.match(i(e))})).mockImplementation((function(e){var t,r=n(e);return{status:null!=(t=r.status)?t:200,headers:{"Access-Control-Allow-Origin":"*"},contentType:"application/json",body:JSON.stringify(r.body||r)}})),n}}},exports.getGlobalBrowser=x,exports.getGlobalPage=b,exports.getPageApi=F,exports.getScreen=function(e){return M({page:e})},exports.interceptRequest=G,exports.openPage=B,exports.prepareFile=function(e){var n=!!process.env.HEADLESS,o=!k&&n,a=t.join(__dirname,"..","docker-compose.yaml");if(o){var i=c.execSync("docker-compose -f "+a+" ps -q").toString().trim();if(!i)throw Error("acceptance-testing container not found");c.execSync("docker cp "+e+" "+i+":/tmp");var u=t.join("/tmp",t.basename(e));return r.copyFileSync(e,u),u}return e},exports.screen=R,exports.serverHostName=P,exports.serverPort=T,exports.wait=function(e,t,r){void 0===t&&(t=1e4),void 0===r&&(r=50);var n=Date.now(),o=(new Error).stack;return new Promise((function(a,i){var c=function(e){if(Date.now()-n>=t)return e instanceof Error&&"Element not removed"===e.message&&(e.stack=o),void i(e);setTimeout(u,r)},u=function(){try{Promise.resolve(e()).then((function(e){return a(e)})).catch(c)}catch(e){c(e)}};setTimeout(u,0)}))},exports.waitForElementToBeRemoved=function(e,t,r){void 0===t&&(t=1e4),void 0===r&&(r=100);var n=(new Error).stack;return function(){var n=p(u().mark((function n(){var o;return u().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:o=Date.now();case 1:if(!(Date.now()-o<t)){n.next=11;break}return n.next=4,e.boundingBox();case 4:if(n.sent){n.next=7;break}return n.abrupt("return");case 7:return n.next=9,new Promise((function(e){return setTimeout(e,r)}));case 9:n.next=1;break;case 11:throw new Error("Element not removed");case 12:case"end":return n.stop()}}),n)})));return function(){return n.apply(this,arguments)}}()().catch((function(e){throw"Element not removed"===e.message&&(e.stack=n),e}))},exports.within=function(e){return M({element:e})};
2
2
  //# sourceMappingURL=acceptance-testing.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"acceptance-testing.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport findRoot from 'find-root';\nimport {getDocument, queries} from 'pptr-testing-library';\nimport {configureToMatchImageSnapshot} from 'jest-image-snapshot';\nimport globToRegExp from 'glob-to-regexp';\nconst execSync = require('child_process').execSync;\n\nimport type {\n Page,\n ElementHandle,\n ScreenshotOptions,\n Browser,\n ClickOptions,\n Viewport,\n GeolocationOptions,\n HTTPRequest,\n ResponseForRequest,\n} from 'puppeteer';\nimport type {getQueriesForElement} from 'pptr-testing-library';\n\ntype CustomScreenshotOptions = ScreenshotOptions & {\n skipNetworkWait?: boolean;\n};\n\nexport const getGlobalBrowser = (): Browser => (global as any).browser;\nexport const getGlobalPage = (): Page => (global as any).page;\n\nconst isCi = process.argv.includes('--ci') || process.env.CI;\nconst isUsingDockerizedChromium = isCi || new URL(getGlobalBrowser().wsEndpoint()).port === '9223';\n\nexport const serverHostName = ((): string => {\n if (isCi) {\n return 'localhost';\n }\n\n if (isUsingDockerizedChromium) {\n return process.platform === 'linux' ? '172.17.0.1' : 'host.docker.internal';\n }\n\n return 'localhost';\n})();\n\nconst rootDir = findRoot(process.cwd());\nconst pkg = JSON.parse(fs.readFileSync(path.join(rootDir, 'package.json'), 'utf-8'));\nconst projectConfig = pkg.acceptanceTests ?? {};\nconst server = (isCi ? projectConfig.ciServer : projectConfig.devServer) ?? projectConfig.server;\n\nexport const serverPort = server?.port;\n\nconst toMatchImageSnapshot = configureToMatchImageSnapshot({\n failureThreshold: 0,\n failureThresholdType: 'percent',\n customSnapshotIdentifier: ({defaultIdentifier}) => defaultIdentifier,\n});\n\nlet calledToMatchImageSnapshotOutsideDocker = false;\n\nconst localToMatchImageSnapshot = () => {\n calledToMatchImageSnapshotOutsideDocker = true;\n // let the expectation pass, then fail in afterEach. This way we allow developers to debug screenshot tests in local\n // but don't allow them to save screenshots taken outside the dockerized chromium\n return {\n message: () => '',\n pass: true,\n };\n};\n\nexpect.extend({\n toMatchImageSnapshot: isUsingDockerizedChromium ? toMatchImageSnapshot : localToMatchImageSnapshot,\n});\n\nafterEach(() => {\n if (calledToMatchImageSnapshotOutsideDocker) {\n const error = new Error(\n `Calling .toMatchImageSnapshot() is not allowed outside dockerized browser. Please, run your screenshot test in headless mode.`\n );\n error.stack = (error.stack || '').split('\\n')[0];\n throw error;\n }\n});\n\ntype WaitForPaintEndOptions = {\n fullPage?: boolean;\n captureBeyondViewport?: boolean;\n};\n\nconst waitForPaintEnd = async (\n element: ElementHandle | Page,\n {fullPage = true, captureBeyondViewport}: WaitForPaintEndOptions = {}\n) => {\n const MAX_WAIT = 15000;\n const STEP_TIME = 250;\n const t0 = Date.now();\n\n let buf1 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n await new Promise((r) => setTimeout(r, STEP_TIME));\n let buf2 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n\n // buffers are different if compare != 0\n while (buf1.compare(buf2)) {\n if (Date.now() - t0 > MAX_WAIT) {\n throw Error('Paint end timeout');\n }\n buf1 = buf2;\n await new Promise((r) => setTimeout(r, STEP_TIME));\n buf2 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n }\n};\n\nexport interface PageApi extends Omit<Page, 'click' | 'type' | 'select'> {\n clear: (selector: ElementHandle) => Promise<void>;\n // These are overridden:\n type: (selector: ElementHandle, text: string, options?: {delay: number}) => Promise<void>;\n click: (selector: ElementHandle, options?: ClickOptions) => Promise<void>;\n select: (selector: ElementHandle, ...values: string[]) => Promise<string[]>;\n screenshot: (options?: CustomScreenshotOptions) => Promise<Buffer | string | void>;\n}\n\nconst normalizeSreenshotOptions = ({captureBeyondViewport = false, ...options}: ScreenshotOptions = {}) => {\n // Puppeter default for captureBeyondViewport is true, but we think false is a better default.\n // When this is true, the fixed elements (like fixed footers) are relative to the original page\n // viewport, not to the full page, so those elements look weird in fullPage screenshots.\n return {...options, captureBeyondViewport};\n};\n\n// Puppeteer already calls scrollIntoViewIfNeeded before clicking an element. But it doesn't work in all situations\n// For example, when there is a fixed footer in the page and the element to click is under it, the browser won't scroll\n// because the element is already in the viewport (the ifNeeded part is important here). By forcing the scroll to the\n// center, we manage to fix these edge cases.\nconst scrollIntoView = (el: ElementHandle) => el.evaluate((e) => e.scrollIntoView({block: 'center'}));\n\nexport const getPageApi = (page: Page): PageApi => {\n const api: PageApi = Object.create(page);\n\n api.type = async (elementHandle, text, options) => {\n await scrollIntoView(elementHandle);\n return elementHandle.type(text, options);\n };\n api.click = async (elementHandle, options) => {\n await scrollIntoView(elementHandle);\n return elementHandle.click(options);\n };\n api.select = async (elementHandle, ...values) => {\n await scrollIntoView(elementHandle);\n return elementHandle.select(...values);\n };\n\n api.screenshot = async (options?: CustomScreenshotOptions) => {\n if (!options?.skipNetworkWait) {\n await page.waitForNetworkIdle();\n }\n await waitForPaintEnd(page, options);\n return page.screenshot(normalizeSreenshotOptions(options));\n };\n\n api.clear = async (elementHandle) => {\n await elementHandle.click({clickCount: 3});\n await elementHandle.press('Delete');\n };\n\n // For some reason, puppeteer browserContext.overridePermissions doesn't work with newer chrome versions.\n // This workaround polyfills the browser geolocation api to return the mocked position\n api.setGeolocation = (position: GeolocationOptions) =>\n page.evaluate((position) => {\n window.navigator.geolocation.getCurrentPosition = (callback) => {\n // @ts-ignore\n callback({\n coords: position,\n });\n };\n }, position as any);\n\n return api;\n};\n\nlet needsRequestInterception = false;\ntype RequestMatcherFn = (req: HTTPRequest) => boolean;\nlet requestHandlers: Array<{\n matcher: RequestMatcherFn;\n handler: jest.Mock<any, any>;\n}> = [];\n\nconst requestInterceptor = (req: HTTPRequest) => {\n const {handler} = requestHandlers.find(({matcher}) => matcher(req)) ?? {handler: null};\n if (!handler) {\n req.continue();\n return;\n }\n const response = handler(req);\n req.respond(response);\n};\n\nexport const interceptRequest = (\n matcher: RequestMatcherFn\n): jest.Mock<Partial<ResponseForRequest>, [HTTPRequest]> => {\n needsRequestInterception = true;\n const spy = jest.fn();\n requestHandlers.push({matcher, handler: spy});\n return spy;\n};\n\ntype ApiEndpointMock = {\n spyOn(path: string, method?: string): jest.Mock<unknown, [HTTPRequest]>;\n};\n\nexport const createApiEndpointMock = ({baseUrl}: {baseUrl: string}): ApiEndpointMock => {\n interceptRequest((req) => req.method() === 'OPTIONS' && req.url().startsWith(baseUrl)).mockImplementation(\n () => ({\n status: 204,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST,PATCH,PUT,GET,OPTIONS',\n 'Access-Control-Allow-Headers': '*',\n },\n })\n );\n\n return {\n spyOn(path: string, method: string = 'GET') {\n const matcher = (req: HTTPRequest) => {\n const url = req.url();\n const urlPath = url.substring(baseUrl.length);\n return (\n req.method() === method && url.startsWith(baseUrl) && !!urlPath.match(globToRegExp(path))\n );\n };\n\n const spy = jest.fn();\n\n interceptRequest(matcher).mockImplementation((req) => {\n const spyResult = spy(req);\n const status = spyResult.status ?? 200;\n const resBody = spyResult.body || spyResult;\n return {\n status,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n },\n contentType: 'application/json',\n body: JSON.stringify(resBody),\n };\n });\n\n return spy;\n },\n };\n};\n\ntype CookieConfig = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'Strict' | 'Lax' | 'None';\n expires?: number;\n priority?: 'Low' | 'Medium' | 'High';\n sameParty?: boolean;\n sourceScheme?: 'Unset' | 'NonSecure' | 'Secure';\n sourcePort?: number;\n};\n\ninterface OpenPageCommonConfig {\n userAgent?: string;\n viewport?: Viewport;\n isDarkMode?: boolean;\n cookies?: Array<CookieConfig>;\n}\n\ninterface OpenPageUrlConfig extends OpenPageCommonConfig {\n url: string;\n}\n\ninterface OpenPagePathConfig extends OpenPageCommonConfig {\n url?: undefined;\n\n path?: string;\n port?: number;\n protocol?: string;\n hostname?: string;\n}\n\ntype OpenPageConfig = OpenPageUrlConfig | OpenPagePathConfig;\n\nexport const openPage = async ({\n userAgent,\n isDarkMode,\n viewport,\n cookies,\n ...urlConfig\n}: OpenPageConfig): Promise<PageApi> => {\n const url = ((): string => {\n if (urlConfig.url !== undefined) {\n return urlConfig.url;\n }\n\n const {path = '/', port = serverPort, protocol = 'http', hostname = serverHostName} = urlConfig;\n\n if (!port) {\n const error = new Error(\n 'You must specify a port. You can specify it when calling openPage() or by configuring a dev and ci server in the acceptanceTests config in your package.json'\n );\n // Error.captureStackTrace(error, openPage);\n throw error;\n }\n\n return `${protocol}://${hostname}:${port}${path}`;\n })();\n\n const currentUserAgent = userAgent || (await getGlobalBrowser().userAgent());\n const page = getGlobalPage();\n\n await page.bringToFront();\n if (viewport) {\n await page.setViewport(viewport);\n }\n if (cookies) {\n await page.setCookie(...cookies);\n }\n await page.setUserAgent(`${currentUserAgent} acceptance-test`);\n await page.emulateMediaFeatures([{name: 'prefers-color-scheme', value: isDarkMode ? 'dark' : 'light'}]);\n\n // A set of styles to make screenshot tests more reliable.\n await page.evaluateOnNewDocument(() => {\n const style = document.createElement('style');\n style.innerHTML = `\n *, *:after, *:before {\n transition-delay: 0s !important;\n transition-duration: 0s !important;\n animation-delay: -0.0001s !important;\n animation-duration: 0s !important;\n animation-play-state: paused !important;\n caret-color: transparent !important;\n font-variant-ligatures: none !important;\n }\n *::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n }\n `;\n window.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild(style);\n });\n });\n\n if (needsRequestInterception) {\n await page.setRequestInterception(true);\n page.on('request', requestInterceptor);\n }\n\n try {\n await page.goto(url);\n } catch (e) {\n if ((e as Error).message.includes('net::ERR_CONNECTION_REFUSED')) {\n const connectionError = new Error(`Could not connect to ${url}. Is the server running?`);\n Error.captureStackTrace(connectionError, openPage);\n throw connectionError;\n } else {\n throw e;\n }\n }\n await page.waitForFunction('document.fonts.status === \"loaded\"');\n\n return getPageApi(page);\n};\n\nconst buildQueryMethods = ({page, element}: {page?: Page; element?: ElementHandle} = {}): ReturnType<\n typeof getQueriesForElement\n> => {\n const boundQueries: any = {};\n for (const [queryName, queryFn] of Object.entries(queries)) {\n boundQueries[queryName] = async (...args: any) => {\n const doc = await getDocument(page ?? getGlobalPage());\n const body = await doc.$('body');\n const queryArgs = [...args];\n if (queryName.startsWith('findBy')) {\n if (queryArgs.length === 1) {\n queryArgs.push(undefined);\n }\n queryArgs.push({timeout: 10000});\n }\n const elementHandle: ElementHandle = await queryFn(element ?? body, ...queryArgs);\n\n const newElementHandle = Object.create(elementHandle);\n\n newElementHandle.screenshot = async (options: CustomScreenshotOptions) => {\n if (!options?.skipNetworkWait) {\n await (page ?? getGlobalPage()).waitForNetworkIdle();\n }\n await waitForPaintEnd(elementHandle, {...options, fullPage: false});\n return elementHandle.screenshot(normalizeSreenshotOptions(options));\n };\n\n newElementHandle.click = async (options?: ClickOptions) => {\n await scrollIntoView(elementHandle);\n return elementHandle.click(options);\n };\n\n newElementHandle.type = async (text: string, options?: {delay: number}) => {\n await scrollIntoView(elementHandle);\n return elementHandle.type(text, options);\n };\n\n newElementHandle.select = async (...values: Array<string>) => {\n await scrollIntoView(elementHandle);\n return elementHandle.select(...values);\n };\n\n return newElementHandle;\n };\n }\n return boundQueries;\n};\n\nexport const getScreen = (page: Page) => buildQueryMethods({page});\n\nexport const screen = buildQueryMethods();\n\nexport const within = (element: ElementHandle) => buildQueryMethods({element});\n\nexport type {ElementHandle, Viewport} from 'puppeteer';\n\nbeforeEach(async () => {\n await getGlobalPage().setRequestInterception(false);\n // by resetting the page we clean up all the evaluateOnNewDocument calls, which are persistent between documents\n await (global as any).jestPuppeteer.resetPage();\n});\n\nafterEach(async () => {\n try {\n const page = getGlobalPage();\n requestHandlers = [];\n needsRequestInterception = false;\n page.off('request', requestInterceptor);\n\n // clear tab, this way we clear the DOM and stop js execution or pending requests\n await page.goto('about:blank');\n } catch (e) {\n // ignore, at this point page might be destroyed\n }\n});\n\n/**\n * Returns a new path to the file that can be used by chromium in acceptance tests\n *\n * To be able to use `element.uploadFile()` in a dockerized chromium, the file must exist in the\n * host and the docker, and both sides must use the same path.\n *\n * To workaround this bug or limitation, this function prepares the file by copying it to /tmp in\n * the host and the container.\n */\nexport const prepareFile = (filepath: string): string => {\n const isLocal = !isCi;\n const isHeadless = !!process.env.HEADLESS;\n const usesDocker = isLocal && isHeadless;\n\n const dockerComposeFile = path.join(__dirname, '..', 'docker-compose.yaml');\n\n if (usesDocker) {\n const containerId = execSync(`docker-compose -f ${dockerComposeFile} ps -q`).toString().trim();\n\n if (!containerId) {\n throw Error('acceptance-testing container not found');\n }\n\n execSync(`docker cp ${filepath} ${containerId}:/tmp`);\n\n const newPath = path.join('/tmp', path.basename(filepath));\n\n fs.copyFileSync(filepath, newPath);\n\n return newPath;\n } else {\n return filepath;\n }\n};\n\n/**\n * A convenience method to defer an expectation\n */\nexport const wait = <T>(expectation: () => Promise<T> | T, timeout = 10000, interval = 50): Promise<T> => {\n const startTime = Date.now();\n const startStack = new Error().stack;\n\n return new Promise((resolve, reject) => {\n const rejectOrRerun = (error: unknown) => {\n if (Date.now() - startTime >= timeout) {\n if (error instanceof Error) {\n if (error.message === 'Element not removed') {\n error.stack = startStack;\n }\n }\n reject(error);\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n setTimeout(runExpectation, interval);\n };\n const runExpectation = () => {\n try {\n Promise.resolve(expectation())\n .then((r) => resolve(r))\n .catch(rejectOrRerun);\n } catch (error) {\n rejectOrRerun(error);\n }\n };\n setTimeout(runExpectation, 0);\n });\n};\n\nexport const waitForElementToBeRemoved = (\n element: ElementHandle<Element>,\n timeout = 10000,\n interval = 100\n): Promise<void> => {\n const startStack = new Error().stack;\n\n const wait = async () => {\n const t0 = Date.now();\n while (Date.now() - t0 < timeout) {\n // boundingBox returns null when the element is not in the DOM\n const box = await element.boundingBox();\n if (!box) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n throw new Error('Element not removed');\n };\n\n return wait().catch((error) => {\n if (error.message === 'Element not removed') {\n error.stack = startStack;\n }\n throw error;\n });\n};\n"],"names":["execSync","require","getGlobalBrowser","global","browser","getGlobalPage","page","isCi","process","argv","includes","env","CI","isUsingDockerizedChromium","URL","wsEndpoint","port","serverHostName","platform","projectConfig","_pkg$acceptanceTests","JSON","parse","fs","readFileSync","path","join","findRoot","cwd","acceptanceTests","server","_ref","ciServer","devServer","serverPort","calledToMatchImageSnapshotOutsideDocker","expect","extend","toMatchImageSnapshot","configureToMatchImageSnapshot","failureThreshold","failureThresholdType","customSnapshotIdentifier","_ref2","defaultIdentifier","message","pass","afterEach","error","Error","stack","split","waitForPaintEnd","_ref3","_asyncToGenerator","_regeneratorRuntime","mark","_callee","element","_temp","_ref4","_ref4$fullPage","fullPage","captureBeyondViewport","MAX_WAIT","STEP_TIME","t0","buf1","buf2","wrap","_context","prev","next","Date","now","screenshot","normalizeSreenshotOptions","sent","Promise","r","setTimeout","compare","stop","_x","_x2","apply","arguments","_temp2","_ref5$captureBeyondVi","_ref5","_extends","_objectWithoutPropertiesLoose","_excluded","scrollIntoView","el","evaluate","e","block","getPageApi","api","Object","create","type","_ref6","_callee2","elementHandle","text","options","_context2","abrupt","_x3","_x4","_x5","click","_ref7","_callee3","_context3","_x6","_x7","select","_ref8","_callee4","_len","values","_key","_args4","_context4","length","Array","_x8","_ref9","_callee5","_context5","skipNetworkWait","waitForNetworkIdle","_x9","clear","_ref10","_callee6","_context6","clickCount","press","_x10","setGeolocation","position","window","navigator","geolocation","getCurrentPosition","callback","coords","needsRequestInterception","requestHandlers","requestInterceptor","req","handler","_requestHandlers$find","find","_ref12","matcher","response","respond","interceptRequest","spy","jest","fn","push","openPage","_ref15","_callee7","_ref14","userAgent","isDarkMode","viewport","cookies","urlConfig","url","currentUserAgent","connectionError","_context7","_excluded2","undefined","_urlConfig$path","_urlConfig$port","_urlConfig$protocol","protocol","_urlConfig$hostname","hostname","bringToFront","setViewport","setCookie","setUserAgent","emulateMediaFeatures","name","value","evaluateOnNewDocument","style","document","createElement","innerHTML","addEventListener","head","appendChild","setRequestInterception","on","t1","captureStackTrace","waitForFunction","_x11","buildQueryMethods","_temp3","_ref16","boundQueries","_loop","_Object$entries$_i","_Object$entries","_i","queryName","queryFn","_callee12","doc","body","_len2","args","_key2","queryArgs","newElementHandle","_args12","_context12","getDocument","$","concat","startsWith","timeout","_ref18","_callee8","_context8","_x12","_ref19","_callee9","_context9","_x13","_ref20","_callee10","_context10","_x14","_x15","_callee11","_args11","_context11","entries","queries","screen","beforeEach","_callee13","_context13","jestPuppeteer","resetPage","_callee14","_context14","off","_ref13","baseUrl","method","mockImplementation","status","headers","Access-Control-Allow-Origin","Access-Control-Allow-Methods","Access-Control-Allow-Headers","spyOn","urlPath","substring","match","globToRegExp","spyResult","_spyResult$status","contentType","stringify","filepath","isHeadless","HEADLESS","usesDocker","dockerComposeFile","__dirname","containerId","toString","trim","newPath","basename","copyFileSync","expectation","interval","startTime","startStack","resolve","reject","rejectOrRerun","runExpectation","then","_ref24","_callee15","_context15","boundingBox","wait"],"mappings":"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"}
1
+ {"version":3,"file":"acceptance-testing.cjs.production.min.js","sources":["../src/coverage.ts","../src/index.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\n\nimport type {Page} from 'puppeteer';\n\nconst getGlobalPage = (): Page => (global as any).page;\n\nexport const getRootPath = () => {\n const rootPath = expect.getState().snapshotState._rootDir;\n if (!rootPath) {\n throw new Error('Root path not found');\n }\n return rootPath;\n};\n\n/**\n * We want to clear coverage files from previous runs, but at this point it is not easy because each\n * worker runs a different instance of this script, so we can't just clear the coverage folder at\n * the beginning of the test run.\n *\n * The solution is to remove the coverage folder when the stored ppid (parent process id) is\n * different from the current one\n */\nconst prepareCoverageReportPath = ({coveragePath}: {coveragePath: string}) => {\n const ppidFile = path.join(coveragePath, '.ppid');\n const ppid = process.ppid.toString();\n if (!fs.existsSync(ppidFile) || fs.readFileSync(ppidFile, 'utf-8') !== ppid) {\n // the condition is just to make sure we don't remove files outside the repo\n if (getRootPath() === process.cwd() && path.normalize(coveragePath).startsWith(process.cwd())) {\n fs.rmSync(coveragePath, {recursive: true, force: true});\n }\n fs.mkdirSync(coveragePath, {recursive: true});\n fs.writeFileSync(ppidFile, ppid);\n }\n};\n\n/**\n * Asumes the code was instrumented with istanbul and the coverage report stored in `window.__coverage__`.\n * If not, this function does nothing.\n */\nexport const collectCoverageIfAvailable = async ({coveragePath}: {coveragePath: string}): Promise<void> => {\n try {\n const coverage = await getGlobalPage().evaluate(() => {\n return (window as any).__coverage__;\n });\n if (!coverage) {\n return;\n }\n\n prepareCoverageReportPath({coveragePath});\n const nycOutputPath = path.join(coveragePath, '.nyc_output');\n fs.mkdirSync(nycOutputPath, {recursive: true});\n\n Object.values(coverage).forEach((cov: any) => {\n if (cov && cov.path && cov.hash) {\n fs.writeFileSync(\n path.join(nycOutputPath, cov.hash + '.json'),\n JSON.stringify({[cov.path]: cov})\n );\n }\n });\n } catch (e) {\n // ignore\n }\n};\n","import path from 'path';\nimport fs from 'fs';\nimport findRoot from 'find-root';\nimport {getDocument, queries} from 'pptr-testing-library';\nimport {configureToMatchImageSnapshot} from 'jest-image-snapshot';\nimport globToRegExp from 'glob-to-regexp';\nimport {execSync} from 'child_process';\nimport {collectCoverageIfAvailable} from './coverage';\n\nimport type {\n Page,\n ElementHandle,\n ScreenshotOptions,\n Browser,\n ClickOptions,\n Viewport,\n GeolocationOptions,\n HTTPRequest,\n ResponseForRequest,\n} from 'puppeteer';\nimport type {getQueriesForElement} from 'pptr-testing-library';\n\ntype CustomScreenshotOptions = ScreenshotOptions & {\n skipNetworkWait?: boolean;\n};\n\nexport const getGlobalBrowser = (): Browser => (global as any).browser;\nexport const getGlobalPage = (): Page => (global as any).page;\n\nconst isCi = process.argv.includes('--ci') || process.env.CI;\nconst isUsingDockerizedChromium = isCi || new URL(getGlobalBrowser().wsEndpoint()).port === '9223';\n\nexport const serverHostName = ((): string => {\n if (isCi) {\n return 'localhost';\n }\n\n if (isUsingDockerizedChromium) {\n return process.platform === 'linux' ? '172.17.0.1' : 'host.docker.internal';\n }\n\n return 'localhost';\n})();\n\nconst rootDir = findRoot(process.cwd());\nconst pkg = JSON.parse(fs.readFileSync(path.join(rootDir, 'package.json'), 'utf-8'));\nconst projectConfig = pkg.acceptanceTests ?? {};\nconst server = (isCi ? projectConfig.ciServer : projectConfig.devServer) ?? projectConfig.server;\nconst coveragePath = path.join(rootDir, projectConfig.coveragePath ?? 'reports/coverage-acceptance');\n\nexport const serverPort = server?.port;\n\nconst toMatchImageSnapshot = configureToMatchImageSnapshot({\n failureThreshold: 0,\n failureThresholdType: 'percent',\n customSnapshotIdentifier: ({defaultIdentifier}) => defaultIdentifier,\n});\n\nlet calledToMatchImageSnapshotOutsideDocker = false;\n\nconst localToMatchImageSnapshot = () => {\n calledToMatchImageSnapshotOutsideDocker = true;\n // let the expectation pass, then fail in afterEach. This way we allow developers to debug screenshot tests in local\n // but don't allow them to save screenshots taken outside the dockerized chromium\n return {\n message: () => '',\n pass: true,\n };\n};\n\nexpect.extend({\n toMatchImageSnapshot: isUsingDockerizedChromium ? toMatchImageSnapshot : localToMatchImageSnapshot,\n});\n\nafterEach(() => {\n if (calledToMatchImageSnapshotOutsideDocker) {\n const error = new Error(\n `Calling .toMatchImageSnapshot() is not allowed outside dockerized browser. Please, run your screenshot test in headless mode.`\n );\n error.stack = (error.stack || '').split('\\n')[0];\n throw error;\n }\n});\n\ntype WaitForPaintEndOptions = {\n fullPage?: boolean;\n captureBeyondViewport?: boolean;\n};\n\nconst waitForPaintEnd = async (\n element: ElementHandle | Page,\n {fullPage = true, captureBeyondViewport}: WaitForPaintEndOptions = {}\n) => {\n const MAX_WAIT = 15000;\n const STEP_TIME = 250;\n const t0 = Date.now();\n\n let buf1 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n await new Promise((r) => setTimeout(r, STEP_TIME));\n let buf2 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n\n // buffers are different if compare != 0\n while (buf1.compare(buf2)) {\n if (Date.now() - t0 > MAX_WAIT) {\n throw Error('Paint end timeout');\n }\n buf1 = buf2;\n await new Promise((r) => setTimeout(r, STEP_TIME));\n buf2 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n }\n};\n\nexport interface PageApi extends Omit<Page, 'click' | 'type' | 'select'> {\n clear: (selector: ElementHandle) => Promise<void>;\n // These are overridden:\n type: (selector: ElementHandle, text: string, options?: {delay: number}) => Promise<void>;\n click: (selector: ElementHandle, options?: ClickOptions) => Promise<void>;\n select: (selector: ElementHandle, ...values: string[]) => Promise<string[]>;\n screenshot: (options?: CustomScreenshotOptions) => Promise<Buffer | string | void>;\n}\n\nconst normalizeSreenshotOptions = ({captureBeyondViewport = false, ...options}: ScreenshotOptions = {}) => {\n // Puppeter default for captureBeyondViewport is true, but we think false is a better default.\n // When this is true, the fixed elements (like fixed footers) are relative to the original page\n // viewport, not to the full page, so those elements look weird in fullPage screenshots.\n return {...options, captureBeyondViewport};\n};\n\n// Puppeteer already calls scrollIntoViewIfNeeded before clicking an element. But it doesn't work in all situations\n// For example, when there is a fixed footer in the page and the element to click is under it, the browser won't scroll\n// because the element is already in the viewport (the ifNeeded part is important here). By forcing the scroll to the\n// center, we manage to fix these edge cases.\nconst scrollIntoView = (el: ElementHandle) => el.evaluate((e) => e.scrollIntoView({block: 'center'}));\n\nexport const getPageApi = (page: Page): PageApi => {\n const api: PageApi = Object.create(page);\n\n api.type = async (elementHandle, text, options) => {\n await scrollIntoView(elementHandle);\n return elementHandle.type(text, options);\n };\n api.click = async (elementHandle, options) => {\n await scrollIntoView(elementHandle);\n return elementHandle.click(options);\n };\n api.select = async (elementHandle, ...values) => {\n await scrollIntoView(elementHandle);\n return elementHandle.select(...values);\n };\n\n api.screenshot = async (options?: CustomScreenshotOptions) => {\n if (!options?.skipNetworkWait) {\n await page.waitForNetworkIdle();\n }\n await waitForPaintEnd(page, options);\n return page.screenshot(normalizeSreenshotOptions(options));\n };\n\n api.clear = async (elementHandle) => {\n await elementHandle.click({clickCount: 3});\n await elementHandle.press('Delete');\n };\n\n // For some reason, puppeteer browserContext.overridePermissions doesn't work with newer chrome versions.\n // This workaround polyfills the browser geolocation api to return the mocked position\n api.setGeolocation = (position: GeolocationOptions) =>\n page.evaluate((position) => {\n window.navigator.geolocation.getCurrentPosition = (callback) => {\n // @ts-ignore\n callback({\n coords: position,\n });\n };\n }, position as any);\n\n return api;\n};\n\nlet needsRequestInterception = false;\ntype RequestMatcherFn = (req: HTTPRequest) => boolean;\nlet requestHandlers: Array<{\n matcher: RequestMatcherFn;\n handler: jest.Mock<any, any>;\n}> = [];\n\nconst requestInterceptor = (req: HTTPRequest) => {\n const {handler} = requestHandlers.find(({matcher}) => matcher(req)) ?? {handler: null};\n if (!handler) {\n req.continue();\n return;\n }\n const response = handler(req);\n req.respond(response);\n};\n\nexport const interceptRequest = (\n matcher: RequestMatcherFn\n): jest.Mock<Partial<ResponseForRequest>, [HTTPRequest]> => {\n needsRequestInterception = true;\n const spy = jest.fn();\n requestHandlers.push({matcher, handler: spy});\n return spy;\n};\n\ntype ApiEndpointMock = {\n spyOn(path: string, method?: string): jest.Mock<unknown, [HTTPRequest]>;\n};\n\nexport const createApiEndpointMock = ({baseUrl}: {baseUrl: string}): ApiEndpointMock => {\n interceptRequest((req) => req.method() === 'OPTIONS' && req.url().startsWith(baseUrl)).mockImplementation(\n () => ({\n status: 204,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST,PATCH,PUT,GET,OPTIONS',\n 'Access-Control-Allow-Headers': '*',\n },\n })\n );\n\n return {\n spyOn(path: string, method: string = 'GET') {\n const matcher = (req: HTTPRequest) => {\n const url = req.url();\n const urlPath = url.substring(baseUrl.length);\n return (\n req.method() === method && url.startsWith(baseUrl) && !!urlPath.match(globToRegExp(path))\n );\n };\n\n const spy = jest.fn();\n\n interceptRequest(matcher).mockImplementation((req) => {\n const spyResult = spy(req);\n const status = spyResult.status ?? 200;\n const resBody = spyResult.body || spyResult;\n return {\n status,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n },\n contentType: 'application/json',\n body: JSON.stringify(resBody),\n };\n });\n\n return spy;\n },\n };\n};\n\ntype CookieConfig = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'Strict' | 'Lax' | 'None';\n expires?: number;\n priority?: 'Low' | 'Medium' | 'High';\n sameParty?: boolean;\n sourceScheme?: 'Unset' | 'NonSecure' | 'Secure';\n sourcePort?: number;\n};\n\ninterface OpenPageCommonConfig {\n userAgent?: string;\n viewport?: Viewport;\n isDarkMode?: boolean;\n cookies?: Array<CookieConfig>;\n}\n\ninterface OpenPageUrlConfig extends OpenPageCommonConfig {\n url: string;\n}\n\ninterface OpenPagePathConfig extends OpenPageCommonConfig {\n url?: undefined;\n\n path?: string;\n port?: number;\n protocol?: string;\n hostname?: string;\n}\n\ntype OpenPageConfig = OpenPageUrlConfig | OpenPagePathConfig;\n\nexport const openPage = async ({\n userAgent,\n isDarkMode,\n viewport,\n cookies,\n ...urlConfig\n}: OpenPageConfig): Promise<PageApi> => {\n const url = ((): string => {\n if (urlConfig.url !== undefined) {\n return urlConfig.url;\n }\n\n const {path = '/', port = serverPort, protocol = 'http', hostname = serverHostName} = urlConfig;\n\n if (!port) {\n const error = new Error(\n 'You must specify a port. You can specify it when calling openPage() or by configuring a dev and ci server in the acceptanceTests config in your package.json'\n );\n // Error.captureStackTrace(error, openPage);\n throw error;\n }\n\n return `${protocol}://${hostname}:${port}${path}`;\n })();\n\n const currentUserAgent = userAgent || (await getGlobalBrowser().userAgent());\n const page = getGlobalPage();\n\n await page.bringToFront();\n if (viewport) {\n await page.setViewport(viewport);\n }\n if (cookies) {\n await page.setCookie(...cookies);\n }\n await page.setUserAgent(`${currentUserAgent} acceptance-test`);\n await page.emulateMediaFeatures([{name: 'prefers-color-scheme', value: isDarkMode ? 'dark' : 'light'}]);\n\n // A set of styles to make screenshot tests more reliable.\n await page.evaluateOnNewDocument(() => {\n const style = document.createElement('style');\n style.innerHTML = `\n *, *:after, *:before {\n transition-delay: 0s !important;\n transition-duration: 0s !important;\n animation-delay: -0.0001s !important;\n animation-duration: 0s !important;\n animation-play-state: paused !important;\n caret-color: transparent !important;\n font-variant-ligatures: none !important;\n }\n *::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n }\n `;\n window.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild(style);\n });\n });\n\n if (needsRequestInterception) {\n await page.setRequestInterception(true);\n page.on('request', requestInterceptor);\n }\n\n try {\n await page.goto(url);\n } catch (e) {\n if ((e as Error).message.includes('net::ERR_CONNECTION_REFUSED')) {\n const connectionError = new Error(`Could not connect to ${url}. Is the server running?`);\n Error.captureStackTrace(connectionError, openPage);\n throw connectionError;\n } else {\n throw e;\n }\n }\n await page.waitForFunction('document.fonts.status === \"loaded\"');\n\n return getPageApi(page);\n};\n\nconst buildQueryMethods = ({page, element}: {page?: Page; element?: ElementHandle} = {}): ReturnType<\n typeof getQueriesForElement\n> => {\n const boundQueries: any = {};\n for (const [queryName, queryFn] of Object.entries(queries)) {\n boundQueries[queryName] = async (...args: any) => {\n const doc = await getDocument(page ?? getGlobalPage());\n const body = await doc.$('body');\n const queryArgs = [...args];\n if (queryName.startsWith('findBy')) {\n if (queryArgs.length === 1) {\n queryArgs.push(undefined);\n }\n queryArgs.push({timeout: 10000});\n }\n const elementHandle: ElementHandle = await queryFn(element ?? body, ...queryArgs);\n\n const newElementHandle = Object.create(elementHandle);\n\n newElementHandle.screenshot = async (options: CustomScreenshotOptions) => {\n if (!options?.skipNetworkWait) {\n await (page ?? getGlobalPage()).waitForNetworkIdle();\n }\n await waitForPaintEnd(elementHandle, {...options, fullPage: false});\n return elementHandle.screenshot(normalizeSreenshotOptions(options));\n };\n\n newElementHandle.click = async (options?: ClickOptions) => {\n await scrollIntoView(elementHandle);\n return elementHandle.click(options);\n };\n\n newElementHandle.type = async (text: string, options?: {delay: number}) => {\n await scrollIntoView(elementHandle);\n return elementHandle.type(text, options);\n };\n\n newElementHandle.select = async (...values: Array<string>) => {\n await scrollIntoView(elementHandle);\n return elementHandle.select(...values);\n };\n\n return newElementHandle;\n };\n }\n return boundQueries;\n};\n\nexport const getScreen = (page: Page) => buildQueryMethods({page});\n\nexport const screen = buildQueryMethods();\n\nexport const within = (element: ElementHandle) => buildQueryMethods({element});\n\nexport type {ElementHandle, Viewport} from 'puppeteer';\n\nbeforeEach(async () => {\n await getGlobalPage().setRequestInterception(false);\n\n // by resetting the page we clean up all the evaluateOnNewDocument calls, which are persistent between documents\n await (global as any).jestPuppeteer.resetPage();\n});\n\nafterEach(async () => {\n await collectCoverageIfAvailable({coveragePath});\n\n try {\n const page = getGlobalPage();\n requestHandlers = [];\n needsRequestInterception = false;\n page.off('request', requestInterceptor);\n\n // clear tab, this way we clear the DOM and stop js execution or pending requests\n await page.goto('about:blank');\n } catch (e) {\n // ignore, at this point page might be destroyed\n }\n});\n\n/**\n * Returns a new path to the file that can be used by chromium in acceptance tests\n *\n * To be able to use `element.uploadFile()` in a dockerized chromium, the file must exist in the\n * host and the docker, and both sides must use the same path.\n *\n * To workaround this bug or limitation, this function prepares the file by copying it to /tmp in\n * the host and the container.\n */\nexport const prepareFile = (filepath: string): string => {\n const isLocal = !isCi;\n const isHeadless = !!process.env.HEADLESS;\n const usesDocker = isLocal && isHeadless;\n\n const dockerComposeFile = path.join(__dirname, '..', 'docker-compose.yaml');\n\n if (usesDocker) {\n const containerId = execSync(`docker-compose -f ${dockerComposeFile} ps -q`).toString().trim();\n\n if (!containerId) {\n throw Error('acceptance-testing container not found');\n }\n\n execSync(`docker cp ${filepath} ${containerId}:/tmp`);\n\n const newPath = path.join('/tmp', path.basename(filepath));\n\n fs.copyFileSync(filepath, newPath);\n\n return newPath;\n } else {\n return filepath;\n }\n};\n\n/**\n * A convenience method to defer an expectation\n */\nexport const wait = <T>(expectation: () => Promise<T> | T, timeout = 10000, interval = 50): Promise<T> => {\n const startTime = Date.now();\n const startStack = new Error().stack;\n\n return new Promise((resolve, reject) => {\n const rejectOrRerun = (error: unknown) => {\n if (Date.now() - startTime >= timeout) {\n if (error instanceof Error) {\n if (error.message === 'Element not removed') {\n error.stack = startStack;\n }\n }\n reject(error);\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n setTimeout(runExpectation, interval);\n };\n const runExpectation = () => {\n try {\n Promise.resolve(expectation())\n .then((r) => resolve(r))\n .catch(rejectOrRerun);\n } catch (error) {\n rejectOrRerun(error);\n }\n };\n setTimeout(runExpectation, 0);\n });\n};\n\nexport const waitForElementToBeRemoved = (\n element: ElementHandle<Element>,\n timeout = 10000,\n interval = 100\n): Promise<void> => {\n const startStack = new Error().stack;\n\n const wait = async () => {\n const t0 = Date.now();\n while (Date.now() - t0 < timeout) {\n // boundingBox returns null when the element is not in the DOM\n const box = await element.boundingBox();\n if (!box) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n throw new Error('Element not removed');\n };\n\n return wait().catch((error) => {\n if (error.message === 'Element not removed') {\n error.stack = startStack;\n }\n throw error;\n });\n};\n"],"names":["prepareCoverageReportPath","_ref","coveragePath","ppidFile","path","join","ppid","process","toString","fs","existsSync","readFileSync","rootPath","expect","getState","snapshotState","_rootDir","Error","getRootPath","cwd","normalize","startsWith","rmSync","recursive","force","mkdirSync","writeFileSync","collectCoverageIfAvailable","_ref3","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_ref2","coverage","nycOutputPath","wrap","_context","prev","next","global","page","evaluate","window","__coverage__","sent","abrupt","Object","values","forEach","cov","_JSON$stringify","hash","JSON","stringify","t0","stop","_x","apply","arguments","getGlobalBrowser","browser","getGlobalPage","isCi","argv","includes","env","CI","isUsingDockerizedChromium","URL","wsEndpoint","port","serverHostName","platform","rootDir","findRoot","projectConfig","_pkg$acceptanceTests","parse","acceptanceTests","server","ciServer","devServer","_projectConfig$covera","serverPort","calledToMatchImageSnapshotOutsideDocker","extend","toMatchImageSnapshot","configureToMatchImageSnapshot","failureThreshold","failureThresholdType","customSnapshotIdentifier","defaultIdentifier","message","pass","afterEach","error","stack","split","waitForPaintEnd","element","_temp","_ref4","_ref4$fullPage","fullPage","captureBeyondViewport","MAX_WAIT","STEP_TIME","buf1","buf2","Date","now","screenshot","normalizeSreenshotOptions","Promise","r","setTimeout","compare","_x2","_temp2","_ref5$captureBeyondVi","_ref5","_extends","_objectWithoutPropertiesLoose","_excluded","scrollIntoView","el","e","block","getPageApi","api","create","type","_ref6","_callee2","elementHandle","text","options","_context2","_x3","_x4","_x5","click","_ref7","_callee3","_context3","_x6","_x7","select","_ref8","_callee4","_len","_key","_args4","_context4","length","Array","_x8","_ref9","_callee5","_context5","skipNetworkWait","waitForNetworkIdle","_x9","clear","_ref10","_callee6","_context6","clickCount","press","_x10","setGeolocation","position","navigator","geolocation","getCurrentPosition","callback","coords","needsRequestInterception","requestHandlers","requestInterceptor","req","handler","_requestHandlers$find","find","_ref12","matcher","response","respond","interceptRequest","spy","jest","fn","push","openPage","_ref15","_callee7","_ref14","userAgent","isDarkMode","viewport","cookies","urlConfig","url","currentUserAgent","connectionError","_context7","_excluded2","undefined","_urlConfig$path","_urlConfig$port","_urlConfig$protocol","protocol","_urlConfig$hostname","hostname","bringToFront","setViewport","setCookie","setUserAgent","emulateMediaFeatures","name","value","evaluateOnNewDocument","style","document","createElement","innerHTML","addEventListener","head","appendChild","setRequestInterception","on","t1","captureStackTrace","waitForFunction","_x11","buildQueryMethods","_temp3","_ref16","boundQueries","_loop","_Object$entries$_i","_Object$entries","_i","queryName","queryFn","_callee12","doc","body","_len2","args","_key2","queryArgs","newElementHandle","_args12","_context12","getDocument","$","concat","timeout","_ref18","_callee8","_context8","_x12","_ref19","_callee9","_context9","_x13","_ref20","_callee10","_context10","_x14","_x15","_callee11","_args11","_context11","entries","queries","screen","beforeEach","_callee13","_context13","jestPuppeteer","resetPage","_callee14","_context14","off","_ref13","baseUrl","method","mockImplementation","status","headers","Access-Control-Allow-Origin","Access-Control-Allow-Methods","Access-Control-Allow-Headers","spyOn","urlPath","substring","match","globToRegExp","spyResult","_spyResult$status","contentType","filepath","isHeadless","HEADLESS","usesDocker","dockerComposeFile","__dirname","containerId","execSync","trim","newPath","basename","copyFileSync","expectation","interval","startTime","startStack","resolve","reject","rejectOrRerun","runExpectation","then","_ref24","_callee15","_context15","boundingBox","wait"],"mappings":"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"}
@@ -4,6 +4,7 @@ import findRoot from 'find-root';
4
4
  import { queries, getDocument } from 'pptr-testing-library';
5
5
  import { configureToMatchImageSnapshot } from 'jest-image-snapshot';
6
6
  import globToRegExp from 'glob-to-regexp';
7
+ import { execSync } from 'child_process';
7
8
 
8
9
  function _regeneratorRuntime() {
9
10
  _regeneratorRuntime = function () {
@@ -363,14 +364,102 @@ function _objectWithoutPropertiesLoose(source, excluded) {
363
364
  return target;
364
365
  }
365
366
 
367
+ var getGlobalPage = function getGlobalPage() {
368
+ return global.page;
369
+ };
370
+ var getRootPath = function getRootPath() {
371
+ var rootPath = expect.getState().snapshotState._rootDir;
372
+ if (!rootPath) {
373
+ throw new Error('Root path not found');
374
+ }
375
+ return rootPath;
376
+ };
377
+ /**
378
+ * We want to clear coverage files from previous runs, but at this point it is not easy because each
379
+ * worker runs a different instance of this script, so we can't just clear the coverage folder at
380
+ * the beginning of the test run.
381
+ *
382
+ * The solution is to remove the coverage folder when the stored ppid (parent process id) is
383
+ * different from the current one
384
+ */
385
+ var prepareCoverageReportPath = function prepareCoverageReportPath(_ref) {
386
+ var coveragePath = _ref.coveragePath;
387
+ var ppidFile = path.join(coveragePath, '.ppid');
388
+ var ppid = process.ppid.toString();
389
+ if (!fs.existsSync(ppidFile) || fs.readFileSync(ppidFile, 'utf-8') !== ppid) {
390
+ // the condition is just to make sure we don't remove files outside the repo
391
+ if (getRootPath() === process.cwd() && path.normalize(coveragePath).startsWith(process.cwd())) {
392
+ fs.rmSync(coveragePath, {
393
+ recursive: true,
394
+ force: true
395
+ });
396
+ }
397
+ fs.mkdirSync(coveragePath, {
398
+ recursive: true
399
+ });
400
+ fs.writeFileSync(ppidFile, ppid);
401
+ }
402
+ };
403
+ /**
404
+ * Asumes the code was instrumented with istanbul and the coverage report stored in `window.__coverage__`.
405
+ * If not, this function does nothing.
406
+ */
407
+ var collectCoverageIfAvailable = /*#__PURE__*/function () {
408
+ var _ref3 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref2) {
409
+ var coveragePath, coverage, nycOutputPath;
410
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
411
+ while (1) switch (_context.prev = _context.next) {
412
+ case 0:
413
+ coveragePath = _ref2.coveragePath;
414
+ _context.prev = 1;
415
+ _context.next = 4;
416
+ return getGlobalPage().evaluate(function () {
417
+ return window.__coverage__;
418
+ });
419
+ case 4:
420
+ coverage = _context.sent;
421
+ if (coverage) {
422
+ _context.next = 7;
423
+ break;
424
+ }
425
+ return _context.abrupt("return");
426
+ case 7:
427
+ prepareCoverageReportPath({
428
+ coveragePath: coveragePath
429
+ });
430
+ nycOutputPath = path.join(coveragePath, '.nyc_output');
431
+ fs.mkdirSync(nycOutputPath, {
432
+ recursive: true
433
+ });
434
+ Object.values(coverage).forEach(function (cov) {
435
+ if (cov && cov.path && cov.hash) {
436
+ var _JSON$stringify;
437
+ fs.writeFileSync(path.join(nycOutputPath, cov.hash + '.json'), JSON.stringify((_JSON$stringify = {}, _JSON$stringify[cov.path] = cov, _JSON$stringify)));
438
+ }
439
+ });
440
+ _context.next = 15;
441
+ break;
442
+ case 13:
443
+ _context.prev = 13;
444
+ _context.t0 = _context["catch"](1);
445
+ case 15:
446
+ case "end":
447
+ return _context.stop();
448
+ }
449
+ }, _callee, null, [[1, 13]]);
450
+ }));
451
+ return function collectCoverageIfAvailable(_x) {
452
+ return _ref3.apply(this, arguments);
453
+ };
454
+ }();
455
+
366
456
  var _excluded = ["captureBeyondViewport"],
367
457
  _excluded2 = ["userAgent", "isDarkMode", "viewport", "cookies"];
368
- var _pkg$acceptanceTests, _ref;
369
- var execSync = /*#__PURE__*/require('child_process').execSync;
458
+ var _pkg$acceptanceTests, _ref, _projectConfig$covera;
370
459
  var getGlobalBrowser = function getGlobalBrowser() {
371
460
  return global.browser;
372
461
  };
373
- var getGlobalPage = function getGlobalPage() {
462
+ var getGlobalPage$1 = function getGlobalPage() {
374
463
  return global.page;
375
464
  };
376
465
  var isCi = /*#__PURE__*/process.argv.includes('--ci') || process.env.CI;
@@ -388,6 +477,7 @@ var rootDir = /*#__PURE__*/findRoot( /*#__PURE__*/process.cwd());
388
477
  var pkg = /*#__PURE__*/JSON.parse( /*#__PURE__*/fs.readFileSync( /*#__PURE__*/path.join(rootDir, 'package.json'), 'utf-8'));
389
478
  var projectConfig = (_pkg$acceptanceTests = pkg.acceptanceTests) != null ? _pkg$acceptanceTests : {};
390
479
  var server = (_ref = isCi ? projectConfig.ciServer : projectConfig.devServer) != null ? _ref : projectConfig.server;
480
+ var coveragePath = /*#__PURE__*/path.join(rootDir, (_projectConfig$covera = projectConfig.coveragePath) != null ? _projectConfig$covera : 'reports/coverage-acceptance');
391
481
  var serverPort = server == null ? void 0 : server.port;
392
482
  var toMatchImageSnapshot = /*#__PURE__*/configureToMatchImageSnapshot({
393
483
  failureThreshold: 0,
@@ -742,7 +832,7 @@ var openPage = /*#__PURE__*/function () {
742
832
  _context7.t0 = _context7.sent;
743
833
  case 7:
744
834
  currentUserAgent = _context7.t0;
745
- page = getGlobalPage();
835
+ page = getGlobalPage$1();
746
836
  _context7.next = 11;
747
837
  return page.bringToFront();
748
838
  case 11:
@@ -843,7 +933,7 @@ var buildQueryMethods = function buildQueryMethods(_temp3) {
843
933
  while (1) switch (_context12.prev = _context12.next) {
844
934
  case 0:
845
935
  _context12.next = 2;
846
- return getDocument(page != null ? page : getGlobalPage());
936
+ return getDocument(page != null ? page : getGlobalPage$1());
847
937
  case 2:
848
938
  doc = _context12.sent;
849
939
  _context12.next = 5;
@@ -877,7 +967,7 @@ var buildQueryMethods = function buildQueryMethods(_temp3) {
877
967
  break;
878
968
  }
879
969
  _context8.next = 3;
880
- return (page != null ? page : getGlobalPage()).waitForNetworkIdle();
970
+ return (page != null ? page : getGlobalPage$1()).waitForNetworkIdle();
881
971
  case 3:
882
972
  _context8.next = 5;
883
973
  return waitForPaintEnd(elementHandle, _extends({}, options, {
@@ -977,7 +1067,7 @@ beforeEach( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().m
977
1067
  while (1) switch (_context13.prev = _context13.next) {
978
1068
  case 0:
979
1069
  _context13.next = 2;
980
- return getGlobalPage().setRequestInterception(false);
1070
+ return getGlobalPage$1().setRequestInterception(false);
981
1071
  case 2:
982
1072
  _context13.next = 4;
983
1073
  return global.jestPuppeteer.resetPage();
@@ -992,25 +1082,30 @@ afterEach( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().ma
992
1082
  return _regeneratorRuntime().wrap(function _callee14$(_context14) {
993
1083
  while (1) switch (_context14.prev = _context14.next) {
994
1084
  case 0:
995
- _context14.prev = 0;
996
- page = getGlobalPage();
1085
+ _context14.next = 2;
1086
+ return collectCoverageIfAvailable({
1087
+ coveragePath: coveragePath
1088
+ });
1089
+ case 2:
1090
+ _context14.prev = 2;
1091
+ page = getGlobalPage$1();
997
1092
  requestHandlers = [];
998
1093
  needsRequestInterception = false;
999
1094
  page.off('request', requestInterceptor);
1000
1095
  // clear tab, this way we clear the DOM and stop js execution or pending requests
1001
- _context14.next = 7;
1096
+ _context14.next = 9;
1002
1097
  return page["goto"]('about:blank');
1003
- case 7:
1004
- _context14.next = 11;
1005
- break;
1006
1098
  case 9:
1007
- _context14.prev = 9;
1008
- _context14.t0 = _context14["catch"](0);
1099
+ _context14.next = 13;
1100
+ break;
1009
1101
  case 11:
1102
+ _context14.prev = 11;
1103
+ _context14.t0 = _context14["catch"](2);
1104
+ case 13:
1010
1105
  case "end":
1011
1106
  return _context14.stop();
1012
1107
  }
1013
- }, _callee14, null, [[0, 9]]);
1108
+ }, _callee14, null, [[2, 11]]);
1014
1109
  })));
1015
1110
  /**
1016
1111
  * Returns a new path to the file that can be used by chromium in acceptance tests
@@ -1134,5 +1229,5 @@ var waitForElementToBeRemoved = function waitForElementToBeRemoved(element, time
1134
1229
  });
1135
1230
  };
1136
1231
 
1137
- export { createApiEndpointMock, getGlobalBrowser, getGlobalPage, getPageApi, getScreen, interceptRequest, openPage, prepareFile, screen, serverHostName, serverPort, wait, waitForElementToBeRemoved, within };
1232
+ export { createApiEndpointMock, getGlobalBrowser, getGlobalPage$1 as getGlobalPage, getPageApi, getScreen, interceptRequest, openPage, prepareFile, screen, serverHostName, serverPort, wait, waitForElementToBeRemoved, within };
1138
1233
  //# sourceMappingURL=acceptance-testing.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"acceptance-testing.esm.js","sources":["../src/index.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport findRoot from 'find-root';\nimport {getDocument, queries} from 'pptr-testing-library';\nimport {configureToMatchImageSnapshot} from 'jest-image-snapshot';\nimport globToRegExp from 'glob-to-regexp';\nconst execSync = require('child_process').execSync;\n\nimport type {\n Page,\n ElementHandle,\n ScreenshotOptions,\n Browser,\n ClickOptions,\n Viewport,\n GeolocationOptions,\n HTTPRequest,\n ResponseForRequest,\n} from 'puppeteer';\nimport type {getQueriesForElement} from 'pptr-testing-library';\n\ntype CustomScreenshotOptions = ScreenshotOptions & {\n skipNetworkWait?: boolean;\n};\n\nexport const getGlobalBrowser = (): Browser => (global as any).browser;\nexport const getGlobalPage = (): Page => (global as any).page;\n\nconst isCi = process.argv.includes('--ci') || process.env.CI;\nconst isUsingDockerizedChromium = isCi || new URL(getGlobalBrowser().wsEndpoint()).port === '9223';\n\nexport const serverHostName = ((): string => {\n if (isCi) {\n return 'localhost';\n }\n\n if (isUsingDockerizedChromium) {\n return process.platform === 'linux' ? '172.17.0.1' : 'host.docker.internal';\n }\n\n return 'localhost';\n})();\n\nconst rootDir = findRoot(process.cwd());\nconst pkg = JSON.parse(fs.readFileSync(path.join(rootDir, 'package.json'), 'utf-8'));\nconst projectConfig = pkg.acceptanceTests ?? {};\nconst server = (isCi ? projectConfig.ciServer : projectConfig.devServer) ?? projectConfig.server;\n\nexport const serverPort = server?.port;\n\nconst toMatchImageSnapshot = configureToMatchImageSnapshot({\n failureThreshold: 0,\n failureThresholdType: 'percent',\n customSnapshotIdentifier: ({defaultIdentifier}) => defaultIdentifier,\n});\n\nlet calledToMatchImageSnapshotOutsideDocker = false;\n\nconst localToMatchImageSnapshot = () => {\n calledToMatchImageSnapshotOutsideDocker = true;\n // let the expectation pass, then fail in afterEach. This way we allow developers to debug screenshot tests in local\n // but don't allow them to save screenshots taken outside the dockerized chromium\n return {\n message: () => '',\n pass: true,\n };\n};\n\nexpect.extend({\n toMatchImageSnapshot: isUsingDockerizedChromium ? toMatchImageSnapshot : localToMatchImageSnapshot,\n});\n\nafterEach(() => {\n if (calledToMatchImageSnapshotOutsideDocker) {\n const error = new Error(\n `Calling .toMatchImageSnapshot() is not allowed outside dockerized browser. Please, run your screenshot test in headless mode.`\n );\n error.stack = (error.stack || '').split('\\n')[0];\n throw error;\n }\n});\n\ntype WaitForPaintEndOptions = {\n fullPage?: boolean;\n captureBeyondViewport?: boolean;\n};\n\nconst waitForPaintEnd = async (\n element: ElementHandle | Page,\n {fullPage = true, captureBeyondViewport}: WaitForPaintEndOptions = {}\n) => {\n const MAX_WAIT = 15000;\n const STEP_TIME = 250;\n const t0 = Date.now();\n\n let buf1 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n await new Promise((r) => setTimeout(r, STEP_TIME));\n let buf2 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n\n // buffers are different if compare != 0\n while (buf1.compare(buf2)) {\n if (Date.now() - t0 > MAX_WAIT) {\n throw Error('Paint end timeout');\n }\n buf1 = buf2;\n await new Promise((r) => setTimeout(r, STEP_TIME));\n buf2 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n }\n};\n\nexport interface PageApi extends Omit<Page, 'click' | 'type' | 'select'> {\n clear: (selector: ElementHandle) => Promise<void>;\n // These are overridden:\n type: (selector: ElementHandle, text: string, options?: {delay: number}) => Promise<void>;\n click: (selector: ElementHandle, options?: ClickOptions) => Promise<void>;\n select: (selector: ElementHandle, ...values: string[]) => Promise<string[]>;\n screenshot: (options?: CustomScreenshotOptions) => Promise<Buffer | string | void>;\n}\n\nconst normalizeSreenshotOptions = ({captureBeyondViewport = false, ...options}: ScreenshotOptions = {}) => {\n // Puppeter default for captureBeyondViewport is true, but we think false is a better default.\n // When this is true, the fixed elements (like fixed footers) are relative to the original page\n // viewport, not to the full page, so those elements look weird in fullPage screenshots.\n return {...options, captureBeyondViewport};\n};\n\n// Puppeteer already calls scrollIntoViewIfNeeded before clicking an element. But it doesn't work in all situations\n// For example, when there is a fixed footer in the page and the element to click is under it, the browser won't scroll\n// because the element is already in the viewport (the ifNeeded part is important here). By forcing the scroll to the\n// center, we manage to fix these edge cases.\nconst scrollIntoView = (el: ElementHandle) => el.evaluate((e) => e.scrollIntoView({block: 'center'}));\n\nexport const getPageApi = (page: Page): PageApi => {\n const api: PageApi = Object.create(page);\n\n api.type = async (elementHandle, text, options) => {\n await scrollIntoView(elementHandle);\n return elementHandle.type(text, options);\n };\n api.click = async (elementHandle, options) => {\n await scrollIntoView(elementHandle);\n return elementHandle.click(options);\n };\n api.select = async (elementHandle, ...values) => {\n await scrollIntoView(elementHandle);\n return elementHandle.select(...values);\n };\n\n api.screenshot = async (options?: CustomScreenshotOptions) => {\n if (!options?.skipNetworkWait) {\n await page.waitForNetworkIdle();\n }\n await waitForPaintEnd(page, options);\n return page.screenshot(normalizeSreenshotOptions(options));\n };\n\n api.clear = async (elementHandle) => {\n await elementHandle.click({clickCount: 3});\n await elementHandle.press('Delete');\n };\n\n // For some reason, puppeteer browserContext.overridePermissions doesn't work with newer chrome versions.\n // This workaround polyfills the browser geolocation api to return the mocked position\n api.setGeolocation = (position: GeolocationOptions) =>\n page.evaluate((position) => {\n window.navigator.geolocation.getCurrentPosition = (callback) => {\n // @ts-ignore\n callback({\n coords: position,\n });\n };\n }, position as any);\n\n return api;\n};\n\nlet needsRequestInterception = false;\ntype RequestMatcherFn = (req: HTTPRequest) => boolean;\nlet requestHandlers: Array<{\n matcher: RequestMatcherFn;\n handler: jest.Mock<any, any>;\n}> = [];\n\nconst requestInterceptor = (req: HTTPRequest) => {\n const {handler} = requestHandlers.find(({matcher}) => matcher(req)) ?? {handler: null};\n if (!handler) {\n req.continue();\n return;\n }\n const response = handler(req);\n req.respond(response);\n};\n\nexport const interceptRequest = (\n matcher: RequestMatcherFn\n): jest.Mock<Partial<ResponseForRequest>, [HTTPRequest]> => {\n needsRequestInterception = true;\n const spy = jest.fn();\n requestHandlers.push({matcher, handler: spy});\n return spy;\n};\n\ntype ApiEndpointMock = {\n spyOn(path: string, method?: string): jest.Mock<unknown, [HTTPRequest]>;\n};\n\nexport const createApiEndpointMock = ({baseUrl}: {baseUrl: string}): ApiEndpointMock => {\n interceptRequest((req) => req.method() === 'OPTIONS' && req.url().startsWith(baseUrl)).mockImplementation(\n () => ({\n status: 204,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST,PATCH,PUT,GET,OPTIONS',\n 'Access-Control-Allow-Headers': '*',\n },\n })\n );\n\n return {\n spyOn(path: string, method: string = 'GET') {\n const matcher = (req: HTTPRequest) => {\n const url = req.url();\n const urlPath = url.substring(baseUrl.length);\n return (\n req.method() === method && url.startsWith(baseUrl) && !!urlPath.match(globToRegExp(path))\n );\n };\n\n const spy = jest.fn();\n\n interceptRequest(matcher).mockImplementation((req) => {\n const spyResult = spy(req);\n const status = spyResult.status ?? 200;\n const resBody = spyResult.body || spyResult;\n return {\n status,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n },\n contentType: 'application/json',\n body: JSON.stringify(resBody),\n };\n });\n\n return spy;\n },\n };\n};\n\ntype CookieConfig = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'Strict' | 'Lax' | 'None';\n expires?: number;\n priority?: 'Low' | 'Medium' | 'High';\n sameParty?: boolean;\n sourceScheme?: 'Unset' | 'NonSecure' | 'Secure';\n sourcePort?: number;\n};\n\ninterface OpenPageCommonConfig {\n userAgent?: string;\n viewport?: Viewport;\n isDarkMode?: boolean;\n cookies?: Array<CookieConfig>;\n}\n\ninterface OpenPageUrlConfig extends OpenPageCommonConfig {\n url: string;\n}\n\ninterface OpenPagePathConfig extends OpenPageCommonConfig {\n url?: undefined;\n\n path?: string;\n port?: number;\n protocol?: string;\n hostname?: string;\n}\n\ntype OpenPageConfig = OpenPageUrlConfig | OpenPagePathConfig;\n\nexport const openPage = async ({\n userAgent,\n isDarkMode,\n viewport,\n cookies,\n ...urlConfig\n}: OpenPageConfig): Promise<PageApi> => {\n const url = ((): string => {\n if (urlConfig.url !== undefined) {\n return urlConfig.url;\n }\n\n const {path = '/', port = serverPort, protocol = 'http', hostname = serverHostName} = urlConfig;\n\n if (!port) {\n const error = new Error(\n 'You must specify a port. You can specify it when calling openPage() or by configuring a dev and ci server in the acceptanceTests config in your package.json'\n );\n // Error.captureStackTrace(error, openPage);\n throw error;\n }\n\n return `${protocol}://${hostname}:${port}${path}`;\n })();\n\n const currentUserAgent = userAgent || (await getGlobalBrowser().userAgent());\n const page = getGlobalPage();\n\n await page.bringToFront();\n if (viewport) {\n await page.setViewport(viewport);\n }\n if (cookies) {\n await page.setCookie(...cookies);\n }\n await page.setUserAgent(`${currentUserAgent} acceptance-test`);\n await page.emulateMediaFeatures([{name: 'prefers-color-scheme', value: isDarkMode ? 'dark' : 'light'}]);\n\n // A set of styles to make screenshot tests more reliable.\n await page.evaluateOnNewDocument(() => {\n const style = document.createElement('style');\n style.innerHTML = `\n *, *:after, *:before {\n transition-delay: 0s !important;\n transition-duration: 0s !important;\n animation-delay: -0.0001s !important;\n animation-duration: 0s !important;\n animation-play-state: paused !important;\n caret-color: transparent !important;\n font-variant-ligatures: none !important;\n }\n *::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n }\n `;\n window.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild(style);\n });\n });\n\n if (needsRequestInterception) {\n await page.setRequestInterception(true);\n page.on('request', requestInterceptor);\n }\n\n try {\n await page.goto(url);\n } catch (e) {\n if ((e as Error).message.includes('net::ERR_CONNECTION_REFUSED')) {\n const connectionError = new Error(`Could not connect to ${url}. Is the server running?`);\n Error.captureStackTrace(connectionError, openPage);\n throw connectionError;\n } else {\n throw e;\n }\n }\n await page.waitForFunction('document.fonts.status === \"loaded\"');\n\n return getPageApi(page);\n};\n\nconst buildQueryMethods = ({page, element}: {page?: Page; element?: ElementHandle} = {}): ReturnType<\n typeof getQueriesForElement\n> => {\n const boundQueries: any = {};\n for (const [queryName, queryFn] of Object.entries(queries)) {\n boundQueries[queryName] = async (...args: any) => {\n const doc = await getDocument(page ?? getGlobalPage());\n const body = await doc.$('body');\n const queryArgs = [...args];\n if (queryName.startsWith('findBy')) {\n if (queryArgs.length === 1) {\n queryArgs.push(undefined);\n }\n queryArgs.push({timeout: 10000});\n }\n const elementHandle: ElementHandle = await queryFn(element ?? body, ...queryArgs);\n\n const newElementHandle = Object.create(elementHandle);\n\n newElementHandle.screenshot = async (options: CustomScreenshotOptions) => {\n if (!options?.skipNetworkWait) {\n await (page ?? getGlobalPage()).waitForNetworkIdle();\n }\n await waitForPaintEnd(elementHandle, {...options, fullPage: false});\n return elementHandle.screenshot(normalizeSreenshotOptions(options));\n };\n\n newElementHandle.click = async (options?: ClickOptions) => {\n await scrollIntoView(elementHandle);\n return elementHandle.click(options);\n };\n\n newElementHandle.type = async (text: string, options?: {delay: number}) => {\n await scrollIntoView(elementHandle);\n return elementHandle.type(text, options);\n };\n\n newElementHandle.select = async (...values: Array<string>) => {\n await scrollIntoView(elementHandle);\n return elementHandle.select(...values);\n };\n\n return newElementHandle;\n };\n }\n return boundQueries;\n};\n\nexport const getScreen = (page: Page) => buildQueryMethods({page});\n\nexport const screen = buildQueryMethods();\n\nexport const within = (element: ElementHandle) => buildQueryMethods({element});\n\nexport type {ElementHandle, Viewport} from 'puppeteer';\n\nbeforeEach(async () => {\n await getGlobalPage().setRequestInterception(false);\n // by resetting the page we clean up all the evaluateOnNewDocument calls, which are persistent between documents\n await (global as any).jestPuppeteer.resetPage();\n});\n\nafterEach(async () => {\n try {\n const page = getGlobalPage();\n requestHandlers = [];\n needsRequestInterception = false;\n page.off('request', requestInterceptor);\n\n // clear tab, this way we clear the DOM and stop js execution or pending requests\n await page.goto('about:blank');\n } catch (e) {\n // ignore, at this point page might be destroyed\n }\n});\n\n/**\n * Returns a new path to the file that can be used by chromium in acceptance tests\n *\n * To be able to use `element.uploadFile()` in a dockerized chromium, the file must exist in the\n * host and the docker, and both sides must use the same path.\n *\n * To workaround this bug or limitation, this function prepares the file by copying it to /tmp in\n * the host and the container.\n */\nexport const prepareFile = (filepath: string): string => {\n const isLocal = !isCi;\n const isHeadless = !!process.env.HEADLESS;\n const usesDocker = isLocal && isHeadless;\n\n const dockerComposeFile = path.join(__dirname, '..', 'docker-compose.yaml');\n\n if (usesDocker) {\n const containerId = execSync(`docker-compose -f ${dockerComposeFile} ps -q`).toString().trim();\n\n if (!containerId) {\n throw Error('acceptance-testing container not found');\n }\n\n execSync(`docker cp ${filepath} ${containerId}:/tmp`);\n\n const newPath = path.join('/tmp', path.basename(filepath));\n\n fs.copyFileSync(filepath, newPath);\n\n return newPath;\n } else {\n return filepath;\n }\n};\n\n/**\n * A convenience method to defer an expectation\n */\nexport const wait = <T>(expectation: () => Promise<T> | T, timeout = 10000, interval = 50): Promise<T> => {\n const startTime = Date.now();\n const startStack = new Error().stack;\n\n return new Promise((resolve, reject) => {\n const rejectOrRerun = (error: unknown) => {\n if (Date.now() - startTime >= timeout) {\n if (error instanceof Error) {\n if (error.message === 'Element not removed') {\n error.stack = startStack;\n }\n }\n reject(error);\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n setTimeout(runExpectation, interval);\n };\n const runExpectation = () => {\n try {\n Promise.resolve(expectation())\n .then((r) => resolve(r))\n .catch(rejectOrRerun);\n } catch (error) {\n rejectOrRerun(error);\n }\n };\n setTimeout(runExpectation, 0);\n });\n};\n\nexport const waitForElementToBeRemoved = (\n element: ElementHandle<Element>,\n timeout = 10000,\n interval = 100\n): Promise<void> => {\n const startStack = new Error().stack;\n\n const wait = async () => {\n const t0 = Date.now();\n while (Date.now() - t0 < timeout) {\n // boundingBox returns null when the element is not in the DOM\n const box = await element.boundingBox();\n if (!box) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n throw new Error('Element not removed');\n };\n\n return wait().catch((error) => {\n if (error.message === 'Element not removed') {\n error.stack = startStack;\n }\n throw error;\n });\n};\n"],"names":["execSync","require","getGlobalBrowser","global","browser","getGlobalPage","page","isCi","process","argv","includes","env","CI","isUsingDockerizedChromium","URL","wsEndpoint","port","serverHostName","platform","rootDir","findRoot","cwd","pkg","JSON","parse","fs","readFileSync","path","join","projectConfig","_pkg$acceptanceTests","acceptanceTests","server","_ref","ciServer","devServer","serverPort","toMatchImageSnapshot","configureToMatchImageSnapshot","failureThreshold","failureThresholdType","customSnapshotIdentifier","_ref2","defaultIdentifier","calledToMatchImageSnapshotOutsideDocker","localToMatchImageSnapshot","message","pass","expect","extend","afterEach","error","Error","stack","split","waitForPaintEnd","_ref3","_asyncToGenerator","_regeneratorRuntime","mark","_callee","element","_temp","_ref4","_ref4$fullPage","fullPage","captureBeyondViewport","MAX_WAIT","STEP_TIME","t0","buf1","buf2","wrap","_callee$","_context","prev","next","Date","now","screenshot","normalizeSreenshotOptions","sent","Promise","r","setTimeout","compare","stop","_x","_x2","apply","arguments","_temp2","_ref5$captureBeyondVi","_ref5","options","_objectWithoutPropertiesLoose","_excluded","_extends","scrollIntoView","el","evaluate","e","block","getPageApi","api","Object","create","type","_ref6","_callee2","elementHandle","text","_callee2$","_context2","abrupt","_x3","_x4","_x5","click","_ref7","_callee3","_callee3$","_context3","_x6","_x7","select","_ref8","_callee4","_len","values","_key","_args4","_callee4$","_context4","length","Array","_x8","_ref9","_callee5","_callee5$","_context5","skipNetworkWait","waitForNetworkIdle","_x9","clear","_ref10","_callee6","_callee6$","_context6","clickCount","press","_x10","setGeolocation","position","window","navigator","geolocation","getCurrentPosition","callback","coords","needsRequestInterception","requestHandlers","requestInterceptor","req","_ref11","_requestHandlers$find","find","_ref12","matcher","handler","response","respond","interceptRequest","spy","jest","fn","push","createApiEndpointMock","_ref13","baseUrl","method","url","startsWith","mockImplementation","status","headers","spyOn","urlPath","substring","match","globToRegExp","spyResult","_spyResult$status","resBody","body","contentType","stringify","openPage","_ref15","_callee7","_ref14","userAgent","isDarkMode","viewport","cookies","urlConfig","currentUserAgent","connectionError","_callee7$","_context7","_excluded2","undefined","_urlConfig$path","_urlConfig$port","_urlConfig$protocol","protocol","_urlConfig$hostname","hostname","bringToFront","setViewport","setCookie","setUserAgent","emulateMediaFeatures","name","value","evaluateOnNewDocument","style","document","createElement","innerHTML","addEventListener","head","appendChild","setRequestInterception","on","t1","captureStackTrace","waitForFunction","_x11","buildQueryMethods","_temp3","_ref16","boundQueries","_loop","_Object$entries$_i","_Object$entries","_i","queryName","queryFn","_callee12","doc","_len2","args","_key2","queryArgs","newElementHandle","_args12","_callee12$","_context12","getDocument","$","concat","timeout","_ref18","_callee8","_callee8$","_context8","_x12","_ref19","_callee9","_callee9$","_context9","_x13","_ref20","_callee10","_callee10$","_context10","_x14","_x15","_callee11","_args11","_callee11$","_context11","entries","queries","getScreen","screen","within","beforeEach","_callee13","_callee13$","_context13","jestPuppeteer","resetPage","_callee14","_callee14$","_context14","off","prepareFile","filepath","isLocal","isHeadless","HEADLESS","usesDocker","dockerComposeFile","__dirname","containerId","toString","trim","newPath","basename","copyFileSync","wait","expectation","interval","startTime","startStack","resolve","reject","rejectOrRerun","runExpectation","then","waitForElementToBeRemoved","_ref24","_callee15","box","_callee15$","_context15","boundingBox"],"mappings":"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"}
1
+ {"version":3,"file":"acceptance-testing.esm.js","sources":["../src/coverage.ts","../src/index.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\n\nimport type {Page} from 'puppeteer';\n\nconst getGlobalPage = (): Page => (global as any).page;\n\nexport const getRootPath = () => {\n const rootPath = expect.getState().snapshotState._rootDir;\n if (!rootPath) {\n throw new Error('Root path not found');\n }\n return rootPath;\n};\n\n/**\n * We want to clear coverage files from previous runs, but at this point it is not easy because each\n * worker runs a different instance of this script, so we can't just clear the coverage folder at\n * the beginning of the test run.\n *\n * The solution is to remove the coverage folder when the stored ppid (parent process id) is\n * different from the current one\n */\nconst prepareCoverageReportPath = ({coveragePath}: {coveragePath: string}) => {\n const ppidFile = path.join(coveragePath, '.ppid');\n const ppid = process.ppid.toString();\n if (!fs.existsSync(ppidFile) || fs.readFileSync(ppidFile, 'utf-8') !== ppid) {\n // the condition is just to make sure we don't remove files outside the repo\n if (getRootPath() === process.cwd() && path.normalize(coveragePath).startsWith(process.cwd())) {\n fs.rmSync(coveragePath, {recursive: true, force: true});\n }\n fs.mkdirSync(coveragePath, {recursive: true});\n fs.writeFileSync(ppidFile, ppid);\n }\n};\n\n/**\n * Asumes the code was instrumented with istanbul and the coverage report stored in `window.__coverage__`.\n * If not, this function does nothing.\n */\nexport const collectCoverageIfAvailable = async ({coveragePath}: {coveragePath: string}): Promise<void> => {\n try {\n const coverage = await getGlobalPage().evaluate(() => {\n return (window as any).__coverage__;\n });\n if (!coverage) {\n return;\n }\n\n prepareCoverageReportPath({coveragePath});\n const nycOutputPath = path.join(coveragePath, '.nyc_output');\n fs.mkdirSync(nycOutputPath, {recursive: true});\n\n Object.values(coverage).forEach((cov: any) => {\n if (cov && cov.path && cov.hash) {\n fs.writeFileSync(\n path.join(nycOutputPath, cov.hash + '.json'),\n JSON.stringify({[cov.path]: cov})\n );\n }\n });\n } catch (e) {\n // ignore\n }\n};\n","import path from 'path';\nimport fs from 'fs';\nimport findRoot from 'find-root';\nimport {getDocument, queries} from 'pptr-testing-library';\nimport {configureToMatchImageSnapshot} from 'jest-image-snapshot';\nimport globToRegExp from 'glob-to-regexp';\nimport {execSync} from 'child_process';\nimport {collectCoverageIfAvailable} from './coverage';\n\nimport type {\n Page,\n ElementHandle,\n ScreenshotOptions,\n Browser,\n ClickOptions,\n Viewport,\n GeolocationOptions,\n HTTPRequest,\n ResponseForRequest,\n} from 'puppeteer';\nimport type {getQueriesForElement} from 'pptr-testing-library';\n\ntype CustomScreenshotOptions = ScreenshotOptions & {\n skipNetworkWait?: boolean;\n};\n\nexport const getGlobalBrowser = (): Browser => (global as any).browser;\nexport const getGlobalPage = (): Page => (global as any).page;\n\nconst isCi = process.argv.includes('--ci') || process.env.CI;\nconst isUsingDockerizedChromium = isCi || new URL(getGlobalBrowser().wsEndpoint()).port === '9223';\n\nexport const serverHostName = ((): string => {\n if (isCi) {\n return 'localhost';\n }\n\n if (isUsingDockerizedChromium) {\n return process.platform === 'linux' ? '172.17.0.1' : 'host.docker.internal';\n }\n\n return 'localhost';\n})();\n\nconst rootDir = findRoot(process.cwd());\nconst pkg = JSON.parse(fs.readFileSync(path.join(rootDir, 'package.json'), 'utf-8'));\nconst projectConfig = pkg.acceptanceTests ?? {};\nconst server = (isCi ? projectConfig.ciServer : projectConfig.devServer) ?? projectConfig.server;\nconst coveragePath = path.join(rootDir, projectConfig.coveragePath ?? 'reports/coverage-acceptance');\n\nexport const serverPort = server?.port;\n\nconst toMatchImageSnapshot = configureToMatchImageSnapshot({\n failureThreshold: 0,\n failureThresholdType: 'percent',\n customSnapshotIdentifier: ({defaultIdentifier}) => defaultIdentifier,\n});\n\nlet calledToMatchImageSnapshotOutsideDocker = false;\n\nconst localToMatchImageSnapshot = () => {\n calledToMatchImageSnapshotOutsideDocker = true;\n // let the expectation pass, then fail in afterEach. This way we allow developers to debug screenshot tests in local\n // but don't allow them to save screenshots taken outside the dockerized chromium\n return {\n message: () => '',\n pass: true,\n };\n};\n\nexpect.extend({\n toMatchImageSnapshot: isUsingDockerizedChromium ? toMatchImageSnapshot : localToMatchImageSnapshot,\n});\n\nafterEach(() => {\n if (calledToMatchImageSnapshotOutsideDocker) {\n const error = new Error(\n `Calling .toMatchImageSnapshot() is not allowed outside dockerized browser. Please, run your screenshot test in headless mode.`\n );\n error.stack = (error.stack || '').split('\\n')[0];\n throw error;\n }\n});\n\ntype WaitForPaintEndOptions = {\n fullPage?: boolean;\n captureBeyondViewport?: boolean;\n};\n\nconst waitForPaintEnd = async (\n element: ElementHandle | Page,\n {fullPage = true, captureBeyondViewport}: WaitForPaintEndOptions = {}\n) => {\n const MAX_WAIT = 15000;\n const STEP_TIME = 250;\n const t0 = Date.now();\n\n let buf1 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n await new Promise((r) => setTimeout(r, STEP_TIME));\n let buf2 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n\n // buffers are different if compare != 0\n while (buf1.compare(buf2)) {\n if (Date.now() - t0 > MAX_WAIT) {\n throw Error('Paint end timeout');\n }\n buf1 = buf2;\n await new Promise((r) => setTimeout(r, STEP_TIME));\n buf2 = (await element.screenshot(\n normalizeSreenshotOptions({fullPage, captureBeyondViewport})\n )) as Buffer;\n }\n};\n\nexport interface PageApi extends Omit<Page, 'click' | 'type' | 'select'> {\n clear: (selector: ElementHandle) => Promise<void>;\n // These are overridden:\n type: (selector: ElementHandle, text: string, options?: {delay: number}) => Promise<void>;\n click: (selector: ElementHandle, options?: ClickOptions) => Promise<void>;\n select: (selector: ElementHandle, ...values: string[]) => Promise<string[]>;\n screenshot: (options?: CustomScreenshotOptions) => Promise<Buffer | string | void>;\n}\n\nconst normalizeSreenshotOptions = ({captureBeyondViewport = false, ...options}: ScreenshotOptions = {}) => {\n // Puppeter default for captureBeyondViewport is true, but we think false is a better default.\n // When this is true, the fixed elements (like fixed footers) are relative to the original page\n // viewport, not to the full page, so those elements look weird in fullPage screenshots.\n return {...options, captureBeyondViewport};\n};\n\n// Puppeteer already calls scrollIntoViewIfNeeded before clicking an element. But it doesn't work in all situations\n// For example, when there is a fixed footer in the page and the element to click is under it, the browser won't scroll\n// because the element is already in the viewport (the ifNeeded part is important here). By forcing the scroll to the\n// center, we manage to fix these edge cases.\nconst scrollIntoView = (el: ElementHandle) => el.evaluate((e) => e.scrollIntoView({block: 'center'}));\n\nexport const getPageApi = (page: Page): PageApi => {\n const api: PageApi = Object.create(page);\n\n api.type = async (elementHandle, text, options) => {\n await scrollIntoView(elementHandle);\n return elementHandle.type(text, options);\n };\n api.click = async (elementHandle, options) => {\n await scrollIntoView(elementHandle);\n return elementHandle.click(options);\n };\n api.select = async (elementHandle, ...values) => {\n await scrollIntoView(elementHandle);\n return elementHandle.select(...values);\n };\n\n api.screenshot = async (options?: CustomScreenshotOptions) => {\n if (!options?.skipNetworkWait) {\n await page.waitForNetworkIdle();\n }\n await waitForPaintEnd(page, options);\n return page.screenshot(normalizeSreenshotOptions(options));\n };\n\n api.clear = async (elementHandle) => {\n await elementHandle.click({clickCount: 3});\n await elementHandle.press('Delete');\n };\n\n // For some reason, puppeteer browserContext.overridePermissions doesn't work with newer chrome versions.\n // This workaround polyfills the browser geolocation api to return the mocked position\n api.setGeolocation = (position: GeolocationOptions) =>\n page.evaluate((position) => {\n window.navigator.geolocation.getCurrentPosition = (callback) => {\n // @ts-ignore\n callback({\n coords: position,\n });\n };\n }, position as any);\n\n return api;\n};\n\nlet needsRequestInterception = false;\ntype RequestMatcherFn = (req: HTTPRequest) => boolean;\nlet requestHandlers: Array<{\n matcher: RequestMatcherFn;\n handler: jest.Mock<any, any>;\n}> = [];\n\nconst requestInterceptor = (req: HTTPRequest) => {\n const {handler} = requestHandlers.find(({matcher}) => matcher(req)) ?? {handler: null};\n if (!handler) {\n req.continue();\n return;\n }\n const response = handler(req);\n req.respond(response);\n};\n\nexport const interceptRequest = (\n matcher: RequestMatcherFn\n): jest.Mock<Partial<ResponseForRequest>, [HTTPRequest]> => {\n needsRequestInterception = true;\n const spy = jest.fn();\n requestHandlers.push({matcher, handler: spy});\n return spy;\n};\n\ntype ApiEndpointMock = {\n spyOn(path: string, method?: string): jest.Mock<unknown, [HTTPRequest]>;\n};\n\nexport const createApiEndpointMock = ({baseUrl}: {baseUrl: string}): ApiEndpointMock => {\n interceptRequest((req) => req.method() === 'OPTIONS' && req.url().startsWith(baseUrl)).mockImplementation(\n () => ({\n status: 204,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST,PATCH,PUT,GET,OPTIONS',\n 'Access-Control-Allow-Headers': '*',\n },\n })\n );\n\n return {\n spyOn(path: string, method: string = 'GET') {\n const matcher = (req: HTTPRequest) => {\n const url = req.url();\n const urlPath = url.substring(baseUrl.length);\n return (\n req.method() === method && url.startsWith(baseUrl) && !!urlPath.match(globToRegExp(path))\n );\n };\n\n const spy = jest.fn();\n\n interceptRequest(matcher).mockImplementation((req) => {\n const spyResult = spy(req);\n const status = spyResult.status ?? 200;\n const resBody = spyResult.body || spyResult;\n return {\n status,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n },\n contentType: 'application/json',\n body: JSON.stringify(resBody),\n };\n });\n\n return spy;\n },\n };\n};\n\ntype CookieConfig = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'Strict' | 'Lax' | 'None';\n expires?: number;\n priority?: 'Low' | 'Medium' | 'High';\n sameParty?: boolean;\n sourceScheme?: 'Unset' | 'NonSecure' | 'Secure';\n sourcePort?: number;\n};\n\ninterface OpenPageCommonConfig {\n userAgent?: string;\n viewport?: Viewport;\n isDarkMode?: boolean;\n cookies?: Array<CookieConfig>;\n}\n\ninterface OpenPageUrlConfig extends OpenPageCommonConfig {\n url: string;\n}\n\ninterface OpenPagePathConfig extends OpenPageCommonConfig {\n url?: undefined;\n\n path?: string;\n port?: number;\n protocol?: string;\n hostname?: string;\n}\n\ntype OpenPageConfig = OpenPageUrlConfig | OpenPagePathConfig;\n\nexport const openPage = async ({\n userAgent,\n isDarkMode,\n viewport,\n cookies,\n ...urlConfig\n}: OpenPageConfig): Promise<PageApi> => {\n const url = ((): string => {\n if (urlConfig.url !== undefined) {\n return urlConfig.url;\n }\n\n const {path = '/', port = serverPort, protocol = 'http', hostname = serverHostName} = urlConfig;\n\n if (!port) {\n const error = new Error(\n 'You must specify a port. You can specify it when calling openPage() or by configuring a dev and ci server in the acceptanceTests config in your package.json'\n );\n // Error.captureStackTrace(error, openPage);\n throw error;\n }\n\n return `${protocol}://${hostname}:${port}${path}`;\n })();\n\n const currentUserAgent = userAgent || (await getGlobalBrowser().userAgent());\n const page = getGlobalPage();\n\n await page.bringToFront();\n if (viewport) {\n await page.setViewport(viewport);\n }\n if (cookies) {\n await page.setCookie(...cookies);\n }\n await page.setUserAgent(`${currentUserAgent} acceptance-test`);\n await page.emulateMediaFeatures([{name: 'prefers-color-scheme', value: isDarkMode ? 'dark' : 'light'}]);\n\n // A set of styles to make screenshot tests more reliable.\n await page.evaluateOnNewDocument(() => {\n const style = document.createElement('style');\n style.innerHTML = `\n *, *:after, *:before {\n transition-delay: 0s !important;\n transition-duration: 0s !important;\n animation-delay: -0.0001s !important;\n animation-duration: 0s !important;\n animation-play-state: paused !important;\n caret-color: transparent !important;\n font-variant-ligatures: none !important;\n }\n *::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n }\n `;\n window.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild(style);\n });\n });\n\n if (needsRequestInterception) {\n await page.setRequestInterception(true);\n page.on('request', requestInterceptor);\n }\n\n try {\n await page.goto(url);\n } catch (e) {\n if ((e as Error).message.includes('net::ERR_CONNECTION_REFUSED')) {\n const connectionError = new Error(`Could not connect to ${url}. Is the server running?`);\n Error.captureStackTrace(connectionError, openPage);\n throw connectionError;\n } else {\n throw e;\n }\n }\n await page.waitForFunction('document.fonts.status === \"loaded\"');\n\n return getPageApi(page);\n};\n\nconst buildQueryMethods = ({page, element}: {page?: Page; element?: ElementHandle} = {}): ReturnType<\n typeof getQueriesForElement\n> => {\n const boundQueries: any = {};\n for (const [queryName, queryFn] of Object.entries(queries)) {\n boundQueries[queryName] = async (...args: any) => {\n const doc = await getDocument(page ?? getGlobalPage());\n const body = await doc.$('body');\n const queryArgs = [...args];\n if (queryName.startsWith('findBy')) {\n if (queryArgs.length === 1) {\n queryArgs.push(undefined);\n }\n queryArgs.push({timeout: 10000});\n }\n const elementHandle: ElementHandle = await queryFn(element ?? body, ...queryArgs);\n\n const newElementHandle = Object.create(elementHandle);\n\n newElementHandle.screenshot = async (options: CustomScreenshotOptions) => {\n if (!options?.skipNetworkWait) {\n await (page ?? getGlobalPage()).waitForNetworkIdle();\n }\n await waitForPaintEnd(elementHandle, {...options, fullPage: false});\n return elementHandle.screenshot(normalizeSreenshotOptions(options));\n };\n\n newElementHandle.click = async (options?: ClickOptions) => {\n await scrollIntoView(elementHandle);\n return elementHandle.click(options);\n };\n\n newElementHandle.type = async (text: string, options?: {delay: number}) => {\n await scrollIntoView(elementHandle);\n return elementHandle.type(text, options);\n };\n\n newElementHandle.select = async (...values: Array<string>) => {\n await scrollIntoView(elementHandle);\n return elementHandle.select(...values);\n };\n\n return newElementHandle;\n };\n }\n return boundQueries;\n};\n\nexport const getScreen = (page: Page) => buildQueryMethods({page});\n\nexport const screen = buildQueryMethods();\n\nexport const within = (element: ElementHandle) => buildQueryMethods({element});\n\nexport type {ElementHandle, Viewport} from 'puppeteer';\n\nbeforeEach(async () => {\n await getGlobalPage().setRequestInterception(false);\n\n // by resetting the page we clean up all the evaluateOnNewDocument calls, which are persistent between documents\n await (global as any).jestPuppeteer.resetPage();\n});\n\nafterEach(async () => {\n await collectCoverageIfAvailable({coveragePath});\n\n try {\n const page = getGlobalPage();\n requestHandlers = [];\n needsRequestInterception = false;\n page.off('request', requestInterceptor);\n\n // clear tab, this way we clear the DOM and stop js execution or pending requests\n await page.goto('about:blank');\n } catch (e) {\n // ignore, at this point page might be destroyed\n }\n});\n\n/**\n * Returns a new path to the file that can be used by chromium in acceptance tests\n *\n * To be able to use `element.uploadFile()` in a dockerized chromium, the file must exist in the\n * host and the docker, and both sides must use the same path.\n *\n * To workaround this bug or limitation, this function prepares the file by copying it to /tmp in\n * the host and the container.\n */\nexport const prepareFile = (filepath: string): string => {\n const isLocal = !isCi;\n const isHeadless = !!process.env.HEADLESS;\n const usesDocker = isLocal && isHeadless;\n\n const dockerComposeFile = path.join(__dirname, '..', 'docker-compose.yaml');\n\n if (usesDocker) {\n const containerId = execSync(`docker-compose -f ${dockerComposeFile} ps -q`).toString().trim();\n\n if (!containerId) {\n throw Error('acceptance-testing container not found');\n }\n\n execSync(`docker cp ${filepath} ${containerId}:/tmp`);\n\n const newPath = path.join('/tmp', path.basename(filepath));\n\n fs.copyFileSync(filepath, newPath);\n\n return newPath;\n } else {\n return filepath;\n }\n};\n\n/**\n * A convenience method to defer an expectation\n */\nexport const wait = <T>(expectation: () => Promise<T> | T, timeout = 10000, interval = 50): Promise<T> => {\n const startTime = Date.now();\n const startStack = new Error().stack;\n\n return new Promise((resolve, reject) => {\n const rejectOrRerun = (error: unknown) => {\n if (Date.now() - startTime >= timeout) {\n if (error instanceof Error) {\n if (error.message === 'Element not removed') {\n error.stack = startStack;\n }\n }\n reject(error);\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n setTimeout(runExpectation, interval);\n };\n const runExpectation = () => {\n try {\n Promise.resolve(expectation())\n .then((r) => resolve(r))\n .catch(rejectOrRerun);\n } catch (error) {\n rejectOrRerun(error);\n }\n };\n setTimeout(runExpectation, 0);\n });\n};\n\nexport const waitForElementToBeRemoved = (\n element: ElementHandle<Element>,\n timeout = 10000,\n interval = 100\n): Promise<void> => {\n const startStack = new Error().stack;\n\n const wait = async () => {\n const t0 = Date.now();\n while (Date.now() - t0 < timeout) {\n // boundingBox returns null when the element is not in the DOM\n const box = await element.boundingBox();\n if (!box) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n throw new Error('Element not removed');\n };\n\n return wait().catch((error) => {\n if (error.message === 'Element not removed') {\n error.stack = startStack;\n }\n throw error;\n });\n};\n"],"names":["getGlobalPage","global","page","getRootPath","rootPath","expect","getState","snapshotState","_rootDir","Error","prepareCoverageReportPath","_ref","coveragePath","ppidFile","path","join","ppid","process","toString","fs","existsSync","readFileSync","cwd","normalize","startsWith","rmSync","recursive","force","mkdirSync","writeFileSync","collectCoverageIfAvailable","_ref3","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_ref2","coverage","nycOutputPath","wrap","_callee$","_context","prev","next","evaluate","window","__coverage__","sent","abrupt","Object","values","forEach","cov","hash","_JSON$stringify","JSON","stringify","t0","stop","_x","apply","arguments","getGlobalBrowser","browser","isCi","argv","includes","env","CI","isUsingDockerizedChromium","URL","wsEndpoint","port","serverHostName","platform","rootDir","findRoot","pkg","parse","projectConfig","_pkg$acceptanceTests","acceptanceTests","server","ciServer","devServer","_projectConfig$covera","serverPort","toMatchImageSnapshot","configureToMatchImageSnapshot","failureThreshold","failureThresholdType","customSnapshotIdentifier","defaultIdentifier","calledToMatchImageSnapshotOutsideDocker","localToMatchImageSnapshot","message","pass","extend","afterEach","error","stack","split","waitForPaintEnd","element","_temp","_ref4","_ref4$fullPage","fullPage","captureBeyondViewport","MAX_WAIT","STEP_TIME","buf1","buf2","Date","now","screenshot","normalizeSreenshotOptions","Promise","r","setTimeout","compare","_x2","_temp2","_ref5$captureBeyondVi","_ref5","options","_objectWithoutPropertiesLoose","_excluded","_extends","scrollIntoView","el","e","block","getPageApi","api","create","type","_ref6","_callee2","elementHandle","text","_callee2$","_context2","_x3","_x4","_x5","click","_ref7","_callee3","_callee3$","_context3","_x6","_x7","select","_ref8","_callee4","_len","_key","_args4","_callee4$","_context4","length","Array","_x8","_ref9","_callee5","_callee5$","_context5","skipNetworkWait","waitForNetworkIdle","_x9","clear","_ref10","_callee6","_callee6$","_context6","clickCount","press","_x10","setGeolocation","position","navigator","geolocation","getCurrentPosition","callback","coords","needsRequestInterception","requestHandlers","requestInterceptor","req","_ref11","_requestHandlers$find","find","_ref12","matcher","handler","response","respond","interceptRequest","spy","jest","fn","push","createApiEndpointMock","_ref13","baseUrl","method","url","mockImplementation","status","headers","spyOn","urlPath","substring","match","globToRegExp","spyResult","_spyResult$status","resBody","body","contentType","openPage","_ref15","_callee7","_ref14","userAgent","isDarkMode","viewport","cookies","urlConfig","currentUserAgent","connectionError","_callee7$","_context7","_excluded2","undefined","_urlConfig$path","_urlConfig$port","_urlConfig$protocol","protocol","_urlConfig$hostname","hostname","bringToFront","setViewport","setCookie","setUserAgent","emulateMediaFeatures","name","value","evaluateOnNewDocument","style","document","createElement","innerHTML","addEventListener","head","appendChild","setRequestInterception","on","t1","captureStackTrace","waitForFunction","_x11","buildQueryMethods","_temp3","_ref16","boundQueries","_loop","_Object$entries$_i","_Object$entries","_i","queryName","queryFn","_callee12","doc","_len2","args","_key2","queryArgs","newElementHandle","_args12","_callee12$","_context12","getDocument","$","concat","timeout","_ref18","_callee8","_callee8$","_context8","_x12","_ref19","_callee9","_callee9$","_context9","_x13","_ref20","_callee10","_callee10$","_context10","_x14","_x15","_callee11","_args11","_callee11$","_context11","entries","queries","getScreen","screen","within","beforeEach","_callee13","_callee13$","_context13","jestPuppeteer","resetPage","_callee14","_callee14$","_context14","off","prepareFile","filepath","isLocal","isHeadless","HEADLESS","usesDocker","dockerComposeFile","__dirname","containerId","execSync","trim","newPath","basename","copyFileSync","wait","expectation","interval","startTime","startStack","resolve","reject","rejectOrRerun","runExpectation","then","waitForElementToBeRemoved","_ref24","_callee15","box","_callee15$","_context15","boundingBox"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare const getRootPath: () => any;
2
+ /**
3
+ * Asumes the code was instrumented with istanbul and the coverage report stored in `window.__coverage__`.
4
+ * If not, this function does nothing.
5
+ */
6
+ export declare const collectCoverageIfAvailable: ({ coveragePath }: {
7
+ coveragePath: string;
8
+ }) => Promise<void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telefonica/acceptance-testing",
3
- "version": "2.18.1",
3
+ "version": "2.19.0-beta0",
4
4
  "author": "Telefonica",
5
5
  "license": "UNLICENSED",
6
6
  "module": "dist/acceptance-testing.esm.js",