@argos-ci/storybook 5.2.15 → 5.3.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.
@@ -1,271 +0,0 @@
1
- // src/test-runner.ts
2
- import { getStoryContext, waitForPageReady } from "@storybook/test-runner";
3
-
4
- // src/utils/screenshot.ts
5
- import {
6
- argosScreenshot as argosPlaywrightScreenshot,
7
- DO_NOT_USE_setMetadataConfig
8
- } from "@argos-ci/playwright";
9
-
10
- // src/utils/metadata.ts
11
- import { readVersionFromPackage } from "@argos-ci/util";
12
- import { createRequire } from "module";
13
- var require2 = createRequire(import.meta.url);
14
- async function getArgosStorybookVersion() {
15
- const pkgPath = require2.resolve("@argos-ci/storybook/package.json");
16
- return readVersionFromPackage(pkgPath);
17
- }
18
-
19
- // src/utils/parameters.ts
20
- function getDefaultViewport(parameters) {
21
- const defaultViewport = parameters?.viewport?.defaultViewport;
22
- if (defaultViewport) {
23
- return getViewport(parameters, defaultViewport);
24
- }
25
- return null;
26
- }
27
- function getViewport(parameters, viewportName) {
28
- if (typeof viewportName === "number") {
29
- return { width: viewportName, height: 720 };
30
- }
31
- const viewports = parameters?.viewport?.viewports;
32
- if (viewports && viewportName in viewports) {
33
- if ("styles" in viewports[viewportName] && viewports[viewportName].styles) {
34
- const width = parseInt(viewports[viewportName].styles.width, 10);
35
- const height = parseInt(viewports[viewportName].styles.height, 10);
36
- if (!isNaN(width) && !isNaN(height)) {
37
- return { width, height };
38
- }
39
- }
40
- }
41
- return null;
42
- }
43
- function getArgosParameters(parameters) {
44
- if ("argos" in parameters && parameters.argos && typeof parameters.argos === "object") {
45
- return parameters.argos;
46
- }
47
- if ("chromatic" in parameters && parameters.chromatic && typeof parameters.chromatic === "object") {
48
- return parameters.chromatic;
49
- }
50
- return null;
51
- }
52
- var DEFAULT_FIT_TO_CONTENT = {
53
- padding: 16,
54
- zoom: 2
55
- };
56
- function getFitToContentFromParameters(parameters) {
57
- const argosParameters = getArgosParameters(parameters);
58
- if (argosParameters && "fitToContent" in argosParameters) {
59
- if (typeof argosParameters.fitToContent === "boolean") {
60
- return argosParameters.fitToContent ? DEFAULT_FIT_TO_CONTENT : null;
61
- }
62
- if (typeof argosParameters.fitToContent === "object" && argosParameters.fitToContent) {
63
- return {
64
- ...DEFAULT_FIT_TO_CONTENT,
65
- ...argosParameters.fitToContent
66
- };
67
- }
68
- }
69
- return DEFAULT_FIT_TO_CONTENT;
70
- }
71
-
72
- // src/utils/screenshot.ts
73
- async function storybookArgosScreenshot(handler, context, options) {
74
- const argosOptions = {
75
- ...options,
76
- // Disable aria-busy stabilization by default
77
- stabilize: options?.stabilize ?? {
78
- waitForAriaBusy: false,
79
- ...typeof options?.stabilize === "object" ? options.stabilize : {}
80
- }
81
- };
82
- const version = await getArgosStorybookVersion();
83
- const storyUrl = `http://localhost:6006/?path=/story/${context.story.id}`;
84
- const metadata = {
85
- sdk: { name: "@argos-ci/storybook", version },
86
- playwrightLibraries: context.playwrightLibraries,
87
- url: storyUrl,
88
- test: context.test
89
- };
90
- const argosParameters = getArgosParameters(context.story.parameters);
91
- const modes = argosParameters?.modes;
92
- const allAttachments = [];
93
- if (context.mode === "automatic") {
94
- if (modes) {
95
- for (const [name, globals] of Object.entries(modes)) {
96
- if (globals.disabled) {
97
- continue;
98
- }
99
- await handler.evaluate((name2) => {
100
- globalThis.__ARGOS_CURRENT_MODE = name2;
101
- }, name);
102
- const attachments = await runHooksAndScreenshot({
103
- handler,
104
- context,
105
- metadata,
106
- options: argosOptions,
107
- suffix: getModeSuffix(name),
108
- globals: {
109
- ...context.story.globals,
110
- ...globals
111
- }
112
- });
113
- allAttachments.push(...attachments);
114
- await context.setViewportSize("initial");
115
- await handler.evaluate(() => {
116
- delete globalThis.__ARGOS_CURRENT_MODE;
117
- });
118
- }
119
- } else {
120
- const attachments = await runHooksAndScreenshot({
121
- handler,
122
- context,
123
- metadata,
124
- options: argosOptions,
125
- globals: context.story.globals ?? {}
126
- });
127
- await context.setViewportSize("initial");
128
- allAttachments.push(...attachments);
129
- }
130
- } else if (context.mode === "manual") {
131
- const currentMode = await handler.evaluate(() => {
132
- return globalThis.__ARGOS_CURRENT_MODE || null;
133
- });
134
- if (modes && !currentMode) {
135
- return;
136
- }
137
- await markStoryAsRendered(handler, context.story.id);
138
- await argosPlaywrightScreenshot(
139
- handler,
140
- composeName(context.name, getModeSuffix(currentMode)),
141
- options
142
- );
143
- }
144
- await context.afterScreenshot?.({ handler, globals: {} });
145
- return allAttachments;
146
- }
147
- async function runStory(args) {
148
- const { handler, globals, storyId } = args;
149
- await handler.evaluate(async (globals2) => {
150
- if ("__ARGOS_STORYBOOK_STORY" in globalThis) {
151
- const storyFn = globalThis.__ARGOS_STORYBOOK_STORY;
152
- if (!storyFn) {
153
- throw new Error(
154
- "@argos-ci/storybook: Unable to find `__ARGOS_STORYBOOK_STORY`."
155
- );
156
- }
157
- const canvasElement = (() => {
158
- const existing = document.getElementById("storybook-root");
159
- existing?.remove();
160
- const canvasElement2 = document.createElement("div");
161
- canvasElement2.id = "storybook-root";
162
- document.body.appendChild(canvasElement2);
163
- return canvasElement2;
164
- })();
165
- await storyFn.run({ globals: globals2, canvasElement });
166
- return;
167
- }
168
- const channel = (() => {
169
- if ("__STORYBOOK_PREVIEW__" in globalThis) {
170
- return globalThis.__STORYBOOK_PREVIEW__.channel;
171
- }
172
- return null;
173
- })();
174
- if (!channel) {
175
- throw new Error(
176
- "@argos-ci/storybook: Unable to find `__STORYBOOK_PREVIEW__`."
177
- );
178
- }
179
- const initialGlobals = channel.last("globalsUpdated")?.[0].initialGlobals;
180
- channel.emit("updateGlobals", {
181
- globals: { ...initialGlobals, ...globals2 }
182
- });
183
- }, globals);
184
- await markStoryAsRendered(handler, storyId);
185
- }
186
- async function markStoryAsRendered(handler, storyId) {
187
- await handler.evaluate((storyId2) => {
188
- if ("__ARGOS_STORYBOOK_STORY" in globalThis) {
189
- const addons = globalThis.__STORYBOOK_ADDONS_PREVIEW;
190
- if (!addons) {
191
- throw new Error(
192
- "@argos-ci/storybook: Unable to find `__STORYBOOK_ADDONS_PREVIEW`."
193
- );
194
- }
195
- addons.getChannel().emit("storyRendered", storyId2);
196
- }
197
- }, storyId);
198
- }
199
- async function runHooksAndScreenshot(args) {
200
- const { handler, context, options, globals, metadata } = args;
201
- await runStory({ handler, globals, storyId: context.story.id });
202
- const viewportFromGlobals = globals.viewport ? getViewport(context.story.parameters, globals.viewport) : null;
203
- const viewport = viewportFromGlobals ?? getDefaultViewport(context.story.parameters) ?? "default";
204
- await context.setViewportSize(viewport);
205
- DO_NOT_USE_setMetadataConfig({
206
- ...metadata,
207
- viewport: viewport && viewport !== "default" ? viewport : void 0
208
- });
209
- await context.beforeScreenshot?.({ handler, globals });
210
- return argosPlaywrightScreenshot(
211
- handler,
212
- composeName(context.name, args.suffix),
213
- options
214
- );
215
- }
216
- function getModeSuffix(mode) {
217
- return mode ? ` mode-[${mode}]` : "";
218
- }
219
- function composeName(name, suffix) {
220
- return name + (suffix ?? "");
221
- }
222
-
223
- // src/test-runner.ts
224
- var DEFAULT_PLAYWRIGHT_VIEWPORT_SIZE = { width: 1280, height: 720 };
225
- async function argosScreenshot(page, context, options) {
226
- const storyContext = await getStoryContext(page, context);
227
- const fitToContent = getFitToContentFromParameters(storyContext.parameters);
228
- await storybookArgosScreenshot(
229
- page,
230
- {
231
- mode: "automatic",
232
- name: storyContext.id,
233
- playwrightLibraries: ["@storybook/test-runner"],
234
- beforeScreenshot: async ({ handler }) => {
235
- await waitForPageReady(handler);
236
- },
237
- story: {
238
- id: storyContext.id,
239
- parameters: storyContext.parameters,
240
- // We don't have access to globals in this context.
241
- globals: null
242
- },
243
- setViewportSize: async (size) => {
244
- const actualSize = await page.viewportSize();
245
- const absoluteSize = size === "default" || size === "initial" ? DEFAULT_PLAYWRIGHT_VIEWPORT_SIZE : size;
246
- if (!actualSize || actualSize.height !== absoluteSize.height || actualSize.width !== absoluteSize.width) {
247
- await page.setViewportSize(absoluteSize);
248
- await page.waitForFunction(
249
- ({ width, height }) => window.innerWidth === width && window.innerHeight === height,
250
- { width: absoluteSize.width, height: absoluteSize.height }
251
- );
252
- }
253
- }
254
- },
255
- applyFitToContent(options, fitToContent)
256
- );
257
- }
258
- function applyFitToContent(options, fitToContent) {
259
- if (!fitToContent) {
260
- return options;
261
- }
262
- const { padding, zoom } = fitToContent;
263
- return {
264
- ...options,
265
- element: "#storybook-root",
266
- argosCSS: `#storybook-root { padding: ${padding}px; width: fit-content; height: fit-content; zoom: ${zoom}; }` + (options?.argosCSS ?? "")
267
- };
268
- }
269
- export {
270
- argosScreenshot
271
- };
@@ -1,53 +0,0 @@
1
- import { Plugin } from 'vitest/config';
2
- import { BrowserCommand } from 'vitest/node';
3
- import { MetadataConfig, ArgosScreenshotOptions as ArgosScreenshotOptions$1 } from '@argos-ci/playwright';
4
- import { Page, Frame, ViewportSize } from 'playwright';
5
- import { UploadParameters } from '@argos-ci/core';
6
-
7
- type StorybookGlobals = Record<string, any>;
8
-
9
- type StorybookScreenshotContext<Handler extends Page | Frame> = {
10
- /**
11
- * - "manual" means the `argosScreenshot` has been called in the story play function.
12
- * - "automatic" means the screenshot is taken automatically after each test.
13
- */
14
- mode: "manual" | "automatic";
15
- name: string;
16
- playwrightLibraries: string[];
17
- test?: MetadataConfig["test"];
18
- setViewportSize: (size: ViewportSize | "default" | "initial") => Promise<void>;
19
- beforeScreenshot?: (input: {
20
- handler: Handler;
21
- globals: StorybookGlobals;
22
- }) => Promise<void>;
23
- afterScreenshot?: (input: {
24
- handler: Handler;
25
- globals: StorybookGlobals;
26
- }) => Promise<void>;
27
- story: {
28
- id: string;
29
- parameters: Record<string, any>;
30
- globals: StorybookGlobals | null;
31
- };
32
- };
33
- type ArgosScreenshotOptions = Omit<ArgosScreenshotOptions$1, "viewports">;
34
-
35
- type ArgosReporterConfig = UploadParameters;
36
-
37
- type ArgosScreenshotCommandArgs = [
38
- Pick<StorybookScreenshotContext<Frame>, "name" | "story" | "test" | "mode">
39
- ];
40
- interface ArgosVitestPluginOptions extends ArgosReporterConfig, ArgosScreenshotOptions {
41
- /**
42
- * Upload the report to Argos.
43
- * @default true
44
- */
45
- uploadToArgos?: boolean;
46
- }
47
- /**
48
- * Create a command for taking Argos screenshots in Vitest.
49
- */
50
- declare const createArgosScreenshotCommand: (pluginOptions?: ArgosVitestPluginOptions) => BrowserCommand<ArgosScreenshotCommandArgs>;
51
- declare function argosVitestPlugin(options?: ArgosVitestPluginOptions): Plugin;
52
-
53
- export { type ArgosScreenshotCommandArgs, type ArgosScreenshotOptions, type ArgosVitestPluginOptions, argosVitestPlugin, createArgosScreenshotCommand };
@@ -1,383 +0,0 @@
1
- // src/utils/screenshot.ts
2
- import {
3
- argosScreenshot as argosPlaywrightScreenshot,
4
- DO_NOT_USE_setMetadataConfig
5
- } from "@argos-ci/playwright";
6
-
7
- // src/utils/metadata.ts
8
- import { readVersionFromPackage } from "@argos-ci/util";
9
- import { createRequire } from "module";
10
- var require2 = createRequire(import.meta.url);
11
- async function getArgosStorybookVersion() {
12
- const pkgPath = require2.resolve("@argos-ci/storybook/package.json");
13
- return readVersionFromPackage(pkgPath);
14
- }
15
-
16
- // src/utils/parameters.ts
17
- function getDefaultViewport(parameters) {
18
- const defaultViewport = parameters?.viewport?.defaultViewport;
19
- if (defaultViewport) {
20
- return getViewport(parameters, defaultViewport);
21
- }
22
- return null;
23
- }
24
- function getViewport(parameters, viewportName) {
25
- if (typeof viewportName === "number") {
26
- return { width: viewportName, height: 720 };
27
- }
28
- const viewports = parameters?.viewport?.viewports;
29
- if (viewports && viewportName in viewports) {
30
- if ("styles" in viewports[viewportName] && viewports[viewportName].styles) {
31
- const width = parseInt(viewports[viewportName].styles.width, 10);
32
- const height = parseInt(viewports[viewportName].styles.height, 10);
33
- if (!isNaN(width) && !isNaN(height)) {
34
- return { width, height };
35
- }
36
- }
37
- }
38
- return null;
39
- }
40
- function getArgosParameters(parameters) {
41
- if ("argos" in parameters && parameters.argos && typeof parameters.argos === "object") {
42
- return parameters.argos;
43
- }
44
- if ("chromatic" in parameters && parameters.chromatic && typeof parameters.chromatic === "object") {
45
- return parameters.chromatic;
46
- }
47
- return null;
48
- }
49
- var DEFAULT_FIT_TO_CONTENT = {
50
- padding: 16,
51
- zoom: 2
52
- };
53
- function getFitToContentFromParameters(parameters) {
54
- const argosParameters = getArgosParameters(parameters);
55
- if (argosParameters && "fitToContent" in argosParameters) {
56
- if (typeof argosParameters.fitToContent === "boolean") {
57
- return argosParameters.fitToContent ? DEFAULT_FIT_TO_CONTENT : null;
58
- }
59
- if (typeof argosParameters.fitToContent === "object" && argosParameters.fitToContent) {
60
- return {
61
- ...DEFAULT_FIT_TO_CONTENT,
62
- ...argosParameters.fitToContent
63
- };
64
- }
65
- }
66
- return DEFAULT_FIT_TO_CONTENT;
67
- }
68
-
69
- // src/utils/screenshot.ts
70
- async function storybookArgosScreenshot(handler, context, options) {
71
- const argosOptions = {
72
- ...options,
73
- // Disable aria-busy stabilization by default
74
- stabilize: options?.stabilize ?? {
75
- waitForAriaBusy: false,
76
- ...typeof options?.stabilize === "object" ? options.stabilize : {}
77
- }
78
- };
79
- const version = await getArgosStorybookVersion();
80
- const storyUrl = `http://localhost:6006/?path=/story/${context.story.id}`;
81
- const metadata = {
82
- sdk: { name: "@argos-ci/storybook", version },
83
- playwrightLibraries: context.playwrightLibraries,
84
- url: storyUrl,
85
- test: context.test
86
- };
87
- const argosParameters = getArgosParameters(context.story.parameters);
88
- const modes = argosParameters?.modes;
89
- const allAttachments = [];
90
- if (context.mode === "automatic") {
91
- if (modes) {
92
- for (const [name, globals] of Object.entries(modes)) {
93
- if (globals.disabled) {
94
- continue;
95
- }
96
- await handler.evaluate((name2) => {
97
- globalThis.__ARGOS_CURRENT_MODE = name2;
98
- }, name);
99
- const attachments = await runHooksAndScreenshot({
100
- handler,
101
- context,
102
- metadata,
103
- options: argosOptions,
104
- suffix: getModeSuffix(name),
105
- globals: {
106
- ...context.story.globals,
107
- ...globals
108
- }
109
- });
110
- allAttachments.push(...attachments);
111
- await context.setViewportSize("initial");
112
- await handler.evaluate(() => {
113
- delete globalThis.__ARGOS_CURRENT_MODE;
114
- });
115
- }
116
- } else {
117
- const attachments = await runHooksAndScreenshot({
118
- handler,
119
- context,
120
- metadata,
121
- options: argosOptions,
122
- globals: context.story.globals ?? {}
123
- });
124
- await context.setViewportSize("initial");
125
- allAttachments.push(...attachments);
126
- }
127
- } else if (context.mode === "manual") {
128
- const currentMode = await handler.evaluate(() => {
129
- return globalThis.__ARGOS_CURRENT_MODE || null;
130
- });
131
- if (modes && !currentMode) {
132
- return;
133
- }
134
- await markStoryAsRendered(handler, context.story.id);
135
- await argosPlaywrightScreenshot(
136
- handler,
137
- composeName(context.name, getModeSuffix(currentMode)),
138
- options
139
- );
140
- }
141
- await context.afterScreenshot?.({ handler, globals: {} });
142
- return allAttachments;
143
- }
144
- async function runStory(args) {
145
- const { handler, globals, storyId } = args;
146
- await handler.evaluate(async (globals2) => {
147
- if ("__ARGOS_STORYBOOK_STORY" in globalThis) {
148
- const storyFn = globalThis.__ARGOS_STORYBOOK_STORY;
149
- if (!storyFn) {
150
- throw new Error(
151
- "@argos-ci/storybook: Unable to find `__ARGOS_STORYBOOK_STORY`."
152
- );
153
- }
154
- const canvasElement = (() => {
155
- const existing = document.getElementById("storybook-root");
156
- existing?.remove();
157
- const canvasElement2 = document.createElement("div");
158
- canvasElement2.id = "storybook-root";
159
- document.body.appendChild(canvasElement2);
160
- return canvasElement2;
161
- })();
162
- await storyFn.run({ globals: globals2, canvasElement });
163
- return;
164
- }
165
- const channel = (() => {
166
- if ("__STORYBOOK_PREVIEW__" in globalThis) {
167
- return globalThis.__STORYBOOK_PREVIEW__.channel;
168
- }
169
- return null;
170
- })();
171
- if (!channel) {
172
- throw new Error(
173
- "@argos-ci/storybook: Unable to find `__STORYBOOK_PREVIEW__`."
174
- );
175
- }
176
- const initialGlobals = channel.last("globalsUpdated")?.[0].initialGlobals;
177
- channel.emit("updateGlobals", {
178
- globals: { ...initialGlobals, ...globals2 }
179
- });
180
- }, globals);
181
- await markStoryAsRendered(handler, storyId);
182
- }
183
- async function markStoryAsRendered(handler, storyId) {
184
- await handler.evaluate((storyId2) => {
185
- if ("__ARGOS_STORYBOOK_STORY" in globalThis) {
186
- const addons = globalThis.__STORYBOOK_ADDONS_PREVIEW;
187
- if (!addons) {
188
- throw new Error(
189
- "@argos-ci/storybook: Unable to find `__STORYBOOK_ADDONS_PREVIEW`."
190
- );
191
- }
192
- addons.getChannel().emit("storyRendered", storyId2);
193
- }
194
- }, storyId);
195
- }
196
- async function runHooksAndScreenshot(args) {
197
- const { handler, context, options, globals, metadata } = args;
198
- await runStory({ handler, globals, storyId: context.story.id });
199
- const viewportFromGlobals = globals.viewport ? getViewport(context.story.parameters, globals.viewport) : null;
200
- const viewport = viewportFromGlobals ?? getDefaultViewport(context.story.parameters) ?? "default";
201
- await context.setViewportSize(viewport);
202
- DO_NOT_USE_setMetadataConfig({
203
- ...metadata,
204
- viewport: viewport && viewport !== "default" ? viewport : void 0
205
- });
206
- await context.beforeScreenshot?.({ handler, globals });
207
- return argosPlaywrightScreenshot(
208
- handler,
209
- composeName(context.name, args.suffix),
210
- options
211
- );
212
- }
213
- function getModeSuffix(mode) {
214
- return mode ? ` mode-[${mode}]` : "";
215
- }
216
- function composeName(name, suffix) {
217
- return name + (suffix ?? "");
218
- }
219
-
220
- // src/vitest-reporter.ts
221
- import { upload } from "@argos-ci/core";
222
- var ArgosReporter = class {
223
- vitest;
224
- config;
225
- constructor(config) {
226
- this.config = config;
227
- }
228
- onInit(vitest) {
229
- this.vitest = vitest;
230
- }
231
- // Compatibility for Vitest v3
232
- async onFinished() {
233
- await this.onTestRunEnd();
234
- }
235
- // Only on Vitest v4
236
- async onTestRunEnd() {
237
- if (this.vitest.config.watch) {
238
- return;
239
- }
240
- const res = await upload(this.config);
241
- console.log(`\u2705 Argos build created: ${res.build.url}`);
242
- }
243
- };
244
-
245
- // src/vitest-plugin.ts
246
- import { resolve } from "path";
247
- var createArgosScreenshotCommand = (pluginOptions) => {
248
- const screenshotOptions = pluginOptions ?? {};
249
- return async (ctx, testContext) => {
250
- const frame = await ctx.frame();
251
- const fitToContent = getFitToContentFromParameters(
252
- testContext.story.parameters
253
- );
254
- const after = await before(ctx);
255
- const attachments = await storybookArgosScreenshot(
256
- frame,
257
- {
258
- ...testContext,
259
- playwrightLibraries: ["@storybook/addon-vitest"],
260
- setViewportSize: async (size) => {
261
- await ctx.page.evaluate(
262
- ({ size: size2, fullPage }) => {
263
- const iframe = document.querySelector(
264
- 'iframe[data-vitest="true"]'
265
- );
266
- if (!(iframe instanceof HTMLIFrameElement)) {
267
- throw new Error("Vitest iframe not found");
268
- }
269
- if (!iframe.contentDocument) {
270
- throw new Error("Vitest iframe contentDocument not found");
271
- }
272
- if (size2 === "initial") {
273
- if (iframe.dataset.initialWidth && iframe.dataset.initialHeight) {
274
- iframe.style.width = iframe.dataset.initialWidth;
275
- iframe.style.height = iframe.dataset.initialHeight;
276
- }
277
- return;
278
- }
279
- if (!iframe.dataset.initialWidth && !iframe.dataset.initialHeight) {
280
- iframe.dataset.initialWidth = iframe.style.width;
281
- iframe.dataset.initialHeight = iframe.style.height;
282
- }
283
- if (size2 !== "default") {
284
- iframe.style.width = `${size2.width}px`;
285
- }
286
- if (fullPage) {
287
- if (!iframe.contentWindow) {
288
- throw new Error(`Can't access iframe window`);
289
- }
290
- const viewportHeight = size2 === "default" ? iframe.contentWindow.innerHeight : size2.height;
291
- iframe.style.height = "auto";
292
- iframe.style.height = viewportHeight < iframe.contentDocument.body.offsetHeight ? `${iframe.contentDocument.body.offsetHeight}px` : "100%";
293
- } else if (size2 !== "default") {
294
- iframe.style.height = "auto";
295
- iframe.style.height = `${size2.height}px`;
296
- }
297
- },
298
- { size, fullPage: screenshotOptions.fullPage ?? !fitToContent }
299
- );
300
- }
301
- },
302
- applyFitToContent(screenshotOptions, fitToContent)
303
- );
304
- await after();
305
- return attachments;
306
- };
307
- };
308
- async function before(ctx) {
309
- await ctx.page.evaluate(() => {
310
- const tester = document.getElementById("vitest-tester");
311
- if (!(tester instanceof HTMLElement)) {
312
- return;
313
- }
314
- const scale = tester.getAttribute("data-scale");
315
- if (!scale) {
316
- throw new Error("Vitest iframe data-scale attribute not found");
317
- }
318
- tester.dataset.bckTransform = tester.style.transform;
319
- tester.style.transform = `scale(1)`;
320
- });
321
- return async () => {
322
- await ctx.page.evaluate(() => {
323
- const tester = document.getElementById("vitest-tester");
324
- if (!(tester instanceof HTMLElement)) {
325
- return;
326
- }
327
- tester.style.transform = tester.dataset.bckTransform ?? "";
328
- });
329
- };
330
- }
331
- function applyFitToContent(options, fitToContent) {
332
- if (!fitToContent) {
333
- return options;
334
- }
335
- const { padding, zoom } = fitToContent;
336
- return {
337
- ...options,
338
- element: "body",
339
- argosCSS: `body { padding: ${padding}px; width: fit-content; height: fit-content; min-height: initial; zoom: ${zoom}; }` + (options?.argosCSS ?? "")
340
- };
341
- }
342
- var cwd = process.cwd();
343
- function argosVitestPlugin(options) {
344
- const {
345
- root: unresolvedRoot = "./screenshots",
346
- uploadToArgos,
347
- ...otherOptions
348
- } = options ?? {};
349
- const root = resolve(cwd, unresolvedRoot);
350
- const setupFile = resolve(import.meta.dirname, "./vitest-setup-file.js");
351
- return {
352
- name: "@argos-ci/storybook/vitest-plugin",
353
- configureVitest({ vitest, project }) {
354
- project.config.setupFiles.push(setupFile);
355
- if (uploadToArgos) {
356
- vitest.config.reporters.push(
357
- new ArgosReporter({ ...otherOptions, root })
358
- );
359
- }
360
- },
361
- config() {
362
- return {
363
- optimizeDeps: {
364
- include: ["@argos-ci/storybook/internal/vitest-setup-file"]
365
- },
366
- test: {
367
- browser: {
368
- commands: {
369
- argosScreenshot: createArgosScreenshotCommand({
370
- ...otherOptions,
371
- root
372
- })
373
- }
374
- }
375
- }
376
- };
377
- }
378
- };
379
- }
380
- export {
381
- argosVitestPlugin,
382
- createArgosScreenshotCommand
383
- };