diff --git a/.gitignore b/.gitignore index adc999617..594840e2f 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,4 @@ yarn-error.log* report.* *.swp *.swo -*~ +*~ \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e2abbb4b4..645f2d50b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -61,6 +61,18 @@ yarn build-editor yarn preview ``` +## Visual Regression + +To test if your changes make a difference visually across a large number of specifications, you can use the `yarn screenshot` command. +``` bash +yarn build # needed to get the latest gosling build +yarn screenshot # takes screenshots of all of the example specs and puts them in img/visual-regression/new-screenshots +yarn update-ref-screenshots # update the reference screenshots with your new screenshots +``` +This command will use `dist/gosling.js` in a headless browser (using puppeteer) and take a screenshot of the visualization that is included in the editor. +It will save these screenshots in `img/visual-regression/new-screenshots`. If there is a difference compared to the screenshots in `img/visual-regression/reference-screenshots` +it will show the differences in an image in `img/visual-regression/diffs`. + ## Editing `gosling.js/embed` This repo also contains the source code for `gosling.js/embed`, an ES Module intended to be diff --git a/img/visual-regression/diffs/.gitignore b/img/visual-regression/diffs/.gitignore new file mode 100644 index 000000000..86d0cb272 --- /dev/null +++ b/img/visual-regression/diffs/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore \ No newline at end of file diff --git a/img/visual-regression/new-screenshots/.gitignore b/img/visual-regression/new-screenshots/.gitignore new file mode 100644 index 000000000..86d0cb272 --- /dev/null +++ b/img/visual-regression/new-screenshots/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore \ No newline at end of file diff --git a/img/visual-regression/screenshots/ALIGNMENT.png b/img/visual-regression/screenshots/ALIGNMENT.png new file mode 100644 index 000000000..c8b5c8ff5 Binary files /dev/null and b/img/visual-regression/screenshots/ALIGNMENT.png differ diff --git a/img/visual-regression/screenshots/BAM_PILEUP.png b/img/visual-regression/screenshots/BAM_PILEUP.png new file mode 100644 index 000000000..ab9ddbca6 Binary files /dev/null and b/img/visual-regression/screenshots/BAM_PILEUP.png differ diff --git a/img/visual-regression/screenshots/BAND.png b/img/visual-regression/screenshots/BAND.png new file mode 100644 index 000000000..577e83826 Binary files /dev/null and b/img/visual-regression/screenshots/BAND.png differ diff --git a/img/visual-regression/screenshots/BASIC_SEMANTIC_ZOOM.png b/img/visual-regression/screenshots/BASIC_SEMANTIC_ZOOM.png new file mode 100644 index 000000000..422b9b734 Binary files /dev/null and b/img/visual-regression/screenshots/BASIC_SEMANTIC_ZOOM.png differ diff --git a/img/visual-regression/screenshots/CANCER_VARIANT.png b/img/visual-regression/screenshots/CANCER_VARIANT.png new file mode 100644 index 000000000..3d6de568f Binary files /dev/null and b/img/visual-regression/screenshots/CANCER_VARIANT.png differ diff --git a/img/visual-regression/screenshots/CIRCOS.png b/img/visual-regression/screenshots/CIRCOS.png new file mode 100644 index 000000000..f99a4cb61 Binary files /dev/null and b/img/visual-regression/screenshots/CIRCOS.png differ diff --git a/img/visual-regression/screenshots/CIRCULAR_BETWEEN_BANDS.png b/img/visual-regression/screenshots/CIRCULAR_BETWEEN_BANDS.png new file mode 100644 index 000000000..8bc4785cb Binary files /dev/null and b/img/visual-regression/screenshots/CIRCULAR_BETWEEN_BANDS.png differ diff --git a/img/visual-regression/screenshots/CIRCULAR_OVERVIEW_LINEAR_DETAIL.png b/img/visual-regression/screenshots/CIRCULAR_OVERVIEW_LINEAR_DETAIL.png new file mode 100644 index 000000000..5a112528c Binary files /dev/null and b/img/visual-regression/screenshots/CIRCULAR_OVERVIEW_LINEAR_DETAIL.png differ diff --git a/img/visual-regression/screenshots/CORCES_ET_AL.png b/img/visual-regression/screenshots/CORCES_ET_AL.png new file mode 100644 index 000000000..641199556 Binary files /dev/null and b/img/visual-regression/screenshots/CORCES_ET_AL.png differ diff --git a/img/visual-regression/screenshots/CYTOBANDS.png b/img/visual-regression/screenshots/CYTOBANDS.png new file mode 100644 index 000000000..be470beb7 Binary files /dev/null and b/img/visual-regression/screenshots/CYTOBANDS.png differ diff --git a/img/visual-regression/screenshots/Circular Range.png b/img/visual-regression/screenshots/Circular Range.png new file mode 100644 index 000000000..d60808c68 Binary files /dev/null and b/img/visual-regression/screenshots/Circular Range.png differ diff --git a/img/visual-regression/screenshots/DEBUG.png b/img/visual-regression/screenshots/DEBUG.png new file mode 100644 index 000000000..0f633e715 Binary files /dev/null and b/img/visual-regression/screenshots/DEBUG.png differ diff --git a/img/visual-regression/screenshots/GENE_ANNOTATION.png b/img/visual-regression/screenshots/GENE_ANNOTATION.png new file mode 100644 index 000000000..6cad457ea Binary files /dev/null and b/img/visual-regression/screenshots/GENE_ANNOTATION.png differ diff --git a/img/visual-regression/screenshots/GIVE.png b/img/visual-regression/screenshots/GIVE.png new file mode 100644 index 000000000..4a30b3564 Binary files /dev/null and b/img/visual-regression/screenshots/GIVE.png differ diff --git a/img/visual-regression/screenshots/GREMLIN.png b/img/visual-regression/screenshots/GREMLIN.png new file mode 100644 index 000000000..8093da89b Binary files /dev/null and b/img/visual-regression/screenshots/GREMLIN.png differ diff --git a/img/visual-regression/screenshots/ISLANDVIEWER.png b/img/visual-regression/screenshots/ISLANDVIEWER.png new file mode 100644 index 000000000..c3d50d0b9 Binary files /dev/null and b/img/visual-regression/screenshots/ISLANDVIEWER.png differ diff --git a/img/visual-regression/screenshots/LAYOUT_AND_ARRANGEMENT_1.png b/img/visual-regression/screenshots/LAYOUT_AND_ARRANGEMENT_1.png new file mode 100644 index 000000000..f54d4c220 Binary files /dev/null and b/img/visual-regression/screenshots/LAYOUT_AND_ARRANGEMENT_1.png differ diff --git a/img/visual-regression/screenshots/LAYOUT_AND_ARRANGEMENT_2.png b/img/visual-regression/screenshots/LAYOUT_AND_ARRANGEMENT_2.png new file mode 100644 index 000000000..38221b763 Binary files /dev/null and b/img/visual-regression/screenshots/LAYOUT_AND_ARRANGEMENT_2.png differ diff --git a/img/visual-regression/screenshots/LINKING.png b/img/visual-regression/screenshots/LINKING.png new file mode 100644 index 000000000..d0a585c91 Binary files /dev/null and b/img/visual-regression/screenshots/LINKING.png differ diff --git a/img/visual-regression/screenshots/MARK_DISPLACEMENT.png b/img/visual-regression/screenshots/MARK_DISPLACEMENT.png new file mode 100644 index 000000000..788b75e70 Binary files /dev/null and b/img/visual-regression/screenshots/MARK_DISPLACEMENT.png differ diff --git a/img/visual-regression/screenshots/MATRIX.png b/img/visual-regression/screenshots/MATRIX.png new file mode 100644 index 000000000..32c972d8d Binary files /dev/null and b/img/visual-regression/screenshots/MATRIX.png differ diff --git a/img/visual-regression/screenshots/MATRIX_HFFC6.png b/img/visual-regression/screenshots/MATRIX_HFFC6.png new file mode 100644 index 000000000..b01fb255c Binary files /dev/null and b/img/visual-regression/screenshots/MATRIX_HFFC6.png differ diff --git a/img/visual-regression/screenshots/MOUSE_EVENT.png b/img/visual-regression/screenshots/MOUSE_EVENT.png new file mode 100644 index 000000000..ee206df0f Binary files /dev/null and b/img/visual-regression/screenshots/MOUSE_EVENT.png differ diff --git a/img/visual-regression/screenshots/RESPONSIVE_ALIGNMENT.png b/img/visual-regression/screenshots/RESPONSIVE_ALIGNMENT.png new file mode 100644 index 000000000..c8b5c8ff5 Binary files /dev/null and b/img/visual-regression/screenshots/RESPONSIVE_ALIGNMENT.png differ diff --git a/img/visual-regression/screenshots/RESPONSIVE_COMPARATIVE_MATRICES.png b/img/visual-regression/screenshots/RESPONSIVE_COMPARATIVE_MATRICES.png new file mode 100644 index 000000000..496c634b6 Binary files /dev/null and b/img/visual-regression/screenshots/RESPONSIVE_COMPARATIVE_MATRICES.png differ diff --git a/img/visual-regression/screenshots/RESPONSIVE_COMPARATIVE_VIEWS.png b/img/visual-regression/screenshots/RESPONSIVE_COMPARATIVE_VIEWS.png new file mode 100644 index 000000000..55a469e91 Binary files /dev/null and b/img/visual-regression/screenshots/RESPONSIVE_COMPARATIVE_VIEWS.png differ diff --git a/img/visual-regression/screenshots/RESPONSIVE_IDEOGRAM.png b/img/visual-regression/screenshots/RESPONSIVE_IDEOGRAM.png new file mode 100644 index 000000000..42ec0f2b5 Binary files /dev/null and b/img/visual-regression/screenshots/RESPONSIVE_IDEOGRAM.png differ diff --git a/img/visual-regression/screenshots/RESPONSIVE_MULTIVEC.png b/img/visual-regression/screenshots/RESPONSIVE_MULTIVEC.png new file mode 100644 index 000000000..7e830d558 Binary files /dev/null and b/img/visual-regression/screenshots/RESPONSIVE_MULTIVEC.png differ diff --git a/img/visual-regression/screenshots/RESPONSIVE_MULTIVEC_CIRCULAR.png b/img/visual-regression/screenshots/RESPONSIVE_MULTIVEC_CIRCULAR.png new file mode 100644 index 000000000..6bce210a5 Binary files /dev/null and b/img/visual-regression/screenshots/RESPONSIVE_MULTIVEC_CIRCULAR.png differ diff --git a/img/visual-regression/screenshots/RESPONSIVE_TRACK_WISE_COMPARISON.png b/img/visual-regression/screenshots/RESPONSIVE_TRACK_WISE_COMPARISON.png new file mode 100644 index 000000000..e631be014 Binary files /dev/null and b/img/visual-regression/screenshots/RESPONSIVE_TRACK_WISE_COMPARISON.png differ diff --git a/img/visual-regression/screenshots/RULE.png b/img/visual-regression/screenshots/RULE.png new file mode 100644 index 000000000..695fbcdef Binary files /dev/null and b/img/visual-regression/screenshots/RULE.png differ diff --git a/img/visual-regression/screenshots/SARS_COV_2.png b/img/visual-regression/screenshots/SARS_COV_2.png new file mode 100644 index 000000000..13dc5b572 Binary files /dev/null and b/img/visual-regression/screenshots/SARS_COV_2.png differ diff --git a/img/visual-regression/screenshots/SASHIMI_PLOT.png b/img/visual-regression/screenshots/SASHIMI_PLOT.png new file mode 100644 index 000000000..9a14db1dc Binary files /dev/null and b/img/visual-regression/screenshots/SASHIMI_PLOT.png differ diff --git a/img/visual-regression/screenshots/SEMANTIC_ZOOM.png b/img/visual-regression/screenshots/SEMANTIC_ZOOM.png new file mode 100644 index 000000000..726d9dc97 Binary files /dev/null and b/img/visual-regression/screenshots/SEMANTIC_ZOOM.png differ diff --git a/img/visual-regression/screenshots/SEQUENCE.png b/img/visual-regression/screenshots/SEQUENCE.png new file mode 100644 index 000000000..01fc9f69a Binary files /dev/null and b/img/visual-regression/screenshots/SEQUENCE.png differ diff --git a/img/visual-regression/screenshots/TEMPLATE.png b/img/visual-regression/screenshots/TEMPLATE.png new file mode 100644 index 000000000..2bef919ea Binary files /dev/null and b/img/visual-regression/screenshots/TEMPLATE.png differ diff --git a/img/visual-regression/screenshots/VISUAL_ENCODING.png b/img/visual-regression/screenshots/VISUAL_ENCODING.png new file mode 100644 index 000000000..632644039 Binary files /dev/null and b/img/visual-regression/screenshots/VISUAL_ENCODING.png differ diff --git a/img/visual-regression/screenshots/VISUAL_ENCODING_CIRCULAR.png b/img/visual-regression/screenshots/VISUAL_ENCODING_CIRCULAR.png new file mode 100644 index 000000000..3ea244df7 Binary files /dev/null and b/img/visual-regression/screenshots/VISUAL_ENCODING_CIRCULAR.png differ diff --git a/img/visual-regression/screenshots/doc_area.png b/img/visual-regression/screenshots/doc_area.png new file mode 100644 index 000000000..c3d50d0b9 Binary files /dev/null and b/img/visual-regression/screenshots/doc_area.png differ diff --git a/img/visual-regression/screenshots/doc_bar.png b/img/visual-regression/screenshots/doc_bar.png new file mode 100644 index 000000000..880e54a55 Binary files /dev/null and b/img/visual-regression/screenshots/doc_bar.png differ diff --git a/img/visual-regression/screenshots/doc_bed.png b/img/visual-regression/screenshots/doc_bed.png new file mode 100644 index 000000000..8310ee495 Binary files /dev/null and b/img/visual-regression/screenshots/doc_bed.png differ diff --git a/img/visual-regression/screenshots/doc_brush.png b/img/visual-regression/screenshots/doc_brush.png new file mode 100644 index 000000000..bd8e02ecd Binary files /dev/null and b/img/visual-regression/screenshots/doc_brush.png differ diff --git a/img/visual-regression/screenshots/doc_dummy_track.png b/img/visual-regression/screenshots/doc_dummy_track.png new file mode 100644 index 000000000..855d378cd Binary files /dev/null and b/img/visual-regression/screenshots/doc_dummy_track.png differ diff --git a/img/visual-regression/screenshots/doc_gff.png b/img/visual-regression/screenshots/doc_gff.png new file mode 100644 index 000000000..eed4e40ba Binary files /dev/null and b/img/visual-regression/screenshots/doc_gff.png differ diff --git a/img/visual-regression/screenshots/doc_line.png b/img/visual-regression/screenshots/doc_line.png new file mode 100644 index 000000000..ee153e3e8 Binary files /dev/null and b/img/visual-regression/screenshots/doc_line.png differ diff --git a/img/visual-regression/screenshots/doc_link.png b/img/visual-regression/screenshots/doc_link.png new file mode 100644 index 000000000..0d642fd81 Binary files /dev/null and b/img/visual-regression/screenshots/doc_link.png differ diff --git a/img/visual-regression/screenshots/doc_linking_tracks.png b/img/visual-regression/screenshots/doc_linking_tracks.png new file mode 100644 index 000000000..b570deb2c Binary files /dev/null and b/img/visual-regression/screenshots/doc_linking_tracks.png differ diff --git a/img/visual-regression/screenshots/doc_overlay_bar_point.png b/img/visual-regression/screenshots/doc_overlay_bar_point.png new file mode 100644 index 000000000..63e2f137c Binary files /dev/null and b/img/visual-regression/screenshots/doc_overlay_bar_point.png differ diff --git a/img/visual-regression/screenshots/doc_overlay_line_point.png b/img/visual-regression/screenshots/doc_overlay_line_point.png new file mode 100644 index 000000000..628a01405 Binary files /dev/null and b/img/visual-regression/screenshots/doc_overlay_line_point.png differ diff --git a/img/visual-regression/screenshots/doc_overlay_rect_text.png b/img/visual-regression/screenshots/doc_overlay_rect_text.png new file mode 100644 index 000000000..afb63e517 Binary files /dev/null and b/img/visual-regression/screenshots/doc_overlay_rect_text.png differ diff --git a/img/visual-regression/screenshots/doc_point.png b/img/visual-regression/screenshots/doc_point.png new file mode 100644 index 000000000..9c7752a7b Binary files /dev/null and b/img/visual-regression/screenshots/doc_point.png differ diff --git a/img/visual-regression/screenshots/doc_rect.png b/img/visual-regression/screenshots/doc_rect.png new file mode 100644 index 000000000..731a99468 Binary files /dev/null and b/img/visual-regression/screenshots/doc_rect.png differ diff --git a/img/visual-regression/screenshots/doc_semantic_zoom_cyto.png b/img/visual-regression/screenshots/doc_semantic_zoom_cyto.png new file mode 100644 index 000000000..c0ae5322d Binary files /dev/null and b/img/visual-regression/screenshots/doc_semantic_zoom_cyto.png differ diff --git a/img/visual-regression/screenshots/doc_semantic_zoom_sequence.png b/img/visual-regression/screenshots/doc_semantic_zoom_sequence.png new file mode 100644 index 000000000..a484291ef Binary files /dev/null and b/img/visual-regression/screenshots/doc_semantic_zoom_sequence.png differ diff --git a/img/visual-regression/screenshots/doc_text.png b/img/visual-regression/screenshots/doc_text.png new file mode 100644 index 000000000..274cdb70e Binary files /dev/null and b/img/visual-regression/screenshots/doc_text.png differ diff --git a/img/visual-regression/screenshots/doc_triangle.png b/img/visual-regression/screenshots/doc_triangle.png new file mode 100644 index 000000000..f0bc36089 Binary files /dev/null and b/img/visual-regression/screenshots/doc_triangle.png differ diff --git a/img/visual-regression/screenshots/doc_vcf_indels.png b/img/visual-regression/screenshots/doc_vcf_indels.png new file mode 100644 index 000000000..8b80c22f3 Binary files /dev/null and b/img/visual-regression/screenshots/doc_vcf_indels.png differ diff --git a/img/visual-regression/screenshots/doc_vcf_point_mutations.png b/img/visual-regression/screenshots/doc_vcf_point_mutations.png new file mode 100644 index 000000000..5da37ebbc Binary files /dev/null and b/img/visual-regression/screenshots/doc_vcf_point_mutations.png differ diff --git a/img/visual-regression/visual-regression.test.ts b/img/visual-regression/visual-regression.test.ts new file mode 100644 index 000000000..1eac075bf --- /dev/null +++ b/img/visual-regression/visual-regression.test.ts @@ -0,0 +1,116 @@ +import puppeteer, { Page, Browser } from 'puppeteer'; +import { examples } from '../../editor/example'; +import * as fs from 'fs'; +import { beforeAll } from 'vitest'; + +import { PNG } from 'pngjs'; +import pixelmatch from 'pixelmatch'; + +function delay(time: number) { + return new Promise(resolve => { + setTimeout(resolve, time); + }); +} +// Based on https://github.com/hms-dbmi/chromoscope/blob/master/src/script/gosling-screenshot.js +function html( + spec: string, + gosling: string, + { reactVersion = '16', pixijsVersion = '6', higlassVersion = '1.11' } = {} +) { + const baseUrl = 'https://unpkg.com'; + return `\ + + + + + + + + + +
+ + +`; +} + +function readFile(filePath: string): Promise { + return new Promise((resolve, reject) => { + fs.readFile(filePath, 'utf8', (err, data) => { + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); +} + +/** + * Compares two PNG files and writes the difference to a third file if a difference is found + */ +function comparePNG(path1: string, path2: string, diffPath: string) { + const img1 = PNG.sync.read(fs.readFileSync(path1)); + const img2 = PNG.sync.read(fs.readFileSync(path2)); + const { width, height } = img1; + const diff = new PNG({ width, height }); + const pixeldifference = pixelmatch(img1.data, img2.data, diff.data, width, height, { threshold: 0.1 }); + // only write to file if there is a difference in the images + if (pixeldifference > 0) { + fs.writeFileSync(diffPath, PNG.sync.write(diff)); + } +} + +let browser: Browser; +let page: Page; +let currentGosling: string; + +/** + * Setup the browser and page + */ + +beforeAll(async () => { + currentGosling = await readFile('./dist/gosling.js'); + browser = await puppeteer.launch({ + headless: true, + devtools: true, + args: ['--use-gl=swiftshader'] // necessary for canvas to not be blank in the screenshot + }); + page = await browser.newPage(); + await page.goto('http://gosling-lang.org/docs/'); // must first go to a page with a URL for workers to work properly +}); + +console.warn('Expect this to take about 10 minutes to run, depending on your internet speed'); + +/** + * Loop over all examples and take a screenshot + */ +Object.entries(examples) + // .filter(([name]) => name === 'doc_text') // we only want to see the broken example now + .forEach(([name, example]) => { + test( + name, + async () => { + let spec = JSON.stringify(example.spec); + spec = spec.replaceAll('\\', '\\\\'); + await page.setContent(html(spec, currentGosling), { waitUntil: 'networkidle0' }); + await page.addScriptTag({ path: './dist/gosling.js' }); + const component = await page.waitForSelector('.gosling-component'); + await page.waitForNetworkIdle({ idleTime: 2000 }); + await delay(2000); // wait extra 2 seconds. Should be enough time for any rendering to finish + await component!.screenshot({ path: `./img/visual-regression/new-screenshots/${name}.png` }); + comparePNG( + `img/visual-regression/reference-screenshots/${name}.png`, + `img/visual-regression/new-screenshots/${name}.png`, + `img/visual-regression/diffs/${name}.png` + ); + }, + 20000 + ); + }); + +afterAll(async () => { + await browser.close(); +}); diff --git a/package.json b/package.json index 9956d5c26..4ae0f5776 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,8 @@ "preview": "vite preview", "check": "tsc --noEmit", "test": "vitest", + "screenshot": "vitest --mode screenshot", + "update-ref-screenshots": "rm ./img/visual-regression/reference-screenshots/*.png; mv ./img/visual-regression/new-screenshots/*.png ./img/visual-regression/reference-screenshots/", "coverage": "vitest run --coverage", "format": "eslint src/ editor/ --fix && prettier 'editor/**/*.css' --write", "schema": "node scripts/generate-schemas.mjs", @@ -93,6 +95,8 @@ "@types/d3-request": "^1.0.6", "@types/d3-selection": "^2.0.0", "@types/lodash-es": "^4.17.5", + "@types/pixelmatch": "^5.2.4", + "@types/pngjs": "^6.0.2", "@types/pubsub-js": "^1.8.2", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", @@ -121,8 +125,11 @@ "jsdom": "^19.0.0", "jsoncrush": "^1.1.6", "npm-run-all": "^4.1.5", + "pixelmatch": "^5.3.0", "pixi.js": "^6.3.0", + "pngjs": "^7.0.0", "prettier": "^2.0.5", + "puppeteer": "^13.5.2", "react": "^18.2.0", "react-dom": "^18.2.0", "react-markdown": "^5.0.3", diff --git a/tsconfig.json b/tsconfig.json index 147cc628b..ea31dc7e0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -42,7 +42,7 @@ "editor/index.tsx", "embed/index.ts" ], - "include": ["src", "src/**/*.d.ts", "editor"], + "include": ["src", "src/**/*.d.ts", "editor", "img"], "exclude": [ "node_modules", "public", diff --git a/vite.config.js b/vite.config.js index 608396615..1794f5f18 100644 --- a/vite.config.js +++ b/vite.config.js @@ -73,6 +73,9 @@ const external = [...Object.keys(pkg.dependencies), ...Object.keys(pkg.peerDepen dep => !skipExt.has(dep) ); +/** + * Used when yarn build-lib is run + */ const esm = defineConfig({ build: { emptyOutDir: false, @@ -101,9 +104,13 @@ const dev = defineConfig({ plugins: [bundleWebWorker, manualInlineWorker] }); +/** + * This config is used when vitest is run + */ const testing = defineConfig({ resolve: { alias }, test: { + exclude: ['./node_modules/**', './dist/**', './img/**'], // img is excluded because it is used for visual regression testing globals: true, setupFiles: [path.resolve(__dirname, './scripts/setup-vitest.js')], environment: 'jsdom', @@ -121,9 +128,27 @@ const testing = defineConfig({ } }); +/** + * This config is used to take screenshots of every example Gosling spec using a headless browser (puppeteer) + */ +const screenshot = defineConfig({ + test: { + include: ['./img/visual-regression/*'], + globals: true, + environment: 'jsdom', + threads: false, + environmentOptions: { + jsdom: { + resources: 'usable' + } + } + } +}); + export default ({ command, mode }) => { if (command === 'build' && mode === 'lib') return esm; if (mode == 'test') return testing; + if (mode == 'screenshot') return screenshot; if (mode === 'editor') { dev.plugins.push(reactRefresh()); } diff --git a/yarn.lock b/yarn.lock index 10af5afc8..05e40c2a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1051,6 +1051,20 @@ resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz#e4a932069db47bb3eabeb0b305502d01586fa90d" integrity sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg== +"@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@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/pngjs/-/pngjs-6.0.2.tgz#05104117ce2ab3e8091fac285615ab45ae4666e7" + integrity sha512-GO2/2guBQrrb4g+93j55VR30xaMCgmSXa/ifPbHS5MgheDRJy5x12fFB61Hn0juCo+VBFhYMFkJd6CBt8HRx4w== + dependencies: + "@types/node" "*" + "@types/prop-types@*": version "15.7.5" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" @@ -1152,6 +1166,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@^5.56.0": version "5.58.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz#b1d4b0ad20243269d020ef9bbb036a40b0849829" @@ -1661,6 +1682,15 @@ bit-twiddle@^1.0.0, bit-twiddle@^1.0.2: resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e" integrity sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA== +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + body@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" @@ -1744,7 +1774,7 @@ btoa@^1.2.1: resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== -buffer-crc32@^0.2.13: +buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== @@ -1764,6 +1794,14 @@ buffer-shims@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" integrity sha512-Zy8ZXMyxIT6RMTeY7OP/bDndfj6bwCan7SS98CEndS6deHwWPpseeHlwarNcBim+etXnF9HBc1non5JgDaJU1g== +buffer@^5.2.1, buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" @@ -1936,6 +1974,11 @@ chokidar@^3.4.0: optionalDependencies: fsevents "~2.3.2" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -2313,7 +2356,7 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cross-fetch@^3.0.2, cross-fetch@^3.1.5: +cross-fetch@3.1.5, cross-fetch@^3.0.2, cross-fetch@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== @@ -2681,7 +2724,7 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2819,6 +2862,11 @@ detective@^5.2.0: defined "^1.0.0" minimist "^1.2.6" +devtools-protocol@0.0.981744: + version "0.0.981744" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.981744.tgz#9960da0370284577d46c28979a0b32651022bacf" + integrity sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg== + diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -3031,7 +3079,7 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -3543,6 +3591,17 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -3588,6 +3647,13 @@ faye-websocket@~0.10.0: dependencies: websocket-driver ">=0.5.1" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + fetch-jsonp@^1.1.3: version "1.2.3" resolved "https://registry.yarnpkg.com/fetch-jsonp/-/fetch-jsonp-1.2.3.tgz#ae99a867095cb1ce5c39fac601d70d1084db122f" @@ -3749,6 +3815,11 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -3847,6 +3918,13 @@ get-port@^5.0.0: resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -4358,7 +4436,7 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" -https-proxy-agent@^5.0.0: +https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -4380,7 +4458,7 @@ iconv-lite@0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@^1.2.1: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -4416,7 +4494,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5594,6 +5672,11 @@ mixwith@^0.1.1: resolved "https://registry.yarnpkg.com/mixwith/-/mixwith-0.1.1.tgz#c8995918c5b61fbfda9ad377a857cd47750541c0" integrity sha512-DQsf/liljH/9e+94jR+xfK8vlKceeKdOM9H9UEXLwGuvEEpO6debNtJ9yt1ZKzPKPrwqGxzMdu0BR1fnQb6i4A== +mkdirp-classic@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -6134,6 +6217,11 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -6181,6 +6269,13 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== +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 "^6.0.0" + pixi.js@^6.3.0: version "6.5.9" resolved "https://registry.yarnpkg.com/pixi.js/-/pixi.js-6.5.9.tgz#c85fb0f7efa303c17d8edc2698ca4b1545b23ab0" @@ -6223,13 +6318,23 @@ pixi.js@^6.3.0: "@pixi/ticker" "6.5.9" "@pixi/utils" "6.5.9" -pkg-dir@^4.1.0: +pkg-dir@4.2.0, pkg-dir@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" +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== + +pngjs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-7.0.0.tgz#a8b7446020ebbc6ac739db6c5415a65d17090e26" + integrity sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -6291,6 +6396,11 @@ process-nextick-args@~1.0.6: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" integrity sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw== +progress@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + promise-polyfill@^8.2.0: version "8.3.0" resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.3.0.tgz#9284810268138d103807b11f4e23d5e945a4db63" @@ -6322,6 +6432,11 @@ protocols@^2.0.1: resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== +proxy-from-env@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + psl@^1.1.33: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" @@ -6345,6 +6460,14 @@ pump@^2.0.0: end-of-stream "^1.1.0" once "^1.3.1" +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pumpify@^1.3.5: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" @@ -6364,6 +6487,24 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +puppeteer@^13.5.2: + version "13.7.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-13.7.0.tgz#18e16f83e397cf02f7a0804c67c1603d381cfb0b" + integrity sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA== + dependencies: + cross-fetch "3.1.5" + debug "4.3.4" + devtools-protocol "0.0.981744" + extract-zip "2.0.1" + https-proxy-agent "5.0.1" + pkg-dir "4.2.0" + progress "2.0.3" + proxy-from-env "1.1.0" + rimraf "3.0.2" + tar-fs "2.1.1" + unbzip2-stream "1.4.3" + ws "8.5.0" + q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -6691,7 +6832,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.5.0: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -6947,7 +7088,7 @@ rgbcolor@^1.0.1: resolved "https://registry.yarnpkg.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d" integrity sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw== -rimraf@^3.0.2: +rimraf@3.0.2, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -7541,6 +7682,27 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +tar-fs@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + temp-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" @@ -7615,7 +7777,7 @@ through2@^4.0.0: dependencies: readable-stream "3" -through@2, "through@>=2.2.7 <3": +through@2, "through@>=2.2.7 <3", through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -7886,6 +8048,14 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +unbzip2-stream@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -8370,6 +8540,11 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +ws@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + ws@^8.2.3: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" @@ -8458,6 +8633,14 @@ yargs@^16.0.0, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"