@vue/typescript-plugin 3.0.8 → 3.0.10

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 CHANGED
@@ -11,10 +11,7 @@ const getComponentSlots_1 = require("./lib/requests/getComponentSlots");
11
11
  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
- const getReactiveReferences_1 = require("./lib/requests/getReactiveReferences");
15
14
  const isRefAtPosition_1 = require("./lib/requests/isRefAtPosition");
16
- const windowsPathReg = /\\/g;
17
- const project2Service = new WeakMap();
18
15
  module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)((ts, info) => {
19
16
  const vueOptions = getVueCompilerOptions();
20
17
  const languagePlugin = vue.createVueLanguagePlugin(ts, info.languageServiceHost.getCompilationSettings(), vueOptions, id => id);
@@ -23,21 +20,14 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
23
20
  return {
24
21
  languagePlugins: [languagePlugin],
25
22
  setup: language => {
26
- project2Service.set(info.project, [language, info.languageServiceHost, info.languageService]);
27
23
  info.languageService = (0, common_1.createVueLanguageServiceProxy)(ts, language, info.languageService, vueOptions, fileName => fileName);
28
- // #3963
29
- const timer = setInterval(() => {
30
- if (info.project['program']) {
31
- clearInterval(timer);
32
- info.project['program'].__vue__ = { language };
33
- }
34
- }, 50);
24
+ info.project.__vue__ = { language };
35
25
  },
36
26
  };
37
27
  function getVueCompilerOptions() {
38
28
  if (info.project.projectKind === ts.server.ProjectKind.Configured) {
39
29
  const tsconfig = info.project.getProjectName();
40
- return vue.createParsedCommandLine(ts, ts.sys, tsconfig.replace(windowsPathReg, '/')).vueOptions;
30
+ return vue.createParsedCommandLine(ts, ts.sys, tsconfig.replace(/\\/g, '/')).vueOptions;
41
31
  }
42
32
  else {
43
33
  return vue.createParsedCommandLineByJson(ts, ts.sys, info.languageServiceHost.getCurrentDirectory(), {})
@@ -77,59 +67,53 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
77
67
  });
78
68
  session.addProtocolHandler('_vue:collectExtractProps', request => {
79
69
  const [fileName, templateCodeRange] = request.arguments;
80
- const { language, languageService, sourceScript, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
81
- return createResponse((0, collectExtractProps_1.collectExtractProps)(ts, language, languageService.getProgram(), sourceScript, virtualCode, templateCodeRange, sourceScript.generated ? sourceScript.snapshot.getLength() : 0));
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));
82
72
  });
83
73
  session.addProtocolHandler('_vue:getImportPathForFile', request => {
84
74
  const [fileName, incomingFileName, preferences] = request.arguments;
85
- const { languageServiceHost, languageService } = getLanguageService(fileName);
86
- return createResponse((0, getImportPathForFile_1.getImportPathForFile)(ts, languageServiceHost, languageService.getProgram(), fileName, incomingFileName, preferences));
75
+ const { project } = getProject(fileName);
76
+ return createResponse((0, getImportPathForFile_1.getImportPathForFile)(ts, project, project.getLanguageService().getProgram(), fileName, incomingFileName, preferences));
87
77
  });
88
78
  session.addProtocolHandler('_vue:isRefAtPosition', request => {
89
79
  const [fileName, position] = request.arguments;
90
- const { language, languageService, sourceScript, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
91
- return createResponse((0, isRefAtPosition_1.isRefAtPosition)(ts, language, languageService.getProgram(), sourceScript, virtualCode, position, sourceScript.generated ? sourceScript.snapshot.getLength() : 0));
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));
92
82
  });
93
83
  session.addProtocolHandler('_vue:getComponentDirectives', request => {
94
84
  const [fileName] = request.arguments;
95
- const { languageService } = getLanguageService(fileName);
96
- return createResponse((0, getComponentDirectives_1.getComponentDirectives)(ts, languageService.getProgram(), fileName));
85
+ const { project } = getProject(fileName);
86
+ return createResponse((0, getComponentDirectives_1.getComponentDirectives)(ts, project.getLanguageService().getProgram(), fileName));
97
87
  });
98
88
  session.addProtocolHandler('_vue:getComponentEvents', request => {
99
89
  const [fileName, tag] = request.arguments;
100
- const { languageService } = getLanguageService(fileName);
101
- return createResponse((0, getComponentEvents_1.getComponentEvents)(ts, languageService.getProgram(), fileName, tag));
90
+ const { project } = getProject(fileName);
91
+ return createResponse((0, getComponentEvents_1.getComponentEvents)(ts, project.getLanguageService().getProgram(), fileName, tag));
102
92
  });
103
93
  session.addProtocolHandler('_vue:getComponentNames', request => {
104
94
  const [fileName] = request.arguments;
105
- const { languageService } = getLanguageService(fileName);
106
- return createResponse((0, getComponentNames_1.getComponentNames)(ts, languageService.getProgram(), fileName));
95
+ const { project } = getProject(fileName);
96
+ return createResponse((0, getComponentNames_1.getComponentNames)(ts, project.getLanguageService().getProgram(), fileName));
107
97
  });
108
98
  session.addProtocolHandler('_vue:getComponentProps', request => {
109
99
  const [fileName, tag] = request.arguments;
110
- const { languageService } = getLanguageService(fileName);
111
- return createResponse((0, getComponentProps_1.getComponentProps)(ts, languageService.getProgram(), fileName, tag));
100
+ const { project } = getProject(fileName);
101
+ return createResponse((0, getComponentProps_1.getComponentProps)(ts, project.getLanguageService().getProgram(), fileName, tag));
112
102
  });
113
103
  session.addProtocolHandler('_vue:getComponentSlots', request => {
114
104
  const [fileName] = request.arguments;
115
- const { languageService, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
116
- return createResponse((0, getComponentSlots_1.getComponentSlots)(ts, languageService.getProgram(), virtualCode));
105
+ const { project, virtualCode } = getProjectAndVirtualCode(fileName);
106
+ return createResponse((0, getComponentSlots_1.getComponentSlots)(ts, project.getLanguageService().getProgram(), virtualCode));
117
107
  });
118
108
  session.addProtocolHandler('_vue:getElementAttrs', request => {
119
109
  const [fileName, tag] = request.arguments;
120
- const { languageService } = getLanguageService(fileName);
121
- return createResponse((0, getElementAttrs_1.getElementAttrs)(ts, languageService.getProgram(), fileName, tag));
110
+ const { project } = getProject(fileName);
111
+ return createResponse((0, getElementAttrs_1.getElementAttrs)(ts, project.getLanguageService().getProgram(), fileName, tag));
122
112
  });
123
113
  session.addProtocolHandler('_vue:getElementNames', request => {
124
114
  const [fileName] = request.arguments;
125
- const { languageService } = getLanguageService(fileName);
126
- return createResponse((0, getElementNames_1.getElementNames)(ts, languageService.getProgram(), fileName));
127
- });
128
- session.addProtocolHandler('_vue:getReactiveReferences', request => {
129
- const [fileName, position] = request.arguments;
130
- const { language } = getLanguageService(fileName);
131
- const sourceScript = language.scripts.get(fileName);
132
- return createResponse((0, getReactiveReferences_1.getReactiveReferences)(ts, language, sourceScript, position, sourceScript.generated ? sourceScript.snapshot.getLength() : 0));
115
+ const { project } = getProject(fileName);
116
+ return createResponse((0, getElementNames_1.getElementNames)(ts, project.getLanguageService().getProgram(), fileName));
133
117
  });
134
118
  projectService.logger.info('Vue specific commands are successfully added.');
135
119
  function createResponse(res) {
@@ -138,8 +122,8 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
138
122
  responseRequired: true,
139
123
  };
140
124
  }
141
- function getLanguageServiceAndVirtualCode(fileName) {
142
- const service = getLanguageService(fileName);
125
+ function getProjectAndVirtualCode(fileName) {
126
+ const service = getProject(fileName);
143
127
  const sourceScript = service.language.scripts.get(fileName);
144
128
  if (!sourceScript) {
145
129
  throw new Error('No source script found for file: ' + fileName);
@@ -154,22 +138,17 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
154
138
  virtualCode,
155
139
  };
156
140
  }
157
- function getLanguageService(fileName) {
158
- // @ts-expect-error
159
- const { project } = session.getFileAndProject({
141
+ function getProject(fileName) {
142
+ const { project } = session['getFileAndProject']({
160
143
  file: fileName,
161
144
  projectFileName: undefined,
162
145
  });
163
- const service = project2Service.get(project);
164
- if (!service) {
165
- 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());
166
148
  }
167
- const [language, languageServiceHost, languageService] = service;
168
149
  return {
169
- typescript: ts,
170
- languageService,
171
- languageServiceHost,
172
- language,
150
+ project,
151
+ language: project.__vue__.language,
173
152
  };
174
153
  }
175
154
  }
@@ -11,7 +11,6 @@ export interface Requests {
11
11
  getComponentSlots(fileName: string): Response<ReturnType<typeof import('./getComponentSlots.js')['getComponentSlots']>>;
12
12
  getElementAttrs(fileName: string, tag: string): Response<ReturnType<typeof import('./getElementAttrs.js')['getElementAttrs']>>;
13
13
  getElementNames(fileName: string): Response<ReturnType<typeof import('./getElementNames.js')['getElementNames']>>;
14
- getReactiveReferences(fileName: string, position: number): Response<ReturnType<typeof import('./getReactiveReferences.js')['getReactiveReferences']>>;
15
14
  getDocumentHighlights(fileName: string, position: number): Response<ts.DocumentHighlights[]>;
16
15
  getEncodedSemanticClassifications(fileName: string, span: ts.TextSpan): Response<ts.Classifications>;
17
16
  getQuickInfoAtPosition(fileName: string, position: ts.LineAndCharacter): Response<string>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue/typescript-plugin",
3
- "version": "3.0.8",
3
+ "version": "3.0.10",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "**/*.js",
@@ -14,14 +14,13 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@volar/typescript": "2.4.23",
17
- "@vue/language-core": "3.0.8",
17
+ "@vue/language-core": "3.0.10",
18
18
  "@vue/shared": "^3.5.0",
19
- "laplacenoma": "^0.0.3",
20
19
  "path-browserify": "^1.0.1"
21
20
  },
22
21
  "devDependencies": {
23
22
  "@types/node": "^22.10.4",
24
23
  "@types/path-browserify": "^1.0.1"
25
24
  },
26
- "gitHead": "f7bdeaa7bb476df1fc8ff46c504d75c1869b0be9"
25
+ "gitHead": "0f57e1df7261ba537de6078811e971e8da1a3c79"
27
26
  }
@@ -1,5 +0,0 @@
1
- import { type Language, type SourceScript } from '@vue/language-core';
2
- export declare function getReactiveReferences(ts: typeof import('typescript'), language: Language<string>, sourceScript: SourceScript<string>, position: number, leadingOffset?: number): {
3
- dependencyRanges: ts.TextRange[];
4
- dependentRanges: ts.TextRange[];
5
- } | undefined;
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getReactiveReferences = getReactiveReferences;
4
- const typescript_1 = require("@volar/typescript");
5
- const laplacenoma_1 = require("laplacenoma");
6
- const rulesVue = require("laplacenoma/rules/vue");
7
- const analyzer = (0, laplacenoma_1.createAnalyzer)({
8
- rules: rulesVue,
9
- });
10
- let currentVersion = -1;
11
- let currentFileName = '';
12
- let currentSnapshot;
13
- let languageService;
14
- let languageServiceHost;
15
- function getReactiveReferences(ts, language, sourceScript, position, leadingOffset = 0) {
16
- if (currentSnapshot !== sourceScript.snapshot || currentFileName !== sourceScript.id) {
17
- currentSnapshot = sourceScript.snapshot;
18
- currentFileName = sourceScript.id;
19
- currentVersion++;
20
- }
21
- if (!languageService) {
22
- languageServiceHost = {
23
- getProjectVersion: () => currentVersion.toString(),
24
- getScriptVersion: () => currentVersion.toString(),
25
- getScriptFileNames: () => [currentFileName],
26
- getScriptSnapshot: fileName => fileName === currentFileName ? currentSnapshot : undefined,
27
- getCompilationSettings: () => ({ allowJs: true, allowNonTsExtensions: true }),
28
- getCurrentDirectory: () => '',
29
- getDefaultLibFileName: () => '',
30
- readFile: () => undefined,
31
- fileExists: fileName => fileName === currentFileName,
32
- };
33
- (0, typescript_1.decorateLanguageServiceHost)(ts, language, languageServiceHost);
34
- const proxied = (0, typescript_1.createProxyLanguageService)(ts.createLanguageService(languageServiceHost));
35
- proxied.initialize(language);
36
- languageService = proxied.proxy;
37
- }
38
- const sourceFile = languageService.getProgram().getSourceFile(sourceScript.id);
39
- const serviceScript = sourceScript.generated?.languagePlugin.typescript?.getServiceScript(sourceScript.generated.root);
40
- const map = serviceScript ? language.maps.get(serviceScript.code, sourceScript) : undefined;
41
- const toSourceRange = map
42
- ? (pos, end) => {
43
- for (const [mappedStart, mappedEnd] of map.toSourceRange(pos - leadingOffset, end - leadingOffset, false)) {
44
- return { pos: mappedStart, end: mappedEnd };
45
- }
46
- }
47
- : (pos, end) => ({ pos, end });
48
- return analyzer.analyze(sourceFile, position, {
49
- typescript: ts,
50
- languageService,
51
- toSourceRange,
52
- });
53
- }
54
- //# sourceMappingURL=getReactiveReferences.js.map