数通智联化工云平台
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

"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