GitXplorerGitXplorer
n

shelljs-exec-proxy

public
41 stars
4 forks
7 issues

Commits

List of commits on branch main.
Unverified
767d6044e14847822d3b40e32d47fe6e5c41cf2b

test: enable glob test case on Windows

nnfischer committed 7 months ago
Unverified
3dee12846a2e04ed088ad3fc0a8c7e36111bf531

test: cleanup cross-platform behavior in tests

nnfischer committed 7 months ago
Unverified
322deddc12e03423bd4f7df4caa9f3127959d9ae

test: create temp files in a separate folder

nnfischer committed 7 months ago
Unverified
1baf550b86e7f8c3d179d334dfd064f42e84ea0b

test: fix subcommand test case

nnfischer committed 7 months ago
Unverified
db49eeb8841eea843bd2ea6415f1ea2130ff5f58

chore: drop unsupported node versions on macOS

nnfischer committed 7 months ago
Unverified
82f46167e8b121eb306de40133be3d175b34d2a5

chore: switch to codecov v4

nnfischer committed 7 months ago

README

The README file for this repository.

ShellJS Exec Proxy

GitHub Actions Codecov npm npm downloads

Unleash the power of unlimited ShellJS commands... with ES6 Proxies!

Do you like ShellJS, but wish it had your favorite commands? Skip the weird exec() calls by using shelljs-exec-proxy:

// Our goal: make a commit: `$ git commit -am "I'm updating the \"foo\" module to be more secure"`
// Standard ShellJS requires the exec function, with confusing string escaping:
shell.exec('git commit -am "I\'m updating the \\"foo\\" module to be more secure"');
// Skip the extra string escaping with shelljs-exec-proxy!
shell.git.commit('-am', `I'm updating the "foo" module to be more secure`);

Installation

Important: This is only available for Node v6+ (it requires ES6 Proxies!)

$ npm install --save shelljs-exec-proxy

Get that JavaScript feeling back in your code

const shell = require('shelljs-exec-proxy');
shell.git.status();
shell.git.add('.');
shell.git.commit('-am', 'Fixed issue #1');
shell.git.push('origin', 'main');

Security improvements

Current versions of ShellJS export the .exec() method, which if not used carefully, could introduce command injection Vulnerabilities to your module. Here's an insecure code snippet:

shell.ls('dir/*.txt').forEach(file => {
  shell.exec('git add ' + file);
}

This leaves you vulnerable to files like:

Example file name Unintended behavior
File 1.txt This tries to add both File and 1.txt, instead of File 1.txt
foo;rm -rf * This executes both git add foo and rm -rf *, unexpectedly deleting your files!
ThisHas"quotes'.txt This tries running git add ThisHas"quotes'.txt, producing a Bash syntax error

shelljs-exec-proxy solves all these problems:

shell.ls('dir/*.txt').forEach(file => {
  shell.git.add(file);
}
Example file name Behavior
File 1.txt Arguments are automatically quoted, so spaces aren't an issue
foo;rm -rf * Only one command runs at a time (semicolons are treated literally) and wildcards aren't expanded
ThisHas"quotes'.txt Quote characters are automatically escaped for you, so there are never any issues