umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
70 lines (69 loc) • 2.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.__$usedRe2 = void 0;
exports.isRegex = isRegex;
exports.getRegExp = getRegExp;
let Re2;
/**
* Флаг говорящий о том используется ли re2 для обработки регулярок или нет.
* Нужен для того, чтобы можно было задать различные ограничения в зависимости от наличия библиотеки.
* @private
*/
let __$usedRe2;
try {
// Условная загрузка так как не всем нужен re2.
// На чистой винде, чтобы установить re2, нужно пострадать.
// Чтобы сильно не париться, даем возможность разработчикам самим подключить re2 по необходимости.
Re2 = require('re2');
exports.__$usedRe2 = __$usedRe2 = true;
}
catch {
Re2 = RegExp;
exports.__$usedRe2 = __$usedRe2 = false;
}
/**
* Проверяет передано ли регулярное выражение или нет
* @param regExp Регулярное выражение
*/
function isRegex(regExp) {
return !!(regExp &&
typeof regExp.test === 'function' &&
typeof regExp.exec === 'function');
}
/**
* Возвращает скомпилированное регулярное выражение.
* Если к проекту подключен re2, будет использоваться он, в противном случае стандартный RegExp.
* В случае, если передан customReg, регулярное выражение будет собранно через него
* @param reg - само регулярное выражение
* @param flags - флаг для регулярного выражения
* @param customReg - Произвольная реализация для обработки регулярных выражений
* @returns
*/
function getRegExp(reg, flags = 'ium', customReg) {
let pattern;
let flag = flags;
const getPattern = (pat) => {
return isRegex(pat) ? pat.source : pat;
};
if (Array.isArray(reg)) {
if (reg.length === 1) {
pattern = getPattern(reg[0]);
flag = isRegex(reg[0]) ? reg[0].flags : flags;
}
else {
const aPattern = [];
reg.forEach((r) => {
aPattern.push(`(${getPattern(r)})`);
});
pattern = aPattern.join('|');
}
}
else {
pattern = getPattern(reg);
flag = isRegex(reg) ? reg.flags : flags;
}
if (customReg) {
return new customReg(pattern, flag);
}
return new Re2(pattern, flag);
}