UNPKG

rune

Version:

CLI to upload your games to Rune

45 lines (44 loc) 2.17 kB
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); }