@eggjs/scripts 4.0.0 → 5.0.0-beta.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +2 -6
  2. package/bin/dev.js +0 -0
  3. package/dist/baseCommand.d.ts +28 -0
  4. package/dist/baseCommand.js +47 -0
  5. package/dist/commands/start.d.ts +39 -0
  6. package/dist/commands/start.js +277 -0
  7. package/dist/commands/stop.d.ts +21 -0
  8. package/dist/commands/stop.js +68 -0
  9. package/dist/helper.d.ts +11 -0
  10. package/dist/helper.js +35 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.js +4 -0
  13. package/{src/types.ts → dist/types.d.ts} +4 -1
  14. package/dist/types.js +1 -0
  15. package/package.json +66 -86
  16. package/scripts/start-cluster.cjs +11 -4
  17. package/scripts/start-cluster.mjs +6 -2
  18. package/dist/commonjs/baseCommand.d.ts +0 -25
  19. package/dist/commonjs/baseCommand.js +0 -62
  20. package/dist/commonjs/commands/start.d.ts +0 -34
  21. package/dist/commonjs/commands/start.js +0 -350
  22. package/dist/commonjs/commands/stop.d.ts +0 -16
  23. package/dist/commonjs/commands/stop.js +0 -95
  24. package/dist/commonjs/helper.d.ts +0 -10
  25. package/dist/commonjs/helper.js +0 -61
  26. package/dist/commonjs/index.d.ts +0 -3
  27. package/dist/commonjs/index.js +0 -26
  28. package/dist/commonjs/package.json +0 -3
  29. package/dist/commonjs/types.d.ts +0 -9
  30. package/dist/commonjs/types.js +0 -3
  31. package/dist/esm/baseCommand.d.ts +0 -25
  32. package/dist/esm/baseCommand.js +0 -55
  33. package/dist/esm/commands/start.d.ts +0 -34
  34. package/dist/esm/commands/start.js +0 -344
  35. package/dist/esm/commands/stop.d.ts +0 -16
  36. package/dist/esm/commands/stop.js +0 -92
  37. package/dist/esm/helper.d.ts +0 -10
  38. package/dist/esm/helper.js +0 -51
  39. package/dist/esm/index.d.ts +0 -3
  40. package/dist/esm/index.js +0 -5
  41. package/dist/esm/package.json +0 -3
  42. package/dist/esm/types.d.ts +0 -9
  43. package/dist/esm/types.js +0 -2
  44. package/dist/package.json +0 -4
  45. package/src/baseCommand.ts +0 -68
  46. package/src/commands/start.ts +0 -384
  47. package/src/commands/stop.ts +0 -105
  48. package/src/helper.ts +0 -62
  49. package/src/index.ts +0 -8
@@ -1,350 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const node_util_1 = require("node:util");
7
- const node_path_1 = __importDefault(require("node:path"));
8
- const promises_1 = require("node:timers/promises");
9
- const node_child_process_1 = require("node:child_process");
10
- const promises_2 = require("node:fs/promises");
11
- const node_homedir_1 = require("node-homedir");
12
- const core_1 = require("@oclif/core");
13
- const utils_1 = require("@eggjs/utils");
14
- const utility_1 = require("utility");
15
- const baseCommand_js_1 = require("../baseCommand.js");
16
- const helper_js_1 = require("../helper.js");
17
- const debug = (0, node_util_1.debuglog)('@eggjs/scripts/commands/start');
18
- const execFile = (0, node_util_1.promisify)(node_child_process_1.execFile);
19
- class Start extends baseCommand_js_1.BaseCommand {
20
- static description = 'Start server at prod mode';
21
- static examples = [
22
- '<%= config.bin %> <%= command.id %>',
23
- ];
24
- static args = {
25
- baseDir: core_1.Args.string({
26
- description: 'directory of application',
27
- required: false,
28
- }),
29
- };
30
- static flags = {
31
- title: core_1.Flags.string({
32
- description: 'process title description, use for kill grep, default to `egg-server-${APP_NAME}`',
33
- }),
34
- framework: core_1.Flags.string({
35
- description: 'specify framework that can be absolute path or npm package',
36
- }),
37
- port: core_1.Flags.integer({
38
- description: 'listening port, default to `process.env.PORT`',
39
- char: 'p',
40
- }),
41
- workers: core_1.Flags.integer({
42
- char: 'c',
43
- aliases: ['cluster'],
44
- description: 'numbers of app workers, default to `process.env.EGG_WORKERS` or `os.cpus().length`',
45
- }),
46
- env: core_1.Flags.string({
47
- description: 'server env, default to `process.env.EGG_SERVER_ENV`',
48
- default: process.env.EGG_SERVER_ENV,
49
- }),
50
- daemon: core_1.Flags.boolean({
51
- description: 'whether run at background daemon mode',
52
- }),
53
- stdout: core_1.Flags.string({
54
- description: 'customize stdout file',
55
- }),
56
- stderr: core_1.Flags.string({
57
- description: 'customize stderr file',
58
- }),
59
- timeout: core_1.Flags.integer({
60
- description: 'the maximum timeout(ms) when app starts',
61
- default: 300 * 1000,
62
- }),
63
- 'ignore-stderr': core_1.Flags.boolean({
64
- description: 'whether ignore stderr when app starts',
65
- }),
66
- node: core_1.Flags.string({
67
- description: 'customize node command path',
68
- default: 'node',
69
- }),
70
- require: core_1.Flags.string({
71
- summary: 'require the given module',
72
- char: 'r',
73
- multiple: true,
74
- }),
75
- sourcemap: core_1.Flags.boolean({
76
- summary: 'whether enable sourcemap support, will load `source-map-support` etc',
77
- aliases: ['ts', 'typescript'],
78
- }),
79
- };
80
- isReady = false;
81
- #child;
82
- async getFrameworkPath(options) {
83
- return (0, utils_1.getFrameworkPath)(options);
84
- }
85
- async getFrameworkName(frameworkPath) {
86
- const pkgPath = node_path_1.default.join(frameworkPath, 'package.json');
87
- let name = 'egg';
88
- try {
89
- const pkg = await (0, utility_1.readJSON)(pkgPath);
90
- if (pkg.name) {
91
- name = pkg.name;
92
- }
93
- }
94
- catch {
95
- // ignore
96
- }
97
- return name;
98
- }
99
- async getServerBin() {
100
- const serverBinName = this.isESM ? 'start-cluster.mjs' : 'start-cluster.cjs';
101
- // for src paths, `./src/commands/start.js`
102
- let serverBin = node_path_1.default.join((0, helper_js_1.getSourceDirname)(), '../scripts', serverBinName);
103
- if (!(await (0, utility_1.exists)(serverBin))) {
104
- // for dist paths, `./dist/esm/commands/start.js`
105
- serverBin = node_path_1.default.join((0, helper_js_1.getSourceDirname)(), '../../scripts', serverBinName);
106
- }
107
- return serverBin;
108
- }
109
- async run() {
110
- const { args, flags } = this;
111
- // context.execArgvObj = context.execArgvObj || {};
112
- // const { argv, env, cwd, execArgvObj } = context;
113
- const HOME = (0, node_homedir_1.homedir)();
114
- const logDir = node_path_1.default.join(HOME, 'logs');
115
- // eggctl start
116
- // eggctl start ./server
117
- // eggctl start /opt/app
118
- const cwd = process.cwd();
119
- let baseDir = args.baseDir || cwd;
120
- if (!node_path_1.default.isAbsolute(baseDir)) {
121
- baseDir = node_path_1.default.join(cwd, baseDir);
122
- }
123
- await this.initBaseInfo(baseDir);
124
- flags.framework = await this.getFrameworkPath({
125
- framework: flags.framework,
126
- baseDir,
127
- });
128
- const frameworkName = await this.getFrameworkName(flags.framework);
129
- flags.title = flags.title || `egg-server-${this.pkg.name}`;
130
- flags.stdout = flags.stdout || node_path_1.default.join(logDir, 'master-stdout.log');
131
- flags.stderr = flags.stderr || node_path_1.default.join(logDir, 'master-stderr.log');
132
- if (flags.workers === undefined && process.env.EGG_WORKERS) {
133
- flags.workers = Number(process.env.EGG_WORKERS);
134
- }
135
- // normalize env
136
- this.env.HOME = HOME;
137
- this.env.NODE_ENV = 'production';
138
- // it makes env big but more robust
139
- this.env.PATH = this.env.Path = [
140
- // for nodeinstall
141
- node_path_1.default.join(baseDir, 'node_modules/.bin'),
142
- // support `.node/bin`, due to npm5 will remove `node_modules/.bin`
143
- node_path_1.default.join(baseDir, '.node/bin'),
144
- // adjust env for win
145
- this.env.PATH || this.env.Path,
146
- ].filter(x => !!x).join(node_path_1.default.delimiter);
147
- // for alinode
148
- this.env.ENABLE_NODE_LOG = 'YES';
149
- this.env.NODE_LOG_DIR = this.env.NODE_LOG_DIR || node_path_1.default.join(logDir, 'alinode');
150
- await (0, promises_2.mkdir)(this.env.NODE_LOG_DIR, { recursive: true });
151
- // cli argv -> process.env.EGG_SERVER_ENV -> `undefined` then egg will use `prod`
152
- if (flags.env) {
153
- // if undefined, should not pass key due to `spawn`, https://github.com/nodejs/node/blob/master/lib/child_process.js#L470
154
- this.env.EGG_SERVER_ENV = flags.env;
155
- }
156
- // additional execArgv
157
- const execArgv = [
158
- '--no-deprecation',
159
- '--trace-warnings',
160
- ];
161
- if (this.pkgEgg.revert) {
162
- const reverts = Array.isArray(this.pkgEgg.revert) ? this.pkgEgg.revert : [this.pkgEgg.revert];
163
- for (const revert of reverts) {
164
- execArgv.push(`--security-revert=${revert}`);
165
- }
166
- }
167
- // pkg.eggScriptsConfig.require
168
- const scriptsConfig = this.pkg.eggScriptsConfig;
169
- if (scriptsConfig?.require) {
170
- scriptsConfig.require = Array.isArray(scriptsConfig.require) ? scriptsConfig.require : [scriptsConfig.require];
171
- flags.require = [...scriptsConfig.require, ...(flags.require ?? [])];
172
- }
173
- // read argv from eggScriptsConfig in package.json
174
- if (scriptsConfig) {
175
- for (const key in scriptsConfig) {
176
- const v = scriptsConfig[key];
177
- if (key.startsWith('node-options--')) {
178
- const newKey = key.replace('node-options--', '');
179
- if (v === true) {
180
- // "node-options--allow-wasi": true
181
- // => --allow-wasi
182
- execArgv.push(`--${newKey}`);
183
- }
184
- else {
185
- // "node-options--max-http-header-size": "20000"
186
- // => --max-http-header-size=20000
187
- execArgv.push(`--${newKey}=${v}`);
188
- }
189
- continue;
190
- }
191
- const existsValue = Reflect.get(flags, key);
192
- if (existsValue === undefined) {
193
- // only set if key is not pass from command line
194
- Reflect.set(flags, key, v);
195
- }
196
- }
197
- }
198
- // read `egg.typescript` from package.json
199
- if (this.pkgEgg.typescript && flags.sourcemap === undefined) {
200
- flags.sourcemap = true;
201
- }
202
- if (flags.sourcemap) {
203
- const sourceMapSupport = (0, utils_1.importResolve)('source-map-support/register.js', {
204
- paths: [(0, helper_js_1.getSourceDirname)()],
205
- });
206
- if (this.isESM) {
207
- execArgv.push('--import', sourceMapSupport);
208
- }
209
- else {
210
- execArgv.push('--require', sourceMapSupport);
211
- }
212
- }
213
- if (flags.port === undefined && process.env.PORT) {
214
- flags.port = parseInt(process.env.PORT);
215
- }
216
- debug('flags: %o, framework: %o, baseDir: %o, execArgv: %o', flags, frameworkName, baseDir, execArgv);
217
- const command = flags.node;
218
- const options = {
219
- env: this.env,
220
- stdio: 'inherit',
221
- detached: false,
222
- cwd: baseDir,
223
- };
224
- this.log('Starting %s application at %s', frameworkName, baseDir);
225
- // remove unused properties from stringify, alias had been remove by `removeAlias`
226
- const ignoreKeys = ['env', 'daemon', 'stdout', 'stderr', 'timeout', 'ignore-stderr', 'node'];
227
- const clusterOptions = stringify({
228
- ...flags,
229
- baseDir,
230
- }, ignoreKeys);
231
- // Note: `spawn` is not like `fork`, had to pass `execArgv` yourself
232
- const serverBin = await this.getServerBin();
233
- const eggArgs = [...execArgv, serverBin, clusterOptions, `--title=${flags.title}`];
234
- const spawnScript = `${command} ${eggArgs.map(a => `'${a}'`).join(' ')}`;
235
- this.log('Spawn %o', spawnScript);
236
- // whether run in the background.
237
- if (flags.daemon) {
238
- this.log(`Save log file to ${logDir}`);
239
- const [stdout, stderr] = await Promise.all([
240
- getRotateLog(flags.stdout),
241
- getRotateLog(flags.stderr),
242
- ]);
243
- options.stdio = ['ignore', stdout, stderr, 'ipc'];
244
- options.detached = true;
245
- const child = this.#child = (0, node_child_process_1.spawn)(command, eggArgs, options);
246
- this.isReady = false;
247
- child.on('message', (msg) => {
248
- // https://github.com/eggjs/cluster/blob/master/src/master.ts#L119
249
- if (msg && msg.action === 'egg-ready') {
250
- this.isReady = true;
251
- this.log('%s started on %s', frameworkName, msg.data.address);
252
- child.unref();
253
- child.disconnect();
254
- }
255
- });
256
- // check start status
257
- await this.checkStatus();
258
- }
259
- else {
260
- options.stdio = ['inherit', 'inherit', 'inherit', 'ipc'];
261
- const child = this.#child = (0, node_child_process_1.spawn)(command, eggArgs, options);
262
- child.once('exit', code => {
263
- if (!code)
264
- return;
265
- // command should exit after child process exit
266
- this.exit(code);
267
- });
268
- // attach master signal to child
269
- let signal;
270
- const signals = ['SIGINT', 'SIGQUIT', 'SIGTERM'];
271
- signals.forEach(event => {
272
- process.once(event, () => {
273
- debug('Kill child %s with %s', child.pid, signal);
274
- child.kill(event);
275
- });
276
- });
277
- }
278
- }
279
- async checkStatus() {
280
- let count = 0;
281
- let hasError = false;
282
- let isSuccess = true;
283
- const timeout = this.flags.timeout / 1000;
284
- const stderrFile = this.flags.stderr;
285
- while (!this.isReady) {
286
- try {
287
- const stats = await (0, promises_2.stat)(stderrFile);
288
- if (stats && stats.size > 0) {
289
- hasError = true;
290
- break;
291
- }
292
- }
293
- catch (_) {
294
- // nothing
295
- }
296
- if (count >= timeout) {
297
- this.logToStderr('Start failed, %ds timeout', timeout);
298
- isSuccess = false;
299
- break;
300
- }
301
- await promises_1.scheduler.wait(1000);
302
- this.log('Wait Start: %d...', ++count);
303
- }
304
- if (hasError) {
305
- try {
306
- const args = ['-n', '100', stderrFile];
307
- this.logToStderr('tail %s', args.join(' '));
308
- const { stdout: headStdout } = await execFile('head', args);
309
- const { stdout: tailStdout } = await execFile('tail', args);
310
- this.logToStderr('Got error when startup: ');
311
- this.logToStderr(headStdout);
312
- this.logToStderr('...');
313
- this.logToStderr(tailStdout);
314
- }
315
- catch (err) {
316
- this.logToStderr('ignore tail error: %s', err);
317
- }
318
- isSuccess = this.flags['ignore-stderr'];
319
- this.logToStderr('Start got error, see %o', stderrFile);
320
- this.logToStderr('Or use `--ignore-stderr` to ignore stderr at startup.');
321
- }
322
- if (!isSuccess) {
323
- this.#child.kill('SIGTERM');
324
- await promises_1.scheduler.wait(1000);
325
- this.exit(1);
326
- }
327
- }
328
- }
329
- exports.default = Start;
330
- function stringify(obj, ignore) {
331
- const result = {};
332
- Object.keys(obj).forEach(key => {
333
- if (!ignore.includes(key)) {
334
- result[key] = obj[key];
335
- }
336
- });
337
- return JSON.stringify(result);
338
- }
339
- async function getRotateLog(logFile) {
340
- await (0, promises_2.mkdir)(node_path_1.default.dirname(logFile), { recursive: true });
341
- if (await (0, utility_1.exists)(logFile)) {
342
- // format style: .20150602.193100
343
- const [YYYY, MM, DD, HH, mm, ss] = (0, utility_1.getDateStringParts)();
344
- const timestamp = `.${YYYY}${MM}${DD}.${HH}${mm}${ss}`;
345
- // Note: rename last log to next start time, not when last log file created
346
- await (0, promises_2.rename)(logFile, logFile + timestamp);
347
- }
348
- return (await (0, promises_2.open)(logFile, 'a')).fd;
349
- }
350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvc3RhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5Q0FBZ0Q7QUFDaEQsMERBQTZCO0FBQzdCLG1EQUFpRDtBQUNqRCwyREFBOEY7QUFDOUYsK0NBQTZEO0FBQzdELCtDQUF1QztBQUN2QyxzQ0FBMEM7QUFDMUMsd0NBQStEO0FBQy9ELHFDQUErRDtBQUMvRCxzREFBZ0Q7QUFDaEQsNENBQWdEO0FBRWhELE1BQU0sS0FBSyxHQUFHLElBQUEsb0JBQVEsRUFBQywrQkFBK0IsQ0FBQyxDQUFDO0FBRXhELE1BQU0sUUFBUSxHQUFHLElBQUEscUJBQVMsRUFBQyw2QkFBUyxDQUFDLENBQUM7QUFPdEMsTUFBcUIsS0FBOEIsU0FBUSw0QkFBYztJQUN2RSxNQUFNLENBQVUsV0FBVyxHQUFHLDJCQUEyQixDQUFDO0lBRTFELE1BQU0sQ0FBVSxRQUFRLEdBQUc7UUFDekIscUNBQXFDO0tBQ3RDLENBQUM7SUFFRixNQUFNLENBQVUsSUFBSSxHQUFHO1FBQ3JCLE9BQU8sRUFBRSxXQUFJLENBQUMsTUFBTSxDQUFDO1lBQ25CLFdBQVcsRUFBRSwwQkFBMEI7WUFDdkMsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLENBQVUsS0FBSyxHQUFHO1FBQ3RCLEtBQUssRUFBRSxZQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2xCLFdBQVcsRUFBRSxtRkFBbUY7U0FDakcsQ0FBQztRQUNGLFNBQVMsRUFBRSxZQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3RCLFdBQVcsRUFBRSw0REFBNEQ7U0FDMUUsQ0FBQztRQUNGLElBQUksRUFBRSxZQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2xCLFdBQVcsRUFBRSwrQ0FBK0M7WUFDNUQsSUFBSSxFQUFFLEdBQUc7U0FDVixDQUFDO1FBQ0YsT0FBTyxFQUFFLFlBQUssQ0FBQyxPQUFPLENBQUM7WUFDckIsSUFBSSxFQUFFLEdBQUc7WUFDVCxPQUFPLEVBQUUsQ0FBRSxTQUFTLENBQUU7WUFDdEIsV0FBVyxFQUFFLG9GQUFvRjtTQUNsRyxDQUFDO1FBQ0YsR0FBRyxFQUFFLFlBQUssQ0FBQyxNQUFNLENBQUM7WUFDaEIsV0FBVyxFQUFFLHFEQUFxRDtZQUNsRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjO1NBQ3BDLENBQUM7UUFDRixNQUFNLEVBQUUsWUFBSyxDQUFDLE9BQU8sQ0FBQztZQUNwQixXQUFXLEVBQUUsdUNBQXVDO1NBQ3JELENBQUM7UUFDRixNQUFNLEVBQUUsWUFBSyxDQUFDLE1BQU0sQ0FBQztZQUNuQixXQUFXLEVBQUUsdUJBQXVCO1NBQ3JDLENBQUM7UUFDRixNQUFNLEVBQUUsWUFBSyxDQUFDLE1BQU0sQ0FBQztZQUNuQixXQUFXLEVBQUUsdUJBQXVCO1NBQ3JDLENBQUM7UUFDRixPQUFPLEVBQUUsWUFBSyxDQUFDLE9BQU8sQ0FBQztZQUNyQixXQUFXLEVBQUUseUNBQXlDO1lBQ3RELE9BQU8sRUFBRSxHQUFHLEdBQUcsSUFBSTtTQUNwQixDQUFDO1FBQ0YsZUFBZSxFQUFFLFlBQUssQ0FBQyxPQUFPLENBQUM7WUFDN0IsV0FBVyxFQUFFLHVDQUF1QztTQUNyRCxDQUFDO1FBQ0YsSUFBSSxFQUFFLFlBQUssQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFLDZCQUE2QjtZQUMxQyxPQUFPLEVBQUUsTUFBTTtTQUNoQixDQUFDO1FBQ0YsT0FBTyxFQUFFLFlBQUssQ0FBQyxNQUFNLENBQUM7WUFDcEIsT0FBTyxFQUFFLDBCQUEwQjtZQUNuQyxJQUFJLEVBQUUsR0FBRztZQUNULFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUNGLFNBQVMsRUFBRSxZQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxzRUFBc0U7WUFDL0UsT0FBTyxFQUFFLENBQUUsSUFBSSxFQUFFLFlBQVksQ0FBRTtTQUNoQyxDQUFDO0tBQ0gsQ0FBQztJQUVGLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsTUFBTSxDQUFlO0lBRVgsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BQXlCO1FBQ3hELE9BQU8sSUFBQSx3QkFBZ0IsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRVMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGFBQXFCO1FBQ3BELE1BQU0sT0FBTyxHQUFHLG1CQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN6RCxJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7UUFDakIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFBLGtCQUFRLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDbEIsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxTQUFTO1FBQ1gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVTLEtBQUssQ0FBQyxZQUFZO1FBQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztRQUM3RSwyQ0FBMkM7UUFDM0MsSUFBSSxTQUFTLEdBQUcsbUJBQUksQ0FBQyxJQUFJLENBQUMsSUFBQSw0QkFBZ0IsR0FBRSxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUEsZ0JBQU0sRUFBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0IsaURBQWlEO1lBQ2pELFNBQVMsR0FBRyxtQkFBSSxDQUFDLElBQUksQ0FBQyxJQUFBLDRCQUFnQixHQUFFLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sS0FBSyxDQUFDLEdBQUc7UUFDZCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQztRQUM3QixtREFBbUQ7UUFDbkQsbURBQW1EO1FBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUEsc0JBQU8sR0FBRSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLG1CQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV2QyxlQUFlO1FBQ2Ysd0JBQXdCO1FBQ3hCLHdCQUF3QjtRQUN4QixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUM7UUFDbEMsSUFBSSxDQUFDLG1CQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxHQUFHLG1CQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpDLEtBQUssQ0FBQyxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDNUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLE9BQU87U0FDUixDQUFDLENBQUM7UUFFSCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbkUsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLGNBQWMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUzRCxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksbUJBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDdEUsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLG1CQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBRXRFLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzRCxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztRQUVqQyxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUc7WUFDOUIsa0JBQWtCO1lBQ2xCLG1CQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQztZQUN2QyxtRUFBbUU7WUFDbkUsbUJBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQztZQUMvQixxQkFBcUI7WUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJO1NBQy9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhDLGNBQWM7UUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksbUJBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sSUFBQSxnQkFBSyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFeEQsaUZBQWlGO1FBQ2pGLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QseUhBQXlIO1lBQ3pILElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDdEMsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixNQUFNLFFBQVEsR0FBYTtZQUN6QixrQkFBa0I7WUFDbEIsa0JBQWtCO1NBQ25CLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBRSxDQUFDO1lBQ2hHLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzdCLFFBQVEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsTUFBTSxhQUFhLEdBQXdCLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7UUFDckUsSUFBSSxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDM0IsYUFBYSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBRSxhQUFhLENBQUMsT0FBTyxDQUFFLENBQUM7WUFDakgsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFFLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBRSxDQUFDO1FBQ3pFLENBQUM7UUFFRCxrREFBa0Q7UUFDbEQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixLQUFLLE1BQU0sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7b0JBQ3JDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2pELElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUNmLG1DQUFtQzt3QkFDbkMsa0JBQWtCO3dCQUNsQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFDL0IsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLGdEQUFnRDt3QkFDaEQsa0NBQWtDO3dCQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3BDLENBQUM7b0JBQ0QsU0FBUztnQkFDWCxDQUFDO2dCQUNELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDOUIsZ0RBQWdEO29CQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELDBDQUEwQztRQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUQsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSxxQkFBYSxFQUFDLGdDQUFnQyxFQUFFO2dCQUN2RSxLQUFLLEVBQUUsQ0FBRSxJQUFBLDRCQUFnQixHQUFFLENBQUU7YUFDOUIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUM5QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUMvQyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqRCxLQUFLLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxLQUFLLENBQUMscURBQXFELEVBQ3pELEtBQUssRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTNDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQWlCO1lBQzVCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLEtBQUssRUFBRSxTQUFTO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsR0FBRyxFQUFFLE9BQU87U0FDYixDQUFDO1FBRUYsSUFBSSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEUsa0ZBQWtGO1FBQ2xGLE1BQU0sVUFBVSxHQUFHLENBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFFLENBQUM7UUFDL0YsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDO1lBQy9CLEdBQUcsS0FBSztZQUNSLE9BQU87U0FDUixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2Ysb0VBQW9FO1FBQ3BFLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLENBQUUsR0FBRyxRQUFRLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxXQUFXLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBRSxDQUFDO1FBQ3JGLE1BQU0sV0FBVyxHQUFHLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFbEMsaUNBQWlDO1FBQ2pDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFFLE1BQU0sRUFBRSxNQUFNLENBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQzNDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUMxQixZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQzthQUMzQixDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFFLENBQUM7WUFDcEQsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFBLDBCQUFLLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUMvQixrRUFBa0U7Z0JBQ2xFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2QsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNyQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxxQkFBcUI7WUFDckIsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsS0FBSyxHQUFHLENBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFFLENBQUM7WUFDM0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFBLDBCQUFLLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3RCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLElBQUk7b0JBQUUsT0FBTztnQkFDbEIsK0NBQStDO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1lBRUgsZ0NBQWdDO1lBQ2hDLElBQUksTUFBTSxDQUFDO1lBQ1gsTUFBTSxPQUFPLEdBQUcsQ0FBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBc0IsQ0FBQztZQUN2RSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7b0JBQ3ZCLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUNsRCxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFUyxLQUFLLENBQUMsV0FBVztRQUN6QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU8sQ0FBQztRQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQztnQkFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUEsZUFBSSxFQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM1QixRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUNoQixNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxVQUFVO1lBQ1osQ0FBQztZQUVELElBQUksS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN2RCxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUNsQixNQUFNO1lBQ1IsQ0FBQztZQUVELE1BQU0sb0JBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBSSxHQUFHLENBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDNUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzVELElBQUksQ0FBQyxXQUFXLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELENBQUM7WUFDRCxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUIsTUFBTSxvQkFBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7O0FBalZILHdCQWtWQztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQXdCLEVBQUUsTUFBZ0I7SUFDM0QsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztJQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxLQUFLLFVBQVUsWUFBWSxDQUFDLE9BQWU7SUFDekMsTUFBTSxJQUFBLGdCQUFLLEVBQUMsbUJBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUV4RCxJQUFJLE1BQU0sSUFBQSxnQkFBTSxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDMUIsaUNBQWlDO1FBQ2pDLE1BQU0sQ0FBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRSxHQUFHLElBQUEsNEJBQWtCLEdBQUUsQ0FBQztRQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDdkQsMkVBQTJFO1FBQzNFLE1BQU0sSUFBQSxpQkFBTSxFQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFNLElBQUEsZUFBSSxFQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN2QyxDQUFDIn0=
@@ -1,16 +0,0 @@
1
- import { BaseCommand } from '../baseCommand.js';
2
- import { NodeProcess } from '../helper.js';
3
- export default class Stop<T extends typeof Stop> extends BaseCommand<T> {
4
- static description: string;
5
- static examples: string[];
6
- static args: {
7
- baseDir: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
- };
9
- static flags: {
10
- title: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
- };
13
- run(): Promise<void>;
14
- protected findNodeProcesses(filter: (item: NodeProcess) => boolean): Promise<NodeProcess[]>;
15
- protected killProcesses(pids: number[], signal?: NodeJS.Signals): void;
16
- }
@@ -1,95 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const node_util_1 = require("node:util");
4
- const promises_1 = require("node:timers/promises");
5
- const core_1 = require("@oclif/core");
6
- const baseCommand_js_1 = require("../baseCommand.js");
7
- const helper_js_1 = require("../helper.js");
8
- const debug = (0, node_util_1.debuglog)('@eggjs/scripts/commands/stop');
9
- const osRelated = {
10
- titleTemplate: helper_js_1.isWindows ? '\\"title\\":\\"%s\\"' : '"title":"%s"',
11
- // node_modules/@eggjs/cluster/dist/commonjs/app_worker.js
12
- // node_modules/@eggjs/cluster/dist/esm/app_worker.js
13
- appWorkerPath: /@eggjs[\/\\]cluster[\/\\]dist[\/\\](commonjs|esm)[\/\\]app_worker\.js/i,
14
- // node_modules/@eggjs/cluster/dist/commonjs/agent_worker.js
15
- // node_modules/@eggjs/cluster/dist/esm/agent_worker.js
16
- agentWorkerPath: /@eggjs[\/\\]cluster[\/\\]dist[\/\\](commonjs|esm)[\/\\]agent_worker\.js/i,
17
- };
18
- class Stop extends baseCommand_js_1.BaseCommand {
19
- static description = 'Stop server';
20
- static examples = [
21
- '<%= config.bin %> <%= command.id %>',
22
- ];
23
- static args = {
24
- baseDir: core_1.Args.string({
25
- description: 'directory of application',
26
- required: false,
27
- }),
28
- };
29
- static flags = {
30
- title: core_1.Flags.string({
31
- description: 'process title description, use for kill grep',
32
- }),
33
- timeout: core_1.Flags.integer({
34
- description: 'the maximum timeout(ms) when app stop',
35
- default: 5000,
36
- }),
37
- };
38
- async run() {
39
- const { flags } = this;
40
- this.log(`stopping egg application${flags.title ? ` with --title=${flags.title}` : ''}`);
41
- // node ~/eggjs/scripts/scripts/start-cluster.cjs {"title":"egg-server","workers":4,"port":7001,"baseDir":"~/eggjs/test/showcase","framework":"~/eggjs/test/showcase/node_modules/egg"}
42
- let processList = await this.findNodeProcesses(item => {
43
- const cmd = item.cmd;
44
- const matched = flags.title ?
45
- cmd.includes('start-cluster') && cmd.includes((0, node_util_1.format)(osRelated.titleTemplate, flags.title)) :
46
- cmd.includes('start-cluster');
47
- if (matched) {
48
- debug('find master process: %o', item);
49
- }
50
- return matched;
51
- });
52
- let pids = processList.map(x => x.pid);
53
- if (pids.length) {
54
- this.log('got master pid %j, list:', pids);
55
- this.log('');
56
- for (const item of processList) {
57
- this.log('- %s: %o', item.pid, item.cmd);
58
- }
59
- this.log('');
60
- this.killProcesses(pids);
61
- // wait for 5s to confirm whether any worker process did not kill by master
62
- await promises_1.scheduler.wait(flags.timeout);
63
- }
64
- else {
65
- this.logToStderr('can\'t detect any running egg process');
66
- }
67
- // node --debug-port=5856 /Users/tz/Workspaces/eggjs/test/showcase/node_modules/_egg-cluster@1.8.0@egg-cluster/lib/agent_worker.js {"framework":"/Users/tz/Workspaces/eggjs/test/showcase/node_modules/egg","baseDir":"/Users/tz/Workspaces/eggjs/test/showcase","port":7001,"workers":2,"plugins":null,"https":false,"key":"","cert":"","title":"egg-server","clusterPort":52406}
68
- // node /Users/tz/Workspaces/eggjs/test/showcase/node_modules/_egg-cluster@1.8.0@egg-cluster/lib/app_worker.js {"framework":"/Users/tz/Workspaces/eggjs/test/showcase/node_modules/egg","baseDir":"/Users/tz/Workspaces/eggjs/test/showcase","port":7001,"workers":2,"plugins":null,"https":false,"key":"","cert":"","title":"egg-server","clusterPort":52406}
69
- // ~/bin/node --no-deprecation --trace-warnings ~/eggjs/examples/helloworld/node_modules/@eggjs/cluster/dist/commonjs/agent_worker.js {"baseDir":"~/eggjs/examples/helloworld","startMode":"process","framework":"~/eggjs/examples/helloworld/node_modules/egg","title":"egg-server-helloworld","workers":10,"clusterPort":58977}
70
- processList = await this.findNodeProcesses(item => {
71
- const cmd = item.cmd;
72
- const matched = flags.title ?
73
- (osRelated.appWorkerPath.test(cmd) || osRelated.agentWorkerPath.test(cmd)) && cmd.includes((0, node_util_1.format)(osRelated.titleTemplate, flags.title)) :
74
- (osRelated.appWorkerPath.test(cmd) || osRelated.agentWorkerPath.test(cmd));
75
- if (matched) {
76
- debug('find app/agent worker process: %o', item);
77
- }
78
- return matched;
79
- });
80
- pids = processList.map(x => x.pid);
81
- if (pids.length) {
82
- this.log('got worker/agent pids %j that is not killed by master', pids);
83
- this.killProcesses(pids);
84
- }
85
- this.log('stopped');
86
- }
87
- async findNodeProcesses(filter) {
88
- return (0, helper_js_1.findNodeProcess)(filter);
89
- }
90
- killProcesses(pids, signal = 'SIGTERM') {
91
- (0, helper_js_1.kill)(pids, signal);
92
- }
93
- }
94
- exports.default = Stop;
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zdG9wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQTZDO0FBQzdDLG1EQUFpRDtBQUNqRCxzQ0FBMEM7QUFDMUMsc0RBQWdEO0FBQ2hELDRDQUE2RTtBQUU3RSxNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFRLEVBQUMsOEJBQThCLENBQUMsQ0FBQztBQUV2RCxNQUFNLFNBQVMsR0FBRztJQUNoQixhQUFhLEVBQUUscUJBQVMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLGNBQWM7SUFDbEUsMERBQTBEO0lBQzFELHFEQUFxRDtJQUNyRCxhQUFhLEVBQUUsd0VBQXdFO0lBQ3ZGLDREQUE0RDtJQUM1RCx1REFBdUQ7SUFDdkQsZUFBZSxFQUFFLDBFQUEwRTtDQUM1RixDQUFDO0FBRUYsTUFBcUIsSUFBNEIsU0FBUSw0QkFBYztJQUNyRSxNQUFNLENBQVUsV0FBVyxHQUFHLGFBQWEsQ0FBQztJQUU1QyxNQUFNLENBQVUsUUFBUSxHQUFHO1FBQ3pCLHFDQUFxQztLQUN0QyxDQUFDO0lBRUYsTUFBTSxDQUFVLElBQUksR0FBRztRQUNyQixPQUFPLEVBQUUsV0FBSSxDQUFDLE1BQU0sQ0FBQztZQUNuQixXQUFXLEVBQUUsMEJBQTBCO1lBQ3ZDLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFVLEtBQUssR0FBRztRQUN0QixLQUFLLEVBQUUsWUFBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQixXQUFXLEVBQUUsOENBQThDO1NBQzVELENBQUM7UUFDRixPQUFPLEVBQUUsWUFBSyxDQUFDLE9BQU8sQ0FBQztZQUNyQixXQUFXLEVBQUUsdUNBQXVDO1lBQ3BELE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztLQUNILENBQUM7SUFFSyxLQUFLLENBQUMsR0FBRztRQUNkLE1BQU0sRUFBRSxLQUFL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
@@ -1,10 +0,0 @@
1
- export declare const isWindows: boolean;
2
- export interface NodeProcess {
3
- pid: number;
4
- cmd: string;
5
- }
6
- export type FilterFunction = (item: NodeProcess) => boolean;
7
- export declare function findNodeProcess(filterFn?: FilterFunction): Promise<NodeProcess[]>;
8
- export declare function kill(pids: number[], signal?: string | number): void;
9
- export declare function getSourceDirname(): string;
10
- export declare function getSourceFilename(filename: string): string;
@@ -1,61 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isWindows = void 0;
7
- exports.findNodeProcess = findNodeProcess;
8
- exports.kill = kill;
9
- exports.getSourceDirname = getSourceDirname;
10
- exports.getSourceFilename = getSourceFilename;
11
- const runscript_1 = require("runscript");
12
- const node_path_1 = __importDefault(require("node:path"));
13
- const node_url_1 = require("node:url");
14
- exports.isWindows = process.platform === 'win32';
15
- const REGEX = exports.isWindows ? /^(.*)\s+(\d+)\s*$/ : /^\s*(\d+)\s+(.*)/;
16
- async function findNodeProcess(filterFn) {
17
- const command = exports.isWindows ?
18
- 'wmic Path win32_process Where "Name = \'node.exe\'" Get CommandLine,ProcessId' :
19
- // command, cmd are alias of args, not POSIX standard, so we use args
20
- 'ps -wweo "pid,args"';
21
- const stdio = await (0, runscript_1.runScript)(command, { stdio: 'pipe' });
22
- const processList = stdio.stdout.toString().split('\n')
23
- .reduce((arr, line) => {
24
- if (!!line && !line.includes('/bin/sh') && line.includes('node')) {
25
- const m = line.match(REGEX);
26
- if (m) {
27
- const item = exports.isWindows ? { pid: parseInt(m[2]), cmd: m[1] } : { pid: parseInt(m[1]), cmd: m[2] };
28
- if (filterFn?.(item)) {
29
- arr.push(item);
30
- }
31
- }
32
- }
33
- return arr;
34
- }, []);
35
- return processList;
36
- }
37
- function kill(pids, signal) {
38
- pids.forEach(pid => {
39
- try {
40
- process.kill(pid, signal);
41
- }
42
- catch (err) {
43
- if (err.code !== 'ESRCH') {
44
- throw err;
45
- }
46
- }
47
- });
48
- }
49
- function getSourceDirname() {
50
- if (typeof __dirname === 'string') {
51
- return __dirname;
52
- }
53
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
54
- // @ts-ignore
55
- const __filename = (0, node_url_1.fileURLToPath)('import_meta_url_placeholder_by_tshy_after');
56
- return node_path_1.default.dirname(__filename);
57
- }
58
- function getSourceFilename(filename) {
59
- return node_path_1.default.join(getSourceDirname(), filename);
60
- }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFlQSwwQ0FvQkM7QUFFRCxvQkFVQztBQUVELDRDQVFDO0FBRUQsOENBRUM7QUE3REQseUNBQXNDO0FBQ3RDLDBEQUE2QjtBQUM3Qix1Q0FBeUM7QUFFNUIsUUFBQSxTQUFTLEdBQUcsT0FBTyxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUM7QUFFdEQsTUFBTSxLQUFLLEdBQUcsaUJBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO0FBUzVELEtBQUssVUFBVSxlQUFlLENBQUMsUUFBeUI7SUFDN0QsTUFBTSxPQUFPLEdBQUcsaUJBQVMsQ0FBQyxDQUFDO1FBQ3pCLCtFQUErRSxDQUFDLENBQUM7UUFDakYscUVBQXFFO1FBQ3JFLHFCQUFxQixDQUFDO0lBQ3hCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBQSxxQkFBUyxFQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzFELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztTQUNyRCxNQUFNLENBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3JDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDTixNQUFNLElBQUksR0FBZ0IsaUJBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUcsSUFBSSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNyQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNQLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFnQixJQUFJLENBQUMsSUFBYyxFQUFFLE1BQXdCO0lBQzNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDakIsSUFBSSxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixNQUFNLEdBQUcsQ0FBQztZQUNaLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0IsZ0JBQWdCO0lBQzlCLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbEMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELDZEQUE2RDtJQUM3RCxhQUFhO0lBQ2IsTUFBTSxVQUFVLEdBQUcsSUFBQSx3QkFBYSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsT0FBTyxtQkFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsUUFBZ0I7SUFDaEQsT0FBTyxtQkFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pELENBQUMifQ==
@@ -1,3 +0,0 @@
1
- import Start from './commands/start.js';
2
- export * from './baseCommand.js';
3
- export { Start, Start as StartCommand, };
@@ -1,26 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- var __importDefault = (this && this.__importDefault) || function (mod) {
17
- return (mod && mod.__esModule) ? mod : { "default": mod };
18
- };
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.StartCommand = exports.Start = void 0;
21
- const start_js_1 = __importDefault(require("./commands/start.js"));
22
- exports.Start = start_js_1.default;
23
- exports.StartCommand = start_js_1.default;
24
- // exports.StopCommand = require('./lib/cmd/stop');
25
- __exportStar(require("./baseCommand.js"), exports);
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtRUFBd0M7QUFNdEMsZ0JBTkssa0JBQUssQ0FNTDtBQUFXLHVCQU5YLGtCQUFLLENBTWtCO0FBSjlCLG1EQUFtRDtBQUVuRCxtREFBaUMifQ==
@@ -1,3 +0,0 @@
1
- {
2
- "type": "commonjs"
3
- }
@@ -1,9 +0,0 @@
1
- export interface PackageEgg {
2
- framework?: boolean;
3
- typescript?: boolean;
4
- tscompiler?: string;
5
- declarations?: boolean;
6
- revert?: string | string[];
7
- require?: string | string[];
8
- import?: string | string[];
9
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -1,25 +0,0 @@
1
- import { Command, Flags, Interfaces } from '@oclif/core';
2
- import { PackageEgg } from './types.js';
3
- type Flags<T extends typeof Command> = Interfaces.InferredFlags<typeof BaseCommand['baseFlags'] & T['flags']>;
4
- type Args<T extends typeof Command> = Interfaces.InferredArgs<T['args']>;
5
- export declare abstract class BaseCommand<T extends typeof Command> extends Command {
6
- static enableJsonFlag: boolean;
7
- static baseFlags: {};
8
- protected flags: Flags<T>;
9
- protected args: Args<T>;
10
- protected env: {
11
- [x: string]: string | undefined;
12
- TZ?: string;
13
- };
14
- protected pkg: Record<string, any>;
15
- protected isESM: boolean;
16
- protected pkgEgg: PackageEgg;
17
- protected globalExecArgv: string[];
18
- init(): Promise<void>;
19
- protected initBaseInfo(baseDir: string): Promise<void>;
20
- protected catch(err: Error & {
21
- exitCode?: number;
22
- }): Promise<any>;
23
- protected finally(_: Error | undefined): Promise<any>;
24
- }
25
- export {};