UNPKG

ts-regex-builder

Version:

Maintainable regular expressions for TypeScript and JavaScript.

65 lines (64 loc) 1.71 kB
"use strict"; exports.anyOf = anyOf; exports.charClass = charClass; exports.charRange = charRange; exports.inverted = void 0; exports.negated = negated; var _utils = require("../utils.js"); function charClass(...elements) { if (!elements.length) { throw new Error('Expected at least one element'); } return { chars: elements.map(c => c.chars).flat(), ranges: elements.map(c => c.ranges ?? []).flat(), encode: encodeCharClass }; } function charRange(start, end) { if (start.length !== 1 || end.length !== 1) { throw new Error(`Expected single characters, but received "${start}" & "${end}"`); } if (start > end) { [start, end] = [end, start]; } return { chars: [], ranges: [{ start, end }], encode: encodeCharClass }; } function anyOf(chars) { (0, _utils.ensureText)(chars); return { chars: chars.split('').map(escapeChar), encode: encodeCharClass }; } function negated(element) { return encodeCharClass.call(element, true); } const inverted = exports.inverted = negated; function escapeChar(text) { return text.replace(/[\]\\]/g, '\\$&'); } function encodeCharClass(isNegated) { const hyphen = this.chars.includes('-') ? '-' : ''; const caret = this.chars.includes('^') ? '^' : ''; const otherChars = this.chars.filter(c => c !== '-' && c !== '^').join(''); const ranges = this.ranges?.map(({ start, end }) => `${start}-${end}`).join('') ?? ''; const negation = isNegated ? '^' : ''; let pattern = `[${negation}${ranges}${otherChars}${caret}${hyphen}]`; if (pattern === '[^-]') pattern = '[\\^-]'; return { precedence: 'atom', pattern }; } //# sourceMappingURL=char-class.js.map