2019-04-02 11:26:21 +00:00
|
|
|
/**
|
|
|
|
* @license
|
|
|
|
* Copyright 2019 Balena Ltd.
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
2019-06-24 15:51:07 +00:00
|
|
|
import { Main } from '@oclif/command';
|
2019-04-02 11:26:21 +00:00
|
|
|
|
2019-08-28 01:14:19 +00:00
|
|
|
import { trackPromise } from './hooks/prerun/track';
|
2019-04-02 11:26:21 +00:00
|
|
|
|
2019-06-24 15:51:07 +00:00
|
|
|
class CustomMain extends Main {
|
|
|
|
protected _helpOverride(): boolean {
|
|
|
|
// Disable oclif's default handler for the 'version' command
|
|
|
|
if (['-v', '--version', 'version'].includes(this.argv[0])) {
|
|
|
|
return false;
|
|
|
|
} else {
|
|
|
|
return super._helpOverride();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-28 18:51:56 +00:00
|
|
|
type AppOptions = import('./preparser').AppOptions;
|
|
|
|
|
2019-04-02 11:26:21 +00:00
|
|
|
/**
|
|
|
|
* oclif CLI entrypoint
|
|
|
|
*/
|
2019-08-28 18:51:56 +00:00
|
|
|
export async function run(command: string[], options: AppOptions) {
|
2019-08-28 01:14:19 +00:00
|
|
|
const runPromise = CustomMain.run(command).then(
|
2019-08-09 17:36:52 +00:00
|
|
|
() => {
|
|
|
|
if (!options.noFlush) {
|
|
|
|
return require('@oclif/command/flush');
|
|
|
|
}
|
|
|
|
},
|
2020-06-15 22:53:07 +00:00
|
|
|
(error) => {
|
2019-04-02 11:26:21 +00:00
|
|
|
// oclif sometimes exits with ExitError code 0 (not an error)
|
2020-04-18 01:31:13 +00:00
|
|
|
// (Avoid `error instanceof ExitError` here for the reasons explained
|
|
|
|
// in the CONTRIBUTING.md file regarding the `instanceof` operator.)
|
|
|
|
if (error.oclif?.exit === 0) {
|
2019-04-02 11:26:21 +00:00
|
|
|
return;
|
2019-08-28 01:14:19 +00:00
|
|
|
} else {
|
|
|
|
throw error;
|
2019-04-02 11:26:21 +00:00
|
|
|
}
|
2019-06-24 15:51:07 +00:00
|
|
|
},
|
|
|
|
);
|
2019-08-28 18:51:56 +00:00
|
|
|
try {
|
|
|
|
await Promise.all([trackPromise, runPromise]);
|
|
|
|
} catch (err) {
|
|
|
|
await (await import('./errors')).handleError(err);
|
|
|
|
}
|
2019-04-02 11:26:21 +00:00
|
|
|
}
|