@vue/typescript-plugin 3.1.0 → 3.1.2
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 +34 -47
- package/lib/requests/isRefAtPosition.js +4 -1
- package/package.json +3 -3
package/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const createLanguageServicePlugin_1 = require("@volar/typescript/lib/quickstart/createLanguageServicePlugin");
|
|
3
|
-
const
|
|
3
|
+
const core = require("@vue/language-core");
|
|
4
4
|
const common_1 = require("./lib/common");
|
|
5
5
|
const collectExtractProps_1 = require("./lib/requests/collectExtractProps");
|
|
6
6
|
const getComponentDirectives_1 = require("./lib/requests/getComponentDirectives");
|
|
@@ -12,34 +12,25 @@ const getElementAttrs_1 = require("./lib/requests/getElementAttrs");
|
|
|
12
12
|
const getElementNames_1 = require("./lib/requests/getElementNames");
|
|
13
13
|
const getImportPathForFile_1 = require("./lib/requests/getImportPathForFile");
|
|
14
14
|
const isRefAtPosition_1 = require("./lib/requests/isRefAtPosition");
|
|
15
|
-
const windowsPathReg = /\\/g;
|
|
16
|
-
const project2Service = new WeakMap();
|
|
17
15
|
module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)((ts, info) => {
|
|
18
16
|
const vueOptions = getVueCompilerOptions();
|
|
19
|
-
const languagePlugin =
|
|
20
|
-
|
|
17
|
+
const languagePlugin = core.createVueLanguagePlugin(ts, info.languageServiceHost.getCompilationSettings(), vueOptions, id => id);
|
|
18
|
+
vueOptions.globalTypesPath = core.createGlobalTypesWriter(vueOptions, ts.sys.writeFile);
|
|
21
19
|
addVueCommands();
|
|
22
20
|
return {
|
|
23
21
|
languagePlugins: [languagePlugin],
|
|
24
22
|
setup: language => {
|
|
25
|
-
project2Service.set(info.project, [language, info.languageServiceHost, info.languageService]);
|
|
26
23
|
info.languageService = (0, common_1.createVueLanguageServiceProxy)(ts, language, info.languageService, vueOptions, fileName => fileName);
|
|
27
|
-
|
|
28
|
-
const timer = setInterval(() => {
|
|
29
|
-
if (info.project['program']) {
|
|
30
|
-
clearInterval(timer);
|
|
31
|
-
info.project['program'].__vue__ = { language };
|
|
32
|
-
}
|
|
33
|
-
}, 50);
|
|
24
|
+
info.project.__vue__ = { language };
|
|
34
25
|
},
|
|
35
26
|
};
|
|
36
27
|
function getVueCompilerOptions() {
|
|
37
28
|
if (info.project.projectKind === ts.server.ProjectKind.Configured) {
|
|
38
29
|
const tsconfig = info.project.getProjectName();
|
|
39
|
-
return
|
|
30
|
+
return core.createParsedCommandLine(ts, ts.sys, tsconfig.replace(/\\/g, '/')).vueOptions;
|
|
40
31
|
}
|
|
41
32
|
else {
|
|
42
|
-
return
|
|
33
|
+
return core.createParsedCommandLineByJson(ts, ts.sys, info.languageServiceHost.getCurrentDirectory(), {})
|
|
43
34
|
.vueOptions;
|
|
44
35
|
}
|
|
45
36
|
}
|
|
@@ -76,53 +67,53 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
|
|
|
76
67
|
});
|
|
77
68
|
session.addProtocolHandler('_vue:collectExtractProps', request => {
|
|
78
69
|
const [fileName, templateCodeRange] = request.arguments;
|
|
79
|
-
const {
|
|
80
|
-
return createResponse((0, collectExtractProps_1.collectExtractProps)(ts, language,
|
|
70
|
+
const { project, language, sourceScript, virtualCode } = getProjectAndVirtualCode(fileName);
|
|
71
|
+
return createResponse((0, collectExtractProps_1.collectExtractProps)(ts, language, project.getLanguageService().getProgram(), sourceScript, virtualCode, templateCodeRange, sourceScript.generated ? sourceScript.snapshot.getLength() : 0));
|
|
81
72
|
});
|
|
82
73
|
session.addProtocolHandler('_vue:getImportPathForFile', request => {
|
|
83
74
|
const [fileName, incomingFileName, preferences] = request.arguments;
|
|
84
|
-
const {
|
|
85
|
-
return createResponse((0, getImportPathForFile_1.getImportPathForFile)(ts,
|
|
75
|
+
const { project } = getProject(fileName);
|
|
76
|
+
return createResponse((0, getImportPathForFile_1.getImportPathForFile)(ts, project, project.getLanguageService().getProgram(), fileName, incomingFileName, preferences));
|
|
86
77
|
});
|
|
87
78
|
session.addProtocolHandler('_vue:isRefAtPosition', request => {
|
|
88
79
|
const [fileName, position] = request.arguments;
|
|
89
|
-
const {
|
|
90
|
-
return createResponse((0, isRefAtPosition_1.isRefAtPosition)(ts, language,
|
|
80
|
+
const { project, language, sourceScript, virtualCode } = getProjectAndVirtualCode(fileName);
|
|
81
|
+
return createResponse((0, isRefAtPosition_1.isRefAtPosition)(ts, language, project.getLanguageService().getProgram(), sourceScript, virtualCode, position, sourceScript.generated ? sourceScript.snapshot.getLength() : 0));
|
|
91
82
|
});
|
|
92
83
|
session.addProtocolHandler('_vue:getComponentDirectives', request => {
|
|
93
84
|
const [fileName] = request.arguments;
|
|
94
|
-
const {
|
|
95
|
-
return createResponse((0, getComponentDirectives_1.getComponentDirectives)(ts,
|
|
85
|
+
const { project } = getProject(fileName);
|
|
86
|
+
return createResponse((0, getComponentDirectives_1.getComponentDirectives)(ts, project.getLanguageService().getProgram(), fileName));
|
|
96
87
|
});
|
|
97
88
|
session.addProtocolHandler('_vue:getComponentEvents', request => {
|
|
98
89
|
const [fileName, tag] = request.arguments;
|
|
99
|
-
const {
|
|
100
|
-
return createResponse((0, getComponentEvents_1.getComponentEvents)(ts,
|
|
90
|
+
const { project } = getProject(fileName);
|
|
91
|
+
return createResponse((0, getComponentEvents_1.getComponentEvents)(ts, project.getLanguageService().getProgram(), fileName, tag));
|
|
101
92
|
});
|
|
102
93
|
session.addProtocolHandler('_vue:getComponentNames', request => {
|
|
103
94
|
const [fileName] = request.arguments;
|
|
104
|
-
const {
|
|
105
|
-
return createResponse((0, getComponentNames_1.getComponentNames)(ts,
|
|
95
|
+
const { project } = getProject(fileName);
|
|
96
|
+
return createResponse((0, getComponentNames_1.getComponentNames)(ts, project.getLanguageService().getProgram(), fileName));
|
|
106
97
|
});
|
|
107
98
|
session.addProtocolHandler('_vue:getComponentProps', request => {
|
|
108
99
|
const [fileName, tag] = request.arguments;
|
|
109
|
-
const {
|
|
110
|
-
return createResponse((0, getComponentProps_1.getComponentProps)(ts,
|
|
100
|
+
const { project } = getProject(fileName);
|
|
101
|
+
return createResponse((0, getComponentProps_1.getComponentProps)(ts, project.getLanguageService().getProgram(), fileName, tag));
|
|
111
102
|
});
|
|
112
103
|
session.addProtocolHandler('_vue:getComponentSlots', request => {
|
|
113
104
|
const [fileName] = request.arguments;
|
|
114
|
-
const {
|
|
115
|
-
return createResponse((0, getComponentSlots_1.getComponentSlots)(ts,
|
|
105
|
+
const { project, virtualCode } = getProjectAndVirtualCode(fileName);
|
|
106
|
+
return createResponse((0, getComponentSlots_1.getComponentSlots)(ts, project.getLanguageService().getProgram(), virtualCode));
|
|
116
107
|
});
|
|
117
108
|
session.addProtocolHandler('_vue:getElementAttrs', request => {
|
|
118
109
|
const [fileName, tag] = request.arguments;
|
|
119
|
-
const {
|
|
120
|
-
return createResponse((0, getElementAttrs_1.getElementAttrs)(ts,
|
|
110
|
+
const { project } = getProject(fileName);
|
|
111
|
+
return createResponse((0, getElementAttrs_1.getElementAttrs)(ts, project.getLanguageService().getProgram(), fileName, tag));
|
|
121
112
|
});
|
|
122
113
|
session.addProtocolHandler('_vue:getElementNames', request => {
|
|
123
114
|
const [fileName] = request.arguments;
|
|
124
|
-
const {
|
|
125
|
-
return createResponse((0, getElementNames_1.getElementNames)(ts,
|
|
115
|
+
const { project } = getProject(fileName);
|
|
116
|
+
return createResponse((0, getElementNames_1.getElementNames)(ts, project.getLanguageService().getProgram(), fileName));
|
|
126
117
|
});
|
|
127
118
|
projectService.logger.info('Vue specific commands are successfully added.');
|
|
128
119
|
function createResponse(res) {
|
|
@@ -131,14 +122,14 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
|
|
|
131
122
|
responseRequired: true,
|
|
132
123
|
};
|
|
133
124
|
}
|
|
134
|
-
function
|
|
135
|
-
const service =
|
|
125
|
+
function getProjectAndVirtualCode(fileName) {
|
|
126
|
+
const service = getProject(fileName);
|
|
136
127
|
const sourceScript = service.language.scripts.get(fileName);
|
|
137
128
|
if (!sourceScript) {
|
|
138
129
|
throw new Error('No source script found for file: ' + fileName);
|
|
139
130
|
}
|
|
140
131
|
const virtualCode = sourceScript.generated?.root;
|
|
141
|
-
if (!(virtualCode instanceof
|
|
132
|
+
if (!(virtualCode instanceof core.VueVirtualCode)) {
|
|
142
133
|
throw new Error('No virtual code found for file: ' + fileName);
|
|
143
134
|
}
|
|
144
135
|
return {
|
|
@@ -147,21 +138,17 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
|
|
|
147
138
|
virtualCode,
|
|
148
139
|
};
|
|
149
140
|
}
|
|
150
|
-
function
|
|
141
|
+
function getProject(fileName) {
|
|
151
142
|
const { project } = session['getFileAndProject']({
|
|
152
143
|
file: fileName,
|
|
153
144
|
projectFileName: undefined,
|
|
154
145
|
});
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
throw new Error('No vue service for project: ' + project.getProjectName());
|
|
146
|
+
if (!('__vue__' in project)) {
|
|
147
|
+
throw new Error('No vue project info for project: ' + project.getProjectName());
|
|
158
148
|
}
|
|
159
|
-
const [language, languageServiceHost, languageService] = service;
|
|
160
149
|
return {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
languageServiceHost,
|
|
164
|
-
language,
|
|
150
|
+
project,
|
|
151
|
+
language: project.__vue__.language,
|
|
165
152
|
};
|
|
166
153
|
}
|
|
167
154
|
}
|
|
@@ -35,7 +35,10 @@ function isRefAtPosition(ts, language, program, sourceScript, virtualCode, posit
|
|
|
35
35
|
const checker = program.getTypeChecker();
|
|
36
36
|
const type = checker.getTypeAtLocation(node);
|
|
37
37
|
const props = type.getProperties();
|
|
38
|
-
return props.some(prop => prop.
|
|
38
|
+
return props.some(prop => prop.declarations?.some(decl => ts.isPropertySignature(decl)
|
|
39
|
+
&& ts.isComputedPropertyName(decl.name)
|
|
40
|
+
&& ts.isIdentifier(decl.name.expression)
|
|
41
|
+
&& decl.name.expression.text === 'RefSymbol'));
|
|
39
42
|
function findPositionIdentifier(sourceFile, node, offset) {
|
|
40
43
|
let result;
|
|
41
44
|
node.forEachChild(child => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vue/typescript-plugin",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@volar/typescript": "2.4.23",
|
|
17
|
-
"@vue/language-core": "3.1.
|
|
17
|
+
"@vue/language-core": "3.1.2",
|
|
18
18
|
"@vue/shared": "^3.5.0",
|
|
19
19
|
"path-browserify": "^1.0.1"
|
|
20
20
|
},
|
|
@@ -22,5 +22,5 @@
|
|
|
22
22
|
"@types/node": "^22.10.4",
|
|
23
23
|
"@types/path-browserify": "^1.0.1"
|
|
24
24
|
},
|
|
25
|
-
"gitHead": "
|
|
25
|
+
"gitHead": "77db3d889305e8c02740f4c14793bff0156ccdb8"
|
|
26
26
|
}
|