mirror of
https://github.com/arthur-pbty/portfolio2023.git
synced 2026-06-04 15:56:24 +02:00
66 lines
1.8 KiB
JavaScript
66 lines
1.8 KiB
JavaScript
import { deprecated } from './deprecated';
|
|
import { CHAR_TO_ESCAPE } from './escapes';
|
|
export function addSlashes(str, countOrCharactersOrOptions, characters = `\b\f\n\r\t\v\0'"\\`) {
|
|
let count = 1;
|
|
let escapeNonAscii = false;
|
|
|
|
if (typeof countOrCharactersOrOptions === 'number') {
|
|
count = countOrCharactersOrOptions;
|
|
} else if (countOrCharactersOrOptions) {
|
|
if (typeof countOrCharactersOrOptions === 'object') {
|
|
({
|
|
count = count,
|
|
characters = characters,
|
|
escapeNonAscii = escapeNonAscii
|
|
} = countOrCharactersOrOptions);
|
|
} else {
|
|
characters = countOrCharactersOrOptions;
|
|
}
|
|
}
|
|
|
|
const rx = new RegExp(`[${characters.replace(/[\]\\^]/g, '\\$&')}]`, 'g');
|
|
|
|
for (let i = Math.max(1, count >> 0); i > 0; --i) {
|
|
str = str.replace(rx, char => {
|
|
const escape = CHAR_TO_ESCAPE.get(char);
|
|
|
|
if (escape) {
|
|
return escape;
|
|
}
|
|
|
|
const charCode = char.charCodeAt(0);
|
|
|
|
if (charCode >= 0xd800 && charCode <= 0xf8ff) {
|
|
const hex = charCode.toString(16);
|
|
return `\\u${hex}`;
|
|
} else if (escapeNonAscii && charCode > 0x7f) {
|
|
let hex = charCode.toString(16);
|
|
|
|
if (charCode <= 0xff) {
|
|
return `\\x${hex}`;
|
|
} else {
|
|
while (hex.length < 4) hex = `0${hex}`;
|
|
|
|
return `\\u${hex}`;
|
|
}
|
|
}
|
|
|
|
return `\\${char}`;
|
|
});
|
|
}
|
|
|
|
return str;
|
|
}
|
|
/**
|
|
* @deprecated Use `addSlashes()` instead.
|
|
*
|
|
* Maintains the legacy behavior of only adding slashes to newlines (`"\n"`),
|
|
* carriage returns (`"\r"`), nulls (`"\0"`), single quotes (`"'"`), double
|
|
* quotes (`"\""`), and backslashes (`"\\"`).
|
|
*/
|
|
|
|
export const add = (str, count) => {
|
|
deprecated('The add() function is deprecated and should be replaced with addSlashes().');
|
|
return addSlashes(str, count, `\n\0'"\\`);
|
|
};
|
|
//# sourceMappingURL=addSlashes.js.map
|