playwright-zed-language-server 0.0.0-stage → 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/dist/server.js ADDED
@@ -0,0 +1,424 @@
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
+ for (const config of ws.configs) {
112
+ if (!config.supported) {
113
+ if (!ws.versionWarningShown) {
114
+ ws.versionWarningShown = true;
115
+ reporter.showWarning(`Playwright ${(0, version_1.formatVersion)(config.playwrightVersion)} found; v1.38 or newer is required. Test running is disabled.`);
116
+ }
117
+ continue;
118
+ }
119
+ await discoverConfig(config);
120
+ }
121
+ await reporter.refreshCodeLenses();
122
+ }
123
+ async function addWorkspace(folder) {
124
+ const rootPath = toPath(folder.uri);
125
+ if (!rootPath)
126
+ return;
127
+ const ws = { rootUri: folder.uri, rootPath, configs: [], lastRun: null, versionWarningShown: false };
128
+ workspaces.set(rootPath, ws);
129
+ await discoverWorkspace(ws);
130
+ }
131
+ function removeWorkspace(folder) {
132
+ const rootPath = toPath(folder.uri);
133
+ if (!rootPath)
134
+ return;
135
+ runManagers.get(rootPath)?.cancelActive();
136
+ workspaces.delete(rootPath);
137
+ runManagers.delete(rootPath);
138
+ publishedFiles.delete(rootPath);
139
+ }
140
+ connection.onInitialize((params) => {
141
+ const folders = params.workspaceFolders ?? (params.rootUri ? [{ uri: params.rootUri, name: 'root' }] : []);
142
+ pendingFolders.push(...folders);
143
+ return {
144
+ capabilities: {
145
+ textDocumentSync: { openClose: true, change: node_1.TextDocumentSyncKind.Incremental, save: { includeText: false } },
146
+ codeActionProvider: { codeActionKinds: [CODE_ACTION_KIND] },
147
+ codeLensProvider: { resolveProvider: false },
148
+ executeCommandProvider: { commands: commands_1.ALL_COMMANDS },
149
+ workspace: { workspaceFolders: { supported: true, changeNotifications: true } },
150
+ },
151
+ };
152
+ });
153
+ connection.onInitialized(() => {
154
+ void (async () => {
155
+ for (const folder of pendingFolders.splice(0))
156
+ await addWorkspace(folder);
157
+ })();
158
+ try {
159
+ connection.workspace.onDidChangeWorkspaceFolders((event) => {
160
+ for (const folder of event.removed)
161
+ removeWorkspace(folder);
162
+ void (async () => {
163
+ for (const folder of event.added)
164
+ await addWorkspace(folder);
165
+ })();
166
+ });
167
+ }
168
+ catch {
169
+ // client does not support workspace folder notifications
170
+ }
171
+ });
172
+ // ---------------------------------------------------------------------------
173
+ // Document tracking: dirty flag and diagnostics clearing on edit
174
+ // ---------------------------------------------------------------------------
175
+ documents.onDidOpen((event) => {
176
+ savedVersion.set(event.document.uri, event.document.version);
177
+ dirtyUris.delete(event.document.uri);
178
+ });
179
+ documents.onDidChangeContent((event) => {
180
+ const uri = event.document.uri;
181
+ const saved = savedVersion.get(uri);
182
+ if (saved === undefined || event.document.version === saved)
183
+ return;
184
+ dirtyUris.add(uri);
185
+ const file = toPath(uri);
186
+ if (!file)
187
+ return;
188
+ for (const [root, files] of publishedFiles) {
189
+ if (files.delete(file)) {
190
+ reporter.clearDiagnosticsForUri(uri);
191
+ if (files.size === 0)
192
+ publishedFiles.delete(root);
193
+ }
194
+ }
195
+ });
196
+ documents.onDidSave((event) => {
197
+ const uri = event.document.uri;
198
+ savedVersion.set(uri, event.document.version);
199
+ dirtyUris.delete(uri);
200
+ const file = toPath(uri);
201
+ if (!file)
202
+ return;
203
+ const ws = workspaceForFile(file);
204
+ if (!ws)
205
+ return;
206
+ void (async () => {
207
+ let changed = false;
208
+ for (const config of ws.configs) {
209
+ if (!config.supported)
210
+ continue;
211
+ if (file === config.configPath || (0, workspace_1.isUnderTestDirs)(config, file)) {
212
+ await discoverConfig(config);
213
+ changed = true;
214
+ }
215
+ }
216
+ if (changed)
217
+ await reporter.refreshCodeLenses();
218
+ })();
219
+ });
220
+ documents.onDidClose((event) => {
221
+ savedVersion.delete(event.document.uri);
222
+ dirtyUris.delete(event.document.uri);
223
+ });
224
+ function testFileContext(uri) {
225
+ const file = toPath(uri);
226
+ if (!file)
227
+ return { ws: null, ctx: null };
228
+ const ws = workspaceForFile(file);
229
+ if (!ws)
230
+ return { ws: null, ctx: null };
231
+ const config = (0, workspace_1.configForFile)(ws, file);
232
+ if (!config || !config.tests.some((t) => t.file === file))
233
+ return { ws, ctx: null };
234
+ return { ws, ctx: { ws, config, file } };
235
+ }
236
+ function action(title, command, args) {
237
+ return { title, kind: CODE_ACTION_KIND, command: { title, command, arguments: args } };
238
+ }
239
+ connection.onCodeAction((params) => {
240
+ const uri = params.textDocument.uri;
241
+ const { ws, ctx } = testFileContext(uri);
242
+ const actions = [];
243
+ if (ctx) {
244
+ const line0 = params.range.start.line;
245
+ const location = (0, commands_1.resolveTestLocation)(ctx.config.tests, ctx.file, line0 + 1);
246
+ if (location.kind === 'test')
247
+ actions.push(action('Playwright: Run test at cursor', commands_1.COMMAND_RUN_AT_CURSOR, [{ uri, line: line0 }]));
248
+ else if (location.kind === 'describe')
249
+ actions.push(action('Playwright: Run describe at cursor', commands_1.COMMAND_RUN_AT_CURSOR, [{ uri, line: line0 }]));
250
+ actions.push(action('Playwright: Run file', commands_1.COMMAND_RUN_FILE, [{ uri }]));
251
+ }
252
+ if (ws?.lastRun)
253
+ actions.push(action('Playwright: Re-run last', commands_1.COMMAND_RERUN_LAST, [{ uri }]));
254
+ return actions;
255
+ });
256
+ connection.onCodeLens((params) => {
257
+ const uri = params.textDocument.uri;
258
+ const { ctx } = testFileContext(uri);
259
+ if (!ctx)
260
+ return [];
261
+ const lenses = [];
262
+ const testLines = new Set();
263
+ const describeLines = new Set();
264
+ for (const test of ctx.config.tests) {
265
+ if (test.file !== ctx.file)
266
+ continue;
267
+ testLines.add(test.line);
268
+ for (const d of test.describeLines)
269
+ describeLines.add(d);
270
+ }
271
+ const lens = (line, title) => ({
272
+ range: { start: { line: line - 1, character: 0 }, end: { line: line - 1, character: 0 } },
273
+ command: { title, command: commands_1.COMMAND_RUN_AT_CURSOR, arguments: [{ uri, line: line - 1 }] },
274
+ });
275
+ for (const line of describeLines)
276
+ lenses.push(lens(line, '▶ Run describe'));
277
+ for (const line of testLines)
278
+ lenses.push(lens(line, '▶ Run test'));
279
+ lenses.sort((a, b) => a.range.start.line - b.range.start.line);
280
+ return lenses;
281
+ });
282
+ // ---------------------------------------------------------------------------
283
+ // Commands
284
+ // ---------------------------------------------------------------------------
285
+ async function startRun(ws, location, config, trigger) {
286
+ const manager = managerFor(ws);
287
+ const uri = (0, node_url_1.pathToFileURL)(location.file).toString();
288
+ const dirty = dirtyUris.has(uri);
289
+ const request = { id: manager.nextId(), location, config, trigger, startedAt: new Date().toISOString(), dirty };
290
+ ws.lastRun = request;
291
+ const displayFile = path.relative(config.configDir, location.file);
292
+ if (dirty)
293
+ reporter.showWarning(`${displayFile} has unsaved changes; running the saved version`);
294
+ const previouslyPublished = publishedFiles.get(ws.rootPath) ?? new Set();
295
+ reporter.clearDiagnostics(new Set([location.file, ...previouslyPublished]));
296
+ publishedFiles.delete(ws.rootPath);
297
+ const count = (0, commands_1.countSelectedTests)(config.tests, location);
298
+ const progress = await reporter.progressBegin(request.id, count, displayFile);
299
+ const target = location.line === null ? displayFile : `${displayFile}:${location.line}`;
300
+ reporter.log(`playwright: run ${request.id} (${trigger}, ${location.kind}) ${target}`);
301
+ const result = await manager.start(request);
302
+ reporter.log(`playwright: run ${request.id} command: ${result.command}\nplaywright: run ${request.id} cwd: ${config.configDir}\n${result.rawOutput.trimEnd()}`);
303
+ switch (result.status) {
304
+ case 'cancelled':
305
+ reporter.progressEnd(request.id, progress, 'cancelled');
306
+ reporter.showWarning(`Playwright run of ${target} was cancelled by a newer run`);
307
+ return;
308
+ case 'error':
309
+ reporter.progressEnd(request.id, progress, 'error');
310
+ reporter.showError(`Playwright could not run ${target}.\nCommand: ${result.command}\n${result.errorMessage ?? 'unknown error'}`);
311
+ return;
312
+ case 'passed':
313
+ reporter.progressEnd(request.id, progress, (0, runner_1.summarize)(result.counts, result.durationMs));
314
+ reporter.showInfo(`Playwright: ${(0, runner_1.summarize)(result.counts, result.durationMs)}`);
315
+ return;
316
+ case 'failed': {
317
+ reporter.progressEnd(request.id, progress, (0, runner_1.summarize)(result.counts, result.durationMs));
318
+ const first = result.failures[0];
319
+ reporter.showError(`Playwright: ${(0, runner_1.summarize)(result.counts, result.durationMs)}${first ? `\n${first.title}: ${first.fullMessage}` : ''}`);
320
+ const files = reporter.publishFailures(result.failures);
321
+ if (files.length > 0)
322
+ publishedFiles.set(ws.rootPath, new Set(files));
323
+ return;
324
+ }
325
+ default:
326
+ return;
327
+ }
328
+ }
329
+ /**
330
+ * Explains why a run cannot happen: the file is not a discovered test file of a supported config,
331
+ * the config's Playwright is below v1.38, or no Playwright exists for the file at all.
332
+ */
333
+ function notPlaywright(uri) {
334
+ const file = toPath(uri) ?? uri;
335
+ const ws = toPath(uri) ? workspaceForFile(file) : null;
336
+ const supported = ws ? (0, workspace_1.configForFile)(ws, file) : null;
337
+ if (supported) {
338
+ 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.`);
339
+ return;
340
+ }
341
+ const unsupported = ws?.configs.find((c) => !c.supported && isWithin(c.configDir, file));
342
+ if (unsupported) {
343
+ reporter.showWarning(`Playwright ${(0, version_1.formatVersion)(unsupported.playwrightVersion)} found; v1.38 or newer is required. Test running is disabled.`);
344
+ return;
345
+ }
346
+ 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.`);
347
+ }
348
+ async function runAtCursor(uri, line0) {
349
+ const { ctx } = testFileContext(uri);
350
+ if (!ctx)
351
+ return notPlaywright(uri);
352
+ const location = (0, commands_1.resolveTestLocation)(ctx.config.tests, ctx.file, line0 + 1);
353
+ await startRun(ctx.ws, location, ctx.config, 'cursor');
354
+ }
355
+ async function runFile(uri) {
356
+ const { ctx } = testFileContext(uri);
357
+ if (!ctx)
358
+ return notPlaywright(uri);
359
+ await startRun(ctx.ws, { kind: 'file', file: ctx.file, line: null }, ctx.config, 'file');
360
+ }
361
+ async function rerunLast(uri) {
362
+ let ws = null;
363
+ const file = uri ? toPath(uri) : null;
364
+ if (file)
365
+ ws = workspaceForFile(file);
366
+ if (!ws?.lastRun) {
367
+ ws = null;
368
+ for (const candidate of workspaces.values()) {
369
+ if (candidate.lastRun && (!ws || candidate.lastRun.startedAt > ws.lastRun.startedAt))
370
+ ws = candidate;
371
+ }
372
+ }
373
+ if (!ws?.lastRun) {
374
+ reporter.showInfo('Nothing to re-run yet');
375
+ return;
376
+ }
377
+ const { location, config } = ws.lastRun;
378
+ await startRun(ws, location, config, 'rerun');
379
+ }
380
+ connection.onExecuteCommand(async (params) => {
381
+ const arg = (params.arguments?.[0] ?? {});
382
+ try {
383
+ switch (params.command) {
384
+ case commands_1.COMMAND_RUN_AT_CURSOR:
385
+ if (typeof arg.uri === 'string' && typeof arg.line === 'number')
386
+ await runAtCursor(arg.uri, arg.line);
387
+ else
388
+ reporter.showError('Playwright: run at cursor needs a document and a line');
389
+ break;
390
+ case commands_1.COMMAND_RUN_FILE:
391
+ if (typeof arg.uri === 'string')
392
+ await runFile(arg.uri);
393
+ else
394
+ reporter.showError('Playwright: run file needs a document');
395
+ break;
396
+ case commands_1.COMMAND_RERUN_LAST:
397
+ await rerunLast(arg.uri);
398
+ break;
399
+ default:
400
+ break;
401
+ }
402
+ }
403
+ catch (error) {
404
+ reporter.showError(`Playwright command ${params.command} failed: ${error.message}`);
405
+ }
406
+ return null;
407
+ });
408
+ /** Debug request used by tests and troubleshooting: a snapshot of detected workspaces. */
409
+ connection.onRequest(STATUS_REQUEST, () => Array.from(workspaces.values()).map((ws) => ({
410
+ rootPath: ws.rootPath,
411
+ lastRun: ws.lastRun ? { id: ws.lastRun.id, location: ws.lastRun.location, trigger: ws.lastRun.trigger } : null,
412
+ configs: ws.configs.map((c) => ({
413
+ configPath: c.configPath,
414
+ playwrightVersion: (0, version_1.formatVersion)(c.playwrightVersion),
415
+ supported: c.supported,
416
+ rootDir: c.rootDir,
417
+ testDirs: c.testDirs,
418
+ discoveryState: c.discoveryState,
419
+ testCount: c.tests.length,
420
+ })),
421
+ })));
422
+ documents.listen(connection);
423
+ connection.listen();
424
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/spawn.js ADDED
@@ -0,0 +1,140 @@
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
+ exports.KILL_GRACE_MS = void 0;
37
+ exports.reportFilePath = reportFilePath;
38
+ exports.runPlaywright = runPlaywright;
39
+ const node_child_process_1 = require("node:child_process");
40
+ const fs = __importStar(require("node:fs"));
41
+ const os = __importStar(require("node:os"));
42
+ const path = __importStar(require("node:path"));
43
+ exports.KILL_GRACE_MS = 5000;
44
+ /**
45
+ * Allocates the JSON report path inside a fresh, owner-only temp directory so another user on
46
+ * a shared machine cannot pre-plant a symlink or a crafted report at a predictable path.
47
+ * The whole directory is removed after the run by `runPlaywright`.
48
+ */
49
+ function reportFilePath(prefix, id) {
50
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'playwright-zed-'));
51
+ fs.chmodSync(dir, 0o700);
52
+ return path.join(dir, `${prefix}-${id}.json`);
53
+ }
54
+ function readReport(file) {
55
+ try {
56
+ const stat = fs.lstatSync(file);
57
+ if (!stat.isFile())
58
+ return null;
59
+ return JSON.parse(fs.readFileSync(file, 'utf8'));
60
+ }
61
+ catch {
62
+ return null;
63
+ }
64
+ }
65
+ function removeReportDir(file) {
66
+ try {
67
+ fs.rmSync(path.dirname(file), { recursive: true, force: true });
68
+ }
69
+ catch {
70
+ // best effort
71
+ }
72
+ }
73
+ function quote(arg) {
74
+ return /[\s"']/.test(arg) ? JSON.stringify(arg) : arg;
75
+ }
76
+ /** Runs the Playwright CLI as a child process with cancellation and JSON report capture. */
77
+ function runPlaywright(options) {
78
+ const node = options.node ?? process.execPath;
79
+ const argv = [options.cli, ...options.args];
80
+ const command = [node, ...argv].map(quote).join(' ');
81
+ const env = { ...process.env, ...(options.env ?? {}), PLAYWRIGHT_JSON_OUTPUT_FILE: options.reportFile };
82
+ let cancelled = false;
83
+ let killTimer = null;
84
+ const child = (0, node_child_process_1.spawn)(node, argv, {
85
+ cwd: options.cwd,
86
+ env,
87
+ stdio: ['ignore', 'pipe', 'pipe'],
88
+ detached: process.platform !== 'win32',
89
+ });
90
+ const stdout = [];
91
+ const stderr = [];
92
+ child.stdout?.on('data', (chunk) => stdout.push(chunk));
93
+ child.stderr?.on('data', (chunk) => stderr.push(chunk));
94
+ const signalGroup = (signal) => {
95
+ if (child.pid === undefined)
96
+ return;
97
+ try {
98
+ if (process.platform !== 'win32')
99
+ process.kill(-child.pid, signal);
100
+ else
101
+ child.kill(signal);
102
+ }
103
+ catch {
104
+ // already gone
105
+ }
106
+ };
107
+ const promise = new Promise((resolve) => {
108
+ let spawnError;
109
+ child.on('error', (error) => {
110
+ spawnError = error.message;
111
+ });
112
+ child.on('close', (code, signal) => {
113
+ if (killTimer)
114
+ clearTimeout(killTimer);
115
+ const report = readReport(options.reportFile);
116
+ removeReportDir(options.reportFile);
117
+ resolve({
118
+ code,
119
+ signal,
120
+ stdout: Buffer.concat(stdout).toString('utf8'),
121
+ stderr: Buffer.concat(stderr).toString('utf8'),
122
+ report,
123
+ cancelled,
124
+ command,
125
+ spawnError,
126
+ });
127
+ });
128
+ });
129
+ return {
130
+ promise,
131
+ cancel() {
132
+ if (cancelled)
133
+ return;
134
+ cancelled = true;
135
+ signalGroup('SIGTERM');
136
+ killTimer = setTimeout(() => signalGroup('SIGKILL'), exports.KILL_GRACE_MS);
137
+ },
138
+ };
139
+ }
140
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../src/spawn.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ /** Shared data model for the Playwright language server (see specs/.../data-model.md). */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,0FAA0F"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MINIMUM_SUPPORTED = void 0;
4
+ exports.parseVersion = parseVersion;
5
+ exports.compareVersions = compareVersions;
6
+ exports.isSupported = isSupported;
7
+ exports.formatVersion = formatVersion;
8
+ exports.MINIMUM_SUPPORTED = { major: 1, minor: 38, patch: 0 };
9
+ /** Parses `major.minor.patch`, ignoring prerelease and build metadata. */
10
+ function parseVersion(input) {
11
+ const match = /^\s*v?(\d+)\.(\d+)\.(\d+)/.exec(input);
12
+ if (!match)
13
+ return null;
14
+ return { major: Number(match[1]), minor: Number(match[2]), patch: Number(match[3]) };
15
+ }
16
+ function compareVersions(a, b) {
17
+ if (a.major !== b.major)
18
+ return a.major - b.major;
19
+ if (a.minor !== b.minor)
20
+ return a.minor - b.minor;
21
+ return a.patch - b.patch;
22
+ }
23
+ function isSupported(version) {
24
+ return compareVersions(version, exports.MINIMUM_SUPPORTED) >= 0;
25
+ }
26
+ function formatVersion(version) {
27
+ return `${version.major}.${version.minor}.${version.patch}`;
28
+ }
29
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAKA,oCAIC;AAED,0CAIC;AAED,kCAEC;AAED,sCAEC;AArBY,QAAA,iBAAiB,GAAY,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAE5E,0EAA0E;AAC1E,SAAgB,YAAY,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,SAAgB,eAAe,CAAC,CAAU,EAAE,CAAU;IACpD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IAClD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IAClD,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AAC3B,CAAC;AAED,SAAgB,WAAW,CAAC,OAAgB;IAC1C,OAAO,eAAe,CAAC,OAAO,EAAE,yBAAiB,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,aAAa,CAAC,OAAgB;IAC5C,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;AAC9D,CAAC"}