typed-aws
Version:
Helps you write AWS CloudFormation in TypeScript
55 lines (54 loc) • 2.49 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const parser_1 = require("./generator/parser");
const generate_1 = require("./generator/generate");
const codegen_1 = require("./generator/codegen");
const utils_1 = require("./generator/utils");
const file_manager_1 = require("./generator/file-manager");
async function parseAndGenerateCode({ specs, file, fileManager, }) {
try {
const schemas = await (0, parser_1.parseSchemaFile)(file);
const modules = (0, codegen_1.createModels)(schemas, specs);
const resources = (0, codegen_1.getAllResources)(modules);
await (0, generate_1.exportResources)(resources, fileManager);
}
catch (e) {
console.error('Failed to generate schema for', file, 'Error:', e);
throw e;
}
}
async function generateAll({ files, fileManager, resources, specsFile, }) {
const specs = await (0, parser_1.parseSpecs)(specsFile);
await Promise.all(files.map((file) => parseAndGenerateCode({ file, fileManager, specs })));
const modules = (0, utils_1.groupByArray)(resources, (r) => r.module);
await Promise.all(modules.map((module) => (0, generate_1.generateModuleIndex)(module, fileManager)));
await (0, generate_1.generateIndex)(modules, fileManager);
}
async function main() {
const region = 'us-west-1';
const schemasDir = __dirname + `/../tmp/schemas/${region}/`;
const specsFile = __dirname + `/../tmp/specs/${region}.json`;
const outputDir = __dirname + '/../types/resources/';
const resources = [];
const fileManager = new file_manager_1.FileManager({
cwd: __dirname,
schemasDir,
outputDir,
write: async (directory, filename, source) => {
if (!fs_1.default.existsSync(directory)) {
fs_1.default.mkdirSync(directory, { recursive: true });
}
return fs_1.default.promises.writeFile(path_1.default.join(directory, filename), source);
},
onResourceWrite: (resource) => resources.push(resource),
});
const files = await fileManager.listSchemaFiles();
console.log(`Generating types for ${files.length} schemas`);
await generateAll({ files, fileManager, resources, specsFile });
}
main();