@onlook/storybook-plugin 0.4.0-beta.13 → 0.4.0-beta.15
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/cli/index.js +7 -2
- package/dist/index.js +19 -2
- package/dist/preset/index.js +19 -2
- package/dist/preview/index.js +3 -0
- package/dist/screenshot-service/index.js +7 -2
- package/dist/screenshot-service/utils/browser/index.d.ts +12 -1
- package/dist/screenshot-service/utils/browser/index.js +8 -3
- package/package.json +3 -3
package/dist/cli/index.js
CHANGED
|
@@ -63,6 +63,9 @@ var execFileAsync = promisify(execFile);
|
|
|
63
63
|
var require2 = createRequire$1(import.meta.url);
|
|
64
64
|
var browserPromise = null;
|
|
65
65
|
var installPromise = null;
|
|
66
|
+
var ChromiumUnavailableError = class extends Error {
|
|
67
|
+
code = "CHROMIUM_UNAVAILABLE";
|
|
68
|
+
};
|
|
66
69
|
var isMissingExecutableError = (err) => {
|
|
67
70
|
const msg = err instanceof Error ? err.message : String(err);
|
|
68
71
|
return msg.includes("Executable doesn't exist") || msg.includes("Please run the following command to download new browsers") || // Older playwright revisions phrase the version-mismatch case differently.
|
|
@@ -95,7 +98,9 @@ async function installChromium() {
|
|
|
95
98
|
} catch (err) {
|
|
96
99
|
const detail = err instanceof Error ? err.message : String(err);
|
|
97
100
|
console.error(`[STORYBOOK_PLUGIN] chromium install FAILED: ${detail}`);
|
|
98
|
-
throw new
|
|
101
|
+
throw new ChromiumUnavailableError(
|
|
102
|
+
`Playwright chromium install failed: ${detail}`
|
|
103
|
+
);
|
|
99
104
|
} finally {
|
|
100
105
|
installPromise = null;
|
|
101
106
|
}
|
|
@@ -117,7 +122,7 @@ async function launchWithSelfHeal() {
|
|
|
117
122
|
console.error(
|
|
118
123
|
`[STORYBOOK_PLUGIN] launch still failing after install \u2014 likely path or libs issue: ${detail}`
|
|
119
124
|
);
|
|
120
|
-
throw new
|
|
125
|
+
throw new ChromiumUnavailableError(
|
|
121
126
|
`Playwright chromium is unavailable in this sandbox (install ran but launch still failed): ${detail}`
|
|
122
127
|
);
|
|
123
128
|
}
|
package/dist/index.js
CHANGED
|
@@ -440,6 +440,9 @@ var execFileAsync = promisify(execFile);
|
|
|
440
440
|
var require2 = createRequire$1(import.meta.url);
|
|
441
441
|
var browserPromise = null;
|
|
442
442
|
var installPromise = null;
|
|
443
|
+
var ChromiumUnavailableError = class extends Error {
|
|
444
|
+
code = "CHROMIUM_UNAVAILABLE";
|
|
445
|
+
};
|
|
443
446
|
var isMissingExecutableError = (err) => {
|
|
444
447
|
const msg = err instanceof Error ? err.message : String(err);
|
|
445
448
|
return msg.includes("Executable doesn't exist") || msg.includes("Please run the following command to download new browsers") || // Older playwright revisions phrase the version-mismatch case differently.
|
|
@@ -472,7 +475,9 @@ async function installChromium() {
|
|
|
472
475
|
} catch (err) {
|
|
473
476
|
const detail = err instanceof Error ? err.message : String(err);
|
|
474
477
|
console.error(`[STORYBOOK_PLUGIN] chromium install FAILED: ${detail}`);
|
|
475
|
-
throw new
|
|
478
|
+
throw new ChromiumUnavailableError(
|
|
479
|
+
`Playwright chromium install failed: ${detail}`
|
|
480
|
+
);
|
|
476
481
|
} finally {
|
|
477
482
|
installPromise = null;
|
|
478
483
|
}
|
|
@@ -494,7 +499,7 @@ async function launchWithSelfHeal() {
|
|
|
494
499
|
console.error(
|
|
495
500
|
`[STORYBOOK_PLUGIN] launch still failing after install \u2014 likely path or libs issue: ${detail}`
|
|
496
501
|
);
|
|
497
|
-
throw new
|
|
502
|
+
throw new ChromiumUnavailableError(
|
|
498
503
|
`Playwright chromium is unavailable in this sandbox (install ran but launch still failed): ${detail}`
|
|
499
504
|
);
|
|
500
505
|
}
|
|
@@ -1101,6 +1106,12 @@ function findGitRoot(startPath) {
|
|
|
1101
1106
|
}
|
|
1102
1107
|
|
|
1103
1108
|
// src/storybook-onlook-plugin.ts
|
|
1109
|
+
function errorCode(error) {
|
|
1110
|
+
if (error && typeof error === "object" && "code" in error && typeof error.code === "string") {
|
|
1111
|
+
return error.code;
|
|
1112
|
+
}
|
|
1113
|
+
return void 0;
|
|
1114
|
+
}
|
|
1104
1115
|
var __dirname$1 = dirname(fileURLToPath(import.meta.url));
|
|
1105
1116
|
var storybookDir = join(__dirname$1, "..");
|
|
1106
1117
|
var gitRoot = findGitRoot(storybookDir);
|
|
@@ -1246,11 +1257,13 @@ var serveMetadataAndScreenshots = (req, res, next) => {
|
|
|
1246
1257
|
res.end(buffer);
|
|
1247
1258
|
}).catch((error) => {
|
|
1248
1259
|
console.error("Screenshot capture error:", error);
|
|
1260
|
+
const code = errorCode(error);
|
|
1249
1261
|
res.statusCode = 500;
|
|
1250
1262
|
res.setHeader("Content-Type", "application/json");
|
|
1251
1263
|
res.end(
|
|
1252
1264
|
JSON.stringify({
|
|
1253
1265
|
error: "Failed to capture screenshot",
|
|
1266
|
+
...code ? { code } : {},
|
|
1254
1267
|
details: String(error)
|
|
1255
1268
|
})
|
|
1256
1269
|
);
|
|
@@ -1280,11 +1293,13 @@ var serveMetadataAndScreenshots = (req, res, next) => {
|
|
|
1280
1293
|
res.end(JSON.stringify(result));
|
|
1281
1294
|
}).catch((error) => {
|
|
1282
1295
|
console.error("Console log capture error:", error);
|
|
1296
|
+
const code = errorCode(error);
|
|
1283
1297
|
res.statusCode = 500;
|
|
1284
1298
|
res.setHeader("Content-Type", "application/json");
|
|
1285
1299
|
res.end(
|
|
1286
1300
|
JSON.stringify({
|
|
1287
1301
|
error: "Failed to capture console logs",
|
|
1302
|
+
...code ? { code } : {},
|
|
1288
1303
|
details: String(error)
|
|
1289
1304
|
})
|
|
1290
1305
|
);
|
|
@@ -1332,6 +1347,7 @@ var serveMetadataAndScreenshots = (req, res, next) => {
|
|
|
1332
1347
|
`[STORYBOOK_PLUGIN] Failed to generate screenshot: ${storyId}/${theme}`,
|
|
1333
1348
|
error
|
|
1334
1349
|
);
|
|
1350
|
+
const code = errorCode(error);
|
|
1335
1351
|
res.statusCode = 500;
|
|
1336
1352
|
res.setHeader("Content-Type", "application/json");
|
|
1337
1353
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
@@ -1339,6 +1355,7 @@ var serveMetadataAndScreenshots = (req, res, next) => {
|
|
|
1339
1355
|
res.end(
|
|
1340
1356
|
JSON.stringify({
|
|
1341
1357
|
error: "Failed to generate screenshot",
|
|
1358
|
+
...code ? { code } : {},
|
|
1342
1359
|
details: String(error)
|
|
1343
1360
|
})
|
|
1344
1361
|
);
|
package/dist/preset/index.js
CHANGED
|
@@ -320,6 +320,9 @@ var execFileAsync = promisify(execFile);
|
|
|
320
320
|
var require2 = createRequire$1(import.meta.url);
|
|
321
321
|
var browserPromise = null;
|
|
322
322
|
var installPromise = null;
|
|
323
|
+
var ChromiumUnavailableError = class extends Error {
|
|
324
|
+
code = "CHROMIUM_UNAVAILABLE";
|
|
325
|
+
};
|
|
323
326
|
var isMissingExecutableError = (err) => {
|
|
324
327
|
const msg = err instanceof Error ? err.message : String(err);
|
|
325
328
|
return msg.includes("Executable doesn't exist") || msg.includes("Please run the following command to download new browsers") || // Older playwright revisions phrase the version-mismatch case differently.
|
|
@@ -352,7 +355,9 @@ async function installChromium() {
|
|
|
352
355
|
} catch (err) {
|
|
353
356
|
const detail = err instanceof Error ? err.message : String(err);
|
|
354
357
|
console.error(`[STORYBOOK_PLUGIN] chromium install FAILED: ${detail}`);
|
|
355
|
-
throw new
|
|
358
|
+
throw new ChromiumUnavailableError(
|
|
359
|
+
`Playwright chromium install failed: ${detail}`
|
|
360
|
+
);
|
|
356
361
|
} finally {
|
|
357
362
|
installPromise = null;
|
|
358
363
|
}
|
|
@@ -374,7 +379,7 @@ async function launchWithSelfHeal() {
|
|
|
374
379
|
console.error(
|
|
375
380
|
`[STORYBOOK_PLUGIN] launch still failing after install \u2014 likely path or libs issue: ${detail}`
|
|
376
381
|
);
|
|
377
|
-
throw new
|
|
382
|
+
throw new ChromiumUnavailableError(
|
|
378
383
|
`Playwright chromium is unavailable in this sandbox (install ran but launch still failed): ${detail}`
|
|
379
384
|
);
|
|
380
385
|
}
|
|
@@ -1097,6 +1102,12 @@ function findGitRoot(startPath) {
|
|
|
1097
1102
|
}
|
|
1098
1103
|
|
|
1099
1104
|
// src/storybook-onlook-plugin.ts
|
|
1105
|
+
function errorCode(error) {
|
|
1106
|
+
if (error && typeof error === "object" && "code" in error && typeof error.code === "string") {
|
|
1107
|
+
return error.code;
|
|
1108
|
+
}
|
|
1109
|
+
return void 0;
|
|
1110
|
+
}
|
|
1100
1111
|
var __dirname$1 = dirname(fileURLToPath(import.meta.url));
|
|
1101
1112
|
var storybookDir = join(__dirname$1, "..");
|
|
1102
1113
|
var gitRoot = findGitRoot(storybookDir);
|
|
@@ -1242,11 +1253,13 @@ var serveMetadataAndScreenshots = (req, res, next) => {
|
|
|
1242
1253
|
res.end(buffer);
|
|
1243
1254
|
}).catch((error) => {
|
|
1244
1255
|
console.error("Screenshot capture error:", error);
|
|
1256
|
+
const code = errorCode(error);
|
|
1245
1257
|
res.statusCode = 500;
|
|
1246
1258
|
res.setHeader("Content-Type", "application/json");
|
|
1247
1259
|
res.end(
|
|
1248
1260
|
JSON.stringify({
|
|
1249
1261
|
error: "Failed to capture screenshot",
|
|
1262
|
+
...code ? { code } : {},
|
|
1250
1263
|
details: String(error)
|
|
1251
1264
|
})
|
|
1252
1265
|
);
|
|
@@ -1276,11 +1289,13 @@ var serveMetadataAndScreenshots = (req, res, next) => {
|
|
|
1276
1289
|
res.end(JSON.stringify(result));
|
|
1277
1290
|
}).catch((error) => {
|
|
1278
1291
|
console.error("Console log capture error:", error);
|
|
1292
|
+
const code = errorCode(error);
|
|
1279
1293
|
res.statusCode = 500;
|
|
1280
1294
|
res.setHeader("Content-Type", "application/json");
|
|
1281
1295
|
res.end(
|
|
1282
1296
|
JSON.stringify({
|
|
1283
1297
|
error: "Failed to capture console logs",
|
|
1298
|
+
...code ? { code } : {},
|
|
1284
1299
|
details: String(error)
|
|
1285
1300
|
})
|
|
1286
1301
|
);
|
|
@@ -1328,6 +1343,7 @@ var serveMetadataAndScreenshots = (req, res, next) => {
|
|
|
1328
1343
|
`[STORYBOOK_PLUGIN] Failed to generate screenshot: ${storyId}/${theme}`,
|
|
1329
1344
|
error
|
|
1330
1345
|
);
|
|
1346
|
+
const code = errorCode(error);
|
|
1331
1347
|
res.statusCode = 500;
|
|
1332
1348
|
res.setHeader("Content-Type", "application/json");
|
|
1333
1349
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
@@ -1335,6 +1351,7 @@ var serveMetadataAndScreenshots = (req, res, next) => {
|
|
|
1335
1351
|
res.end(
|
|
1336
1352
|
JSON.stringify({
|
|
1337
1353
|
error: "Failed to generate screenshot",
|
|
1354
|
+
...code ? { code } : {},
|
|
1338
1355
|
details: String(error)
|
|
1339
1356
|
})
|
|
1340
1357
|
);
|
package/dist/preview/index.js
CHANGED
|
@@ -106,6 +106,9 @@ function handleRootCaughtError(error, componentStack) {
|
|
|
106
106
|
...module ? { module } : {},
|
|
107
107
|
...stack ? { componentStack: stack } : {}
|
|
108
108
|
});
|
|
109
|
+
if (storyId) {
|
|
110
|
+
queueMicrotask(() => setRenderState("contained", storyId));
|
|
111
|
+
}
|
|
109
112
|
}
|
|
110
113
|
function summarizeError(error, maxLength = 400) {
|
|
111
114
|
const raw = error instanceof Error ? error.message : typeof error === "string" ? error : String(error);
|
|
@@ -61,6 +61,9 @@ var execFileAsync = promisify(execFile);
|
|
|
61
61
|
var require2 = createRequire$1(import.meta.url);
|
|
62
62
|
var browserPromise = null;
|
|
63
63
|
var installPromise = null;
|
|
64
|
+
var ChromiumUnavailableError = class extends Error {
|
|
65
|
+
code = "CHROMIUM_UNAVAILABLE";
|
|
66
|
+
};
|
|
64
67
|
var isMissingExecutableError = (err) => {
|
|
65
68
|
const msg = err instanceof Error ? err.message : String(err);
|
|
66
69
|
return msg.includes("Executable doesn't exist") || msg.includes("Please run the following command to download new browsers") || // Older playwright revisions phrase the version-mismatch case differently.
|
|
@@ -93,7 +96,9 @@ async function installChromium() {
|
|
|
93
96
|
} catch (err) {
|
|
94
97
|
const detail = err instanceof Error ? err.message : String(err);
|
|
95
98
|
console.error(`[STORYBOOK_PLUGIN] chromium install FAILED: ${detail}`);
|
|
96
|
-
throw new
|
|
99
|
+
throw new ChromiumUnavailableError(
|
|
100
|
+
`Playwright chromium install failed: ${detail}`
|
|
101
|
+
);
|
|
97
102
|
} finally {
|
|
98
103
|
installPromise = null;
|
|
99
104
|
}
|
|
@@ -115,7 +120,7 @@ async function launchWithSelfHeal() {
|
|
|
115
120
|
console.error(
|
|
116
121
|
`[STORYBOOK_PLUGIN] launch still failing after install \u2014 likely path or libs issue: ${detail}`
|
|
117
122
|
);
|
|
118
|
-
throw new
|
|
123
|
+
throw new ChromiumUnavailableError(
|
|
119
124
|
`Playwright chromium is unavailable in this sandbox (install ran but launch still failed): ${detail}`
|
|
120
125
|
);
|
|
121
126
|
}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { Browser } from 'playwright';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Terminal "this sandbox cannot launch chromium" failure (ONL-1429/ONL-1602).
|
|
5
|
+
* The `code` property rides the plugin's HTTP 5xx JSON error bodies
|
|
6
|
+
* (storybook-onlook-plugin.ts) so consumers — the agent runner's canvas
|
|
7
|
+
* tools — can classify the failure as tool_unavailable via a contract WE own,
|
|
8
|
+
* instead of regex-parsing Playwright's error prose (which reworded across
|
|
9
|
+
* versions and broke the detection twice: ONL-1085 → ONL-1364).
|
|
10
|
+
*/
|
|
11
|
+
declare class ChromiumUnavailableError extends Error {
|
|
12
|
+
readonly code = "CHROMIUM_UNAVAILABLE";
|
|
13
|
+
}
|
|
3
14
|
declare function getBrowser(): Promise<Browser>;
|
|
4
15
|
declare function closeBrowser(): Promise<void>;
|
|
5
16
|
|
|
6
|
-
export { closeBrowser, getBrowser };
|
|
17
|
+
export { ChromiumUnavailableError, closeBrowser, getBrowser };
|
|
@@ -10,6 +10,9 @@ var execFileAsync = promisify(execFile);
|
|
|
10
10
|
var require2 = createRequire$1(import.meta.url);
|
|
11
11
|
var browserPromise = null;
|
|
12
12
|
var installPromise = null;
|
|
13
|
+
var ChromiumUnavailableError = class extends Error {
|
|
14
|
+
code = "CHROMIUM_UNAVAILABLE";
|
|
15
|
+
};
|
|
13
16
|
var isMissingExecutableError = (err) => {
|
|
14
17
|
const msg = err instanceof Error ? err.message : String(err);
|
|
15
18
|
return msg.includes("Executable doesn't exist") || msg.includes("Please run the following command to download new browsers") || // Older playwright revisions phrase the version-mismatch case differently.
|
|
@@ -42,7 +45,9 @@ async function installChromium() {
|
|
|
42
45
|
} catch (err) {
|
|
43
46
|
const detail = err instanceof Error ? err.message : String(err);
|
|
44
47
|
console.error(`[STORYBOOK_PLUGIN] chromium install FAILED: ${detail}`);
|
|
45
|
-
throw new
|
|
48
|
+
throw new ChromiumUnavailableError(
|
|
49
|
+
`Playwright chromium install failed: ${detail}`
|
|
50
|
+
);
|
|
46
51
|
} finally {
|
|
47
52
|
installPromise = null;
|
|
48
53
|
}
|
|
@@ -64,7 +69,7 @@ async function launchWithSelfHeal() {
|
|
|
64
69
|
console.error(
|
|
65
70
|
`[STORYBOOK_PLUGIN] launch still failing after install \u2014 likely path or libs issue: ${detail}`
|
|
66
71
|
);
|
|
67
|
-
throw new
|
|
72
|
+
throw new ChromiumUnavailableError(
|
|
68
73
|
`Playwright chromium is unavailable in this sandbox (install ran but launch still failed): ${detail}`
|
|
69
74
|
);
|
|
70
75
|
}
|
|
@@ -91,4 +96,4 @@ async function closeBrowser() {
|
|
|
91
96
|
}
|
|
92
97
|
}
|
|
93
98
|
|
|
94
|
-
export { closeBrowser, getBrowser };
|
|
99
|
+
export { ChromiumUnavailableError, closeBrowser, getBrowser };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onlook/storybook-plugin",
|
|
3
|
-
"version": "0.4.0-beta.
|
|
3
|
+
"version": "0.4.0-beta.15",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"onlook-storybook": "./dist/cli/index.js"
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
"@babel/traverse": "^7.26.9",
|
|
48
48
|
"@babel/types": "^7.29.0",
|
|
49
49
|
"@drizzle-team/brocli": "^0.11.0",
|
|
50
|
-
"playwright": "
|
|
51
|
-
"playwright-core": "
|
|
50
|
+
"playwright": "1.57.0",
|
|
51
|
+
"playwright-core": "1.57.0",
|
|
52
52
|
"storybook": "^10.1.11"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|