limgen
Version:
Infrastructure as Code generator
137 lines (136 loc) • 4.79 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.renderIndex = exports.collectInput = exports.inputs = exports.dependsOn = void 0;
exports.default = fullstackAWSProject;
const ejs_1 = __importDefault(require("ejs"));
const path_1 = __importDefault(require("path"));
const prompts_1 = __importDefault(require("prompts"));
const promises_1 = __importDefault(require("fs/promises"));
const schema_1 = require("../../schema");
const files_1 = require("../../files");
const dependsOn = (opts) => __awaiter(void 0, void 0, void 0, function* () {
const files = [
'components/app-fargate.ts',
'components/cdn-cloudfront.ts',
'components/lb-alb-public.ts',
'components/vpc-public.ts',
'utils/deep-merge.ts',
'utils/prefixed.ts',
];
const packages = [
'@pulumi/aws',
'@pulumi/awsx',
'@pulumi/pulumi',
];
if (opts.includeStorage) {
files.push('components/storage-s3.ts');
}
if (opts.includeDb) {
files.push('components/db-postgres-rds.ts');
packages.push('@pulumi/random');
}
return {
files,
packages,
};
});
exports.dependsOn = dependsOn;
const inputs = () => __awaiter(void 0, void 0, void 0, function* () {
return [
{
name: 'includeStorage',
message: 'Include storage',
schema: (0, schema_1.cliBoolean)(),
},
{
name: 'includeDb',
message: 'Include a database',
schema: (0, schema_1.cliBoolean)(),
},
{
name: 'port',
message: 'Port to expose',
schema: (0, schema_1.cliInteger)().optional().default('3000'),
}
];
});
exports.inputs = inputs;
const collectInput = (cmdArgs, projectInputs) => __awaiter(void 0, void 0, void 0, function* () {
let includeStorage;
if (projectInputs.includeStorage === 'unknown') {
const answer = yield (0, prompts_1.default)({
type: 'confirm',
name: 'includeStorage',
message: 'Include storage?',
initial: true,
});
projectInputs.includeStorage = answer.includeStorage;
}
else {
includeStorage = projectInputs.includeStorage === 'true';
}
let includeDb;
if (projectInputs.includeDb === 'unknown') {
const answer = yield (0, prompts_1.default)({
type: 'confirm',
name: 'includeDb',
message: 'Include a database?',
initial: true,
});
includeDb = answer.includeDb;
}
else {
includeDb = projectInputs.includeDb === 'true';
}
return {
includeStorage,
includeDb,
port: projectInputs.port,
};
});
exports.collectInput = collectInput;
function fullstackAWSProject(inputs) {
return __awaiter(this, void 0, void 0, function* () {
const [indexContents] = yield Promise.all([
(0, exports.renderIndex)(inputs),
updateDockerignore(),
]);
return indexContents;
});
}
const updateDockerignore = () => __awaiter(void 0, void 0, void 0, function* () {
if (yield (0, files_1.fileExists)('.dockerignore')) {
// see if infrastructure is already in the .dockerignore file
const dockerignore = yield promises_1.default.readFile('.dockerignore', 'utf-8');
if (!dockerignore.includes('infrastructure')) {
yield promises_1.default.appendFile('.dockerignore', '\ninfrastructure\n');
}
}
else {
yield promises_1.default.writeFile('.dockerignore', `
Dockerfile
.dockerignore
node_modules
npm-debug.log
README.md
.next
.git
infrastructure/`.trim());
}
});
const renderIndex = (inputs) => __awaiter(void 0, void 0, void 0, function* () {
return ejs_1.default.renderFile(path_1.default.join(__dirname, 'template.ejs.t'), inputs);
});
exports.renderIndex = renderIndex;