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/LICENSE +21 -0
- package/README.md +24 -2
- package/bin/playwright-zed-language-server.js +4 -0
- package/dist/commands.js +99 -0
- package/dist/commands.js.map +1 -0
- package/dist/discovery.js +96 -0
- package/dist/discovery.js.map +1 -0
- package/dist/reporting.js +95 -0
- package/dist/reporting.js.map +1 -0
- package/dist/runner.js +156 -0
- package/dist/runner.js.map +1 -0
- package/dist/server.js +424 -0
- package/dist/server.js.map +1 -0
- package/dist/spawn.js +140 -0
- package/dist/spawn.js.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/version.js +29 -0
- package/dist/version.js.map +1 -0
- package/dist/workspace.js +135 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +48 -4
|
@@ -0,0 +1,135 @@
|
|
|
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.findConfigs = findConfigs;
|
|
37
|
+
exports.resolvePlaywright = resolvePlaywright;
|
|
38
|
+
exports.buildConfig = buildConfig;
|
|
39
|
+
exports.configForFile = configForFile;
|
|
40
|
+
exports.isUnderTestDirs = isUnderTestDirs;
|
|
41
|
+
const fs = __importStar(require("node:fs"));
|
|
42
|
+
const path = __importStar(require("node:path"));
|
|
43
|
+
const version_1 = require("./version");
|
|
44
|
+
const CONFIG_NAME = /^playwright\.config\.(ts|js|mts|mjs|cts|cjs)$/;
|
|
45
|
+
const SKIPPED_DIRS = new Set(['node_modules', '.git', 'test-results', 'playwright-report', 'blob-report']);
|
|
46
|
+
/** Finds every Playwright config file under `root`, skipping dependency and output folders. */
|
|
47
|
+
function findConfigs(root) {
|
|
48
|
+
const found = [];
|
|
49
|
+
const stack = [root];
|
|
50
|
+
while (stack.length > 0) {
|
|
51
|
+
const dir = stack.pop();
|
|
52
|
+
let entries;
|
|
53
|
+
try {
|
|
54
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
for (const entry of entries) {
|
|
60
|
+
if (entry.isDirectory()) {
|
|
61
|
+
if (!SKIPPED_DIRS.has(entry.name) && !entry.name.startsWith('.')) {
|
|
62
|
+
stack.push(path.join(dir, entry.name));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (entry.isFile() && CONFIG_NAME.test(entry.name)) {
|
|
66
|
+
found.push(path.join(dir, entry.name));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return found.sort();
|
|
71
|
+
}
|
|
72
|
+
/** Walks upward from `configDir` to the nearest `node_modules/@playwright/test`. */
|
|
73
|
+
function resolvePlaywright(configDir) {
|
|
74
|
+
let dir = path.resolve(configDir);
|
|
75
|
+
for (;;) {
|
|
76
|
+
const packageDir = path.join(dir, 'node_modules', '@playwright', 'test');
|
|
77
|
+
const packageJson = path.join(packageDir, 'package.json');
|
|
78
|
+
if (fs.existsSync(packageJson)) {
|
|
79
|
+
try {
|
|
80
|
+
const parsed = JSON.parse(fs.readFileSync(packageJson, 'utf8'));
|
|
81
|
+
const version = (0, version_1.parseVersion)(parsed.version ?? '');
|
|
82
|
+
if (version) {
|
|
83
|
+
return { playwrightCli: path.join(packageDir, 'cli.js'), playwrightVersion: version, packageDir };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// fall through and keep walking: a broken package.json should not hide a parent install
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const parent = path.dirname(dir);
|
|
91
|
+
if (parent === dir)
|
|
92
|
+
return null;
|
|
93
|
+
dir = parent;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** Builds the config entity, or null when no `@playwright/test` package resolves for it. */
|
|
97
|
+
function buildConfig(configPath) {
|
|
98
|
+
const configDir = path.dirname(configPath);
|
|
99
|
+
const resolved = resolvePlaywright(configDir);
|
|
100
|
+
if (!resolved)
|
|
101
|
+
return null;
|
|
102
|
+
return {
|
|
103
|
+
configPath,
|
|
104
|
+
configDir,
|
|
105
|
+
playwrightCli: resolved.playwrightCli,
|
|
106
|
+
playwrightVersion: resolved.playwrightVersion,
|
|
107
|
+
supported: (0, version_1.isSupported)(resolved.playwrightVersion),
|
|
108
|
+
rootDir: null,
|
|
109
|
+
testDirs: [],
|
|
110
|
+
tests: [],
|
|
111
|
+
discoveryState: 'idle',
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function isWithin(parent, child) {
|
|
115
|
+
const rel = path.relative(parent, child);
|
|
116
|
+
return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel));
|
|
117
|
+
}
|
|
118
|
+
/** Nearest supported config: the one whose `configDir` is the longest prefix of `file`. */
|
|
119
|
+
function configForFile(workspace, file) {
|
|
120
|
+
let best = null;
|
|
121
|
+
for (const config of workspace.configs) {
|
|
122
|
+
if (!config.supported)
|
|
123
|
+
continue;
|
|
124
|
+
if (!isWithin(config.configDir, file))
|
|
125
|
+
continue;
|
|
126
|
+
if (!best || config.configDir.length > best.configDir.length)
|
|
127
|
+
best = config;
|
|
128
|
+
}
|
|
129
|
+
return best;
|
|
130
|
+
}
|
|
131
|
+
/** True when `file` lives under one of the config's discovered test directories. */
|
|
132
|
+
function isUnderTestDirs(config, file) {
|
|
133
|
+
return config.testDirs.some((dir) => isWithin(dir, file));
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,50 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "playwright-zed-language-server",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Language server for the Playwright for Zed extension: discovers and runs Playwright tests in your workspace (community project, not affiliated with Microsoft)",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"playwright",
|
|
7
|
+
"zed",
|
|
8
|
+
"language-server",
|
|
9
|
+
"lsp",
|
|
10
|
+
"testing"
|
|
11
|
+
],
|
|
12
|
+
"homepage": "https://github.com/radekBednarik/playwright-zed#readme",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/radekBednarik/playwright-zed",
|
|
17
|
+
"directory": "server"
|
|
18
|
+
},
|
|
19
|
+
"type": "commonjs",
|
|
20
|
+
"bin": {
|
|
21
|
+
"playwright-zed-language-server": "bin/playwright-zed-language-server.js"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"bin/",
|
|
25
|
+
"dist/"
|
|
26
|
+
],
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=20"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc -p tsconfig.json",
|
|
32
|
+
"lint": "tsc --noEmit -p tsconfig.json",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"test:unit": "vitest run test/unit",
|
|
35
|
+
"test:integration": "vitest run test/integration"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"vscode-languageserver": "^9.0.1",
|
|
39
|
+
"vscode-languageserver-textdocument": "^1.0.12"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/node": "^20.14.0",
|
|
43
|
+
"typescript": "^5.5.0",
|
|
44
|
+
"vitest": "^3.0.0",
|
|
45
|
+
"vscode-jsonrpc": "^8.2.1"
|
|
46
|
+
},
|
|
47
|
+
"allowScripts": {
|
|
48
|
+
"esbuild@0.28.2": true
|
|
49
|
+
}
|
|
50
|
+
}
|