Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@vue/typescript-plugin

Package Overview
Dependencies
Maintainers
2
Versions
92
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@vue/typescript-plugin - npm Package Compare versions

Comparing version
3.2.7
to
3.2.8
+5
-5
index.js

@@ -56,3 +56,3 @@ "use strict";

let _language;
(0, common_1.preprocessLanguageService)(info.languageService, () => _language);
info.languageService = (0, common_1.preprocessLanguageService)(info.languageService, () => _language);
return {

@@ -223,5 +223,5 @@ languagePlugins: [languagePlugin],

session.addProtocolHandler('_vue:getElementAttrs', request => {
const [fileName, tag] = request.arguments;
const [fileName, ...args] = request.arguments;
const { program } = getProject(fileName);
return createResponse((0, getElementAttrs_1.getElementAttrs)(ts, program, fileName, tag));
return createResponse((0, getElementAttrs_1.getElementAttrs)(ts, program, fileName, ...args));
});

@@ -234,4 +234,4 @@ session.addProtocolHandler('_vue:getElementNames', request => {

session.addProtocolHandler('_vue:resolveModuleName', request => {
const [fileName, moduleName] = request.arguments;
return createResponse((0, resolveModuleName_1.resolveModuleName)(ts, info.languageServiceHost, fileName, moduleName));
const [fileName, ...args] = request.arguments;
return createResponse((0, resolveModuleName_1.resolveModuleName)(ts, info.languageServiceHost, fileName, ...args));
});

@@ -238,0 +238,0 @@ projectService.logger.info('Vue specific commands are successfully added.');

import { type Language, type VueCompilerOptions } from '@vue/language-core';
import type * as ts from 'typescript';
export declare function preprocessLanguageService(languageService: ts.LanguageService, getLanguage: () => Language<any> | undefined): void;
export declare function preprocessLanguageService(languageService: ts.LanguageService, getLanguage: () => Language<any> | undefined): ts.LanguageService;
export declare function postprocessLanguageService<T>(ts: typeof import('typescript'), language: Language<T>, languageService: ts.LanguageService, vueOptions: VueCompilerOptions, asScriptId: (fileName: string) => T): ts.LanguageService;

@@ -5,0 +5,0 @@ export declare function resolveCompletionResult<T>(ts: typeof import('typescript'), language: Language<T>, asScriptId: (fileName: string) => T, vueOptions: VueCompilerOptions, fileName: string, position: number, result: ts.CompletionInfo): void;

@@ -13,89 +13,121 @@ "use strict";

function preprocessLanguageService(languageService, getLanguage) {
const { getQuickInfoAtPosition, getSuggestionDiagnostics, getCompletionsAtPosition, getCodeFixesAtPosition, findRenameLocations, } = languageService;
languageService.getQuickInfoAtPosition = (fileName, position, ...rests) => {
const result = getQuickInfoAtPosition(fileName, position, ...rests);
if (!result || result.tags?.length) {
return result;
const proxyCache = new Map();
const getProxyMethod = (target, p) => {
switch (p) {
case 'getQuickInfoAtPosition':
return getQuickInfoAtPosition(target[p]);
case 'getCompletionsAtPosition':
return getCompletionsAtPosition(target[p]);
case 'getSuggestionDiagnostics':
return getSuggestionDiagnostics(target[p]);
case 'getCodeFixesAtPosition':
return getCodeFixesAtPosition(target[p]);
case 'findRenameLocations':
return findRenameLocations(target[p]);
}
const language = getLanguage();
if (!language) {
return result;
}
const [serviceScript, , sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
if (!serviceScript || !(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode)) {
return result;
}
const codegen = language_core_1.tsCodegen.get(sourceScript.generated.root.sfc);
const leadingOffset = sourceScript.snapshot.getLength();
for (const sourceRange of (0, transform_1.toSourceRanges)(sourceScript, language, serviceScript, result.textSpan.start, result.textSpan.start + result.textSpan.length, true, () => true)) {
const generateRange2 = (0, transform_1.toGeneratedRange)(language, serviceScript, sourceScript, sourceRange[1], sourceRange[2], (data) => !!data.__importCompletion);
if (generateRange2 !== undefined) {
const variableName = serviceScript.code.snapshot.getText(generateRange2[0] - leadingOffset, generateRange2[1] - leadingOffset);
if (codegen?.getSetupExposed().has(variableName)) {
const extraInfo = getQuickInfoAtPosition(fileName, generateRange2[0], ...rests);
result.tags = extraInfo?.tags;
}
};
return new Proxy(languageService, {
get(target, p, receiver) {
if (!proxyCache.has(p)) {
proxyCache.set(p, getProxyMethod(target, p));
}
}
return result;
};
languageService.getSuggestionDiagnostics = (fileName, ...rests) => {
const result = getSuggestionDiagnostics(fileName, ...rests);
const language = getLanguage();
if (!language) {
return result;
}
const [serviceScript, , sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
if (!serviceScript || !(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode)) {
return result;
}
const codegen = language_core_1.tsCodegen.get(sourceScript.generated.root.sfc);
const leadingOffset = sourceScript.snapshot.getLength();
for (const diagnostic of result) {
for (const sourceRange of (0, transform_1.toSourceRanges)(sourceScript, language, serviceScript, diagnostic.start, diagnostic.start + diagnostic.length, true, (data) => !!data.__importCompletion)) {
const generateRange2 = (0, transform_1.toGeneratedRange)(language, serviceScript, sourceScript, sourceRange[1], sourceRange[2], (data) => !data.__importCompletion);
const proxyMethod = proxyCache.get(p);
if (proxyMethod) {
return proxyMethod;
}
return Reflect.get(target, p, receiver);
},
});
function getQuickInfoAtPosition(getQuickInfoAtPosition) {
return (fileName, position, ...rests) => {
const result = getQuickInfoAtPosition(fileName, position, ...rests);
if (!result || result.tags?.length) {
return result;
}
const language = getLanguage();
if (!language) {
return result;
}
const [serviceScript, , sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
if (!serviceScript || !(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode)) {
return result;
}
const codegen = language_core_1.tsCodegen.get(sourceScript.generated.root.sfc);
const leadingOffset = sourceScript.snapshot.getLength();
for (const sourceRange of (0, transform_1.toSourceRanges)(sourceScript, language, serviceScript, result.textSpan.start, result.textSpan.start + result.textSpan.length, true, () => true)) {
const generateRange2 = (0, transform_1.toGeneratedRange)(language, serviceScript, sourceScript, sourceRange[1], sourceRange[2], (data) => !!data.__importCompletion);
if (generateRange2 !== undefined) {
const variableName = serviceScript.code.snapshot.getText(generateRange2[0] - leadingOffset, generateRange2[1] - leadingOffset);
if (codegen?.getSetupExposed().has(variableName)) {
diagnostic.start = generateRange2[0];
diagnostic.length = generateRange2[1] - generateRange2[0];
break;
const extraInfo = getQuickInfoAtPosition(fileName, generateRange2[0], ...rests);
result.tags = extraInfo?.tags;
}
}
}
}
return result;
};
languageService.getCompletionsAtPosition = (fileName, position, ...rests) => {
const result = getCompletionsAtPosition(fileName, position, ...rests);
if (!result) {
return result;
}
const language = getLanguage();
if (!language) {
return result;
}
const [serviceScript, _targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
if (!serviceScript || !(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode)) {
return result;
}
for (const sourceOffset of (0, transform_1.toSourceOffsets)(sourceScript, language, serviceScript, position, () => true)) {
const generatedOffset2 = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, sourceOffset[1], (data) => !!data.__importCompletion);
if (generatedOffset2 !== undefined) {
const completion2 = getCompletionsAtPosition(fileName, generatedOffset2, ...rests);
if (completion2) {
const nameToIndex = new Map(result.entries.map((entry, index) => [entry.name, index]));
for (const entry of completion2.entries) {
if (entry.kind === 'warning') {
continue;
}
if (nameToIndex.has(entry.name)) {
const index = nameToIndex.get(entry.name);
const existingEntry = result.entries[index];
if (existingEntry.kind === 'warning') {
result.entries[index] = entry;
};
}
function getCompletionsAtPosition(getCompletionsAtPosition) {
return (fileName, position, ...rests) => {
const result = getCompletionsAtPosition(fileName, position, ...rests);
if (!result) {
return result;
}
const language = getLanguage();
if (!language) {
return result;
}
const [serviceScript, _targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
if (!serviceScript || !(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode)) {
return result;
}
for (const sourceOffset of (0, transform_1.toSourceOffsets)(sourceScript, language, serviceScript, position, () => true)) {
const generatedOffset2 = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, sourceOffset[1], (data) => !!data.__importCompletion);
if (generatedOffset2 !== undefined) {
const completion2 = getCompletionsAtPosition(fileName, generatedOffset2, ...rests);
if (completion2) {
const nameToIndex = new Map(result.entries.map((entry, index) => [entry.name, index]));
for (const entry of completion2.entries) {
if (entry.kind === 'warning') {
continue;
}
if (nameToIndex.has(entry.name)) {
const index = nameToIndex.get(entry.name);
const existingEntry = result.entries[index];
if (existingEntry.kind === 'warning') {
result.entries[index] = entry;
}
}
else {
result.entries.push(entry);
}
}
else {
result.entries.push(entry);
}
}
}
return result;
};
}
function getSuggestionDiagnostics(getSuggestionDiagnostics) {
return (fileName, ...rests) => {
const result = getSuggestionDiagnostics(fileName, ...rests);
const language = getLanguage();
if (!language) {
return result;
}
const [serviceScript, , sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
if (!serviceScript || !(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode)) {
return result;
}
const codegen = language_core_1.tsCodegen.get(sourceScript.generated.root.sfc);
const leadingOffset = sourceScript.snapshot.getLength();
for (const diagnostic of result) {
for (const sourceRange of (0, transform_1.toSourceRanges)(sourceScript, language, serviceScript, diagnostic.start, diagnostic.start + diagnostic.length, true, (data) => !!data.__importCompletion)) {
const generateRange2 = (0, transform_1.toGeneratedRange)(language, serviceScript, sourceScript, sourceRange[1], sourceRange[2], (data) => !data.__importCompletion);
if (generateRange2 !== undefined) {
const variableName = serviceScript.code.snapshot.getText(generateRange2[0] - leadingOffset, generateRange2[1] - leadingOffset);
if (codegen?.getSetupExposed().has(variableName)) {
diagnostic.start = generateRange2[0];
diagnostic.length = generateRange2[1] - generateRange2[0];
break;
}

@@ -105,92 +137,96 @@ }

}
}
return result;
};
languageService.getCodeFixesAtPosition = (fileName, start, end, errorCodes, ...rests) => {
let result = getCodeFixesAtPosition(fileName, start, end, errorCodes, ...rests);
// Property 'xxx' does not exist on type 'yyy'.ts(2339)
if (!errorCodes.includes(2339)) {
return result;
}
const language = getLanguage();
if (!language) {
return result;
}
const [serviceScript, _targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
if (!serviceScript || !(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode)) {
return result;
}
for (const sourceRange of (0, transform_1.toSourceRanges)(sourceScript, language, serviceScript, start, end, true, () => true)) {
const generateRange2 = (0, transform_1.toGeneratedRange)(language, serviceScript, sourceScript, sourceRange[1], sourceRange[2], (data) => !!data.__importCompletion);
if (generateRange2 !== undefined) {
let importFixes = getCodeFixesAtPosition(fileName, generateRange2[0], generateRange2[1], [2304], // Cannot find name 'xxx'.ts(2304)
...rests);
importFixes = importFixes.filter(fix => fix.fixName === 'import');
result = result.concat(importFixes);
};
}
function getCodeFixesAtPosition(getCodeFixesAtPosition) {
return (fileName, start, end, errorCodes, ...rests) => {
let result = getCodeFixesAtPosition(fileName, start, end, errorCodes, ...rests);
// Property 'xxx' does not exist on type 'yyy'.ts(2339)
if (!errorCodes.includes(2339)) {
return result;
}
}
return result;
};
languageService.findRenameLocations = (fileName, position, ...rests) => {
// @ts-expect-error
const result = findRenameLocations(fileName, position, ...rests);
if (!result?.length) {
return result;
}
const language = getLanguage();
if (!language) {
return result;
}
const [serviceScript, _targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
if (!serviceScript || !(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode)) {
return result;
}
const map = language.maps.get(serviceScript.code, sourceScript);
const leadingOffset = sourceScript.snapshot.getLength();
const isShorthand = (data) => !!data.__shorthandExpression;
// { foo: __VLS_ctx.foo }
// ^^^ ^^^
// if the rename is triggered directly on the shorthand,
// skip the entire request on the generated property name
if ([...map.toSourceLocation(position - leadingOffset, isShorthand)].length === 0) {
for (const [offset] of map.toSourceLocation(position - leadingOffset, () => true)) {
for (const _ of map.toGeneratedLocation(offset, isShorthand)) {
return;
const language = getLanguage();
if (!language) {
return result;
}
const [serviceScript, _targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
if (!serviceScript || !(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode)) {
return result;
}
for (const sourceRange of (0, transform_1.toSourceRanges)(sourceScript, language, serviceScript, start, end, true, () => true)) {
const generateRange2 = (0, transform_1.toGeneratedRange)(language, serviceScript, sourceScript, sourceRange[1], sourceRange[2], (data) => !!data.__importCompletion);
if (generateRange2 !== undefined) {
let importFixes = getCodeFixesAtPosition(fileName, generateRange2[0], generateRange2[1], [2304], // Cannot find name 'xxx'.ts(2304)
...rests);
importFixes = importFixes.filter(fix => fix.fixName === 'import');
result = result.concat(importFixes);
}
}
}
const preferAlias = typeof rests[2] === 'boolean'
? rests[2]
: rests[2]?.providePrefixAndSuffixTextForRename ?? true;
if (!preferAlias) {
return result;
}
const locations = [...result];
outer: for (let i = 0; i < locations.length; i++) {
const { textSpan } = locations[i];
const generatedLeft = textSpan.start - leadingOffset;
const generatedRight = textSpan.start + textSpan.length - leadingOffset;
};
}
function findRenameLocations(findRenameLocations) {
return (fileName, position, ...rests) => {
// @ts-expect-error
const result = findRenameLocations(fileName, position, ...rests);
if (!result?.length) {
return result;
}
const language = getLanguage();
if (!language) {
return result;
}
const [serviceScript, _targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
if (!serviceScript || !(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode)) {
return result;
}
const map = language.maps.get(serviceScript.code, sourceScript);
const leadingOffset = sourceScript.snapshot.getLength();
const isShorthand = (data) => !!data.__shorthandExpression;
// { foo: __VLS_ctx.foo }
// ^^^
for (const [start, end, { data }] of map.toSourceRange(generatedLeft, generatedRight, true, isShorthand)) {
locations.splice(i, 1, {
...locations[i],
...getPrefixAndSuffixForShorthandRename(data.__shorthandExpression, 'right', sourceScript.snapshot.getText(start, end)),
});
continue outer;
// ^^^ ^^^
// if the rename is triggered directly on the shorthand,
// skip the entire request on the generated property name
if ([...map.toSourceLocation(position - leadingOffset, isShorthand)].length === 0) {
for (const [offset] of map.toSourceLocation(position - leadingOffset, () => true)) {
for (const _ of map.toGeneratedLocation(offset, isShorthand)) {
return;
}
}
}
// { foo: __VLS_ctx.foo }
// ^^^
for (const [start, end] of map.toSourceRange(generatedLeft, generatedRight, true, () => true)) {
for (const [, , { data }] of map.toGeneratedRange(start, end, true, isShorthand)) {
const preferAlias = typeof rests[2] === 'boolean'
? rests[2]
: rests[2]?.providePrefixAndSuffixTextForRename ?? true;
if (!preferAlias) {
return result;
}
const locations = [...result];
outer: for (let i = 0; i < locations.length; i++) {
const { textSpan } = locations[i];
const generatedLeft = textSpan.start - leadingOffset;
const generatedRight = textSpan.start + textSpan.length - leadingOffset;
// { foo: __VLS_ctx.foo }
// ^^^
for (const [start, end, { data }] of map.toSourceRange(generatedLeft, generatedRight, true, isShorthand)) {
locations.splice(i, 1, {
...locations[i],
...getPrefixAndSuffixForShorthandRename(data.__shorthandExpression, 'left', sourceScript.snapshot.getText(start, end)),
...getPrefixAndSuffixForShorthandRename(data.__shorthandExpression, 'right', sourceScript.snapshot.getText(start, end)),
});
continue outer;
}
// { foo: __VLS_ctx.foo }
// ^^^
for (const [start, end] of map.toSourceRange(generatedLeft, generatedRight, true, () => true)) {
for (const [, , { data }] of map.toGeneratedRange(start, end, true, isShorthand)) {
locations.splice(i, 1, {
...locations[i],
...getPrefixAndSuffixForShorthandRename(data.__shorthandExpression, 'left', sourceScript.snapshot.getText(start, end)),
});
continue outer;
}
}
}
}
return locations;
};
return locations;
};
}
}

@@ -251,5 +287,2 @@ function getPrefixAndSuffixForShorthandRename(type, target, originalText) {

},
set(target, p, value, receiver) {
return Reflect.set(target, p, value, receiver);
},
});

@@ -256,0 +289,0 @@ function findReferences(findReferences) {

@@ -14,3 +14,3 @@ import type * as ts from 'typescript';

getElementNames(fileName: string): Response<ReturnType<typeof import('./getElementNames.js')['getElementNames']>>;
resolveModuleName(fileName: string, moduleName: string): Response<ReturnType<typeof import('./resolveModuleName.js')['resolveModuleName']>>;
resolveModuleName(fileName: string, moduleName: string, allowNonExistent?: boolean): Response<ReturnType<typeof import('./resolveModuleName.js')['resolveModuleName']>>;
getDocumentHighlights(fileName: string, position: number): Response<ts.DocumentHighlights[]>;

@@ -17,0 +17,0 @@ getEncodedSemanticClassifications(fileName: string, span: ts.TextSpan): Response<ts.Classifications>;

import type * as ts from 'typescript';
export declare function resolveModuleName(ts: typeof import('typescript'), languageServiceHost: ts.LanguageServiceHost, fileName: string, moduleName: string): string | undefined;
export declare function resolveModuleName(ts: typeof import('typescript'), languageServiceHost: ts.LanguageServiceHost, fileName: string, moduleName: string, allowNonExistent?: boolean): string | undefined;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.resolveModuleName = resolveModuleName;
function resolveModuleName(ts, languageServiceHost, fileName, moduleName) {
const path_browserify_1 = require("path-browserify");
function resolveModuleName(ts, languageServiceHost, fileName, moduleName, allowNonExistent) {
const compilerOptions = languageServiceHost.getCompilationSettings();

@@ -12,10 +13,16 @@ const ext = moduleName.split('.').pop();

fileExists(fileName) {
fileName = transformFileName(fileName, ext);
return languageServiceHost.fileExists(fileName);
return languageServiceHost.fileExists(transformFileName(fileName, ext));
},
readFile: languageServiceHost.readFile.bind(languageServiceHost),
});
const resolveFileName = result.resolvedModule?.resolvedFileName;
if (resolveFileName) {
return transformFileName(resolveFileName, ext);
const resolved = result.resolvedModule?.resolvedFileName;
if (resolved) {
return transformFileName(resolved, ext);
}
if (allowNonExistent && 'failedLookupLocations' in result) {
const alternative = result.failedLookupLocations?.[0];
if (alternative) {
return path_browserify_1.posix.join(alternative, '..', path_browserify_1.posix.basename(moduleName));
}
}
}

@@ -22,0 +29,0 @@ function transformFileName(fileName, ext) {

@@ -84,3 +84,3 @@ "use strict";

if (name === (0, shared_1.capitalize)((0, shared_1.camelize)(tag))) {
return getVariableType(ts, checker, sourceFile, language_core_1.names._export);
return getVariableType(ts, checker, sourceFile, language_core_1.names.export);
}

@@ -91,3 +91,3 @@ }

if (testNames.has(selfName)) {
return getVariableType(ts, checker, sourceFile, language_core_1.names._export);
return getVariableType(ts, checker, sourceFile, language_core_1.names.export);
}

@@ -94,0 +94,0 @@ }

{
"name": "@vue/typescript-plugin",
"version": "3.2.7",
"version": "3.2.8",
"license": "MIT",

@@ -17,6 +17,6 @@ "files": [

"@volar/typescript": "2.4.28",
"@vue/language-core": "3.2.7",
"@vue/language-core": "3.2.8",
"@vue/shared": "^3.5.0",
"path-browserify": "^1.0.1",
"vue-component-meta": "3.2.7"
"vue-component-meta": "3.2.8"
},

@@ -27,3 +27,3 @@ "devDependencies": {

},
"gitHead": "a7092edf12862f0db8e39bd2afbda3d54aa26506"
"gitHead": "618bd6bfb19729726787df7b52fccda72c888c95"
}