farjs-app
Version:
FAR.js - Cross-platform File and Archive Manager app in your terminal
99 lines (88 loc) • 2.5 kB
JavaScript
export default {};
import https from "https";
import { readFile } from "fs/promises";
const packageJson = JSON.parse(
await readFile(new URL("../package.json", import.meta.url), "utf8")
);
export function fetchLatestVersion() {
return new Promise((resolve, reject) => {
const httpOptions = {
headers: {
"accept-encoding": "utf8",
},
};
https
.get(
`https://registry.npmjs.org/${packageJson.name}/latest`,
httpOptions,
(resp) => {
try {
const { statusCode } = resp;
const contentType = /** @type {string} */ (
resp.headers["content-type"]
);
let error;
if (statusCode !== 200) {
error = new Error(
"Request Failed.\n" + `Status Code: ${statusCode}`
);
} else if (!/^application\/json/.test(contentType)) {
error = new Error(
"Invalid content-type.\n" +
`Expected application/json but received ${contentType}`
);
}
if (error) {
resp.resume(); // Consume response data to free up memory
reject(error.message);
return;
}
let rawData = "";
resp.setEncoding("utf8");
resp.on("data", (chunk) => {
rawData += chunk;
});
resp.once("end", () => {
try {
const parsedData = JSON.parse(rawData);
resolve(parsedData.version);
} catch (e) {
reject(e);
}
});
} catch (e) {
reject(e);
}
}
)
.once("error", (e) => {
reject(e);
});
});
}
/**
* @param {string} text
* @returns {string}
*/
function green(text) {
return "\u001b[32m" + text + "\u001b[39m";
}
/**
* @param {string | undefined} npmVersion
*/
export function checkNpmVersion(npmVersion) {
if (npmVersion && npmVersion != packageJson.version) {
console.log(
green(
`
There is a newer version of ${packageJson.name} available: ${npmVersion}
(You are currently using version: ${packageJson.version})
Install FAR.js globally using the package manager of your choice.
For example, to get the latest version:
npm i -g ${packageJson.name}
See the changelog here: https://github.com/farjs/farjs/releases
`
)
);
}
}