Socket
Socket
Sign inDemoInstall

@vue/language-core

Package Overview
Dependencies
Maintainers
1
Versions
81
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@vue/language-core - npm Package Compare versions

Comparing version 1.8.6 to 1.8.7

9

out/generators/script.js

@@ -274,5 +274,5 @@ "use strict";

codes.push('(\n');
codes.push(`__VLS_props: typeof __VLS_setup['props']`, `& import('${vueCompilerOptions.lib}').VNodeProps`, `& import('${vueCompilerOptions.lib}').AllowedComponentProps`, `& import('${vueCompilerOptions.lib}').ComponentCustomProps,\n`);
codes.push(`__VLS_ctx?: Pick<typeof __VLS_setup, 'attrs' | 'emit' | 'slots'>,\n`);
codes.push('__VLS_setup = (() => {\n');
codes.push(`__VLS_props: Awaited<typeof __VLS_setup>['props']`, `& import('${vueCompilerOptions.lib}').VNodeProps`, `& import('${vueCompilerOptions.lib}').AllowedComponentProps`, `& import('${vueCompilerOptions.lib}').ComponentCustomProps,\n`);
codes.push(`__VLS_ctx?: Pick<Awaited<typeof __VLS_setup>, 'attrs' | 'emit' | 'slots'>,\n`);
codes.push('__VLS_setup = (async () => {\n');
scriptSetupGeneratedOffset = generateSetupFunction(true, 'none', definePropMirrors);

@@ -344,2 +344,3 @@ //#region exposed

addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.slotsTypeArg.start, scriptSetupRanges.slotsTypeArg.end);
codes.push('>');
}

@@ -372,3 +373,3 @@ codes.push(`;\n`);

codes.push('})(),\n');
codes.push(`) => ({} as import('${vueCompilerOptions.lib}').VNode & { __ctx?: typeof __VLS_setup }))`);
codes.push(`) => ({} as import('${vueCompilerOptions.lib}').VNode & { __ctx?: Awaited<typeof __VLS_setup> }))`);
}

@@ -375,0 +376,0 @@ else if (!sfc.script) {

@@ -11,3 +11,4 @@ export * from './generators/template';

export * as sharedTypes from './utils/globalTypes';
export { tsCodegen } from './plugins/vue-tsx';
export * from '@volar/language-core';
export * from '@volar/source-map';

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

Object.defineProperty(exports, "__esModule", { value: true });
exports.sharedTypes = exports.scriptRanges = void 0;
exports.tsCodegen = exports.sharedTypes = exports.scriptRanges = void 0;
__exportStar(require("./generators/template"), exports);

@@ -29,4 +29,6 @@ __exportStar(require("./languageModule"), exports);

exports.sharedTypes = require("./utils/globalTypes");
var vue_tsx_1 = require("./plugins/vue-tsx");
Object.defineProperty(exports, "tsCodegen", { enumerable: true, get: function () { return vue_tsx_1.tsCodegen; } });
__exportStar(require("@volar/language-core"), exports);
__exportStar(require("@volar/source-map"), exports);
//# sourceMappingURL=index.js.map

@@ -5,3 +5,6 @@ import type { Language } from '@volar/language-core';

import type * as ts from 'typescript/lib/tsserverlibrary';
export declare function createLanguage(compilerOptions?: ts.CompilerOptions, _vueCompilerOptions?: Partial<VueCompilerOptions>, ts?: typeof import('typescript/lib/tsserverlibrary'), codegenStack?: boolean): Language<VueFile>;
export declare function createVueLanguage(ts: typeof import('typescript/lib/tsserverlibrary'), compilerOptions?: ts.CompilerOptions, _vueCompilerOptions?: Partial<VueCompilerOptions>, codegenStack?: boolean): Language<VueFile>;
/**
* @deprecated planed to remove in 2.0, please use getOrCreateVueLanguage instead of
*/
export declare function createLanguages(compilerOptions?: ts.CompilerOptions, vueCompilerOptions?: Partial<VueCompilerOptions>, ts?: typeof import('typescript/lib/tsserverlibrary'), codegenStack?: boolean): Language[];
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createLanguages = exports.createLanguage = void 0;
exports.createLanguages = exports.createVueLanguage = void 0;
const path_1 = require("path");

@@ -9,6 +9,30 @@ const plugins_1 = require("./plugins");

const ts_1 = require("./utils/ts");
function createLanguage(compilerOptions = {}, _vueCompilerOptions = {}, ts = require('typescript'), codegenStack = false) {
const fileRegistries = [];
function getVueFileRegistry(key, plugins) {
let fileRegistry = fileRegistries.find(r => r.key === key
&& r.plugins.length === plugins.length
&& r.plugins.every(plugin => plugins.includes(plugin)))?.files;
if (!fileRegistry) {
fileRegistry = new Map();
fileRegistries.push({
key: key,
plugins: plugins,
files: fileRegistry,
});
}
return fileRegistry;
}
function createVueLanguage(ts, compilerOptions = {}, _vueCompilerOptions = {}, codegenStack = false) {
const vueCompilerOptions = (0, ts_1.resolveVueCompilerOptions)(_vueCompilerOptions);
patchResolveModuleNames(ts, vueCompilerOptions);
const vueLanguagePlugin = (0, plugins_1.getDefaultVueLanguagePlugins)(ts, compilerOptions, vueCompilerOptions, codegenStack);
const plugins = (0, plugins_1.getDefaultVueLanguagePlugins)(ts, compilerOptions, vueCompilerOptions, codegenStack);
const keys = [
...Object.keys(vueCompilerOptions)
.sort()
.filter(key => key !== 'plugins')
.map(key => [key, vueCompilerOptions[key]]),
[...new Set(plugins.map(plugin => plugin.requiredCompilerOptions ?? []).flat())]
.sort()
.map(key => [key, compilerOptions[key]]),
];
const fileRegistry = getVueFileRegistry(JSON.stringify(keys), _vueCompilerOptions.plugins ?? []);
const allowLanguageIds = new Set(['vue']);

@@ -21,7 +45,14 @@ if (vueCompilerOptions.extensions.includes('.md')) {

}
const languageModule = {
return {
createVirtualFile(fileName, snapshot, languageId) {
if ((languageId && allowLanguageIds.has(languageId))
|| (!languageId && vueCompilerOptions.extensions.some(ext => fileName.endsWith(ext)))) {
return new sourceFile_1.VueFile(fileName, snapshot, vueCompilerOptions, vueLanguagePlugin, ts, codegenStack);
if (fileRegistry.has(fileName)) {
const reusedVueFile = fileRegistry.get(fileName);
reusedVueFile.update(snapshot);
return reusedVueFile;
}
const vueFile = new sourceFile_1.VueFile(fileName, snapshot, vueCompilerOptions, plugins, ts, codegenStack);
fileRegistry.set(fileName, vueFile);
return vueFile;
}

@@ -37,2 +68,8 @@ },

...host,
resolveModuleName(moduleName, impliedNodeFormat) {
if (impliedNodeFormat === ts.ModuleKind.ESNext && vueCompilerOptions.extensions.some(ext => moduleName.endsWith(ext))) {
return `${moduleName}.js`;
}
return host.resolveModuleName?.(moduleName, impliedNodeFormat) ?? moduleName;
},
getScriptFileNames() {

@@ -53,8 +90,10 @@ return [

};
return languageModule;
}
exports.createLanguage = createLanguage;
exports.createVueLanguage = createVueLanguage;
/**
* @deprecated planed to remove in 2.0, please use getOrCreateVueLanguage instead of
*/
function createLanguages(compilerOptions = {}, vueCompilerOptions = {}, ts = require('typescript'), codegenStack = false) {
return [
createLanguage(compilerOptions, vueCompilerOptions, ts, codegenStack),
createVueLanguage(ts, compilerOptions, vueCompilerOptions, codegenStack),
...vueCompilerOptions.experimentalAdditionalLanguageModules?.map(module => require(module)) ?? [],

@@ -64,20 +103,2 @@ ];

exports.createLanguages = createLanguages;
function patchResolveModuleNames(ts, vueCompilerOptions) {
try {
// from https://github.com/vuejs/language-tools/pull/1543
if (!(ts.__vuePatchResolveModuleNames)) {
ts.__vuePatchResolveModuleNames = true;
const resolveModuleNames = ts.resolveModuleName;
ts.resolveModuleName = (...args) => {
if (args[6] === ts.ModuleKind.ESNext && vueCompilerOptions.extensions.some(ext => args[0].endsWith(ext))) {
args[6] = ts.ModuleKind.CommonJS;
}
return resolveModuleNames(...args);
};
}
}
catch (e) {
// console.warn('[volar] patchResolveModuleNames failed', e);
}
}
//# sourceMappingURL=languageModule.js.map

@@ -8,2 +8,3 @@ import type * as ts from 'typescript/lib/tsserverlibrary';

order?: number | undefined;
requiredCompilerOptions?: string[] | undefined;
parseSFC?(fileName: string, content: string): import("@vue/compiler-sfc").SFCParseResult | undefined;

@@ -10,0 +11,0 @@ updateSFC?(oldResult: import("@vue/compiler-sfc").SFCParseResult, textChange: {

@@ -1,3 +0,58 @@

import { VueLanguagePlugin } from '../types';
import { Sfc, VueLanguagePlugin } from '../types';
import * as muggle from 'muggle-string';
import * as ts from 'typescript/lib/tsserverlibrary';
export declare const tsCodegen: WeakMap<Sfc, {
scriptRanges: import("@vue/reactivity").ComputedRef<{
exportDefault: (import("../types").TextRange & {
expression: import("../types").TextRange;
args: import("../types").TextRange;
argsNode: ts.ObjectLiteralExpression | undefined;
componentsOption: import("../types").TextRange | undefined;
componentsOptionNode: ts.ObjectLiteralExpression | undefined;
nameOption: import("../types").TextRange | undefined;
}) | undefined;
bindings: import("../types").TextRange[];
} | undefined>;
scriptSetupRanges: import("@vue/reactivity").ComputedRef<{
leadingCommentEndOffset: number;
importSectionEndOffset: number;
bindings: import("../types").TextRange[];
withDefaultsArg: import("../types").TextRange | undefined;
defineProps: import("../types").TextRange | undefined;
propsAssignName: string | undefined;
propsRuntimeArg: import("../types").TextRange | undefined;
propsTypeArg: import("../types").TextRange | undefined;
slotsTypeArg: import("../types").TextRange | undefined;
emitsAssignName: string | undefined;
emitsRuntimeArg: import("../types").TextRange | undefined;
emitsTypeArg: import("../types").TextRange | undefined;
emitsTypeNums: number;
exposeRuntimeArg: import("../types").TextRange | undefined;
defineProp: {
name: import("../types").TextRange | undefined;
nameIsString: boolean;
type: import("../types").TextRange | undefined;
defaultValue: import("../types").TextRange | undefined;
required: boolean;
}[];
} | undefined>;
lang: import("@vue/reactivity").ComputedRef<string>;
tsxGen: import("@vue/reactivity").ComputedRef<{
codes: muggle.Segment<import("@volar/language-core").FileRangeCapabilities>[];
codeStacks: muggle.StackNode[];
mirrorBehaviorMappings: import("@volar/source-map").Mapping<[import("@volar/language-core").MirrorBehaviorCapabilities, import("@volar/language-core").MirrorBehaviorCapabilities]>[];
}>;
htmlGen: import("@vue/reactivity").ComputedRef<{
codes: (string | [string, string | undefined, number | [number, number], import("@volar/language-core").FileRangeCapabilities])[];
codeStacks: muggle.StackNode[];
formatCodes: (string | [string, string | undefined, number | [number, number], import("@volar/language-core").FileRangeCapabilities])[];
formatCodeStacks: muggle.StackNode[];
cssCodes: (string | [string, string | undefined, number | [number, number], import("@volar/language-core").FileRangeCapabilities])[];
cssCodeStacks: muggle.StackNode[];
tagNames: Record<string, number[]>;
identifiers: Set<string>;
hasSlot: boolean;
} | undefined>;
}>;
declare const plugin: VueLanguagePlugin;
export default plugin;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.tsCodegen = void 0;
const reactivity_1 = require("@vue/reactivity");

@@ -10,9 +11,13 @@ const script_1 = require("../generators/script");

const muggle = require("muggle-string");
const ts = require("typescript/lib/tsserverlibrary");
const templateFormatReg = /^\.template_format\.ts$/;
const templateStyleCssReg = /^\.template_style\.css$/;
const plugin = ({ modules, vueCompilerOptions, compilerOptions, codegenStack }) => {
const ts = modules.typescript;
const instances = new WeakMap();
exports.tsCodegen = new WeakMap();
const plugin = (ctx) => {
return {
version: 1,
requiredCompilerOptions: [
'noPropertyAccessFromIndexSignature',
'exactOptionalPropertyTypes',
],
getEmbeddedFileNames(fileName, sfc) {

@@ -43,3 +48,3 @@ const tsx = useTsx(fileName, sfc);

if (tsx) {
const [content, contentStacks] = codegenStack ? muggle.track([...tsx.codes], [...tsx.codeStacks]) : [[...tsx.codes], [...tsx.codeStacks]];
const [content, contentStacks] = ctx.codegenStack ? muggle.track([...tsx.codes], [...tsx.codeStacks]) : [[...tsx.codes], [...tsx.codeStacks]];
embeddedFile.content = content;

@@ -61,3 +66,3 @@ embeddedFile.contentStacks = contentStacks;

if (_tsx.htmlGen.value) {
const [content, contentStacks] = codegenStack ? muggle.track([..._tsx.htmlGen.value.formatCodes], [..._tsx.htmlGen.value.formatCodeStacks]) : [[..._tsx.htmlGen.value.formatCodes], [..._tsx.htmlGen.value.formatCodeStacks]];
const [content, contentStacks] = ctx.codegenStack ? muggle.track([..._tsx.htmlGen.value.formatCodes], [..._tsx.htmlGen.value.formatCodeStacks]) : [[..._tsx.htmlGen.value.formatCodes], [..._tsx.htmlGen.value.formatCodeStacks]];
embeddedFile.content = content;

@@ -83,3 +88,3 @@ embeddedFile.contentStacks = contentStacks;

if (_tsx.htmlGen.value) {
const [content, contentStacks] = codegenStack ? muggle.track([..._tsx.htmlGen.value.cssCodes], [..._tsx.htmlGen.value.cssCodeStacks]) : [[..._tsx.htmlGen.value.cssCodes], [..._tsx.htmlGen.value.cssCodeStacks]];
const [content, contentStacks] = ctx.codegenStack ? muggle.track([..._tsx.htmlGen.value.cssCodes], [..._tsx.htmlGen.value.cssCodeStacks]) : [[..._tsx.htmlGen.value.cssCodes], [..._tsx.htmlGen.value.cssCodeStacks]];
embeddedFile.content = content;

@@ -94,38 +99,40 @@ embeddedFile.contentStacks = contentStacks;

function useTsx(fileName, sfc) {
if (!instances.has(sfc)) {
instances.set(sfc, createTsx(fileName, sfc));
if (!exports.tsCodegen.has(sfc)) {
exports.tsCodegen.set(sfc, createTsx(fileName, sfc, ctx));
}
return instances.get(sfc);
return exports.tsCodegen.get(sfc);
}
function createTsx(fileName, _sfc) {
const lang = (0, reactivity_1.computed)(() => {
return !_sfc.script && !_sfc.scriptSetup ? 'ts'
: _sfc.scriptSetup && _sfc.scriptSetup.lang !== 'js' ? _sfc.scriptSetup.lang
: _sfc.script && _sfc.script.lang !== 'js' ? _sfc.script.lang
: 'js';
});
const scriptRanges = (0, reactivity_1.computed)(() => _sfc.scriptAst
? (0, scriptRanges_1.parseScriptRanges)(ts, _sfc.scriptAst, !!_sfc.scriptSetup, false)
: undefined);
const scriptSetupRanges = (0, reactivity_1.computed)(() => _sfc.scriptSetupAst
? (0, scriptSetupRanges_1.parseScriptSetupRanges)(ts, _sfc.scriptSetupAst, vueCompilerOptions)
: undefined);
const htmlGen = (0, reactivity_1.computed)(() => {
if (!_sfc.templateAst)
return;
return templateGen.generate(ts, compilerOptions, vueCompilerOptions, _sfc.template?.content ?? '', _sfc.template?.lang ?? 'html', _sfc, hasScriptSetupSlots.value, codegenStack);
});
const hasScriptSetupSlots = (0, reactivity_1.shallowRef)(false); // remove when https://github.com/vuejs/core/pull/5912 merged
const tsxGen = (0, reactivity_1.computed)(() => {
hasScriptSetupSlots.value = !!scriptSetupRanges.value?.slotsTypeArg;
return (0, script_1.generate)(ts, fileName, _sfc, lang.value, scriptRanges.value, scriptSetupRanges.value, htmlGen.value, compilerOptions, vueCompilerOptions, codegenStack);
});
return {
lang,
tsxGen,
htmlGen,
};
}
};
exports.default = plugin;
function createTsx(fileName, _sfc, { vueCompilerOptions, compilerOptions, codegenStack }) {
const lang = (0, reactivity_1.computed)(() => {
return !_sfc.script && !_sfc.scriptSetup ? 'ts'
: _sfc.scriptSetup && _sfc.scriptSetup.lang !== 'js' ? _sfc.scriptSetup.lang
: _sfc.script && _sfc.script.lang !== 'js' ? _sfc.script.lang
: 'js';
});
const scriptRanges = (0, reactivity_1.computed)(() => _sfc.scriptAst
? (0, scriptRanges_1.parseScriptRanges)(ts, _sfc.scriptAst, !!_sfc.scriptSetup, false)
: undefined);
const scriptSetupRanges = (0, reactivity_1.computed)(() => _sfc.scriptSetupAst
? (0, scriptSetupRanges_1.parseScriptSetupRanges)(ts, _sfc.scriptSetupAst, vueCompilerOptions)
: undefined);
const htmlGen = (0, reactivity_1.computed)(() => {
if (!_sfc.templateAst)
return;
return templateGen.generate(ts, compilerOptions, vueCompilerOptions, _sfc.template?.content ?? '', _sfc.template?.lang ?? 'html', _sfc, hasScriptSetupSlots.value, codegenStack);
});
const hasScriptSetupSlots = (0, reactivity_1.shallowRef)(false); // remove when https://github.com/vuejs/core/pull/5912 merged
const tsxGen = (0, reactivity_1.computed)(() => {
hasScriptSetupSlots.value = !!scriptSetupRanges.value?.slotsTypeArg;
return (0, script_1.generate)(ts, fileName, _sfc, lang.value, scriptRanges.value, scriptSetupRanges.value, htmlGen.value, compilerOptions, vueCompilerOptions, codegenStack);
});
return {
scriptRanges,
scriptSetupRanges,
lang,
tsxGen,
htmlGen,
};
}
//# sourceMappingURL=vue-tsx.js.map

@@ -70,2 +70,3 @@ import { FileCapabilities, VirtualFile, FileKind, FileRangeCapabilities, MirrorBehaviorCapabilities } from '@volar/language-core';

update(newScriptSnapshot: ts.IScriptSnapshot): void;
onUpdate(): void;
parseSfc(): SFCParseResult | undefined;

@@ -72,0 +73,0 @@ parseTemplateBlock(block: SFCTemplateBlock): NonNullable<Sfc['template']>;

@@ -334,6 +334,11 @@ "use strict";

});
this.update(snapshot);
this.onUpdate();
}
update(newScriptSnapshot) {
if (newScriptSnapshot === this.snapshot)
return;
this.snapshot = newScriptSnapshot;
this.onUpdate();
}
onUpdate() {
const parsedSfc = this.parseSfc();

@@ -340,0 +345,0 @@ updateObj(this.sfc, {

@@ -48,2 +48,3 @@ import type { SFCParseResult } from '@vue/compiler-sfc';

order?: number;
requiredCompilerOptions?: string[];
parseSFC?(fileName: string, content: string): SFCParseResult | undefined;

@@ -50,0 +51,0 @@ updateSFC?(oldResult: SFCParseResult, textChange: {

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

}
else if (ts.isArrowFunction(node)) {
else if (ts.isArrowFunction(node) || ts.isFunctionExpression(node)) {
const functionArgs = [];

@@ -112,0 +112,0 @@ for (const param of node.parameters) {

{
"name": "@vue/language-core",
"version": "1.8.6",
"version": "1.8.7",
"main": "out/index.js",

@@ -16,4 +16,4 @@ "license": "MIT",

"dependencies": {
"@volar/language-core": "~1.9.0",
"@volar/source-map": "~1.9.0",
"@volar/language-core": "~1.10.0",
"@volar/source-map": "~1.10.0",
"@vue/compiler-dom": "^3.3.0",

@@ -38,3 +38,3 @@ "@vue/reactivity": "^3.3.0",

},
"gitHead": "9da8afee02bc7251ae97716480ba31f8aff2794a"
"gitHead": "2b888901897fc9155bc12eb30ddae41afed5d942"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc