UNPKG

@limlabs/limo

Version:

Infrastructure as Code generator

100 lines (99 loc) 4.57 kB
"use strict"; 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.importFramework = exports.getSupportedResourceGroupTypesForFramework = exports.detectFramework = exports.AllFrameworkTypes = void 0; const promises_1 = __importDefault(require("fs/promises")); const fs_1 = require("fs"); const process_1 = require("process"); const path_1 = __importDefault(require("path")); const framework_1 = __importDefault(require("./nextjs/framework")); const framework_2 = __importDefault(require("./tanstack-start/framework")); exports.AllFrameworkTypes = [ "nextjs", "tanstack-start", "unknown" ]; /** * Detects the framework being used in the resource group. * * @returns {Promise<FrameworkType>} The detected framework type. */ function detectFramework(directory = (0, process_1.cwd)()) { return __awaiter(this, void 0, void 0, function* () { const baseDirectory = path_1.default.resolve(directory); const nodePackageJson = path_1.default.join(baseDirectory, "package.json"); if (!(0, fs_1.existsSync)(nodePackageJson)) { console.log("No package.json found in the current directory."); return "unknown"; } const packageJSON = yield promises_1.default.readFile(nodePackageJson, "utf-8"); const packageJSONParsed = JSON.parse(packageJSON); // check for next in dependencies const dependencies = Object.keys(packageJSONParsed.dependencies); if (dependencies.includes("next")) { return "nextjs"; } if (dependencies.includes("@tanstack/start")) { return "tanstack-start"; } return "unknown"; }); } exports.detectFramework = detectFramework; /** * Gets the supported resource group types for a given framework. * * @param {BaseTemplate} framework - The framework to get supported resource group types for. * * @returns {Promise<ResourceGroupType[]>} The supported resource group types for the given framework. */ function getSupportedResourceGroupTypesForFramework(framework) { return __awaiter(this, void 0, void 0, function* () { switch (framework) { case "nextjs": return framework_1.default.resourceGroupsSupported; case "tanstack-start": return framework_2.default.resourceGroupsSupported; default: return []; } }); } exports.getSupportedResourceGroupTypesForFramework = getSupportedResourceGroupTypesForFramework; /** * Imports a framework based on the given framework type. * * @param {FrameworkType} frameworkType - The type of framework to import. * @param {ResourceGroupType} resourceGroupType - The type of resource group to import. * @param {string} resourceGroupName - the name of the resource group to import. * @param {string} directory - The directory to import the framework into. * * @returns {Promise<FrameworkTemplate>} The imported framework. */ function importFramework(frameworkType, resourceGroupType, resourceGroupName, directory = (0, process_1.cwd)()) { return __awaiter(this, void 0, void 0, function* () { if (!exports.AllFrameworkTypes.includes(frameworkType)) { throw new Error(`Unsupported framework type: ${frameworkType}`); } switch (frameworkType) { case "nextjs": return new framework_1.default(resourceGroupName, directory, resourceGroupType); case "tanstack-start": return new framework_2.default(resourceGroupName, directory, resourceGroupType); default: throw new Error(`Unsupported framework type: ${frameworkType}`); } }); } exports.importFramework = importFramework;