@chromatic-com/playwright 0.12.8 → 0.12.9-08ebf39-20260309134255

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.
@@ -2,16 +2,279 @@
2
2
  'use strict';
3
3
 
4
4
  var child_process = require('child_process');
5
- var c = require('path');
5
+ var module$1 = require('module');
6
+ var path = require('path');
7
+ var url = require('url');
6
8
  var fs = require('fs');
7
9
  var promises = require('fs/promises');
8
10
 
11
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
9
12
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
13
 
11
- var c__default = /*#__PURE__*/_interopDefault(c);
14
+ var path__default = /*#__PURE__*/_interopDefault(path);
12
15
 
13
- var U=Object.defineProperty;var o=(e,r)=>U(e,"name",{value:r,configurable:!0}),u=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(r,t)=>(typeof require<"u"?require:r)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var G=Object.defineProperty,i=o((e,r)=>G(e,"name",{value:r,configurable:!0}),"r"),y=(e=>typeof u<"u"?u:typeof Proxy<"u"?new Proxy(e,{get:(r,t)=>(typeof u<"u"?u:r)[t]}):e)(function(e){if(typeof u<"u")return u.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});function g(){return process.cwd()}o(g,"V");i(g,"rootDir");function F(){let{CHROMATIC_ARCHIVE_LOCATION:e}=process.env;return e}o(F,"B");i(F,"outputDirOverride");function l(e){let r=F()||e;return c__default.default.resolve(g(),r,"chromatic-archives")}o(l,"c");i(l,"archivesDir");function k(e){return c__default.default.resolve(l(e),"archive")}o(k,"f");i(k,"assetsDir");function f(e){let r=l(e);if(!fs.existsSync(r))throw new Error(`Chromatic archives directory cannot be found: ${r}
16
+ var __defProp = Object.defineProperty;
17
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
18
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
19
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
20
+ }) : x)(function(x) {
21
+ if (typeof require !== "undefined")
22
+ return require.apply(this, arguments);
23
+ throw Error('Dynamic require of "' + x + '" is not supported');
24
+ });
25
+ var __defProp2 = Object.defineProperty;
26
+ var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name", { value, configurable: true }), "__name");
27
+ var __require2 = /* @__PURE__ */ ((x) => typeof __require !== "undefined" ? __require : typeof Proxy !== "undefined" ? new Proxy(x, {
28
+ get: (a, b) => (typeof __require !== "undefined" ? __require : a)[b]
29
+ }) : x)(function(x) {
30
+ if (typeof __require !== "undefined")
31
+ return __require.apply(this, arguments);
32
+ throw Error('Dynamic require of "' + x + '" is not supported');
33
+ });
34
+ function rootDir() {
35
+ return process.cwd();
36
+ }
37
+ __name(rootDir, "rootDir");
38
+ __name2(rootDir, "rootDir");
39
+ function outputDirOverride() {
40
+ const { CHROMATIC_ARCHIVE_LOCATION } = process.env;
41
+ return CHROMATIC_ARCHIVE_LOCATION;
42
+ }
43
+ __name(outputDirOverride, "outputDirOverride");
44
+ __name2(outputDirOverride, "outputDirOverride");
45
+ function archivesDir(defaultOutputDir) {
46
+ const outputDir = outputDirOverride() || defaultOutputDir;
47
+ return path__default.default.resolve(rootDir(), outputDir, "chromatic-archives");
48
+ }
49
+ __name(archivesDir, "archivesDir");
50
+ __name2(archivesDir, "archivesDir");
51
+ function assetsDir(defaultOutputDir) {
52
+ return path__default.default.resolve(archivesDir(defaultOutputDir), "archive");
53
+ }
54
+ __name(assetsDir, "assetsDir");
55
+ __name2(assetsDir, "assetsDir");
56
+ function checkArchivesDirExists(defaultOutputDir) {
57
+ const dir = archivesDir(defaultOutputDir);
58
+ if (!fs.existsSync(dir)) {
59
+ throw new Error(`Chromatic archives directory cannot be found: ${dir}
14
60
 
15
- Please make sure that you have run your E2E tests, or have set the CHROMATIC_ARCHIVE_LOCATION env var if the output directory for the tests is not in the standard location.`)}o(f,"h");i(f,"checkArchivesDirExists");function O(e){fs.existsSync(e)||fs.mkdirSync(e,{recursive:!0});}o(O,"O");i(O,"ensureDir");async function T(e,r){return O(c__default.default.dirname(e)),promises.writeFile(e,r,{mode:511})}o(T,"$");i(T,"outputFile");async function D(e,r){return T(e,JSON.stringify(r))}o(D,"w");i(D,"outputJSONFile");async function A(e){let r=await promises.readFile(e);return JSON.parse(r.toString())}o(A,"x");i(A,"readJSONFile");function p(e){return `w${e.width}h${e.height}`}o(p,"a");i(p,"viewportToString");function C(e){let r=e.match(/w(\d+)h(\d+)/);return {width:Number(r[1]),height:Number(r[2])}}o(C,"N");i(C,"parseViewport");var X="snapshot.json";function x(e){let r=e.split(".");return r.slice(0,r.length-3).join(".")}o(x,"F");i(x,"snapshotIdFromFileName");function E(e){let r=e.split("."),t=r[r.length-3];return C(t)}o(E,"v");i(E,"viewportFromFileName");async function N(e){return (await promises.readdir(e)).filter(r=>r.endsWith(`.${X}`))}o(N,"y");i(N,"listSnapshotFiles");var z="stories.json";function I(e,r){let{stories:t}=e,n=t.map(s=>{let h=s.parameters.server.id,a=r[h];return {...s,parameters:{...s.parameters,chromatic:{...s.parameters.chromatic,modes:_(a)},viewport:{viewports:P(a),defaultViewport:p($(a))}}}});return {...e,stories:n}}o(I,"S");i(I,"addViewportsToStories");async function V(e){return (await promises.readdir(e)).filter(r=>r.endsWith(`.${z}`))}o(V,"E");i(V,"listStoriesFiles");function _(e){return e.reduce((r,t)=>{let n=p(t);return r[n]={viewport:n},r},{})}o(_,"R");i(_,"buildStoryModesConfig");function P(e){return e.reduce((r,t)=>{let n=p(t);return r[n]={name:n,styles:{width:`${t.width}px`,height:`${t.height}px`}},r},{})}o(P,"X");i(P,"buildStoryViewportsConfig");function $(e){let r=i((t,n)=>t.width<n.width?1:t.width>n.width?-1:0,"compareFn");return e.sort(r)[0]}o($,"W");i($,"findDefaultViewport");async function d(e){let r=k(e),t=await N(r),n=q(t),s=l(e),h=(await V(s)).map(a=>c__default.default.resolve(s,a));await Promise.all(h.map(async a=>{let j=await A(a),L=I(j,n);await D(a,L);}));}o(d,"l");i(d,"addViewportsToStoriesFiles");function q(e){let r={};return e.forEach(t=>{let n=x(t),s=r[n]||[];s.push(E(t)),r[n]=s;}),r}o(q,"G");i(q,"buildSnapshotViewportsLookup");function m(e,r,t){f(t),d(t).then(()=>{child_process.execFileSync("node",[v(),"dev",...e,"-c",r],{stdio:"inherit"});});}o(m,"It");i(m,"archiveStorybook");function K(e,r,t){f(t),d(t).then(()=>{child_process.execFileSync("node",[v(),"build",...e,"-c",r],{stdio:"inherit"});});}o(K,"kt");i(K,"buildArchiveStorybook");function v(){let e=y("storybook/package.json");return c.resolve(c.dirname(y.resolve("storybook/package.json")),e.bin.storybook)}o(v,"T");i(v,"binPath");var R="test-results";var Y=process.argv.slice(2),Z=c__default.default.resolve(__dirname,"../storybook-config");try{m(Y,Z,R);}catch(e){console.error(e.message),process.exitCode=1;}
16
- //# sourceMappingURL=out.js.map
17
- //# sourceMappingURL=archive-storybook.js.map
61
+ Please make sure that you have run your E2E tests, or have set the CHROMATIC_ARCHIVE_LOCATION env var if the output directory for the tests is not in the standard location.`);
62
+ }
63
+ }
64
+ __name(checkArchivesDirExists, "checkArchivesDirExists");
65
+ __name2(checkArchivesDirExists, "checkArchivesDirExists");
66
+ function ensureDir(directory) {
67
+ if (!fs.existsSync(directory)) {
68
+ fs.mkdirSync(directory, {
69
+ recursive: true
70
+ });
71
+ }
72
+ }
73
+ __name(ensureDir, "ensureDir");
74
+ __name2(ensureDir, "ensureDir");
75
+ async function outputFile(filePath, data) {
76
+ ensureDir(path__default.default.dirname(filePath));
77
+ return promises.writeFile(filePath, data, {
78
+ mode: 511
79
+ });
80
+ }
81
+ __name(outputFile, "outputFile");
82
+ __name2(outputFile, "outputFile");
83
+ async function outputJSONFile(filePath, data) {
84
+ return outputFile(filePath, JSON.stringify(data));
85
+ }
86
+ __name(outputJSONFile, "outputJSONFile");
87
+ __name2(outputJSONFile, "outputJSONFile");
88
+ async function readJSONFile(filePath) {
89
+ const data = await promises.readFile(filePath);
90
+ return JSON.parse(data.toString());
91
+ }
92
+ __name(readJSONFile, "readJSONFile");
93
+ __name2(readJSONFile, "readJSONFile");
94
+ function viewportToString(viewport) {
95
+ return `w${viewport.width}h${viewport.height}`;
96
+ }
97
+ __name(viewportToString, "viewportToString");
98
+ __name2(viewportToString, "viewportToString");
99
+ function parseViewport(viewportString) {
100
+ const matcher = viewportString.match(/w(\d+)h(\d+)/);
101
+ return {
102
+ width: Number(matcher[1]),
103
+ height: Number(matcher[2])
104
+ };
105
+ }
106
+ __name(parseViewport, "parseViewport");
107
+ __name2(parseViewport, "parseViewport");
108
+ var SNAPSHOT_FILE_EXT = "snapshot.json";
109
+ function snapshotIdFromFileName(fileName) {
110
+ const fileParts = fileName.split(".");
111
+ return fileParts.slice(0, fileParts.length - 3).join(".");
112
+ }
113
+ __name(snapshotIdFromFileName, "snapshotIdFromFileName");
114
+ __name2(snapshotIdFromFileName, "snapshotIdFromFileName");
115
+ function viewportFromFileName(fileName) {
116
+ const fileParts = fileName.split(".");
117
+ const viewportStr = fileParts[fileParts.length - 3];
118
+ return parseViewport(viewportStr);
119
+ }
120
+ __name(viewportFromFileName, "viewportFromFileName");
121
+ __name2(viewportFromFileName, "viewportFromFileName");
122
+ async function listSnapshotFiles(snapshotsDir) {
123
+ const files = await promises.readdir(snapshotsDir);
124
+ return files.filter((file) => file.endsWith(`.${SNAPSHOT_FILE_EXT}`));
125
+ }
126
+ __name(listSnapshotFiles, "listSnapshotFiles");
127
+ __name2(listSnapshotFiles, "listSnapshotFiles");
128
+ var STORIES_FILE_EXT = "stories.json";
129
+ function addViewportsToStories(storiesFileJson, viewportsStoriesLookup) {
130
+ const { stories } = storiesFileJson;
131
+ const storiesWithViewports = stories.map((story) => {
132
+ const storyId = story.parameters.server.id;
133
+ const viewports = viewportsStoriesLookup[storyId];
134
+ return {
135
+ ...story,
136
+ parameters: {
137
+ ...story.parameters,
138
+ chromatic: {
139
+ ...story.parameters.chromatic,
140
+ modes: buildStoryModesConfig(viewports)
141
+ },
142
+ viewport: {
143
+ viewports: buildStoryViewportsConfig(viewports),
144
+ defaultViewport: viewportToString(findDefaultViewport(viewports))
145
+ }
146
+ }
147
+ };
148
+ });
149
+ return {
150
+ ...storiesFileJson,
151
+ stories: storiesWithViewports
152
+ };
153
+ }
154
+ __name(addViewportsToStories, "addViewportsToStories");
155
+ __name2(addViewportsToStories, "addViewportsToStories");
156
+ async function listStoriesFiles(storiesDir) {
157
+ const files = await promises.readdir(storiesDir);
158
+ return files.filter((file) => file.endsWith(`.${STORIES_FILE_EXT}`));
159
+ }
160
+ __name(listStoriesFiles, "listStoriesFiles");
161
+ __name2(listStoriesFiles, "listStoriesFiles");
162
+ function buildStoryModesConfig(viewports) {
163
+ return viewports.reduce((modes, viewport) => {
164
+ const viewportName = viewportToString(viewport);
165
+ modes[viewportName] = {
166
+ viewport: viewportName
167
+ };
168
+ return modes;
169
+ }, {});
170
+ }
171
+ __name(buildStoryModesConfig, "buildStoryModesConfig");
172
+ __name2(buildStoryModesConfig, "buildStoryModesConfig");
173
+ function buildStoryViewportsConfig(viewports) {
174
+ return viewports.reduce((viewportsConfig, viewport) => {
175
+ const viewportName = viewportToString(viewport);
176
+ viewportsConfig[viewportName] = {
177
+ name: viewportName,
178
+ styles: {
179
+ width: `${viewport.width}px`,
180
+ height: `${viewport.height}px`
181
+ }
182
+ };
183
+ return viewportsConfig;
184
+ }, {});
185
+ }
186
+ __name(buildStoryViewportsConfig, "buildStoryViewportsConfig");
187
+ __name2(buildStoryViewportsConfig, "buildStoryViewportsConfig");
188
+ function findDefaultViewport(viewports) {
189
+ const compareFn = /* @__PURE__ */ __name2((vp1, vp2) => {
190
+ if (vp1.width < vp2.width) {
191
+ return 1;
192
+ }
193
+ if (vp1.width > vp2.width) {
194
+ return -1;
195
+ }
196
+ return 0;
197
+ }, "compareFn");
198
+ return viewports.sort(compareFn)[0];
199
+ }
200
+ __name(findDefaultViewport, "findDefaultViewport");
201
+ __name2(findDefaultViewport, "findDefaultViewport");
202
+ async function addViewportsToStoriesFiles(defaultOutputDir) {
203
+ const snapshotsDir = assetsDir(defaultOutputDir);
204
+ const snapshotFileNames = await listSnapshotFiles(snapshotsDir);
205
+ const viewportsLookup = buildSnapshotViewportsLookup(snapshotFileNames);
206
+ const storiesDir = archivesDir(defaultOutputDir);
207
+ const storiesFilePaths = (await listStoriesFiles(storiesDir)).map((storiesFileName) => path__default.default.resolve(storiesDir, storiesFileName));
208
+ await Promise.all(storiesFilePaths.map(async (storiesFilePath) => {
209
+ const storiesFileJson = await readJSONFile(storiesFilePath);
210
+ const storiesWithViewports = addViewportsToStories(storiesFileJson, viewportsLookup);
211
+ await outputJSONFile(storiesFilePath, storiesWithViewports);
212
+ }));
213
+ }
214
+ __name(addViewportsToStoriesFiles, "addViewportsToStoriesFiles");
215
+ __name2(addViewportsToStoriesFiles, "addViewportsToStoriesFiles");
216
+ function buildSnapshotViewportsLookup(snapshotFileNames) {
217
+ const lookup = {};
218
+ snapshotFileNames.forEach((file) => {
219
+ const snapshotId2 = snapshotIdFromFileName(file);
220
+ const viewports = lookup[snapshotId2] || [];
221
+ viewports.push(viewportFromFileName(file));
222
+ lookup[snapshotId2] = viewports;
223
+ });
224
+ return lookup;
225
+ }
226
+ __name(buildSnapshotViewportsLookup, "buildSnapshotViewportsLookup");
227
+ __name2(buildSnapshotViewportsLookup, "buildSnapshotViewportsLookup");
228
+ var moduleURL = typeof __require2 !== "undefined" ? url.pathToFileURL(__filename).href : (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('out.js', document.baseURI).href));
229
+ var req = module$1.createRequire(moduleURL);
230
+ function archiveStorybook(processArgs, configDir2, defaultOutputDir) {
231
+ checkArchivesDirExists(defaultOutputDir);
232
+ addViewportsToStoriesFiles(defaultOutputDir).then(() => {
233
+ child_process.execFileSync("node", [
234
+ binPath(),
235
+ "dev",
236
+ ...processArgs,
237
+ "-c",
238
+ configDir2
239
+ ], {
240
+ stdio: "inherit"
241
+ });
242
+ });
243
+ }
244
+ __name(archiveStorybook, "archiveStorybook");
245
+ __name2(archiveStorybook, "archiveStorybook");
246
+ function buildArchiveStorybook(processArgs, configDir2, defaultOutputDir) {
247
+ checkArchivesDirExists(defaultOutputDir);
248
+ addViewportsToStoriesFiles(defaultOutputDir).then(() => {
249
+ child_process.execFileSync("node", [
250
+ binPath(),
251
+ "build",
252
+ ...processArgs,
253
+ "-c",
254
+ configDir2
255
+ ], {
256
+ stdio: "inherit"
257
+ });
258
+ });
259
+ }
260
+ __name(buildArchiveStorybook, "buildArchiveStorybook");
261
+ __name2(buildArchiveStorybook, "buildArchiveStorybook");
262
+ function binPath() {
263
+ const packageJson = req("storybook/package.json");
264
+ return path.resolve(path.dirname(req.resolve("storybook/package.json")), packageJson.bin);
265
+ }
266
+ __name(binPath, "binPath");
267
+ __name2(binPath, "binPath");
268
+
269
+ // src/constants.ts
270
+ var DEFAULT_OUTPUT_DIR = "test-results";
271
+
272
+ // src/bin/archive-storybook.ts
273
+ var args = process.argv.slice(2);
274
+ var configDir = path__default.default.resolve(__dirname, "../storybook-config");
275
+ try {
276
+ archiveStorybook(args, configDir, DEFAULT_OUTPUT_DIR);
277
+ } catch (err) {
278
+ console.error(err.message);
279
+ process.exitCode = 1;
280
+ }
@@ -2,16 +2,279 @@
2
2
  'use strict';
3
3
 
4
4
  var child_process = require('child_process');
5
- var c = require('path');
5
+ var module$1 = require('module');
6
+ var path = require('path');
7
+ var url = require('url');
6
8
  var fs = require('fs');
7
9
  var promises = require('fs/promises');
8
10
 
11
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
9
12
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
13
 
11
- var c__default = /*#__PURE__*/_interopDefault(c);
14
+ var path__default = /*#__PURE__*/_interopDefault(path);
12
15
 
13
- var U=Object.defineProperty;var o=(e,r)=>U(e,"name",{value:r,configurable:!0}),u=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(r,t)=>(typeof require<"u"?require:r)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var G=Object.defineProperty,i=o((e,r)=>G(e,"name",{value:r,configurable:!0}),"r"),y=(e=>typeof u<"u"?u:typeof Proxy<"u"?new Proxy(e,{get:(r,t)=>(typeof u<"u"?u:r)[t]}):e)(function(e){if(typeof u<"u")return u.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});function g(){return process.cwd()}o(g,"V");i(g,"rootDir");function F(){let{CHROMATIC_ARCHIVE_LOCATION:e}=process.env;return e}o(F,"B");i(F,"outputDirOverride");function l(e){let r=F()||e;return c__default.default.resolve(g(),r,"chromatic-archives")}o(l,"c");i(l,"archivesDir");function k(e){return c__default.default.resolve(l(e),"archive")}o(k,"f");i(k,"assetsDir");function d(e){let r=l(e);if(!fs.existsSync(r))throw new Error(`Chromatic archives directory cannot be found: ${r}
16
+ var __defProp = Object.defineProperty;
17
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
18
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
19
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
20
+ }) : x)(function(x) {
21
+ if (typeof require !== "undefined")
22
+ return require.apply(this, arguments);
23
+ throw Error('Dynamic require of "' + x + '" is not supported');
24
+ });
25
+ var __defProp2 = Object.defineProperty;
26
+ var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name", { value, configurable: true }), "__name");
27
+ var __require2 = /* @__PURE__ */ ((x) => typeof __require !== "undefined" ? __require : typeof Proxy !== "undefined" ? new Proxy(x, {
28
+ get: (a, b) => (typeof __require !== "undefined" ? __require : a)[b]
29
+ }) : x)(function(x) {
30
+ if (typeof __require !== "undefined")
31
+ return __require.apply(this, arguments);
32
+ throw Error('Dynamic require of "' + x + '" is not supported');
33
+ });
34
+ function rootDir() {
35
+ return process.cwd();
36
+ }
37
+ __name(rootDir, "rootDir");
38
+ __name2(rootDir, "rootDir");
39
+ function outputDirOverride() {
40
+ const { CHROMATIC_ARCHIVE_LOCATION } = process.env;
41
+ return CHROMATIC_ARCHIVE_LOCATION;
42
+ }
43
+ __name(outputDirOverride, "outputDirOverride");
44
+ __name2(outputDirOverride, "outputDirOverride");
45
+ function archivesDir(defaultOutputDir) {
46
+ const outputDir = outputDirOverride() || defaultOutputDir;
47
+ return path__default.default.resolve(rootDir(), outputDir, "chromatic-archives");
48
+ }
49
+ __name(archivesDir, "archivesDir");
50
+ __name2(archivesDir, "archivesDir");
51
+ function assetsDir(defaultOutputDir) {
52
+ return path__default.default.resolve(archivesDir(defaultOutputDir), "archive");
53
+ }
54
+ __name(assetsDir, "assetsDir");
55
+ __name2(assetsDir, "assetsDir");
56
+ function checkArchivesDirExists(defaultOutputDir) {
57
+ const dir = archivesDir(defaultOutputDir);
58
+ if (!fs.existsSync(dir)) {
59
+ throw new Error(`Chromatic archives directory cannot be found: ${dir}
14
60
 
15
- Please make sure that you have run your E2E tests, or have set the CHROMATIC_ARCHIVE_LOCATION env var if the output directory for the tests is not in the standard location.`)}o(d,"h");i(d,"checkArchivesDirExists");function O(e){fs.existsSync(e)||fs.mkdirSync(e,{recursive:!0});}o(O,"O");i(O,"ensureDir");async function T(e,r){return O(c__default.default.dirname(e)),promises.writeFile(e,r,{mode:511})}o(T,"$");i(T,"outputFile");async function A(e,r){return T(e,JSON.stringify(r))}o(A,"w");i(A,"outputJSONFile");async function D(e){let r=await promises.readFile(e);return JSON.parse(r.toString())}o(D,"x");i(D,"readJSONFile");function p(e){return `w${e.width}h${e.height}`}o(p,"a");i(p,"viewportToString");function C(e){let r=e.match(/w(\d+)h(\d+)/);return {width:Number(r[1]),height:Number(r[2])}}o(C,"N");i(C,"parseViewport");var X="snapshot.json";function x(e){let r=e.split(".");return r.slice(0,r.length-3).join(".")}o(x,"F");i(x,"snapshotIdFromFileName");function E(e){let r=e.split("."),t=r[r.length-3];return C(t)}o(E,"v");i(E,"viewportFromFileName");async function N(e){return (await promises.readdir(e)).filter(r=>r.endsWith(`.${X}`))}o(N,"y");i(N,"listSnapshotFiles");var z="stories.json";function I(e,r){let{stories:t}=e,n=t.map(s=>{let h=s.parameters.server.id,a=r[h];return {...s,parameters:{...s.parameters,chromatic:{...s.parameters.chromatic,modes:_(a)},viewport:{viewports:P(a),defaultViewport:p($(a))}}}});return {...e,stories:n}}o(I,"S");i(I,"addViewportsToStories");async function V(e){return (await promises.readdir(e)).filter(r=>r.endsWith(`.${z}`))}o(V,"E");i(V,"listStoriesFiles");function _(e){return e.reduce((r,t)=>{let n=p(t);return r[n]={viewport:n},r},{})}o(_,"R");i(_,"buildStoryModesConfig");function P(e){return e.reduce((r,t)=>{let n=p(t);return r[n]={name:n,styles:{width:`${t.width}px`,height:`${t.height}px`}},r},{})}o(P,"X");i(P,"buildStoryViewportsConfig");function $(e){let r=i((t,n)=>t.width<n.width?1:t.width>n.width?-1:0,"compareFn");return e.sort(r)[0]}o($,"W");i($,"findDefaultViewport");async function f(e){let r=k(e),t=await N(r),n=q(t),s=l(e),h=(await V(s)).map(a=>c__default.default.resolve(s,a));await Promise.all(h.map(async a=>{let j=await D(a),L=I(j,n);await A(a,L);}));}o(f,"l");i(f,"addViewportsToStoriesFiles");function q(e){let r={};return e.forEach(t=>{let n=x(t),s=r[n]||[];s.push(E(t)),r[n]=s;}),r}o(q,"G");i(q,"buildSnapshotViewportsLookup");function K(e,r,t){d(t),f(t).then(()=>{child_process.execFileSync("node",[v(),"dev",...e,"-c",r],{stdio:"inherit"});});}o(K,"It");i(K,"archiveStorybook");function m(e,r,t){d(t),f(t).then(()=>{child_process.execFileSync("node",[v(),"build",...e,"-c",r],{stdio:"inherit"});});}o(m,"kt");i(m,"buildArchiveStorybook");function v(){let e=y("storybook/package.json");return c.resolve(c.dirname(y.resolve("storybook/package.json")),e.bin.storybook)}o(v,"T");i(v,"binPath");var R="test-results";var Y=process.argv.slice(2),Z=c__default.default.resolve(__dirname,"../storybook-config");try{m(Y,Z,R);}catch(e){console.error(e.message),process.exitCode=1;}
16
- //# sourceMappingURL=out.js.map
17
- //# sourceMappingURL=build-archive-storybook.js.map
61
+ Please make sure that you have run your E2E tests, or have set the CHROMATIC_ARCHIVE_LOCATION env var if the output directory for the tests is not in the standard location.`);
62
+ }
63
+ }
64
+ __name(checkArchivesDirExists, "checkArchivesDirExists");
65
+ __name2(checkArchivesDirExists, "checkArchivesDirExists");
66
+ function ensureDir(directory) {
67
+ if (!fs.existsSync(directory)) {
68
+ fs.mkdirSync(directory, {
69
+ recursive: true
70
+ });
71
+ }
72
+ }
73
+ __name(ensureDir, "ensureDir");
74
+ __name2(ensureDir, "ensureDir");
75
+ async function outputFile(filePath, data) {
76
+ ensureDir(path__default.default.dirname(filePath));
77
+ return promises.writeFile(filePath, data, {
78
+ mode: 511
79
+ });
80
+ }
81
+ __name(outputFile, "outputFile");
82
+ __name2(outputFile, "outputFile");
83
+ async function outputJSONFile(filePath, data) {
84
+ return outputFile(filePath, JSON.stringify(data));
85
+ }
86
+ __name(outputJSONFile, "outputJSONFile");
87
+ __name2(outputJSONFile, "outputJSONFile");
88
+ async function readJSONFile(filePath) {
89
+ const data = await promises.readFile(filePath);
90
+ return JSON.parse(data.toString());
91
+ }
92
+ __name(readJSONFile, "readJSONFile");
93
+ __name2(readJSONFile, "readJSONFile");
94
+ function viewportToString(viewport) {
95
+ return `w${viewport.width}h${viewport.height}`;
96
+ }
97
+ __name(viewportToString, "viewportToString");
98
+ __name2(viewportToString, "viewportToString");
99
+ function parseViewport(viewportString) {
100
+ const matcher = viewportString.match(/w(\d+)h(\d+)/);
101
+ return {
102
+ width: Number(matcher[1]),
103
+ height: Number(matcher[2])
104
+ };
105
+ }
106
+ __name(parseViewport, "parseViewport");
107
+ __name2(parseViewport, "parseViewport");
108
+ var SNAPSHOT_FILE_EXT = "snapshot.json";
109
+ function snapshotIdFromFileName(fileName) {
110
+ const fileParts = fileName.split(".");
111
+ return fileParts.slice(0, fileParts.length - 3).join(".");
112
+ }
113
+ __name(snapshotIdFromFileName, "snapshotIdFromFileName");
114
+ __name2(snapshotIdFromFileName, "snapshotIdFromFileName");
115
+ function viewportFromFileName(fileName) {
116
+ const fileParts = fileName.split(".");
117
+ const viewportStr = fileParts[fileParts.length - 3];
118
+ return parseViewport(viewportStr);
119
+ }
120
+ __name(viewportFromFileName, "viewportFromFileName");
121
+ __name2(viewportFromFileName, "viewportFromFileName");
122
+ async function listSnapshotFiles(snapshotsDir) {
123
+ const files = await promises.readdir(snapshotsDir);
124
+ return files.filter((file) => file.endsWith(`.${SNAPSHOT_FILE_EXT}`));
125
+ }
126
+ __name(listSnapshotFiles, "listSnapshotFiles");
127
+ __name2(listSnapshotFiles, "listSnapshotFiles");
128
+ var STORIES_FILE_EXT = "stories.json";
129
+ function addViewportsToStories(storiesFileJson, viewportsStoriesLookup) {
130
+ const { stories } = storiesFileJson;
131
+ const storiesWithViewports = stories.map((story) => {
132
+ const storyId = story.parameters.server.id;
133
+ const viewports = viewportsStoriesLookup[storyId];
134
+ return {
135
+ ...story,
136
+ parameters: {
137
+ ...story.parameters,
138
+ chromatic: {
139
+ ...story.parameters.chromatic,
140
+ modes: buildStoryModesConfig(viewports)
141
+ },
142
+ viewport: {
143
+ viewports: buildStoryViewportsConfig(viewports),
144
+ defaultViewport: viewportToString(findDefaultViewport(viewports))
145
+ }
146
+ }
147
+ };
148
+ });
149
+ return {
150
+ ...storiesFileJson,
151
+ stories: storiesWithViewports
152
+ };
153
+ }
154
+ __name(addViewportsToStories, "addViewportsToStories");
155
+ __name2(addViewportsToStories, "addViewportsToStories");
156
+ async function listStoriesFiles(storiesDir) {
157
+ const files = await promises.readdir(storiesDir);
158
+ return files.filter((file) => file.endsWith(`.${STORIES_FILE_EXT}`));
159
+ }
160
+ __name(listStoriesFiles, "listStoriesFiles");
161
+ __name2(listStoriesFiles, "listStoriesFiles");
162
+ function buildStoryModesConfig(viewports) {
163
+ return viewports.reduce((modes, viewport) => {
164
+ const viewportName = viewportToString(viewport);
165
+ modes[viewportName] = {
166
+ viewport: viewportName
167
+ };
168
+ return modes;
169
+ }, {});
170
+ }
171
+ __name(buildStoryModesConfig, "buildStoryModesConfig");
172
+ __name2(buildStoryModesConfig, "buildStoryModesConfig");
173
+ function buildStoryViewportsConfig(viewports) {
174
+ return viewports.reduce((viewportsConfig, viewport) => {
175
+ const viewportName = viewportToString(viewport);
176
+ viewportsConfig[viewportName] = {
177
+ name: viewportName,
178
+ styles: {
179
+ width: `${viewport.width}px`,
180
+ height: `${viewport.height}px`
181
+ }
182
+ };
183
+ return viewportsConfig;
184
+ }, {});
185
+ }
186
+ __name(buildStoryViewportsConfig, "buildStoryViewportsConfig");
187
+ __name2(buildStoryViewportsConfig, "buildStoryViewportsConfig");
188
+ function findDefaultViewport(viewports) {
189
+ const compareFn = /* @__PURE__ */ __name2((vp1, vp2) => {
190
+ if (vp1.width < vp2.width) {
191
+ return 1;
192
+ }
193
+ if (vp1.width > vp2.width) {
194
+ return -1;
195
+ }
196
+ return 0;
197
+ }, "compareFn");
198
+ return viewports.sort(compareFn)[0];
199
+ }
200
+ __name(findDefaultViewport, "findDefaultViewport");
201
+ __name2(findDefaultViewport, "findDefaultViewport");
202
+ async function addViewportsToStoriesFiles(defaultOutputDir) {
203
+ const snapshotsDir = assetsDir(defaultOutputDir);
204
+ const snapshotFileNames = await listSnapshotFiles(snapshotsDir);
205
+ const viewportsLookup = buildSnapshotViewportsLookup(snapshotFileNames);
206
+ const storiesDir = archivesDir(defaultOutputDir);
207
+ const storiesFilePaths = (await listStoriesFiles(storiesDir)).map((storiesFileName) => path__default.default.resolve(storiesDir, storiesFileName));
208
+ await Promise.all(storiesFilePaths.map(async (storiesFilePath) => {
209
+ const storiesFileJson = await readJSONFile(storiesFilePath);
210
+ const storiesWithViewports = addViewportsToStories(storiesFileJson, viewportsLookup);
211
+ await outputJSONFile(storiesFilePath, storiesWithViewports);
212
+ }));
213
+ }
214
+ __name(addViewportsToStoriesFiles, "addViewportsToStoriesFiles");
215
+ __name2(addViewportsToStoriesFiles, "addViewportsToStoriesFiles");
216
+ function buildSnapshotViewportsLookup(snapshotFileNames) {
217
+ const lookup = {};
218
+ snapshotFileNames.forEach((file) => {
219
+ const snapshotId2 = snapshotIdFromFileName(file);
220
+ const viewports = lookup[snapshotId2] || [];
221
+ viewports.push(viewportFromFileName(file));
222
+ lookup[snapshotId2] = viewports;
223
+ });
224
+ return lookup;
225
+ }
226
+ __name(buildSnapshotViewportsLookup, "buildSnapshotViewportsLookup");
227
+ __name2(buildSnapshotViewportsLookup, "buildSnapshotViewportsLookup");
228
+ var moduleURL = typeof __require2 !== "undefined" ? url.pathToFileURL(__filename).href : (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('out.js', document.baseURI).href));
229
+ var req = module$1.createRequire(moduleURL);
230
+ function archiveStorybook(processArgs, configDir2, defaultOutputDir) {
231
+ checkArchivesDirExists(defaultOutputDir);
232
+ addViewportsToStoriesFiles(defaultOutputDir).then(() => {
233
+ child_process.execFileSync("node", [
234
+ binPath(),
235
+ "dev",
236
+ ...processArgs,
237
+ "-c",
238
+ configDir2
239
+ ], {
240
+ stdio: "inherit"
241
+ });
242
+ });
243
+ }
244
+ __name(archiveStorybook, "archiveStorybook");
245
+ __name2(archiveStorybook, "archiveStorybook");
246
+ function buildArchiveStorybook(processArgs, configDir2, defaultOutputDir) {
247
+ checkArchivesDirExists(defaultOutputDir);
248
+ addViewportsToStoriesFiles(defaultOutputDir).then(() => {
249
+ child_process.execFileSync("node", [
250
+ binPath(),
251
+ "build",
252
+ ...processArgs,
253
+ "-c",
254
+ configDir2
255
+ ], {
256
+ stdio: "inherit"
257
+ });
258
+ });
259
+ }
260
+ __name(buildArchiveStorybook, "buildArchiveStorybook");
261
+ __name2(buildArchiveStorybook, "buildArchiveStorybook");
262
+ function binPath() {
263
+ const packageJson = req("storybook/package.json");
264
+ return path.resolve(path.dirname(req.resolve("storybook/package.json")), packageJson.bin);
265
+ }
266
+ __name(binPath, "binPath");
267
+ __name2(binPath, "binPath");
268
+
269
+ // src/constants.ts
270
+ var DEFAULT_OUTPUT_DIR = "test-results";
271
+
272
+ // src/bin/build-archive-storybook.ts
273
+ var args = process.argv.slice(2);
274
+ var configDir = path__default.default.resolve(__dirname, "../storybook-config");
275
+ try {
276
+ buildArchiveStorybook(args, configDir, DEFAULT_OUTPUT_DIR);
277
+ } catch (err) {
278
+ console.error(err.message);
279
+ process.exitCode = 1;
280
+ }