kist
Version:
Lightweight Package Pipeline Processor with Plugin Architecture
55 lines • 2.98 kB
JavaScript
import { __awaiter } from "tslib";
import path from "path";
import ts from "typescript";
import { Action } from "../../core/pipeline/Action.js";
export class TypeScriptCompilerAction extends Action {
execute(options) {
return __awaiter(this, void 0, void 0, function* () {
const { tsconfigPath = "tsconfig.json", filePaths, outputDir, compilerOptions = {}, } = options;
const resolvedTsconfigPath = path.resolve(tsconfigPath);
this.logInfo(`Compiling TypeScript using configuration: ${resolvedTsconfigPath}`);
try {
const parsedConfig = this.loadAndParseTsConfig(resolvedTsconfigPath);
const mergedCompilerOptions = ts.convertCompilerOptionsFromJson(compilerOptions, path.dirname(resolvedTsconfigPath)).options;
const finalCompilerOptions = Object.assign(Object.assign({}, parsedConfig.options), mergedCompilerOptions);
if (outputDir) {
mergedCompilerOptions.outDir = outputDir;
}
const program = ts.createProgram(filePaths !== null && filePaths !== void 0 ? filePaths : parsedConfig.fileNames, finalCompilerOptions);
const emitResult = program.emit();
const allDiagnostics = ts
.getPreEmitDiagnostics(program)
.concat(emitResult.diagnostics);
if (allDiagnostics.length > 0) {
allDiagnostics.forEach((diagnostic) => {
const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
this.logError(`TypeScript Error: ${message}`);
});
throw new Error("TypeScript compilation failed due to errors.");
}
this.logInfo("TypeScript compilation completed successfully.");
}
catch (error) {
this.logError("Error during TypeScript compilation:", error);
throw new Error(`TypeScript compilation failed: ${error.message}`);
}
});
}
loadAndParseTsConfig(tsconfigPath) {
const configFile = ts.readConfigFile(tsconfigPath, ts.sys.readFile);
if (configFile.error) {
throw new Error(`Error reading tsconfig.json: ${ts.flattenDiagnosticMessageText(configFile.error.messageText, "\n")}`);
}
const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(tsconfigPath));
if (parsedConfig.errors.length > 0) {
throw new Error(`Error parsing tsconfig.json: ${parsedConfig.errors
.map((diag) => ts.flattenDiagnosticMessageText(diag.messageText, "\n"))
.join("\n")}`);
}
return parsedConfig;
}
describe() {
return "Compiles TypeScript files using a given tsconfig.json configuration.";
}
}
//# sourceMappingURL=TypeScriptCompilerAction.js.map