@limlabs/limo
Version:
Infrastructure as Code generator
100 lines (99 loc) • 4.57 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.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;