@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
JavaScript
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 };
}