playwright-zed-language-server 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/server.js ADDED
@@ -0,0 +1,546 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const path = __importStar(require("node:path"));
37
+ const node_url_1 = require("node:url");
38
+ const node_1 = require("vscode-languageserver/node");
39
+ const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
40
+ const commands_1 = require("./commands");
41
+ const discovery_1 = require("./discovery");
42
+ const reporting_1 = require("./reporting");
43
+ const runner_1 = require("./runner");
44
+ const version_1 = require("./version");
45
+ const workspace_1 = require("./workspace");
46
+ const CODE_ACTION_KIND = 'source.playwright';
47
+ const STATUS_REQUEST = 'playwright/status';
48
+ const connection = (0, node_1.createConnection)(node_1.ProposedFeatures.all);
49
+ const documents = new node_1.TextDocuments(vscode_languageserver_textdocument_1.TextDocument);
50
+ const reporter = new reporting_1.Reporter(connection);
51
+ const workspaces = new Map();
52
+ const runManagers = new Map();
53
+ /** Files that currently carry `playwright` diagnostics, per workspace root. */
54
+ const publishedFiles = new Map();
55
+ /** Document version at last open or save; used for the dirty flag. */
56
+ const savedVersion = new Map();
57
+ const dirtyUris = new Set();
58
+ /** Folders received in `initialize`, discovered after `initialized`. */
59
+ const pendingFolders = [];
60
+ function toPath(uri) {
61
+ try {
62
+ return (0, node_url_1.fileURLToPath)(uri);
63
+ }
64
+ catch {
65
+ return null;
66
+ }
67
+ }
68
+ function isWithin(parent, child) {
69
+ const rel = path.relative(parent, child);
70
+ return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel));
71
+ }
72
+ function workspaceForFile(file) {
73
+ let best = null;
74
+ for (const ws of workspaces.values()) {
75
+ if (isWithin(ws.rootPath, file) && (!best || ws.rootPath.length > best.rootPath.length))
76
+ best = ws;
77
+ }
78
+ return best;
79
+ }
80
+ function managerFor(ws) {
81
+ let manager = runManagers.get(ws.rootPath);
82
+ if (!manager) {
83
+ manager = new runner_1.RunManager();
84
+ runManagers.set(ws.rootPath, manager);
85
+ }
86
+ return manager;
87
+ }
88
+ async function discoverConfig(config) {
89
+ const error = await (0, discovery_1.runList)(config);
90
+ if (error) {
91
+ reporter.log(`playwright: test discovery failed for ${config.configPath}\n${error}`);
92
+ reporter.showWarning(`Playwright: test discovery failed for ${path.basename(config.configPath)}; see the language server log for the command and error.`);
93
+ }
94
+ else {
95
+ reporter.info(`playwright: discovered ${config.tests.length} test(s) via ${config.configPath}`);
96
+ }
97
+ }
98
+ async function discoverWorkspace(ws) {
99
+ ws.configs = [];
100
+ for (const configPath of (0, workspace_1.findConfigs)(ws.rootPath)) {
101
+ const config = (0, workspace_1.buildConfig)(configPath);
102
+ if (!config) {
103
+ reporter.info(`playwright: ${configPath} has no @playwright/test package nearby; ignoring it`);
104
+ continue;
105
+ }
106
+ ws.configs.push(config);
107
+ }
108
+ if (ws.configs.length === 0) {
109
+ reporter.info(`playwright: no Playwright configuration found in ${ws.rootPath}`);
110
+ }
111
+ warnUnsupported(ws);
112
+ if (!hasSupportedConfig(ws))
113
+ return;
114
+ if (ws.discovery === 'enabled') {
115
+ await discoverEnabled(ws);
116
+ return;
117
+ }
118
+ // Feature 002: nothing from the workspace runs until the developer agrees. The prompt may
119
+ // never be answered (Zed does not respond to a dismissed notification), so it is not awaited.
120
+ if (ws.discovery === 'pending' && !ws.discoveryAsked) {
121
+ ws.discoveryAsked = true;
122
+ void askForDiscovery(ws);
123
+ }
124
+ }
125
+ /** Shows the unsupported-version warning once per workspace; reading the version runs no code. */
126
+ function warnUnsupported(ws) {
127
+ const unsupported = ws.configs.find((c) => !c.supported);
128
+ if (unsupported && !ws.versionWarningShown) {
129
+ ws.versionWarningShown = true;
130
+ reporter.showWarning(`Playwright ${(0, version_1.formatVersion)(unsupported.playwrightVersion)} found; v1.38 or newer is required. Test running is disabled.`);
131
+ }
132
+ }
133
+ function hasSupportedConfig(ws) {
134
+ return ws.configs.some((c) => c.supported);
135
+ }
136
+ function isCurrent(ws) {
137
+ return workspaces.get(ws.rootPath) === ws;
138
+ }
139
+ /** Runs `--list` for every supported config of an enabled workspace, then refreshes lenses. */
140
+ async function discoverEnabled(ws) {
141
+ for (const config of ws.configs) {
142
+ if (config.supported)
143
+ await discoverConfig(config);
144
+ }
145
+ await reporter.refreshCodeLenses();
146
+ }
147
+ /** Idempotent: marks the workspace enabled and runs discovery once. */
148
+ async function enableDiscovery(ws) {
149
+ if (ws.discovery === 'enabled')
150
+ return;
151
+ ws.discovery = 'enabled';
152
+ reporter.info(`playwright: test discovery enabled for ${ws.rootPath}`);
153
+ await discoverEnabled(ws);
154
+ }
155
+ async function askForDiscovery(ws) {
156
+ const folderName = path.basename(ws.rootPath);
157
+ let answer;
158
+ try {
159
+ answer = await reporter.askDiscovery(folderName, ws.rootPath);
160
+ }
161
+ catch (error) {
162
+ if (!isCurrent(ws) || ws.discovery !== 'pending')
163
+ return;
164
+ ws.discovery = 'declined';
165
+ reporter.info(`playwright: discovery question could not be shown for ${ws.rootPath}: ${error.message}`);
166
+ reporter.showWarning(discoveryOffMessage(folderName));
167
+ return;
168
+ }
169
+ if (!isCurrent(ws))
170
+ return;
171
+ if (answer === reporting_1.DISCOVERY_RUN) {
172
+ await enableDiscovery(ws);
173
+ }
174
+ else if (answer === reporting_1.DISCOVERY_NOT_NOW || answer === null) {
175
+ if (ws.discovery === 'pending')
176
+ ws.discovery = 'declined';
177
+ }
178
+ }
179
+ function discoveryOffMessage(folderName) {
180
+ return `Playwright test discovery is off for ${folderName}; use "Playwright: Enable test discovery" from the code actions menu to turn it on.`;
181
+ }
182
+ /** The workspace for `uri` when it has Playwright but discovery is not enabled, else null. */
183
+ function gatedWorkspace(uri) {
184
+ const file = toPath(uri);
185
+ const ws = file ? workspaceForFile(file) : null;
186
+ if (!ws || ws.discovery === 'enabled' || !hasSupportedConfig(ws))
187
+ return null;
188
+ return ws;
189
+ }
190
+ function refuseNotEnabled(ws) {
191
+ const folderName = path.basename(ws.rootPath);
192
+ if (ws.discovery === 'declined') {
193
+ reporter.showWarning(`Playwright test discovery is disabled for ${folderName}; use "Playwright: Enable test discovery" from the code actions menu to turn it on.`);
194
+ }
195
+ else {
196
+ reporter.showWarning(`Playwright test discovery has not been enabled for ${folderName}; answer the discovery question or use "Playwright: Enable test discovery" from the code actions menu.`);
197
+ }
198
+ }
199
+ async function addWorkspace(folder) {
200
+ const rootPath = toPath(folder.uri);
201
+ if (!rootPath)
202
+ return;
203
+ const ws = {
204
+ rootUri: folder.uri,
205
+ rootPath,
206
+ configs: [],
207
+ lastRun: null,
208
+ versionWarningShown: false,
209
+ discovery: 'pending',
210
+ discoveryAsked: false,
211
+ };
212
+ workspaces.set(rootPath, ws);
213
+ await discoverWorkspace(ws);
214
+ }
215
+ function removeWorkspace(folder) {
216
+ const rootPath = toPath(folder.uri);
217
+ if (!rootPath)
218
+ return;
219
+ runManagers.get(rootPath)?.cancelActive();
220
+ workspaces.delete(rootPath);
221
+ runManagers.delete(rootPath);
222
+ publishedFiles.delete(rootPath);
223
+ }
224
+ connection.onInitialize((params) => {
225
+ const folders = params.workspaceFolders ?? (params.rootUri ? [{ uri: params.rootUri, name: 'root' }] : []);
226
+ pendingFolders.push(...folders);
227
+ return {
228
+ capabilities: {
229
+ textDocumentSync: { openClose: true, change: node_1.TextDocumentSyncKind.Incremental, save: { includeText: false } },
230
+ codeActionProvider: { codeActionKinds: [CODE_ACTION_KIND] },
231
+ codeLensProvider: { resolveProvider: false },
232
+ executeCommandProvider: { commands: commands_1.ALL_COMMANDS },
233
+ workspace: { workspaceFolders: { supported: true, changeNotifications: true } },
234
+ },
235
+ };
236
+ });
237
+ connection.onInitialized(() => {
238
+ void (async () => {
239
+ for (const folder of pendingFolders.splice(0))
240
+ await addWorkspace(folder);
241
+ })();
242
+ try {
243
+ connection.workspace.onDidChangeWorkspaceFolders((event) => {
244
+ for (const folder of event.removed)
245
+ removeWorkspace(folder);
246
+ void (async () => {
247
+ for (const folder of event.added)
248
+ await addWorkspace(folder);
249
+ })();
250
+ });
251
+ }
252
+ catch {
253
+ // client does not support workspace folder notifications
254
+ }
255
+ });
256
+ // ---------------------------------------------------------------------------
257
+ // Document tracking: dirty flag and diagnostics clearing on edit
258
+ // ---------------------------------------------------------------------------
259
+ documents.onDidOpen((event) => {
260
+ savedVersion.set(event.document.uri, event.document.version);
261
+ dirtyUris.delete(event.document.uri);
262
+ });
263
+ documents.onDidChangeContent((event) => {
264
+ const uri = event.document.uri;
265
+ const saved = savedVersion.get(uri);
266
+ if (saved === undefined || event.document.version === saved)
267
+ return;
268
+ dirtyUris.add(uri);
269
+ const file = toPath(uri);
270
+ if (!file)
271
+ return;
272
+ for (const [root, files] of publishedFiles) {
273
+ if (files.delete(file)) {
274
+ reporter.clearDiagnosticsForUri(uri);
275
+ if (files.size === 0)
276
+ publishedFiles.delete(root);
277
+ }
278
+ }
279
+ });
280
+ documents.onDidSave((event) => {
281
+ const uri = event.document.uri;
282
+ savedVersion.set(uri, event.document.version);
283
+ dirtyUris.delete(uri);
284
+ const file = toPath(uri);
285
+ if (!file)
286
+ return;
287
+ const ws = workspaceForFile(file);
288
+ if (!ws)
289
+ return;
290
+ void (async () => {
291
+ let changed = false;
292
+ if ((0, workspace_1.isConfigFile)(file) && !ws.configs.some((c) => c.configPath === file)) {
293
+ const added = (0, workspace_1.buildConfig)(file);
294
+ if (added) {
295
+ ws.configs.push(added);
296
+ warnUnsupported(ws);
297
+ if (added.supported && ws.discovery === 'enabled') {
298
+ await discoverConfig(added);
299
+ changed = true;
300
+ }
301
+ }
302
+ }
303
+ if (ws.discovery !== 'enabled')
304
+ return;
305
+ for (const config of ws.configs) {
306
+ if (!config.supported)
307
+ continue;
308
+ if (file === config.configPath || (0, workspace_1.isUnderTestDirs)(config, file)) {
309
+ await discoverConfig(config);
310
+ changed = true;
311
+ }
312
+ }
313
+ if (changed)
314
+ await reporter.refreshCodeLenses();
315
+ })();
316
+ });
317
+ documents.onDidClose((event) => {
318
+ savedVersion.delete(event.document.uri);
319
+ dirtyUris.delete(event.document.uri);
320
+ });
321
+ function testFileContext(uri) {
322
+ const file = toPath(uri);
323
+ if (!file)
324
+ return { ws: null, ctx: null };
325
+ const ws = workspaceForFile(file);
326
+ if (!ws)
327
+ return { ws: null, ctx: null };
328
+ if (ws.discovery !== 'enabled')
329
+ return { ws, ctx: null };
330
+ const config = (0, workspace_1.configForFile)(ws, file);
331
+ if (!config || !config.tests.some((t) => t.file === file))
332
+ return { ws, ctx: null };
333
+ return { ws, ctx: { ws, config, file } };
334
+ }
335
+ function action(title, command, args) {
336
+ return { title, kind: CODE_ACTION_KIND, command: { title, command, arguments: args } };
337
+ }
338
+ connection.onCodeAction((params) => {
339
+ const uri = params.textDocument.uri;
340
+ const gated = gatedWorkspace(uri);
341
+ if (gated)
342
+ return [action('Playwright: Enable test discovery', commands_1.COMMAND_ENABLE_DISCOVERY, [{ uri }])];
343
+ const { ws, ctx } = testFileContext(uri);
344
+ const actions = [];
345
+ if (ctx) {
346
+ const line0 = params.range.start.line;
347
+ const location = (0, commands_1.resolveTestLocation)(ctx.config.tests, ctx.file, line0 + 1);
348
+ if (location.kind === 'test')
349
+ actions.push(action('Playwright: Run test at cursor', commands_1.COMMAND_RUN_AT_CURSOR, [{ uri, line: line0 }]));
350
+ else if (location.kind === 'describe')
351
+ actions.push(action('Playwright: Run describe at cursor', commands_1.COMMAND_RUN_AT_CURSOR, [{ uri, line: line0 }]));
352
+ actions.push(action('Playwright: Run file', commands_1.COMMAND_RUN_FILE, [{ uri }]));
353
+ }
354
+ if (ws?.lastRun)
355
+ actions.push(action('Playwright: Re-run last', commands_1.COMMAND_RERUN_LAST, [{ uri }]));
356
+ return actions;
357
+ });
358
+ connection.onCodeLens((params) => {
359
+ const uri = params.textDocument.uri;
360
+ const { ctx } = testFileContext(uri);
361
+ if (!ctx)
362
+ return [];
363
+ const lenses = [];
364
+ const testLines = new Set();
365
+ const describeLines = new Set();
366
+ for (const test of ctx.config.tests) {
367
+ if (test.file !== ctx.file)
368
+ continue;
369
+ testLines.add(test.line);
370
+ for (const d of test.describeLines)
371
+ describeLines.add(d);
372
+ }
373
+ const lens = (line, title) => ({
374
+ range: { start: { line: line - 1, character: 0 }, end: { line: line - 1, character: 0 } },
375
+ command: { title, command: commands_1.COMMAND_RUN_AT_CURSOR, arguments: [{ uri, line: line - 1 }] },
376
+ });
377
+ for (const line of describeLines)
378
+ lenses.push(lens(line, '▶ Run describe'));
379
+ for (const line of testLines)
380
+ lenses.push(lens(line, '▶ Run test'));
381
+ lenses.sort((a, b) => a.range.start.line - b.range.start.line);
382
+ return lenses;
383
+ });
384
+ // ---------------------------------------------------------------------------
385
+ // Commands
386
+ // ---------------------------------------------------------------------------
387
+ async function startRun(ws, location, config, trigger) {
388
+ const manager = managerFor(ws);
389
+ const uri = (0, node_url_1.pathToFileURL)(location.file).toString();
390
+ const dirty = dirtyUris.has(uri);
391
+ const request = { id: manager.nextId(), location, config, trigger, startedAt: new Date().toISOString(), dirty };
392
+ ws.lastRun = request;
393
+ const displayFile = path.relative(config.configDir, location.file);
394
+ if (dirty)
395
+ reporter.showWarning(`${displayFile} has unsaved changes; running the saved version`);
396
+ const previouslyPublished = publishedFiles.get(ws.rootPath) ?? new Set();
397
+ reporter.clearDiagnostics(new Set([location.file, ...previouslyPublished]));
398
+ publishedFiles.delete(ws.rootPath);
399
+ const count = (0, commands_1.countSelectedTests)(config.tests, location);
400
+ const progress = await reporter.progressBegin(request.id, count, displayFile);
401
+ const target = location.line === null ? displayFile : `${displayFile}:${location.line}`;
402
+ reporter.log(`playwright: run ${request.id} (${trigger}, ${location.kind}) ${target}`);
403
+ const result = await manager.start(request);
404
+ reporter.log(`playwright: run ${request.id} command: ${result.command}\nplaywright: run ${request.id} cwd: ${config.configDir}\n${result.rawOutput.trimEnd()}`);
405
+ switch (result.status) {
406
+ case 'cancelled':
407
+ reporter.progressEnd(request.id, progress, 'cancelled');
408
+ reporter.showWarning(`Playwright run of ${target} was cancelled by a newer run`);
409
+ return;
410
+ case 'error':
411
+ reporter.progressEnd(request.id, progress, 'error');
412
+ reporter.showError(`Playwright could not run ${target}.\nCommand: ${result.command}\n${result.errorMessage ?? 'unknown error'}`);
413
+ return;
414
+ case 'passed':
415
+ reporter.progressEnd(request.id, progress, (0, runner_1.summarize)(result.counts, result.durationMs));
416
+ reporter.showInfo(`Playwright: ${(0, runner_1.summarize)(result.counts, result.durationMs)}`);
417
+ return;
418
+ case 'failed': {
419
+ reporter.progressEnd(request.id, progress, (0, runner_1.summarize)(result.counts, result.durationMs));
420
+ const first = result.failures[0];
421
+ reporter.showError(`Playwright: ${(0, runner_1.summarize)(result.counts, result.durationMs)}${first ? `\n${first.title}: ${first.fullMessage}` : ''}`);
422
+ const files = reporter.publishFailures(result.failures);
423
+ if (files.length > 0)
424
+ publishedFiles.set(ws.rootPath, new Set(files));
425
+ return;
426
+ }
427
+ default:
428
+ return;
429
+ }
430
+ }
431
+ /**
432
+ * Explains why a run cannot happen: the file is not a discovered test file of a supported config,
433
+ * the config's Playwright is below v1.38, or no Playwright exists for the file at all.
434
+ */
435
+ function notPlaywright(uri) {
436
+ const file = toPath(uri) ?? uri;
437
+ const ws = toPath(uri) ? workspaceForFile(file) : null;
438
+ const supported = ws ? (0, workspace_1.configForFile)(ws, file) : null;
439
+ if (supported) {
440
+ reporter.showWarning(`Playwright: ${path.basename(file)} is not a test file of ${path.basename(supported.configPath)}; run from a file that Playwright lists for that configuration.`);
441
+ return;
442
+ }
443
+ const unsupported = ws?.configs.find((c) => !c.supported && isWithin(c.configDir, file));
444
+ if (unsupported) {
445
+ reporter.showWarning(`Playwright ${(0, version_1.formatVersion)(unsupported.playwrightVersion)} found; v1.38 or newer is required. Test running is disabled.`);
446
+ return;
447
+ }
448
+ reporter.showWarning(`Playwright was not found in the workspace for ${path.basename(file)}; install @playwright/test (v1.38 or newer) and add a playwright.config file.`);
449
+ }
450
+ async function runAtCursor(uri, line0) {
451
+ const gated = gatedWorkspace(uri);
452
+ if (gated)
453
+ return refuseNotEnabled(gated);
454
+ const { ctx } = testFileContext(uri);
455
+ if (!ctx)
456
+ return notPlaywright(uri);
457
+ const location = (0, commands_1.resolveTestLocation)(ctx.config.tests, ctx.file, line0 + 1);
458
+ await startRun(ctx.ws, location, ctx.config, 'cursor');
459
+ }
460
+ async function runFile(uri) {
461
+ const gated = gatedWorkspace(uri);
462
+ if (gated)
463
+ return refuseNotEnabled(gated);
464
+ const { ctx } = testFileContext(uri);
465
+ if (!ctx)
466
+ return notPlaywright(uri);
467
+ await startRun(ctx.ws, { kind: 'file', file: ctx.file, line: null }, ctx.config, 'file');
468
+ }
469
+ async function rerunLast(uri) {
470
+ const gated = uri ? gatedWorkspace(uri) : null;
471
+ if (gated)
472
+ return refuseNotEnabled(gated);
473
+ let ws = null;
474
+ const file = uri ? toPath(uri) : null;
475
+ if (file)
476
+ ws = workspaceForFile(file);
477
+ if (!ws?.lastRun) {
478
+ ws = null;
479
+ for (const candidate of workspaces.values()) {
480
+ if (candidate.lastRun && (!ws || candidate.lastRun.startedAt > ws.lastRun.startedAt))
481
+ ws = candidate;
482
+ }
483
+ }
484
+ if (!ws?.lastRun) {
485
+ reporter.showInfo('Nothing to re-run yet');
486
+ return;
487
+ }
488
+ const { location, config } = ws.lastRun;
489
+ await startRun(ws, location, config, 'rerun');
490
+ }
491
+ connection.onExecuteCommand(async (params) => {
492
+ const arg = (params.arguments?.[0] ?? {});
493
+ try {
494
+ switch (params.command) {
495
+ case commands_1.COMMAND_RUN_AT_CURSOR:
496
+ if (typeof arg.uri === 'string' && typeof arg.line === 'number')
497
+ await runAtCursor(arg.uri, arg.line);
498
+ else
499
+ reporter.showError('Playwright: run at cursor needs a document and a line');
500
+ break;
501
+ case commands_1.COMMAND_RUN_FILE:
502
+ if (typeof arg.uri === 'string')
503
+ await runFile(arg.uri);
504
+ else
505
+ reporter.showError('Playwright: run file needs a document');
506
+ break;
507
+ case commands_1.COMMAND_RERUN_LAST:
508
+ await rerunLast(arg.uri);
509
+ break;
510
+ case commands_1.COMMAND_ENABLE_DISCOVERY: {
511
+ const file = typeof arg.uri === 'string' ? toPath(arg.uri) : null;
512
+ const ws = file ? workspaceForFile(file) : null;
513
+ if (!ws)
514
+ reporter.showWarning(`Playwright was not found in the workspace for ${file ? path.basename(file) : 'this document'}`);
515
+ else
516
+ await enableDiscovery(ws);
517
+ break;
518
+ }
519
+ default:
520
+ break;
521
+ }
522
+ }
523
+ catch (error) {
524
+ reporter.showError(`Playwright command ${params.command} failed: ${error.message}`);
525
+ }
526
+ return null;
527
+ });
528
+ /** Debug request used by tests and troubleshooting: a snapshot of detected workspaces. */
529
+ connection.onRequest(STATUS_REQUEST, () => Array.from(workspaces.values()).map((ws) => ({
530
+ rootPath: ws.rootPath,
531
+ discovery: ws.discovery,
532
+ discoveryAsked: ws.discoveryAsked,
533
+ lastRun: ws.lastRun ? { id: ws.lastRun.id, location: ws.lastRun.location, trigger: ws.lastRun.trigger } : null,
534
+ configs: ws.configs.map((c) => ({
535
+ configPath: c.configPath,
536
+ playwrightVersion: (0, version_1.formatVersion)(c.playwrightVersion),
537
+ supported: c.supported,
538
+ rootDir: c.rootDir,
539
+ testDirs: c.testDirs,
540
+ discoveryState: c.discoveryState,
541
+ testCount: c.tests.length,
542
+ })),
543
+ })));
544
+ documents.listen(connection);
545
+ connection.listen();
546
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}