@vue/language-core
Advanced tools
Comparing version 2.0.4 to 2.0.5
@@ -981,3 +981,3 @@ "use strict"; | ||
offset + 1, | ||
(0, utils_1.disableAllFeatures)({ __combineLastMappping: true }), | ||
(0, utils_1.disableAllFeatures)({ __combineLastMapping: true }), | ||
]); | ||
@@ -984,0 +984,0 @@ yield _(`'`); |
@@ -5,2 +5,2 @@ import { type LanguagePlugin } from '@volar/language-core'; | ||
import { VueGeneratedCode } from './virtualFile/vueFile'; | ||
export declare function createVueLanguagePlugin(ts: typeof import('typescript'), getFileName: (fileId: string) => string, compilerOptions?: ts.CompilerOptions, _vueCompilerOptions?: Partial<VueCompilerOptions>, codegenStack?: boolean, globalTypesHolder?: string): LanguagePlugin<VueGeneratedCode>; | ||
export declare function createVueLanguagePlugin(ts: typeof import('typescript'), getFileName: (fileId: string) => string, isValidGlobalTypesHolder: (fileName: string) => boolean, compilerOptions: ts.CompilerOptions, vueCompilerOptions: VueCompilerOptions, codegenStack?: boolean): LanguagePlugin<VueGeneratedCode>; |
@@ -6,6 +6,9 @@ "use strict"; | ||
const plugins_1 = require("./plugins"); | ||
const ts_1 = require("./utils/ts"); | ||
const vueFile_1 = require("./virtualFile/vueFile"); | ||
const fileRegistries = []; | ||
function getVueFileRegistry(key, plugins) { | ||
const CompilerDOM = require("@vue/compiler-dom"); | ||
const CompilerVue2 = require("./utils/vue2TemplateCompiler"); | ||
const normalFileRegistries = []; | ||
const holderFileRegistries = []; | ||
function getVueFileRegistry(isGlobalTypesHolder, key, plugins) { | ||
const fileRegistries = isGlobalTypesHolder ? holderFileRegistries : normalFileRegistries; | ||
let fileRegistry = fileRegistries.find(r => r.key === key | ||
@@ -24,5 +27,4 @@ && r.plugins.length === plugins.length | ||
} | ||
function getFileRegistryKey(compilerOptions, vueCompilerOptions, plugins, globalTypesHolder) { | ||
function getFileRegistryKey(compilerOptions, vueCompilerOptions, plugins) { | ||
const values = [ | ||
globalTypesHolder, | ||
...Object.keys(vueCompilerOptions) | ||
@@ -38,6 +40,19 @@ .sort() | ||
} | ||
function createVueLanguagePlugin(ts, getFileName, compilerOptions = {}, _vueCompilerOptions = {}, codegenStack = false, globalTypesHolder) { | ||
const vueCompilerOptions = (0, ts_1.resolveVueCompilerOptions)(_vueCompilerOptions); | ||
function createVueLanguagePlugin(ts, getFileName, isValidGlobalTypesHolder, compilerOptions, vueCompilerOptions, codegenStack = false) { | ||
const allowLanguageIds = new Set(['vue']); | ||
const pluginContext = (0, plugins_1.createPluginContext)(ts, compilerOptions, vueCompilerOptions, codegenStack, globalTypesHolder); | ||
const pluginContext = { | ||
modules: { | ||
'@vue/compiler-dom': vueCompilerOptions.target < 3 | ||
? { | ||
...CompilerDOM, | ||
compile: CompilerVue2.compile, | ||
} | ||
: CompilerDOM, | ||
typescript: ts, | ||
}, | ||
compilerOptions, | ||
vueCompilerOptions, | ||
codegenStack, | ||
globalTypesHolder: undefined, | ||
}; | ||
const plugins = (0, plugins_1.getDefaultVueLanguagePlugins)(pluginContext); | ||
@@ -50,3 +65,2 @@ if (vueCompilerOptions.extensions.includes('.md')) { | ||
} | ||
let generatedCodeRegistry; | ||
return { | ||
@@ -56,37 +70,39 @@ createVirtualCode(fileId, languageId, snapshot) { | ||
const fileName = getFileName(fileId); | ||
if (!generatedCodeRegistry) { | ||
pluginContext.globalTypesHolder ??= fileName; | ||
generatedCodeRegistry = getVueFileRegistry(getFileRegistryKey(compilerOptions, vueCompilerOptions, plugins, pluginContext.globalTypesHolder), vueCompilerOptions.plugins); | ||
if (!pluginContext.globalTypesHolder && isValidGlobalTypesHolder(fileName)) { | ||
pluginContext.globalTypesHolder = fileName; | ||
} | ||
if (generatedCodeRegistry.has(fileId)) { | ||
const reusedResult = generatedCodeRegistry.get(fileId); | ||
reusedResult.update(snapshot); | ||
return reusedResult; | ||
const fileRegistry = getFileRegistry(pluginContext.globalTypesHolder === fileName); | ||
const code = fileRegistry.get(fileId); | ||
if (code) { | ||
code.update(snapshot); | ||
return code; | ||
} | ||
const vueFile = new vueFile_1.VueGeneratedCode(fileName, languageId, snapshot, vueCompilerOptions, plugins, ts, codegenStack); | ||
generatedCodeRegistry.set(fileId, vueFile); | ||
return vueFile; | ||
else { | ||
const code = new vueFile_1.VueGeneratedCode(fileName, languageId, snapshot, vueCompilerOptions, plugins, ts, codegenStack); | ||
fileRegistry.set(fileId, code); | ||
return code; | ||
} | ||
} | ||
}, | ||
updateVirtualCode(_fileId, vueFile, snapshot) { | ||
vueFile.update(snapshot); | ||
return vueFile; | ||
updateVirtualCode(_fileId, code, snapshot) { | ||
code.update(snapshot); | ||
return code; | ||
}, | ||
disposeVirtualCode(fileId, vueFile, files) { | ||
generatedCodeRegistry?.delete(fileId); | ||
if (vueFile.fileName === pluginContext.globalTypesHolder) { | ||
if (generatedCodeRegistry?.size) { | ||
for (const [fileName, file] of generatedCodeRegistry) { | ||
pluginContext.globalTypesHolder = fileName; | ||
generatedCodeRegistry = getVueFileRegistry(getFileRegistryKey(compilerOptions, vueCompilerOptions, plugins, pluginContext.globalTypesHolder), vueCompilerOptions.plugins); | ||
files?.set(fileId, file.languageId, | ||
disposeVirtualCode(fileId, code, files) { | ||
const isGlobalTypesHolder = code.fileName === pluginContext.globalTypesHolder; | ||
const fileRegistry = getFileRegistry(isGlobalTypesHolder); | ||
fileRegistry.delete(fileId); | ||
if (isGlobalTypesHolder) { | ||
pluginContext.globalTypesHolder = undefined; | ||
const fileRegistry2 = getFileRegistry(false); | ||
for (const [fileId, code] of fileRegistry2) { | ||
if (isValidGlobalTypesHolder(code.fileName)) { | ||
pluginContext.globalTypesHolder = code.fileName; | ||
fileRegistry2.delete(fileId); | ||
// force dirty | ||
{ ...file.snapshot }); | ||
files?.delete(fileId); | ||
files?.set(fileId, code.languageId, code.snapshot); | ||
break; | ||
} | ||
} | ||
else { | ||
generatedCodeRegistry = undefined; | ||
pluginContext.globalTypesHolder = undefined; | ||
} | ||
} | ||
@@ -117,4 +133,7 @@ }, | ||
}; | ||
function getFileRegistry(isGlobalTypesHolder) { | ||
return getVueFileRegistry(isGlobalTypesHolder, getFileRegistryKey(compilerOptions, vueCompilerOptions, plugins), vueCompilerOptions.plugins); | ||
} | ||
} | ||
exports.createVueLanguagePlugin = createVueLanguagePlugin; | ||
//# sourceMappingURL=languageModule.js.map |
@@ -1,14 +0,2 @@ | ||
import * as CompilerDOM from '@vue/compiler-dom'; | ||
import type * as ts from 'typescript'; | ||
import { type VueCompilerOptions, type VueLanguagePlugin } from './types'; | ||
export declare function createPluginContext(ts: typeof import('typescript'), compilerOptions: ts.CompilerOptions, vueCompilerOptions: VueCompilerOptions, codegenStack: boolean, globalTypesHolder: string | undefined): { | ||
modules: { | ||
typescript: typeof import("typescript"); | ||
'@vue/compiler-dom': typeof CompilerDOM; | ||
}; | ||
compilerOptions: ts.CompilerOptions; | ||
vueCompilerOptions: VueCompilerOptions; | ||
codegenStack: boolean; | ||
globalTypesHolder: string | undefined; | ||
}; | ||
import { type VueLanguagePlugin } from './types'; | ||
export declare function getDefaultVueLanguagePlugins(pluginContext: Parameters<VueLanguagePlugin>[0]): { | ||
@@ -25,9 +13,9 @@ version: 2; | ||
}): import("@vue/compiler-sfc").SFCParseResult | undefined; | ||
resolveTemplateCompilerOptions?(options: CompilerDOM.CompilerOptions): CompilerDOM.CompilerOptions; | ||
compileSFCTemplate?(lang: string, template: string, options: CompilerDOM.CompilerOptions): CompilerDOM.CodegenResult | undefined; | ||
updateSFCTemplate?(oldResult: CompilerDOM.CodegenResult, textChange: { | ||
resolveTemplateCompilerOptions?(options: import("@vue/compiler-dom").CompilerOptions): import("@vue/compiler-dom").CompilerOptions; | ||
compileSFCTemplate?(lang: string, template: string, options: import("@vue/compiler-dom").CompilerOptions): import("@vue/compiler-dom").CodegenResult | undefined; | ||
updateSFCTemplate?(oldResult: import("@vue/compiler-dom").CodegenResult, textChange: { | ||
start: number; | ||
end: number; | ||
newText: string; | ||
}): CompilerDOM.CodegenResult | undefined; | ||
}): import("@vue/compiler-dom").CodegenResult | undefined; | ||
getEmbeddedCodes?(fileName: string, sfc: import("./types").Sfc): { | ||
@@ -34,0 +22,0 @@ id: string; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.getDefaultVueLanguagePlugins = exports.createPluginContext = void 0; | ||
const CompilerDOM = require("@vue/compiler-dom"); | ||
exports.getDefaultVueLanguagePlugins = void 0; | ||
const file_html_1 = require("./plugins/file-html"); | ||
@@ -15,22 +14,2 @@ const file_md_1 = require("./plugins/file-md"); | ||
const types_1 = require("./types"); | ||
const CompilerVue2 = require("./utils/vue2TemplateCompiler"); | ||
function createPluginContext(ts, compilerOptions, vueCompilerOptions, codegenStack, globalTypesHolder) { | ||
const pluginCtx = { | ||
modules: { | ||
'@vue/compiler-dom': vueCompilerOptions.target < 3 | ||
? { | ||
...CompilerDOM, | ||
compile: CompilerVue2.compile, | ||
} | ||
: CompilerDOM, | ||
typescript: ts, | ||
}, | ||
compilerOptions, | ||
vueCompilerOptions, | ||
codegenStack, | ||
globalTypesHolder, | ||
}; | ||
return pluginCtx; | ||
} | ||
exports.createPluginContext = createPluginContext; | ||
function getDefaultVueLanguagePlugins(pluginContext) { | ||
@@ -50,3 +29,11 @@ const plugins = [ | ||
const pluginInstances = plugins | ||
.map(plugin => plugin(pluginContext)) | ||
.map(plugin => { | ||
try { | ||
return plugin(pluginContext); | ||
} | ||
catch (err) { | ||
console.warn('[Vue] Failed to create plugin', err); | ||
} | ||
}) | ||
.filter((plugin) => !!plugin) | ||
.sort((a, b) => { | ||
@@ -60,3 +47,3 @@ const aOrder = a.order ?? 0; | ||
if (!valid) { | ||
console.warn(`Plugin ${JSON.stringify(plugin.name)} API version incompatible, expected ${JSON.stringify(types_1.pluginVersion)} but got ${JSON.stringify(plugin.version)}`); | ||
console.warn(`[Vue] Plugin ${JSON.stringify(plugin.name)} API version incompatible, expected ${JSON.stringify(types_1.pluginVersion)} but got ${JSON.stringify(plugin.version)}`); | ||
} | ||
@@ -63,0 +50,0 @@ return valid; |
@@ -21,3 +21,3 @@ import type * as CompilerDOM from '@vue/compiler-dom'; | ||
}; | ||
__combineLastMappping?: boolean; | ||
__combineLastMapping?: boolean; | ||
} | ||
@@ -24,0 +24,0 @@ export type CodeAndStack = [code: Code, stack: string]; |
@@ -124,7 +124,7 @@ "use strict"; | ||
else { | ||
console.warn('Load plugin failed:', pluginPath); | ||
console.warn('[Vue] Load plugin failed:', pluginPath); | ||
} | ||
} | ||
catch (error) { | ||
console.warn('Load plugin failed:', pluginPath, error); | ||
console.warn('[Vue] Resolve plugin path failed:', pluginPath, error); | ||
} | ||
@@ -131,0 +131,0 @@ return []; |
@@ -175,3 +175,3 @@ "use strict"; | ||
} | ||
if (mapping.data.__combineLastMappping) { | ||
if (mapping.data.__combineLastMapping) { | ||
lastValidMapping.sourceOffsets.push(...mapping.sourceOffsets); | ||
@@ -189,3 +189,3 @@ lastValidMapping.generatedOffsets.push(...mapping.generatedOffsets); | ||
snapshot, | ||
mappings: mappings.filter(mapping => !mapping.data.__combineLastMappping), | ||
mappings: mappings.filter(mapping => !mapping.data.__combineLastMapping), | ||
codegenStacks: (0, language_core_1.buildStacks)(file.content, file.contentStacks), | ||
@@ -192,0 +192,0 @@ }; |
{ | ||
"name": "@vue/language-core", | ||
"version": "2.0.4", | ||
"version": "2.0.5", | ||
"license": "MIT", | ||
@@ -15,3 +15,3 @@ "files": [ | ||
"dependencies": { | ||
"@volar/language-core": "~2.1.0", | ||
"@volar/language-core": "~2.1.1", | ||
"@vue/compiler-dom": "^3.4.0", | ||
@@ -38,3 +38,3 @@ "@vue/shared": "^3.4.0", | ||
}, | ||
"gitHead": "241300968fd3084c7c09139d05691a51a7800fdc" | ||
"gitHead": "62b4fcb0d3f7153b5b2f5571af32f519117d8466" | ||
} |
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
258050
5677
Updated@volar/language-core@~2.1.1