-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.mjs
152 lines (147 loc) · 3.58 KB
/
index.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import * as fs from 'fs-extra';
import ProgressBar from 'progress';
import ora from 'ora';
import * as path from 'path';
import Bluebird from 'bluebird';
import * as execa from 'execa';
import axios from 'axios';
import Vault from 'node-vault';
import { default as Conf } from 'conf';
import * as Commander from 'commander';
import yaml from 'js-yaml';
import str from 'underscore.string';
import _ from 'lodash';
import moment from 'moment';
import delay from 'delay';
import morgan from 'morgan';
import chalk from 'chalk';
import prettyJSON from 'prettyjson';
import getPort from 'get-port';
import isPortReachable from 'is-port-reachable';
import glob from 'glob';
import sudo from 'sudo';
import { findUp } from 'find-up';
import express from 'express';
import sudoBlock from 'sudo-block';
import Knex from 'knex';
import pg from 'pg';
import betterSqlite3 from 'better-sqlite3';
import mysql from 'mysql';
import isElevated from 'is-elevated';
import isRoot from 'is-root';
import { NodeSSH } from 'node-ssh';
import * as inquirer from 'inquirer';
import * as enquirer from 'enquirer'; // Used by listr2
import * as async from 'async';
import * as AWS from 'aws-sdk';
import prettyYAML from 'json-to-pretty-yaml';
import SSHConfig from 'ssh-config';
import retry from 'p-retry';
import * as marked from 'marked';
import TerminalRenderer from 'marked-terminal';
import _fp from 'lodash/fp.js';
import pkg from './package.json';
import { Listr } from 'listr2';
switch (process.argv[2]) {
case '--version':
case '-v':
console.log(`v${pkg.version}`);
process.exit(0);
}
marked.setOptions({
renderer: new TerminalRenderer({
reflowText: true,
}),
});
(async () => {
let script;
let argv;
if (!process.argv[2]) {
if (process.env.IGNORE_KNOBFILE === '1') {
console.error('Error: No script specified');
process.exit(1);
}
const knobFile = await findUp('knobfile.js');
if (!knobFile) {
console.error('Error: No script specified and no knobfile.js found');
process.exit(1);
} else {
script = knobFile;
}
} else {
const _script = path.isAbsolute(process.argv[2])
? process.argv[2]
: path.resolve(process.cwd(), process.argv[2]);
if (await fs.pathExists(_script)) {
script = _script;
argv = process.argv.slice(1);
} else {
if (process.env.IGNORE_KNOBFILE === '1') {
console.error(`Script does not exist: ${script}`);
process.exit(1);
}
const knobFile = await findUp('knobfile.js');
if (knobFile) {
script = knobFile;
argv = [process.argv[0], knobFile, ...process.argv.slice(2)];
} else {
console.error(`Script does not exist: ${script}`);
process.exit(1);
}
}
}
require(script)(
{
_,
_fp,
AWS,
async,
axios,
Bluebird,
chalk,
Commander,
Conf: function (options = {}) {
if (!options.projectName) {
throw new Error(`Conf: options.projectName is required`);
}
return new Conf(options);
},
delay,
enquirer,
execa,
express,
fs,
getPort,
glob: Bluebird.promisify(glob),
inquirer,
isPortReachable,
Listr,
marked: marked,
morgan,
NodeSSH,
Knex,
pg,
betterSqlite3,
mysql,
moment,
ora,
ProgressBar,
prettyYAML,
prettyJSON,
retry,
str,
isElevated,
isRoot,
SSHConfig,
sudo,
sudoBlock,
TerminalRenderer,
yaml,
Vault,
},
{
version: pkg.version,
argv,
}
);
})();