https://github.com/kaelzhang/node-argv-split
Split argv(argument vector) and handle special cases.
https://github.com/kaelzhang/node-argv-split
argument-vector argv nodejs split split-argv
Last synced: 14 days ago
JSON representation
Split argv(argument vector) and handle special cases.
- Host: GitHub
- URL: https://github.com/kaelzhang/node-argv-split
- Owner: kaelzhang
- License: other
- Created: 2014-08-13T02:30:59.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2024-11-19T17:22:15.000Z (6 months ago)
- Last Synced: 2025-05-01T00:15:49.673Z (20 days ago)
- Topics: argument-vector, argv, nodejs, split, split-argv
- Language: JavaScript
- Size: 24.4 KB
- Stars: 10
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://github.com/kaelzhang/node-argv-split/actions/workflows/nodejs.yml)
# argv-split
Split argv(argument vector) and handle special cases, such as quoted or escaped values.
## Why?
```js
const split = require('split')const mkdir = 'mkdir "foo bar"'
mkdir.split(' ') // ['mkdir', '"foo', 'bar"'] -> Oops!
split(mkdir) // ['mkdir', 'foo bar'] -> Oh yeah!const mkdir2 = 'mkdir foo\\ bar'.split(' ')
mkdir2.split(' ') // ['mkdir', 'foo\\', 'bar'] -> Oops!
split(mkdir2) // ['mkdir', 'foo bar'] -> Oh yeah!
```## `argv-split` handles all special cases with complete unit tests.
```sh
# shell command: javascript array:
foo a\ b # ['foo', 'a b']
foo \' # ['foo', '\\\'']
foo \" # ['foo', '\\"']
foo "a b" # ['foo', 'a b']
foo "a\ b" # ['foo', 'a\\ b']
foo '\' # ['foo', '\\']
foo --abc="a b" # ['foo', '--abc=a b']
foo --abc=a\ b # ['foo', '--abc=a b']# argv-split also handles line feeds
foo \
--abc=a\ b # ['foo', '--abc=a b']# etc
``````js
split('foo \\\n --abc=a\\ b') // ['foo', '--abc=a b']
```## Error Codes
### `UNMATCHED_SINGLE`
If a command missed the closing single quote, the error will throw:
Shell command:
```sh
foo --abc 'abc
``````js
try {
split('foo --abc \'abc')
} catch (e) {
console.log(e.code) // 'UNMATCHED_SINGLE'
}
```### `UNMATCHED_DOUBLE`
If a command missed the closing double quote, the error will throw:
```sh
foo --abc "abc
```### `ESCAPED_EOF`
If a command unexpectedly ends with a `\`, the error will throw:
```sh
foo --abc a\# if there is nothing after \, the error will throw
foo --abc a\ # if there is a whitespace after, then -> ['foo', '--abc', 'a ']
```### `NON_STRING`
If the argument passed to `split` is not a string, the error will throw
```js
split(undefined)
```## Install
```sh
$ npm i argv-split
```# Methods
## split(string) -> Array
Splits a string, and balance quoted parts. The usage is quite simple, see examples above.
Returns `Array`
## split.join(args, options?) -> string
Join the given array of argument vectors into a valid argument string
New in `3.1.0`
- **args** `Array` arguments to be joined
- **options?** `Object=`
- **quote** `string="` should we use single quote or double quote when a certain argument needs to be quoted. Defaults to `"````js
'command ' + join(['foo "bar', "'baz"])// command "foo \"bar" "'baz"
```### Handle Line Feeds
There is a special value of `split.LF` which could help us to create valid commands with line feeds:
```js
'kubectl' + join(['apply', '--prune', '-f', 'manifest.yaml', split.LF, '-l', 'app=nginx'])// kubectl apply --prune -f manifest.yaml \
// -l app=nginx
```## License
MIT