uisnap 0.1.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/.claude/settings.local.json +26 -0
- package/.claude/skills/uisnap/README.md +48 -0
- package/.claude/skills/uisnap/REFERENCE.md +1261 -0
- package/.claude/skills/uisnap/SETUP.md +75 -0
- package/.claude/skills/uisnap/SKILL.md +130 -0
- package/.claude/skills/uisnap/snapshot-capture-and-analysis.md +452 -0
- package/.claude/skills/uisnap/trace-capture-and-analysis.md +472 -0
- package/CHANGELOG.md +96 -0
- package/LICENSE +21 -0
- package/README.md +394 -0
- package/SKILL-INSTALLATION.md +103 -0
- package/dist/analyze-console.d.ts +3 -0
- package/dist/analyze-console.d.ts.map +1 -0
- package/dist/analyze-console.js +153 -0
- package/dist/analyze-console.js.map +1 -0
- package/dist/analyze-network.d.ts +3 -0
- package/dist/analyze-network.d.ts.map +1 -0
- package/dist/analyze-network.js +156 -0
- package/dist/analyze-network.js.map +1 -0
- package/dist/chrome-trace-analyze.d.ts +3 -0
- package/dist/chrome-trace-analyze.d.ts.map +1 -0
- package/dist/chrome-trace-analyze.js +119 -0
- package/dist/chrome-trace-analyze.js.map +1 -0
- package/dist/chrome-trace-import.d.ts +3 -0
- package/dist/chrome-trace-import.d.ts.map +1 -0
- package/dist/chrome-trace-import.js +90 -0
- package/dist/chrome-trace-import.js.map +1 -0
- package/dist/commands/snapshot.d.ts +4 -0
- package/dist/commands/snapshot.d.ts.map +1 -0
- package/dist/commands/snapshot.js +154 -0
- package/dist/commands/snapshot.js.map +1 -0
- package/dist/diagnose.d.ts +3 -0
- package/dist/diagnose.d.ts.map +1 -0
- package/dist/diagnose.js +244 -0
- package/dist/diagnose.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/pw.d.ts +3 -0
- package/dist/pw.d.ts.map +1 -0
- package/dist/pw.js +289 -0
- package/dist/pw.js.map +1 -0
- package/dist/query-a11y.d.ts +3 -0
- package/dist/query-a11y.d.ts.map +1 -0
- package/dist/query-a11y.js +208 -0
- package/dist/query-a11y.js.map +1 -0
- package/dist/trace-import.d.ts +3 -0
- package/dist/trace-import.d.ts.map +1 -0
- package/dist/trace-import.js +93 -0
- package/dist/trace-import.js.map +1 -0
- package/dist/types.d.ts +70 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/chromeTraceAnalyze.d.ts +40 -0
- package/dist/utils/chromeTraceAnalyze.d.ts.map +1 -0
- package/dist/utils/chromeTraceAnalyze.js +113 -0
- package/dist/utils/chromeTraceAnalyze.js.map +1 -0
- package/dist/utils/chromeTraceHelpers.d.ts +4 -0
- package/dist/utils/chromeTraceHelpers.d.ts.map +1 -0
- package/dist/utils/chromeTraceHelpers.js +68 -0
- package/dist/utils/chromeTraceHelpers.js.map +1 -0
- package/dist/utils/chromeTraceImport.d.ts +14 -0
- package/dist/utils/chromeTraceImport.d.ts.map +1 -0
- package/dist/utils/chromeTraceImport.js +77 -0
- package/dist/utils/chromeTraceImport.js.map +1 -0
- package/dist/utils/helpers.d.ts +3 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +88 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/projectRoot.d.ts +2 -0
- package/dist/utils/projectRoot.d.ts.map +1 -0
- package/dist/utils/projectRoot.js +56 -0
- package/dist/utils/projectRoot.js.map +1 -0
- package/dist/utils/traceHelpers.d.ts +4 -0
- package/dist/utils/traceHelpers.d.ts.map +1 -0
- package/dist/utils/traceHelpers.js +67 -0
- package/dist/utils/traceHelpers.js.map +1 -0
- package/dist/utils/traceImport.d.ts +20 -0
- package/dist/utils/traceImport.d.ts.map +1 -0
- package/dist/utils/traceImport.js +124 -0
- package/dist/utils/traceImport.js.map +1 -0
- package/dist/utils/webVitals.d.ts +9 -0
- package/dist/utils/webVitals.d.ts.map +1 -0
- package/dist/utils/webVitals.js +54 -0
- package/dist/utils/webVitals.js.map +1 -0
- package/examples/login-flow.js +37 -0
- package/examples/scroll-perf-trace.js +43 -0
- package/examples/simple-capture.js +28 -0
- package/package.json +74 -0
package/dist/diagnose.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.diagnoseSnapshot = diagnoseSnapshot;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const duckdb_async_1 = require("duckdb-async");
|
|
41
|
+
async function diagnoseSnapshot(snapshotDir, args) {
|
|
42
|
+
const options = {
|
|
43
|
+
errors: args.includes('--errors'),
|
|
44
|
+
network: args.includes('--network'),
|
|
45
|
+
performance: args.includes('--performance'),
|
|
46
|
+
full: args.includes('--full'),
|
|
47
|
+
};
|
|
48
|
+
const output = [];
|
|
49
|
+
const metadataPath = path.join(snapshotDir, 'metadata.json');
|
|
50
|
+
if (!fs.existsSync(metadataPath)) {
|
|
51
|
+
throw new Error(`No metadata.json found in ${snapshotDir}`);
|
|
52
|
+
}
|
|
53
|
+
const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf8'));
|
|
54
|
+
output.push('\n=== Web Vitals ===\n');
|
|
55
|
+
if (metadata.webVitals) {
|
|
56
|
+
const { fcp, lcp, tti, cls } = metadata.webVitals;
|
|
57
|
+
const fcpStatus = fcp < 1800 ? '✓' : fcp < 3000 ? '⚠️' : '❌';
|
|
58
|
+
const lcpStatus = lcp < 2500 ? '✓' : lcp < 4000 ? '⚠️' : '❌';
|
|
59
|
+
const ttiStatus = tti < 3800 ? '✓' : tti < 7300 ? '⚠️' : '❌';
|
|
60
|
+
const clsStatus = cls < 0.1 ? '✓' : cls < 0.25 ? '⚠️' : '❌';
|
|
61
|
+
output.push(` FCP: ${fcp}ms ${fcpStatus}`);
|
|
62
|
+
output.push(` LCP: ${lcp}ms ${lcpStatus}`);
|
|
63
|
+
output.push(` TTI: ${tti}ms ${ttiStatus}`);
|
|
64
|
+
output.push(` CLS: ${cls} ${clsStatus}`);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
output.push(' No web vitals data');
|
|
68
|
+
}
|
|
69
|
+
const consolePath = path.join(snapshotDir, 'console.jsonl');
|
|
70
|
+
let consoleSummary = { errors: 0, warnings: 0, errorGroups: new Map() };
|
|
71
|
+
if (fs.existsSync(consolePath)) {
|
|
72
|
+
const consoleLines = fs.readFileSync(consolePath, 'utf8').trim().split('\n').filter(l => l);
|
|
73
|
+
for (const line of consoleLines) {
|
|
74
|
+
const entry = JSON.parse(line);
|
|
75
|
+
if (entry.type === 'error') {
|
|
76
|
+
consoleSummary.errors++;
|
|
77
|
+
const count = consoleSummary.errorGroups.get(entry.text) || 0;
|
|
78
|
+
consoleSummary.errorGroups.set(entry.text, count + 1);
|
|
79
|
+
}
|
|
80
|
+
else if (entry.type === 'warning') {
|
|
81
|
+
consoleSummary.warnings++;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
output.push(`\nConsole: ${consoleSummary.errors} errors, ${consoleSummary.warnings} warnings`);
|
|
86
|
+
const networkPath = path.join(snapshotDir, 'network.jsonl');
|
|
87
|
+
let networkSummary = { total: 0, failed: 0, slow: 0, failedRequests: [], slowRequests: [] };
|
|
88
|
+
if (fs.existsSync(networkPath)) {
|
|
89
|
+
const networkLines = fs.readFileSync(networkPath, 'utf8').trim().split('\n').filter(l => l);
|
|
90
|
+
networkSummary.total = networkLines.length;
|
|
91
|
+
for (const line of networkLines) {
|
|
92
|
+
const entry = JSON.parse(line);
|
|
93
|
+
if (entry.status >= 400) {
|
|
94
|
+
networkSummary.failed++;
|
|
95
|
+
networkSummary.failedRequests.push(entry);
|
|
96
|
+
}
|
|
97
|
+
if (entry.timing && (entry.timing.responseEnd - entry.timing.startTime) > 1000) {
|
|
98
|
+
networkSummary.slow++;
|
|
99
|
+
networkSummary.slowRequests.push(entry);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
output.push(`Network: ${networkSummary.total} requests, ${networkSummary.failed} failed, ${networkSummary.slow} slow (>1s)`);
|
|
104
|
+
const traceDbPath = path.join(snapshotDir, 'chrome-trace.db');
|
|
105
|
+
let performanceSummary = { hasTrace: false, longTasks: 0, totalJsTime: 0 };
|
|
106
|
+
if (fs.existsSync(traceDbPath)) {
|
|
107
|
+
performanceSummary.hasTrace = true;
|
|
108
|
+
const db = await duckdb_async_1.Database.create(traceDbPath);
|
|
109
|
+
const longTasks = await db.all(`
|
|
110
|
+
SELECT COUNT(*) as count FROM tasks WHERE dur_ms > 50
|
|
111
|
+
`);
|
|
112
|
+
performanceSummary.longTasks = Number(longTasks[0].count);
|
|
113
|
+
const jsTime = await db.all(`
|
|
114
|
+
SELECT ROUND(SUM(dur_ms), 2) as total
|
|
115
|
+
FROM tasks
|
|
116
|
+
WHERE name LIKE '%Script%' OR name LIKE '%Function%'
|
|
117
|
+
`);
|
|
118
|
+
performanceSummary.totalJsTime = Number(jsTime[0].total || 0);
|
|
119
|
+
await db.close();
|
|
120
|
+
}
|
|
121
|
+
if (performanceSummary.hasTrace) {
|
|
122
|
+
output.push(`Performance: ${performanceSummary.longTasks} long tasks (>50ms), ${performanceSummary.totalJsTime}ms total JS time`);
|
|
123
|
+
}
|
|
124
|
+
if (!options.errors && !options.network && !options.performance && !options.full) {
|
|
125
|
+
output.push('\nFor details, use:');
|
|
126
|
+
if (consoleSummary.errors > 0) {
|
|
127
|
+
output.push(` --errors Show ${consoleSummary.errors} console error(s)`);
|
|
128
|
+
}
|
|
129
|
+
if (networkSummary.failed > 0 || networkSummary.slow > 0) {
|
|
130
|
+
output.push(` --network Show network details (${networkSummary.failed} failed, ${networkSummary.slow} slow)`);
|
|
131
|
+
}
|
|
132
|
+
if (performanceSummary.hasTrace) {
|
|
133
|
+
output.push(` --performance Show performance breakdown`);
|
|
134
|
+
}
|
|
135
|
+
output.push(` --full Show all details`);
|
|
136
|
+
}
|
|
137
|
+
if (options.errors || options.full) {
|
|
138
|
+
if (consoleSummary.errors > 0) {
|
|
139
|
+
output.push('\n=== Console Errors ===\n');
|
|
140
|
+
for (const [text, count] of consoleSummary.errorGroups) {
|
|
141
|
+
const plural = count > 1 ? 's' : '';
|
|
142
|
+
output.push(` ${text} (${count} occurrence${plural})`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (options.network || options.full) {
|
|
147
|
+
if (networkSummary.failed > 0) {
|
|
148
|
+
output.push('\n=== Failed Network Requests ===\n');
|
|
149
|
+
for (const req of networkSummary.failedRequests) {
|
|
150
|
+
output.push(` [${req.status}] ${req.method} ${req.url}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (networkSummary.slow > 0) {
|
|
154
|
+
output.push('\n=== Slow Network Requests (>1s) ===\n');
|
|
155
|
+
for (const req of networkSummary.slowRequests) {
|
|
156
|
+
const duration = Math.round(req.timing.responseEnd - req.timing.startTime);
|
|
157
|
+
output.push(` [${duration}ms] ${req.method} ${req.url}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (options.performance || options.full) {
|
|
162
|
+
if (performanceSummary.hasTrace) {
|
|
163
|
+
output.push('\n=== Performance Details ===\n');
|
|
164
|
+
const db = await duckdb_async_1.Database.create(traceDbPath);
|
|
165
|
+
if (performanceSummary.longTasks > 0) {
|
|
166
|
+
output.push('Long Tasks (>50ms):');
|
|
167
|
+
const tasks = await db.all(`
|
|
168
|
+
SELECT name, ROUND(dur_ms, 2) as dur_ms, ROUND(ts_ms, 2) as ts_ms
|
|
169
|
+
FROM tasks WHERE dur_ms > 50
|
|
170
|
+
ORDER BY dur_ms DESC LIMIT 10
|
|
171
|
+
`);
|
|
172
|
+
for (const task of tasks) {
|
|
173
|
+
output.push(` ${task.name}: ${task.dur_ms}ms at ${task.ts_ms}ms`);
|
|
174
|
+
}
|
|
175
|
+
output.push('');
|
|
176
|
+
}
|
|
177
|
+
output.push('JavaScript Execution:');
|
|
178
|
+
const jsStats = await db.all(`
|
|
179
|
+
SELECT name, COUNT(*) as count,
|
|
180
|
+
ROUND(SUM(dur_ms), 2) as total_ms,
|
|
181
|
+
ROUND(AVG(dur_ms), 2) as avg_ms,
|
|
182
|
+
ROUND(MAX(dur_ms), 2) as max_ms
|
|
183
|
+
FROM tasks
|
|
184
|
+
WHERE name LIKE '%Script%' OR name LIKE '%Function%'
|
|
185
|
+
GROUP BY name ORDER BY total_ms DESC
|
|
186
|
+
`);
|
|
187
|
+
for (const stat of jsStats) {
|
|
188
|
+
output.push(` ${stat.name}: ${stat.count} calls, ${stat.total_ms}ms total, ${stat.avg_ms}ms avg, ${stat.max_ms}ms max`);
|
|
189
|
+
}
|
|
190
|
+
await db.close();
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
output.push('\n=== Performance ===\n');
|
|
194
|
+
output.push(' No Chrome trace data found');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
output.push('');
|
|
198
|
+
return output.join('\n');
|
|
199
|
+
}
|
|
200
|
+
async function main() {
|
|
201
|
+
const snapshotDir = process.argv[2];
|
|
202
|
+
const args = process.argv.slice(3);
|
|
203
|
+
if (!snapshotDir || snapshotDir === '--help' || snapshotDir === '-h') {
|
|
204
|
+
console.log(`Diagnose Snapshot
|
|
205
|
+
|
|
206
|
+
Usage:
|
|
207
|
+
pw-diagnose <snapshot-dir> [options]
|
|
208
|
+
|
|
209
|
+
Options:
|
|
210
|
+
--errors Show detailed console errors
|
|
211
|
+
--network Show detailed network failures and slow requests
|
|
212
|
+
--performance Show detailed performance breakdown
|
|
213
|
+
--full Show all details
|
|
214
|
+
|
|
215
|
+
Examples:
|
|
216
|
+
pw-diagnose snapshots/example.com/latest/
|
|
217
|
+
pw-diagnose snapshots/example.com/latest/ --errors
|
|
218
|
+
pw-diagnose snapshots/example.com/latest/ --full
|
|
219
|
+
`);
|
|
220
|
+
process.exit(0);
|
|
221
|
+
}
|
|
222
|
+
if (!fs.existsSync(snapshotDir)) {
|
|
223
|
+
console.error(`Error: Snapshot directory not found: ${snapshotDir}`);
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
try {
|
|
227
|
+
const output = await diagnoseSnapshot(snapshotDir, args);
|
|
228
|
+
console.log(output);
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
console.error('Error diagnosing snapshot:');
|
|
232
|
+
if (error instanceof Error) {
|
|
233
|
+
console.error(error.message);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
console.error(error);
|
|
237
|
+
}
|
|
238
|
+
process.exit(1);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (require.main === module) {
|
|
242
|
+
main();
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=diagnose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../src/diagnose.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.snapshot = exports.createUtils = void 0;
|
|
21
|
+
__exportStar(require("./types"), exports);
|
|
22
|
+
var helpers_1 = require("./utils/helpers");
|
|
23
|
+
Object.defineProperty(exports, "createUtils", { enumerable: true, get: function () { return helpers_1.createUtils; } });
|
|
24
|
+
var snapshot_1 = require("./commands/snapshot");
|
|
25
|
+
Object.defineProperty(exports, "snapshot", { enumerable: true, get: function () { return __importDefault(snapshot_1).default; } });
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAMA,0CAAwB;AACxB,2CAA8C;AAArC,sGAAA,WAAW,OAAA;AACpB,gDAA0D;AAAjD,qHAAA,OAAO,OAAY"}
|
package/dist/pw.d.ts
ADDED
package/dist/pw.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw.d.ts","sourceRoot":"","sources":["../src/pw.ts"],"names":[],"mappings":""}
|
package/dist/pw.js
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
const playwright_1 = require("playwright");
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const helpers_1 = require("./utils/helpers");
|
|
44
|
+
const projectRoot_1 = require("./utils/projectRoot");
|
|
45
|
+
const snapshot_1 = __importDefault(require("./commands/snapshot"));
|
|
46
|
+
const builtins = {
|
|
47
|
+
snapshot: snapshot_1.default,
|
|
48
|
+
};
|
|
49
|
+
async function executeUserScript(page, context, browser, args) {
|
|
50
|
+
const scriptPath = args[0];
|
|
51
|
+
const scriptArgs = args.slice(1);
|
|
52
|
+
if (!scriptPath) {
|
|
53
|
+
console.error('Usage: exec <script.js> <url> [output-dir]');
|
|
54
|
+
console.error('');
|
|
55
|
+
console.error('If output-dir is not specified, auto-generates:');
|
|
56
|
+
console.error(' snapshots/{hostname}/{script-name}-{timestamp}/');
|
|
57
|
+
console.error('');
|
|
58
|
+
console.error('Example:');
|
|
59
|
+
console.error(' pw-debug exec examples/scroll-perf-trace.js https://example.com');
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
if (!fs.existsSync(scriptPath)) {
|
|
63
|
+
console.error(`Error: Script not found: ${scriptPath}`);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
const url = scriptArgs[0];
|
|
67
|
+
const userOutputDir = scriptArgs[1];
|
|
68
|
+
const remainingArgs = scriptArgs.slice(userOutputDir ? 2 : 1);
|
|
69
|
+
let outputDir;
|
|
70
|
+
if (userOutputDir) {
|
|
71
|
+
const projectRoot = (0, projectRoot_1.getUserProjectDir)();
|
|
72
|
+
outputDir = path.isAbsolute(userOutputDir)
|
|
73
|
+
? userOutputDir
|
|
74
|
+
: path.join(projectRoot, userOutputDir);
|
|
75
|
+
}
|
|
76
|
+
else if (url && url.startsWith('http')) {
|
|
77
|
+
try {
|
|
78
|
+
const projectRoot = (0, projectRoot_1.getUserProjectDir)();
|
|
79
|
+
const urlObj = new URL(url);
|
|
80
|
+
const hostname = urlObj.hostname;
|
|
81
|
+
const scriptName = path.basename(scriptPath, path.extname(scriptPath));
|
|
82
|
+
const timestamp = new Date()
|
|
83
|
+
.toISOString()
|
|
84
|
+
.replace(/[:.]/g, '-')
|
|
85
|
+
.split('T')
|
|
86
|
+
.join('-')
|
|
87
|
+
.slice(0, 19);
|
|
88
|
+
outputDir = path.join(projectRoot, 'snapshots', hostname, `${scriptName}-${timestamp}`);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error(`Warning: Invalid URL: ${url}. Using current directory.`);
|
|
92
|
+
const projectRoot = (0, projectRoot_1.getUserProjectDir)();
|
|
93
|
+
outputDir = projectRoot;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const projectRoot = (0, projectRoot_1.getUserProjectDir)();
|
|
98
|
+
outputDir = projectRoot;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.error(`Error creating output directory: ${outputDir}`);
|
|
105
|
+
if (error.code === 'EACCES') {
|
|
106
|
+
console.error('Permission denied. Check directory permissions.');
|
|
107
|
+
}
|
|
108
|
+
else if (error.code === 'ENOSPC') {
|
|
109
|
+
console.error('No space left on device.');
|
|
110
|
+
}
|
|
111
|
+
else if (error.code === 'EROFS') {
|
|
112
|
+
console.error('Read-only file system.');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
console.error(error.message);
|
|
116
|
+
}
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
const projectRoot = (0, projectRoot_1.getUserProjectDir)();
|
|
120
|
+
const relativePath = path.relative(projectRoot, outputDir);
|
|
121
|
+
console.log(`📂 Output directory: ${relativePath}`);
|
|
122
|
+
console.log(` (${path.resolve(outputDir)})`);
|
|
123
|
+
console.log(`\nExecuting script: ${scriptPath}`);
|
|
124
|
+
let scriptCode;
|
|
125
|
+
try {
|
|
126
|
+
const stats = fs.statSync(scriptPath);
|
|
127
|
+
if (stats.isDirectory()) {
|
|
128
|
+
console.error(`Error: Script path is a directory: ${scriptPath}`);
|
|
129
|
+
console.error('Please provide a path to a JavaScript file (.js)');
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
scriptCode = fs.readFileSync(scriptPath, 'utf8');
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (error.code === 'EACCES') {
|
|
136
|
+
console.error(`Error: Permission denied reading script: ${scriptPath}`);
|
|
137
|
+
console.error('Check file permissions and try again.');
|
|
138
|
+
}
|
|
139
|
+
else if (error.code === 'EISDIR') {
|
|
140
|
+
console.error(`Error: Script path is a directory: ${scriptPath}`);
|
|
141
|
+
console.error('Please provide a path to a JavaScript file (.js)');
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
console.error(`Error reading script file: ${scriptPath}`);
|
|
145
|
+
console.error(error.message);
|
|
146
|
+
}
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
const env = {
|
|
150
|
+
page,
|
|
151
|
+
context,
|
|
152
|
+
browser,
|
|
153
|
+
args: remainingArgs,
|
|
154
|
+
fs,
|
|
155
|
+
path,
|
|
156
|
+
utils: (0, helpers_1.createUtils)(outputDir),
|
|
157
|
+
};
|
|
158
|
+
const wrappedScript = `
|
|
159
|
+
(async ({ page, context, browser, args, fs, path, utils }) => {
|
|
160
|
+
${scriptCode}
|
|
161
|
+
})
|
|
162
|
+
`;
|
|
163
|
+
try {
|
|
164
|
+
const userFunction = eval(wrappedScript);
|
|
165
|
+
await userFunction(env);
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
console.error('Error executing user script:');
|
|
169
|
+
if (error instanceof Error) {
|
|
170
|
+
console.error(error.message);
|
|
171
|
+
if (error.stack) {
|
|
172
|
+
console.error(error.stack);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
console.error(error);
|
|
177
|
+
}
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async function main() {
|
|
182
|
+
const command = process.argv[2];
|
|
183
|
+
const args = process.argv.slice(3);
|
|
184
|
+
if (!command || command === '--help' || command === '-h') {
|
|
185
|
+
console.log(`Playwright Debug Toolkit - Browser State Capture & Analysis
|
|
186
|
+
|
|
187
|
+
Usage:
|
|
188
|
+
pw-debug snapshot <url> [output-dir]
|
|
189
|
+
pw-debug exec <script.js> <url> [output-dir]
|
|
190
|
+
|
|
191
|
+
BUILT-IN CAPTURE:
|
|
192
|
+
snapshot <url> [output-dir]
|
|
193
|
+
Capture complete page state to disk
|
|
194
|
+
Includes: ARIA tree, console logs, network requests, web vitals, Chrome trace
|
|
195
|
+
|
|
196
|
+
CUSTOM SCRIPTS (Multi-Step Debugging):
|
|
197
|
+
exec <script.js> <url> [output-dir]
|
|
198
|
+
Run your own Playwright script with full browser access
|
|
199
|
+
Includes: utils.captureStep() for step-by-step state capture
|
|
200
|
+
Perfect for: login flows, user interactions, performance debugging
|
|
201
|
+
|
|
202
|
+
Examples:
|
|
203
|
+
# Quick snapshot
|
|
204
|
+
pw-debug snapshot https://example.com
|
|
205
|
+
|
|
206
|
+
# Multi-step debugging
|
|
207
|
+
pw-debug exec login-flow.js https://myapp.com
|
|
208
|
+
pw-debug exec examples/scroll-perf-trace.js https://example.com
|
|
209
|
+
|
|
210
|
+
# Specify output directory
|
|
211
|
+
pw-debug snapshot https://example.com snapshots/baseline/
|
|
212
|
+
pw-debug exec my-script.js https://example.com debug-output/
|
|
213
|
+
|
|
214
|
+
Output Location:
|
|
215
|
+
Default: snapshots/{hostname}/{timestamp|script-name}/ in your project root
|
|
216
|
+
|
|
217
|
+
Analysis Commands (work on captured data):
|
|
218
|
+
pw-analyze-console <console.jsonl>
|
|
219
|
+
pw-analyze-network <network.jsonl>
|
|
220
|
+
pw-query-a11y <a11y.yaml> <query>
|
|
221
|
+
chrome-trace-analyze <trace.db> [--long-tasks|--js-time|--layout-paint|--full]
|
|
222
|
+
chrome-trace-import <trace.json> <output.db>
|
|
223
|
+
`);
|
|
224
|
+
process.exit(0);
|
|
225
|
+
}
|
|
226
|
+
let browser;
|
|
227
|
+
try {
|
|
228
|
+
browser = await playwright_1.chromium.launch({
|
|
229
|
+
headless: true,
|
|
230
|
+
args: ['--disable-dev-shm-usage'],
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
console.error('Error: Failed to launch browser');
|
|
235
|
+
console.error('');
|
|
236
|
+
if (error.message) {
|
|
237
|
+
console.error(error.message);
|
|
238
|
+
console.error('');
|
|
239
|
+
}
|
|
240
|
+
console.error('Troubleshooting:');
|
|
241
|
+
console.error(' 1. Install Chromium browser:');
|
|
242
|
+
console.error(' npx playwright install chromium');
|
|
243
|
+
console.error('');
|
|
244
|
+
console.error(' 2. On Linux, install system dependencies:');
|
|
245
|
+
console.error(' npx playwright install-deps chromium');
|
|
246
|
+
console.error('');
|
|
247
|
+
console.error(' 3. Check system requirements:');
|
|
248
|
+
console.error(' https://playwright.dev/docs/browsers');
|
|
249
|
+
process.exit(1);
|
|
250
|
+
}
|
|
251
|
+
const context = await browser.newContext({
|
|
252
|
+
viewport: { width: 1280, height: 720 },
|
|
253
|
+
});
|
|
254
|
+
const page = await context.newPage();
|
|
255
|
+
try {
|
|
256
|
+
if (builtins[command]) {
|
|
257
|
+
await builtins[command](page, context, browser, args);
|
|
258
|
+
}
|
|
259
|
+
else if (command === 'exec') {
|
|
260
|
+
await executeUserScript(page, context, browser, args);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
console.error(`Unknown command: ${command}`);
|
|
264
|
+
console.error(`Run 'pw-debug' without arguments to see available commands.`);
|
|
265
|
+
process.exit(1);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
console.error('Fatal error:');
|
|
270
|
+
if (error instanceof Error) {
|
|
271
|
+
console.error(error.message);
|
|
272
|
+
if (error.stack) {
|
|
273
|
+
console.error(error.stack);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
console.error(error);
|
|
278
|
+
}
|
|
279
|
+
process.exit(1);
|
|
280
|
+
}
|
|
281
|
+
finally {
|
|
282
|
+
await browser.close();
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
main().catch(err => {
|
|
286
|
+
console.error('Unhandled error:', err);
|
|
287
|
+
process.exit(1);
|
|
288
|
+
});
|
|
289
|
+
//# sourceMappingURL=pw.js.map
|
package/dist/pw.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw.js","sourceRoot":"","sources":["../src/pw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-a11y.d.ts","sourceRoot":"","sources":["../src/query-a11y.ts"],"names":[],"mappings":""}
|