106 lines
3.9 KiB
JavaScript
Executable File
106 lines
3.9 KiB
JavaScript
Executable File
"use strict";
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
}) : (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
o[k2] = m[k];
|
|
}));
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
}) : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.createCircuitBreaker = exports.handleCircuitBreaker = exports.versionFlag = exports.helpFlag = void 0;
|
|
const types_1 = require("./types");
|
|
const flag_1 = require("./flag");
|
|
const Result = __importStar(require("./Result"));
|
|
const effects_1 = require("./effects");
|
|
exports.helpFlag = flag_1.flag({
|
|
long: 'help',
|
|
short: 'h',
|
|
type: types_1.boolean,
|
|
description: 'show help',
|
|
});
|
|
exports.versionFlag = flag_1.flag({
|
|
long: 'version',
|
|
short: 'v',
|
|
type: types_1.boolean,
|
|
description: 'print the version',
|
|
});
|
|
function handleCircuitBreaker(context, value, breaker) {
|
|
if (Result.isErr(breaker)) {
|
|
return;
|
|
}
|
|
if (breaker.value === 'help') {
|
|
const message = value.printHelp(context);
|
|
throw new effects_1.Exit({ exitCode: 1, message, into: 'stdout' });
|
|
}
|
|
else if (breaker.value === 'version') {
|
|
const message = value.version || '0.0.0';
|
|
throw new effects_1.Exit({ exitCode: 0, message, into: 'stdout' });
|
|
}
|
|
}
|
|
exports.handleCircuitBreaker = handleCircuitBreaker;
|
|
/**
|
|
* Helper flags that are being used in `command` and `subcommands`:
|
|
* `--help, -h` to show help
|
|
* `--version, -v` to show the current version
|
|
*
|
|
* It is called circuitbreaker because if you have `--help` or `--version`
|
|
* anywhere in your argument list, you'll see the version and the help for the closest command
|
|
*/
|
|
function createCircuitBreaker(withVersion) {
|
|
return {
|
|
register(opts) {
|
|
exports.helpFlag.register(opts);
|
|
if (withVersion) {
|
|
exports.versionFlag.register(opts);
|
|
}
|
|
},
|
|
helpTopics() {
|
|
const helpTopics = exports.helpFlag.helpTopics();
|
|
if (withVersion) {
|
|
helpTopics.push(...exports.versionFlag.helpTopics());
|
|
}
|
|
return helpTopics;
|
|
},
|
|
async parse(context) {
|
|
const help = await exports.helpFlag.parse(context);
|
|
const version = withVersion
|
|
? await exports.versionFlag.parse(context)
|
|
: undefined;
|
|
if (Result.isErr(help) || (version && Result.isErr(version))) {
|
|
const helpErrors = Result.isErr(help) ? help.error.errors : [];
|
|
const versionErrors = version && Result.isErr(version) ? version.error.errors : [];
|
|
return Result.err({ errors: [...helpErrors, ...versionErrors] });
|
|
}
|
|
if (help.value) {
|
|
return Result.ok('help');
|
|
}
|
|
else if (version === null || version === void 0 ? void 0 : version.value) {
|
|
return Result.ok('version');
|
|
}
|
|
else {
|
|
return Result.err({
|
|
errors: [
|
|
{
|
|
nodes: [],
|
|
message: 'Neither help nor version',
|
|
},
|
|
],
|
|
});
|
|
}
|
|
},
|
|
};
|
|
}
|
|
exports.createCircuitBreaker = createCircuitBreaker;
|
|
//# sourceMappingURL=circuitbreaker.js.map
|