/** * The MIT License (MIT) * Copyright (c) 2017-present Dmitry Soshnikov */ 'use strict'; /** * The `RegExpTree` class provides runtime support for `compat-transpiler` * module from `regexp-tree`. * * E.g. it tracks names of the capturing groups, in order to access the * names on the matched result. * * It's a thin-wrapper on top of original regexp. */ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var RegExpTree = function () { /** * Initializes a `RegExpTree` instance. * * @param RegExp - a regular expression * * @param Object state: * * An extra state which may store any related to transformation * data, for example, names of the groups. * * - flags - original flags * - groups - names of the groups, and their indices * - source - original source */ function RegExpTree(re, _ref) { var flags = _ref.flags, groups = _ref.groups, source = _ref.source; _classCallCheck(this, RegExpTree); this._re = re; this._groups = groups; // Original props. this.flags = flags; this.source = source || re.source; this.dotAll = flags.includes('s'); // Inherited directly from `re`. this.global = re.global; this.ignoreCase = re.ignoreCase; this.multiline = re.multiline; this.sticky = re.sticky; this.unicode = re.unicode; } /** * Facade wrapper for RegExp `test` method. */ _createClass(RegExpTree, [{ key: 'test', value: function test(string) { return this._re.test(string); } /** * Facade wrapper for RegExp `compile` method. */ }, { key: 'compile', value: function compile(string) { return this._re.compile(string); } /** * Facade wrapper for RegExp `toString` method. */ }, { key: 'toString', value: function toString() { if (!this._toStringResult) { this._toStringResult = '/' + this.source + '/' + this.flags; } return this._toStringResult; } /** * Facade wrapper for RegExp `exec` method. */ }, { key: 'exec', value: function exec(string) { var result = this._re.exec(string); if (!this._groups || !result) { return result; } result.groups = {}; for (var group in this._groups) { var groupNumber = this._groups[group]; result.groups[group] = result[groupNumber]; } return result; } }]); return RegExpTree; }(); module.exports = { RegExpTree: RegExpTree };