playwright-bdd
Version:
BDD Testing with Playwright runner
41 lines (39 loc) • 1.35 kB
text/typescript
/**
* Adopted version of https://github.com/joliss/js-string-escape
* - added support of backticks
* - added 'quotes' option to indicate which quotes to escape
* - wrap result string with provided quotes
*
* Considered alternative is https://github.com/mathiasbynens/jsesc,
* but it provides additional functionality and much slower
* See: https://github.com/mathiasbynens/jsesc/issues/16
*/
export function jsStringWrap(
str: string,
{ quotes = 'single' }: { quotes?: 'single' | 'double' | 'backtick' } = {},
) {
const wrapQuote = quotes === 'single' ? "'" : quotes === 'double' ? '"' : '`';
// eslint-disable-next-line visual/complexity
const escapedStr = ('' + str).replace(/["'`\\\n\r\u2028\u2029]/g, (character) => {
// Escape all characters not included in SingleStringCharacters and
// DoubleStringCharacters on
// http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4
switch (character) {
case wrapQuote:
case '\\':
return '\\' + character;
// Four possible LineTerminator characters need to be escaped:
case '\n':
return '\\n';
case '\r':
return '\\r';
case '\u2028':
return '\\u2028';
case '\u2029':
return '\\u2029';
default:
return character;
}
});
return `${wrapQuote}${escapedStr}${wrapQuote}`;
}