| // Copyright 2022 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| /** | |
| * safeRE matches an argument that can be literally included in a shell | |
| * command line without requiring escaping. | |
| * | |
| * The character class \w is equivalent to [0-9A-Za-z_]. Leading equals sign is unsafe in zsh, | |
| * see http://zsh.sourceforge.net/Doc/Release/Expansion.html#g_t_0060_003d_0027-expansion. | |
| */ | |
| const safeRE = /^[-\w@%+:,./][-\w@%+:,./=]*$/; | |
| /** | |
| * Escape escapes a string so it can be safely included as an argument in a shell command line. | |
| * The string is not modified if it can already be safely included. | |
| */ | |
| export function escape(arg: string): string { | |
| if (safeRE.test(arg)) { | |
| return arg; | |
| } | |
| return "'" + arg.replace("'", "'\"'\"'") + "'"; | |
| } | |
| /** | |
| * EscapeArray escapes an array of strings so each will be treated as a separate | |
| * argument in the returned shell command line. See Escape for more information. | |
| */ | |
| export function escapeArray(args: string[]): string { | |
| return args.map(escape).join(' '); | |
| } |