135 lines
2.6 KiB
JavaScript
135 lines
2.6 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.escape = void 0;
|
||
|
const strEscapeSequencesRegExp = /[\u0000-\u001f\u0022\u005c\ud800-\udfff]|[\ud800-\udbff](?![\udc00-\udfff])|(?:[^\ud800-\udbff]|^)[\udc00-\udfff]/;
|
||
|
const strEscapeSequencesReplacer = /[\u0000-\u001f\u0022\u005c\ud800-\udfff]|[\ud800-\udbff](?![\udc00-\udfff])|(?:[^\ud800-\udbff]|^)[\udc00-\udfff]/g;
|
||
|
const meta = [
|
||
|
'\\u0000',
|
||
|
'\\u0001',
|
||
|
'\\u0002',
|
||
|
'\\u0003',
|
||
|
'\\u0004',
|
||
|
'\\u0005',
|
||
|
'\\u0006',
|
||
|
'\\u0007',
|
||
|
'\\b',
|
||
|
'\\t',
|
||
|
'\\n',
|
||
|
'\\u000b',
|
||
|
'\\f',
|
||
|
'\\r',
|
||
|
'\\u000e',
|
||
|
'\\u000f',
|
||
|
'\\u0010',
|
||
|
'\\u0011',
|
||
|
'\\u0012',
|
||
|
'\\u0013',
|
||
|
'\\u0014',
|
||
|
'\\u0015',
|
||
|
'\\u0016',
|
||
|
'\\u0017',
|
||
|
'\\u0018',
|
||
|
'\\u0019',
|
||
|
'\\u001a',
|
||
|
'\\u001b',
|
||
|
'\\u001c',
|
||
|
'\\u001d',
|
||
|
'\\u001e',
|
||
|
'\\u001f',
|
||
|
'',
|
||
|
'',
|
||
|
'\\"',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'',
|
||
|
'\\\\',
|
||
|
];
|
||
|
const esc_ = (str) => {
|
||
|
if (str.length === 2)
|
||
|
return str[0] + '\\u' + str.charCodeAt(1).toString(16);
|
||
|
const charCode = str.charCodeAt(0);
|
||
|
return meta.length > charCode ? meta[charCode] : '\\u' + charCode.toString(16);
|
||
|
};
|
||
|
const escape = (str) => {
|
||
|
let point, last = 0, result = '';
|
||
|
if (str.length < 5000 && !strEscapeSequencesRegExp.test(str))
|
||
|
return str;
|
||
|
if (str.length > 100)
|
||
|
return str.replace(strEscapeSequencesReplacer, esc_);
|
||
|
for (let i = 0; i < str.length; i++) {
|
||
|
point = str.charCodeAt(i);
|
||
|
if (point === 34 || point === 92 || point < 32) {
|
||
|
result += str.slice(last, i) + meta[point];
|
||
|
last = i + 1;
|
||
|
}
|
||
|
else if (point >= 0xd800 && point <= 0xdfff) {
|
||
|
if (point <= 0xdbff && i + 1 < str.length) {
|
||
|
point = str.charCodeAt(i + 1);
|
||
|
if (point >= 0xdc00 && point <= 0xdfff) {
|
||
|
i++;
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
result += str.slice(last, i) + '\\u' + point.toString(16);
|
||
|
last = i + 1;
|
||
|
}
|
||
|
}
|
||
|
result += str.slice(last);
|
||
|
return result;
|
||
|
};
|
||
|
exports.escape = escape;
|
||
|
//# sourceMappingURL=escape.js.map
|