rune
Version:
CLI to upload your games to Rune
45 lines (44 loc) • 2.17 kB
JavaScript
import fetch from "cross-fetch";
import { Box, Text } from "ink";
import React, { useEffect, useState } from "react";
import semver from "semver";
import { getInstaller } from "../lib/getInstaller.js";
import { packageJson } from "../lib/packageJson.js";
import { Choose } from "./Choose.js";
import { Step } from "./Step.js";
const installYarn = "`yarn global add rune`";
const installNpm = "`npm install -g rune`";
const helpText = `Run ${getInstaller() === "yarn"
? installYarn
: getInstaller() === "npm"
? installNpm
: `${installNpm} or ${installYarn}`} to install the latest version`;
export function VersionCheckGate({ children }) {
const [latestVersion, setLatestVersion] = useState();
const [loading, setLoading] = useState(true);
const [diff, setDiff] = useState(null);
const [skipped, setSkipped] = useState();
useEffect(() => {
getLatestNpmVersion("rune")
.then(setLatestVersion)
.finally(() => setLoading(false));
}, []);
useEffect(() => {
if (latestVersion)
setDiff(semver.diff(packageJson.version, latestVersion));
}, [latestVersion]);
if (loading) {
return React.createElement(Step, { status: "waiting", label: "Checking latest CLI version" });
}
if (diff && skipped === undefined) {
return (React.createElement(Step, { status: diff === "major" ? "error" : "userInput", label: `This CLI is out of date (installed: ${packageJson.version}, latest: ${latestVersion}).${diff !== "major" ? " Do you want to proceed anyway?" : ""}`, view: diff !== "major" ? (React.createElement(Choose, { options: diff === "patch" ? ["Yes", "No"] : ["No", "Yes"], onSubmit: (response) => setSkipped(response === "Yes") })) : (React.createElement(Text, { color: "red" }, helpText)) }));
}
if (skipped === false)
return React.createElement(Text, null, helpText);
return React.createElement(Box, { flexDirection: "column" }, children);
}
function getLatestNpmVersion(npmPackage) {
return fetch(`https://registry.npmjs.org/${npmPackage}/latest`)
.then((res) => res.json())
.then((res) => res.version);
}