UNPKG

@reliverse/rse-sdk

Version:

@reliverse/rse-sdk without cli. @reliverse/rse-sdk allows you to create new plugins for @reliverse/rse CLI, interact with reliverse.org, and even extend your own CLI functionality (you may also try @reliverse/dler-sdk for this case).

92 lines (91 loc) 2.98 kB
import { updateRseConfig } from "@reliverse/cfg"; import { getRseConfigPath } from "@reliverse/cfg"; import { readRseConfig } from "@reliverse/cfg"; import { relinka } from "@reliverse/relinka"; import { ofetch } from "ofetch"; import { UNKNOWN_VALUE } from "../../../constants.js"; import { REPO_TEMPLATES } from "../../../utils/projectRepository.js"; export async function checkForTemplateUpdate(projectConfig) { if (!projectConfig.projectTemplate || projectConfig.projectTemplate === UNKNOWN_VALUE) { return { hasUpdate: false, currentDate: "", latestDate: null }; } if (!projectConfig.projectTemplateDate || projectConfig.projectTemplateDate === UNKNOWN_VALUE) { return { hasUpdate: false, currentDate: "", latestDate: null }; } const templateRepo = REPO_TEMPLATES.find( (repo) => repo.id === projectConfig.projectTemplate ); if (!templateRepo) { return { hasUpdate: false, currentDate: projectConfig.projectTemplateDate, latestDate: null }; } const [owner, repoName] = templateRepo.id.split("/"); if (!owner || !repoName) { return { hasUpdate: false, currentDate: projectConfig.projectTemplateDate, latestDate: null }; } const url = `https://ungh.cc/repos/${owner}/${repoName}`; try { const data = await ofetch(url); const latestDate = data.repo?.pushedAt ?? null; if (!latestDate) { return { hasUpdate: false, currentDate: projectConfig.projectTemplateDate, latestDate: null }; } const currentDate = new Date(projectConfig.projectTemplateDate); const remoteDate = new Date(latestDate); const hasUpdate = remoteDate > currentDate; return { hasUpdate, currentDate: projectConfig.projectTemplateDate, latestDate }; } catch (error) { relinka( "warn", `Failed to check template updates: ${error instanceof Error ? error.message : String(error)}` ); return { hasUpdate: false, currentDate: projectConfig.projectTemplateDate, latestDate: null }; } } export async function updateProjectTemplateDate(projectPath, latestDate, isDev) { try { await updateRseConfig( projectPath, { projectTemplateDate: latestDate }, isDev ); relinka("success", `Updated project template date to ${latestDate}`); } catch (error) { relinka( "error", `Failed to update template date: ${error instanceof Error ? error.message : String(error)}` ); } } export async function getTemplateUpdateInfo(cwd, isDev, hasRseConfig) { let updateInfo = null; let updateAvailable = false; if (hasRseConfig) { const { configPath } = await getRseConfigPath(cwd, isDev, false); const projectConfig = await readRseConfig(configPath, isDev); if (projectConfig) { updateInfo = await checkForTemplateUpdate(projectConfig); updateAvailable = updateInfo.hasUpdate; } } return { updateAvailable, updateInfo }; }