typed-aws
Version:
Helps you write AWS CloudFormation in TypeScript
68 lines (64 loc) • 2.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateModuleIndex = exports.generateIndex = exports.exportResources = exports.generateAndExportResource = exports.generateSource = void 0;
const format_1 = require("./format");
function generateSource(model) {
let source = '';
source += `// CloudFormation Resource ${model.mainSchema.namespace}\n`;
source += model.toString() + '\n';
return source;
}
exports.generateSource = generateSource;
async function generateAndExportResource(model, fileManager) {
//console.log(`Export ${model.module.name}/${model.name}.ts`);
let source = generateSource(model);
source = (0, format_1.formatSource)(source);
return fileManager.writeResource({
module: model.module.name,
resource: model.name,
fileName: model.name + '.ts',
source,
});
}
exports.generateAndExportResource = generateAndExportResource;
async function exportResources(resources, fileManager) {
await Promise.all(resources.map((resource) => generateAndExportResource(resource, fileManager)));
}
exports.exportResources = exportResources;
async function generateIndex(modules, fileManager) {
const names = modules.map((r) => r[0].module);
names.sort();
let source = `
${names
.map((name) => `import ${name} from './${name}';
export {${name}};
`)
.join('\n')}
export default {${names.join(', ')}};
`;
source = (0, format_1.formatSource)(source);
return fileManager.writeIndex({
fileName: 'index.ts',
source,
});
}
exports.generateIndex = generateIndex;
async function generateModuleIndex(resources, fileManager) {
const { module } = resources[0];
const names = resources.map((r) => r.resource);
names.sort();
let source = `
${names.map((name) => `import ${name}_ from './${name}';`).join('\n')}
export namespace ${module} {
${names.map((name) => `export const ${name} = ${name}_;`).join('\n')}
}
export default ${module};
`;
source = (0, format_1.formatSource)(source);
return fileManager.writeModule({
module,
fileName: 'index.ts',
source,
});
}
exports.generateModuleIndex = generateModuleIndex;