UNPKG

umbot

Version:

Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф

70 lines (69 loc) 2.83 kB
"use strict"; 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); }