vitest-plugin-vis 3.5.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/asserts--HSSlgPD.mjs +8 -0
- package/dist/asserts--HSSlgPD.mjs.map +1 -0
- package/dist/augment-BJmy1S7i.d.mts +31 -0
- package/dist/augment-BJmy1S7i.d.mts.map +1 -0
- package/dist/auto_snapshot_options-CAD43Zkp.mjs +90 -0
- package/dist/auto_snapshot_options-CAD43Zkp.mjs.map +1 -0
- package/dist/auto_snapshot_options-CaQCXDdi.d.mts +45 -0
- package/dist/auto_snapshot_options-CaQCXDdi.d.mts.map +1 -0
- package/dist/base64-CHSENEAO.mjs +8 -0
- package/dist/base64-CHSENEAO.mjs.map +1 -0
- package/dist/client-api.d.mts +141 -0
- package/dist/client-api.d.mts.map +1 -0
- package/dist/client-api.mjs +14 -0
- package/dist/client-api.mjs.map +1 -0
- package/dist/config.d.mts +28 -0
- package/dist/config.d.mts.map +1 -0
- package/dist/config.mjs +412 -0
- package/dist/config.mjs.map +1 -0
- package/dist/constants-CTBaz8Ml.mjs +10 -0
- package/dist/constants-CTBaz8Ml.mjs.map +1 -0
- package/dist/index.d.mts +5 -0
- package/dist/index.mjs +6 -0
- package/dist/presets/auto.d.mts +1 -0
- package/dist/presets/auto.mjs +19 -0
- package/dist/presets/auto.mjs.map +1 -0
- package/dist/presets/enable.d.mts +1 -0
- package/dist/presets/enable.mjs +15 -0
- package/dist/presets/enable.mjs.map +1 -0
- package/dist/presets/manual.d.mts +1 -0
- package/dist/presets/manual.mjs +15 -0
- package/dist/presets/manual.mjs.map +1 -0
- package/dist/server-utils.d.mts +19 -0
- package/dist/server-utils.d.mts.map +1 -0
- package/dist/server-utils.mjs +4 -0
- package/dist/setup-BWgIDtv-.mjs +141 -0
- package/dist/setup-BWgIDtv-.mjs.map +1 -0
- package/dist/setup.d.mts +110 -0
- package/dist/setup.d.mts.map +1 -0
- package/dist/setup.mjs +8 -0
- package/dist/setup_vis_suite-C6JGGT7B.d.mts +17 -0
- package/dist/setup_vis_suite-C6JGGT7B.d.mts.map +1 -0
- package/dist/snapshot_path-7GliOSH_.mjs +58 -0
- package/dist/snapshot_path-7GliOSH_.mjs.map +1 -0
- package/dist/src-CSQnlFa9.mjs +1 -0
- package/dist/task_id-DnS9_4Ub.mjs +316 -0
- package/dist/task_id-DnS9_4Ub.mjs.map +1 -0
- package/dist/testing.d.mts +12 -0
- package/dist/testing.d.mts.map +1 -0
- package/dist/testing.mjs +65550 -0
- package/dist/testing.mjs.map +1 -0
- package/dist/to_match_image_snapshot.types-p-zilA_M.d.mts +9 -0
- package/dist/to_match_image_snapshot.types-p-zilA_M.d.mts.map +1 -0
- package/dist/trim_common_folder-ModiubEJ.d.mts +9 -0
- package/dist/trim_common_folder-ModiubEJ.d.mts.map +1 -0
- package/dist/types-DFb23VE1.d.mts +110 -0
- package/dist/types-DFb23VE1.d.mts.map +1 -0
- package/dist/types-Do1N7g4c.d.mts +63 -0
- package/dist/types-Do1N7g4c.d.mts.map +1 -0
- package/dist/vis_server_context.types-Ce1f9vOO.d.mts +1 -0
- package/package.json +55 -39
- package/readme.md +58 -6
- package/src/client/actions/match_image_snapshot_action.ts +1 -1
- package/src/client/actions/match_page_image_snapshot_action.ts +1 -1
- package/src/client/auto_snapshot_options.ts +16 -1
- package/src/client/compare_image_snapshot.ts +1 -1
- package/src/client/expect/to_match_image_snapshot.ts +1 -1
- package/src/client/page/extend.ts +1 -1
- package/src/client/page/has_image_snapshot.mdx +1 -1
- package/src/client/page/has_image_snapshot.ts +1 -1
- package/src/client/page/to_match_image_snapshot.mdx +1 -1
- package/src/client/page/to_match_image_snapshot.ts +1 -1
- package/src/client/setup/create_vis.ts +16 -14
- package/src/client/setup/vis.ctx.ts +4 -3
- package/src/client/setup/vis.ts +1 -1
- package/src/client/snapshot_meta.ts +5 -0
- package/src/client/vitest_browser_context_proxy.ts +3 -3
- package/src/config/vis.ts +4 -4
- package/src/server/browser_provider/browser_api.ts +2 -2
- package/src/server/browser_provider/playwright.ts +6 -4
- package/src/server/browser_provider/webdriverio.ts +3 -3
- package/src/server/commands/_assertions.ts +3 -3
- package/src/server/commands/augment.ts +1 -1
- package/src/server/commands/has_image_snapshot.ts +2 -2
- package/src/server/commands/image_snapshot_next_index.ts +2 -2
- package/src/server/commands/load_image_snapshot_results.ts +2 -3
- package/src/server/commands/prepare_image_snapshot_comparison.ts +2 -2
- package/src/server/commands/prepare_page_image_snapshot_comparison.ts +2 -2
- package/src/server/commands/setup_vis_suite.ts +3 -3
- package/src/server/project.ts +8 -7
- package/src/server/snapshot.ts +4 -4
- package/src/server/snapshot_path.ts +6 -5
- package/src/server/suite.ts +7 -12
- package/src/server/testing/stubBrowserCommandContext.ts +16 -0
- package/src/{testing → server/testing}/stubSuite.ts +7 -9
- package/src/server/testing/stubUserConfig.ts +6 -0
- package/src/server/vis_options.ts +4 -5
- package/src/server/vis_server_context.logic.ts +7 -7
- package/src/server/vis_server_context.types.ts +31 -26
- package/src/shared/types.ts +2 -0
- package/src/testing.ts +0 -1
- package/esm/client/actions/has_image_snapshot_action.d.ts +0 -4
- package/esm/client/actions/has_image_snapshot_action.d.ts.map +0 -1
- package/esm/client/actions/has_image_snapshot_action.js +0 -6
- package/esm/client/actions/load_image_snapshot_results_action.d.ts +0 -3
- package/esm/client/actions/load_image_snapshot_results_action.d.ts.map +0 -1
- package/esm/client/actions/load_image_snapshot_results_action.js +0 -3
- package/esm/client/actions/match_image_snapshot_action.d.ts +0 -6
- package/esm/client/actions/match_image_snapshot_action.d.ts.map +0 -1
- package/esm/client/actions/match_image_snapshot_action.js +0 -20
- package/esm/client/actions/match_page_image_snapshot_action.d.ts +0 -6
- package/esm/client/actions/match_page_image_snapshot_action.d.ts.map +0 -1
- package/esm/client/actions/match_page_image_snapshot_action.js +0 -9
- package/esm/client/align_images.d.ts +0 -2
- package/esm/client/align_images.d.ts.map +0 -1
- package/esm/client/align_images.js +0 -10
- package/esm/client/auto_snapshot_options.d.ts +0 -29
- package/esm/client/auto_snapshot_options.d.ts.map +0 -1
- package/esm/client/auto_snapshot_options.js +0 -49
- package/esm/client/compare_image_snapshot.d.ts +0 -6
- package/esm/client/compare_image_snapshot.d.ts.map +0 -1
- package/esm/client/compare_image_snapshot.js +0 -52
- package/esm/client/compare_image_snapshot.logic.d.ts +0 -3
- package/esm/client/compare_image_snapshot.logic.d.ts.map +0 -1
- package/esm/client/compare_image_snapshot.logic.js +0 -12
- package/esm/client/ctx.d.ts +0 -7
- package/esm/client/ctx.d.ts.map +0 -1
- package/esm/client/ctx.js +0 -11
- package/esm/client/expect/augment.d.ts +0 -8
- package/esm/client/expect/augment.d.ts.map +0 -1
- package/esm/client/expect/augment.js +0 -1
- package/esm/client/expect/expectation_result.d.ts +0 -3
- package/esm/client/expect/expectation_result.d.ts.map +0 -1
- package/esm/client/expect/expectation_result.js +0 -5
- package/esm/client/expect/extend.d.ts +0 -2
- package/esm/client/expect/extend.d.ts.map +0 -1
- package/esm/client/expect/extend.js +0 -4
- package/esm/client/expect/to_match_image_snapshot.d.ts +0 -9
- package/esm/client/expect/to_match_image_snapshot.d.ts.map +0 -1
- package/esm/client/expect/to_match_image_snapshot.js +0 -21
- package/esm/client/expect/to_match_image_snapshot.types.d.ts +0 -5
- package/esm/client/expect/to_match_image_snapshot.types.d.ts.map +0 -1
- package/esm/client/expect/to_match_image_snapshot.types.js +0 -1
- package/esm/client/image_data.d.ts +0 -3
- package/esm/client/image_data.d.ts.map +0 -1
- package/esm/client/image_data.js +0 -33
- package/esm/client/image_resizer.d.ts +0 -9
- package/esm/client/image_resizer.d.ts.map +0 -1
- package/esm/client/image_resizer.js +0 -49
- package/esm/client/image_snapshot_options.d.ts +0 -2
- package/esm/client/image_snapshot_options.d.ts.map +0 -1
- package/esm/client/image_snapshot_options.js +0 -6
- package/esm/client/page/augment.d.ts +0 -7
- package/esm/client/page/augment.d.ts.map +0 -1
- package/esm/client/page/augment.js +0 -1
- package/esm/client/page/extend.d.ts +0 -2
- package/esm/client/page/extend.d.ts.map +0 -1
- package/esm/client/page/extend.js +0 -5
- package/esm/client/page/has_image_snapshot.d.ts +0 -10
- package/esm/client/page/has_image_snapshot.d.ts.map +0 -1
- package/esm/client/page/has_image_snapshot.js +0 -15
- package/esm/client/page/to_match_image_snapshot.d.ts +0 -6
- package/esm/client/page/to_match_image_snapshot.d.ts.map +0 -1
- package/esm/client/page/to_match_image_snapshot.js +0 -15
- package/esm/client/selector.d.ts +0 -7
- package/esm/client/selector.d.ts.map +0 -1
- package/esm/client/selector.js +0 -97
- package/esm/client/setup/create_vis.d.ts +0 -96
- package/esm/client/setup/create_vis.d.ts.map +0 -1
- package/esm/client/setup/create_vis.js +0 -109
- package/esm/client/setup/vis.ctx.d.ts +0 -12
- package/esm/client/setup/vis.ctx.d.ts.map +0 -1
- package/esm/client/setup/vis.ctx.js +0 -32
- package/esm/client/setup/vis.d.ts +0 -5
- package/esm/client/setup/vis.d.ts.map +0 -1
- package/esm/client/setup/vis.js +0 -6
- package/esm/client/should_take_snapshot.d.ts +0 -3
- package/esm/client/should_take_snapshot.d.ts.map +0 -1
- package/esm/client/should_take_snapshot.js +0 -3
- package/esm/client/snapshot_meta.d.ts +0 -6
- package/esm/client/snapshot_meta.d.ts.map +0 -1
- package/esm/client/snapshot_meta.js +0 -1
- package/esm/client/task_id.d.ts +0 -7
- package/esm/client/task_id.d.ts.map +0 -1
- package/esm/client/task_id.js +0 -10
- package/esm/client/vitest_browser_context_proxy.d.ts +0 -32
- package/esm/client/vitest_browser_context_proxy.d.ts.map +0 -1
- package/esm/client/vitest_browser_context_proxy.js +0 -11
- package/esm/client/vitest_suite_proxy.d.ts +0 -7
- package/esm/client/vitest_suite_proxy.d.ts.map +0 -1
- package/esm/client/vitest_suite_proxy.js +0 -8
- package/esm/client-api.d.ts +0 -12
- package/esm/client-api.d.ts.map +0 -1
- package/esm/client-api.js +0 -9
- package/esm/commands.d.ts +0 -5
- package/esm/commands.d.ts.map +0 -1
- package/esm/commands.js +0 -4
- package/esm/config/types.d.ts +0 -60
- package/esm/config/types.d.ts.map +0 -1
- package/esm/config/types.js +0 -1
- package/esm/config/vis.d.ts +0 -28
- package/esm/config/vis.d.ts.map +0 -1
- package/esm/config/vis.js +0 -27
- package/esm/config.d.ts +0 -4
- package/esm/config.d.ts.map +0 -1
- package/esm/config.js +0 -2
- package/esm/index.d.ts +0 -5
- package/esm/index.d.ts.map +0 -1
- package/esm/index.js +0 -4
- package/esm/presets/auto.d.ts +0 -2
- package/esm/presets/auto.d.ts.map +0 -1
- package/esm/presets/auto.js +0 -8
- package/esm/presets/enable.d.ts +0 -2
- package/esm/presets/enable.d.ts.map +0 -1
- package/esm/presets/enable.js +0 -4
- package/esm/presets/manual.d.ts +0 -2
- package/esm/presets/manual.d.ts.map +0 -1
- package/esm/presets/manual.js +0 -4
- package/esm/server/browser_provider/browser_api.d.ts +0 -3
- package/esm/server/browser_provider/browser_api.d.ts.map +0 -1
- package/esm/server/browser_provider/browser_api.js +0 -11
- package/esm/server/browser_provider/playwright.d.ts +0 -4
- package/esm/server/browser_provider/playwright.d.ts.map +0 -1
- package/esm/server/browser_provider/playwright.js +0 -18
- package/esm/server/browser_provider/types.d.ts +0 -10
- package/esm/server/browser_provider/types.d.ts.map +0 -1
- package/esm/server/browser_provider/types.js +0 -1
- package/esm/server/browser_provider/webdriverio.d.ts +0 -4
- package/esm/server/browser_provider/webdriverio.d.ts.map +0 -1
- package/esm/server/browser_provider/webdriverio.js +0 -12
- package/esm/server/commands/_assertions.d.ts +0 -5
- package/esm/server/commands/_assertions.d.ts.map +0 -1
- package/esm/server/commands/_assertions.js +0 -11
- package/esm/server/commands/augment.d.ts +0 -11
- package/esm/server/commands/augment.d.ts.map +0 -1
- package/esm/server/commands/augment.js +0 -1
- package/esm/server/commands/commands.d.ts +0 -9
- package/esm/server/commands/commands.d.ts.map +0 -1
- package/esm/server/commands/commands.js +0 -14
- package/esm/server/commands/has_image_snapshot.d.ts +0 -6
- package/esm/server/commands/has_image_snapshot.d.ts.map +0 -1
- package/esm/server/commands/has_image_snapshot.js +0 -6
- package/esm/server/commands/image_snapshot_next_index.d.ts +0 -9
- package/esm/server/commands/image_snapshot_next_index.d.ts.map +0 -1
- package/esm/server/commands/image_snapshot_next_index.js +0 -6
- package/esm/server/commands/load_image_snapshot_results.d.ts +0 -21
- package/esm/server/commands/load_image_snapshot_results.d.ts.map +0 -1
- package/esm/server/commands/load_image_snapshot_results.js +0 -6
- package/esm/server/commands/prepare_image_snapshot_comparison.d.ts +0 -38
- package/esm/server/commands/prepare_image_snapshot_comparison.d.ts.map +0 -1
- package/esm/server/commands/prepare_image_snapshot_comparison.js +0 -34
- package/esm/server/commands/prepare_page_image_snapshot_comparison.d.ts +0 -35
- package/esm/server/commands/prepare_page_image_snapshot_comparison.d.ts.map +0 -1
- package/esm/server/commands/prepare_page_image_snapshot_comparison.js +0 -27
- package/esm/server/commands/setup_vis_suite.d.ts +0 -15
- package/esm/server/commands/setup_vis_suite.d.ts.map +0 -1
- package/esm/server/commands/setup_vis_suite.js +0 -6
- package/esm/server/commands/types.d.ts +0 -3
- package/esm/server/commands/types.d.ts.map +0 -1
- package/esm/server/commands/types.js +0 -1
- package/esm/server/externals/file.d.ts +0 -10
- package/esm/server/externals/file.d.ts.map +0 -1
- package/esm/server/externals/file.js +0 -20
- package/esm/server/project.d.ts +0 -21
- package/esm/server/project.d.ts.map +0 -1
- package/esm/server/project.js +0 -13
- package/esm/server/snapshot.d.ts +0 -6
- package/esm/server/snapshot.d.ts.map +0 -1
- package/esm/server/snapshot.js +0 -29
- package/esm/server/snapshot_path.d.ts +0 -14
- package/esm/server/snapshot_path.d.ts.map +0 -1
- package/esm/server/snapshot_path.js +0 -34
- package/esm/server/snapshot_writer.d.ts +0 -13
- package/esm/server/snapshot_writer.d.ts.map +0 -1
- package/esm/server/snapshot_writer.js +0 -15
- package/esm/server/suite.d.ts +0 -54
- package/esm/server/suite.d.ts.map +0 -1
- package/esm/server/suite.js +0 -73
- package/esm/server/vis_options.d.ts +0 -19
- package/esm/server/vis_options.d.ts.map +0 -1
- package/esm/server/vis_options.js +0 -14
- package/esm/server/vis_server_context.d.ts +0 -50
- package/esm/server/vis_server_context.d.ts.map +0 -1
- package/esm/server/vis_server_context.deps.d.ts +0 -29
- package/esm/server/vis_server_context.deps.d.ts.map +0 -1
- package/esm/server/vis_server_context.deps.js +0 -10
- package/esm/server/vis_server_context.js +0 -2
- package/esm/server/vis_server_context.logic.d.ts +0 -53
- package/esm/server/vis_server_context.logic.d.ts.map +0 -1
- package/esm/server/vis_server_context.logic.js +0 -79
- package/esm/server/vis_server_context.types.d.ts +0 -54
- package/esm/server/vis_server_context.types.d.ts.map +0 -1
- package/esm/server/vis_server_context.types.js +0 -1
- package/esm/server-utils.d.ts +0 -4
- package/esm/server-utils.d.ts.map +0 -1
- package/esm/server-utils.js +0 -3
- package/esm/setup.d.ts +0 -5
- package/esm/setup.d.ts.map +0 -1
- package/esm/setup.js +0 -5
- package/esm/shared/asserts.d.ts +0 -2
- package/esm/shared/asserts.d.ts.map +0 -1
- package/esm/shared/asserts.js +0 -5
- package/esm/shared/base64.d.ts +0 -2
- package/esm/shared/base64.d.ts.map +0 -1
- package/esm/shared/base64.js +0 -3
- package/esm/shared/compare_image.d.ts +0 -6
- package/esm/shared/compare_image.d.ts.map +0 -1
- package/esm/shared/compare_image.js +0 -42
- package/esm/shared/constants.d.ts +0 -6
- package/esm/shared/constants.d.ts.map +0 -1
- package/esm/shared/constants.js +0 -5
- package/esm/shared/convert_threshold_unit.d.ts +0 -6
- package/esm/shared/convert_threshold_unit.d.ts.map +0 -1
- package/esm/shared/convert_threshold_unit.js +0 -10
- package/esm/shared/get_max_size.d.ts +0 -11
- package/esm/shared/get_max_size.d.ts.map +0 -1
- package/esm/shared/get_max_size.js +0 -5
- package/esm/shared/is_same_size.d.ts +0 -8
- package/esm/shared/is_same_size.d.ts.map +0 -1
- package/esm/shared/is_same_size.js +0 -3
- package/esm/shared/trim_common_folder.d.ts +0 -6
- package/esm/shared/trim_common_folder.d.ts.map +0 -1
- package/esm/shared/trim_common_folder.js +0 -11
- package/esm/shared/types.d.ts +0 -90
- package/esm/shared/types.d.ts.map +0 -1
- package/esm/shared/types.js +0 -1
- package/esm/testing/constants.d.ts +0 -9
- package/esm/testing/constants.d.ts.map +0 -1
- package/esm/testing/constants.js +0 -1933
- package/esm/testing/stubBrowserCommandContext.d.ts +0 -8
- package/esm/testing/stubBrowserCommandContext.d.ts.map +0 -1
- package/esm/testing/stubBrowserCommandContext.js +0 -12
- package/esm/testing/stubSuite.d.ts +0 -10
- package/esm/testing/stubSuite.d.ts.map +0 -1
- package/esm/testing/stubSuite.js +0 -27
- package/esm/testing/stubUserConfig.d.ts +0 -7
- package/esm/testing/stubUserConfig.d.ts.map +0 -1
- package/esm/testing/stubUserConfig.js +0 -4
- package/esm/testing.d.ts +0 -3
- package/esm/testing.d.ts.map +0 -1
- package/esm/testing.js +0 -2
- package/src/testing/stubBrowserCommandContext.ts +0 -16
- package/src/testing/stubUserConfig.ts +0 -6
package/dist/config.mjs
ADDED
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
import { t as assertSnapshotKeyWithoutDash } from "./asserts--HSSlgPD.mjs";
|
|
2
|
+
import { i as RESULT_DIR, n as DIFF_DIR, r as NAME, t as BASELINE_DIR } from "./constants-CTBaz8Ml.mjs";
|
|
3
|
+
import { i as trimCommonFolder, n as getSnapshotSubpath, r as resolveSnapshotRootDir } from "./snapshot_path-7GliOSH_.mjs";
|
|
4
|
+
import { t as isBase64String } from "./base64-CHSENEAO.mjs";
|
|
5
|
+
import { basename, dirname, join, relative, resolve } from "pathe";
|
|
6
|
+
import { pick } from "type-plus";
|
|
7
|
+
import { glob } from "glob";
|
|
8
|
+
import { mkdirp } from "mkdirp";
|
|
9
|
+
import { readFile, stat, writeFile } from "node:fs/promises";
|
|
10
|
+
import ci from "is-ci";
|
|
11
|
+
import { rimraf } from "rimraf";
|
|
12
|
+
|
|
13
|
+
//#region src/server/externals/file.ts
|
|
14
|
+
const file = {
|
|
15
|
+
existFile(filePath) {
|
|
16
|
+
return stat(filePath).then((s) => s.isFile()).catch(() => false);
|
|
17
|
+
},
|
|
18
|
+
glob(pattern, options) {
|
|
19
|
+
return glob(pattern, options);
|
|
20
|
+
},
|
|
21
|
+
mkdirp,
|
|
22
|
+
async tryReadFile(filePath) {
|
|
23
|
+
if (!filePath) return void 0;
|
|
24
|
+
return readFile(filePath).catch(() => void 0);
|
|
25
|
+
},
|
|
26
|
+
writeFile
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
//#region src/server/project.ts
|
|
31
|
+
function getProjectName(context) {
|
|
32
|
+
const { runner } = context.project;
|
|
33
|
+
const name = runner.config.name;
|
|
34
|
+
if (typeof name === "string") return name;
|
|
35
|
+
}
|
|
36
|
+
function getProjectRoot(context) {
|
|
37
|
+
return context.project.config.root;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
//#region src/server/vis_options.ts
|
|
42
|
+
const DEFAULT_PROJECT_NAME = "__default";
|
|
43
|
+
const visOptions = {};
|
|
44
|
+
function setVisOption(userConfig, options) {
|
|
45
|
+
assertSnapshotKeyWithoutDash(options?.snapshotKey);
|
|
46
|
+
const name = userConfig.test?.name;
|
|
47
|
+
const id = typeof name === "string" ? name : typeof name === "object" ? name?.label : DEFAULT_PROJECT_NAME;
|
|
48
|
+
visOptions[id] = options;
|
|
49
|
+
}
|
|
50
|
+
function getVisOption(context) {
|
|
51
|
+
return visOptions[getProjectName(context) ?? DEFAULT_PROJECT_NAME] ?? {};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region src/server/vis_server_context.deps.ts
|
|
56
|
+
/* v8 ignore start */
|
|
57
|
+
const deps = {
|
|
58
|
+
rimraf,
|
|
59
|
+
getSnapshotPlatform() {
|
|
60
|
+
return ci ? process.platform : "local";
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
/* v8 ignore end */
|
|
64
|
+
|
|
65
|
+
//#endregion
|
|
66
|
+
//#region src/server/suite.ts
|
|
67
|
+
const suites = {};
|
|
68
|
+
/**
|
|
69
|
+
* Setup suite is called on each test file's beforeAll hook.
|
|
70
|
+
* Test files include vitest test files and storybook story files.
|
|
71
|
+
* It needs to make sure there is no race condition between the test files.
|
|
72
|
+
*/
|
|
73
|
+
async function setupSuite(browserContext) {
|
|
74
|
+
const suiteId = getSuiteId(browserContext);
|
|
75
|
+
const visOptions$1 = getVisOption(browserContext);
|
|
76
|
+
if (!suites[suiteId]) suites[suiteId] = createSuite(browserContext, visOptions$1);
|
|
77
|
+
const suite = await suites[suiteId];
|
|
78
|
+
const { taskSubpath, baselineDir, diffDir, resultDir, tasks } = createModule(suite, browserContext.testPath, visOptions$1);
|
|
79
|
+
suite.modules[taskSubpath] = {
|
|
80
|
+
baselineDir,
|
|
81
|
+
diffDir,
|
|
82
|
+
resultDir,
|
|
83
|
+
tasks
|
|
84
|
+
};
|
|
85
|
+
await Promise.allSettled([deps.rimraf(diffDir), deps.rimraf(resultDir)]);
|
|
86
|
+
return {
|
|
87
|
+
comparisonMethod: visOptions$1.comparisonMethod,
|
|
88
|
+
diffOptions: visOptions$1.diffOptions,
|
|
89
|
+
failureThreshold: visOptions$1.failureThreshold,
|
|
90
|
+
failureThresholdType: visOptions$1.failureThresholdType,
|
|
91
|
+
snapshotKey: visOptions$1.snapshotKey,
|
|
92
|
+
subject: visOptions$1.subject,
|
|
93
|
+
timeout: visOptions$1.timeout
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Suite ID also contains the project name to make it unique
|
|
98
|
+
* across different projects.
|
|
99
|
+
*/
|
|
100
|
+
function getSuiteId(context) {
|
|
101
|
+
return `${getProjectName(context)}/${context.project.config.name}`;
|
|
102
|
+
}
|
|
103
|
+
async function createSuite(browserContext, visOptions$1) {
|
|
104
|
+
const snapshotRootDir = resolveSnapshotRootDir(browserContext, visOptions$1);
|
|
105
|
+
const projectRoot = getProjectRoot(browserContext);
|
|
106
|
+
const state = {
|
|
107
|
+
projectRoot,
|
|
108
|
+
testTimeout: browserContext.project.config.testTimeout,
|
|
109
|
+
hookTimeout: browserContext.project.config.hookTimeout,
|
|
110
|
+
snapshotRootDir,
|
|
111
|
+
snapshotBaselineDir: join(snapshotRootDir, BASELINE_DIR),
|
|
112
|
+
snapshotResultDir: join(snapshotRootDir, RESULT_DIR),
|
|
113
|
+
snapshotDiffDir: join(snapshotRootDir, DIFF_DIR),
|
|
114
|
+
snapshotRootPath: join(projectRoot, snapshotRootDir),
|
|
115
|
+
subject: visOptions$1.subject,
|
|
116
|
+
modules: {}
|
|
117
|
+
};
|
|
118
|
+
await Promise.allSettled([deps.rimraf(join(state.snapshotDiffDir)), deps.rimraf(join(state.snapshotResultDir))]);
|
|
119
|
+
return state;
|
|
120
|
+
}
|
|
121
|
+
function createModule(state, testPath, options) {
|
|
122
|
+
const taskSubpath = getTaskSubpath(state, testPath, options);
|
|
123
|
+
return {
|
|
124
|
+
taskSubpath,
|
|
125
|
+
baselineDir: join(state.snapshotBaselineDir, taskSubpath),
|
|
126
|
+
resultDir: join(state.snapshotResultDir, taskSubpath),
|
|
127
|
+
diffDir: join(state.snapshotDiffDir, taskSubpath),
|
|
128
|
+
tasks: {}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function getTaskSubpath(state, testPath, options) {
|
|
132
|
+
return getSnapshotSubpath(relative(state.projectRoot, testPath), options);
|
|
133
|
+
}
|
|
134
|
+
function getSuite(context) {
|
|
135
|
+
return suites[getSuiteId(context)];
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
//#endregion
|
|
139
|
+
//#region src/server/vis_server_context.logic.ts
|
|
140
|
+
function createVisServerContext() {
|
|
141
|
+
const context = {
|
|
142
|
+
async getSnapshotResults(browserContext, taskId) {
|
|
143
|
+
const suiteInfo = await context.getSuiteInfo(browserContext, taskId);
|
|
144
|
+
const baselines = await file.glob(join(suiteInfo.projectRoot, suiteInfo.baselineDir, `${suiteInfo.taskId}-*.png`));
|
|
145
|
+
const results = await file.glob(join(suiteInfo.projectRoot, suiteInfo.resultDir, `${suiteInfo.taskId}-*.png`));
|
|
146
|
+
const diffs = await file.glob(join(suiteInfo.projectRoot, suiteInfo.diffDir, `${suiteInfo.taskId}-*.png`));
|
|
147
|
+
const r = [];
|
|
148
|
+
await Promise.all(baselines.map(async (baselinePath) => {
|
|
149
|
+
const filename = basename(baselinePath);
|
|
150
|
+
const resultPath = results.find((r$1) => r$1.endsWith(filename));
|
|
151
|
+
const diffPath = diffs.find((d) => d.endsWith(filename));
|
|
152
|
+
const baselineBuffer = await file.tryReadFile(baselinePath);
|
|
153
|
+
const resultBuffer = await file.tryReadFile(resultPath);
|
|
154
|
+
const diffBuffer = await file.tryReadFile(diffPath);
|
|
155
|
+
r.push({
|
|
156
|
+
filename,
|
|
157
|
+
baseline: baselineBuffer?.toString("base64"),
|
|
158
|
+
result: resultBuffer?.toString("base64"),
|
|
159
|
+
diff: diffBuffer?.toString("base64")
|
|
160
|
+
});
|
|
161
|
+
}));
|
|
162
|
+
return r;
|
|
163
|
+
},
|
|
164
|
+
async getSnapshotInfo(browserContext, taskId, options) {
|
|
165
|
+
const suiteInfo = await context.getSuiteInfo(browserContext, taskId);
|
|
166
|
+
const snapshotFilename = context.getSnapshotFilename(browserContext, suiteInfo, options?.snapshotKey);
|
|
167
|
+
const { baselineDir, resultDir, diffDir, task } = suiteInfo;
|
|
168
|
+
task.count = task.count + 1;
|
|
169
|
+
const baselinePath = join(baselineDir, snapshotFilename);
|
|
170
|
+
const resultPath = join(resultDir, snapshotFilename);
|
|
171
|
+
const diffPath = join(diffDir, snapshotFilename);
|
|
172
|
+
return {
|
|
173
|
+
...pick(getVisOption(browserContext), "comparisonMethod", "diffOptions", "failureThreshold", "failureThresholdType", "timeout"),
|
|
174
|
+
baselinePath,
|
|
175
|
+
resultPath,
|
|
176
|
+
diffPath
|
|
177
|
+
};
|
|
178
|
+
},
|
|
179
|
+
async getTaskCount(browserContext, taskId) {
|
|
180
|
+
return (await context.getSuiteInfo(browserContext, taskId)).task.count;
|
|
181
|
+
},
|
|
182
|
+
async hasImageSnapshot(browserContext, taskId, snapshotKey) {
|
|
183
|
+
const info = await context.getSuiteInfo(browserContext, taskId);
|
|
184
|
+
return file.existFile(resolve(info.projectRoot, info.baselineDir, context.getSnapshotFilename(browserContext, info, snapshotKey)));
|
|
185
|
+
},
|
|
186
|
+
getSnapshotFilename(browserContext, info, snapshotKey) {
|
|
187
|
+
if (snapshotKey) return `${info.taskId}-${snapshotKey}.png`;
|
|
188
|
+
const visOptions$1 = getVisOption(browserContext);
|
|
189
|
+
if (typeof visOptions$1.snapshotKey === "string") return `${info.taskId}-${visOptions$1.snapshotKey}.png`;
|
|
190
|
+
return `${info.taskId}-${info.task.count}.png`;
|
|
191
|
+
},
|
|
192
|
+
async getSuiteInfo(browserContext, taskId) {
|
|
193
|
+
const projectState = await getSuite(browserContext);
|
|
194
|
+
const visOptions$1 = getVisOption(browserContext);
|
|
195
|
+
const moduleId = getTaskSubpath(projectState, browserContext.testPath, visOptions$1);
|
|
196
|
+
const m = projectState.modules[moduleId];
|
|
197
|
+
const task = m.tasks[taskId] = m.tasks[taskId] ?? { count: 1 };
|
|
198
|
+
return {
|
|
199
|
+
projectRoot: projectState.projectRoot,
|
|
200
|
+
suiteId: moduleId,
|
|
201
|
+
taskId,
|
|
202
|
+
baselineDir: m.baselineDir,
|
|
203
|
+
resultDir: m.resultDir,
|
|
204
|
+
diffDir: m.diffDir,
|
|
205
|
+
task
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
return context;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
//#endregion
|
|
213
|
+
//#region src/server/vis_server_context.ts
|
|
214
|
+
const visServerContext = createVisServerContext();
|
|
215
|
+
|
|
216
|
+
//#endregion
|
|
217
|
+
//#region src/server/commands/_assertions.ts
|
|
218
|
+
function assertTestPathDefined(context, commandName) {
|
|
219
|
+
if (!context.testPath) throw new Error(`'commands.${commandName}' requires testPath to be defined`);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
//#endregion
|
|
223
|
+
//#region src/server/commands/has_image_snapshot.ts
|
|
224
|
+
const hasImageSnapshot = async (context, taskId, snapshotKey) => {
|
|
225
|
+
assertTestPathDefined(context, "hasImageSnapshot");
|
|
226
|
+
return visServerContext.hasImageSnapshot(context, taskId, snapshotKey);
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
//#endregion
|
|
230
|
+
//#region src/server/commands/image_snapshot_next_index.ts
|
|
231
|
+
const imageSnapshotNextIndex = async (context, taskId) => {
|
|
232
|
+
assertTestPathDefined(context, "imageSnapshotNextIndex");
|
|
233
|
+
return visServerContext.getTaskCount(context, taskId);
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
//#endregion
|
|
237
|
+
//#region src/server/commands/load_image_snapshot_results.ts
|
|
238
|
+
const loadImageSnapshotResults = async (context, taskId) => {
|
|
239
|
+
assertTestPathDefined(context, "loadImageSnapshotResults");
|
|
240
|
+
return visServerContext.getSnapshotResults(context, taskId);
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
//#endregion
|
|
244
|
+
//#region src/server/browser_provider/playwright.ts
|
|
245
|
+
function playwright(context) {
|
|
246
|
+
const { page, iframe } = context;
|
|
247
|
+
return {
|
|
248
|
+
async takeScreenshot(projectRoot, relativeFilePath, selector, options) {
|
|
249
|
+
return iframe.locator(selector).screenshot({
|
|
250
|
+
path: resolve(projectRoot, relativeFilePath),
|
|
251
|
+
...options
|
|
252
|
+
});
|
|
253
|
+
},
|
|
254
|
+
async takePageScreenshot(projectRoot, relativeFilePath, options) {
|
|
255
|
+
return page.screenshot({
|
|
256
|
+
path: resolve(projectRoot, relativeFilePath),
|
|
257
|
+
...options
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
//#endregion
|
|
264
|
+
//#region src/server/browser_provider/webdriverio.ts
|
|
265
|
+
function webdriverio(context) {
|
|
266
|
+
const { browser } = context;
|
|
267
|
+
return {
|
|
268
|
+
async takeScreenshot(_projectRoot, relativeFilePath, selector) {
|
|
269
|
+
return (await browser.$(`${selector}`)).saveScreenshot(relativeFilePath);
|
|
270
|
+
},
|
|
271
|
+
async takePageScreenshot(_projectRoot, relativeFilePath, options) {
|
|
272
|
+
return browser.saveScreenshot(relativeFilePath, options);
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
//#endregion
|
|
278
|
+
//#region src/server/browser_provider/browser_api.ts
|
|
279
|
+
function browserApi(context) {
|
|
280
|
+
if (context.provider.name === "playwright") return playwright(context);
|
|
281
|
+
if (context.provider.name === "webdriverio") return webdriverio(context);
|
|
282
|
+
throw new Error(`Unsupported provider: ${context.provider.name}`);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
//#endregion
|
|
286
|
+
//#region src/server/snapshot_writer.ts
|
|
287
|
+
function createSnapshotWriter({ mkdirp: mkdirp$1, writeFile: writeFile$1 } = file) {
|
|
288
|
+
return {
|
|
289
|
+
async writeBase64(filePath, data) {
|
|
290
|
+
await mkdirp$1(dirname(filePath));
|
|
291
|
+
await writeFile$1(filePath, data, { encoding: "base64" });
|
|
292
|
+
},
|
|
293
|
+
async writeBuffer(filePath, data) {
|
|
294
|
+
await mkdirp$1(dirname(filePath));
|
|
295
|
+
await writeFile$1(filePath, data);
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
const snapshotWriter = createSnapshotWriter();
|
|
300
|
+
|
|
301
|
+
//#endregion
|
|
302
|
+
//#region src/server/snapshot.ts
|
|
303
|
+
async function takeSnapshot(context, projectRoot, relativeFilePath, subject, options) {
|
|
304
|
+
if (isBase64String(subject)) {
|
|
305
|
+
await snapshotWriter.writeBase64(resolve(projectRoot, relativeFilePath), subject);
|
|
306
|
+
return Buffer.from(subject, "base64");
|
|
307
|
+
}
|
|
308
|
+
return takeSnapshotByBrowser(context, projectRoot, relativeFilePath, subject, options);
|
|
309
|
+
}
|
|
310
|
+
async function takeSnapshotByBrowser(context, projectRoot, relativeFilePath, subject, options) {
|
|
311
|
+
await mkdirp(dirname(resolve(projectRoot, relativeFilePath)));
|
|
312
|
+
return browserApi(context).takeScreenshot(projectRoot, relativeFilePath, subject ?? "body", { timeout: options?.timeout });
|
|
313
|
+
}
|
|
314
|
+
async function takePageSnapshot(context, projectRoot, relativeFilePath, options) {
|
|
315
|
+
await mkdirp(dirname(resolve(projectRoot, relativeFilePath)));
|
|
316
|
+
return browserApi(context).takePageScreenshot(projectRoot, relativeFilePath, {
|
|
317
|
+
timeout: options?.timeout,
|
|
318
|
+
fullPage: options?.fullPage
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
//#endregion
|
|
323
|
+
//#region src/server/commands/prepare_image_snapshot_comparison.ts
|
|
324
|
+
const prepareImageSnapshotComparison = async (context, taskId, subject, options) => {
|
|
325
|
+
assertTestPathDefined(context, "prepareImageSnapshotComparison");
|
|
326
|
+
if (!options) options = {};
|
|
327
|
+
options.timeout = options.timeout ?? 3e4;
|
|
328
|
+
const projectRoot = getProjectRoot(context);
|
|
329
|
+
const info = await visServerContext.getSnapshotInfo(context, taskId, options);
|
|
330
|
+
const baselineBuffer = await file.tryReadFile(resolve(projectRoot, info.baselinePath));
|
|
331
|
+
if (!baselineBuffer) {
|
|
332
|
+
if (isBase64String(subject)) await snapshotWriter.writeBase64(resolve(projectRoot, info.baselinePath), subject);
|
|
333
|
+
else await takeSnapshotByBrowser(context, projectRoot, info.baselinePath, subject, options);
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
const resultBuffer = await takeSnapshot(context, projectRoot, info.resultPath, subject, options);
|
|
337
|
+
return {
|
|
338
|
+
...info,
|
|
339
|
+
projectRoot,
|
|
340
|
+
baseline: baselineBuffer.toString("base64"),
|
|
341
|
+
result: resultBuffer.toString("base64")
|
|
342
|
+
};
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
//#endregion
|
|
346
|
+
//#region src/server/commands/prepare_page_image_snapshot_comparison.ts
|
|
347
|
+
const preparePageImageSnapshotComparison = async (context, taskId, options) => {
|
|
348
|
+
assertTestPathDefined(context, "preparePageImageSnapshotComparison");
|
|
349
|
+
if (!options) options = {};
|
|
350
|
+
options.timeout = options.timeout ?? 3e4;
|
|
351
|
+
const projectRoot = getProjectRoot(context);
|
|
352
|
+
const info = await visServerContext.getSnapshotInfo(context, taskId, options);
|
|
353
|
+
const baselineBuffer = await file.tryReadFile(resolve(projectRoot, info.baselinePath));
|
|
354
|
+
if (!baselineBuffer) {
|
|
355
|
+
await takePageSnapshot(context, projectRoot, info.baselinePath, options);
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
const resultBuffer = await takePageSnapshot(context, projectRoot, info.resultPath, options);
|
|
359
|
+
return {
|
|
360
|
+
...info,
|
|
361
|
+
projectRoot,
|
|
362
|
+
baseline: baselineBuffer.toString("base64"),
|
|
363
|
+
result: resultBuffer.toString("base64")
|
|
364
|
+
};
|
|
365
|
+
};
|
|
366
|
+
|
|
367
|
+
//#endregion
|
|
368
|
+
//#region src/server/commands/setup_vis_suite.ts
|
|
369
|
+
const setupVisSuite = async (context) => {
|
|
370
|
+
assertTestPathDefined(context, "setupVisSuite");
|
|
371
|
+
return setupSuite(context);
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
//#endregion
|
|
375
|
+
//#region src/server/commands/commands.ts
|
|
376
|
+
const commands = {
|
|
377
|
+
setupVisSuite,
|
|
378
|
+
imageSnapshotNextIndex,
|
|
379
|
+
hasImageSnapshot,
|
|
380
|
+
preparePageImageSnapshotComparison,
|
|
381
|
+
prepareImageSnapshotComparison,
|
|
382
|
+
loadImageSnapshotResults
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
//#endregion
|
|
386
|
+
//#region src/config/vis.ts
|
|
387
|
+
/**
|
|
388
|
+
* Create a Vite plugin for visual testing.
|
|
389
|
+
*
|
|
390
|
+
* If options are not provided, the plugin will use the default options,
|
|
391
|
+
* which enables the `auto` preset.
|
|
392
|
+
*/
|
|
393
|
+
function vis(options = { preset: "auto" }) {
|
|
394
|
+
return {
|
|
395
|
+
name: NAME,
|
|
396
|
+
config(userConfig) {
|
|
397
|
+
setVisOption(userConfig, options);
|
|
398
|
+
const preset = options?.preset;
|
|
399
|
+
return { test: {
|
|
400
|
+
browser: {
|
|
401
|
+
name: void 0,
|
|
402
|
+
commands
|
|
403
|
+
},
|
|
404
|
+
setupFiles: preset && preset !== "none" && preset !== "custom" ? [`vitest-plugin-vis/presets/${preset}`] : []
|
|
405
|
+
} };
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
//#endregion
|
|
411
|
+
export { trimCommonFolder, vis };
|
|
412
|
+
//# sourceMappingURL=config.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.mjs","names":["visOptions: Record<string, VisOptions<any> | undefined>","suites: VisSuites","visOptions","r: ImageSnapshotResult[]","r","visOptions","hasImageSnapshot: ExtendedBrowserCommand<Parameters<HasImageSnapshotCommand['hasImageSnapshot']>>","imageSnapshotNextIndex: ExtendedBrowserCommand<\n\tParameters<ImageSnapshotNextIndexCommand['imageSnapshotNextIndex']>\n>","loadImageSnapshotResults: ExtendedBrowserCommand<[taskId: string]>","mkdirp","writeFile","prepareImageSnapshotComparison: ExtendedBrowserCommand<\n\tParameters<PrepareImageSnapshotComparisonCommand['prepareImageSnapshotComparison']>\n>","preparePageImageSnapshotComparison: ExtendedBrowserCommand<\n\tParameters<PreparePageImageSnapshotComparisonCommand['preparePageImageSnapshotComparison']>\n>","setupVisSuite: ExtendedBrowserCommand<[]>"],"sources":["../src/server/externals/file.ts","../src/server/project.ts","../src/server/vis_options.ts","../src/server/vis_server_context.deps.ts","../src/server/suite.ts","../src/server/vis_server_context.logic.ts","../src/server/vis_server_context.ts","../src/server/commands/_assertions.ts","../src/server/commands/has_image_snapshot.ts","../src/server/commands/image_snapshot_next_index.ts","../src/server/commands/load_image_snapshot_results.ts","../src/server/browser_provider/playwright.ts","../src/server/browser_provider/webdriverio.ts","../src/server/browser_provider/browser_api.ts","../src/server/snapshot_writer.ts","../src/server/snapshot.ts","../src/server/commands/prepare_image_snapshot_comparison.ts","../src/server/commands/prepare_page_image_snapshot_comparison.ts","../src/server/commands/setup_vis_suite.ts","../src/server/commands/commands.ts","../src/config/vis.ts"],"sourcesContent":["import { glob, type GlobOptionsWithFileTypesUnset } from 'glob'\nimport { mkdirp } from 'mkdirp'\nimport { readFile, stat, writeFile } from 'node:fs/promises'\n\nexport const file = {\n\texistFile(filePath: string) {\n\t\treturn stat(filePath)\n\t\t\t.then((s) => s.isFile())\n\t\t\t.catch(() => false)\n\t},\n\tglob(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined) {\n\t\treturn glob(pattern, options)\n\t},\n\tmkdirp: mkdirp as (path: string) => Promise<string | undefined>,\n\tasync tryReadFile(filePath: string | undefined): Promise<Buffer | undefined> {\n\t\tif (!filePath) return undefined\n\n\t\treturn readFile(filePath).catch(() => undefined)\n\t},\n\twriteFile,\n}\n","import type { ExtendedBrowserCommandContext } from './vis_server_context.types.ts'\n\nexport function getProjectName(context: ExtendedBrowserCommandContext) {\n\tconst { runner } = context.project\n\tconst name = runner.config.name\n\tif (typeof name === 'string') {\n\t\treturn name\n\t}\n\t// if (typeof name === 'object' && 'label' in name) {\n\t// \treturn (name as { label: string }).label\n\t// }\n\treturn undefined\n}\n\nexport function getProjectRoot(context: { project: { config: { root: string } } }) {\n\treturn context.project.config.root\n}\n","import type { TestUserConfig } from 'vitest/node'\nimport type { VisOptions } from '../config/types.ts'\nimport { assertSnapshotKeyWithoutDash } from '../shared/asserts.ts'\nimport { getProjectName } from './project.ts'\nimport type { ExtendedBrowserCommandContext } from './vis_server_context.types.ts'\n\nconst DEFAULT_PROJECT_NAME = '__default'\n\nconst visOptions: Record<string, VisOptions<any> | undefined> = {}\n\nexport function setVisOption(\n\tuserConfig: { test?: { name?: TestUserConfig['name'] | undefined } },\n\toptions: VisOptions<any> | undefined,\n) {\n\tassertSnapshotKeyWithoutDash(options?.snapshotKey)\n\n\tconst name = userConfig.test?.name\n\tconst id = typeof name === 'string' ? name : typeof name === 'object' ? name?.label : DEFAULT_PROJECT_NAME\n\tvisOptions[id] = options\n}\n\nexport function getVisOption(context: ExtendedBrowserCommandContext) {\n\tconst id = getProjectName(context) ?? DEFAULT_PROJECT_NAME\n\treturn visOptions[id] ?? {}\n}\n","/* v8 ignore start */\nimport ci from 'is-ci'\nimport { rimraf } from 'rimraf'\n\nexport const deps = {\n\trimraf,\n\tgetSnapshotPlatform() {\n\t\treturn ci ? process.platform : 'local'\n\t},\n}\n/* v8 ignore end */\n","import { join, relative } from 'pathe'\nimport type { VisOptions } from '../config/types.ts'\nimport { BASELINE_DIR, DIFF_DIR, RESULT_DIR } from '../shared/constants.ts'\nimport { getProjectName, getProjectRoot } from './project.ts'\nimport { getSnapshotSubpath, resolveSnapshotRootDir } from './snapshot_path.ts'\nimport { getVisOption } from './vis_options.ts'\nimport { deps } from './vis_server_context.deps.ts'\nimport type { ExtendedBrowserCommandContext, VisSuite, VisSuites } from './vis_server_context.types.ts'\n\nconst suites: VisSuites = {}\n\n/**\n * Setup suite is called on each test file's beforeAll hook.\n * Test files include vitest test files and storybook story files.\n * It needs to make sure there is no race condition between the test files.\n */\nexport async function setupSuite(browserContext: ExtendedBrowserCommandContext) {\n\tconst suiteId = getSuiteId(browserContext)\n\tconst visOptions = getVisOption(browserContext)\n\n\tif (!suites[suiteId]) {\n\t\tsuites[suiteId] = createSuite(browserContext, visOptions)\n\t}\n\n\tconst suite = await suites[suiteId]\n\n\tconst { taskSubpath, baselineDir, diffDir, resultDir, tasks } = createModule(\n\t\tsuite,\n\t\tbrowserContext.testPath!,\n\t\tvisOptions,\n\t)\n\tsuite.modules[taskSubpath] = { baselineDir, diffDir, resultDir, tasks }\n\n\tawait Promise.allSettled([deps.rimraf(diffDir), deps.rimraf(resultDir)])\n\treturn {\n\t\tcomparisonMethod: visOptions.comparisonMethod,\n\t\tdiffOptions: visOptions.diffOptions,\n\t\tfailureThreshold: visOptions.failureThreshold,\n\t\tfailureThresholdType: visOptions.failureThresholdType,\n\t\tsnapshotKey: visOptions.snapshotKey,\n\t\tsubject: visOptions.subject,\n\t\ttimeout: visOptions.timeout,\n\t}\n}\n\n/**\n * Suite ID also contains the project name to make it unique\n * across different projects.\n */\nexport function getSuiteId(context: ExtendedBrowserCommandContext) {\n\treturn `${getProjectName(context)}/${context.project.config.name}`\n}\n\nasync function createSuite(\n\tbrowserContext: ExtendedBrowserCommandContext,\n\tvisOptions: Pick<VisOptions, 'snapshotRootDir' | 'subject'>,\n) {\n\t// console.log('visOptions', visOptions)\n\tconst snapshotRootDir = resolveSnapshotRootDir(browserContext, visOptions)\n\tconst projectRoot = getProjectRoot(browserContext)\n\n\tconst state = {\n\t\tprojectRoot,\n\t\ttestTimeout: browserContext.project.config.testTimeout,\n\t\thookTimeout: browserContext.project.config.hookTimeout,\n\t\tsnapshotRootDir,\n\t\tsnapshotBaselineDir: join(snapshotRootDir, BASELINE_DIR),\n\t\tsnapshotResultDir: join(snapshotRootDir, RESULT_DIR),\n\t\tsnapshotDiffDir: join(snapshotRootDir, DIFF_DIR),\n\t\tsnapshotRootPath: join(projectRoot, snapshotRootDir),\n\t\tsubject: visOptions.subject,\n\t\tmodules: {},\n\t}\n\tawait Promise.allSettled([deps.rimraf(join(state.snapshotDiffDir)), deps.rimraf(join(state.snapshotResultDir))])\n\treturn state\n}\n\nexport function createModule(state: VisSuite, testPath: string, options: Pick<VisOptions, 'snapshotSubpath'>) {\n\tconst taskSubpath = getTaskSubpath(state, testPath, options)\n\treturn {\n\t\ttaskSubpath,\n\t\tbaselineDir: join(state.snapshotBaselineDir, taskSubpath),\n\t\tresultDir: join(state.snapshotResultDir, taskSubpath),\n\t\tdiffDir: join(state.snapshotDiffDir, taskSubpath),\n\t\ttasks: {},\n\t}\n}\n\nexport function getTaskSubpath(state: VisSuite, testPath: string, options: Pick<VisOptions, 'snapshotSubpath'>) {\n\treturn getSnapshotSubpath(relative(state.projectRoot, testPath), options)\n}\n\nexport function getSuite(context: ExtendedBrowserCommandContext) {\n\treturn suites[getSuiteId(context)]!\n}\n","import { basename, join, resolve } from 'pathe'\nimport { pick } from 'type-plus'\nimport type { ImageSnapshotKeyOptions } from '../client-api.ts'\nimport type { ImageSnapshotResult } from './commands/load_image_snapshot_results.ts'\nimport { file } from './externals/file.ts'\nimport { getSuite, getTaskSubpath } from './suite.ts'\nimport { getVisOption } from './vis_options.ts'\nimport type { ExtendedBrowserCommandContext } from './vis_server_context.types.ts'\n\nexport function createVisServerContext() {\n\tconst context = {\n\t\tasync getSnapshotResults(browserContext: ExtendedBrowserCommandContext, taskId: string) {\n\t\t\tconst suiteInfo = await context.getSuiteInfo(browserContext, taskId)\n\t\t\tconst baselines = await file.glob(join(suiteInfo.projectRoot, suiteInfo.baselineDir, `${suiteInfo.taskId}-*.png`))\n\t\t\tconst results = await file.glob(join(suiteInfo.projectRoot, suiteInfo.resultDir, `${suiteInfo.taskId}-*.png`))\n\t\t\tconst diffs = await file.glob(join(suiteInfo.projectRoot, suiteInfo.diffDir, `${suiteInfo.taskId}-*.png`))\n\n\t\t\tconst r: ImageSnapshotResult[] = []\n\t\t\tawait Promise.all(\n\t\t\t\tbaselines.map(async (baselinePath) => {\n\t\t\t\t\tconst filename = basename(baselinePath)\n\t\t\t\t\tconst resultPath = results.find((r) => r.endsWith(filename))\n\t\t\t\t\tconst diffPath = diffs.find((d) => d.endsWith(filename))\n\n\t\t\t\t\tconst baselineBuffer = await file.tryReadFile(baselinePath)\n\t\t\t\t\tconst resultBuffer = await file.tryReadFile(resultPath)\n\t\t\t\t\tconst diffBuffer = await file.tryReadFile(diffPath)\n\t\t\t\t\tr.push({\n\t\t\t\t\t\tfilename,\n\t\t\t\t\t\tbaseline: baselineBuffer?.toString('base64'),\n\t\t\t\t\t\tresult: resultBuffer?.toString('base64'),\n\t\t\t\t\t\tdiff: diffBuffer?.toString('base64'),\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\treturn r\n\t\t},\n\t\tasync getSnapshotInfo(\n\t\t\tbrowserContext: ExtendedBrowserCommandContext,\n\t\t\ttaskId: string,\n\t\t\toptions?: ImageSnapshotKeyOptions,\n\t\t) {\n\t\t\tconst suiteInfo = await context.getSuiteInfo(browserContext, taskId)\n\t\t\tconst snapshotFilename = context.getSnapshotFilename(browserContext, suiteInfo, options?.snapshotKey)\n\n\t\t\tconst { baselineDir, resultDir, diffDir, task } = suiteInfo\n\n\t\t\ttask.count = task.count + 1\n\t\t\tconst baselinePath = join(baselineDir, snapshotFilename)\n\t\t\tconst resultPath = join(resultDir, snapshotFilename)\n\t\t\tconst diffPath = join(diffDir, snapshotFilename)\n\n\t\t\treturn {\n\t\t\t\t...pick(\n\t\t\t\t\tgetVisOption(browserContext),\n\t\t\t\t\t'comparisonMethod',\n\t\t\t\t\t'diffOptions',\n\t\t\t\t\t'failureThreshold',\n\t\t\t\t\t'failureThresholdType',\n\t\t\t\t\t'timeout',\n\t\t\t\t),\n\t\t\t\tbaselinePath,\n\t\t\t\tresultPath,\n\t\t\t\tdiffPath,\n\t\t\t}\n\t\t},\n\n\t\tasync getTaskCount(browserContext: ExtendedBrowserCommandContext, taskId: string) {\n\t\t\treturn (await context.getSuiteInfo(browserContext, taskId)).task.count\n\t\t},\n\t\tasync hasImageSnapshot(\n\t\t\tbrowserContext: ExtendedBrowserCommandContext,\n\t\t\ttaskId: string,\n\t\t\tsnapshotKey: string | undefined,\n\t\t) {\n\t\t\tconst info = await context.getSuiteInfo(browserContext, taskId)\n\n\t\t\treturn file.existFile(\n\t\t\t\tresolve(info.projectRoot, info.baselineDir, context.getSnapshotFilename(browserContext, info, snapshotKey)),\n\t\t\t)\n\t\t},\n\t\tgetSnapshotFilename(\n\t\t\tbrowserContext: ExtendedBrowserCommandContext,\n\t\t\tinfo: { taskId: string; task: { count: number } },\n\t\t\tsnapshotKey: string | undefined,\n\t\t) {\n\t\t\tif (snapshotKey) return `${info.taskId}-${snapshotKey}.png`\n\t\t\tconst visOptions = getVisOption(browserContext)\n\t\t\tif (typeof visOptions.snapshotKey === 'string') {\n\t\t\t\treturn `${info.taskId}-${visOptions.snapshotKey}.png`\n\t\t\t}\n\t\t\treturn `${info.taskId}-${info.task.count}.png`\n\t\t},\n\t\tasync getSuiteInfo(browserContext: ExtendedBrowserCommandContext, taskId: string) {\n\t\t\tconst projectState = await getSuite(browserContext)\n\t\t\tconst visOptions = getVisOption(browserContext)\n\t\t\tconst moduleId = getTaskSubpath(projectState, browserContext.testPath, visOptions)\n\t\t\tconst m = projectState.modules[moduleId]!\n\t\t\tconst task = (m.tasks[taskId] = m.tasks[taskId] ?? { count: 1 })\n\t\t\treturn {\n\t\t\t\tprojectRoot: projectState.projectRoot,\n\t\t\t\tsuiteId: moduleId,\n\t\t\t\ttaskId,\n\t\t\t\tbaselineDir: m.baselineDir,\n\t\t\t\tresultDir: m.resultDir,\n\t\t\t\tdiffDir: m.diffDir,\n\t\t\t\ttask,\n\t\t\t}\n\t\t},\n\t}\n\treturn context\n}\n","import { createVisServerContext } from './vis_server_context.logic.ts'\n\nexport const visServerContext = createVisServerContext()\n","import { isAbsolute } from 'pathe'\nimport type { RequiredPick } from 'type-plus'\nimport type { ExtendedBrowserCommandContext } from '../vis_server_context.types.ts'\n\nexport function assertTestPathDefined(\n\tcontext: ExtendedBrowserCommandContext,\n\tcommandName: string,\n): asserts context is RequiredPick<ExtendedBrowserCommandContext, 'testPath'> {\n\tif (!context.testPath) {\n\t\tthrow new Error(`'commands.${commandName}' requires testPath to be defined`)\n\t}\n}\n\nexport function assertIsRelativePath(relativeFilePath: string, propName: string) {\n\tif (isAbsolute(relativeFilePath)) {\n\t\tthrow new Error(`'${propName}' must be a relative path`)\n\t}\n}\n","import { visServerContext } from '../vis_server_context.ts'\nimport type { ExtendedBrowserCommand } from '../vis_server_context.types.ts'\nimport { assertTestPathDefined } from './_assertions.ts'\n\nexport interface HasImageSnapshotCommand {\n\thasImageSnapshot(taskId: string, snapshotKey: string | undefined): Promise<boolean>\n}\n\nexport const hasImageSnapshot: ExtendedBrowserCommand<Parameters<HasImageSnapshotCommand['hasImageSnapshot']>> = async (\n\tcontext,\n\ttaskId,\n\tsnapshotKey,\n) => {\n\tassertTestPathDefined(context, 'hasImageSnapshot')\n\n\treturn visServerContext.hasImageSnapshot(context as any, taskId, snapshotKey)\n}\n","import { visServerContext } from '../vis_server_context.ts'\nimport type { ExtendedBrowserCommand } from '../vis_server_context.types.ts'\nimport { assertTestPathDefined } from './_assertions.ts'\n\nexport interface ImageSnapshotNextIndexCommand {\n\t/**\n\t * Get the index of the snapshot image to be created.\n\t */\n\timageSnapshotNextIndex(taskId: string): Promise<number>\n}\n\nexport const imageSnapshotNextIndex: ExtendedBrowserCommand<\n\tParameters<ImageSnapshotNextIndexCommand['imageSnapshotNextIndex']>\n> = async (context, taskId) => {\n\tassertTestPathDefined(context, 'imageSnapshotNextIndex')\n\n\treturn visServerContext.getTaskCount(context, taskId)\n}\n","import { visServerContext } from '../vis_server_context.ts'\nimport type { ExtendedBrowserCommand } from '../vis_server_context.types.ts'\nimport { assertTestPathDefined } from './_assertions.ts'\n\nexport interface ImageSnapshotResult {\n\tfilename: string\n\t/**\n\t * The base64 encoded image of the baseline snapshot.\n\t */\n\tbaseline?: string | undefined\n\t/**\n\t * The base64 encoded image of the result snapshot.\n\t */\n\tresult?: string | undefined\n\t/**\n\t * The base64 encoded image of the diff snapshot.\n\t */\n\tdiff?: string | undefined\n}\n\nexport interface LoadImageSnapshotResultsCommand {\n\tloadImageSnapshotResults(taskId: string): Promise<ImageSnapshotResult[]>\n}\n\nexport const loadImageSnapshotResults: ExtendedBrowserCommand<[taskId: string]> = async (\n\tcontext,\n\ttaskId,\n): Promise<ImageSnapshotResult[]> => {\n\tassertTestPathDefined(context, 'loadImageSnapshotResults')\n\treturn visServerContext.getSnapshotResults(context, taskId)\n}\n","import { resolve } from 'pathe'\nimport type { ExtendedBrowserCommandContext } from '../vis_server_context.types.ts'\nimport type { BrowserApi } from './types.ts'\n\nexport function playwright(context: ExtendedBrowserCommandContext): BrowserApi {\n\tconst { page, iframe } = context\n\n\treturn {\n\t\tasync takeScreenshot(projectRoot, relativeFilePath, selector, options) {\n\t\t\tconst subject = iframe.locator(selector)\n\t\t\treturn subject.screenshot({\n\t\t\t\tpath: resolve(projectRoot, relativeFilePath),\n\t\t\t\t...options,\n\t\t\t})\n\t\t},\n\t\tasync takePageScreenshot(projectRoot, relativeFilePath, options) {\n\t\t\treturn page.screenshot({\n\t\t\t\tpath: resolve(projectRoot, relativeFilePath),\n\t\t\t\t...options,\n\t\t\t})\n\t\t},\n\t}\n}\n","import type { ExtendedBrowserCommandContext } from '../vis_server_context.types.ts'\nimport type { BrowserApi } from './types.ts'\n\nexport function webdriverio(context: ExtendedBrowserCommandContext): BrowserApi {\n\tconst { browser } = context\n\treturn {\n\t\tasync takeScreenshot(_projectRoot, relativeFilePath, selector) {\n\t\t\tconst element = await browser.$(`${selector}`)\n\t\t\treturn element.saveScreenshot(relativeFilePath)\n\t\t},\n\t\tasync takePageScreenshot(_projectRoot, relativeFilePath, options) {\n\t\t\treturn browser.saveScreenshot(relativeFilePath, options)\n\t\t},\n\t}\n}\n","import type { ExtendedBrowserCommandContext } from '../vis_server_context.types.ts'\nimport { playwright } from './playwright.ts'\nimport { webdriverio } from './webdriverio.ts'\n\nexport function browserApi(context: ExtendedBrowserCommandContext) {\n\tif (context.provider.name === 'playwright') {\n\t\treturn playwright(context)\n\t}\n\tif (context.provider.name === 'webdriverio') {\n\t\treturn webdriverio(context)\n\t}\n\tthrow new Error(`Unsupported provider: ${context.provider.name}`)\n}\n","import { dirname } from 'pathe'\nimport { file } from './externals/file.ts'\n\nexport interface SnapshotWriter {\n\twriteBase64(filePath: string, data: string): Promise<void>\n\twriteBuffer(filePath: string, data: Buffer): Promise<void>\n}\n\nexport function createSnapshotWriter({ mkdirp, writeFile } = file): SnapshotWriter {\n\treturn {\n\t\tasync writeBase64(filePath: string, data: string) {\n\t\t\tawait mkdirp(dirname(filePath))\n\t\t\tawait writeFile(filePath, data, { encoding: 'base64' })\n\t\t},\n\t\tasync writeBuffer(filePath, data) {\n\t\t\tawait mkdirp(dirname(filePath))\n\t\t\tawait writeFile(filePath, data)\n\t\t},\n\t}\n}\n\nexport const snapshotWriter = createSnapshotWriter()\n","import { mkdirp } from 'mkdirp'\nimport { dirname, resolve } from 'pathe'\nimport { isBase64String } from '../shared/base64.ts'\nimport type { ImageSnapshotTimeoutOptions, PageImageSnapshotOptions } from '../shared/types.ts'\nimport { browserApi } from './browser_provider/browser_api.ts'\nimport { snapshotWriter } from './snapshot_writer.ts'\nimport type { ExtendedBrowserCommandContext } from './vis_server_context.types.ts'\n\nexport async function takeSnapshot(\n\tcontext: ExtendedBrowserCommandContext,\n\tprojectRoot: string,\n\trelativeFilePath: string,\n\tsubject: string,\n\toptions: ImageSnapshotTimeoutOptions | undefined,\n) {\n\tif (isBase64String(subject)) {\n\t\tawait snapshotWriter.writeBase64(resolve(projectRoot, relativeFilePath), subject)\n\t\treturn Buffer.from(subject, 'base64')\n\t}\n\treturn takeSnapshotByBrowser(context, projectRoot, relativeFilePath, subject, options)\n}\n\nexport async function takeSnapshotByBrowser(\n\tcontext: ExtendedBrowserCommandContext,\n\tprojectRoot: string,\n\trelativeFilePath: string,\n\tsubject: string,\n\toptions: ImageSnapshotTimeoutOptions | undefined,\n) {\n\tconst filePath = resolve(projectRoot, relativeFilePath)\n\tawait mkdirp(dirname(filePath))\n\tconst browser = browserApi(context)\n\treturn browser.takeScreenshot(projectRoot, relativeFilePath, subject ?? 'body', {\n\t\ttimeout: options?.timeout,\n\t})\n}\n\nexport async function takePageSnapshot(\n\tcontext: ExtendedBrowserCommandContext,\n\tprojectRoot: string,\n\trelativeFilePath: string,\n\toptions: (PageImageSnapshotOptions & ImageSnapshotTimeoutOptions) | undefined,\n) {\n\tconst filePath = resolve(projectRoot, relativeFilePath)\n\tawait mkdirp(dirname(filePath))\n\tconst browser = browserApi(context)\n\treturn browser.takePageScreenshot(projectRoot, relativeFilePath, {\n\t\ttimeout: options?.timeout,\n\t\tfullPage: options?.fullPage,\n\t})\n}\n","import { resolve } from 'pathe'\nimport { isBase64String } from '../../shared/base64.ts'\nimport type {\n\tFailureThresholdOptions,\n\tImageSnapshotTimeoutOptions,\n\tPixelComparisonOptions,\n\tSsimComparisonOptions,\n} from '../../shared/types.ts'\nimport { file } from '../externals/file.ts'\nimport { getProjectRoot } from '../project.ts'\nimport { takeSnapshot, takeSnapshotByBrowser } from '../snapshot.ts'\nimport { snapshotWriter } from '../snapshot_writer.ts'\nimport { visServerContext } from '../vis_server_context.ts'\nimport type { ExtendedBrowserCommand } from '../vis_server_context.types.ts'\nimport { assertTestPathDefined } from './_assertions.ts'\nimport type { MatchImageSnapshotOptions } from './types.ts'\n\nexport type ImageSnapshotComparisonInfo = {\n\t/**\n\t * Path to the project root.\n\t */\n\tprojectRoot: string\n\t/**\n\t * Path to the baseline image relative to the project root.\n\t */\n\tbaselinePath: string\n\t/**\n\t * Path to the result image relative to the project root.\n\t */\n\tresultPath: string\n\t/**\n\t * Path to the diff image relative to the project root.\n\t */\n\tdiffPath: string\n\t/**\n\t * Base64 encoded baseline image.\n\t */\n\tbaseline: string\n\t/**\n\t * Base64 encoded result image.\n\t */\n\tresult: string\n\t/**\n\t * Base64 encoded diff image.\n\t */\n\tdiff?: string | undefined\n} & ImageSnapshotTimeoutOptions &\n\tFailureThresholdOptions &\n\t(SsimComparisonOptions | PixelComparisonOptions)\n\nexport interface PrepareImageSnapshotComparisonCommand {\n\tprepareImageSnapshotComparison: (\n\t\ttaskId: string,\n\t\tsubject: string,\n\t\toptions?: MatchImageSnapshotOptions | undefined,\n\t) => Promise<ImageSnapshotComparisonInfo | undefined>\n}\n\nexport const prepareImageSnapshotComparison: ExtendedBrowserCommand<\n\tParameters<PrepareImageSnapshotComparisonCommand['prepareImageSnapshotComparison']>\n> = async (context, taskId, subject, options): Promise<ImageSnapshotComparisonInfo | undefined> => {\n\tassertTestPathDefined(context, 'prepareImageSnapshotComparison')\n\t// vitest:browser passes in `null` when not defined\n\tif (!options) options = {}\n\toptions.timeout = options.timeout ?? 30000\n\n\tconst projectRoot = getProjectRoot(context)\n\tconst info = await visServerContext.getSnapshotInfo(context, taskId, options)\n\n\tconst baselineBuffer = await file.tryReadFile(resolve(projectRoot, info.baselinePath))\n\tif (!baselineBuffer) {\n\t\tif (isBase64String(subject)) {\n\t\t\tawait snapshotWriter.writeBase64(resolve(projectRoot, info.baselinePath), subject)\n\t\t} else {\n\t\t\tawait takeSnapshotByBrowser(context, projectRoot, info.baselinePath, subject, options)\n\t\t}\n\t\treturn\n\t}\n\n\tconst resultBuffer = await takeSnapshot(context, projectRoot, info.resultPath, subject, options)\n\treturn {\n\t\t...info,\n\t\tprojectRoot,\n\t\tbaseline: baselineBuffer.toString('base64'),\n\t\tresult: resultBuffer.toString('base64'),\n\t}\n}\n","import { resolve } from 'pathe'\nimport type {\n\tFailureThresholdOptions,\n\tImageSnapshotTimeoutOptions,\n\tPixelComparisonOptions,\n\tSsimComparisonOptions,\n} from '../../shared/types.ts'\nimport { file } from '../externals/file.ts'\nimport { getProjectRoot } from '../project.ts'\nimport { takePageSnapshot } from '../snapshot.ts'\nimport { visServerContext } from '../vis_server_context.ts'\nimport type { ExtendedBrowserCommand } from '../vis_server_context.types.ts'\nimport { assertTestPathDefined } from './_assertions.ts'\nimport type { MatchImageSnapshotOptions } from './types.ts'\n\ntype ImageSnapshotComparisonInfo = {\n\t/**\n\t * Path to the project root.\n\t */\n\tprojectRoot: string\n\t/**\n\t * Path to the baseline image relative to the project root.\n\t */\n\tbaselinePath: string\n\t/**\n\t * Path to the result image relative to the project root.\n\t */\n\tresultPath: string\n\t/**\n\t * Path to the diff image relative to the project root.\n\t */\n\tdiffPath: string\n\t/**\n\t * Base64 encoded baseline image.\n\t */\n\tbaseline: string\n\t/**\n\t * Base64 encoded result image.\n\t */\n\tresult: string\n} & ImageSnapshotTimeoutOptions &\n\tFailureThresholdOptions &\n\t(SsimComparisonOptions | PixelComparisonOptions)\n\nexport interface PreparePageImageSnapshotComparisonCommand {\n\tpreparePageImageSnapshotComparison: (\n\t\ttaskId: string,\n\t\toptions?: MatchImageSnapshotOptions | undefined,\n\t) => Promise<ImageSnapshotComparisonInfo | undefined>\n}\n\nexport const preparePageImageSnapshotComparison: ExtendedBrowserCommand<\n\tParameters<PreparePageImageSnapshotComparisonCommand['preparePageImageSnapshotComparison']>\n> = async (context, taskId, options) => {\n\tassertTestPathDefined(context, 'preparePageImageSnapshotComparison')\n\t// vitest:browser passes in `null` when not defined\n\tif (!options) options = {}\n\toptions.timeout = options.timeout ?? 30000\n\n\tconst projectRoot = getProjectRoot(context)\n\tconst info = await visServerContext.getSnapshotInfo(context, taskId, options)\n\tconst baselineBuffer = await file.tryReadFile(resolve(projectRoot, info.baselinePath))\n\tif (!baselineBuffer) {\n\t\tawait takePageSnapshot(context, projectRoot, info.baselinePath, options)\n\t\treturn\n\t}\n\n\tconst resultBuffer = await takePageSnapshot(context, projectRoot, info.resultPath, options)\n\treturn {\n\t\t...info,\n\t\tprojectRoot,\n\t\tbaseline: baselineBuffer.toString('base64'),\n\t\tresult: resultBuffer.toString('base64'),\n\t}\n}\n","import type { Pick } from 'type-plus'\nimport type { VisOptions } from '../../config/types.ts'\nimport { setupSuite } from '../suite.ts'\nimport type { ExtendedBrowserCommand, ExtendedBrowserCommandContext } from '../vis_server_context.types.ts'\nimport { assertTestPathDefined } from './_assertions.ts'\n\nexport interface SetupVisSuiteCommand {\n\t/**\n\t * Sets up the visual testing suite by cleaning up previous snapshot and diff output directories.\n\t * When this command is run for the first time,\n\t * it will remove the results and diffs directory of all suites.\n\t *\n\t * In subsequent runs, it will only remove the results and diffs directory of the current suite.\n\t */\n\tsetupVisSuite: () => Promise<\n\t\tPick<\n\t\t\tVisOptions,\n\t\t\t| 'comparisonMethod'\n\t\t\t| 'diffOptions'\n\t\t\t| 'failureThreshold'\n\t\t\t| 'failureThresholdType'\n\t\t\t| 'snapshotKey'\n\t\t\t| 'subject'\n\t\t\t| 'timeout'\n\t\t>\n\t>\n}\n\nexport const setupVisSuite: ExtendedBrowserCommand<[]> = async (context): Promise<{ subject: string | undefined }> => {\n\tassertTestPathDefined(context, 'setupVisSuite')\n\treturn setupSuite(context as unknown as ExtendedBrowserCommandContext)\n}\n","import { hasImageSnapshot } from './has_image_snapshot.ts'\nimport { imageSnapshotNextIndex } from './image_snapshot_next_index.ts'\nimport { loadImageSnapshotResults } from './load_image_snapshot_results.ts'\nimport { prepareImageSnapshotComparison } from './prepare_image_snapshot_comparison.ts'\nimport { preparePageImageSnapshotComparison } from './prepare_page_image_snapshot_comparison.ts'\nimport { setupVisSuite } from './setup_vis_suite.ts'\n\nexport const commands = {\n\tsetupVisSuite,\n\timageSnapshotNextIndex,\n\thasImageSnapshot,\n\tpreparePageImageSnapshotComparison,\n\tprepareImageSnapshotComparison,\n\tloadImageSnapshotResults,\n}\n","import type { Plugin } from 'vitest/config'\nimport { commands } from '../server/commands/commands.ts'\nimport { setVisOption } from '../server/vis_options.ts'\nimport { NAME } from '../shared/constants.ts'\nimport type { ComparisonMethod } from '../shared/types.ts'\nimport type { VisOptions } from './types.ts'\n\n/**\n * Create a Vite plugin for visual testing.\n *\n * If options are not provided, the plugin will use the default options,\n * which enables the `auto` preset.\n */\nexport function vis<M extends ComparisonMethod = 'pixel'>(options: VisOptions<M> = { preset: 'auto' } as any) {\n\treturn {\n\t\tname: NAME,\n\t\tconfig(this: unknown, userConfig) {\n\t\t\tsetVisOption(userConfig, options)\n\t\t\tconst preset = options?.preset\n\t\t\treturn {\n\t\t\t\ttest: {\n\t\t\t\t\tbrowser: {\n\t\t\t\t\t\tname: undefined,\n\t\t\t\t\t\tcommands: commands as any,\n\t\t\t\t\t},\n\t\t\t\t\tsetupFiles: preset && preset !== 'none' && preset !== 'custom' ? [`vitest-plugin-vis/presets/${preset}`] : [],\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\t} satisfies Plugin\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/shared/constants.ts
|
|
2
|
+
const NAME = "vis";
|
|
3
|
+
const SNAPSHOT_ROOT_DIR = "__vis__";
|
|
4
|
+
const BASELINE_DIR = "__baselines__";
|
|
5
|
+
const RESULT_DIR = "__results__";
|
|
6
|
+
const DIFF_DIR = "__diffs__";
|
|
7
|
+
|
|
8
|
+
//#endregion
|
|
9
|
+
export { SNAPSHOT_ROOT_DIR as a, RESULT_DIR as i, DIFF_DIR as n, NAME as r, BASELINE_DIR as t };
|
|
10
|
+
//# sourceMappingURL=constants-CTBaz8Ml.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants-CTBaz8Ml.mjs","names":[],"sources":["../src/shared/constants.ts"],"sourcesContent":["export const NAME = 'vis'\nexport const SNAPSHOT_ROOT_DIR = '__vis__'\nexport const BASELINE_DIR = '__baselines__'\nexport const RESULT_DIR = '__results__'\nexport const DIFF_DIR = '__diffs__'\n"],"mappings":";AAAA,MAAa,OAAO;AACpB,MAAa,oBAAoB;AACjC,MAAa,eAAe;AAC5B,MAAa,aAAa;AAC1B,MAAa,WAAW"}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { a as ImageSnapshotKeyOptions, c as PageImageSnapshotOptions, d as SnapshotTestMeta, f as SsimComparisonOptions, h as ToMatchPageImageSnapshotOptions, i as ImageSnapshotCompareOptions, l as PixelComparisonOptions, m as ToMatchImageSnapshotOptions, n as ComparisonMethod, o as ImageSnapshotSubjectOptions, p as SsimDiffOptions, r as FailureThresholdOptions, s as ImageSnapshotTimeoutOptions, t as Awaitable, u as PixelDiffOptions } from "./types-DFb23VE1.mjs";
|
|
2
|
+
import { n as setAutoSnapshotOptions, t as MetaTask } from "./auto_snapshot_options-CaQCXDdi.mjs";
|
|
3
|
+
import "./to_match_image_snapshot.types-p-zilA_M.mjs";
|
|
4
|
+
import "./augment-BJmy1S7i.mjs";
|
|
5
|
+
export { Awaitable, ComparisonMethod, FailureThresholdOptions, ImageSnapshotCompareOptions, ImageSnapshotKeyOptions, ImageSnapshotSubjectOptions, ImageSnapshotTimeoutOptions, type MetaTask, PageImageSnapshotOptions, PixelComparisonOptions, PixelDiffOptions, SnapshotTestMeta, SsimComparisonOptions, SsimDiffOptions, ToMatchImageSnapshotOptions, ToMatchPageImageSnapshotOptions, setAutoSnapshotOptions };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import "../asserts--HSSlgPD.mjs";
|
|
2
|
+
import "../constants-CTBaz8Ml.mjs";
|
|
3
|
+
import { n as setAutoSnapshotOptions } from "../auto_snapshot_options-CAD43Zkp.mjs";
|
|
4
|
+
import "../src-CSQnlFa9.mjs";
|
|
5
|
+
import "../base64-CHSENEAO.mjs";
|
|
6
|
+
import "../task_id-DnS9_4Ub.mjs";
|
|
7
|
+
import { t as vis } from "../setup-BWgIDtv-.mjs";
|
|
8
|
+
import { afterEach, beforeAll } from "vitest";
|
|
9
|
+
|
|
10
|
+
//#region src/presets/auto.ts
|
|
11
|
+
beforeAll(async () => {
|
|
12
|
+
await vis.beforeAll.setup();
|
|
13
|
+
setAutoSnapshotOptions(true);
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => vis.afterEach.matchImageSnapshot());
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { };
|
|
19
|
+
//# sourceMappingURL=auto.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto.mjs","names":[],"sources":["../../src/presets/auto.ts"],"sourcesContent":["import { afterEach, beforeAll } from 'vitest'\nimport { setAutoSnapshotOptions } from '../index.ts'\nimport { vis } from '../setup.ts'\n\nbeforeAll(async () => {\n\tawait vis.beforeAll.setup()\n\tsetAutoSnapshotOptions(true)\n})\nafterEach(() => vis.afterEach.matchImageSnapshot())\n"],"mappings":";;;;;;;;;;AAIA,UAAU,YAAY;AACrB,OAAM,IAAI,UAAU,OAAO;AAC3B,wBAAuB,KAAK;EAC3B;AACF,gBAAgB,IAAI,UAAU,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "../asserts--HSSlgPD.mjs";
|
|
2
|
+
import "../constants-CTBaz8Ml.mjs";
|
|
3
|
+
import "../auto_snapshot_options-CAD43Zkp.mjs";
|
|
4
|
+
import "../base64-CHSENEAO.mjs";
|
|
5
|
+
import "../task_id-DnS9_4Ub.mjs";
|
|
6
|
+
import { t as vis } from "../setup-BWgIDtv-.mjs";
|
|
7
|
+
import { afterEach, beforeAll } from "vitest";
|
|
8
|
+
|
|
9
|
+
//#region src/presets/enable.ts
|
|
10
|
+
beforeAll(() => vis.beforeAll.setup());
|
|
11
|
+
afterEach(() => vis.afterEach.matchImageSnapshot());
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
export { };
|
|
15
|
+
//# sourceMappingURL=enable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enable.mjs","names":[],"sources":["../../src/presets/enable.ts"],"sourcesContent":["import { afterEach, beforeAll } from 'vitest'\nimport { vis } from '../setup.ts'\n\nbeforeAll(() => vis.beforeAll.setup())\nafterEach(() => vis.afterEach.matchImageSnapshot())\n"],"mappings":";;;;;;;;;AAGA,gBAAgB,IAAI,UAAU,OAAO,CAAC;AACtC,gBAAgB,IAAI,UAAU,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "../asserts--HSSlgPD.mjs";
|
|
2
|
+
import "../constants-CTBaz8Ml.mjs";
|
|
3
|
+
import "../auto_snapshot_options-CAD43Zkp.mjs";
|
|
4
|
+
import "../base64-CHSENEAO.mjs";
|
|
5
|
+
import "../task_id-DnS9_4Ub.mjs";
|
|
6
|
+
import { t as vis } from "../setup-BWgIDtv-.mjs";
|
|
7
|
+
import { afterEach, beforeAll } from "vitest";
|
|
8
|
+
|
|
9
|
+
//#region src/presets/manual.ts
|
|
10
|
+
beforeAll(() => vis.beforeAll.setup());
|
|
11
|
+
afterEach(() => vis.afterEach.matchImageSnapshot());
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
export { };
|
|
15
|
+
//# sourceMappingURL=manual.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual.mjs","names":[],"sources":["../../src/presets/manual.ts"],"sourcesContent":["import { afterEach, beforeAll } from 'vitest'\nimport { vis } from '../setup.ts'\n\nbeforeAll(() => vis.beforeAll.setup())\nafterEach(() => vis.afterEach.matchImageSnapshot())\n"],"mappings":";;;;;;;;;AAGA,gBAAgB,IAAI,UAAU,OAAO,CAAC;AACtC,gBAAgB,IAAI,UAAU,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { _ as DIFF_DIR, b as SNAPSHOT_ROOT_DIR, g as BASELINE_DIR, v as NAME, y as RESULT_DIR } from "./types-DFb23VE1.mjs";
|
|
2
|
+
import "./vis_server_context.types-Ce1f9vOO.mjs";
|
|
3
|
+
import "./types-Do1N7g4c.mjs";
|
|
4
|
+
import { t as trimCommonFolder } from "./trim_common_folder-ModiubEJ.mjs";
|
|
5
|
+
|
|
6
|
+
//#region src/server/snapshot_path.d.ts
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Gets the root directory for storing snapshots.
|
|
10
|
+
*
|
|
11
|
+
* @param snapshotRootDir - Base directory for snapshots. Defaults to `__vis__`.
|
|
12
|
+
* @returns The full snapshot root directory path, which includes a platform-specific subdirectory:
|
|
13
|
+
* - When running in CI: `<snapshotRootDir>/<platform>` (e.g. `__vis__/linux`)
|
|
14
|
+
* - When running locally: `<snapshotRootDir>/local`
|
|
15
|
+
*/
|
|
16
|
+
declare function getSnapshotRootDir(snapshotRootDir?: string): string;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { BASELINE_DIR, DIFF_DIR, NAME, RESULT_DIR, SNAPSHOT_ROOT_DIR, getSnapshotRootDir, trimCommonFolder };
|
|
19
|
+
//# sourceMappingURL=server-utils.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-utils.d.mts","names":[],"sources":["../src/server/snapshot_path.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;AA8BA;;;;;iBAAgB,kBAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { a as SNAPSHOT_ROOT_DIR, i as RESULT_DIR, n as DIFF_DIR, r as NAME, t as BASELINE_DIR } from "./constants-CTBaz8Ml.mjs";
|
|
2
|
+
import { i as trimCommonFolder, t as getSnapshotRootDir } from "./snapshot_path-7GliOSH_.mjs";
|
|
3
|
+
|
|
4
|
+
export { BASELINE_DIR, DIFF_DIR, NAME, RESULT_DIR, SNAPSHOT_ROOT_DIR, getSnapshotRootDir, trimCommonFolder };
|