Files
vercel/packages/now-cli/scripts/preinstall.js
Steven b0ad5238f7 Create monorepo (#2812)
* 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
2019-08-23 23:57:00 +00:00

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);
});