import { mkdirp } from "@/files"; import fs from "fs/promises"; import path from "path"; import ejs from "ejs"; import { BaseTemplate } from "@/templates"; class StaticSiteAwsResourceGroup extends BaseTemplate { constructor( public name: string, public directory: string ) { const dirname = path.resolve(__dirname); super(name, directory, undefined, dirname); } public data: any; public async dependsOn() { return { files: [ "components/storage-s3.ts", "components/cdn-cloudfront.ts", "utils/deep-merge.ts", "utils/prefixed.ts" ], packages: ["@pulumi/aws", "@pulumi/awsx", "@pulumi/pulumi", "zod"] }; } public scripts: Record = { "deploy-site": "bash infrastructure/scripts/deploy.sh" }; public async collectInputs(inputs: any) { if (typeof this.inputSchema === "undefined") { throw new Error("Error parsing input schema"); } this.data = this.inputSchema.parse(inputs); } public async generate() { const scriptsPath = path.join("infrastructure", "scripts"); await mkdirp(scriptsPath); const result = await ejs.renderFile( path.join(__dirname, "scripts", "deploy.sh.ejs.t"), this.data ); if (typeof result !== "string") { throw new Error("Error rendering deploy.sh template"); } await fs.writeFile(path.join(scriptsPath, "deploy.sh"), result); } } export default StaticSiteAwsResourceGroup;