"use strict"; const utf7 = require('utf7').imap; const RE_BACKSLASH = /\\/g; const RE_DBLQUOTE = /"/g; function escape(str) { return str.replace(RE_BACKSLASH, '\\\\').replace(RE_DBLQUOTE, '\\"'); } module.exports = { command: function (strings, ... interpolations) { return { toCommandString: function () { let processedInterpolations = interpolations.map((interpolation) => { let isObject = interpolation != null && typeof interpolation === "object"; if (isObject && interpolation._isRaw) { return interpolation.string; } else if (isObject && interpolation._is7Bit) { return escape(interpolation.string); } else if (typeof interpolation === "string") { return escape(utf7.encode(interpolation)); } else { throw new Error(`Invalid input into command string: ${interpolation}`); } }); let combined = ""; strings.slice(0, -1).forEach((string, i) => { combined += string; combined += processedInterpolations[i]; }); combined += strings[strings.length - 1]; return combined; } }; }, unsafeRaw: function (string) { return { _isRaw: true, string: string }; }, already7Bit: function (string) { return { _is7Bit: true, string: string }; } };