@taiga-ui/testing 4.50.0-canary.f66e0da → 4.51.0-canary.2b42d75

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.
@@ -3,4 +3,4 @@ export function tuiSwitchNgDevMode(enable) {
3
3
  global.ngDevMode = enable;
4
4
  }
5
5
  }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLW5nLWRldi1tb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVzdGluZy9tb2Nrcy9zd2l0Y2gtbmctZGV2LW1vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWU7SUFDOUMsSUFBSSxNQUFNLEVBQUU7UUFDUixNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztLQUM3QjtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIGNvbnN0IGdsb2JhbDogUmVjb3JkPGFueSwgYW55PiAmIFdpbmRvdztcblxuZXhwb3J0IGZ1bmN0aW9uIHR1aVN3aXRjaE5nRGV2TW9kZShlbmFibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGdsb2JhbC5uZ0Rldk1vZGUgPSBlbmFibGU7XG4gICAgfVxufVxuIl19
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLW5nLWRldi1tb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVzdGluZy9tb2Nrcy9zd2l0Y2gtbmctZGV2LW1vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWU7SUFDOUMsSUFBSSxNQUFNLEVBQUU7UUFDUixNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztLQUM3QjtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIGNvbnN0IGdsb2JhbDogKFJlY29yZDxhbnksIGFueT4gJiBXaW5kb3cpIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gdHVpU3dpdGNoTmdEZXZNb2RlKGVuYWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgZ2xvYmFsLm5nRGV2TW9kZSA9IGVuYWJsZTtcbiAgICB9XG59XG4iXX0=
@@ -1,8 +1,9 @@
1
- import { readFileSync, writeFileSync } from 'node:fs';
1
+ import { readFileSync } from 'node:fs';
2
2
  import { tuiCombineSnapshots } from './combine-snapshots';
3
3
  const ROOT_PATH = process.env.ROOT_PATH ?? 'projects/demo-cypress';
4
4
  const TEST_RESULTS_PATH = process.env.TEST_RESULTS_PATH ?? `${ROOT_PATH}/tests-results`;
5
- export async function tuiCombineCypressFailedScreenshots() {
5
+ // noinspection JSUnusedGlobalSymbols
6
+ export function tuiCombineCypressFailedScreenshots() {
6
7
  const reportSummary = readJSON(`${TEST_RESULTS_PATH}/report-summary.json`);
7
8
  if (!reportSummary) {
8
9
  return;
@@ -12,8 +13,9 @@ export async function tuiCombineCypressFailedScreenshots() {
12
13
  .flat()
13
14
  .filter((x) => x.status === 'fail' && x.diffPath);
14
15
  for (const { baselinePath, diffPath, comparisonPath, name } of failedTestSnapshots) {
15
- const buffer = await tuiCombineSnapshots([baselinePath, diffPath, comparisonPath].map((x) => `${ROOT_PATH}/${x}`));
16
- writeFileSync(`${TEST_RESULTS_PATH}/${name}.diff.png`, buffer);
16
+ const output = `${TEST_RESULTS_PATH}/${name}.diff.png`;
17
+ const inputs = [baselinePath, diffPath, comparisonPath].map((x) => `${ROOT_PATH}/${x}`);
18
+ tuiCombineSnapshots(inputs, output).then(() => console.info(` ✅ Async saved merged image: ${output}`));
17
19
  }
18
20
  }
19
21
  function readJSON(path) {
@@ -24,4 +26,4 @@ function readJSON(path) {
24
26
  return null;
25
27
  }
26
28
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS1jeXByZXNzLWZhaWxlZC1zY3JlZW5zaG90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Rlc3RpbmcvdmlzdWFsLXRlc3RpbmcvY29tYmluZS1jeXByZXNzLWZhaWxlZC1zY3JlZW5zaG90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVwRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSx1QkFBdUIsQ0FBQztBQUNuRSxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksR0FBRyxTQUFTLGdCQUFnQixDQUFDO0FBY3hGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0NBQWtDO0lBQ3BELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBUyxHQUFHLGlCQUFpQixzQkFBc0IsQ0FBQyxDQUFDO0lBRW5GLElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDaEIsT0FBTztLQUNWO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLENBQUMsTUFBTTtTQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDbkIsSUFBSSxFQUFFO1NBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFdEQsS0FBSyxNQUFNLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFDLElBQUksbUJBQW1CLEVBQUU7UUFDOUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxtQkFBbUIsQ0FDcEMsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDM0UsQ0FBQztRQUVGLGFBQWEsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLElBQUksV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2xFO0FBQ0wsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFJLElBQVk7SUFDN0IsSUFBSTtRQUNBLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDbEQ7SUFBQyxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUM7S0FDZjtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3JlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCB7dHVpQ29tYmluZVNuYXBzaG90c30gZnJvbSAnLi9jb21iaW5lLXNuYXBzaG90cyc7XG5cbmNvbnN0IFJPT1RfUEFUSCA9IHByb2Nlc3MuZW52LlJPT1RfUEFUSCA/PyAncHJvamVjdHMvZGVtby1jeXByZXNzJztcbmNvbnN0IFRFU1RfUkVTVUxUU19QQVRIID0gcHJvY2Vzcy5lbnYuVEVTVF9SRVNVTFRTX1BBVEggPz8gYCR7Uk9PVF9QQVRIfS90ZXN0cy1yZXN1bHRzYDtcblxuaW50ZXJmYWNlIFRlc3RSZXN1bHQge1xuICAgIHN0YXR1czogJ2ZhaWwnIHwgJ3Bhc3MnO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBiYXNlbGluZVBhdGg6IHN0cmluZztcbiAgICBkaWZmUGF0aDogc3RyaW5nO1xuICAgIGNvbXBhcmlzb25QYXRoOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSZXBvcnQge1xuICAgIHN1aXRlczogQXJyYXk8e3Rlc3RzOiBUZXN0UmVzdWx0W119Pjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHR1aUNvbWJpbmVDeXByZXNzRmFpbGVkU2NyZWVuc2hvdHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVwb3J0U3VtbWFyeSA9IHJlYWRKU09OPFJlcG9ydD4oYCR7VEVTVF9SRVNVTFRTX1BBVEh9L3JlcG9ydC1zdW1tYXJ5Lmpzb25gKTtcblxuICAgIGlmICghcmVwb3J0U3VtbWFyeSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmFpbGVkVGVzdFNuYXBzaG90cyA9IHJlcG9ydFN1bW1hcnkuc3VpdGVzXG4gICAgICAgIC5tYXAoKHgpID0+IHgudGVzdHMpXG4gICAgICAgIC5mbGF0KClcbiAgICAgICAgLmZpbHRlcigoeCkgPT4geC5zdGF0dXMgPT09ICdmYWlsJyAmJiB4LmRpZmZQYXRoKTtcblxuICAgIGZvciAoY29uc3Qge2Jhc2VsaW5lUGF0aCwgZGlmZlBhdGgsIGNvbXBhcmlzb25QYXRoLCBuYW1lfSBvZiBmYWlsZWRUZXN0U25hcHNob3RzKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHR1aUNvbWJpbmVTbmFwc2hvdHMoXG4gICAgICAgICAgICBbYmFzZWxpbmVQYXRoLCBkaWZmUGF0aCwgY29tcGFyaXNvblBhdGhdLm1hcCgoeCkgPT4gYCR7Uk9PVF9QQVRIfS8ke3h9YCksXG4gICAgICAgICk7XG5cbiAgICAgICAgd3JpdGVGaWxlU3luYyhgJHtURVNUX1JFU1VMVFNfUEFUSH0vJHtuYW1lfS5kaWZmLnBuZ2AsIGJ1ZmZlcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWFkSlNPTjxUPihwYXRoOiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhdGgsICd1dGYtOCcpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIl19
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS1jeXByZXNzLWZhaWxlZC1zY3JlZW5zaG90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Rlc3RpbmcvdmlzdWFsLXRlc3RpbmcvY29tYmluZS1jeXByZXNzLWZhaWxlZC1zY3JlZW5zaG90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLHVCQUF1QixDQUFDO0FBQ25FLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLFNBQVMsZ0JBQWdCLENBQUM7QUFjeEYscUNBQXFDO0FBQ3JDLE1BQU0sVUFBVSxrQ0FBa0M7SUFDOUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFTLEdBQUcsaUJBQWlCLHNCQUFzQixDQUFDLENBQUM7SUFFbkYsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUNoQixPQUFPO0tBQ1Y7SUFFRCxNQUFNLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxNQUFNO1NBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNuQixJQUFJLEVBQUU7U0FDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV0RCxLQUFLLE1BQU0sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUMsSUFBSSxtQkFBbUIsRUFBRTtRQUM5RSxNQUFNLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixJQUFJLElBQUksV0FBVyxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQ3ZELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLEVBQUUsQ0FDN0IsQ0FBQztRQUVGLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLE1BQU0sRUFBRSxDQUFDLENBQ3pELENBQUM7S0FDTDtBQUNMLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBSSxJQUFZO0lBQzdCLElBQUk7UUFDQSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ2xEO0lBQUMsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQge3R1aUNvbWJpbmVTbmFwc2hvdHN9IGZyb20gJy4vY29tYmluZS1zbmFwc2hvdHMnO1xuXG5jb25zdCBST09UX1BBVEggPSBwcm9jZXNzLmVudi5ST09UX1BBVEggPz8gJ3Byb2plY3RzL2RlbW8tY3lwcmVzcyc7XG5jb25zdCBURVNUX1JFU1VMVFNfUEFUSCA9IHByb2Nlc3MuZW52LlRFU1RfUkVTVUxUU19QQVRIID8/IGAke1JPT1RfUEFUSH0vdGVzdHMtcmVzdWx0c2A7XG5cbmludGVyZmFjZSBUZXN0UmVzdWx0IHtcbiAgICBzdGF0dXM6ICdmYWlsJyB8ICdwYXNzJztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYmFzZWxpbmVQYXRoOiBzdHJpbmc7XG4gICAgZGlmZlBhdGg6IHN0cmluZztcbiAgICBjb21wYXJpc29uUGF0aDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUmVwb3J0IHtcbiAgICBzdWl0ZXM6IEFycmF5PHt0ZXN0czogVGVzdFJlc3VsdFtdfT47XG59XG5cbi8vIG5vaW5zcGVjdGlvbiBKU1VudXNlZEdsb2JhbFN5bWJvbHNcbmV4cG9ydCBmdW5jdGlvbiB0dWlDb21iaW5lQ3lwcmVzc0ZhaWxlZFNjcmVlbnNob3RzKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydFN1bW1hcnkgPSByZWFkSlNPTjxSZXBvcnQ+KGAke1RFU1RfUkVTVUxUU19QQVRIfS9yZXBvcnQtc3VtbWFyeS5qc29uYCk7XG5cbiAgICBpZiAoIXJlcG9ydFN1bW1hcnkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZhaWxlZFRlc3RTbmFwc2hvdHMgPSByZXBvcnRTdW1tYXJ5LnN1aXRlc1xuICAgICAgICAubWFwKCh4KSA9PiB4LnRlc3RzKVxuICAgICAgICAuZmxhdCgpXG4gICAgICAgIC5maWx0ZXIoKHgpID0+IHguc3RhdHVzID09PSAnZmFpbCcgJiYgeC5kaWZmUGF0aCk7XG5cbiAgICBmb3IgKGNvbnN0IHtiYXNlbGluZVBhdGgsIGRpZmZQYXRoLCBjb21wYXJpc29uUGF0aCwgbmFtZX0gb2YgZmFpbGVkVGVzdFNuYXBzaG90cykge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBgJHtURVNUX1JFU1VMVFNfUEFUSH0vJHtuYW1lfS5kaWZmLnBuZ2A7XG4gICAgICAgIGNvbnN0IGlucHV0cyA9IFtiYXNlbGluZVBhdGgsIGRpZmZQYXRoLCBjb21wYXJpc29uUGF0aF0ubWFwKFxuICAgICAgICAgICAgKHgpID0+IGAke1JPT1RfUEFUSH0vJHt4fWAsXG4gICAgICAgICk7XG5cbiAgICAgICAgdHVpQ29tYmluZVNuYXBzaG90cyhpbnB1dHMsIG91dHB1dCkudGhlbigoKSA9PlxuICAgICAgICAgICAgY29uc29sZS5pbmZvKGAg4pyFIEFzeW5jIHNhdmVkIG1lcmdlZCBpbWFnZTogJHtvdXRwdXR9YCksXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWFkSlNPTjxUPihwYXRoOiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhdGgsICd1dGYtOCcpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIl19
@@ -1,10 +1,11 @@
1
- import { readdirSync, writeFileSync } from 'node:fs';
1
+ import { readdirSync } from 'node:fs';
2
2
  import { tuiCombineSnapshots } from './combine-snapshots';
3
3
  const FAILED_SCREENSHOTS_PATH = process.env.FAILED_SCREENSHOTS_PATH ?? 'projects/demo-playwright/tests-results';
4
4
  const DIFF_IMAGE_POSTFIX = process.env.DIFF_IMAGE_POSTFIX ?? '-diff.png';
5
5
  const OUTPUT_DIFF_IMAGE_POSTFIX = process.env.OUTPUT_DIFF_IMAGE_POSTFIX ?? '.diff.png';
6
6
  const RETRY_COUNT = Number(process.env.RETRY_COUNT ?? 2);
7
7
  const REG_EXP = new RegExp(`retry${RETRY_COUNT}$|retry${RETRY_COUNT}/`);
8
+ // noinspection JSUnusedGlobalSymbols
8
9
  export async function tuiCombinePlaywrightFailedScreenshots(rootPath = FAILED_SCREENSHOTS_PATH) {
9
10
  const filesOrDirs = readdirSync(rootPath, {
10
11
  withFileTypes: true,
@@ -22,10 +23,9 @@ export async function tuiCombinePlaywrightFailedScreenshots(rootPath = FAILED_SC
22
23
  const diffs = imagesPaths.filter((path) => path.endsWith(DIFF_IMAGE_POSTFIX));
23
24
  for (const diffImage of diffs) {
24
25
  const diffImageName = diffImage.split('/').pop().replace(DIFF_IMAGE_POSTFIX, '');
25
- const path = `${rootPath}/${diffImageName}${OUTPUT_DIFF_IMAGE_POSTFIX}`;
26
- const buffer = await tuiCombineSnapshots(imagesPaths.filter((path) => path.startsWith(diffImage.replace(DIFF_IMAGE_POSTFIX, ''))));
27
- writeFileSync(path, buffer);
28
- console.info(`Write new diff: ${path}`);
26
+ const output = `${rootPath}/${diffImageName}${OUTPUT_DIFF_IMAGE_POSTFIX}`;
27
+ const inputs = imagesPaths.filter((path) => path.startsWith(diffImage.replace(DIFF_IMAGE_POSTFIX, '')));
28
+ tuiCombineSnapshots(inputs, output).then(() => console.info(` ✅ Async saved merged image: ${output}`));
29
29
  }
30
30
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS1wbGF5d3JpZ2h0LWZhaWxlZC1zY3JlZW5zaG90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Rlc3RpbmcvdmlzdWFsLXRlc3RpbmcvY29tYmluZS1wbGF5d3JpZ2h0LWZhaWxlZC1zY3JlZW5zaG90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFFLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVuRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RCxNQUFNLHVCQUF1QixHQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixJQUFJLHdDQUF3QyxDQUFDO0FBRXBGLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxXQUFXLENBQUM7QUFFekUsTUFBTSx5QkFBeUIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixJQUFJLFdBQVcsQ0FBQztBQUV2RixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUM7QUFFekQsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxXQUFXLFVBQVUsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUV4RSxNQUFNLENBQUMsS0FBSyxVQUFVLHFDQUFxQyxDQUN2RCxRQUFRLEdBQUcsdUJBQXVCO0lBRWxDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUU7UUFDdEMsYUFBYSxFQUFFLElBQUk7S0FDdEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ1osQ0FBQyxDQUFDLFdBQVcsRUFBRTtRQUNYLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDcEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUNuQyxDQUFDO0lBRUYsS0FBSyxNQUFNLEVBQUMsSUFBSSxFQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7UUFDN0QsTUFBTSxxQ0FBcUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3RFO0lBRUQsTUFBTSxXQUFXLEdBQWEsV0FBVztTQUNwQyxNQUFNLENBQ0gsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNGLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDVixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUNsRDtTQUNBLEdBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFFOUUsS0FBSyxNQUFNLFNBQVMsSUFBSSxLQUFLLEVBQUU7UUFDM0IsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEYsTUFBTSxJQUFJLEdBQUcsR0FBRyxRQUFRLElBQUksYUFBYSxHQUFHLHlCQUF5QixFQUFFLENBQUM7UUFDeEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxtQkFBbUIsQ0FDcEMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUM3RCxDQUNKLENBQUM7UUFFRixhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUM7S0FDM0M7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtyZWFkZGlyU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCB7dHVpQ29tYmluZVNuYXBzaG90c30gZnJvbSAnLi9jb21iaW5lLXNuYXBzaG90cyc7XG5cbmNvbnN0IEZBSUxFRF9TQ1JFRU5TSE9UU19QQVRIID1cbiAgICBwcm9jZXNzLmVudi5GQUlMRURfU0NSRUVOU0hPVFNfUEFUSCA/PyAncHJvamVjdHMvZGVtby1wbGF5d3JpZ2h0L3Rlc3RzLXJlc3VsdHMnO1xuXG5jb25zdCBESUZGX0lNQUdFX1BPU1RGSVggPSBwcm9jZXNzLmVudi5ESUZGX0lNQUdFX1BPU1RGSVggPz8gJy1kaWZmLnBuZyc7XG5cbmNvbnN0IE9VVFBVVF9ESUZGX0lNQUdFX1BPU1RGSVggPSBwcm9jZXNzLmVudi5PVVRQVVRfRElGRl9JTUFHRV9QT1NURklYID8/ICcuZGlmZi5wbmcnO1xuXG5jb25zdCBSRVRSWV9DT1VOVCA9IE51bWJlcihwcm9jZXNzLmVudi5SRVRSWV9DT1VOVCA/PyAyKTtcblxuY29uc3QgUkVHX0VYUCA9IG5ldyBSZWdFeHAoYHJldHJ5JHtSRVRSWV9DT1VOVH0kfHJldHJ5JHtSRVRSWV9DT1VOVH0vYCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0dWlDb21iaW5lUGxheXdyaWdodEZhaWxlZFNjcmVlbnNob3RzKFxuICAgIHJvb3RQYXRoID0gRkFJTEVEX1NDUkVFTlNIT1RTX1BBVEgsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlc09yRGlycyA9IHJlYWRkaXJTeW5jKHJvb3RQYXRoLCB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkuZmlsdGVyKCh4KSA9PlxuICAgICAgICB4LmlzRGlyZWN0b3J5KClcbiAgICAgICAgICAgID8gUkVHX0VYUC5leGVjKHgubmFtZSkgfHwgUkVHX0VYUC5leGVjKHgucGFyZW50UGF0aClcbiAgICAgICAgICAgIDogUkVHX0VYUC5leGVjKHgucGFyZW50UGF0aCksXG4gICAgKTtcblxuICAgIGZvciAoY29uc3Qge25hbWV9IG9mIGZpbGVzT3JEaXJzLmZpbHRlcigoeCkgPT4geC5pc0RpcmVjdG9yeSgpKSkge1xuICAgICAgICBhd2FpdCB0dWlDb21iaW5lUGxheXdyaWdodEZhaWxlZFNjcmVlbnNob3RzKGAke3Jvb3RQYXRofS8ke25hbWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VzUGF0aHM6IHN0cmluZ1tdID0gZmlsZXNPckRpcnNcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgICAgIHguaXNGaWxlKCkgJiZcbiAgICAgICAgICAgICAgICB4Lm5hbWUuZW5kc1dpdGgoJy5wbmcnKSAmJlxuICAgICAgICAgICAgICAgICF4Lm5hbWUuZW5kc1dpdGgoT1VUUFVUX0RJRkZfSU1BR0VfUE9TVEZJWCksXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoe25hbWV9KSA9PiBgJHtyb290UGF0aH0vJHtuYW1lfWApO1xuICAgIGNvbnN0IGRpZmZzID0gaW1hZ2VzUGF0aHMuZmlsdGVyKChwYXRoKSA9PiBwYXRoLmVuZHNXaXRoKERJRkZfSU1BR0VfUE9TVEZJWCkpO1xuXG4gICAgZm9yIChjb25zdCBkaWZmSW1hZ2Ugb2YgZGlmZnMpIHtcbiAgICAgICAgY29uc3QgZGlmZkltYWdlTmFtZSA9IGRpZmZJbWFnZS5zcGxpdCgnLycpLnBvcCgpIS5yZXBsYWNlKERJRkZfSU1BR0VfUE9TVEZJWCwgJycpO1xuICAgICAgICBjb25zdCBwYXRoID0gYCR7cm9vdFBhdGh9LyR7ZGlmZkltYWdlTmFtZX0ke09VVFBVVF9ESUZGX0lNQUdFX1BPU1RGSVh9YDtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdHVpQ29tYmluZVNuYXBzaG90cyhcbiAgICAgICAgICAgIGltYWdlc1BhdGhzLmZpbHRlcigocGF0aCkgPT5cbiAgICAgICAgICAgICAgICBwYXRoLnN0YXJ0c1dpdGgoZGlmZkltYWdlLnJlcGxhY2UoRElGRl9JTUFHRV9QT1NURklYLCAnJykpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgICAgICB3cml0ZUZpbGVTeW5jKHBhdGgsIGJ1ZmZlcik7XG5cbiAgICAgICAgY29uc29sZS5pbmZvKGBXcml0ZSBuZXcgZGlmZjogJHtwYXRofWApO1xuICAgIH1cbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS1wbGF5d3JpZ2h0LWZhaWxlZC1zY3JlZW5zaG90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Rlc3RpbmcvdmlzdWFsLXRlc3RpbmcvY29tYmluZS1wbGF5d3JpZ2h0LWZhaWxlZC1zY3JlZW5zaG90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXBDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE1BQU0sdUJBQXVCLEdBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksd0NBQXdDLENBQUM7QUFDcEYsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLFdBQVcsQ0FBQztBQUN6RSxNQUFNLHlCQUF5QixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLElBQUksV0FBVyxDQUFDO0FBQ3ZGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLFdBQVcsVUFBVSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBRXhFLHFDQUFxQztBQUNyQyxNQUFNLENBQUMsS0FBSyxVQUFVLHFDQUFxQyxDQUN2RCxRQUFRLEdBQUcsdUJBQXVCO0lBRWxDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUU7UUFDdEMsYUFBYSxFQUFFLElBQUk7S0FDdEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ1osQ0FBQyxDQUFDLFdBQVcsRUFBRTtRQUNYLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDcEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUNuQyxDQUFDO0lBRUYsS0FBSyxNQUFNLEVBQUMsSUFBSSxFQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7UUFDN0QsTUFBTSxxQ0FBcUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3RFO0lBRUQsTUFBTSxXQUFXLEdBQWEsV0FBVztTQUNwQyxNQUFNLENBQ0gsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNGLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDVixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUNsRDtTQUNBLEdBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFFOUUsS0FBSyxNQUFNLFNBQVMsSUFBSSxLQUFLLEVBQUU7UUFDM0IsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEYsTUFBTSxNQUFNLEdBQUcsR0FBRyxRQUFRLElBQUksYUFBYSxHQUFHLHlCQUF5QixFQUFFLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUM3RCxDQUFDO1FBRUYsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsTUFBTSxFQUFFLENBQUMsQ0FDekQsQ0FBQztLQUNMO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cmVhZGRpclN5bmN9IGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQge3R1aUNvbWJpbmVTbmFwc2hvdHN9IGZyb20gJy4vY29tYmluZS1zbmFwc2hvdHMnO1xuXG5jb25zdCBGQUlMRURfU0NSRUVOU0hPVFNfUEFUSCA9XG4gICAgcHJvY2Vzcy5lbnYuRkFJTEVEX1NDUkVFTlNIT1RTX1BBVEggPz8gJ3Byb2plY3RzL2RlbW8tcGxheXdyaWdodC90ZXN0cy1yZXN1bHRzJztcbmNvbnN0IERJRkZfSU1BR0VfUE9TVEZJWCA9IHByb2Nlc3MuZW52LkRJRkZfSU1BR0VfUE9TVEZJWCA/PyAnLWRpZmYucG5nJztcbmNvbnN0IE9VVFBVVF9ESUZGX0lNQUdFX1BPU1RGSVggPSBwcm9jZXNzLmVudi5PVVRQVVRfRElGRl9JTUFHRV9QT1NURklYID8/ICcuZGlmZi5wbmcnO1xuY29uc3QgUkVUUllfQ09VTlQgPSBOdW1iZXIocHJvY2Vzcy5lbnYuUkVUUllfQ09VTlQgPz8gMik7XG5jb25zdCBSRUdfRVhQID0gbmV3IFJlZ0V4cChgcmV0cnkke1JFVFJZX0NPVU5UfSR8cmV0cnkke1JFVFJZX0NPVU5UfS9gKTtcblxuLy8gbm9pbnNwZWN0aW9uIEpTVW51c2VkR2xvYmFsU3ltYm9sc1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHR1aUNvbWJpbmVQbGF5d3JpZ2h0RmFpbGVkU2NyZWVuc2hvdHMoXG4gICAgcm9vdFBhdGggPSBGQUlMRURfU0NSRUVOU0hPVFNfUEFUSCxcbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVzT3JEaXJzID0gcmVhZGRpclN5bmMocm9vdFBhdGgsIHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KS5maWx0ZXIoKHgpID0+XG4gICAgICAgIHguaXNEaXJlY3RvcnkoKVxuICAgICAgICAgICAgPyBSRUdfRVhQLmV4ZWMoeC5uYW1lKSB8fCBSRUdfRVhQLmV4ZWMoeC5wYXJlbnRQYXRoKVxuICAgICAgICAgICAgOiBSRUdfRVhQLmV4ZWMoeC5wYXJlbnRQYXRoKSxcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCB7bmFtZX0gb2YgZmlsZXNPckRpcnMuZmlsdGVyKCh4KSA9PiB4LmlzRGlyZWN0b3J5KCkpKSB7XG4gICAgICAgIGF3YWl0IHR1aUNvbWJpbmVQbGF5d3JpZ2h0RmFpbGVkU2NyZWVuc2hvdHMoYCR7cm9vdFBhdGh9LyR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZXNQYXRoczogc3RyaW5nW10gPSBmaWxlc09yRGlyc1xuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICAgICAgeC5pc0ZpbGUoKSAmJlxuICAgICAgICAgICAgICAgIHgubmFtZS5lbmRzV2l0aCgnLnBuZycpICYmXG4gICAgICAgICAgICAgICAgIXgubmFtZS5lbmRzV2l0aChPVVRQVVRfRElGRl9JTUFHRV9QT1NURklYKSxcbiAgICAgICAgKVxuICAgICAgICAubWFwKCh7bmFtZX0pID0+IGAke3Jvb3RQYXRofS8ke25hbWV9YCk7XG4gICAgY29uc3QgZGlmZnMgPSBpbWFnZXNQYXRocy5maWx0ZXIoKHBhdGgpID0+IHBhdGguZW5kc1dpdGgoRElGRl9JTUFHRV9QT1NURklYKSk7XG5cbiAgICBmb3IgKGNvbnN0IGRpZmZJbWFnZSBvZiBkaWZmcykge1xuICAgICAgICBjb25zdCBkaWZmSW1hZ2VOYW1lID0gZGlmZkltYWdlLnNwbGl0KCcvJykucG9wKCkhLnJlcGxhY2UoRElGRl9JTUFHRV9QT1NURklYLCAnJyk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGAke3Jvb3RQYXRofS8ke2RpZmZJbWFnZU5hbWV9JHtPVVRQVVRfRElGRl9JTUFHRV9QT1NURklYfWA7XG4gICAgICAgIGNvbnN0IGlucHV0cyA9IGltYWdlc1BhdGhzLmZpbHRlcigocGF0aCkgPT5cbiAgICAgICAgICAgIHBhdGguc3RhcnRzV2l0aChkaWZmSW1hZ2UucmVwbGFjZShESUZGX0lNQUdFX1BPU1RGSVgsICcnKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgdHVpQ29tYmluZVNuYXBzaG90cyhpbnB1dHMsIG91dHB1dCkudGhlbigoKSA9PlxuICAgICAgICAgICAgY29uc29sZS5pbmZvKGAg4pyFIEFzeW5jIHNhdmVkIG1lcmdlZCBpbWFnZTogJHtvdXRwdXR9YCksXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
@@ -1,21 +1,24 @@
1
- // @ts-nocheck It is used in CI only!
2
- /**
3
- * Canvas has difficult installation guide for ARM CPU, including an Apple M1 or M2
4
- * (not friendly for our external contributors).
5
- * https://github.com/Automattic/node-canvas/issues/1511
6
- */
7
- import { createCanvas, loadImage } from 'canvas';
8
- export async function tuiCombineSnapshots(imagesPaths) {
9
- const images = await Promise.all(imagesPaths.map(loadImage));
10
- const totalWidth = images.reduce((acc, { width }) => acc + width, 0);
11
- const maxHeight = Math.max(...images.map(({ height }) => height));
12
- const canvas = createCanvas(totalWidth, maxHeight);
13
- const ctx = canvas.getContext('2d');
14
- let prevWidth = 0;
15
- images.forEach((image) => {
16
- ctx.drawImage(image, prevWidth, 0);
17
- prevWidth += image.width;
1
+ import sharp from 'sharp';
2
+ // noinspection JSUnusedGlobalSymbols
3
+ export async function tuiCombineSnapshots(inputs, output) {
4
+ const data = await Promise.all(inputs.map(async (img) => sharp(img).metadata()));
5
+ const totalWidth = data.reduce((sum, metadata) => sum + (metadata.width || 0), 0);
6
+ const maxHeight = Math.max(...data.map((metadata) => metadata.height || 0));
7
+ let currentX = 0;
8
+ const composites = inputs.map((img, i) => {
9
+ const left = currentX;
10
+ currentX += data[i]?.width ?? 0;
11
+ return { input: img, top: 0, left };
18
12
  });
19
- return canvas.toBuffer('image/png');
13
+ await sharp({
14
+ create: {
15
+ width: totalWidth,
16
+ height: maxHeight,
17
+ channels: 4,
18
+ background: { r: 255, g: 255, b: 255, alpha: 1 },
19
+ },
20
+ })
21
+ .composite(composites)
22
+ .toFile(output);
20
23
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS1zbmFwc2hvdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90ZXN0aW5nL3Zpc3VhbC10ZXN0aW5nL2NvbWJpbmUtc25hcHNob3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQzs7OztHQUlHO0FBQ0gsT0FBTyxFQUFDLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFL0MsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FDckMsV0FBcUI7SUFFckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM3RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUMsS0FBSyxFQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0UsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVwQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3JCLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLW5vY2hlY2sgSXQgaXMgdXNlZCBpbiBDSSBvbmx5IVxuLyoqXG4gKiBDYW52YXMgaGFzIGRpZmZpY3VsdCBpbnN0YWxsYXRpb24gZ3VpZGUgZm9yIEFSTSBDUFUsIGluY2x1ZGluZyBhbiBBcHBsZSBNMSBvciBNMlxuICogKG5vdCBmcmllbmRseSBmb3Igb3VyIGV4dGVybmFsIGNvbnRyaWJ1dG9ycykuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vQXV0b21hdHRpYy9ub2RlLWNhbnZhcy9pc3N1ZXMvMTUxMVxuICovXG5pbXBvcnQge2NyZWF0ZUNhbnZhcywgbG9hZEltYWdlfSBmcm9tICdjYW52YXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHVpQ29tYmluZVNuYXBzaG90cyhcbiAgICBpbWFnZXNQYXRoczogc3RyaW5nW10sXG4pOiBQcm9taXNlPE5vZGVKUy5BcnJheUJ1ZmZlclZpZXc+IHtcbiAgICBjb25zdCBpbWFnZXMgPSBhd2FpdCBQcm9taXNlLmFsbChpbWFnZXNQYXRocy5tYXAobG9hZEltYWdlKSk7XG4gICAgY29uc3QgdG90YWxXaWR0aCA9IGltYWdlcy5yZWR1Y2UoKGFjYzogbnVtYmVyLCB7d2lkdGh9KSA9PiBhY2MgKyB3aWR0aCwgMCk7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gTWF0aC5tYXgoLi4uaW1hZ2VzLm1hcCgoe2hlaWdodH0pID0+IGhlaWdodCkpO1xuICAgIGNvbnN0IGNhbnZhcyA9IGNyZWF0ZUNhbnZhcyh0b3RhbFdpZHRoLCBtYXhIZWlnaHQpO1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgbGV0IHByZXZXaWR0aCA9IDA7XG5cbiAgICBpbWFnZXMuZm9yRWFjaCgoaW1hZ2UpID0+IHtcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgcHJldldpZHRoLCAwKTtcbiAgICAgICAgcHJldldpZHRoICs9IGltYWdlLndpZHRoO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhbnZhcy50b0J1ZmZlcignaW1hZ2UvcG5nJyk7XG59XG4iXX0=
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS1zbmFwc2hvdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90ZXN0aW5nL3Zpc3VhbC10ZXN0aW5nL2NvbWJpbmUtc25hcHNob3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FDckMsTUFBZ0IsRUFDaEIsTUFBYztJQUVkLE1BQU0sSUFBSSxHQUE4QixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3JELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQ25ELENBQUM7SUFFRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTVFLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztJQUVqQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUV0QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7UUFFaEMsT0FBTyxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sS0FBSyxDQUFDO1FBQ1IsTUFBTSxFQUFFO1lBQ0osS0FBSyxFQUFFLFVBQVU7WUFDakIsTUFBTSxFQUFFLFNBQVM7WUFDakIsUUFBUSxFQUFFLENBQUM7WUFDWCxVQUFVLEVBQUUsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDO1NBQ2pEO0tBQ0osQ0FBQztTQUNHLFNBQVMsQ0FBQyxVQUFVLENBQUM7U0FDckIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnO1xuXG4vLyBub2luc3BlY3Rpb24gSlNVbnVzZWRHbG9iYWxTeW1ib2xzXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHVpQ29tYmluZVNuYXBzaG90cyhcbiAgICBpbnB1dHM6IHN0cmluZ1tdLFxuICAgIG91dHB1dDogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGF0YTogcmVhZG9ubHkgc2hhcnAuTWV0YWRhdGFbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBpbnB1dHMubWFwKGFzeW5jIChpbWcpID0+IHNoYXJwKGltZykubWV0YWRhdGEoKSksXG4gICAgKTtcblxuICAgIGNvbnN0IHRvdGFsV2lkdGggPSBkYXRhLnJlZHVjZSgoc3VtLCBtZXRhZGF0YSkgPT4gc3VtICsgKG1ldGFkYXRhLndpZHRoIHx8IDApLCAwKTtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBNYXRoLm1heCguLi5kYXRhLm1hcCgobWV0YWRhdGEpID0+IG1ldGFkYXRhLmhlaWdodCB8fCAwKSk7XG5cbiAgICBsZXQgY3VycmVudFggPSAwO1xuXG4gICAgY29uc3QgY29tcG9zaXRlcyA9IGlucHV0cy5tYXAoKGltZywgaSkgPT4ge1xuICAgICAgICBjb25zdCBsZWZ0ID0gY3VycmVudFg7XG5cbiAgICAgICAgY3VycmVudFggKz0gZGF0YVtpXT8ud2lkdGggPz8gMDtcblxuICAgICAgICByZXR1cm4ge2lucHV0OiBpbWcsIHRvcDogMCwgbGVmdH07XG4gICAgfSk7XG5cbiAgICBhd2FpdCBzaGFycCh7XG4gICAgICAgIGNyZWF0ZToge1xuICAgICAgICAgICAgd2lkdGg6IHRvdGFsV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IG1heEhlaWdodCxcbiAgICAgICAgICAgIGNoYW5uZWxzOiA0LFxuICAgICAgICAgICAgYmFja2dyb3VuZDoge3I6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAxfSxcbiAgICAgICAgfSxcbiAgICB9KVxuICAgICAgICAuY29tcG9zaXRlKGNvbXBvc2l0ZXMpXG4gICAgICAgIC50b0ZpbGUob3V0cHV0KTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-testing-mocks.mjs","sources":["../../../projects/testing/mocks/event.ts","../../../projects/testing/mocks/switch-ng-dev-mode.ts","../../../projects/testing/mocks/taiga-ui-testing-mocks.ts"],"sourcesContent":["export class TuiMockEvent<T> extends Event {\n constructor(type: string, options: CustomEventInit<T> & Record<string, any> = {}) {\n super(type, options);\n\n const event = new Event(type);\n\n for (const key in options) {\n if (options.hasOwnProperty(key)) {\n Object.defineProperty(event, key, {value: options[key]});\n }\n }\n\n // @ts-ignore\n return event;\n }\n}\n","declare const global: Record<any, any> & Window;\n\nexport function tuiSwitchNgDevMode(enable: boolean): void {\n if (global) {\n global.ngDevMode = enable;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAM,MAAO,YAAgB,SAAQ,KAAK,CAAA;IACtC,WAAY,CAAA,IAAY,EAAE,OAAA,GAAoD,EAAE,EAAA;AAC5E,QAAA,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AAE9B,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACvB,YAAA,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,EAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;AAC5D,aAAA;AACJ,SAAA;;AAGD,QAAA,OAAO,KAAK,CAAC;KAChB;AACJ;;ACbK,SAAU,kBAAkB,CAAC,MAAe,EAAA;AAC9C,IAAA,IAAI,MAAM,EAAE;AACR,QAAA,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;AAC7B,KAAA;AACL;;ACNA;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-testing-mocks.mjs","sources":["../../../projects/testing/mocks/event.ts","../../../projects/testing/mocks/switch-ng-dev-mode.ts","../../../projects/testing/mocks/taiga-ui-testing-mocks.ts"],"sourcesContent":["export class TuiMockEvent<T> extends Event {\n constructor(type: string, options: CustomEventInit<T> & Record<string, any> = {}) {\n super(type, options);\n\n const event = new Event(type);\n\n for (const key in options) {\n if (options.hasOwnProperty(key)) {\n Object.defineProperty(event, key, {value: options[key]});\n }\n }\n\n // @ts-ignore\n return event;\n }\n}\n","declare const global: (Record<any, any> & Window) | undefined;\n\nexport function tuiSwitchNgDevMode(enable: boolean): void {\n if (global) {\n global.ngDevMode = enable;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAM,MAAO,YAAgB,SAAQ,KAAK,CAAA;IACtC,WAAY,CAAA,IAAY,EAAE,OAAA,GAAoD,EAAE,EAAA;AAC5E,QAAA,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AAE9B,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACvB,YAAA,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,EAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;AAC5D,aAAA;AACJ,SAAA;;AAGD,QAAA,OAAO,KAAK,CAAC;KAChB;AACJ;;ACbK,SAAU,kBAAkB,CAAC,MAAe,EAAA;AAC9C,IAAA,IAAI,MAAM,EAAE;AACR,QAAA,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;AAC7B,KAAA;AACL;;ACNA;;AAEG;;;;"}
@@ -1,29 +1,33 @@
1
- import { writeFileSync, readFileSync, readdirSync } from 'node:fs';
2
- import { loadImage, createCanvas } from 'canvas';
1
+ import { readFileSync, readdirSync } from 'node:fs';
2
+ import sharp from 'sharp';
3
3
 
4
- // @ts-nocheck It is used in CI only!
5
- /**
6
- * Canvas has difficult installation guide for ARM CPU, including an Apple M1 or M2
7
- * (not friendly for our external contributors).
8
- * https://github.com/Automattic/node-canvas/issues/1511
9
- */
10
- async function tuiCombineSnapshots(imagesPaths) {
11
- const images = await Promise.all(imagesPaths.map(loadImage));
12
- const totalWidth = images.reduce((acc, { width }) => acc + width, 0);
13
- const maxHeight = Math.max(...images.map(({ height }) => height));
14
- const canvas = createCanvas(totalWidth, maxHeight);
15
- const ctx = canvas.getContext('2d');
16
- let prevWidth = 0;
17
- images.forEach((image) => {
18
- ctx.drawImage(image, prevWidth, 0);
19
- prevWidth += image.width;
4
+ // noinspection JSUnusedGlobalSymbols
5
+ async function tuiCombineSnapshots(inputs, output) {
6
+ const data = await Promise.all(inputs.map(async (img) => sharp(img).metadata()));
7
+ const totalWidth = data.reduce((sum, metadata) => sum + (metadata.width || 0), 0);
8
+ const maxHeight = Math.max(...data.map((metadata) => metadata.height || 0));
9
+ let currentX = 0;
10
+ const composites = inputs.map((img, i) => {
11
+ const left = currentX;
12
+ currentX += data[i]?.width ?? 0;
13
+ return { input: img, top: 0, left };
20
14
  });
21
- return canvas.toBuffer('image/png');
15
+ await sharp({
16
+ create: {
17
+ width: totalWidth,
18
+ height: maxHeight,
19
+ channels: 4,
20
+ background: { r: 255, g: 255, b: 255, alpha: 1 },
21
+ },
22
+ })
23
+ .composite(composites)
24
+ .toFile(output);
22
25
  }
23
26
 
24
27
  const ROOT_PATH = process.env.ROOT_PATH ?? 'projects/demo-cypress';
25
28
  const TEST_RESULTS_PATH = process.env.TEST_RESULTS_PATH ?? `${ROOT_PATH}/tests-results`;
26
- async function tuiCombineCypressFailedScreenshots() {
29
+ // noinspection JSUnusedGlobalSymbols
30
+ function tuiCombineCypressFailedScreenshots() {
27
31
  const reportSummary = readJSON(`${TEST_RESULTS_PATH}/report-summary.json`);
28
32
  if (!reportSummary) {
29
33
  return;
@@ -33,8 +37,9 @@ async function tuiCombineCypressFailedScreenshots() {
33
37
  .flat()
34
38
  .filter((x) => x.status === 'fail' && x.diffPath);
35
39
  for (const { baselinePath, diffPath, comparisonPath, name } of failedTestSnapshots) {
36
- const buffer = await tuiCombineSnapshots([baselinePath, diffPath, comparisonPath].map((x) => `${ROOT_PATH}/${x}`));
37
- writeFileSync(`${TEST_RESULTS_PATH}/${name}.diff.png`, buffer);
40
+ const output = `${TEST_RESULTS_PATH}/${name}.diff.png`;
41
+ const inputs = [baselinePath, diffPath, comparisonPath].map((x) => `${ROOT_PATH}/${x}`);
42
+ tuiCombineSnapshots(inputs, output).then(() => console.info(` ✅ Async saved merged image: ${output}`));
38
43
  }
39
44
  }
40
45
  function readJSON(path) {
@@ -51,6 +56,7 @@ const DIFF_IMAGE_POSTFIX = process.env.DIFF_IMAGE_POSTFIX ?? '-diff.png';
51
56
  const OUTPUT_DIFF_IMAGE_POSTFIX = process.env.OUTPUT_DIFF_IMAGE_POSTFIX ?? '.diff.png';
52
57
  const RETRY_COUNT = Number(process.env.RETRY_COUNT ?? 2);
53
58
  const REG_EXP = new RegExp(`retry${RETRY_COUNT}$|retry${RETRY_COUNT}/`);
59
+ // noinspection JSUnusedGlobalSymbols
54
60
  async function tuiCombinePlaywrightFailedScreenshots(rootPath = FAILED_SCREENSHOTS_PATH) {
55
61
  const filesOrDirs = readdirSync(rootPath, {
56
62
  withFileTypes: true,
@@ -68,10 +74,9 @@ async function tuiCombinePlaywrightFailedScreenshots(rootPath = FAILED_SCREENSHO
68
74
  const diffs = imagesPaths.filter((path) => path.endsWith(DIFF_IMAGE_POSTFIX));
69
75
  for (const diffImage of diffs) {
70
76
  const diffImageName = diffImage.split('/').pop().replace(DIFF_IMAGE_POSTFIX, '');
71
- const path = `${rootPath}/${diffImageName}${OUTPUT_DIFF_IMAGE_POSTFIX}`;
72
- const buffer = await tuiCombineSnapshots(imagesPaths.filter((path) => path.startsWith(diffImage.replace(DIFF_IMAGE_POSTFIX, ''))));
73
- writeFileSync(path, buffer);
74
- console.info(`Write new diff: ${path}`);
77
+ const output = `${rootPath}/${diffImageName}${OUTPUT_DIFF_IMAGE_POSTFIX}`;
78
+ const inputs = imagesPaths.filter((path) => path.startsWith(diffImage.replace(DIFF_IMAGE_POSTFIX, '')));
79
+ tuiCombineSnapshots(inputs, output).then(() => console.info(` ✅ Async saved merged image: ${output}`));
75
80
  }
76
81
  }
77
82
 
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-testing-visual-testing.mjs","sources":["../../../projects/testing/visual-testing/combine-snapshots.ts","../../../projects/testing/visual-testing/combine-cypress-failed-screenshots.ts","../../../projects/testing/visual-testing/combine-playwright-failed-screenshots.ts","../../../projects/testing/visual-testing/taiga-ui-testing-visual-testing.ts"],"sourcesContent":["// @ts-nocheck It is used in CI only!\n/**\n * Canvas has difficult installation guide for ARM CPU, including an Apple M1 or M2\n * (not friendly for our external contributors).\n * https://github.com/Automattic/node-canvas/issues/1511\n */\nimport {createCanvas, loadImage} from 'canvas';\n\nexport async function tuiCombineSnapshots(\n imagesPaths: string[],\n): Promise<NodeJS.ArrayBufferView> {\n const images = await Promise.all(imagesPaths.map(loadImage));\n const totalWidth = images.reduce((acc: number, {width}) => acc + width, 0);\n const maxHeight = Math.max(...images.map(({height}) => height));\n const canvas = createCanvas(totalWidth, maxHeight);\n const ctx = canvas.getContext('2d');\n\n let prevWidth = 0;\n\n images.forEach((image) => {\n ctx.drawImage(image, prevWidth, 0);\n prevWidth += image.width;\n });\n\n return canvas.toBuffer('image/png');\n}\n","import {readFileSync, writeFileSync} from 'node:fs';\n\nimport {tuiCombineSnapshots} from './combine-snapshots';\n\nconst ROOT_PATH = process.env.ROOT_PATH ?? 'projects/demo-cypress';\nconst TEST_RESULTS_PATH = process.env.TEST_RESULTS_PATH ?? `${ROOT_PATH}/tests-results`;\n\ninterface TestResult {\n status: 'fail' | 'pass';\n name: string;\n baselinePath: string;\n diffPath: string;\n comparisonPath: string;\n}\n\ninterface Report {\n suites: Array<{tests: TestResult[]}>;\n}\n\nexport async function tuiCombineCypressFailedScreenshots(): Promise<void> {\n const reportSummary = readJSON<Report>(`${TEST_RESULTS_PATH}/report-summary.json`);\n\n if (!reportSummary) {\n return;\n }\n\n const failedTestSnapshots = reportSummary.suites\n .map((x) => x.tests)\n .flat()\n .filter((x) => x.status === 'fail' && x.diffPath);\n\n for (const {baselinePath, diffPath, comparisonPath, name} of failedTestSnapshots) {\n const buffer = await tuiCombineSnapshots(\n [baselinePath, diffPath, comparisonPath].map((x) => `${ROOT_PATH}/${x}`),\n );\n\n writeFileSync(`${TEST_RESULTS_PATH}/${name}.diff.png`, buffer);\n }\n}\n\nfunction readJSON<T>(path: string): T | null {\n try {\n return JSON.parse(readFileSync(path, 'utf-8'));\n } catch {\n return null;\n }\n}\n","import {readdirSync, writeFileSync} from 'node:fs';\n\nimport {tuiCombineSnapshots} from './combine-snapshots';\n\nconst FAILED_SCREENSHOTS_PATH =\n process.env.FAILED_SCREENSHOTS_PATH ?? 'projects/demo-playwright/tests-results';\n\nconst DIFF_IMAGE_POSTFIX = process.env.DIFF_IMAGE_POSTFIX ?? '-diff.png';\n\nconst OUTPUT_DIFF_IMAGE_POSTFIX = process.env.OUTPUT_DIFF_IMAGE_POSTFIX ?? '.diff.png';\n\nconst RETRY_COUNT = Number(process.env.RETRY_COUNT ?? 2);\n\nconst REG_EXP = new RegExp(`retry${RETRY_COUNT}$|retry${RETRY_COUNT}/`);\n\nexport async function tuiCombinePlaywrightFailedScreenshots(\n rootPath = FAILED_SCREENSHOTS_PATH,\n): Promise<void> {\n const filesOrDirs = readdirSync(rootPath, {\n withFileTypes: true,\n }).filter((x) =>\n x.isDirectory()\n ? REG_EXP.exec(x.name) || REG_EXP.exec(x.parentPath)\n : REG_EXP.exec(x.parentPath),\n );\n\n for (const {name} of filesOrDirs.filter((x) => x.isDirectory())) {\n await tuiCombinePlaywrightFailedScreenshots(`${rootPath}/${name}`);\n }\n\n const imagesPaths: string[] = filesOrDirs\n .filter(\n (x) =>\n x.isFile() &&\n x.name.endsWith('.png') &&\n !x.name.endsWith(OUTPUT_DIFF_IMAGE_POSTFIX),\n )\n .map(({name}) => `${rootPath}/${name}`);\n const diffs = imagesPaths.filter((path) => path.endsWith(DIFF_IMAGE_POSTFIX));\n\n for (const diffImage of diffs) {\n const diffImageName = diffImage.split('/').pop()!.replace(DIFF_IMAGE_POSTFIX, '');\n const path = `${rootPath}/${diffImageName}${OUTPUT_DIFF_IMAGE_POSTFIX}`;\n const buffer = await tuiCombineSnapshots(\n imagesPaths.filter((path) =>\n path.startsWith(diffImage.replace(DIFF_IMAGE_POSTFIX, '')),\n ),\n );\n\n writeFileSync(path, buffer);\n\n console.info(`Write new diff: ${path}`);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-testing-visual-testing.mjs","sources":["../../../projects/testing/visual-testing/combine-snapshots.ts","../../../projects/testing/visual-testing/combine-cypress-failed-screenshots.ts","../../../projects/testing/visual-testing/combine-playwright-failed-screenshots.ts","../../../projects/testing/visual-testing/taiga-ui-testing-visual-testing.ts"],"sourcesContent":["import sharp from 'sharp';\n\n// noinspection JSUnusedGlobalSymbols\nexport async function tuiCombineSnapshots(\n inputs: string[],\n output: string,\n): Promise<void> {\n const data: readonly sharp.Metadata[] = await Promise.all(\n inputs.map(async (img) => sharp(img).metadata()),\n );\n\n const totalWidth = data.reduce((sum, metadata) => sum + (metadata.width || 0), 0);\n const maxHeight = Math.max(...data.map((metadata) => metadata.height || 0));\n\n let currentX = 0;\n\n const composites = inputs.map((img, i) => {\n const left = currentX;\n\n currentX += data[i]?.width ?? 0;\n\n return {input: img, top: 0, left};\n });\n\n await sharp({\n create: {\n width: totalWidth,\n height: maxHeight,\n channels: 4,\n background: {r: 255, g: 255, b: 255, alpha: 1},\n },\n })\n .composite(composites)\n .toFile(output);\n}\n","import {readFileSync} from 'node:fs';\n\nimport {tuiCombineSnapshots} from './combine-snapshots';\n\nconst ROOT_PATH = process.env.ROOT_PATH ?? 'projects/demo-cypress';\nconst TEST_RESULTS_PATH = process.env.TEST_RESULTS_PATH ?? `${ROOT_PATH}/tests-results`;\n\ninterface TestResult {\n status: 'fail' | 'pass';\n name: string;\n baselinePath: string;\n diffPath: string;\n comparisonPath: string;\n}\n\ninterface Report {\n suites: Array<{tests: TestResult[]}>;\n}\n\n// noinspection JSUnusedGlobalSymbols\nexport function tuiCombineCypressFailedScreenshots(): void {\n const reportSummary = readJSON<Report>(`${TEST_RESULTS_PATH}/report-summary.json`);\n\n if (!reportSummary) {\n return;\n }\n\n const failedTestSnapshots = reportSummary.suites\n .map((x) => x.tests)\n .flat()\n .filter((x) => x.status === 'fail' && x.diffPath);\n\n for (const {baselinePath, diffPath, comparisonPath, name} of failedTestSnapshots) {\n const output = `${TEST_RESULTS_PATH}/${name}.diff.png`;\n const inputs = [baselinePath, diffPath, comparisonPath].map(\n (x) => `${ROOT_PATH}/${x}`,\n );\n\n tuiCombineSnapshots(inputs, output).then(() =>\n console.info(` ✅ Async saved merged image: ${output}`),\n );\n }\n}\n\nfunction readJSON<T>(path: string): T | null {\n try {\n return JSON.parse(readFileSync(path, 'utf-8'));\n } catch {\n return null;\n }\n}\n","import {readdirSync} from 'node:fs';\n\nimport {tuiCombineSnapshots} from './combine-snapshots';\n\nconst FAILED_SCREENSHOTS_PATH =\n process.env.FAILED_SCREENSHOTS_PATH ?? 'projects/demo-playwright/tests-results';\nconst DIFF_IMAGE_POSTFIX = process.env.DIFF_IMAGE_POSTFIX ?? '-diff.png';\nconst OUTPUT_DIFF_IMAGE_POSTFIX = process.env.OUTPUT_DIFF_IMAGE_POSTFIX ?? '.diff.png';\nconst RETRY_COUNT = Number(process.env.RETRY_COUNT ?? 2);\nconst REG_EXP = new RegExp(`retry${RETRY_COUNT}$|retry${RETRY_COUNT}/`);\n\n// noinspection JSUnusedGlobalSymbols\nexport async function tuiCombinePlaywrightFailedScreenshots(\n rootPath = FAILED_SCREENSHOTS_PATH,\n): Promise<void> {\n const filesOrDirs = readdirSync(rootPath, {\n withFileTypes: true,\n }).filter((x) =>\n x.isDirectory()\n ? REG_EXP.exec(x.name) || REG_EXP.exec(x.parentPath)\n : REG_EXP.exec(x.parentPath),\n );\n\n for (const {name} of filesOrDirs.filter((x) => x.isDirectory())) {\n await tuiCombinePlaywrightFailedScreenshots(`${rootPath}/${name}`);\n }\n\n const imagesPaths: string[] = filesOrDirs\n .filter(\n (x) =>\n x.isFile() &&\n x.name.endsWith('.png') &&\n !x.name.endsWith(OUTPUT_DIFF_IMAGE_POSTFIX),\n )\n .map(({name}) => `${rootPath}/${name}`);\n const diffs = imagesPaths.filter((path) => path.endsWith(DIFF_IMAGE_POSTFIX));\n\n for (const diffImage of diffs) {\n const diffImageName = diffImage.split('/').pop()!.replace(DIFF_IMAGE_POSTFIX, '');\n const output = `${rootPath}/${diffImageName}${OUTPUT_DIFF_IMAGE_POSTFIX}`;\n const inputs = imagesPaths.filter((path) =>\n path.startsWith(diffImage.replace(DIFF_IMAGE_POSTFIX, '')),\n );\n\n tuiCombineSnapshots(inputs, output).then(() =>\n console.info(` Async saved merged image: ${output}`),\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@taiga-ui/testing",
3
- "version": "4.50.0-canary.f66e0da",
3
+ "version": "4.51.0-canary.2b42d75",
4
4
  "description": "Utils functions for testing Taiga UI packages",
5
5
  "peerDependencies": {
6
- "@taiga-ui/cdk": "^4.50.0",
7
- "resize-observer-polyfill": ">=1.5.1"
6
+ "@taiga-ui/cdk": "^4.51.0",
7
+ "resize-observer-polyfill": ">=1.5.1",
8
+ "sharp": "^0.34.3"
8
9
  },
9
10
  "module": "fesm2022/taiga-ui-testing.mjs",
10
11
  "typings": "index.d.ts",
@@ -1 +1 @@
1
- export declare function tuiCombineCypressFailedScreenshots(): Promise<void>;
1
+ export declare function tuiCombineCypressFailedScreenshots(): void;
@@ -1,2 +1 @@
1
- /// <reference types="node" />
2
- export declare function tuiCombineSnapshots(imagesPaths: string[]): Promise<NodeJS.ArrayBufferView>;
1
+ export declare function tuiCombineSnapshots(inputs: string[], output: string): Promise<void>;