@limlabs/limo
Version:
Infrastructure as Code generator
50 lines (49 loc) • 2.67 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.add = void 0;
const promises_1 = __importDefault(require("fs/promises"));
const component_1 = require("../component");
const files_1 = require("../files");
const typescript_1 = require("../typescript");
const commander_1 = require("commander");
const npm_1 = require("../npm");
const zod_1 = require("zod");
const addOptionsSchema = zod_1.z.object({
component: zod_1.z.string(),
directory: zod_1.z.string().optional().default(process.cwd())
});
exports.add = new commander_1.Command()
.name("add")
.description("Add a new component to the workspace")
.argument("<component>", "Name of the component to add")
.option("-d, --directory <directory>", "Directory for the base infrastructure folder where the component should be added", process.cwd())
.action((component, options) => __awaiter(void 0, void 0, void 0, function* () {
const cmdArgs = addOptionsSchema.parse(Object.assign({ component }, options));
if (options.directory) {
process.chdir(options.directory);
}
if (!(0, component_1.doesComponentExist)(component)) {
throw new Error(`Component ${component} does not exist`);
}
yield (0, component_1.ensureComponentsDirectory)();
console.log(`Adding component ${component}...`);
const path = `components/${component}.ts`;
yield (0, files_1.copyFileDependencies)([path]);
const code = yield promises_1.default.readFile(`${__dirname}/../${path}`, "utf8");
let imports = yield (0, typescript_1.extractImports)(code);
yield (0, npm_1.installDependencies)(imports);
console.log(`Component ${component} added successfully ✅`);
console.log("Import this component to one or more resource groups index files and deploy your new resources using `pulumi up`");
}));