You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.6 KiB
85 lines
3.6 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.createLanguageModules = void 0;
|
|
const path_1 = require("path");
|
|
const plugins_1 = require("./plugins");
|
|
const sourceFile_1 = require("./sourceFile");
|
|
const sharedTypes = require("./utils/directorySharedTypes");
|
|
function createLanguageModules(ts, compilerOptions, vueCompilerOptions) {
|
|
patchResolveModuleNames(ts, vueCompilerOptions);
|
|
const vueLanguagePlugin = (0, plugins_1.getDefaultVueLanguagePlugins)(ts, compilerOptions, vueCompilerOptions);
|
|
const sharedTypesSnapshot = ts.ScriptSnapshot.fromString(sharedTypes.getTypesCode(vueCompilerOptions));
|
|
const languageModule = {
|
|
createFile(fileName, snapshot, languageId) {
|
|
if (languageId === 'vue'
|
|
|| (!languageId
|
|
&& vueCompilerOptions.extensions.some(ext => fileName.endsWith(ext)))) {
|
|
return new sourceFile_1.VueFile(fileName, snapshot, ts, vueLanguagePlugin);
|
|
}
|
|
},
|
|
updateFile(sourceFile, snapshot) {
|
|
sourceFile.update(snapshot);
|
|
},
|
|
proxyLanguageServiceHost(host) {
|
|
return {
|
|
fileExists(fileName) {
|
|
const basename = path_1.posix.basename(fileName);
|
|
if (basename === sharedTypes.baseName) {
|
|
return true;
|
|
}
|
|
return host.fileExists(fileName);
|
|
},
|
|
getScriptFileNames() {
|
|
const fileNames = host.getScriptFileNames();
|
|
return [
|
|
...getSharedTypesFiles(fileNames),
|
|
...fileNames,
|
|
];
|
|
},
|
|
getScriptVersion(fileName) {
|
|
const basename = path_1.posix.basename(fileName);
|
|
if (basename === sharedTypes.baseName) {
|
|
return '';
|
|
}
|
|
return host.getScriptVersion(fileName);
|
|
},
|
|
getScriptSnapshot(fileName) {
|
|
const basename = path_1.posix.basename(fileName);
|
|
if (basename === sharedTypes.baseName) {
|
|
return sharedTypesSnapshot;
|
|
}
|
|
return host.getScriptSnapshot(fileName);
|
|
},
|
|
};
|
|
},
|
|
};
|
|
return [
|
|
languageModule,
|
|
...vueCompilerOptions.experimentalAdditionalLanguageModules?.map(module => require(module)) ?? [],
|
|
];
|
|
function getSharedTypesFiles(fileNames) {
|
|
const moduleFiles = fileNames.filter(fileName => vueCompilerOptions.extensions.some(ext => fileName.endsWith(ext)));
|
|
const moduleFileDirs = [...new Set(moduleFiles.map(path_1.posix.dirname))];
|
|
return moduleFileDirs.map(dir => path_1.posix.join(dir, sharedTypes.baseName));
|
|
}
|
|
}
|
|
exports.createLanguageModules = createLanguageModules;
|
|
function patchResolveModuleNames(ts, vueCompilerOptions) {
|
|
try {
|
|
// from https://github.com/johnsoncodehk/volar/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
|