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"