mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-15 19:26:42 +08:00
129 lines
3.9 KiB
JavaScript
129 lines
3.9 KiB
JavaScript
const { chmodSync, createWriteStream } = require("fs");
|
|
const { tmpdir, EOL } = require("os");
|
|
const { join, relative, isAbsolute } = require("path");
|
|
const os = require("os");
|
|
|
|
const { mkdir } = require("shelljs");
|
|
// const { get } = require("request");
|
|
const { getProxySettings } = require("proxy-lib");
|
|
const semver = require("semver");
|
|
|
|
const CONSTANTS = {
|
|
SNAPSHOT_TMP_DIR: join(tmpdir(), "snapshot-tools"),
|
|
MAC_OS_NAME: "darwin",
|
|
WIN_OS_NAME: "win",
|
|
LINUX_OS_NAME: "linux"
|
|
};
|
|
|
|
const createDirectory = dir => mkdir('-p', dir);
|
|
|
|
function getHostOS() {
|
|
const hostOS = os.type().toLowerCase();
|
|
if (hostOS.startsWith(CONSTANTS.MAC_OS_NAME))
|
|
return CONSTANTS.MAC_OS_NAME;
|
|
if (hostOS.startsWith(CONSTANTS.LINUX_OS_NAME))
|
|
return CONSTANTS.LINUX_OS_NAME;
|
|
if (hostOS.startsWith(CONSTANTS.WIN_OS_NAME))
|
|
return CONSTANTS.WIN_OS_NAME;
|
|
return hostOS;
|
|
}
|
|
|
|
function getHostOSVersion() {
|
|
return os.release();
|
|
}
|
|
|
|
function getHostOSArch() {
|
|
return os.arch();
|
|
}
|
|
|
|
function has32BitArch(targetArchs) {
|
|
return (Array.isArray(targetArchs) && targetArchs.some(arch => arch === "arm" || arch === "ia32")) ||
|
|
(targetArchs === "arm" || targetArchs === "ia32");
|
|
}
|
|
|
|
function isSubPath(parentPath, childPath) {
|
|
const relativePath = relative(parentPath, childPath);
|
|
|
|
return relativePath === "" ||
|
|
(relativePath && !relativePath.startsWith('..') && !isAbsolute(relativePath));
|
|
}
|
|
|
|
function isMacOSCatalinaOrHigher() {
|
|
let isCatalinaOrHigher = false;
|
|
const catalinaVersion = "19.0.0";
|
|
const hostOS = getHostOS();
|
|
if (hostOS === CONSTANTS.MAC_OS_NAME) {
|
|
const hostOSVersion = getHostOSVersion();
|
|
isCatalinaOrHigher = semver.gte(hostOSVersion, catalinaVersion);
|
|
}
|
|
|
|
return isCatalinaOrHigher;
|
|
}
|
|
|
|
function isWindows() {
|
|
return getHostOS() === CONSTANTS.WIN_OS_NAME;
|
|
}
|
|
|
|
const downloadFile = (url, destinationFilePath, timeout) =>
|
|
new Promise((resolve, reject) => {
|
|
// getRequestOptions(url, timeout)
|
|
// .then(options =>
|
|
// get(options)
|
|
// .on("error", reject)
|
|
// .pipe(createWriteStream(destinationFilePath, { autoClose: true }))
|
|
// .on("finish", _ => {
|
|
// chmodSync(destinationFilePath, 0755);
|
|
// return resolve(destinationFilePath);
|
|
// })
|
|
// ).catch(reject);
|
|
});
|
|
|
|
const getJsonFile = url =>
|
|
new Promise((resolve, reject) => {
|
|
// getRequestOptions(url)
|
|
// .then(options =>
|
|
// get(options, (error, response, body) => {
|
|
// if (error) {
|
|
// return reject(error);
|
|
// }
|
|
|
|
// if (!response || response.statusCode !== 200) {
|
|
// return reject(`Couldn't fetch ${url}! Response:${EOL}${response}`);
|
|
// }
|
|
|
|
// try {
|
|
// const data = JSON.parse(body);
|
|
// resolve(data);
|
|
// } catch (error) {
|
|
// reject(`Couldn't parse json data! Original error:${EOL}${error}`);
|
|
// }
|
|
// })
|
|
// ).catch(reject);
|
|
});
|
|
|
|
const getRequestOptions = (url, timeout) =>
|
|
new Promise((resolve, reject) => {
|
|
const options = { url, timeout };
|
|
getProxySettings()
|
|
.then(proxySettings => {
|
|
const allOptions = Object.assign(options, proxySettings);
|
|
resolve(allOptions);
|
|
})
|
|
.catch(error =>
|
|
reject(`Couldn't get proxy settings! Original error:${EOL}${error}`));
|
|
});
|
|
|
|
module.exports = {
|
|
CONSTANTS,
|
|
createDirectory,
|
|
has32BitArch,
|
|
getHostOS,
|
|
getHostOSVersion,
|
|
getHostOSArch,
|
|
isMacOSCatalinaOrHigher,
|
|
downloadFile,
|
|
getJsonFile,
|
|
isSubPath,
|
|
isWindows
|
|
};
|