@vue/typescript-plugin 2.0.10 → 2.0.12
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/index.js +1 -1
- package/lib/client.js +1 -1
- package/lib/server.d.ts +1 -1
- package/lib/server.js +7 -2
- package/lib/utils.d.ts +10 -1
- package/lib/utils.js +40 -5
- package/package.json +4 -4
package/index.js
CHANGED
|
@@ -42,7 +42,7 @@ function createLanguageServicePlugin() {
|
|
|
42
42
|
server_1.projects.set(info.project, { info, language, vueOptions });
|
|
43
43
|
(0, decorateLanguageService_1.decorateLanguageService)(language, info.languageService);
|
|
44
44
|
(0, common_1.decorateLanguageServiceForVue)(language, info.languageService, vueOptions, ts, true);
|
|
45
|
-
(0, decorateLanguageServiceHost_1.decorateLanguageServiceHost)(ts, language, info.languageServiceHost
|
|
45
|
+
(0, decorateLanguageServiceHost_1.decorateLanguageServiceHost)(ts, language, info.languageServiceHost);
|
|
46
46
|
(0, server_1.startNamedPipeServer)(ts, info.project.projectKind, info.project.getCurrentDirectory());
|
|
47
47
|
}
|
|
48
48
|
return info.languageService;
|
package/lib/client.js
CHANGED
|
@@ -67,7 +67,7 @@ function getElementAttrs(...args) {
|
|
|
67
67
|
}
|
|
68
68
|
exports.getElementAttrs = getElementAttrs;
|
|
69
69
|
async function sendRequest(request) {
|
|
70
|
-
const server = await (0, utils_1.searchNamedPipeServerForFile)(request.args[0]);
|
|
70
|
+
const server = (await (0, utils_1.searchNamedPipeServerForFile)(request.args[0]))?.server;
|
|
71
71
|
if (!server) {
|
|
72
72
|
console.warn('[Vue Named Pipe Client] No server found for', request.args[0]);
|
|
73
73
|
return;
|
package/lib/server.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type * as ts from 'typescript';
|
|
2
2
|
import type { Language, VueCompilerOptions } from '@vue/language-core';
|
|
3
3
|
export interface Request {
|
|
4
|
-
type: '
|
|
4
|
+
type: 'projectInfoForFile' | 'collectExtractProps' | 'getImportPathForFile' | 'getPropertiesAtLocation' | 'getQuickInfoAtPosition' | 'getComponentProps' | 'getComponentEvents' | 'getTemplateContextProps' | 'getComponentNames' | 'getElementAttrs';
|
|
5
5
|
args: [fileName: string, ...rest: any];
|
|
6
6
|
}
|
|
7
7
|
export declare function startNamedPipeServer(ts: typeof import('typescript'), serverKind: ts.server.ProjectKind, currentDirectory: string): void;
|
package/lib/server.js
CHANGED
|
@@ -24,8 +24,13 @@ function startNamedPipeServer(ts, serverKind, currentDirectory) {
|
|
|
24
24
|
const request = JSON.parse(text);
|
|
25
25
|
const fileName = request.args[0];
|
|
26
26
|
const project = getProject(fileName);
|
|
27
|
-
if (request.type === '
|
|
28
|
-
connection.write(JSON.stringify(
|
|
27
|
+
if (request.type === 'projectInfoForFile') {
|
|
28
|
+
connection.write(JSON.stringify(project
|
|
29
|
+
? {
|
|
30
|
+
name: project.info.project.getProjectName(),
|
|
31
|
+
kind: project.info.project.projectKind,
|
|
32
|
+
}
|
|
33
|
+
: null));
|
|
29
34
|
}
|
|
30
35
|
else if (project) {
|
|
31
36
|
const requestContext = {
|
package/lib/utils.d.ts
CHANGED
|
@@ -10,5 +10,14 @@ export interface NamedPipeServer {
|
|
|
10
10
|
export declare function readPipeTable(): NamedPipeServer[];
|
|
11
11
|
export declare function updatePipeTable(servers: NamedPipeServer[]): void;
|
|
12
12
|
export declare function connect(path: string): Promise<net.Socket | undefined>;
|
|
13
|
-
export declare function searchNamedPipeServerForFile(fileName: string): Promise<
|
|
13
|
+
export declare function searchNamedPipeServerForFile(fileName: string): Promise<{
|
|
14
|
+
server: NamedPipeServer;
|
|
15
|
+
projectInfo: {
|
|
16
|
+
name: string;
|
|
17
|
+
kind: ts.server.ProjectKind;
|
|
18
|
+
};
|
|
19
|
+
} | {
|
|
20
|
+
server: NamedPipeServer;
|
|
21
|
+
projectInfo: undefined;
|
|
22
|
+
} | undefined>;
|
|
14
23
|
export declare function sendRequestWorker<T>(request: Request, client: net.Socket): Promise<T | null | undefined>;
|
package/lib/utils.js
CHANGED
|
@@ -33,12 +33,16 @@ exports.updatePipeTable = updatePipeTable;
|
|
|
33
33
|
function connect(path) {
|
|
34
34
|
return new Promise(resolve => {
|
|
35
35
|
const client = net.connect(path);
|
|
36
|
+
client.setTimeout(1000);
|
|
36
37
|
client.on('connect', () => {
|
|
37
38
|
resolve(client);
|
|
38
39
|
});
|
|
39
40
|
client.on('error', () => {
|
|
40
41
|
return resolve(undefined);
|
|
41
42
|
});
|
|
43
|
+
client.on('timeout', () => {
|
|
44
|
+
return resolve(undefined);
|
|
45
|
+
});
|
|
42
46
|
});
|
|
43
47
|
}
|
|
44
48
|
exports.connect = connect;
|
|
@@ -49,12 +53,15 @@ async function searchNamedPipeServerForFile(fileName) {
|
|
|
49
53
|
const inferredServers = servers
|
|
50
54
|
.filter(item => item.serverKind === 0)
|
|
51
55
|
.sort((a, b) => b.currentDirectory.length - a.currentDirectory.length);
|
|
52
|
-
for (const server of configuredServers) {
|
|
56
|
+
for (const server of configuredServers.sort((a, b) => sortTSConfigs(fileName, a.currentDirectory, b.currentDirectory))) {
|
|
53
57
|
const client = await connect(server.path);
|
|
54
58
|
if (client) {
|
|
55
|
-
const
|
|
56
|
-
if (
|
|
57
|
-
return
|
|
59
|
+
const projectInfo = await sendRequestWorker({ type: 'projectInfoForFile', args: [fileName] }, client);
|
|
60
|
+
if (projectInfo) {
|
|
61
|
+
return {
|
|
62
|
+
server,
|
|
63
|
+
projectInfo,
|
|
64
|
+
};
|
|
58
65
|
}
|
|
59
66
|
}
|
|
60
67
|
}
|
|
@@ -62,15 +69,35 @@ async function searchNamedPipeServerForFile(fileName) {
|
|
|
62
69
|
if (!path.relative(server.currentDirectory, fileName).startsWith('..')) {
|
|
63
70
|
const client = await connect(server.path);
|
|
64
71
|
if (client) {
|
|
65
|
-
return
|
|
72
|
+
return {
|
|
73
|
+
server,
|
|
74
|
+
projectInfo: undefined,
|
|
75
|
+
};
|
|
66
76
|
}
|
|
67
77
|
}
|
|
68
78
|
}
|
|
69
79
|
}
|
|
70
80
|
exports.searchNamedPipeServerForFile = searchNamedPipeServerForFile;
|
|
81
|
+
function sortTSConfigs(file, a, b) {
|
|
82
|
+
const inA = isFileInDir(file, path.dirname(a));
|
|
83
|
+
const inB = isFileInDir(file, path.dirname(b));
|
|
84
|
+
if (inA !== inB) {
|
|
85
|
+
const aWeight = inA ? 1 : 0;
|
|
86
|
+
const bWeight = inB ? 1 : 0;
|
|
87
|
+
return bWeight - aWeight;
|
|
88
|
+
}
|
|
89
|
+
const aLength = a.split('/').length;
|
|
90
|
+
const bLength = b.split('/').length;
|
|
91
|
+
return bLength - aLength;
|
|
92
|
+
}
|
|
93
|
+
function isFileInDir(fileName, dir) {
|
|
94
|
+
const relative = path.relative(dir, fileName);
|
|
95
|
+
return !!relative && !relative.startsWith('..') && !path.isAbsolute(relative);
|
|
96
|
+
}
|
|
71
97
|
function sendRequestWorker(request, client) {
|
|
72
98
|
return new Promise(resolve => {
|
|
73
99
|
let dataChunks = [];
|
|
100
|
+
client.setTimeout(5000);
|
|
74
101
|
client.on('data', chunk => {
|
|
75
102
|
dataChunks.push(chunk);
|
|
76
103
|
});
|
|
@@ -93,6 +120,14 @@ function sendRequestWorker(request, client) {
|
|
|
93
120
|
}
|
|
94
121
|
resolve(json);
|
|
95
122
|
});
|
|
123
|
+
client.on('error', err => {
|
|
124
|
+
console.error('[Vue Named Pipe Client] Error:', err.message);
|
|
125
|
+
resolve(undefined);
|
|
126
|
+
});
|
|
127
|
+
client.on('timeout', () => {
|
|
128
|
+
console.error('[Vue Named Pipe Client] Timeout');
|
|
129
|
+
resolve(undefined);
|
|
130
|
+
});
|
|
96
131
|
client.write(JSON.stringify(request));
|
|
97
132
|
});
|
|
98
133
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vue/typescript-plugin",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.12",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
"directory": "packages/typescript-plugin"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@volar/typescript": "
|
|
16
|
-
"@vue/language-core": "2.0.
|
|
15
|
+
"@volar/typescript": "2.2.0-alpha.7",
|
|
16
|
+
"@vue/language-core": "2.0.12",
|
|
17
17
|
"@vue/shared": "^3.4.0"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@types/node": "latest"
|
|
21
21
|
},
|
|
22
|
-
"gitHead": "
|
|
22
|
+
"gitHead": "c1c4e1a2a6c32da59351641bd41bf7f5db0cac69"
|
|
23
23
|
}
|