@odata2ts/odata2ts
Version:
Flexible generator to produce various TypeScript artefacts (from simple model interfaces to complete odata clients) from OData metadata files
70 lines • 2.7 kB
JavaScript
import { __awaiter } from "tslib";
import { writeFile } from "fs/promises";
import { EmitModes } from "../OptionModel.js";
export class FileHandler {
constructor(path, fileName, file, importContainer, formatter, allowTypeChecking) {
this.path = path;
this.fileName = fileName;
this.file = file;
this.importContainer = importContainer;
this.formatter = formatter;
this.allowTypeChecking = allowTypeChecking;
}
getFullFilePath() {
return this.path ? `${this.path}/${this.fileName}` : this.fileName;
}
getFile() {
return this.file;
}
getImports() {
return this.importContainer;
}
write(emitMode, noOutput = false) {
return __awaiter(this, void 0, void 0, function* () {
this.file.addImportDeclarations(this.importContainer.getImportDeclarations());
// add ts-nocheck to beginning of each file
if (!this.allowTypeChecking) {
const stmts = this.file.addStatements((writer) => {
writer.writeLine("// @ts-nocheck");
});
stmts[0].setOrder(0);
}
if (noOutput) {
return;
}
switch (emitMode) {
case EmitModes.js:
case EmitModes.js_dts:
return this.file.emit();
case EmitModes.dts:
return this.file.emit({ emitOnlyDtsFiles: true });
case EmitModes.ts:
return this.formatAndWriteFile();
default:
throw new Error(`Emit mode "${emitMode}" is invalid!`);
}
});
}
formatAndWriteFile() {
return __awaiter(this, void 0, void 0, function* () {
const fileName = this.file.getFilePath();
const content = this.file.getFullText();
try {
const formatted = this.formatter ? yield this.formatter.format(content) : content;
try {
return writeFile(fileName, formatted);
}
catch (writeError) {
console.error(`Failed to write file [/${fileName}]`, writeError);
process.exit(3);
}
}
catch (formattingError) {
console.error("Formatting failed", formattingError);
yield writeFile("error.log", (formattingError === null || formattingError === void 0 ? void 0 : formattingError.toString()) || "no error message!");
process.exit(99);
}
});
}
}
//# sourceMappingURL=FileHandler.js.map