UNPKG

create-eliza

Version:

Initialize an Eliza project

175 lines (171 loc) 6.64 kB
import { createRequire } from 'module'; const require = createRequire(import.meta.url); import { buildProject } from "./chunk-KMSIPPQV.js"; import { runBunCommand } from "./chunk-FPOBH723.js"; import { handleError } from "./chunk-252SDPU3.js"; import { logger, require_semver } from "./chunk-2ORHBMCI.js"; import { require_prompts } from "./chunk-OGSHIQ3J.js"; import { Command } from "./chunk-S757QXWN.js"; import { __toESM } from "./chunk-WCMDOJQK.js"; // src/commands/update.ts import { existsSync, readFileSync } from "node:fs"; import fs from "node:fs/promises"; import path from "node:path"; var import_prompts = __toESM(require_prompts(), 1); var import_semver = __toESM(require_semver(), 1); function getCurrentCliVersion() { try { const packageJsonPath = path.resolve(__dirname, "../package.json"); const packageJsonContent = readFileSync(packageJsonPath, "utf8"); const packageJson = JSON.parse(packageJsonContent); return packageJson.version || "0.0.0"; } catch (error) { try { const packageJsonPath = path.resolve(__dirname, "../../package.json"); if (existsSync(packageJsonPath)) { const packageJsonContent = readFileSync(packageJsonPath, "utf8"); const packageJson = JSON.parse(packageJsonContent); return packageJson.version || "0.0.0"; } } catch (nestedError) { } logger.warn(`Could not determine CLI version: ${error.message}`); return "0.0.0"; } } function isWorkspaceVersion(versionString) { return versionString === "workspace:*" || versionString === "workspace" || versionString.startsWith("workspace:"); } async function updateDependencies(cwd, isPlugin) { logger.info(`Updating ${isPlugin ? "plugin" : "project"} dependencies...`); const cliVersion = getCurrentCliVersion(); logger.info(`Current CLI version: ${cliVersion}`); try { const packageJsonPath = path.join(cwd, "package.json"); if (!existsSync(packageJsonPath)) { logger.error("package.json not found in the current directory"); return; } const packageJsonContent = await fs.readFile(packageJsonPath, "utf8"); const packageJson = JSON.parse(packageJsonContent); const dependencies = packageJson.dependencies || {}; const devDependencies = packageJson.devDependencies || {}; const elizaPackages = [ ...Object.entries(dependencies), ...Object.entries(devDependencies) ].filter(([pkg]) => pkg.startsWith("@elizaos/")).map(([pkg, version]) => ({ name: pkg, version })); if (elizaPackages.length === 0) { logger.info("No ElizaOS packages found to update"); return; } const workspacePackages = elizaPackages.filter((pkg) => isWorkspaceVersion(pkg.version)); if (workspacePackages.length > 0) { logger.info(`Found ${workspacePackages.length} workspace references: ${workspacePackages.map((p) => p.name).join(", ")}`); logger.info("Skipping update for workspace packages as they should be managed by the monorepo"); const packagesToUpdate = elizaPackages.filter((pkg) => !isWorkspaceVersion(pkg.version)); if (packagesToUpdate.length === 0) { logger.info("No non-workspace ElizaOS packages to update"); return; } logger.info(`Will update ${packagesToUpdate.length} non-workspace packages: ${packagesToUpdate.map((p) => p.name).join(", ")}`); elizaPackages.length = 0; elizaPackages.push(...packagesToUpdate); } else { logger.info(`Found ${elizaPackages.length} ElizaOS packages: ${elizaPackages.map((p) => p.name).join(", ")}`); } const hasMajorUpdates = elizaPackages.some((pkg) => { const pkgVersion = String(pkg.version).replace(/^\^|~/, ""); return pkgVersion && cliVersion && import_semver.default.major(cliVersion) > import_semver.default.major(pkgVersion); }); if (hasMajorUpdates) { const { confirmMajor } = await (0, import_prompts.default)({ type: "confirm", name: "confirmMajor", message: "Major version updates detected. This may include breaking changes. Continue?", initial: false }); if (!confirmMajor) { logger.info("Update canceled"); return; } } for (const pkg of elizaPackages) { try { logger.info(`Updating ${pkg.name} to version ${cliVersion}...`); await runBunCommand(["add", `${pkg.name}@${cliVersion}`], cwd); } catch (error) { logger.error(`Failed to update ${pkg.name}: ${error.message}`); logger.info("Trying to use exact version match..."); try { await runBunCommand(["add", pkg.name], cwd); } catch (secondError) { logger.error(`Failed to install ${pkg.name} after retrying: ${secondError.message}`); } } } logger.success("Dependencies updated successfully"); logger.info("Installing updated dependencies..."); await runBunCommand(["install"], cwd); await buildProject(cwd, isPlugin); } catch (error) { logger.error(`Error updating dependencies: ${error.message}`); } } function checkIfPluginDir(dir) { const packageJsonPath = path.join(dir, "package.json"); if (!existsSync(packageJsonPath)) { return false; } try { const packageJsonContent = readFileSync(packageJsonPath, "utf8"); const packageJson = JSON.parse(packageJsonContent); if (packageJson.name?.startsWith("@elizaos/plugin-")) { return true; } const keywords = packageJson.keywords || []; return keywords.includes("elizaos-plugin"); } catch { return false; } } var update = new Command().name("update").description("Update ElizaOS packages to the latest versions").option("--check", "Check for available updates without applying them").option("--skip-build", "Skip building after updating").action(async (options) => { try { const cwd = process.cwd(); const isPlugin = checkIfPluginDir(cwd); logger.info(`Detected ${isPlugin ? "plugin" : "project"} directory`); if (options.check) { logger.info("Checking for available updates..."); const cliVersion = getCurrentCliVersion(); logger.info(`Current CLI version: ${cliVersion}`); logger.info("To apply updates, run this command without the --check flag"); return; } await updateDependencies(cwd, isPlugin); logger.success(`${isPlugin ? "Plugin" : "Project"} successfully updated to the latest ElizaOS packages`); } catch (error) { handleError(error); } }); function registerCommand(cli) { return cli.addCommand(update); } export { update, registerCommand }; //# sourceMappingURL=chunk-MB4HAOA5.js.map