| 'use strict'; | 
|   | 
| // See http://www.robvanderwoude.com/escapechars.php | 
| const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g; | 
|   | 
| function escapeCommand(arg) { | 
|     // Escape meta chars | 
|     arg = arg.replace(metaCharsRegExp, '^$1'); | 
|   | 
|     return arg; | 
| } | 
|   | 
| function escapeArgument(arg, doubleEscapeMetaChars) { | 
|     // Convert to string | 
|     arg = `${arg}`; | 
|   | 
|     // Algorithm below is based on https://qntm.org/cmd | 
|   | 
|     // Sequence of backslashes followed by a double quote: | 
|     // double up all the backslashes and escape the double quote | 
|     arg = arg.replace(/(\\*)"/g, '$1$1\\"'); | 
|   | 
|     // Sequence of backslashes followed by the end of the string | 
|     // (which will become a double quote later): | 
|     // double up all the backslashes | 
|     arg = arg.replace(/(\\*)$/, '$1$1'); | 
|   | 
|     // All other backslashes occur literally | 
|   | 
|     // Quote the whole thing: | 
|     arg = `"${arg}"`; | 
|   | 
|     // Escape meta chars | 
|     arg = arg.replace(metaCharsRegExp, '^$1'); | 
|   | 
|     // Double escape meta chars if necessary | 
|     if (doubleEscapeMetaChars) { | 
|         arg = arg.replace(metaCharsRegExp, '^$1'); | 
|     } | 
|   | 
|     return arg; | 
| } | 
|   | 
| module.exports.command = escapeCommand; | 
| module.exports.argument = escapeArgument; |