rs-runner
Version:
RS is a CLI tool for quickly detecting package.json scripts, and running them.
179 lines (178 loc) • 7.24 kB
JavaScript
;
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;