forest-cli
Version:
The Lumberjacks' toolbelt is the Forest CLI which makes easy to manage your back office application directly from the terminal.
39 lines • 3.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.findBySecret = exports.findByFlag = exports.ScopeError = void 0;
/**
* Pure, IO-free matchers used to turn a `--env` / `--team` flag (accepting either
* an id or a name) or an environment secret into a concrete candidate. The
* candidate lists are injected, so these are exercised in tests with plain arrays
* and reused by {@link resolveCommandScope} on top of the existing
* EnvironmentManager / TeamManager. Selection of a default (prompting the user) is
* deliberately NOT done here — it belongs to the IO layer.
*/
class ScopeError extends Error {
constructor(message) {
super(message);
this.name = 'ScopeError';
}
}
exports.ScopeError = ScopeError;
/** Resolve a candidate from a flag given as an id or a (case-insensitive) name. */
function findByFlag(kind, flag, candidates) {
const match = candidates.find(candidate => String(candidate.id) === flag) ??
candidates.find(candidate => candidate.name.toLowerCase() === flag.toLowerCase());
if (!match) {
const available = candidates.map(candidate => `${candidate.name} (#${candidate.id})`).join(', ') || 'none';
throw new ScopeError(`${kind} "${flag}" not found. Available: ${available}.`);
}
return match;
}
exports.findByFlag = findByFlag;
/** Resolve the candidate designated by an environment secret. */
function findBySecret(kind, secret, candidates) {
const match = candidates.find(candidate => candidate.secretKey !== undefined && String(candidate.secretKey) === secret);
if (!match) {
throw new ScopeError(`No ${kind.toLowerCase()} matches FOREST_ENV_SECRET. Target one explicitly with --env.`);
}
return match;
}
exports.findBySecret = findBySecret;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUtcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvbGF5b3V0L3Njb3BlLXJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7O0dBT0c7QUFDSCxNQUFhLFVBQVcsU0FBUSxLQUFLO0lBQ25DLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFMRCxnQ0FLQztBQUlELG1GQUFtRjtBQUNuRixTQUFnQixVQUFVLENBQUMsSUFBWSxFQUFFLElBQVksRUFBRSxVQUF1QjtJQUM1RSxNQUFNLEtBQUssR0FDVCxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUM7UUFDM0QsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFFcEYsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE1BQU0sU0FBUyxHQUNiLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLE1BQU0sU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUMzRixNQUFNLElBQUksVUFBVSxDQUFDLEdBQUcsSUFBSSxLQUFLLElBQUksMkJBQTJCLFNBQVMsR0FBRyxDQUFDLENBQUM7S0FDL0U7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFaRCxnQ0FZQztBQUVELGlFQUFpRTtBQUNqRSxTQUFnQixZQUFZLENBQUMsSUFBWSxFQUFFLE1BQWMsRUFBRSxVQUF1QjtJQUNoRixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUMzQixTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssTUFBTSxDQUN6RixDQUFDO0lBRUYsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE1BQU0sSUFBSSxVQUFVLENBQ2xCLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSwrREFBK0QsQ0FDeEYsQ0FBQztLQUNIO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBWkQsb0NBWUMifQ==