beesbuild
Version:
构建工具链
65 lines (64 loc) • 2.04 kB
JavaScript
import {
createParsedCommandLine,
createVueLanguagePlugin,
getAllExtensions
} from "@vue/language-core";
import { mergeWith } from "lodash-unified";
import { existsSync, mkdirSync } from "fs-extra";
import { runTsc } from "@volar/typescript/lib/quickstart/runTsc";
import { handleTypeOption } from "./utils.mjs";
function runVueTsc(ctx, _options) {
const { outRootDir, compilerOptions, tsConfigFilePath, rootDir } = handleTypeOption(ctx);
const extensionsChangedException = new Error("extensions changed");
const windowsPathReg = /\\/g;
let runExtensions = [".vue"];
const tscPath = require.resolve("typescript/lib/tsc");
runTsc(tscPath, runExtensions, (ts, options) => {
const { configFilePath = tsConfigFilePath } = options.options;
const config = createParsedCommandLine(
ts,
ts.sys,
configFilePath.replace(windowsPathReg, "/")
);
const vueOptions = config.vueOptions;
console.log(config.options);
const allExtensions = getAllExtensions(vueOptions);
const mergeCompilerOptions = mergeWith(
compilerOptions,
options.options,
config.options,
{
noEmit: false,
project: configFilePath,
rootDir,
outDir: outRootDir
}
);
console.log(mergeCompilerOptions, "vueOptions");
if (runExtensions.length === allExtensions.length && runExtensions.every((ext) => allExtensions.includes(ext))) {
const vueLanguagePlugin = createVueLanguagePlugin(
ts,
mergeCompilerOptions,
vueOptions,
(id) => id
);
return { languagePlugins: [vueLanguagePlugin] };
} else {
runExtensions = allExtensions;
throw extensionsChangedException;
}
});
}
function vueTsc(ctx, _options) {
const { output, typesCacheDir } = handleTypeOption(ctx);
const declarationDir = typesCacheDir != null ? typesCacheDir : output.path;
if (!existsSync(declarationDir)) {
mkdirSync(declarationDir, {
recursive: true
});
}
runVueTsc(ctx);
}
export {
vueTsc
};