“use strict”;
Object.defineProperty(exports, “__esModule”, {
value: true
}); exports.default = _default;
var _regexpuCore = _interopRequireDefault(require(“regexpu-core”));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _default({
types: t
}, options) {
const { runtime = true } = options; if (typeof runtime !== "boolean") { throw new Error("The 'runtime' option must be boolean"); } return { name: "transform-named-capturing-groups-regex", visitor: { RegExpLiteral(path) { const node = path.node; if (!/\(\?<(?![=!])/.test(node.pattern)) { return; } const namedCapturingGroups = {}; const result = (0, _regexpuCore.default)(node.pattern, node.flags, { namedGroup: true, lookbehind: true, onNamedGroup(name, index) { namedCapturingGroups[name] = index; } }); if (Object.keys(namedCapturingGroups).length > 0) { node.pattern = result; if (runtime && !isRegExpTest(path)) { path.replaceWith(t.callExpression(this.addHelper("wrapRegExp"), [node, t.valueToNode(namedCapturingGroups)])); } } } } };
}
function isRegExpTest(path) {
return path.parentPath.isMemberExpression({ object: path.node, computed: false }) && path.parentPath.get("property").isIdentifier({ name: "test" });
}