UNPKG

typed-aws

Version:

Helps you write AWS CloudFormation in TypeScript

55 lines (54 loc) 2.49 kB
"use strict"; 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();