UNPKG

simple-git

Version:

Simple GIT interface for node.js

84 lines 3.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const CleanSummary_1 = require("../responses/CleanSummary"); const utils_1 = require("../utils"); const task_1 = require("./task"); exports.CONFIG_ERROR_INTERACTIVE_MODE = 'Git clean interactive mode is not supported'; exports.CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter ("n" or "f") is required'; exports.CONFIG_ERROR_UNKNOWN_OPTION = 'Git clean unknown option found in: '; /** * All supported option switches available for use in a `git.clean` operation */ var CleanOptions; (function (CleanOptions) { CleanOptions["DRY_RUN"] = "n"; CleanOptions["FORCE"] = "f"; CleanOptions["IGNORED_INCLUDED"] = "x"; CleanOptions["IGNORED_ONLY"] = "X"; CleanOptions["EXCLUDING"] = "e"; CleanOptions["QUIET"] = "q"; CleanOptions["RECURSIVE"] = "d"; })(CleanOptions = exports.CleanOptions || (exports.CleanOptions = {})); const CleanOptionValues = new Set(['i', ...utils_1.asStringArray(Object.values(CleanOptions))]); function cleanWithOptionsTask(mode, customArgs) { const { cleanMode, options, valid } = getCleanOptions(mode); if (!cleanMode) { return task_1.configurationErrorTask(exports.CONFIG_ERROR_MODE_REQUIRED); } if (!valid.options) { return task_1.configurationErrorTask(exports.CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode)); } options.push(...customArgs); if (options.some(isInteractiveMode)) { return task_1.configurationErrorTask(exports.CONFIG_ERROR_INTERACTIVE_MODE); } return cleanTask(cleanMode, options); } exports.cleanWithOptionsTask = cleanWithOptionsTask; function cleanTask(mode, customArgs) { const commands = ['clean', `-${mode}`, ...customArgs]; return { commands, format: 'utf-8', parser(text) { return CleanSummary_1.cleanSummaryParser(mode === CleanOptions.DRY_RUN, text); } }; } exports.cleanTask = cleanTask; function isCleanOptionsArray(input) { return Array.isArray(input) && input.every(test => CleanOptionValues.has(test)); } exports.isCleanOptionsArray = isCleanOptionsArray; function getCleanOptions(input) { let cleanMode; let options = []; let valid = { cleanMode: false, options: true }; input.replace(/[^a-z]i/g, '').split('').forEach(char => { if (isCleanMode(char)) { cleanMode = char; valid.cleanMode = true; } else { valid.options = valid.options && isKnownOption(options[options.length] = (`-${char}`)); } }); return { cleanMode, options, valid, }; } function isCleanMode(cleanMode) { return cleanMode === CleanOptions.FORCE || cleanMode === CleanOptions.DRY_RUN; } function isKnownOption(option) { return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1)); } function isInteractiveMode(option) { if (/^-[^\-]/.test(option)) { return option.indexOf('i') > 0; } return option === '--interactive'; } //# sourceMappingURL=clean.js.map