diff --git a/packages/babel-helpers/src/helpers-generated.ts b/packages/babel-helpers/src/helpers-generated.ts index 79c85f6243c5..17c1db2e87cb 100644 --- a/packages/babel-helpers/src/helpers-generated.ts +++ b/packages/babel-helpers/src/helpers-generated.ts @@ -59,6 +59,6 @@ export default Object.freeze({ ), wrapRegExp: helper( "7.19.0", - 'import setPrototypeOf from"setPrototypeOf";import inherits from"inherits";export default function _wrapRegExp(){_wrapRegExp=function(re,groups){return new BabelRegExp(re,void 0,groups)};var _super=RegExp.prototype,_groups=new WeakMap;function BabelRegExp(re,flags,groups){var _this=new RegExp(re,flags);return _groups.set(_this,groups||_groups.get(re)),setPrototypeOf(_this,BabelRegExp.prototype)}function buildGroups(result,re){var g=_groups.get(re);return Object.keys(g).reduce((function(groups,name){var i=g[name];if("number"==typeof i)groups[name]=result[i];else{for(var k=0;void 0===result[i[k]]&&k+1]+)>/g,(function(_,name){var group=groups[name];return"$"+(Array.isArray(group)?group.join("$"):group)})))}if("function"==typeof substitution){var _this=this;return _super[Symbol.replace].call(this,str,(function(){var args=arguments;return"object"!=typeof args[args.length-1]&&(args=[].slice.call(args)).push(buildGroups(args,_this)),substitution.apply(this,args)}))}return _super[Symbol.replace].call(this,str,substitution)},_wrapRegExp.apply(this,arguments)}', + 'import setPrototypeOf from"setPrototypeOf";import inherits from"inherits";export default function _wrapRegExp(){_wrapRegExp=function(re,groups){return new BabelRegExp(re,void 0,groups)};var _super=RegExp.prototype,_groups=new WeakMap;function BabelRegExp(re,flags,groups){var _this=new RegExp(re,flags);return _groups.set(_this,groups||_groups.get(re)),setPrototypeOf(_this,BabelRegExp.prototype)}function buildGroups(result,re){var g=_groups.get(re);return Object.keys(g).reduce((function(groups,name){var i=g[name];if("number"==typeof i)groups[name]=result[i];else{for(var k=0;void 0===result[i[k]]&&k+1]+)>/g,(function(_,name){var group=groups[name];return"$"+(Array.isArray(group)?group.join("$"):group)})))}if("function"==typeof substitution){var _this=this;return _super[Symbol.replace].call(this,str,(function(){var args=arguments;return"object"!=typeof args[args.length-1]&&(args=[].slice.call(args)).push(buildGroups(args,_this)),substitution.apply(this,args)}))}return _super[Symbol.replace].call(this,str,substitution)},_wrapRegExp.apply(this,arguments)}', ), }); diff --git a/packages/babel-helpers/src/helpers/wrapRegExp.js b/packages/babel-helpers/src/helpers/wrapRegExp.js index 12df17bff2c2..29a81aa7800b 100644 --- a/packages/babel-helpers/src/helpers/wrapRegExp.js +++ b/packages/babel-helpers/src/helpers/wrapRegExp.js @@ -21,7 +21,11 @@ export default function _wrapRegExp() { BabelRegExp.prototype.exec = function (str) { var result = _super.exec.call(this, str); - if (result) result.groups = buildGroups(result, this); + if (result) { + result.groups = buildGroups(result, this); + var indices = result.indices; + if (indices) indices.groups = buildGroups(indices, this); + } return result; }; BabelRegExp.prototype[Symbol.replace] = function (str, substitution) { diff --git a/packages/babel-plugin-proposal-duplicate-named-capturing-groups-regex/test/fixtures/runtime/has-indices/exec.js b/packages/babel-plugin-proposal-duplicate-named-capturing-groups-regex/test/fixtures/runtime/has-indices/exec.js new file mode 100644 index 000000000000..ac14dda1b9db --- /dev/null +++ b/packages/babel-plugin-proposal-duplicate-named-capturing-groups-regex/test/fixtures/runtime/has-indices/exec.js @@ -0,0 +1,5 @@ +let regexp = /(?a)|(?b)|c/d; + +expect("a".match(regexp).indices.groups).toEqual({ named: [0, 1] }); +expect("b".match(regexp).indices.groups).toEqual({ named: [0, 1] }); +expect("c".match(regexp).indices.groups).toEqual({ named: undefined }); diff --git a/packages/babel-plugin-proposal-duplicate-named-capturing-groups-regex/test/fixtures/runtime/has-indices/options.json b/packages/babel-plugin-proposal-duplicate-named-capturing-groups-regex/test/fixtures/runtime/has-indices/options.json new file mode 100644 index 000000000000..31578ae57ee5 --- /dev/null +++ b/packages/babel-plugin-proposal-duplicate-named-capturing-groups-regex/test/fixtures/runtime/has-indices/options.json @@ -0,0 +1,3 @@ +{ + "minNodeVersion": "16.0.0" +} diff --git a/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/has-indices/exec.js b/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/has-indices/exec.js new file mode 100644 index 000000000000..b6295ce9d77d --- /dev/null +++ b/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/has-indices/exec.js @@ -0,0 +1,15 @@ +var re = /(?\d{4})-(?\d{2})-(?\d{2})/d; + +var result = re.exec("2017-12-23"); + +expect(result.indices.groups).toEqual({ + year: [0, 4], + month: [5, 7], + day: [8, 10], +}); + +expect(result.indices.groups).toEqual({ + year: result.indices[1], + month: result.indices[2], + day: result.indices[3], +}); diff --git a/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/has-indices/options.json b/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/has-indices/options.json new file mode 100644 index 000000000000..31578ae57ee5 --- /dev/null +++ b/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/has-indices/options.json @@ -0,0 +1,3 @@ +{ + "minNodeVersion": "16.0.0" +}