packages/cli/src/components/update-warning-table/table.ts
import type { RefinePackageInstalledVersionData } from "@definitions/package";
import chalk from "chalk";
import center from "center-align";
import { getDependencies, getPreferedPM, getScripts } from "@utils/package";
import { getVersionTable } from "@components/version-table";
export interface UpdateWarningTableParams {
data: RefinePackageInstalledVersionData[];
}
export const printUpdateWarningTable = async (
params: UpdateWarningTableParams,
) => {
const data = params?.data;
const tableHead = Object.keys(data?.[0] || {});
if (!data || !tableHead.length) return;
const { table, width } = getVersionTable(data);
console.log();
console.log(center("Update Available", width));
console.log();
console.log(
`- ${chalk.yellow(
chalk.bold("Current"),
)}: The version of the package that is currently installed`,
);
console.log(
`- ${chalk.yellow(
chalk.bold("Wanted"),
)}: The maximum version of the package that satisfies the semver range specified in \`package.json\``,
);
console.log(
`- ${chalk.yellow(
chalk.bold("Latest"),
)}: The latest version of the package available on npm`,
);
console.log(table);
console.log(
center(
`To update ${chalk.bold("`Refine`")} packages with wanted version`,
width,
),
);
console.log(
center(
` Run the following command: ${chalk.yellowBright(
await getInstallCommand(),
)}`,
width,
),
);
console.log();
};
export const getInstallCommand = async () => {
const fallbackCommand = "npx @refinedev/cli update";
const dependencies = getDependencies();
const scriptKeys = Object.keys(getScripts());
const hasCli = dependencies.includes("@refinedev/cli");
const hasScript = scriptKeys.includes("refine");
if (!hasCli && !hasScript) {
return fallbackCommand;
}
const pm = await getPreferedPM();
if (hasScript) {
return `${pm.name} run refine update`;
}
if (hasCli) {
return "npx refine update";
}
return fallbackCommand;
};