@borduhh/avro-typescript-generator
Version:
Converts AVRO schemas to Typescript types
41 lines (40 loc) • 1.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertAvroCli = void 0;
const file_1 = require("./utils/file");
const cli_1 = require("./utils/cli");
const promises_1 = require("fs/promises");
const avro_ts_1 = require("@ovotech/avro-ts");
const convertAvroCli = async () => {
const cliArguments = (0, cli_1.retrieveCLIArguments)();
const config = {
inputs: cliArguments.input,
outputDir: (0, cli_1.validateOutputDir)(cliArguments.outputDir),
};
try {
const schemaFilepaths = (await Promise.all(config.inputs.map((inputGlob) => (0, file_1.retrieveFilesFromGlob)(inputGlob)))).reduce((all, files) => all.concat(files), []);
const typeOutput = await Promise.all(schemaFilepaths.map((filepath) => new Promise(async (resolve, reject) => {
try {
const data = await (0, promises_1.readFile)(filepath);
resolve({
path: filepath,
types: (0, avro_ts_1.toTypeScript)(JSON.parse(data.toString())),
});
}
catch (err) {
reject(err);
}
})));
typeOutput.forEach(async (typeData) => {
await (0, promises_1.mkdir)(config.outputDir, {
recursive: true,
});
await (0, promises_1.writeFile)(`${config.outputDir}/${(0, file_1.retrieveFileNameFromPath)(typeData.path)}.d.ts`, typeData.types);
});
}
catch (err) {
console.error(err);
return;
}
};
exports.convertAvroCli = convertAvroCli;