@vue/typescript-plugin 2.0.7 → 2.0.11

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
@@ -20,40 +20,29 @@ function createLanguageServicePlugin() {
20
20
  decoratedLanguageServices.add(info.languageService);
21
21
  decoratedLanguageServiceHosts.add(info.languageServiceHost);
22
22
  const vueOptions = getVueCompilerOptions();
23
- const languagePlugin = vue.createVueLanguagePlugin(ts, id => id, fileName => {
24
- if (info.languageServiceHost.useCaseSensitiveFileNames?.() ?? false) {
25
- return externalFiles.get(info.project)?.has(fileName) ?? false;
26
- }
27
- else {
28
- const lowerFileName = fileName.toLowerCase();
29
- for (const externalFile of externalFiles.get(info.project) ?? []) {
30
- if (externalFile.toLowerCase() === lowerFileName) {
31
- return true;
32
- }
33
- }
34
- return false;
35
- }
36
- }, info.languageServiceHost.getCompilationSettings(), vueOptions);
23
+ const languagePlugin = vue.createVueLanguagePlugin(ts, id => id, info.languageServiceHost.useCaseSensitiveFileNames?.() ?? false, () => info.languageServiceHost.getProjectVersion?.() ?? '', () => externalFiles.get(info.project) ?? [], info.languageServiceHost.getCompilationSettings(), vueOptions);
37
24
  const extensions = languagePlugin.typescript?.extraFileExtensions.map(ext => '.' + ext.extension) ?? [];
38
25
  const getScriptSnapshot = info.languageServiceHost.getScriptSnapshot.bind(info.languageServiceHost);
39
- const files = (0, language_core_1.createFileRegistry)([languagePlugin], ts.sys.useCaseSensitiveFileNames, fileName => {
26
+ const getLanguageId = (fileName) => {
27
+ if (extensions.some(ext => fileName.endsWith(ext))) {
28
+ return 'vue';
29
+ }
30
+ return (0, language_core_1.resolveCommonLanguageId)(fileName);
31
+ };
32
+ const language = (0, language_core_1.createLanguage)([languagePlugin], ts.sys.useCaseSensitiveFileNames, fileName => {
40
33
  const snapshot = getScriptSnapshot(fileName);
41
34
  if (snapshot) {
42
- let languageId = (0, language_core_1.resolveCommonLanguageId)(fileName);
43
- if (extensions.some(ext => fileName.endsWith(ext))) {
44
- languageId = 'vue';
45
- }
46
- files.set(fileName, languageId, snapshot);
35
+ language.scripts.set(fileName, getLanguageId(fileName), snapshot);
47
36
  }
48
37
  else {
49
- files.delete(fileName);
38
+ language.scripts.delete(fileName);
50
39
  }
51
40
  });
52
41
  projectExternalFileExtensions.set(info.project, extensions);
53
- server_1.projects.set(info.project, { info, files, vueOptions });
54
- (0, decorateLanguageService_1.decorateLanguageService)(files, info.languageService);
55
- (0, common_1.decorateLanguageServiceForVue)(files, info.languageService, vueOptions, ts, true);
56
- (0, decorateLanguageServiceHost_1.decorateLanguageServiceHost)(files, info.languageServiceHost, ts);
42
+ server_1.projects.set(info.project, { info, language, vueOptions });
43
+ (0, decorateLanguageService_1.decorateLanguageService)(language, info.languageService);
44
+ (0, common_1.decorateLanguageServiceForVue)(language, info.languageService, vueOptions, ts, true);
45
+ (0, decorateLanguageServiceHost_1.decorateLanguageServiceHost)(ts, language, info.languageServiceHost);
57
46
  (0, server_1.startNamedPipeServer)(ts, info.project.projectKind, info.project.getCurrentDirectory());
58
47
  }
59
48
  return info.languageService;
@@ -76,7 +65,7 @@ function createLanguageServicePlugin() {
76
65
  if (oldFiles && !twoSetsEqual(oldFiles, newFiles)) {
77
66
  for (const oldFile of oldFiles) {
78
67
  if (!newFiles.has(oldFile)) {
79
- server_1.projects.get(project)?.files.delete(oldFile);
68
+ server_1.projects.get(project)?.language.scripts.delete(oldFile);
80
69
  }
81
70
  }
82
71
  project.refreshDiagnostics();
package/lib/client.d.ts CHANGED
@@ -3,6 +3,7 @@ export declare function collectExtractProps(...args: Parameters<typeof import('.
3
3
  type: string;
4
4
  model: boolean;
5
5
  }[] | null | undefined>;
6
+ export declare function getImportPathForFile(...args: Parameters<typeof import('./requests/getImportPathForFile.js')['getImportPathForFile']>): Promise<string | null | undefined>;
6
7
  export declare function getPropertiesAtLocation(...args: Parameters<typeof import('./requests/getPropertiesAtLocation.js')['getPropertiesAtLocation']>): Promise<string[] | null | undefined>;
7
8
  export declare function getQuickInfoAtPosition(...args: Parameters<typeof import('./requests/getQuickInfoAtPosition.js')['getQuickInfoAtPosition']>): Promise<import("typescript").QuickInfo | null | undefined>;
8
9
  export declare function getComponentProps(...args: Parameters<typeof import('./requests/componentInfos.js')['getComponentProps']>): Promise<string[] | null | undefined>;
package/lib/client.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getElementAttrs = exports.getComponentNames = exports.getTemplateContextProps = exports.getComponentEvents = exports.getComponentProps = exports.getQuickInfoAtPosition = exports.getPropertiesAtLocation = exports.collectExtractProps = void 0;
3
+ exports.getElementAttrs = exports.getComponentNames = exports.getTemplateContextProps = exports.getComponentEvents = exports.getComponentProps = exports.getQuickInfoAtPosition = exports.getPropertiesAtLocation = exports.getImportPathForFile = exports.collectExtractProps = void 0;
4
4
  const utils_1 = require("./utils");
5
5
  function collectExtractProps(...args) {
6
6
  return sendRequest({
@@ -9,6 +9,13 @@ function collectExtractProps(...args) {
9
9
  });
10
10
  }
11
11
  exports.collectExtractProps = collectExtractProps;
12
+ async function getImportPathForFile(...args) {
13
+ return await sendRequest({
14
+ type: 'getImportPathForFile',
15
+ args,
16
+ });
17
+ }
18
+ exports.getImportPathForFile = getImportPathForFile;
12
19
  async function getPropertiesAtLocation(...args) {
13
20
  return await sendRequest({
14
21
  type: 'getPropertiesAtLocation',
@@ -60,7 +67,7 @@ function getElementAttrs(...args) {
60
67
  }
61
68
  exports.getElementAttrs = getElementAttrs;
62
69
  async function sendRequest(request) {
63
- const server = await (0, utils_1.searchNamedPipeServerForFile)(request.args[0]);
70
+ const server = (await (0, utils_1.searchNamedPipeServerForFile)(request.args[0]))?.server;
64
71
  if (!server) {
65
72
  console.warn('[Vue Named Pipe Client] No server found for', request.args[0]);
66
73
  return;
package/lib/common.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as vue from '@vue/language-core';
2
2
  import type * as ts from 'typescript';
3
- export declare function decorateLanguageServiceForVue(files: vue.FileRegistry, languageService: ts.LanguageService, vueOptions: vue.VueCompilerOptions, ts: typeof import('typescript'), isTsPlugin: boolean): void;
3
+ export declare function decorateLanguageServiceForVue(language: vue.Language, languageService: ts.LanguageService, vueOptions: vue.VueCompilerOptions, ts: typeof import('typescript'), isTsPlugin: boolean): void;
4
4
  export declare function getComponentSpans(this: {
5
5
  typescript: typeof import('typescript');
6
6
  languageService: ts.LanguageService;
package/lib/common.js CHANGED
@@ -4,10 +4,10 @@ exports.getComponentSpans = exports.decorateLanguageServiceForVue = void 0;
4
4
  const vue = require("@vue/language-core");
5
5
  const shared_1 = require("@vue/shared");
6
6
  const componentInfos_1 = require("./requests/componentInfos");
7
- function decorateLanguageServiceForVue(files, languageService, vueOptions, ts, isTsPlugin) {
7
+ function decorateLanguageServiceForVue(language, languageService, vueOptions, ts, isTsPlugin) {
8
8
  const { getCompletionsAtPosition, getCompletionEntryDetails, getCodeFixesAtPosition, getEncodedSemanticClassifications, } = languageService;
9
- languageService.getCompletionsAtPosition = (fileName, position, options) => {
10
- const result = getCompletionsAtPosition(fileName, position, options);
9
+ languageService.getCompletionsAtPosition = (fileName, position, options, formattingSettings) => {
10
+ const result = getCompletionsAtPosition(fileName, position, options, formattingSettings);
11
11
  if (result) {
12
12
  // filter __VLS_
13
13
  result.entries = result.entries.filter(entry => entry.name.indexOf('__VLS_') === -1
@@ -67,11 +67,11 @@ function decorateLanguageServiceForVue(files, languageService, vueOptions, ts, i
67
67
  if (isTsPlugin) {
68
68
  languageService.getEncodedSemanticClassifications = (fileName, span, format) => {
69
69
  const result = getEncodedSemanticClassifications(fileName, span, format);
70
- const file = files.get(fileName);
71
- if (file?.generated?.code instanceof vue.VueGeneratedCode) {
72
- const { template } = file.generated.code.sfc;
70
+ const file = language.scripts.get(fileName);
71
+ if (file?.generated?.root instanceof vue.VueGeneratedCode) {
72
+ const { template } = file.generated.root.sfc;
73
73
  if (template) {
74
- for (const componentSpan of getComponentSpans.call({ typescript: ts, languageService, vueOptions }, file.generated.code, template, {
74
+ for (const componentSpan of getComponentSpans.call({ typescript: ts, languageService, vueOptions }, file.generated.root, template, {
75
75
  start: span.start - template.startTagEnd,
76
76
  length: span.length,
77
77
  })) {
@@ -92,11 +92,11 @@ function getComponentSpans(vueCode, template, spanTemplateRange) {
92
92
  ...validComponentNames,
93
93
  ...validComponentNames.map(vue.hyphenateTag),
94
94
  ]);
95
- template.ast?.children.forEach(function visit(node) {
96
- if (node.loc.end.offset <= spanTemplateRange.start || node.loc.start.offset >= (spanTemplateRange.start + spanTemplateRange.length)) {
97
- return;
98
- }
99
- if (node.type === 1) {
95
+ if (template.ast) {
96
+ for (const node of vue.forEachElementNode(template.ast)) {
97
+ if (node.loc.end.offset <= spanTemplateRange.start || node.loc.start.offset >= (spanTemplateRange.start + spanTemplateRange.length)) {
98
+ continue;
99
+ }
100
100
  if (components.has(node.tag)) {
101
101
  let start = node.loc.start.offset;
102
102
  if (template.lang === 'html') {
@@ -113,23 +113,8 @@ function getComponentSpans(vueCode, template, spanTemplateRange) {
113
113
  });
114
114
  }
115
115
  }
116
- for (const child of node.children) {
117
- visit(child);
118
- }
119
116
  }
120
- else if (node.type === 9) {
121
- for (const branch of node.branches) {
122
- for (const child of branch.children) {
123
- visit(child);
124
- }
125
- }
126
- }
127
- else if (node.type === 11) {
128
- for (const child of node.children) {
129
- visit(child);
130
- }
131
- }
132
- });
117
+ }
133
118
  return result;
134
119
  }
135
120
  exports.getComponentSpans = getComponentSpans;
@@ -1,9 +1,9 @@
1
- import { FileRegistry } from '@vue/language-core';
1
+ import { Language } from '@vue/language-core';
2
2
  import type * as ts from 'typescript';
3
3
  export declare function collectExtractProps(this: {
4
4
  typescript: typeof import('typescript');
5
5
  languageService: ts.LanguageService;
6
- files: FileRegistry;
6
+ language: Language;
7
7
  isTsPlugin: boolean;
8
8
  getFileId: (fileName: string) => string;
9
9
  }, fileName: string, templateCodeRange: [number, number]): {
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.collectExtractProps = void 0;
4
4
  const language_core_1 = require("@vue/language-core");
5
5
  function collectExtractProps(fileName, templateCodeRange) {
6
- const { typescript: ts, languageService, files, isTsPlugin, getFileId } = this;
7
- const volarFile = files.get(getFileId(fileName));
8
- if (!(volarFile?.generated?.code instanceof language_core_1.VueGeneratedCode)) {
6
+ const { typescript: ts, languageService, language, isTsPlugin, getFileId } = this;
7
+ const volarFile = language.scripts.get(getFileId(fileName));
8
+ if (!(volarFile?.generated?.root instanceof language_core_1.VueGeneratedCode)) {
9
9
  return;
10
10
  }
11
11
  const result = new Map();
@@ -15,9 +15,9 @@ function collectExtractProps(fileName, templateCodeRange) {
15
15
  }
16
16
  const sourceFile = program.getSourceFile(fileName);
17
17
  const checker = program.getTypeChecker();
18
- const script = volarFile.generated?.languagePlugin.typescript?.getScript(volarFile.generated.code);
19
- const maps = script ? [...files.getMaps(script.code).values()] : [];
20
- const sfc = volarFile.generated.code.sfc;
18
+ const script = volarFile.generated?.languagePlugin.typescript?.getServiceScript(volarFile.generated.root);
19
+ const maps = script ? [...language.maps.forEach(script.code).values()] : [];
20
+ const sfc = volarFile.generated.root.sfc;
21
21
  sourceFile.forEachChild(function visit(node) {
22
22
  if (ts.isPropertyAccessExpression(node)
23
23
  && ts.isIdentifier(node.expression)
@@ -3,27 +3,27 @@ import type * as ts from 'typescript';
3
3
  export declare function getComponentProps(this: {
4
4
  typescript: typeof import('typescript');
5
5
  languageService: ts.LanguageService;
6
- files: vue.FileRegistry;
6
+ language: vue.Language;
7
7
  vueOptions: vue.VueCompilerOptions;
8
8
  getFileId: (fileName: string) => string;
9
9
  }, fileName: string, tag: string, requiredOnly?: boolean): string[] | undefined;
10
10
  export declare function getComponentEvents(this: {
11
11
  typescript: typeof import('typescript');
12
12
  languageService: ts.LanguageService;
13
- files: vue.FileRegistry;
13
+ language: vue.Language;
14
14
  vueOptions: vue.VueCompilerOptions;
15
15
  getFileId: (fileName: string) => string;
16
16
  }, fileName: string, tag: string): string[] | undefined;
17
17
  export declare function getTemplateContextProps(this: {
18
18
  typescript: typeof import('typescript');
19
19
  languageService: ts.LanguageService;
20
- files: vue.FileRegistry;
20
+ language: vue.Language;
21
21
  getFileId: (fileName: string) => string;
22
22
  }, fileName: string): string[] | undefined;
23
23
  export declare function getComponentNames(this: {
24
24
  typescript: typeof import('typescript');
25
25
  languageService: ts.LanguageService;
26
- files: vue.FileRegistry;
26
+ language: vue.Language;
27
27
  vueOptions: vue.VueCompilerOptions;
28
28
  getFileId: (fileName: string) => string;
29
29
  }, fileName: string): string[] | undefined;
@@ -31,6 +31,6 @@ export declare function _getComponentNames(ts: typeof import('typescript'), tsLs
31
31
  export declare function getElementAttrs(this: {
32
32
  typescript: typeof import('typescript');
33
33
  languageService: ts.LanguageService;
34
- files: vue.FileRegistry;
34
+ language: vue.Language;
35
35
  getFileId: (fileName: string) => string;
36
36
  }, fileName: string, tagName: string): string[] | undefined;
@@ -4,12 +4,12 @@ exports.getElementAttrs = exports._getComponentNames = exports.getComponentNames
4
4
  const vue = require("@vue/language-core");
5
5
  const shared_1 = require("@vue/shared");
6
6
  function getComponentProps(fileName, tag, requiredOnly = false) {
7
- const { typescript: ts, files, vueOptions, languageService, getFileId } = this;
8
- const volarFile = files.get(getFileId(fileName));
9
- if (!(volarFile?.generated?.code instanceof vue.VueGeneratedCode)) {
7
+ const { typescript: ts, language, vueOptions, languageService, getFileId } = this;
8
+ const volarFile = language.scripts.get(getFileId(fileName));
9
+ if (!(volarFile?.generated?.root instanceof vue.VueGeneratedCode)) {
10
10
  return;
11
11
  }
12
- const vueCode = volarFile.generated.code;
12
+ const vueCode = volarFile.generated.root;
13
13
  const program = languageService.getCurrentProgram();
14
14
  if (!program) {
15
15
  return;
@@ -71,12 +71,12 @@ function getComponentProps(fileName, tag, requiredOnly = false) {
71
71
  }
72
72
  exports.getComponentProps = getComponentProps;
73
73
  function getComponentEvents(fileName, tag) {
74
- const { typescript: ts, files, vueOptions, languageService, getFileId } = this;
75
- const volarFile = files.get(getFileId(fileName));
76
- if (!(volarFile?.generated?.code instanceof vue.VueGeneratedCode)) {
74
+ const { typescript: ts, language, vueOptions, languageService, getFileId } = this;
75
+ const volarFile = language.scripts.get(getFileId(fileName));
76
+ if (!(volarFile?.generated?.root instanceof vue.VueGeneratedCode)) {
77
77
  return;
78
78
  }
79
- const vueCode = volarFile.generated.code;
79
+ const vueCode = volarFile.generated.root;
80
80
  const program = languageService.getCurrentProgram();
81
81
  if (!program) {
82
82
  return;
@@ -132,12 +132,12 @@ function getComponentEvents(fileName, tag) {
132
132
  }
133
133
  exports.getComponentEvents = getComponentEvents;
134
134
  function getTemplateContextProps(fileName) {
135
- const { typescript: ts, files, languageService, getFileId } = this;
136
- const volarFile = files.get(getFileId(fileName));
137
- if (!(volarFile?.generated?.code instanceof vue.VueGeneratedCode)) {
135
+ const { typescript: ts, language, languageService, getFileId } = this;
136
+ const volarFile = language.scripts.get(getFileId(fileName));
137
+ if (!(volarFile?.generated?.root instanceof vue.VueGeneratedCode)) {
138
138
  return;
139
139
  }
140
- const vueCode = volarFile.generated.code;
140
+ const vueCode = volarFile.generated.root;
141
141
  return getVariableType(ts, languageService, vueCode, '__VLS_ctx')
142
142
  ?.type
143
143
  ?.getProperties()
@@ -145,12 +145,12 @@ function getTemplateContextProps(fileName) {
145
145
  }
146
146
  exports.getTemplateContextProps = getTemplateContextProps;
147
147
  function getComponentNames(fileName) {
148
- const { typescript: ts, files, vueOptions, languageService, getFileId } = this;
149
- const volarFile = files.get(getFileId(fileName));
150
- if (!(volarFile?.generated?.code instanceof vue.VueGeneratedCode)) {
148
+ const { typescript: ts, language, vueOptions, languageService, getFileId } = this;
149
+ const volarFile = language.scripts.get(getFileId(fileName));
150
+ if (!(volarFile?.generated?.root instanceof vue.VueGeneratedCode)) {
151
151
  return;
152
152
  }
153
- const vueCode = volarFile.generated.code;
153
+ const vueCode = volarFile.generated.root;
154
154
  return getVariableType(ts, languageService, vueCode, '__VLS_components')
155
155
  ?.type
156
156
  ?.getProperties()
@@ -171,9 +171,9 @@ function _getComponentNames(ts, tsLs, vueCode, vueOptions) {
171
171
  }
172
172
  exports._getComponentNames = _getComponentNames;
173
173
  function getElementAttrs(fileName, tagName) {
174
- const { typescript: ts, files, languageService, getFileId } = this;
175
- const volarFile = files.get(getFileId(fileName));
176
- if (!(volarFile?.generated?.code instanceof vue.VueGeneratedCode)) {
174
+ const { typescript: ts, language, languageService, getFileId } = this;
175
+ const volarFile = language.scripts.get(getFileId(fileName));
176
+ if (!(volarFile?.generated?.root instanceof vue.VueGeneratedCode)) {
177
177
  return;
178
178
  }
179
179
  const program = languageService.getCurrentProgram();
@@ -0,0 +1,6 @@
1
+ import type * as ts from 'typescript';
2
+ export declare function getImportPathForFile(this: {
3
+ typescript: typeof import('typescript');
4
+ languageService: ts.LanguageService;
5
+ languageServiceHost: ts.LanguageServiceHost;
6
+ }, fileName: string, incomingFileName: string, preferences: ts.UserPreferences): string | undefined;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getImportPathForFile = void 0;
4
+ function getImportPathForFile(fileName, incomingFileName, preferences) {
5
+ const { typescript: ts, languageService, languageServiceHost } = this;
6
+ const program = languageService.getProgram();
7
+ const incomingFile = program?.getSourceFile(incomingFileName);
8
+ const sourceFile = program?.getSourceFile(fileName);
9
+ if (!program || !sourceFile || !incomingFile) {
10
+ return;
11
+ }
12
+ const getModuleSpecifiersWithCacheInfo = ts.moduleSpecifiers.getModuleSpecifiersWithCacheInfo;
13
+ const resolutionHost = ts.createModuleSpecifierResolutionHost(program, languageServiceHost);
14
+ const moduleSpecifiers = getModuleSpecifiersWithCacheInfo(incomingFile.symbol, program.getTypeChecker(), languageServiceHost.getCompilationSettings(), sourceFile, resolutionHost, preferences);
15
+ for (const moduleSpecifier of moduleSpecifiers.moduleSpecifiers) {
16
+ return moduleSpecifier;
17
+ }
18
+ }
19
+ exports.getImportPathForFile = getImportPathForFile;
20
+ //# sourceMappingURL=getImportPathForFile.js.map
@@ -1,9 +1,9 @@
1
- import { FileRegistry } from '@vue/language-core';
1
+ import { Language } from '@vue/language-core';
2
2
  import type * as ts from 'typescript';
3
3
  export declare function getPropertiesAtLocation(this: {
4
4
  typescript: typeof import('typescript');
5
5
  languageService: ts.LanguageService;
6
- files: FileRegistry;
6
+ language: Language;
7
7
  isTsPlugin: boolean;
8
8
  getFileId: (fileName: string) => string;
9
9
  }, fileName: string, position: number): string[] | undefined;
@@ -3,16 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getPropertiesAtLocation = void 0;
4
4
  const language_core_1 = require("@vue/language-core");
5
5
  function getPropertiesAtLocation(fileName, position) {
6
- const { languageService, files, typescript: ts, isTsPlugin, getFileId } = this;
6
+ const { languageService, language, typescript: ts, isTsPlugin, getFileId } = this;
7
7
  // mapping
8
- const file = files.get(getFileId(fileName));
8
+ const file = language.scripts.get(getFileId(fileName));
9
9
  if (file?.generated) {
10
- const virtualScript = file.generated.languagePlugin.typescript?.getScript(file.generated.code);
10
+ const virtualScript = file.generated.languagePlugin.typescript?.getServiceScript(file.generated.root);
11
11
  if (!virtualScript) {
12
12
  return;
13
13
  }
14
14
  let mapped = false;
15
- for (const [_1, [_2, map]] of files.getMaps(virtualScript.code)) {
15
+ for (const [_1, [_2, map]] of language.maps.forEach(virtualScript.code)) {
16
16
  for (const [position2, mapping] of map.getGeneratedOffsets(position)) {
17
17
  if ((0, language_core_1.isCompletionEnabled)(mapping.data)) {
18
18
  position = position2;
package/lib/server.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import type * as ts from 'typescript';
2
- import type { FileRegistry, VueCompilerOptions } from '@vue/language-core';
2
+ import type { Language, VueCompilerOptions } from '@vue/language-core';
3
3
  export interface Request {
4
- type: 'containsFile' | 'collectExtractProps' | 'getPropertiesAtLocation' | 'getQuickInfoAtPosition' | 'getComponentProps' | 'getComponentEvents' | 'getTemplateContextProps' | 'getComponentNames' | 'getElementAttrs';
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;
8
8
  export declare const projects: Map<ts.server.Project, {
9
9
  info: ts.server.PluginCreateInfo;
10
- files: FileRegistry;
10
+ language: Language;
11
11
  vueOptions: VueCompilerOptions;
12
12
  }>;
package/lib/server.js CHANGED
@@ -5,6 +5,7 @@ const fs = require("fs");
5
5
  const net = require("net");
6
6
  const collectExtractProps_1 = require("./requests/collectExtractProps");
7
7
  const componentInfos_1 = require("./requests/componentInfos");
8
+ const getImportPathForFile_1 = require("./requests/getImportPathForFile");
8
9
  const getPropertiesAtLocation_1 = require("./requests/getPropertiesAtLocation");
9
10
  const getQuickInfoAtPosition_1 = require("./requests/getQuickInfoAtPosition");
10
11
  const utils_1 = require("./utils");
@@ -23,21 +24,30 @@ function startNamedPipeServer(ts, serverKind, currentDirectory) {
23
24
  const request = JSON.parse(text);
24
25
  const fileName = request.args[0];
25
26
  const project = getProject(fileName);
26
- if (project) {
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
+ : undefined));
34
+ }
35
+ else if (project) {
27
36
  const requestContext = {
28
37
  typescript: ts,
29
38
  languageService: project.info.languageService,
30
- files: project.files,
39
+ languageServiceHost: project.info.languageServiceHost,
40
+ language: project.language,
31
41
  vueOptions: project.vueOptions,
32
42
  isTsPlugin: true,
33
43
  getFileId: (fileName) => fileName,
34
44
  };
35
- if (request.type === 'containsFile') {
36
- const result = !!getProject(fileName);
45
+ if (request.type === 'collectExtractProps') {
46
+ const result = collectExtractProps_1.collectExtractProps.apply(requestContext, request.args);
37
47
  connection.write(JSON.stringify(result ?? null));
38
48
  }
39
- else if (request.type === 'collectExtractProps') {
40
- const result = collectExtractProps_1.collectExtractProps.apply(requestContext, request.args);
49
+ else if (request.type === 'getImportPathForFile') {
50
+ const result = getImportPathForFile_1.getImportPathForFile.apply(requestContext, request.args);
41
51
  connection.write(JSON.stringify(result ?? null));
42
52
  }
43
53
  else if (request.type === 'getPropertiesAtLocation') {
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<NamedPipeServer | undefined>;
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
@@ -52,9 +52,12 @@ async function searchNamedPipeServerForFile(fileName) {
52
52
  for (const server of configuredServers) {
53
53
  const client = await connect(server.path);
54
54
  if (client) {
55
- const response = await sendRequestWorker({ type: 'containsFile', args: [fileName] }, client);
56
- if (response) {
57
- return server;
55
+ const projectInfo = await sendRequestWorker({ type: 'projectInfoForFile', args: [fileName] }, client);
56
+ if (projectInfo) {
57
+ return {
58
+ server,
59
+ projectInfo,
60
+ };
58
61
  }
59
62
  }
60
63
  }
@@ -62,7 +65,10 @@ async function searchNamedPipeServerForFile(fileName) {
62
65
  if (!path.relative(server.currentDirectory, fileName).startsWith('..')) {
63
66
  const client = await connect(server.path);
64
67
  if (client) {
65
- return server;
68
+ return {
69
+ server,
70
+ projectInfo: undefined,
71
+ };
66
72
  }
67
73
  }
68
74
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue/typescript-plugin",
3
- "version": "2.0.7",
3
+ "version": "2.0.11",
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": "~2.1.3",
16
- "@vue/language-core": "2.0.7",
15
+ "@volar/typescript": "~2.2.0-alpha.6",
16
+ "@vue/language-core": "2.0.11",
17
17
  "@vue/shared": "^3.4.0"
18
18
  },
19
19
  "devDependencies": {
20
20
  "@types/node": "latest"
21
21
  },
22
- "gitHead": "4a37e8f3ebcf31ecfd2ea627f7611d5990ec5df6"
22
+ "gitHead": "c89f25ffc32c760130adeeac796b9a5d20585bf7"
23
23
  }