UNPKG

rs-runner

Version:

RS is a CLI tool for quickly detecting package.json scripts, and running them.

179 lines (178 loc) 7.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.removeDirectoryScript = exports.addNewDirectoryScript = exports.removeGlobalScript = exports.addNewGlobalScript = exports.getDirectoryScripts = exports.getGlobalScripts = exports.validateScript = void 0; var output_1 = require("./output"); var config_1 = require("./config"); // Patterns that might indicate issues in scripts var SUSPICIOUS_PATTERNS = [ { pattern: /;\s*rm\s+-rf\s+\//, message: 'dangerous rm -rf /' }, { pattern: />\s*\/dev\/sd[a-z]/, message: 'writes to block device' }, { pattern: /\$\([^)]*\).*\$\([^)]*\)/, message: 'nested command substitution (verify intent)' }, ]; var validateScript = function (command) { var warnings = []; // Check for empty command if (!command || command.trim().length === 0) { return { valid: false, warnings: ['Script command cannot be empty'] }; } // Check for suspicious patterns for (var _i = 0, SUSPICIOUS_PATTERNS_1 = SUSPICIOUS_PATTERNS; _i < SUSPICIOUS_PATTERNS_1.length; _i++) { var _a = SUSPICIOUS_PATTERNS_1[_i], pattern = _a.pattern, message = _a.message; if (pattern.test(command)) { warnings.push("Warning: ".concat(message)); } } return { valid: true, warnings: warnings }; }; exports.validateScript = validateScript; var getGlobalScripts = function () { var config = (0, config_1.getConfig)(); if (config && config.globalScripts) { return config.globalScripts; } return {}; }; exports.getGlobalScripts = getGlobalScripts; var getDirectoryScripts = function () { var config = (0, config_1.getConfig)(); var currentDir = process.cwd(); if (config && config.directoryScripts && config.directoryScripts[currentDir]) { return config.directoryScripts[currentDir]; } return {}; }; exports.getDirectoryScripts = getDirectoryScripts; var addNewGlobalScript = function (key, value) { // Validate the script command var validation = (0, exports.validateScript)(value); if (!validation.valid) { output_1.output.error(validation.warnings[0]); return; } // Show warnings but continue for (var _i = 0, _a = validation.warnings; _i < _a.length; _i++) { var warning = _a[_i]; output_1.output.warn(warning); } var config = (0, config_1.getConfig)(); if (!config) { config = { globalScripts: {}, directoryScripts: {}, }; } if (!config.globalScripts) { config.globalScripts = {}; } if (config.globalScripts.hasOwnProperty(key)) { output_1.output.warn("Global script '".concat(key, "' already exists. Overwriting...")); } config.globalScripts[key] = value; if (!(0, config_1.writeConfig)(config)) { return; } var updatedConfig = (0, config_1.getConfig)(); if (updatedConfig && updatedConfig.globalScripts[key] === value) { (0, output_1.output)("Global script '".concat(key, "' added successfully."), 'green'); (0, output_1.output)(JSON.stringify(updatedConfig.globalScripts, null, 2), 'blue'); } else { output_1.output.error('Failed to verify script was saved correctly.'); } }; exports.addNewGlobalScript = addNewGlobalScript; var removeGlobalScript = function (key) { var config = (0, config_1.getConfig)(); if (!config) { output_1.output.warn('No global scripts configuration found.'); return; } if (config.globalScripts && config.globalScripts.hasOwnProperty(key)) { delete config.globalScripts[key]; if ((0, config_1.writeConfig)(config)) { (0, output_1.output)("Global script '".concat(key, "' removed successfully."), 'green'); } } else { var available = Object.keys(config.globalScripts || {}); if (available.length > 0) { output_1.output.warn("Global script '".concat(key, "' not found. Available: ").concat(available.join(', '))); } else { output_1.output.warn("Global script '".concat(key, "' not found. No global scripts defined.")); } } }; exports.removeGlobalScript = removeGlobalScript; var addNewDirectoryScript = function (key, value) { var _a, _b; // Validate the script command var validation = (0, exports.validateScript)(value); if (!validation.valid) { output_1.output.error(validation.warnings[0]); return; } // Show warnings but continue for (var _i = 0, _c = validation.warnings; _i < _c.length; _i++) { var warning = _c[_i]; output_1.output.warn(warning); } var config = (0, config_1.getConfig)(); var currentDir = process.cwd(); if (!config) { config = { globalScripts: {}, directoryScripts: {}, }; } if (!config.directoryScripts) { config.directoryScripts = {}; } if (!config.directoryScripts[currentDir]) { config.directoryScripts[currentDir] = {}; } if (config.directoryScripts[currentDir].hasOwnProperty(key)) { output_1.output.warn("Directory script '".concat(key, "' already exists for ").concat(currentDir, ". Overwriting...")); } config.directoryScripts[currentDir][key] = value; if (!(0, config_1.writeConfig)(config)) { return; } var updatedConfig = (0, config_1.getConfig)(); if (updatedConfig && ((_b = (_a = updatedConfig.directoryScripts) === null || _a === void 0 ? void 0 : _a[currentDir]) === null || _b === void 0 ? void 0 : _b[key]) === value) { (0, output_1.output)("Directory script '".concat(key, "' added successfully for ").concat(currentDir), 'green'); (0, output_1.output)(JSON.stringify(updatedConfig.directoryScripts[currentDir], null, 2), 'blue'); } else { output_1.output.error('Failed to verify script was saved correctly.'); } }; exports.addNewDirectoryScript = addNewDirectoryScript; var removeDirectoryScript = function (key) { var config = (0, config_1.getConfig)(); var currentDir = process.cwd(); if (!config || !config.directoryScripts || !config.directoryScripts[currentDir]) { output_1.output.warn('No directory scripts found for current directory.'); return; } if (config.directoryScripts[currentDir].hasOwnProperty(key)) { delete config.directoryScripts[currentDir][key]; // Clean up empty directory entries if (Object.keys(config.directoryScripts[currentDir]).length === 0) { delete config.directoryScripts[currentDir]; } if ((0, config_1.writeConfig)(config)) { (0, output_1.output)("Directory script '".concat(key, "' removed successfully."), 'green'); } } else { var available = Object.keys(config.directoryScripts[currentDir]); if (available.length > 0) { output_1.output.warn("Directory script '".concat(key, "' not found. Available: ").concat(available.join(', '))); } else { output_1.output.warn("Directory script '".concat(key, "' not found in current directory.")); } } }; exports.removeDirectoryScript = removeDirectoryScript;