v6
 1// Copyright 2022 Google LLC
 2//
 3// Licensed under the Apache License, Version 2.0 (the "License");
 4// you may not use this file except in compliance with the License.
 5// You may obtain a copy of the License at
 6//
 7//     https://www.apache.org/licenses/LICENSE-2.0
 8//
 9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15import { getCtx } from './context.js'
16import { ProcessPromise } from './core.js'
17
18export function quote(arg: string) {
19  if (/^[a-z0-9/_.-]+$/i.test(arg) || arg === '') {
20    return arg
21  }
22  return (
23    `$'` +
24    arg
25      .replace(/\\/g, '\\\\')
26      .replace(/'/g, "\\'")
27      .replace(/\f/g, '\\f')
28      .replace(/\n/g, '\\n')
29      .replace(/\r/g, '\\r')
30      .replace(/\t/g, '\\t')
31      .replace(/\v/g, '\\v')
32      .replace(/\0/g, '\\0') +
33    `'`
34  )
35}
36
37export function substitute(arg: ProcessPromise | any) {
38  if (arg?.stdout) {
39    return arg.stdout.replace(/\n$/, '')
40  }
41  return `${arg}`
42}