mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-06 21:07:47 +00:00
* Move now-cli to /packages/now-cli * Fix .gitignore paths * Add now-client * Add lerna to top level * Add scripts * Update codeowners * Fix `/now-cli/build.ts` script * Fix circleci path to artifacts * Use relative paths * Fix path to scripts * Add test-lint script * Add missing return type * Fix typo in test-lint * Fix string match in shell scripts * Fix path to hugo * Add package node_modules * Delete lock files in packages, use root yarn.lock * Add missing b.js file * Add test-integration-now-dev script * Add missing test files * Add missing integration test script * Add missing test files * Delete travis.yml * Fix ts-jest in now-client * Add support for Node 8 (ES2015 target) * Add support for Node 8 * Add polyfill for Node 8 * Fix polyfill for Node 8 * Only run coverage for now-cli * Add packages from now-builders * Run integration tests for builders * Add node_modules to cache * Add root readme.md * Move readme to top level * Add yarn bootstrap * Add bootstrap step * Add dist to `persist_to_workspace` * Fix 08-yarn-npm integration test * Remove duplicate path * Change stdio to inherit * Add back store_artifacts * testing - remove bootstrap step * Add back now-build-utils * Remove bootstrap step * Fix test again * Add console.log() * Fix lint * Use local ncc version * Install go * Revert changes to stdio and console.log() * Add missing now-go test * Add missing integration tests * Add --runInBand flag * Fix now-node-bridge persistence * Add missing symlinks * Add codeowners * Consolidate into single run.sh function * Run uniq * Fix typo * Change now-routing-utils to test-unit * Special case test for node 8 * Add docs from builders * Only run script for modified packages * Add test-integration-once which only runs once * Fix set intersection
139 lines
2.9 KiB
JavaScript
Executable File
139 lines
2.9 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
const fs = require('fs');
|
|
const { promisify } = require('util');
|
|
const { join, delimiter } = require('path');
|
|
|
|
const stat = promisify(fs.stat);
|
|
const unlink = promisify(fs.unlink);
|
|
|
|
function cmd(command) {
|
|
return `\`${command}\``;
|
|
}
|
|
|
|
function error(command) {
|
|
console.error('> Error!', command);
|
|
}
|
|
|
|
function debug(str) {
|
|
if (
|
|
process.argv.find(str => str === '--debug') ||
|
|
process.env.PREINSTALL_DEBUG
|
|
) {
|
|
console.log(`[debug] [${new Date().toISOString()}]`, str);
|
|
}
|
|
}
|
|
|
|
function isYarn() {
|
|
return process.env.npm_config_heading !== 'npm';
|
|
}
|
|
|
|
function isGlobal() {
|
|
const cmd = JSON.parse(process.env.npm_config_argv || '{ "original": [] }');
|
|
|
|
return isYarn()
|
|
? cmd.original.includes('global')
|
|
: Boolean(process.env.npm_config_global);
|
|
}
|
|
|
|
// Logic is from Now Desktop
|
|
// See: https://git.io/fj4jD
|
|
function getNowPath() {
|
|
if (process.platform === 'win32') {
|
|
const path = join(process.env.LOCALAPPDATA, 'now-cli', 'now.exe');
|
|
return fs.existsSync(path) ? path : null;
|
|
}
|
|
|
|
const pathEnv = (process.env.PATH || '').split(delimiter);
|
|
|
|
const paths = [
|
|
join(process.env.HOME || '/', 'bin'),
|
|
'/usr/local/bin',
|
|
'/usr/bin'
|
|
];
|
|
|
|
for (const basePath of paths) {
|
|
if (!pathEnv.includes(basePath)) {
|
|
continue;
|
|
}
|
|
|
|
const nowPath = join(basePath, 'now');
|
|
|
|
if (fs.existsSync(nowPath)) {
|
|
return nowPath;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
async function isBinary(nowPath) {
|
|
const stats = await stat(nowPath);
|
|
return !stats.isDirectory();
|
|
}
|
|
|
|
async function main() {
|
|
if (!isGlobal()) {
|
|
debug('Skip preinstall since now is being installed locally');
|
|
return;
|
|
}
|
|
|
|
const nowPath = getNowPath();
|
|
|
|
if (nowPath === null) {
|
|
debug(`No now binary found`);
|
|
return;
|
|
}
|
|
|
|
debug(`Located now binary at ${nowPath}`);
|
|
|
|
try {
|
|
if ((await isBinary(nowPath)) === false) {
|
|
debug(
|
|
'Found file or directory named now but will not delete, ' +
|
|
'as it seems unrelated to Now CLI'
|
|
);
|
|
return;
|
|
}
|
|
|
|
await unlink(nowPath);
|
|
|
|
debug(`Removed ${nowPath}`);
|
|
} catch (err) {
|
|
if (process.platform !== 'win32') {
|
|
error(
|
|
`Could not remove your previous Now CLI installation.\n` +
|
|
`Please use this command to remove it: ${cmd(
|
|
`sudo rm ${nowPath}`
|
|
)}.\n` +
|
|
`Then try to install it again.`
|
|
);
|
|
} else {
|
|
error(
|
|
`Could not remove your previous Now CLI installation.\n` +
|
|
`Please remove ${cmd(nowPath)} manually and try to install it again.`
|
|
);
|
|
}
|
|
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
process.on('unhandledRejection', err => {
|
|
console.error('Unhandled Rejection:');
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|
|
|
|
process.on('uncaughtException', err => {
|
|
console.error('Uncaught Exception:');
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|
|
|
|
main()
|
|
.then(() => process.exit(0))
|
|
.catch(err => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|