"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