@vue/typescript-plugin 3.0.6 → 3.0.7-alpha.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/index.js CHANGED
@@ -23,7 +23,7 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
23
23
  languagePlugins: [languagePlugin],
24
24
  setup: language => {
25
25
  project2Service.set(info.project, [language, info.languageServiceHost, info.languageService]);
26
- info.languageService = (0, common_1.createVueLanguageServiceProxy)(ts, language, info.languageService, vueOptions);
26
+ info.languageService = (0, common_1.createVueLanguageServiceProxy)(ts, language, info.languageService, vueOptions, fileName => fileName);
27
27
  // #3963
28
28
  const timer = setInterval(() => {
29
29
  if (info.project['program']) {
@@ -60,84 +60,121 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
60
60
  if (session.handlers.has('_vue:projectInfo')) {
61
61
  return;
62
62
  }
63
- session.addProtocolHandler('_vue:projectInfo', ({ arguments: args }) => {
64
- return session.handlers.get('projectInfo')?.({ arguments: args });
63
+ session.addProtocolHandler('_vue:projectInfo', request => {
64
+ return session.handlers.get('projectInfo')?.(request);
65
65
  });
66
- session.addProtocolHandler('_vue:documentHighlights-full', ({ arguments: args }) => {
67
- return session.handlers.get('documentHighlights-full')?.({ arguments: args });
66
+ session.addProtocolHandler('_vue:documentHighlights-full', request => {
67
+ return session.handlers.get('documentHighlights-full')?.(request);
68
68
  });
69
- session.addProtocolHandler('_vue:encodedSemanticClassifications-full', ({ arguments: args }) => {
70
- return session.handlers.get('encodedSemanticClassifications-full')?.({ arguments: args });
69
+ session.addProtocolHandler('_vue:encodedSemanticClassifications-full', request => {
70
+ return session.handlers.get('encodedSemanticClassifications-full')?.(request);
71
71
  });
72
- session.addProtocolHandler('_vue:quickinfo', ({ arguments: args }) => {
73
- return session.handlers.get('quickinfo')?.({ arguments: args });
72
+ session.addProtocolHandler('_vue:quickinfo', request => {
73
+ return session.handlers.get('quickinfo')?.(request);
74
74
  });
75
- session.addProtocolHandler('_vue:collectExtractProps', ({ arguments: args }) => {
75
+ session.addProtocolHandler('_vue:collectExtractProps', request => {
76
+ const [fileName, templateCodeRange] = request.arguments;
77
+ const { language, program, sourceScript, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
76
78
  return {
77
- response: collectExtractProps_1.collectExtractProps.apply(getRequestContext(args[0]), args),
79
+ response: (0, collectExtractProps_1.collectExtractProps)(ts, language, program, sourceScript, virtualCode, templateCodeRange),
78
80
  };
79
81
  });
80
- session.addProtocolHandler('_vue:getImportPathForFile', ({ arguments: args }) => {
82
+ session.addProtocolHandler('_vue:getImportPathForFile', request => {
83
+ const [fileName, incomingFileName, preferences] = request.arguments;
84
+ const { languageServiceHost, program } = getLanguageService(fileName);
81
85
  return {
82
- response: getImportPathForFile_1.getImportPathForFile.apply(getRequestContext(args[0]), args),
86
+ response: (0, getImportPathForFile_1.getImportPathForFile)(ts, languageServiceHost, program, fileName, incomingFileName, preferences),
83
87
  };
84
88
  });
85
- session.addProtocolHandler('_vue:getPropertiesAtLocation', ({ arguments: args }) => {
89
+ session.addProtocolHandler('_vue:getPropertiesAtLocation', request => {
90
+ const [fileName, position] = request.arguments;
91
+ const { language, program, sourceScript, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
86
92
  return {
87
- response: getPropertiesAtLocation_1.getPropertiesAtLocation.apply(getRequestContext(args[0]), args),
93
+ response: (0, getPropertiesAtLocation_1.getPropertiesAtLocation)(ts, language, program, sourceScript, virtualCode, position),
88
94
  };
89
95
  });
90
- session.addProtocolHandler('_vue:getComponentDirectives', ({ arguments: args }) => {
96
+ session.addProtocolHandler('_vue:getComponentDirectives', request => {
97
+ const [fileName] = request.arguments;
98
+ const { program } = getLanguageService(fileName);
91
99
  return {
92
- response: getComponentDirectives_1.getComponentDirectives.apply(getRequestContext(args[0]), args),
100
+ response: (0, getComponentDirectives_1.getComponentDirectives)(ts, program, fileName),
93
101
  };
94
102
  });
95
- session.addProtocolHandler('_vue:getComponentEvents', ({ arguments: args }) => {
103
+ session.addProtocolHandler('_vue:getComponentEvents', request => {
104
+ const [fileName, tag] = request.arguments;
105
+ const { program } = getLanguageService(fileName);
96
106
  return {
97
- response: getComponentEvents_1.getComponentEvents.apply(getRequestContext(args[0]), args),
107
+ response: (0, getComponentEvents_1.getComponentEvents)(ts, program, fileName, tag),
98
108
  };
99
109
  });
100
- session.addProtocolHandler('_vue:getComponentNames', ({ arguments: args }) => {
110
+ session.addProtocolHandler('_vue:getComponentNames', request => {
111
+ const [fileName] = request.arguments;
112
+ const { program } = getLanguageService(fileName);
101
113
  return {
102
- response: getComponentNames_1.getComponentNames.apply(getRequestContext(args[0]), args) ?? [],
114
+ response: (0, getComponentNames_1.getComponentNames)(ts, program, fileName),
103
115
  };
104
116
  });
105
- session.addProtocolHandler('_vue:getComponentProps', ({ arguments: args }) => {
117
+ session.addProtocolHandler('_vue:getComponentProps', request => {
118
+ const [fileName, tag] = request.arguments;
119
+ const { program } = getLanguageService(fileName);
106
120
  return {
107
- response: getComponentProps_1.getComponentProps.apply(getRequestContext(args[0]), args),
121
+ response: (0, getComponentProps_1.getComponentProps)(ts, program, fileName, tag),
108
122
  };
109
123
  });
110
- session.addProtocolHandler('_vue:getComponentSlots', ({ arguments: args }) => {
124
+ session.addProtocolHandler('_vue:getComponentSlots', request => {
125
+ const [fileName] = request.arguments;
126
+ const { program, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
111
127
  return {
112
- response: getComponentSlots_1.getComponentSlots.apply(getRequestContext(args[0]), args),
128
+ response: (0, getComponentSlots_1.getComponentSlots)(ts, program, virtualCode),
113
129
  };
114
130
  });
115
- session.addProtocolHandler('_vue:getElementAttrs', ({ arguments: args }) => {
131
+ session.addProtocolHandler('_vue:getElementAttrs', request => {
132
+ const [fileName, tag] = request.arguments;
133
+ const { program } = getLanguageService(fileName);
116
134
  return {
117
- response: getElementAttrs_1.getElementAttrs.apply(getRequestContext(args[0]), args),
135
+ response: (0, getElementAttrs_1.getElementAttrs)(ts, program, fileName, tag),
118
136
  };
119
137
  });
120
- session.addProtocolHandler('_vue:getElementNames', ({ arguments: args }) => {
138
+ session.addProtocolHandler('_vue:getElementNames', request => {
139
+ const [fileName] = request.arguments;
140
+ const { program } = getLanguageService(fileName);
121
141
  return {
122
- response: getElementNames_1.getElementNames.apply(getRequestContext(args[0]), args),
142
+ response: (0, getElementNames_1.getElementNames)(ts, program, fileName),
123
143
  };
124
144
  });
125
145
  projectService.logger.info('Vue specific commands are successfully added.');
126
146
  }
127
- function getRequestContext(fileName) {
128
- const fileAndProject = info.session.getFileAndProject({
147
+ function getLanguageServiceAndVirtualCode(fileName) {
148
+ const service = getLanguageService(fileName);
149
+ const sourceScript = service?.language.scripts.get(fileName);
150
+ if (!sourceScript) {
151
+ throw new Error('No source script found for file: ' + fileName);
152
+ }
153
+ const virtualCode = sourceScript.generated?.root;
154
+ if (!(virtualCode instanceof vue.VueVirtualCode)) {
155
+ throw new Error('No virtual code found for file: ' + fileName);
156
+ }
157
+ return {
158
+ ...service,
159
+ sourceScript,
160
+ virtualCode,
161
+ };
162
+ }
163
+ function getLanguageService(fileName) {
164
+ const { project } = info.session.getFileAndProject({
129
165
  file: fileName,
130
166
  projectFileName: undefined,
131
167
  });
132
- const service = project2Service.get(fileAndProject.project);
168
+ const service = project2Service.get(project);
133
169
  if (!service) {
134
- throw 'No RequestContext';
170
+ throw new Error('No vue service for project: ' + project.getProjectName());
135
171
  }
172
+ const [language, languageServiceHost, languageService] = service;
136
173
  return {
137
174
  typescript: ts,
138
- languageService: service[2],
139
- languageServiceHost: service[1],
140
- language: service[0],
175
+ program: languageService.getProgram(),
176
+ languageServiceHost,
177
+ language,
141
178
  };
142
179
  }
143
180
  });
package/lib/common.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { type Language, type VueCompilerOptions } from '@vue/language-core';
2
2
  import type * as ts from 'typescript';
3
- export declare function createVueLanguageServiceProxy(ts: typeof import('typescript'), language: Language<string>, languageService: ts.LanguageService, vueOptions: VueCompilerOptions): ts.LanguageService;
3
+ export declare function createVueLanguageServiceProxy<T>(ts: typeof import('typescript'), language: Language<T>, languageService: ts.LanguageService, vueOptions: VueCompilerOptions, asScriptId: (fileName: string) => T): ts.LanguageService;
package/lib/common.js CHANGED
@@ -4,18 +4,18 @@ exports.createVueLanguageServiceProxy = createVueLanguageServiceProxy;
4
4
  const language_core_1 = require("@vue/language-core");
5
5
  const shared_1 = require("@vue/shared");
6
6
  const windowsPathReg = /\\/g;
7
- function createVueLanguageServiceProxy(ts, language, languageService, vueOptions) {
7
+ function createVueLanguageServiceProxy(ts, language, languageService, vueOptions, asScriptId) {
8
8
  const proxyCache = new Map();
9
9
  const getProxyMethod = (target, p) => {
10
10
  switch (p) {
11
11
  case 'getCompletionsAtPosition':
12
- return getCompletionsAtPosition(ts, language, vueOptions, target[p]);
12
+ return getCompletionsAtPosition(ts, language, asScriptId, vueOptions, target[p]);
13
13
  case 'getCompletionEntryDetails':
14
14
  return getCompletionEntryDetails(language, target[p]);
15
15
  case 'getCodeFixesAtPosition':
16
16
  return getCodeFixesAtPosition(target[p]);
17
17
  case 'getDefinitionAndBoundSpan':
18
- return getDefinitionAndBoundSpan(ts, language, languageService, vueOptions, target[p]);
18
+ return getDefinitionAndBoundSpan(ts, language, asScriptId, languageService, vueOptions, target[p]);
19
19
  }
20
20
  };
21
21
  return new Proxy(languageService, {
@@ -36,7 +36,7 @@ function createVueLanguageServiceProxy(ts, language, languageService, vueOptions
36
36
  },
37
37
  });
38
38
  }
39
- function getCompletionsAtPosition(ts, language, vueOptions, getCompletionsAtPosition) {
39
+ function getCompletionsAtPosition(ts, language, asScriptId, vueOptions, getCompletionsAtPosition) {
40
40
  return (filePath, position, options, formattingSettings) => {
41
41
  const fileName = filePath.replace(windowsPathReg, '/');
42
42
  const result = getCompletionsAtPosition(fileName, position, options, formattingSettings);
@@ -45,7 +45,7 @@ function getCompletionsAtPosition(ts, language, vueOptions, getCompletionsAtPosi
45
45
  result.entries = result.entries.filter(entry => !entry.name.includes('__VLS_')
46
46
  && !entry.labelDetails?.description?.includes('__VLS_'));
47
47
  // filter global variables in template and styles
48
- const sourceScript = language.scripts.get(fileName);
48
+ const sourceScript = language.scripts.get(asScriptId(fileName));
49
49
  const root = sourceScript?.generated?.root;
50
50
  if (root instanceof language_core_1.VueVirtualCode) {
51
51
  const blocks = [
@@ -153,14 +153,14 @@ function getCodeFixesAtPosition(getCodeFixesAtPosition) {
153
153
  return result;
154
154
  };
155
155
  }
156
- function getDefinitionAndBoundSpan(ts, language, languageService, vueOptions, getDefinitionAndBoundSpan) {
156
+ function getDefinitionAndBoundSpan(ts, language, asScriptId, languageService, vueOptions, getDefinitionAndBoundSpan) {
157
157
  return (fileName, position) => {
158
158
  const result = getDefinitionAndBoundSpan(fileName, position);
159
159
  if (!result?.definitions?.length) {
160
160
  return result;
161
161
  }
162
162
  const program = languageService.getProgram();
163
- const sourceScript = language.scripts.get(fileName);
163
+ const sourceScript = language.scripts.get(asScriptId(fileName));
164
164
  if (!sourceScript?.generated) {
165
165
  return result;
166
166
  }
@@ -1,8 +1,9 @@
1
- import type { RequestContext } from './types';
1
+ import { type Language, type SourceScript, type VueVirtualCode } from '@vue/language-core';
2
+ import type * as ts from 'typescript';
2
3
  interface ExtractPropsInfo {
3
4
  name: string;
4
5
  type: string;
5
6
  model: boolean;
6
7
  }
7
- export declare function collectExtractProps(this: RequestContext, fileName: string, templateCodeRange: [number, number]): ExtractPropsInfo[];
8
+ export declare function collectExtractProps(ts: typeof import('typescript'), language: Language, program: ts.Program, sourceScript: SourceScript, virtualCode: VueVirtualCode, templateCodeRange: [number, number]): ExtractPropsInfo[];
8
9
  export {};
@@ -2,20 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.collectExtractProps = collectExtractProps;
4
4
  const language_core_1 = require("@vue/language-core");
5
- function collectExtractProps(fileName, templateCodeRange) {
6
- const { typescript: ts, languageService, language } = this;
7
- const sourceScript = language.scripts.get(fileName);
8
- const root = sourceScript?.generated?.root;
9
- if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
10
- return [];
11
- }
5
+ function collectExtractProps(ts, language, program, sourceScript, virtualCode, templateCodeRange) {
12
6
  const result = new Map();
13
- const program = languageService.getProgram();
14
- const sourceFile = program.getSourceFile(fileName);
7
+ const sourceFile = program.getSourceFile(virtualCode.fileName);
15
8
  const checker = program.getTypeChecker();
16
- const script = sourceScript.generated.languagePlugin.typescript?.getServiceScript(root);
17
- const maps = script ? [...language.maps.forEach(script.code)].map(([, map]) => map) : [];
18
- const { sfc } = root;
9
+ const serviceScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(virtualCode);
10
+ const maps = serviceScript ? [...language.maps.forEach(serviceScript.code)].map(([, map]) => map) : [];
11
+ const { sfc } = virtualCode;
19
12
  sourceFile.forEachChild(function visit(node) {
20
13
  if (ts.isPropertyAccessExpression(node)
21
14
  && ts.isIdentifier(node.expression)
@@ -1,2 +1,2 @@
1
- import type { RequestContext } from './types';
2
- export declare function getComponentDirectives(this: RequestContext, fileName: string): string[];
1
+ import type * as ts from 'typescript';
2
+ export declare function getComponentDirectives(ts: typeof import('typescript'), program: ts.Program, fileName: string): string[];
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getComponentDirectives = getComponentDirectives;
4
- const language_core_1 = require("@vue/language-core");
5
4
  const utils_1 = require("./utils");
6
5
  const builtInDirectives = new Set([
7
6
  'vBind',
@@ -11,14 +10,8 @@ const builtInDirectives = new Set([
11
10
  'vShow',
12
11
  'vSlot',
13
12
  ]);
14
- function getComponentDirectives(fileName) {
15
- const { typescript: ts, language, languageService } = this;
16
- const sourceScript = language.scripts.get(fileName);
17
- const root = sourceScript?.generated?.root;
18
- if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
19
- return [];
20
- }
21
- const directives = (0, utils_1.getVariableType)(ts, languageService, root, '__VLS_directives');
13
+ function getComponentDirectives(ts, program, fileName) {
14
+ const directives = (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_directives');
22
15
  if (!directives) {
23
16
  return [];
24
17
  }
@@ -1,2 +1,2 @@
1
- import type { RequestContext } from './types';
2
- export declare function getComponentEvents(this: RequestContext, fileName: string, tag: string): string[];
1
+ import type * as ts from 'typescript';
2
+ export declare function getComponentEvents(ts: typeof import('typescript'), program: ts.Program, fileName: string, tag: string): string[];
@@ -1,22 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getComponentEvents = getComponentEvents;
4
- const language_core_1 = require("@vue/language-core");
5
4
  const utils_1 = require("./utils");
6
- function getComponentEvents(fileName, tag) {
7
- const { typescript: ts, language, languageService } = this;
8
- const sourceScript = language.scripts.get(fileName);
9
- const root = sourceScript?.generated?.root;
10
- if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
11
- return [];
12
- }
13
- const program = languageService.getProgram();
5
+ function getComponentEvents(ts, program, fileName, tag) {
14
6
  const checker = program.getTypeChecker();
15
- const components = (0, utils_1.getVariableType)(ts, languageService, root, '__VLS_components');
7
+ const components = (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_components');
16
8
  if (!components) {
17
9
  return [];
18
10
  }
19
- const componentType = (0, utils_1.getComponentType)(ts, languageService, root, components, fileName, tag);
11
+ const componentType = (0, utils_1.getComponentType)(ts, program, fileName, components, tag);
20
12
  if (!componentType) {
21
13
  return [];
22
14
  }
@@ -1,2 +1,2 @@
1
- import type { RequestContext } from './types';
2
- export declare function getComponentNames(this: RequestContext, fileName: string): string[];
1
+ import type * as ts from 'typescript';
2
+ export declare function getComponentNames(ts: typeof import('typescript'), program: ts.Program, fileName: string): string[];
@@ -1,16 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getComponentNames = getComponentNames;
4
- const language_core_1 = require("@vue/language-core");
5
4
  const utils_1 = require("./utils");
6
- function getComponentNames(fileName) {
7
- const { typescript: ts, language, languageService } = this;
8
- const sourceScript = language.scripts.get(fileName);
9
- const root = sourceScript?.generated?.root;
10
- if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
11
- return [];
12
- }
13
- const names = (0, utils_1.getVariableType)(ts, languageService, root, '__VLS_components')
5
+ function getComponentNames(ts, program, fileName) {
6
+ const names = (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_components')
14
7
  ?.type
15
8
  ?.getProperties()
16
9
  .map(c => c.name)
@@ -1,4 +1,4 @@
1
- import type { RequestContext } from './types';
1
+ import type * as ts from 'typescript';
2
2
  export interface ComponentPropInfo {
3
3
  name: string;
4
4
  required?: boolean;
@@ -7,4 +7,4 @@ export interface ComponentPropInfo {
7
7
  documentation?: string;
8
8
  values?: string[];
9
9
  }
10
- export declare function getComponentProps(this: RequestContext, fileName: string, tag: string): ComponentPropInfo[];
10
+ export declare function getComponentProps(ts: typeof import('typescript'), program: ts.Program, fileName: string, tag: string): ComponentPropInfo[];
@@ -1,25 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getComponentProps = getComponentProps;
4
- const language_core_1 = require("@vue/language-core");
5
4
  const utils_1 = require("./utils");
6
- function getComponentProps(fileName, tag) {
7
- const { typescript: ts, language, languageService } = this;
8
- const sourceScript = language.scripts.get(fileName);
9
- const root = sourceScript?.generated?.root;
10
- if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
11
- return [];
12
- }
13
- const components = (0, utils_1.getVariableType)(ts, languageService, root, '__VLS_components');
5
+ function getComponentProps(ts, program, fileName, tag) {
6
+ const components = (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_components');
14
7
  if (!components) {
15
8
  return [];
16
9
  }
17
- const componentType = (0, utils_1.getComponentType)(ts, languageService, root, components, fileName, tag);
10
+ const componentType = (0, utils_1.getComponentType)(ts, program, fileName, components, tag);
18
11
  if (!componentType) {
19
12
  return [];
20
13
  }
21
14
  const result = new Map();
22
- const program = languageService.getProgram();
23
15
  const checker = program.getTypeChecker();
24
16
  for (const sig of componentType.getCallSignatures()) {
25
17
  const propParam = sig.parameters[0];
@@ -1,2 +1,3 @@
1
- import type { RequestContext } from './types';
2
- export declare function getComponentSlots(this: RequestContext, fileName: string): string[];
1
+ import { type VueVirtualCode } from '@vue/language-core';
2
+ import type * as ts from 'typescript';
3
+ export declare function getComponentSlots(ts: typeof import('typescript'), program: ts.Program, virtualCode: VueVirtualCode): string[];
@@ -3,19 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getComponentSlots = getComponentSlots;
4
4
  const language_core_1 = require("@vue/language-core");
5
5
  const utils_1 = require("./utils");
6
- function getComponentSlots(fileName) {
7
- const { typescript: ts, language, languageService } = this;
8
- const sourceScript = language.scripts.get(fileName);
9
- const root = sourceScript?.generated?.root;
10
- if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
11
- return [];
12
- }
13
- const codegen = language_core_1.tsCodegen.get(root.sfc);
6
+ function getComponentSlots(ts, program, virtualCode) {
7
+ const codegen = language_core_1.tsCodegen.get(virtualCode.sfc);
14
8
  if (!codegen) {
15
9
  return [];
16
10
  }
17
11
  const assignName = codegen.getSetupSlotsAssignName() ?? `__VLS_slots`;
18
- const slots = (0, utils_1.getVariableType)(ts, languageService, root, assignName);
12
+ const slots = (0, utils_1.getVariableType)(ts, program, virtualCode.fileName, assignName);
19
13
  if (!slots) {
20
14
  return [];
21
15
  }
@@ -1,2 +1,2 @@
1
- import type { RequestContext } from './types';
2
- export declare function getElementAttrs(this: RequestContext, fileName: string, tagName: string): string[];
1
+ import type * as ts from 'typescript';
2
+ export declare function getElementAttrs(ts: typeof import('typescript'), program: ts.Program, fileName: string, tag: string): string[];
@@ -1,22 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getElementAttrs = getElementAttrs;
4
- const language_core_1 = require("@vue/language-core");
5
4
  const utils_1 = require("./utils");
6
- function getElementAttrs(fileName, tagName) {
7
- const { typescript: ts, language, languageService } = this;
8
- const sourceScript = language.scripts.get(fileName);
9
- const root = sourceScript?.generated?.root;
10
- if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
11
- return [];
12
- }
13
- const program = languageService.getProgram();
5
+ function getElementAttrs(ts, program, fileName, tag) {
14
6
  const checker = program.getTypeChecker();
15
- const elements = (0, utils_1.getVariableType)(ts, languageService, root, '__VLS_elements');
7
+ const elements = (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_elements');
16
8
  if (!elements) {
17
9
  return [];
18
10
  }
19
- const elementType = elements.type.getProperty(tagName);
11
+ const elementType = elements.type.getProperty(tag);
20
12
  if (!elementType) {
21
13
  return [];
22
14
  }
@@ -1,2 +1,2 @@
1
- import type { RequestContext } from './types';
2
- export declare function getElementNames(this: RequestContext, fileName: string): string[];
1
+ import type * as ts from 'typescript';
2
+ export declare function getElementNames(ts: typeof import('typescript'), program: ts.Program, fileName: string): string[];
@@ -1,16 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getElementNames = getElementNames;
4
- const language_core_1 = require("@vue/language-core");
5
4
  const utils_1 = require("./utils");
6
- function getElementNames(fileName) {
7
- const { typescript: ts, language, languageService } = this;
8
- const sourceScript = language.scripts.get(fileName);
9
- const root = sourceScript?.generated?.root;
10
- if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
11
- return [];
12
- }
13
- return (0, utils_1.getVariableType)(ts, languageService, root, '__VLS_elements')
5
+ function getElementNames(ts, program, fileName) {
6
+ return (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_elements')
14
7
  ?.type
15
8
  ?.getProperties()
16
9
  .map(c => c.name)
@@ -1,5 +1,4 @@
1
1
  import type * as ts from 'typescript';
2
- import type { RequestContext } from './types';
3
- export declare function getImportPathForFile(this: RequestContext, fileName: string, incomingFileName: string, preferences: ts.UserPreferences): {
2
+ export declare function getImportPathForFile(ts: typeof import('typescript'), languageServiceHost: ts.LanguageServiceHost, program: ts.Program, fileName: string, incomingFileName: string, preferences: ts.UserPreferences): {
4
3
  path?: string;
5
4
  };
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getImportPathForFile = getImportPathForFile;
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);
4
+ function getImportPathForFile(ts, languageServiceHost, program, fileName, incomingFileName, preferences) {
5
+ const incomingFile = program.getSourceFile(incomingFileName);
6
+ const sourceFile = program.getSourceFile(fileName);
9
7
  if (!program || !sourceFile || !incomingFile) {
10
8
  return {};
11
9
  }
@@ -1,2 +1,3 @@
1
- import type { RequestContext } from './types';
2
- export declare function getPropertiesAtLocation(this: RequestContext, fileName: string, position: number): string[];
1
+ import { type Language, type SourceScript, type VueVirtualCode } from '@vue/language-core';
2
+ import type * as ts from 'typescript';
3
+ export declare function getPropertiesAtLocation(ts: typeof import('typescript'), language: Language, program: ts.Program, sourceScript: SourceScript, virtualCode: VueVirtualCode, position: number): string[];
@@ -3,15 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.getPropertiesAtLocation = getPropertiesAtLocation;
5
5
  const language_core_1 = require("@vue/language-core");
6
- function getPropertiesAtLocation(fileName, position) {
7
- const { languageService, language, typescript: ts } = this;
8
- // mapping
9
- const sourceScript = language.scripts.get(fileName);
10
- const root = sourceScript?.generated?.root;
11
- if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
12
- return [];
13
- }
14
- const virtualScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(root);
6
+ function getPropertiesAtLocation(ts, language, program, sourceScript, virtualCode, position) {
7
+ const virtualScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(virtualCode);
15
8
  if (!virtualScript) {
16
9
  return [];
17
10
  }
@@ -32,8 +25,7 @@ function getPropertiesAtLocation(fileName, position) {
32
25
  return [];
33
26
  }
34
27
  position += sourceScript.snapshot.getLength();
35
- const program = languageService.getProgram();
36
- const sourceFile = program.getSourceFile(fileName);
28
+ const sourceFile = program.getSourceFile(virtualCode.fileName);
37
29
  if (!sourceFile) {
38
30
  return [];
39
31
  }
@@ -1,19 +1,18 @@
1
1
  import type * as ts from 'typescript';
2
- type Request<T extends (...args: any) => any> = (...args: Parameters<T>) => MaybePromise<ReturnType<T> | null | undefined>;
3
- type MaybePromise<T> = T | Promise<T>;
2
+ type Response<T> = T | null | undefined | Promise<T | null | undefined>;
4
3
  export interface Requests {
5
- collectExtractProps: Request<typeof import('./collectExtractProps.js')['collectExtractProps']>;
6
- getImportPathForFile: Request<typeof import('./getImportPathForFile.js')['getImportPathForFile']>;
7
- getPropertiesAtLocation: Request<typeof import('./getPropertiesAtLocation.js')['getPropertiesAtLocation']>;
8
- getComponentDirectives: Request<typeof import('./getComponentDirectives.js')['getComponentDirectives']>;
9
- getComponentEvents: Request<typeof import('./getComponentEvents.js')['getComponentEvents']>;
10
- getComponentNames: Request<typeof import('./getComponentNames.js')['getComponentNames']>;
11
- getComponentProps: Request<typeof import('./getComponentProps.js')['getComponentProps']>;
12
- getComponentSlots: Request<typeof import('./getComponentSlots.js')['getComponentSlots']>;
13
- getElementAttrs: Request<typeof import('./getElementAttrs.js')['getElementAttrs']>;
14
- getElementNames: Request<typeof import('./getElementNames.js')['getElementNames']>;
15
- getDocumentHighlights: Request<(fileName: string, position: number) => ts.DocumentHighlights[]>;
16
- getEncodedSemanticClassifications: Request<(fileName: string, span: ts.TextSpan) => ts.Classifications>;
17
- getQuickInfoAtPosition: Request<(fileName: string, position: ts.LineAndCharacter) => string>;
4
+ collectExtractProps(fileName: string, templateCodeRange: [number, number]): Response<ReturnType<typeof import('./collectExtractProps.js')['collectExtractProps']>>;
5
+ getImportPathForFile(fileName: string, incomingFileName: string, preferences: ts.UserPreferences): Response<ReturnType<typeof import('./getImportPathForFile.js')['getImportPathForFile']>>;
6
+ getPropertiesAtLocation(fileName: string, position: number): Response<ReturnType<typeof import('./getPropertiesAtLocation.js')['getPropertiesAtLocation']>>;
7
+ getComponentDirectives(fileName: string): Response<ReturnType<typeof import('./getComponentDirectives.js')['getComponentDirectives']>>;
8
+ getComponentEvents(fileName: string, tag: string): Response<ReturnType<typeof import('./getComponentEvents.js')['getComponentEvents']>>;
9
+ getComponentNames(fileName: string): Response<ReturnType<typeof import('./getComponentNames.js')['getComponentNames']>>;
10
+ getComponentProps(fileName: string, tag: string): Response<ReturnType<typeof import('./getComponentProps.js')['getComponentProps']>>;
11
+ getComponentSlots(fileName: string): Response<ReturnType<typeof import('./getComponentSlots.js')['getComponentSlots']>>;
12
+ getElementAttrs(fileName: string, tag: string): Response<ReturnType<typeof import('./getElementAttrs.js')['getElementAttrs']>>;
13
+ getElementNames(fileName: string): Response<ReturnType<typeof import('./getElementNames.js')['getElementNames']>>;
14
+ getDocumentHighlights(fileName: string, position: number): Response<ts.DocumentHighlights[]>;
15
+ getEncodedSemanticClassifications(fileName: string, span: ts.TextSpan): Response<ts.Classifications>;
16
+ getQuickInfoAtPosition(fileName: string, position: ts.LineAndCharacter): Response<string>;
18
17
  }
19
18
  export {};
@@ -1,8 +1,7 @@
1
- import type { VueVirtualCode } from '@vue/language-core';
2
1
  import type * as ts from 'typescript';
3
- export declare function getComponentType(ts: typeof import('typescript'), languageService: ts.LanguageService, vueCode: VueVirtualCode, components: NonNullable<ReturnType<typeof getVariableType>>, fileName: string, tag: string): ts.Type | undefined;
2
+ export declare function getComponentType(ts: typeof import('typescript'), program: ts.Program, fileName: string, components: NonNullable<ReturnType<typeof getVariableType>>, tag: string): ts.Type | undefined;
4
3
  export declare function getSelfComponentName(fileName: string): Capitalize<string>;
5
- export declare function getVariableType(ts: typeof import('typescript'), languageService: ts.LanguageService, vueCode: VueVirtualCode, name: string): {
4
+ export declare function getVariableType(ts: typeof import('typescript'), program: ts.Program, fileName: string, name: string): {
6
5
  node: ts.Node;
7
6
  type: ts.Type;
8
7
  } | undefined;
@@ -5,8 +5,7 @@ exports.getSelfComponentName = getSelfComponentName;
5
5
  exports.getVariableType = getVariableType;
6
6
  const shared_1 = require("@vue/shared");
7
7
  const path = require("path-browserify");
8
- function getComponentType(ts, languageService, vueCode, components, fileName, tag) {
9
- const program = languageService.getProgram();
8
+ function getComponentType(ts, program, fileName, components, tag) {
10
9
  const checker = program.getTypeChecker();
11
10
  const name = tag.split('.');
12
11
  let componentSymbol = components.type.getProperty(name[0])
@@ -16,7 +15,7 @@ function getComponentType(ts, languageService, vueCode, components, fileName, ta
16
15
  if (!componentSymbol) {
17
16
  const name = getSelfComponentName(fileName);
18
17
  if (name === (0, shared_1.capitalize)((0, shared_1.camelize)(tag))) {
19
- componentType = getVariableType(ts, languageService, vueCode, '__VLS_self')?.type;
18
+ componentType = getVariableType(ts, program, fileName, '__VLS_self')?.type;
20
19
  }
21
20
  }
22
21
  else {
@@ -34,9 +33,8 @@ function getSelfComponentName(fileName) {
34
33
  const baseName = path.basename(fileName);
35
34
  return (0, shared_1.capitalize)((0, shared_1.camelize)(baseName.slice(0, baseName.lastIndexOf('.'))));
36
35
  }
37
- function getVariableType(ts, languageService, vueCode, name) {
38
- const program = languageService.getProgram();
39
- const tsSourceFile = program.getSourceFile(vueCode.fileName);
36
+ function getVariableType(ts, program, fileName, name) {
37
+ const tsSourceFile = program.getSourceFile(fileName);
40
38
  if (tsSourceFile) {
41
39
  const checker = program.getTypeChecker();
42
40
  const node = searchVariableDeclarationNode(ts, tsSourceFile, name);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue/typescript-plugin",
3
- "version": "3.0.6",
3
+ "version": "3.0.7-alpha.0",
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.0.6",
17
+ "@vue/language-core": "3.0.7-alpha.0",
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": "59f8cde8a5148e54294868104312b2b0f4c30d1e"
25
+ "gitHead": "a66f2330b5aa6f811f571159245c46af0c36c534"
26
26
  }