* Remove file-type dependency via jimp (#137214) * Removed file-type from package.json deps. Updated jimp to 0.16.1. Updated light & dark dashboard baseline screenshots to resolve failure due to resize degradation. * Replaced jimp with sharp and pixelmatch. Eliminates several deps, including file-type. Eliminates quality degradation from image resizing. * Fixed copy paste error, which lead to pass positives and errors. * Integrated updateBaselines flag into dashboards report testing. Fixed sharp resize to fit and not truncate the original image. * Removed accidental '.only' * Reverted area chart baseline. * Removed explicit declaration of sharp from package.json. * Adjusted dashboard screenshot size in attempt to eliminate layout scaling issues in CI testing. * Reverted dashboard screenshot size. Lowered tolerance in dashboard PNG reporting tests to force failure and collect CI screenshots. * Changed session save location for dashboard report images for better CI reporting. * Fixed small dashboard baseline screenshot with correct aspect ratio. * Updated 2 basline screenshots from CI. Lowered PNG match tolerance for dashboard screenshots to 1% for investigation of remaining screens. * Update of dashboard controls light mode baseline. Change of forced container width size in large dashboard layout test. * Updated dashboard controls dark mode baseline screenshot. Adjusted forced container width in large dashboard layout test for troubleshooting. * Lowering tolerance of PNG compare tests from 9% to 1% for troubleshooting. Replaced references to dedundant image service with existing, more adopted reporting service. Ideally, the PNG functions of the reporting service would be merged with the screenshot service as an image service. * Reverting tolerance of PNG compares to 0.09. Will create GH issues for specific teams to investigate. * Implemented PngService to provide an accessible single reference to PNG compare testing. Removed redundant implementations and references. * Updated service reference and call to png compare function left out of last commit. * Updated another missed PNG reference. * Removed superfluous parameter. * Update after bootstrap * Updated area chart baseline to match new render with panel filters. * Reverted limits in dashboard snapshot tests to original values. * Merge and rebuild. Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> * Update to dashboard screen test area chart baseline. Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
1
.gitignore
vendored
|
@ -39,6 +39,7 @@ __tmp__
|
|||
/x-pack/test/*/screenshots/failure
|
||||
/x-pack/test/*/screenshots/session
|
||||
/x-pack/test/*/screenshots/visual_regression_gallery.html
|
||||
/x-pack/test/functional/apps/*/*/reporting/reports/failure
|
||||
|
||||
/html_docs
|
||||
.eslintcache
|
||||
|
|
|
@ -376,7 +376,6 @@
|
|||
"fast-deep-equal": "^3.1.1",
|
||||
"fflate": "^0.6.9",
|
||||
"file-saver": "^1.3.8",
|
||||
"file-type": "^10.9.0",
|
||||
"font-awesome": "4.7.0",
|
||||
"formik": "^2.2.9",
|
||||
"fp-ts": "^2.3.1",
|
||||
|
@ -975,6 +974,7 @@
|
|||
"@types/pbf": "3.0.2",
|
||||
"@types/pdfmake": "^0.2.0",
|
||||
"@types/pegjs": "^0.10.1",
|
||||
"@types/pixelmatch": "^5.2.4",
|
||||
"@types/pngjs": "^3.4.0",
|
||||
"@types/prettier": "^2.3.2",
|
||||
"@types/pretty-ms": "^5.0.0",
|
||||
|
@ -1004,6 +1004,7 @@
|
|||
"@types/selenium-webdriver": "^4.1.1",
|
||||
"@types/semver": "^7",
|
||||
"@types/set-value": "^2.0.0",
|
||||
"@types/sharp": "^0.30.4",
|
||||
"@types/sinon": "^7.0.13",
|
||||
"@types/source-map-support": "^0.5.3",
|
||||
"@types/stats-lite": "^2.2.0",
|
||||
|
@ -1137,9 +1138,8 @@
|
|||
"jest-snapshot": "^26.6.2",
|
||||
"jest-specific-snapshot": "2.0.0",
|
||||
"jest-styled-components": "^7.0.3",
|
||||
"jimp": "^0.14.0",
|
||||
"jsdom": "13.1.0",
|
||||
"json-schema-typed": "^7.0.3",
|
||||
"jsdom": "^16.4.0",
|
||||
"json-schema-typed": "^8.0.1",
|
||||
"json5": "^1.0.1",
|
||||
"jsondiffpatch": "0.4.1",
|
||||
"license-checker": "^25.0.1",
|
||||
|
@ -1166,6 +1166,7 @@
|
|||
"pbf": "3.2.1",
|
||||
"peggy": "^1.2.0",
|
||||
"pirates": "^4.0.1",
|
||||
"pixelmatch": "^5.3.0",
|
||||
"playwright": "^1.17.1",
|
||||
"pngjs": "^3.4.0",
|
||||
"postcss": "^8.4.14",
|
||||
|
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 42 KiB |
|
@ -11,7 +11,7 @@ import { cloneDeepWith } from 'lodash';
|
|||
import { Key, Origin, WebDriver } from 'selenium-webdriver';
|
||||
import { modifyUrl } from '@kbn/std';
|
||||
|
||||
import Jimp from 'jimp';
|
||||
import sharp from 'sharp';
|
||||
import { WebElementWrapper } from '../lib/web_element_wrapper';
|
||||
import { FtrProviderContext, FtrService } from '../../ftr_provider_context';
|
||||
import { Browsers } from '../remote/browsers';
|
||||
|
@ -87,8 +87,9 @@ class BrowserService extends FtrService {
|
|||
public async getScreenshotAsBitmap() {
|
||||
const screenshot = await this.takeScreenshot();
|
||||
const buffer = Buffer.from(screenshot, 'base64');
|
||||
const session = (await Jimp.read(buffer)).clone();
|
||||
return session.bitmap;
|
||||
|
||||
const session = sharp(buffer).png({ quality: 100, progressive: true }).clone();
|
||||
return session;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -103,23 +104,36 @@ class BrowserService extends FtrService {
|
|||
// We really want to set the Kibana app to a specific size without regard to the browser chrome (borders)
|
||||
// But that means we first need to figure out the display scaling factor.
|
||||
// NOTE: None of this is required when running Chrome headless because there's no scaling and no borders.
|
||||
await this.setWindowSize(1200, 800);
|
||||
const largeWidth = 1200;
|
||||
const largeHeight = 800;
|
||||
const smallWidth = 600;
|
||||
const smallHeight = 400;
|
||||
|
||||
await this.setWindowSize(largeWidth, largeHeight);
|
||||
const bitmap1 = await this.getScreenshotAsBitmap();
|
||||
const bm1Data = await bitmap1.metadata();
|
||||
this.log.debug(
|
||||
`======browser======== actual initial screenshot size width=${bitmap1.width}, height=${bitmap1.height}`
|
||||
`======browser======== actual initial screenshot size width=${bm1Data.width}, height=${bm1Data.height}`
|
||||
);
|
||||
|
||||
// drasticly change the window size so we can calculate the scaling
|
||||
await this.setWindowSize(600, 400);
|
||||
await this.setWindowSize(smallWidth, smallHeight);
|
||||
const bitmap2 = await this.getScreenshotAsBitmap();
|
||||
const bm2Data = await bitmap2.metadata();
|
||||
this.log.debug(
|
||||
`======browser======== actual second screenshot size width= ${bitmap2.width}, height=${bitmap2.height}`
|
||||
`======browser======== actual second screenshot size width= ${bm2Data.width}, height=${bm2Data.height}`
|
||||
);
|
||||
|
||||
const xScaling = (bitmap1.width - bitmap2.width) / 600;
|
||||
const yScaling = (bitmap1.height - bitmap2.height) / 400;
|
||||
const xBorder = Math.round(600 - bitmap2.width / xScaling);
|
||||
const yBorder = Math.round(400 - bitmap2.height / yScaling);
|
||||
const bm1Width = bm1Data.width ?? smallWidth;
|
||||
const bm1Height = bm1Data.height ?? smallHeight;
|
||||
const bm2Width = bm2Data.width ?? smallWidth;
|
||||
const bm2Height = bm2Data.height ?? smallHeight;
|
||||
|
||||
const xScaling = (bm1Width - bm2Width) / smallWidth;
|
||||
const yScaling = (bm1Height - bm2Height) / smallHeight;
|
||||
const xBorder = Math.round(600 - bm2Width / xScaling);
|
||||
const yBorder = Math.round(400 - bm2Height / yScaling);
|
||||
|
||||
this.log.debug(
|
||||
`======browser======== calculated values xBorder= ${xBorder}, yBorder=${yBorder}, xScaling=${xScaling}, yScaling=${yScaling}`
|
||||
);
|
||||
|
@ -129,9 +143,12 @@ class BrowserService extends FtrService {
|
|||
await this.setWindowSize(width + xBorder, height + yBorder);
|
||||
|
||||
const bitmap3 = await this.getScreenshotAsBitmap();
|
||||
const bm3Data = await bitmap3.metadata();
|
||||
const bm3Width = bm3Data.width ?? width;
|
||||
const bm3Height = bm3Data.height ?? height;
|
||||
// when there is display scaling this won't show the expected size. It will show expected size * scaling factor
|
||||
this.log.debug(
|
||||
`======browser======== final screenshot size width=${bitmap3.width}, height=${bitmap3.height}`
|
||||
`======browser======== final screenshot size width=${bm3Width}, height=${bm3Height}`
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ export type { Browser } from './browser';
|
|||
export { BrowserProvider } from './browser';
|
||||
export { FailureDebuggingProvider } from './failure_debugging';
|
||||
export { FindProvider } from './find';
|
||||
export { PngService } from './png';
|
||||
export { ScreenshotsService } from './screenshots';
|
||||
export { SnapshotsService } from './snapshots';
|
||||
export { TestSubjects } from './test_subjects';
|
||||
|
|
96
test/functional/services/common/png.ts
Normal file
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||
* Side Public License, v 1.
|
||||
*/
|
||||
|
||||
import { dirname } from 'path';
|
||||
import { promisify } from 'util';
|
||||
import { promises as fs, writeFile, readFileSync, mkdir } from 'fs';
|
||||
import path from 'path';
|
||||
import { comparePngs, PngDescriptor } from '../lib/compare_pngs';
|
||||
import { FtrProviderContext, FtrService } from '../../ftr_provider_context';
|
||||
|
||||
const mkdirAsync = promisify(mkdir);
|
||||
const writeFileAsync = promisify(writeFile);
|
||||
|
||||
export class PngService extends FtrService {
|
||||
private readonly log = this.ctx.getService('log');
|
||||
|
||||
constructor(ctx: FtrProviderContext) {
|
||||
super(ctx);
|
||||
}
|
||||
|
||||
async comparePngs(
|
||||
sessionInfo: string | PngDescriptor,
|
||||
baselineInfo: string | PngDescriptor,
|
||||
diffPath: string,
|
||||
sessionDirectory: string
|
||||
) {
|
||||
return await comparePngs(sessionInfo, baselineInfo, diffPath, sessionDirectory, this.log);
|
||||
}
|
||||
|
||||
async checkIfPngsMatch(actualpngPath: string, baselinepngPath: string, folder: string) {
|
||||
this.log.debug(`checkIfpngsMatch: ${actualpngPath} vs ${baselinepngPath}`);
|
||||
// Copy the pngs into the session directory, as that's where the generated pngs will automatically be
|
||||
// stored.
|
||||
const sessionDirectoryPath = path.resolve(folder, 'session');
|
||||
const failureDirectoryPath = path.resolve(folder, 'failure');
|
||||
|
||||
await fs.mkdir(sessionDirectoryPath, { recursive: true });
|
||||
await fs.mkdir(failureDirectoryPath, { recursive: true });
|
||||
|
||||
const actualpngFileName = path.basename(actualpngPath, '.png');
|
||||
const baselinepngFileName = path.basename(baselinepngPath, '.png');
|
||||
|
||||
const baselineCopyPath = path.resolve(
|
||||
sessionDirectoryPath,
|
||||
`${baselinepngFileName}_baseline.png`
|
||||
);
|
||||
const actualCopyPath = path.resolve(sessionDirectoryPath, `${actualpngFileName}_actual.png`);
|
||||
|
||||
// Don't cause a test failure if the baseline snapshot doesn't exist - we don't have all OS's covered and we
|
||||
// don't want to start causing failures for other devs working on OS's which are lacking snapshots. We have
|
||||
// mac and linux covered which is better than nothing for now.
|
||||
try {
|
||||
this.log.debug(`writeFile: ${baselineCopyPath}`);
|
||||
await fs.writeFile(baselineCopyPath, await fs.readFile(baselinepngPath));
|
||||
} catch (error) {
|
||||
throw new Error(`No baseline png found at ${baselinepngPath}`);
|
||||
}
|
||||
this.log.debug(`writeFile: ${actualCopyPath}`);
|
||||
await fs.writeFile(actualCopyPath, await fs.readFile(actualpngPath));
|
||||
|
||||
let diffTotal = 0;
|
||||
|
||||
const diffPngPath = path.resolve(failureDirectoryPath, `${baselinepngFileName}-${1}.png`);
|
||||
diffTotal += await this.comparePngs(
|
||||
actualCopyPath,
|
||||
baselineCopyPath,
|
||||
diffPngPath,
|
||||
sessionDirectoryPath
|
||||
);
|
||||
|
||||
return diffTotal;
|
||||
}
|
||||
|
||||
async compareAgainstBaseline(
|
||||
sessionPath: string,
|
||||
baselinePath: string,
|
||||
folder: string,
|
||||
updateBaselines: boolean
|
||||
) {
|
||||
this.log.debug(`compareAgainstBaseline: ${sessionPath} vs ${baselinePath}`);
|
||||
|
||||
if (updateBaselines) {
|
||||
this.log.debug('Updating baseline PNG');
|
||||
await mkdirAsync(dirname(baselinePath), { recursive: true });
|
||||
await writeFileAsync(baselinePath, readFileSync(sessionPath));
|
||||
return 0;
|
||||
} else {
|
||||
return await this.checkIfPngsMatch(sessionPath, baselinePath, folder);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -13,6 +13,7 @@ import {
|
|||
BrowserProvider,
|
||||
FailureDebuggingProvider,
|
||||
FindProvider,
|
||||
PngService,
|
||||
ScreenshotsService,
|
||||
SnapshotsService,
|
||||
TestSubjects,
|
||||
|
@ -58,6 +59,7 @@ export const services = {
|
|||
find: FindProvider,
|
||||
testSubjects: TestSubjects,
|
||||
docTable: DocTableService,
|
||||
png: PngService,
|
||||
screenshots: ScreenshotsService,
|
||||
snapshots: SnapshotsService,
|
||||
failureDebugging: FailureDebuggingProvider,
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
* Side Public License, v 1.
|
||||
*/
|
||||
|
||||
import { parse, join } from 'path';
|
||||
import Jimp from 'jimp';
|
||||
import { join, parse } from 'path';
|
||||
import sharp from 'sharp';
|
||||
import pixelmatch from 'pixelmatch';
|
||||
import { ToolingLog } from '@kbn/tooling-log';
|
||||
import { promises as fs } from 'fs';
|
||||
import path from 'path';
|
||||
|
||||
interface PngDescriptor {
|
||||
import { PNG } from 'pngjs';
|
||||
export interface PngDescriptor {
|
||||
path: string;
|
||||
|
||||
/**
|
||||
|
@ -31,11 +31,14 @@ const toDescriptor = (imageInfo: string | PngDescriptor): PngDescriptor => {
|
|||
};
|
||||
|
||||
/**
|
||||
* Override Jimp types that expect to be mapped to either string or buffer even though Jimp
|
||||
* accepts both https://www.npmjs.com/package/jimp#basic-usage.
|
||||
* Use sharp to open the image and get the metadata
|
||||
*/
|
||||
const toJimp = (imageInfo: string | Buffer): Promise<Jimp> => {
|
||||
return (Jimp.read as (value: string | Buffer) => Promise<Jimp>)(imageInfo);
|
||||
const getSharpInstance = async (
|
||||
imageInfo: string | Buffer
|
||||
): Promise<{ instance: sharp.Sharp; metadata: sharp.Metadata }> => {
|
||||
const instance = sharp(imageInfo).png({ quality: 100, progressive: true }).clone();
|
||||
const metadata = await instance.metadata();
|
||||
return { instance, metadata };
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -46,7 +49,7 @@ const toJimp = (imageInfo: string | Buffer): Promise<Jimp> => {
|
|||
* @param diffPath
|
||||
* @param sessionDirectory
|
||||
* @param log
|
||||
* @returns Percent
|
||||
* @returns diffRatio
|
||||
*/
|
||||
export async function comparePngs(
|
||||
sessionInfo: string | PngDescriptor,
|
||||
|
@ -58,99 +61,68 @@ export async function comparePngs(
|
|||
const sessionDescriptor = toDescriptor(sessionInfo);
|
||||
const baselineDescriptor = toDescriptor(baselineInfo);
|
||||
|
||||
log.debug(`comparePngs: ${sessionDescriptor.path} vs ${baselineDescriptor.path}`);
|
||||
let sessionTestPath: string = sessionDescriptor.path;
|
||||
let baselineTestPath: string = baselineDescriptor.path;
|
||||
|
||||
const session = (await toJimp(sessionDescriptor.buffer ?? sessionDescriptor.path)).clone();
|
||||
const baseline = (await toJimp(baselineDescriptor.buffer ?? baselineDescriptor.path)).clone();
|
||||
log.debug(`comparePngs: ${sessionTestPath} vs ${baselineTestPath}`);
|
||||
|
||||
if (
|
||||
session.bitmap.width !== baseline.bitmap.width ||
|
||||
session.bitmap.height !== baseline.bitmap.height
|
||||
) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(
|
||||
'expected height ' + baseline.bitmap.height + ' and width ' + baseline.bitmap.width
|
||||
const { instance: session, metadata: sessionMetadata } = await getSharpInstance(
|
||||
sessionDescriptor.buffer ?? sessionTestPath
|
||||
);
|
||||
const sessionWidth = sessionMetadata.width ?? 0;
|
||||
const sessionHeight = sessionMetadata.height ?? 0;
|
||||
|
||||
const { instance: baseline, metadata: baselineMetadata } = await getSharpInstance(
|
||||
baselineDescriptor.buffer ?? baselineTestPath
|
||||
);
|
||||
const baselineWidth = baselineMetadata.width ?? 0;
|
||||
const baselineHeight = baselineMetadata.height ?? 0;
|
||||
|
||||
// Adjust screenshot size
|
||||
const testWidth = Math.min(sessionWidth, baselineWidth);
|
||||
const testHeight = Math.min(sessionHeight, baselineHeight);
|
||||
log.debug('baseline height ' + baselineHeight + ' and width ' + baselineWidth);
|
||||
log.debug('session height ' + sessionHeight + ' and width ' + sessionWidth);
|
||||
log.debug('test height ' + testHeight + ' and width ' + testWidth);
|
||||
if (sessionWidth !== baselineWidth || sessionHeight !== baselineHeight) {
|
||||
sessionTestPath = join(
|
||||
sessionDirectory,
|
||||
`${parse(sessionDescriptor.path).name}-session-resized.png`
|
||||
);
|
||||
// eslint-disable-next-line no-console
|
||||
console.log('actual height ' + session.bitmap.height + ' and width ' + session.bitmap.width);
|
||||
|
||||
const width = Math.min(session.bitmap.width, baseline.bitmap.width);
|
||||
const height = Math.min(session.bitmap.height, baseline.bitmap.height);
|
||||
session.resize(width, height); // , Jimp.HORIZONTAL_ALIGN_LEFT | Jimp.VERTICAL_ALIGN_TOP);
|
||||
baseline.resize(width, height); // , Jimp.HORIZONTAL_ALIGN_LEFT | Jimp.VERTICAL_ALIGN_TOP);
|
||||
baselineTestPath = join(
|
||||
sessionDirectory,
|
||||
`${parse(baselineDescriptor.path).name}-baseline-resized.png`
|
||||
);
|
||||
await session.resize(testWidth, testHeight, { fit: 'fill' }).png().toFile(sessionTestPath);
|
||||
await baseline.resize(testWidth, testHeight, { fit: 'fill' }).png().toFile(baselineTestPath);
|
||||
}
|
||||
|
||||
session.quality(60);
|
||||
baseline.quality(60);
|
||||
|
||||
log.debug(`calculating diff pixels...`);
|
||||
// Note that this threshold value only affects color comparison from pixel to pixel. It won't have
|
||||
// any affect when comparing neighboring pixels - so slight shifts, font variations, or "blurry-ness"
|
||||
// will still show up as diffs, but upping this will not help that. Instead we keep the threshold low, and expect
|
||||
// some the diffCount to be lower than our own threshold value.
|
||||
const THRESHOLD = 0.1;
|
||||
const { image, percent } = Jimp.diff(session, baseline, THRESHOLD);
|
||||
log.debug(`percent different: ${percent}`);
|
||||
if (percent > 0) {
|
||||
image.write(diffPath);
|
||||
|
||||
// For debugging purposes it'll help to see the resized images and how they compare.
|
||||
session.write(
|
||||
join(sessionDirectory, `${parse(sessionDescriptor.path).name}-session-resized.png`)
|
||||
);
|
||||
baseline.write(
|
||||
join(sessionDirectory, `${parse(baselineDescriptor.path).name}-baseline-resized.png`)
|
||||
);
|
||||
}
|
||||
return percent;
|
||||
}
|
||||
|
||||
export async function checkIfPngsMatch(
|
||||
actualpngPath: string,
|
||||
baselinepngPath: string,
|
||||
screenshotsDirectory: string,
|
||||
log: any
|
||||
) {
|
||||
log.debug(`checkIfpngsMatch: ${actualpngPath} vs ${baselinepngPath}`);
|
||||
// Copy the pngs into the screenshot session directory, as that's where the generated pngs will automatically be
|
||||
// stored.
|
||||
const sessionDirectoryPath = path.resolve(screenshotsDirectory, 'session');
|
||||
const failureDirectoryPath = path.resolve(screenshotsDirectory, 'failure');
|
||||
|
||||
await fs.mkdir(sessionDirectoryPath, { recursive: true });
|
||||
await fs.mkdir(failureDirectoryPath, { recursive: true });
|
||||
|
||||
const actualpngFileName = path.basename(actualpngPath, '.png');
|
||||
const baselinepngFileName = path.basename(baselinepngPath, '.png');
|
||||
|
||||
const baselineCopyPath = path.resolve(
|
||||
sessionDirectoryPath,
|
||||
`${baselinepngFileName}_baseline.png`
|
||||
);
|
||||
const actualCopyPath = path.resolve(sessionDirectoryPath, `${actualpngFileName}_actual.png`);
|
||||
|
||||
// Don't cause a test failure if the baseline snapshot doesn't exist - we don't have all OS's covered and we
|
||||
// don't want to start causing failures for other devs working on OS's which are lacking snapshots. We have
|
||||
// mac and linux covered which is better than nothing for now.
|
||||
try {
|
||||
log.debug(`writeFile: ${baselineCopyPath}`);
|
||||
await fs.writeFile(baselineCopyPath, await fs.readFile(baselinepngPath));
|
||||
} catch (error) {
|
||||
throw new Error(`No baseline png found at ${baselinepngPath}`);
|
||||
}
|
||||
log.debug(`writeFile: ${actualCopyPath}`);
|
||||
await fs.writeFile(actualCopyPath, await fs.readFile(actualpngPath));
|
||||
|
||||
let diffTotal = 0;
|
||||
|
||||
const diffPngPath = path.resolve(failureDirectoryPath, `${baselinepngFileName}-${1}.png`);
|
||||
diffTotal += await comparePngs(
|
||||
actualCopyPath,
|
||||
baselineCopyPath,
|
||||
diffPngPath,
|
||||
sessionDirectoryPath,
|
||||
log
|
||||
const sessionTestImg = PNG.sync.read(await fs.readFile(sessionTestPath));
|
||||
const baselineTestImg = PNG.sync.read(await fs.readFile(baselineTestPath));
|
||||
const diff = new PNG({ width: testWidth, height: testHeight });
|
||||
const mismatchedPixels = pixelmatch(
|
||||
sessionTestImg.data,
|
||||
baselineTestImg.data,
|
||||
diff.data,
|
||||
testWidth,
|
||||
testHeight,
|
||||
{
|
||||
threshold: THRESHOLD,
|
||||
}
|
||||
);
|
||||
|
||||
return diffTotal;
|
||||
const diffRatio = mismatchedPixels / (testWidth * testHeight);
|
||||
|
||||
log.debug(`percent different (ratio): ${diffRatio}`);
|
||||
if (diffRatio > 0) {
|
||||
const buffer = PNG.sync.write(diff);
|
||||
await fs.writeFile(diffPath, buffer);
|
||||
}
|
||||
return diffRatio;
|
||||
}
|
||||
|
|
|
@ -10,10 +10,16 @@ import path from 'path';
|
|||
import type { FtrProviderContext } from '../../functional/ftr_provider_context';
|
||||
|
||||
// eslint-disable-next-line import/no-default-export
|
||||
export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
||||
export default function ({
|
||||
getService,
|
||||
getPageObjects,
|
||||
updateBaselines,
|
||||
}: FtrProviderContext & { updateBaselines: boolean }) {
|
||||
const PageObjects = getPageObjects(['common', 'reporting']);
|
||||
const compareImages = getService('compareImages');
|
||||
const testSubjects = getService('testSubjects');
|
||||
const png = getService('png');
|
||||
const config = getService('config');
|
||||
const screenshotDir = config.get('screenshots.directory');
|
||||
|
||||
const appId = 'reportingExample';
|
||||
|
||||
|
@ -35,13 +41,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
const url = await PageObjects.reporting.getReportURL(60000);
|
||||
const captureData = await PageObjects.reporting.getRawPdfReportData(url);
|
||||
|
||||
const pngSessionFilePath = await compareImages.writeToSessionFile(
|
||||
const pngSessionFilePath = await PageObjects.reporting.writeSessionReport(
|
||||
'capture_test_baseline_a',
|
||||
captureData
|
||||
'png',
|
||||
captureData,
|
||||
screenshotDir
|
||||
);
|
||||
|
||||
expect(
|
||||
await compareImages.checkIfPngsMatch(pngSessionFilePath, fixtures.baselineAPng)
|
||||
await png.compareAgainstBaseline(
|
||||
pngSessionFilePath,
|
||||
fixtures.baselineAPng,
|
||||
screenshotDir,
|
||||
updateBaselines
|
||||
)
|
||||
).to.be.lessThan(0.09);
|
||||
});
|
||||
});
|
||||
|
|
Before Width: | Height: | Size: 832 KiB After Width: | Height: | Size: 747 KiB |
|
@ -11,17 +11,19 @@ import { FtrProviderContext } from '../../../../ftr_provider_context';
|
|||
|
||||
const REPORTS_FOLDER = path.resolve(__dirname, 'reports');
|
||||
|
||||
export default function ({ getPageObjects, getService }: FtrProviderContext) {
|
||||
export default function ({
|
||||
getPageObjects,
|
||||
getService,
|
||||
updateBaselines,
|
||||
}: FtrProviderContext & { updateBaselines: boolean }) {
|
||||
const PageObjects = getPageObjects(['reporting', 'common', 'dashboard']);
|
||||
const esArchiver = getService('esArchiver');
|
||||
const security = getService('security');
|
||||
const browser = getService('browser');
|
||||
const log = getService('log');
|
||||
const config = getService('config');
|
||||
const es = getService('es');
|
||||
const testSubjects = getService('testSubjects');
|
||||
const kibanaServer = getService('kibanaServer');
|
||||
const reporting = getService('reporting');
|
||||
const png = getService('png');
|
||||
const ecommerceSOPath = 'x-pack/test/functional/fixtures/kbn_archiver/reporting/ecommerce.json';
|
||||
|
||||
const loadEcommerce = async () => {
|
||||
|
@ -169,11 +171,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
|
|||
reportData,
|
||||
REPORTS_FOLDER
|
||||
);
|
||||
const percentDiff = await reporting.checkIfPngsMatch(
|
||||
|
||||
const percentDiff = await png.compareAgainstBaseline(
|
||||
sessionReportPath,
|
||||
PageObjects.reporting.getBaselineReportPath(reportFileName, 'png', REPORTS_FOLDER),
|
||||
config.get('screenshots.directory'),
|
||||
log
|
||||
REPORTS_FOLDER,
|
||||
updateBaselines
|
||||
);
|
||||
|
||||
expect(percentDiff).to.be.lessThan(0.09);
|
||||
|
@ -198,11 +201,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
|
|||
reportData,
|
||||
REPORTS_FOLDER
|
||||
);
|
||||
const percentDiff = await reporting.checkIfPngsMatch(
|
||||
const percentDiff = await png.compareAgainstBaseline(
|
||||
sessionReportPath,
|
||||
PageObjects.reporting.getBaselineReportPath(reportFileName, 'png', REPORTS_FOLDER),
|
||||
config.get('screenshots.directory'),
|
||||
log
|
||||
REPORTS_FOLDER,
|
||||
updateBaselines
|
||||
);
|
||||
|
||||
expect(percentDiff).to.be.lessThan(0.09);
|
||||
|
@ -303,11 +306,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
|
|||
|
||||
it('PNG file matches the baseline image', async function () {
|
||||
this.timeout(300000);
|
||||
const percentDiff = await reporting.checkIfPngsMatch(
|
||||
const percentDiff = await png.compareAgainstBaseline(
|
||||
sessionReportPath,
|
||||
PageObjects.reporting.getBaselineReportPath(reportFileName, 'png', REPORTS_FOLDER),
|
||||
config.get('screenshots.directory'),
|
||||
log
|
||||
REPORTS_FOLDER,
|
||||
updateBaselines
|
||||
);
|
||||
|
||||
expect(percentDiff).to.be.lessThan(0.09);
|
||||
|
|
|
@ -15,6 +15,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
|
|||
const config = getService('config');
|
||||
const log = getService('log');
|
||||
const reporting = getService('reporting');
|
||||
const png = getService('png');
|
||||
|
||||
describe('dashboard reporting: creates a map report', () => {
|
||||
// helper function to check the difference between the new image and the baseline
|
||||
|
@ -31,11 +32,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
|
|||
log.debug(`session report path: ${sessionReportPath}`);
|
||||
|
||||
expect(sessionReportPath).not.to.be(null);
|
||||
return await reporting.checkIfPngsMatch(
|
||||
return await png.checkIfPngsMatch(
|
||||
sessionReportPath,
|
||||
PageObjects.reporting.getBaselineReportPath(fileName, 'png', REPORTS_FOLDER),
|
||||
config.get('screenshots.directory'),
|
||||
log
|
||||
config.get('screenshots.directory')
|
||||
);
|
||||
};
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
const log = getService('log');
|
||||
const config = getService('config');
|
||||
const kibanaServer = getService('kibanaServer');
|
||||
const reporting = getService('reporting');
|
||||
const png = getService('png');
|
||||
|
||||
const PageObjects = getPageObjects([
|
||||
'reporting',
|
||||
|
@ -136,11 +136,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
);
|
||||
|
||||
// check the file
|
||||
const percentDiff = await reporting.checkIfPngsMatch(
|
||||
const percentDiff = await png.checkIfPngsMatch(
|
||||
sessionReportPath,
|
||||
PageObjects.reporting.getBaselineReportPath(reportFileName, 'png', REPORTS_FOLDER),
|
||||
config.get('screenshots.directory'),
|
||||
log
|
||||
config.get('screenshots.directory')
|
||||
);
|
||||
|
||||
expect(percentDiff).to.be.lessThan(0.09);
|
||||
|
|
|
@ -1,78 +0,0 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
import path from 'path';
|
||||
import { promises as fs } from 'fs';
|
||||
import { comparePngs } from '../../../../test/functional/services/lib/compare_pngs';
|
||||
import { FtrProviderContext } from '../ftr_provider_context';
|
||||
|
||||
export function CompareImagesProvider({ getService }: FtrProviderContext) {
|
||||
const log = getService('log');
|
||||
const config = getService('config');
|
||||
|
||||
const screenshotsDir = config.get('screenshots.directory');
|
||||
|
||||
const writeToSessionFile = async (name: string, rawPdf: Buffer) => {
|
||||
const sessionDirectory = path.resolve(screenshotsDir, 'session');
|
||||
await fs.mkdir(sessionDirectory, { recursive: true });
|
||||
const sessionReportPath = path.resolve(sessionDirectory, `${name}.png`);
|
||||
await fs.writeFile(sessionReportPath, rawPdf);
|
||||
return sessionReportPath;
|
||||
};
|
||||
|
||||
return {
|
||||
writeToSessionFile,
|
||||
async checkIfPngsMatch(
|
||||
actualPngPath: string,
|
||||
baselinePngPath: string,
|
||||
screenshotsDirectory: string = screenshotsDir
|
||||
) {
|
||||
log.debug(`checkIfPngsMatch: ${baselinePngPath}`);
|
||||
// Copy the pngs into the screenshot session directory, as that's where the generated pngs will automatically be
|
||||
// stored.
|
||||
const sessionDirectoryPath = path.resolve(screenshotsDirectory, 'session');
|
||||
const failureDirectoryPath = path.resolve(screenshotsDirectory, 'failure');
|
||||
|
||||
await fs.mkdir(sessionDirectoryPath, { recursive: true });
|
||||
await fs.mkdir(failureDirectoryPath, { recursive: true });
|
||||
|
||||
const actualPngFileName = path.basename(actualPngPath, '.png');
|
||||
const baselinePngFileName = path.basename(baselinePngPath, '.png');
|
||||
|
||||
const baselineCopyPath = path.resolve(
|
||||
sessionDirectoryPath,
|
||||
`${baselinePngFileName}_baseline.png`
|
||||
);
|
||||
// Don't cause a test failure if the baseline snapshot doesn't exist - we don't have all OS's covered and we
|
||||
// don't want to start causing failures for other devs working on OS's which are lacking snapshots. We have
|
||||
// mac and linux covered which is better than nothing for now.
|
||||
try {
|
||||
log.debug(`writeFile: ${baselineCopyPath}`);
|
||||
await fs.writeFile(baselineCopyPath, await fs.readFile(baselinePngPath));
|
||||
} catch (error) {
|
||||
throw new Error(`No baseline png found at ${baselinePngPath}`);
|
||||
}
|
||||
|
||||
const actualCopyPath = path.resolve(sessionDirectoryPath, `${actualPngFileName}_actual.png`);
|
||||
log.debug(`writeFile: ${actualCopyPath}`);
|
||||
await fs.writeFile(actualCopyPath, await fs.readFile(actualPngPath));
|
||||
|
||||
let diffTotal = 0;
|
||||
|
||||
const diffPngPath = path.resolve(failureDirectoryPath, `${baselinePngFileName}-${1}.png`);
|
||||
diffTotal += await comparePngs(
|
||||
actualCopyPath,
|
||||
baselineCopyPath,
|
||||
diffPngPath,
|
||||
sessionDirectoryPath,
|
||||
log
|
||||
);
|
||||
|
||||
return diffTotal;
|
||||
},
|
||||
};
|
||||
}
|
|
@ -68,7 +68,7 @@ import {
|
|||
} from './dashboard';
|
||||
import { SearchSessionsService } from './search_sessions';
|
||||
import { ObservabilityProvider } from './observability';
|
||||
import { CompareImagesProvider } from './compare_images';
|
||||
// import { CompareImagesProvider } from './compare_images';
|
||||
import { CasesServiceProvider } from './cases';
|
||||
import { AiopsProvider } from './aiops';
|
||||
|
||||
|
@ -129,7 +129,7 @@ export const services = {
|
|||
reporting: ReportingFunctionalProvider,
|
||||
searchSessions: SearchSessionsService,
|
||||
observability: ObservabilityProvider,
|
||||
compareImages: CompareImagesProvider,
|
||||
// compareImages: CompareImagesProvider,
|
||||
cases: CasesServiceProvider,
|
||||
aiops: AiopsProvider,
|
||||
};
|
||||
|
|
|
@ -15,7 +15,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
const reportingAPI = getService('reportingAPI');
|
||||
const reportingFunctional = getService('reportingFunctional');
|
||||
const browser = getService('browser');
|
||||
const compareImages = getService('compareImages');
|
||||
const png = getService('png');
|
||||
const config = getService('config');
|
||||
const screenshotDir = config.get('screenshots.directory');
|
||||
|
||||
describe('Reporting Functional Tests with forced timeout', function () {
|
||||
const dashboardTitle = 'Ecom Dashboard Hidden Panel Titles';
|
||||
|
@ -48,12 +50,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
|
||||
it('adds a visual warning in the report output', async () => {
|
||||
const captureData = await PageObjects.reporting.getRawPdfReportData(url);
|
||||
const pngSessionFilePath = await compareImages.writeToSessionFile(sessionPng, captureData);
|
||||
const pngSessionFilePath = await PageObjects.reporting.writeSessionReport(
|
||||
sessionPng,
|
||||
'png',
|
||||
captureData,
|
||||
screenshotDir
|
||||
);
|
||||
|
||||
// allow minor visual differences: https://github.com/elastic/kibana/issues/135309#issuecomment-1169095186
|
||||
expect(await compareImages.checkIfPngsMatch(pngSessionFilePath, baselineAPng)).to.be.lessThan(
|
||||
0.015
|
||||
); // this factor of difference allows passing whether or not the page has loaded things like the loading graphics and titlebars
|
||||
expect(
|
||||
await png.checkIfPngsMatch(pngSessionFilePath, baselineAPng, screenshotDir)
|
||||
).to.be.lessThan(0.015); // this factor of difference allows passing whether or not the page has loaded things like the loading graphics and titlebars
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
*/
|
||||
|
||||
import expect from '@kbn/expect';
|
||||
import { checkIfPngsMatch } from '../../../../test/functional/services/lib/compare_pngs';
|
||||
import { createScenarios as createAPIScenarios } from '../../reporting_api_integration/services/scenarios';
|
||||
import { FtrProviderContext } from '../ftr_provider_context';
|
||||
|
||||
|
@ -162,6 +161,5 @@ export function createScenarios(
|
|||
tryReportsNotAvailable,
|
||||
loginDataAnalyst,
|
||||
loginReportingUser,
|
||||
checkIfPngsMatch,
|
||||
};
|
||||
}
|
||||
|
|
567
yarn.lock
|
@ -2580,296 +2580,6 @@
|
|||
"@types/yargs" "^17.0.8"
|
||||
chalk "^4.0.0"
|
||||
|
||||
"@jimp/bmp@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.14.0.tgz#6df246026554f276f7b354047c6fff9f5b2b5182"
|
||||
integrity sha512-5RkX6tSS7K3K3xNEb2ygPuvyL9whjanhoaB/WmmXlJS6ub4DjTqrapu8j4qnIWmO4YYtFeTbDTXV6v9P1yMA5A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
bmp-js "^0.1.0"
|
||||
|
||||
"@jimp/core@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.14.0.tgz#870c9ca25b40be353ebda1d2abb48723d9010055"
|
||||
integrity sha512-S62FcKdtLtj3yWsGfJRdFXSutjvHg7aQNiFogMbwq19RP4XJWqS2nOphu7ScB8KrSlyy5nPF2hkWNhLRLyD82w==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
any-base "^1.1.0"
|
||||
buffer "^5.2.0"
|
||||
exif-parser "^0.1.12"
|
||||
file-type "^9.0.0"
|
||||
load-bmfont "^1.3.1"
|
||||
mkdirp "^0.5.1"
|
||||
phin "^2.9.1"
|
||||
pixelmatch "^4.0.2"
|
||||
tinycolor2 "^1.4.1"
|
||||
|
||||
"@jimp/custom@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.14.0.tgz#1dbbf0094df7403f4e03bc984ed92e7458842f74"
|
||||
integrity sha512-kQJMeH87+kWJdVw8F9GQhtsageqqxrvzg7yyOw3Tx/s7v5RToe8RnKyMM+kVtBJtNAG+Xyv/z01uYQ2jiZ3GwA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/core" "^0.14.0"
|
||||
|
||||
"@jimp/gif@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.14.0.tgz#db159f57c3cfd1566bbe8b124958791998614960"
|
||||
integrity sha512-DHjoOSfCaCz72+oGGEh8qH0zE6pUBaBxPxxmpYJjkNyDZP7RkbBkZJScIYeQ7BmJxmGN4/dZn+MxamoQlr+UYg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
gifwrap "^0.9.2"
|
||||
omggif "^1.0.9"
|
||||
|
||||
"@jimp/jpeg@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.14.0.tgz#8a687a6a653bbbae38c522edef8f84bb418d9461"
|
||||
integrity sha512-561neGbr+87S/YVQYnZSTyjWTHBm9F6F1obYHiyU3wVmF+1CLbxY3FQzt4YolwyQHIBv36Bo0PY2KkkU8BEeeQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
jpeg-js "^0.4.0"
|
||||
|
||||
"@jimp/plugin-blit@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.14.0.tgz#5eb374be1201313b2113899fb842232d8fcfd345"
|
||||
integrity sha512-YoYOrnVHeX3InfgbJawAU601iTZMwEBZkyqcP1V/S33Qnz9uzH1Uj1NtC6fNgWzvX6I4XbCWwtr4RrGFb5CFrw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-blur@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.14.0.tgz#fe07e4932d5a2f5d8c9831e245561553224bfc60"
|
||||
integrity sha512-9WhZcofLrT0hgI7t0chf7iBQZib//0gJh9WcQMUt5+Q1Bk04dWs8vTgLNj61GBqZXgHSPzE4OpCrrLDBG8zlhQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-circle@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.14.0.tgz#82c0e904a34e90fa672fb9c286bc892e92088ddf"
|
||||
integrity sha512-o5L+wf6QA44tvTum5HeLyLSc5eVfIUd5ZDVi5iRfO4o6GT/zux9AxuTSkKwnjhsG8bn1dDmywAOQGAx7BjrQVA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-color@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.14.0.tgz#772bd2d80a88bc66ea1331d010207870f169a74b"
|
||||
integrity sha512-JJz512SAILYV0M5LzBb9sbOm/XEj2fGElMiHAxb7aLI6jx+n0agxtHpfpV/AePTLm1vzzDxx6AJxXbKv355hBQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
tinycolor2 "^1.4.1"
|
||||
|
||||
"@jimp/plugin-contain@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.14.0.tgz#c68115420d182e696f81bbe76fb5e704909b2b6a"
|
||||
integrity sha512-RX2q233lGyaxiMY6kAgnm9ScmEkNSof0hdlaJAVDS1OgXphGAYAeSIAwzESZN4x3ORaWvkFefeVH9O9/698Evg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-cover@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.14.0.tgz#4755322589c5885e44e14e31b86b542e907297ce"
|
||||
integrity sha512-0P/5XhzWES4uMdvbi3beUgfvhn4YuQ/ny8ijs5kkYIw6K8mHcl820HahuGpwWMx56DJLHRl1hFhJwo9CeTRJtQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-crop@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.14.0.tgz#4cbd856ca84ffc37230fad2534906f2f75aa3057"
|
||||
integrity sha512-Ojtih+XIe6/XSGtpWtbAXBozhCdsDMmy+THUJAGu2x7ZgKrMS0JotN+vN2YC3nwDpYkM+yOJImQeptSfZb2Sug==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-displace@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.14.0.tgz#b0e6a57d00cb1f893f541413fe9d737d23c3b70c"
|
||||
integrity sha512-c75uQUzMgrHa8vegkgUvgRL/PRvD7paFbFJvzW0Ugs8Wl+CDMGIPYQ3j7IVaQkIS+cAxv+NJ3TIRBQyBrfVEOg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-dither@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.14.0.tgz#9185ec4c38e02edc9e5831f5d709f6ba891e1b93"
|
||||
integrity sha512-g8SJqFLyYexXQQsoh4dc1VP87TwyOgeTElBcxSXX2LaaMZezypmxQfLTzOFzZoK8m39NuaoH21Ou1Ftsq7LzVQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-fisheye@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.14.0.tgz#9f26346cf2fbc660cc2008cd7fd30a83b5029e78"
|
||||
integrity sha512-BFfUZ64EikCaABhCA6mR3bsltWhPpS321jpeIQfJyrILdpFsZ/OccNwCgpW1XlbldDHIoNtXTDGn3E+vCE7vDg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-flip@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.14.0.tgz#7966d6aa3b5fe1aa4d2d561ff12b8ef5ccb9b071"
|
||||
integrity sha512-WtL1hj6ryqHhApih+9qZQYA6Ye8a4HAmdTzLbYdTMrrrSUgIzFdiZsD0WeDHpgS/+QMsWwF+NFmTZmxNWqKfXw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-gaussian@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.14.0.tgz#452bc1971a4467ad9b984aa67f4c200bf941bb65"
|
||||
integrity sha512-uaLwQ0XAQoydDlF9tlfc7iD9drYPriFe+jgYnWm8fbw5cN+eOIcnneEX9XCOOzwgLPkNCxGox6Kxjn8zY6GxtQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-invert@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.14.0.tgz#cd31a555860e9f821394936d15af161c09c42921"
|
||||
integrity sha512-UaQW9X9vx8orQXYSjT5VcITkJPwDaHwrBbxxPoDG+F/Zgv4oV9fP+udDD6qmkgI9taU+44Fy+zm/J/gGcMWrdg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-mask@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.14.0.tgz#52619643ac6222f85e6b27dee33c771ca3a6a4c9"
|
||||
integrity sha512-tdiGM69OBaKtSPfYSQeflzFhEpoRZ+BvKfDEoivyTjauynbjpRiwB1CaiS8En1INTDwzLXTT0Be9SpI3LkJoEA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-normalize@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.14.0.tgz#bf39e356b6d473f582ce95633ad49c9cdb82492b"
|
||||
integrity sha512-AfY8sqlsbbdVwFGcyIPy5JH/7fnBzlmuweb+Qtx2vn29okq6+HelLjw2b+VT2btgGUmWWHGEHd86oRGSoWGyEQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-print@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.14.0.tgz#1c43c2a92a7adc05b464863882cb89ce486d63e6"
|
||||
integrity sha512-MwP3sH+VS5AhhSTXk7pui+tEJFsxnTKFY3TraFJb8WFbA2Vo2qsRCZseEGwpTLhENB7p/JSsLvWoSSbpmxhFAQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
load-bmfont "^1.4.0"
|
||||
|
||||
"@jimp/plugin-resize@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.14.0.tgz#ef7fc6c2e45f8bcab62456baf8fd3bc415b02b64"
|
||||
integrity sha512-qFeMOyXE/Bk6QXN0GQo89+CB2dQcXqoxUcDb2Ah8wdYlKqpi53skABkgVy5pW3EpiprDnzNDboMltdvDslNgLQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-rotate@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.14.0.tgz#3632bc159bf1c3b9ec9f459d9c05d02a11781ee7"
|
||||
integrity sha512-aGaicts44bvpTcq5Dtf93/8TZFu5pMo/61lWWnYmwJJU1RqtQlxbCLEQpMyRhKDNSfPbuP8nyGmaqXlM/82J0Q==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-scale@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.14.0.tgz#d30f0cd1365b8e68f43fa423300ae7f124e9bf10"
|
||||
integrity sha512-ZcJk0hxY5ZKZDDwflqQNHEGRblgaR+piePZm7dPwPUOSeYEH31P0AwZ1ziceR74zd8N80M0TMft+e3Td6KGBHw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-shadow@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.14.0.tgz#471fdb9f109ff2d9e20d533d45e1e18e0b48c749"
|
||||
integrity sha512-p2igcEr/iGrLiTu0YePNHyby0WYAXM14c5cECZIVnq/UTOOIQ7xIcWZJ1lRbAEPxVVXPN1UibhZAbr3HAb5BjQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugin-threshold@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.14.0.tgz#ebd72721c7d1d518c5bb6e494e55d97ac3351d3b"
|
||||
integrity sha512-N4BlDgm/FoOMV/DQM2rSpzsgqAzkP0DXkWZoqaQrlRxQBo4zizQLzhEL00T/YCCMKnddzgEhnByaocgaaa0fKw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
|
||||
"@jimp/plugins@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.14.0.tgz#41dba85f15ab8dadb4162100eb54e5f27b93ee2c"
|
||||
integrity sha512-vDO3XT/YQlFlFLq5TqNjQkISqjBHT8VMhpWhAfJVwuXIpilxz5Glu4IDLK6jp4IjPR6Yg2WO8TmRY/HI8vLrOw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/plugin-blit" "^0.14.0"
|
||||
"@jimp/plugin-blur" "^0.14.0"
|
||||
"@jimp/plugin-circle" "^0.14.0"
|
||||
"@jimp/plugin-color" "^0.14.0"
|
||||
"@jimp/plugin-contain" "^0.14.0"
|
||||
"@jimp/plugin-cover" "^0.14.0"
|
||||
"@jimp/plugin-crop" "^0.14.0"
|
||||
"@jimp/plugin-displace" "^0.14.0"
|
||||
"@jimp/plugin-dither" "^0.14.0"
|
||||
"@jimp/plugin-fisheye" "^0.14.0"
|
||||
"@jimp/plugin-flip" "^0.14.0"
|
||||
"@jimp/plugin-gaussian" "^0.14.0"
|
||||
"@jimp/plugin-invert" "^0.14.0"
|
||||
"@jimp/plugin-mask" "^0.14.0"
|
||||
"@jimp/plugin-normalize" "^0.14.0"
|
||||
"@jimp/plugin-print" "^0.14.0"
|
||||
"@jimp/plugin-resize" "^0.14.0"
|
||||
"@jimp/plugin-rotate" "^0.14.0"
|
||||
"@jimp/plugin-scale" "^0.14.0"
|
||||
"@jimp/plugin-shadow" "^0.14.0"
|
||||
"@jimp/plugin-threshold" "^0.14.0"
|
||||
timm "^1.6.1"
|
||||
|
||||
"@jimp/png@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.14.0.tgz#0f2dddb5125c0795ca7e67c771204c5437fcda4b"
|
||||
integrity sha512-0RV/mEIDOrPCcNfXSPmPBqqSZYwGADNRVUTyMt47RuZh7sugbYdv/uvKmQSiqRdR0L1sfbCBMWUEa5G/8MSbdA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.14.0"
|
||||
pngjs "^3.3.3"
|
||||
|
||||
"@jimp/tiff@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.14.0.tgz#a5b25bbe7c43fc3b07bad4e2ab90e0e164c1967f"
|
||||
integrity sha512-zBYDTlutc7j88G/7FBCn3kmQwWr0rmm1e0FKB4C3uJ5oYfT8645lftUsvosKVUEfkdmOaMAnhrf4ekaHcb5gQw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
utif "^2.0.1"
|
||||
|
||||
"@jimp/types@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.14.0.tgz#ef681ff702883c5f105b5e4e30d49abf39ee9e34"
|
||||
integrity sha512-hx3cXAW1KZm+b+XCrY3LXtdWy2U+hNtq0rPyJ7NuXCjU7lZR3vIkpz1DLJ3yDdS70hTi5QDXY3Cd9kd6DtloHQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/bmp" "^0.14.0"
|
||||
"@jimp/gif" "^0.14.0"
|
||||
"@jimp/jpeg" "^0.14.0"
|
||||
"@jimp/png" "^0.14.0"
|
||||
"@jimp/tiff" "^0.14.0"
|
||||
timm "^1.6.1"
|
||||
|
||||
"@jimp/utils@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.14.0.tgz#296254e63118554c62c31c19ac6b8c4bfe6490e5"
|
||||
integrity sha512-MY5KFYUru0y74IsgM/9asDwb3ERxWxXEu3CRCZEvE7DtT86y1bR1XgtlSliMrptjz4qbivNGMQSvUBpEFJDp1A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
regenerator-runtime "^0.13.3"
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
|
||||
version "0.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
|
||||
|
@ -7884,6 +7594,13 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/pegjs/-/pegjs-0.10.1.tgz#9a2f3961dc62430fdb21061eb0ddbd890f9e3b94"
|
||||
integrity sha512-ra8IchO9odGQmYKbm+94K58UyKCEKdZh9y0vxhG4pIpOJOBlC1C+ZtBVr6jLs+/oJ4pl+1p/4t3JtBA8J10Vvw==
|
||||
|
||||
"@types/pixelmatch@^5.2.4":
|
||||
version "5.2.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/pixelmatch/-/pixelmatch-5.2.4.tgz#ca145cc5ede1388c71c68edf2d1f5190e5ddd0f6"
|
||||
integrity sha512-HDaSHIAv9kwpMN7zlmwfTv6gax0PiporJOipcrGsVNF3Ba+kryOZc0Pio5pn6NhisgWr7TaajlPEKTbTAypIBQ==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/pngjs@^3.4.0":
|
||||
version "3.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/pngjs/-/pngjs-3.4.2.tgz#8dc49b45fbcf18a5873179e3664f049388e39ecf"
|
||||
|
@ -8209,6 +7926,13 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/set-value/-/set-value-2.0.0.tgz#63d386b103926dcf49b50e16e0f6dd49983046be"
|
||||
integrity sha512-k8dCJEC80F/mbsIOZ5Hj3YSzTVVVBwMdtP/M9Rtc2TM4F5etVd+2UG8QUiAUfbXm4fABedL2tBZnrBheY7UwpA==
|
||||
|
||||
"@types/sharp@^0.30.4":
|
||||
version "0.30.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.30.4.tgz#7430b5fcf37f35dd860112c4cf6dcd6a1ba0011b"
|
||||
integrity sha512-6oJEzKt7wZeS7e+6x9QFEOWGs0T/6of00+0onZGN1zSmcSjcTDZKgIGZ6YWJnHowpaKUCFBPH52mYljWqU32Eg==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/sinon@^7.0.13":
|
||||
version "7.0.13"
|
||||
resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.0.13.tgz#ca039c23a9e27ebea53e0901ef928ea2a1a6d313"
|
||||
|
@ -9220,11 +8944,6 @@ antlr4ts@^0.5.0-alpha.3:
|
|||
resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.3.tgz#fa6d39d88d6b96341a8afef45867af9abcb38766"
|
||||
integrity sha512-La89tKkGcHFIVuruv4Bm1esc3zLmES2NOTEwwNS1pudz+zx/0FNqQeUu9p48i9/QHKPVqjN87LB+q3buTg7oDQ==
|
||||
|
||||
any-base@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe"
|
||||
integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==
|
||||
|
||||
any-observable@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
|
||||
|
@ -9306,7 +9025,7 @@ append-transform@^2.0.0:
|
|||
dependencies:
|
||||
default-require-extensions "^3.0.0"
|
||||
|
||||
aproba@^1.0.3, "aproba@^1.0.3 || ^2.0.0", aproba@^1.1.1:
|
||||
"aproba@^1.0.3 || ^2.0.0", aproba@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
||||
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
|
||||
|
@ -9366,14 +9085,6 @@ are-we-there-yet@^3.0.0:
|
|||
delegates "^1.0.0"
|
||||
readable-stream "^3.6.0"
|
||||
|
||||
are-we-there-yet@~1.1.2:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
|
||||
integrity sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=
|
||||
dependencies:
|
||||
delegates "^1.0.0"
|
||||
readable-stream "^2.0.6"
|
||||
|
||||
arg@^4.1.0:
|
||||
version "4.1.3"
|
||||
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
|
||||
|
@ -10277,11 +9988,6 @@ bluebird@3.7.2, bluebird@^3.3.5, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5
|
|||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
||||
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
|
||||
|
||||
bmp-js@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233"
|
||||
integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM=
|
||||
|
||||
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.9:
|
||||
version "4.11.9"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
|
||||
|
@ -10692,7 +10398,7 @@ buffer@^4.3.0:
|
|||
ieee754 "^1.1.4"
|
||||
isarray "^1.0.0"
|
||||
|
||||
buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0:
|
||||
buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0:
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
|
||||
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
|
||||
|
@ -11510,7 +11216,7 @@ color@3.0.x:
|
|||
color-convert "^1.9.1"
|
||||
color-string "^1.5.2"
|
||||
|
||||
color@^4.2.1, color@^4.2.3:
|
||||
color@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a"
|
||||
integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==
|
||||
|
@ -11750,7 +11456,7 @@ console-browserify@^1.1.0:
|
|||
dependencies:
|
||||
date-now "^0.1.4"
|
||||
|
||||
console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0:
|
||||
console-control-strings@^1.0.0, console-control-strings@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
|
||||
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
|
||||
|
@ -14738,11 +14444,6 @@ executable@^4.1.1:
|
|||
dependencies:
|
||||
pify "^2.2.0"
|
||||
|
||||
exif-parser@^0.1.12:
|
||||
version "0.1.12"
|
||||
resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922"
|
||||
integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=
|
||||
|
||||
exit-hook@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-2.2.0.tgz#f5502f92179018e867f2d8ee4428392da7f3894e"
|
||||
|
@ -15206,16 +14907,6 @@ file-system-cache@^1.0.5:
|
|||
fs-extra "^0.30.0"
|
||||
ramda "^0.21.0"
|
||||
|
||||
file-type@^10.9.0:
|
||||
version "10.9.0"
|
||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-10.9.0.tgz#f6c12c7cb9e6b8aeefd6917555fd4f9eadf31891"
|
||||
integrity sha512-9C5qtGR/fNibHC5gzuMmmgnjH3QDDLKMa8lYe9CiZVmAnI4aUaoMh40QyUPzzs0RYo837SOBKh7TYwle4G8E4w==
|
||||
|
||||
file-type@^9.0.0:
|
||||
version "9.0.0"
|
||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18"
|
||||
integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==
|
||||
|
||||
filelist@^1.0.1:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
|
||||
|
@ -15750,20 +15441,6 @@ gauge@^4.0.0:
|
|||
strip-ansi "^6.0.1"
|
||||
wide-align "^1.1.5"
|
||||
|
||||
gauge@~2.7.3:
|
||||
version "2.7.4"
|
||||
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
|
||||
integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
|
||||
dependencies:
|
||||
aproba "^1.0.3"
|
||||
console-control-strings "^1.0.0"
|
||||
has-unicode "^2.0.0"
|
||||
object-assign "^4.1.0"
|
||||
signal-exit "^3.0.0"
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
wide-align "^1.1.0"
|
||||
|
||||
gaze@^1.0.0:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
|
||||
|
@ -15934,14 +15611,6 @@ gif-encoder@~0.4.1:
|
|||
dependencies:
|
||||
readable-stream "~1.1.9"
|
||||
|
||||
gifwrap@^0.9.2:
|
||||
version "0.9.2"
|
||||
resolved "https://registry.yarnpkg.com/gifwrap/-/gifwrap-0.9.2.tgz#348e286e67d7cf57942172e1e6f05a71cee78489"
|
||||
integrity sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA==
|
||||
dependencies:
|
||||
image-q "^1.1.1"
|
||||
omggif "^1.0.10"
|
||||
|
||||
git-hooks-list@1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-1.0.3.tgz#be5baaf78203ce342f2f844a9d2b03dba1b45156"
|
||||
|
@ -16123,14 +15792,6 @@ global@^4.3.1, global@^4.4.0:
|
|||
min-document "^2.19.0"
|
||||
process "^0.11.10"
|
||||
|
||||
global@~4.3.0:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
|
||||
integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=
|
||||
dependencies:
|
||||
min-document "^2.19.0"
|
||||
process "~0.5.1"
|
||||
|
||||
globals@^11.1.0, globals@^11.12.0:
|
||||
version "11.12.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||
|
@ -16551,7 +16212,7 @@ has-tostringtag@^1.0.0:
|
|||
dependencies:
|
||||
has-symbols "^1.0.2"
|
||||
|
||||
has-unicode@^2.0.0, has-unicode@^2.0.1:
|
||||
has-unicode@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
|
||||
integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
|
||||
|
@ -17206,11 +16867,6 @@ ignore@^5.0.5, ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8, ignore@^5.2.0:
|
|||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
|
||||
integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
|
||||
|
||||
image-q@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz#fc84099664460b90ca862d9300b6bfbbbfbf8056"
|
||||
integrity sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=
|
||||
|
||||
image-size@^0.8.2:
|
||||
version "0.8.3"
|
||||
resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.8.3.tgz#f0b568857e034f29baffd37013587f2c0cad8b46"
|
||||
|
@ -17727,7 +17383,7 @@ is-fullwidth-code-point@^3.0.0:
|
|||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
|
||||
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
|
||||
|
||||
is-function@^1.0.1, is-function@^1.0.2:
|
||||
is-function@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08"
|
||||
integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==
|
||||
|
@ -18927,17 +18583,6 @@ jest@^26.6.3:
|
|||
import-local "^3.0.2"
|
||||
jest-cli "^26.6.3"
|
||||
|
||||
jimp@^0.14.0:
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.14.0.tgz#fde55f69bdb918c1b01ac633d89a25853af85625"
|
||||
integrity sha512-8BXU+J8+SPmwwyq9ELihpSV4dWPTiOKBWCEgtkbnxxAVMjXdf3yGmyaLSshBfXc8sP/JQ9OZj5R8nZzz2wPXgA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/custom" "^0.14.0"
|
||||
"@jimp/plugins" "^0.14.0"
|
||||
"@jimp/types" "^0.14.0"
|
||||
regenerator-runtime "^0.13.3"
|
||||
|
||||
joi@*, joi@^17.3.0, joi@^17.4.0:
|
||||
version "17.4.0"
|
||||
resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.0.tgz#b5c2277c8519e016316e49ababd41a1908d9ef20"
|
||||
|
@ -18959,7 +18604,7 @@ jpeg-js@^0.3.2:
|
|||
resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.7.tgz#471a89d06011640592d314158608690172b1028d"
|
||||
integrity sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==
|
||||
|
||||
jpeg-js@^0.4.0, jpeg-js@^0.4.2:
|
||||
jpeg-js@^0.4.2:
|
||||
version "0.4.3"
|
||||
resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.3.tgz#6158e09f1983ad773813704be80680550eff977b"
|
||||
integrity sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==
|
||||
|
@ -19040,7 +18685,7 @@ jsbn@~0.1.0:
|
|||
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
|
||||
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
|
||||
|
||||
jsdom@13.1.0, jsdom@^13.0.0:
|
||||
jsdom@^13.0.0:
|
||||
version "13.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-13.1.0.tgz#fa7356f0cc8111d0f1077cb7800d06f22f1d66c7"
|
||||
integrity sha512-C2Kp0qNuopw0smXFaHeayvharqF3kkcNqlcIlSX71+3XrsOFwkEPLt/9f5JksMmaul2JZYIQuY+WTpqHpQQcLg==
|
||||
|
@ -19139,10 +18784,10 @@ json-schema-traverse@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
|
||||
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
|
||||
|
||||
json-schema-typed@^7.0.3:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9"
|
||||
integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==
|
||||
json-schema-typed@^8.0.1:
|
||||
version "8.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-8.0.1.tgz#826ee39e3b6cef536f85412ff048d3ff6f19dfa0"
|
||||
integrity sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==
|
||||
|
||||
json-schema@0.2.3, json-schema@0.4.0, json-schema@^0.4.0:
|
||||
version "0.4.0"
|
||||
|
@ -19664,20 +19309,6 @@ lmdb-store@^1.6.11:
|
|||
optionalDependencies:
|
||||
msgpackr "^1.4.7"
|
||||
|
||||
load-bmfont@^1.3.1, load-bmfont@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b"
|
||||
integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==
|
||||
dependencies:
|
||||
buffer-equal "0.0.1"
|
||||
mime "^1.3.4"
|
||||
parse-bmfont-ascii "^1.0.3"
|
||||
parse-bmfont-binary "^1.0.5"
|
||||
parse-bmfont-xml "^1.1.4"
|
||||
phin "^2.9.1"
|
||||
xhr "^2.0.1"
|
||||
xtend "^4.0.0"
|
||||
|
||||
load-json-file@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
|
||||
|
@ -20566,7 +20197,7 @@ mime-types@^2.0.1, mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, m
|
|||
dependencies:
|
||||
mime-db "1.51.0"
|
||||
|
||||
mime@1.6.0, mime@^1.3.4, mime@^1.4.1:
|
||||
mime@1.6.0, mime@^1.4.1:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
|
||||
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
|
||||
|
@ -21174,10 +20805,10 @@ node-abi@^3.3.0:
|
|||
dependencies:
|
||||
semver "^7.3.5"
|
||||
|
||||
node-addon-api@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
|
||||
integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==
|
||||
node-addon-api@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.0.0.tgz#7d7e6f9ef89043befdb20c1989c905ebde18c501"
|
||||
integrity sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==
|
||||
|
||||
node-bitmap@0.0.1:
|
||||
version "0.0.1"
|
||||
|
@ -21441,16 +21072,6 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1:
|
|||
dependencies:
|
||||
path-key "^3.0.0"
|
||||
|
||||
npmlog@^4.0.1:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
|
||||
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
|
||||
dependencies:
|
||||
are-we-there-yet "~1.1.2"
|
||||
console-control-strings "~1.1.0"
|
||||
gauge "~2.7.3"
|
||||
set-blocking "~2.0.0"
|
||||
|
||||
npmlog@^5.0.0, npmlog@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0"
|
||||
|
@ -21728,7 +21349,7 @@ octokit-pagination-methods@^1.1.0:
|
|||
resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4"
|
||||
integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==
|
||||
|
||||
omggif@^1.0.10, omggif@^1.0.5, omggif@^1.0.9:
|
||||
omggif@^1.0.5:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19"
|
||||
integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==
|
||||
|
@ -22118,7 +21739,7 @@ pako@^0.2.5:
|
|||
resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
|
||||
integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
|
||||
|
||||
pako@^1.0.3, pako@^1.0.5, pako@~1.0.2, pako@~1.0.5:
|
||||
pako@^1.0.3, pako@~1.0.2, pako@~1.0.5:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
|
||||
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
|
||||
|
@ -22175,24 +21796,6 @@ parse-asn1@^5.0.0:
|
|||
evp_bytestokey "^1.0.0"
|
||||
pbkdf2 "^3.0.3"
|
||||
|
||||
parse-bmfont-ascii@^1.0.3:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285"
|
||||
integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=
|
||||
|
||||
parse-bmfont-binary@^1.0.5:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006"
|
||||
integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=
|
||||
|
||||
parse-bmfont-xml@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389"
|
||||
integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==
|
||||
dependencies:
|
||||
xml-parse-from-string "^1.0.0"
|
||||
xml2js "^0.4.5"
|
||||
|
||||
parse-data-uri@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-data-uri/-/parse-data-uri-0.2.0.tgz#bf04d851dd5c87b0ab238e5d01ace494b604b4c9"
|
||||
|
@ -22233,11 +21836,6 @@ parse-filepath@^1.0.1:
|
|||
map-cache "^0.2.0"
|
||||
path-root "^0.1.1"
|
||||
|
||||
parse-headers@^2.0.0:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9"
|
||||
integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==
|
||||
|
||||
parse-json@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
|
||||
|
@ -22509,11 +22107,6 @@ performance-now@^2.1.0:
|
|||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
||||
|
||||
phin@^2.9.1:
|
||||
version "2.9.3"
|
||||
resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c"
|
||||
integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==
|
||||
|
||||
picocolors@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
|
||||
|
@ -22578,12 +22171,12 @@ pirates@^4.0.1, pirates@^4.0.5:
|
|||
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
|
||||
integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
|
||||
|
||||
pixelmatch@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
|
||||
integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=
|
||||
pixelmatch@^5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-5.3.0.tgz#5e5321a7abedfb7962d60dbf345deda87cb9560a"
|
||||
integrity sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==
|
||||
dependencies:
|
||||
pngjs "^3.0.0"
|
||||
pngjs "^6.0.0"
|
||||
|
||||
pkg-dir@4.2.0, pkg-dir@^4.1.0, pkg-dir@^4.2.0:
|
||||
version "4.2.0"
|
||||
|
@ -22718,7 +22311,7 @@ pngjs-nozlib@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/pngjs-nozlib/-/pngjs-nozlib-1.0.0.tgz#9e64d602cfe9cce4d9d5997d0687429a73f0b7d7"
|
||||
integrity sha1-nmTWAs/pzOTZ1Zl9BodCmnPwt9c=
|
||||
|
||||
pngjs@^3.0.0, pngjs@^3.3.3, pngjs@^3.4.0:
|
||||
pngjs@^3.3.3, pngjs@^3.4.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
|
||||
integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
|
||||
|
@ -22728,6 +22321,11 @@ pngjs@^5.0.0:
|
|||
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb"
|
||||
integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==
|
||||
|
||||
pngjs@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821"
|
||||
integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==
|
||||
|
||||
pnp-webpack-plugin@1.6.4:
|
||||
version "1.6.4"
|
||||
resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149"
|
||||
|
@ -23087,10 +22685,10 @@ preact-render-to-string@^5.1.19:
|
|||
dependencies:
|
||||
pretty-format "^3.8.0"
|
||||
|
||||
prebuild-install@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.0.1.tgz#c10075727c318efe72412f333e0ef625beaf3870"
|
||||
integrity sha512-QBSab31WqkyxpnMWQxubYAHR5S9B2+r81ucocew34Fkl98FhvKIF50jIJnNOBmAZfyNV7vE5T6gd3hTVWgY6tg==
|
||||
prebuild-install@^7.1.1:
|
||||
version "7.1.1"
|
||||
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45"
|
||||
integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==
|
||||
dependencies:
|
||||
detect-libc "^2.0.0"
|
||||
expand-template "^2.0.3"
|
||||
|
@ -23099,7 +22697,6 @@ prebuild-install@^7.0.1:
|
|||
mkdirp-classic "^0.5.3"
|
||||
napi-build-utils "^1.0.1"
|
||||
node-abi "^3.3.0"
|
||||
npmlog "^4.0.1"
|
||||
pump "^3.0.0"
|
||||
rc "^1.2.7"
|
||||
simple-get "^4.0.0"
|
||||
|
@ -23246,11 +22843,6 @@ process@^0.11.10, process@~0.11.0:
|
|||
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
||||
integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
|
||||
|
||||
process@~0.5.1:
|
||||
version "0.5.2"
|
||||
resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
|
||||
integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=
|
||||
|
||||
progress@2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.1.tgz#c9242169342b1c29d275889c95734621b1952e31"
|
||||
|
@ -24521,7 +24113,7 @@ read-pkg@^5.2.0:
|
|||
parse-json "^5.0.0"
|
||||
type-fest "^0.6.0"
|
||||
|
||||
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@~2.3.3, readable-stream@~2.3.6:
|
||||
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@~2.3.3, readable-stream@~2.3.6:
|
||||
version "2.3.7"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
||||
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
|
||||
|
@ -24744,11 +24336,16 @@ regenerator-runtime@^0.11.0:
|
|||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
|
||||
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
|
||||
|
||||
regenerator-runtime@^0.13.1, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7:
|
||||
regenerator-runtime@^0.13.1, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7:
|
||||
version "0.13.7"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
|
||||
integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
|
||||
|
||||
regenerator-runtime@^0.13.3:
|
||||
version "0.13.9"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
|
||||
integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
|
||||
|
||||
regenerator-transform@^0.15.0:
|
||||
version "0.15.0"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537"
|
||||
|
@ -25734,6 +25331,13 @@ semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@~7.3.2:
|
|||
dependencies:
|
||||
lru-cache "^6.0.0"
|
||||
|
||||
semver@^7.3.7:
|
||||
version "7.3.7"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
|
||||
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
|
||||
dependencies:
|
||||
lru-cache "^6.0.0"
|
||||
|
||||
send@0.17.2:
|
||||
version "0.17.2"
|
||||
resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820"
|
||||
|
@ -25808,7 +25412,7 @@ serve-static@1.14.2:
|
|||
parseurl "~1.3.3"
|
||||
send "0.17.2"
|
||||
|
||||
set-blocking@^2.0.0, set-blocking@~2.0.0:
|
||||
set-blocking@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
|
||||
|
@ -25894,15 +25498,15 @@ shallowequal@^1.1.0:
|
|||
integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
|
||||
|
||||
sharp@^0.30.1:
|
||||
version "0.30.3"
|
||||
resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.3.tgz#315a1817423a4d1cde5119a21c99c234a7a6fb37"
|
||||
integrity sha512-rjpfJFK58ZOFSG8sxYSo3/JQb4ej095HjXp9X7gVu7gEn1aqSG8TCW29h/Rr31+PXrFADo1H/vKfw0uhMQWFtg==
|
||||
version "0.30.7"
|
||||
resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.7.tgz#7862bda98804fdd1f0d5659c85e3324b90d94c7c"
|
||||
integrity sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==
|
||||
dependencies:
|
||||
color "^4.2.1"
|
||||
color "^4.2.3"
|
||||
detect-libc "^2.0.1"
|
||||
node-addon-api "^4.3.0"
|
||||
prebuild-install "^7.0.1"
|
||||
semver "^7.3.5"
|
||||
node-addon-api "^5.0.0"
|
||||
prebuild-install "^7.1.1"
|
||||
semver "^7.3.7"
|
||||
simple-get "^4.0.1"
|
||||
tar-fs "^2.1.1"
|
||||
tunnel-agent "^0.6.0"
|
||||
|
@ -27507,11 +27111,6 @@ timers-ext@^0.1.5:
|
|||
es5-ext "~0.10.46"
|
||||
next-tick "1"
|
||||
|
||||
timm@^1.6.1:
|
||||
version "1.6.1"
|
||||
resolved "https://registry.yarnpkg.com/timm/-/timm-1.6.1.tgz#5f8aafc932248c76caf2c6af60542a32d3c30701"
|
||||
integrity sha512-hqDTYi/bWuDxL2i6T3v6nrvkAQ/1Bc060GSkVEQZp02zTSTB4CHSKsOkliequCftQaNRcjRqUZmpGWs5FfhrNg==
|
||||
|
||||
tiny-inflate@^1.0.0, tiny-inflate@^1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4"
|
||||
|
@ -28573,13 +28172,6 @@ usng.js@^0.4.5:
|
|||
resolved "https://registry.yarnpkg.com/usng.js/-/usng.js-0.4.5.tgz#49301e131baa9f7f7ab36c0539472c1aa1ecdae7"
|
||||
integrity sha512-JTJcFFDy/JqA5iiU8DqMOV5gJiL3ZdXH0hCKYaRMDbbredhFna5Ok4C1YDFU07mTGAgm+5FzHaaOzQnO/3BzWQ==
|
||||
|
||||
utif@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759"
|
||||
integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==
|
||||
dependencies:
|
||||
pako "^1.0.5"
|
||||
|
||||
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
|
@ -29662,7 +29254,7 @@ which@^2.0.1, which@^2.0.2:
|
|||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5:
|
||||
wide-align@^1.1.2, wide-align@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
|
||||
integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
|
||||
|
@ -29887,16 +29479,6 @@ xdg-basedir@^4.0.0:
|
|||
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
|
||||
integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
|
||||
|
||||
xhr@^2.0.1:
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.4.1.tgz#ba982cced205ae5eec387169ac9dc77ca4853d38"
|
||||
integrity sha512-pAIU5vBr9Hiy5cpFIbPnwf0C18ZF86DBsZKrlsf87N5De/JbA6RJ83UP/cv+aljl4S40iRVMqP4pr4sF9Dnj0A==
|
||||
dependencies:
|
||||
global "~4.3.0"
|
||||
is-function "^1.0.1"
|
||||
parse-headers "^2.0.0"
|
||||
xtend "^4.0.0"
|
||||
|
||||
xml-crypto@^2.1.4:
|
||||
version "2.1.4"
|
||||
resolved "https://registry.yarnpkg.com/xml-crypto/-/xml-crypto-2.1.4.tgz#85b3c62fa0debc4956ee72cb2dfee65651e865b5"
|
||||
|
@ -29910,12 +29492,7 @@ xml-name-validator@^3.0.0:
|
|||
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
|
||||
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
|
||||
|
||||
xml-parse-from-string@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28"
|
||||
integrity sha1-qQKekp09vN7RafPG4oI42VpdWig=
|
||||
|
||||
xml2js@^0.4.22, xml2js@^0.4.5:
|
||||
xml2js@^0.4.22:
|
||||
version "0.4.22"
|
||||
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02"
|
||||
integrity sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==
|
||||
|
|