node-ejs-renderer/node_modules/@jsonjoy.com/util/lib/strings/escape.js
2024-06-09 13:55:01 -04:00

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