"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("refa"),t=require("regexp-ast-analysis"),r=require("@eslint-community/regexpp");function n(e,t){const r=new Error(t);throw r.data=e,r}function a(t,r){if(void 0!==r&&!e.JS.isFlags(r))throw new Error("Invalid flags");return e.JS.toLiteral({type:"CharacterClass",characters:t},{flags:r})}function s(e){switch(e.type){case"Character":case"CharacterClass":case"CharacterSet":case"ExpressionCharacterClass":return!0;default:return!1}}function i(e){return"Quantifier"===e.type&&s(e.element)}function c(e,r){if(Array.isArray(e)){if(0===e.length)return{consume:t.Chars.empty(r),assert:t.Chars.all(r)};if(1===e.length)return e[0]}let n=t.Chars.empty(r),a=t.Chars.all(r);for(const t of e)if(n=n.intersect(t.consume.union(t.assert)).union(t.consume.intersect(a)),a=a.intersect(t.assert),a.isEmpty&&n.isEmpty)break;return{consume:n,assert:a}}function o(e,r){return u(e,t.Chars.empty(r))}function u(e,t){if(Array.isArray(e)&&1===e.length)return e[0];let r=t,n=t;for(const t of e)r=r.union(t.consume),n=n.union(t.assert);return{consume:r,assert:n}}function l(t){return{consume:e.CharSet.empty(t.consume.maximum),assert:t.consume.union(t.assert)}}function m(r,a){if(Array.isArray(r))return o(r.map((e=>m(e,a))),a);switch(r.type){case"Alternative":return c(function*(){for(const e of r.elements)yield m(e,a)}(),a);case"Assertion":switch(r.kind){case"end":case"start":return a.multiline?{consume:t.Chars.empty(a),assert:t.Chars.lineTerminator(a)}:{consume:t.Chars.empty(a),assert:t.Chars.empty(a)};case"word":{const e=t.Chars.word(a),n=e.negate();for(const s of["ltr","rtl"]){const i=t.getFirstCharAfter(r,s,a);if(!i.edge){if(i.char.isSubsetOf(e))return{consume:t.Chars.empty(a),assert:r.negate?e:n};if(i.char.isSubsetOf(n))return{consume:t.Chars.empty(a),assert:r.negate?n:e}}}return r.negate?{consume:t.Chars.empty(a),assert:t.Chars.all(a)}:{consume:t.Chars.empty(a),assert:t.Chars.empty(a)}}case"lookahead":case"lookbehind":{const e=l(m(r.alternatives,a));return r.negate?{consume:t.Chars.empty(a),assert:e.assert.negate()}:e}}return n(r);case"CapturingGroup":case"Group":case"Pattern":return m(r.alternatives,a);case"Character":case"CharacterClass":case"CharacterSet":case"ExpressionCharacterClass":case"ClassIntersection":case"ClassSubtraction":case"ClassStringDisjunction":case"StringAlternative":return function(t){const r=e.CharSet.empty(t.chars.maximum),n=e.CharSet.all(t.chars.maximum),a={consume:t.chars,assert:r};return t.isEmpty||t.accept.isEmpty?a:u([a,...t.accept.wordSets.map((e=>{if(0===e.length)return{consume:r,assert:n};let t=e[0];for(let r=1;re,join:e=>e.every((e=>2===e))?2:e.some((e=>1===e))?1:0,assert:(e,t,r)=>1===r?r:e,continueAfter:(t,r)=>t!==e&&0===r,continueInto:(e,t)=>0===t,enter:(e,t)=>e===r?1:t,leave(e,t){if(0!==t)return t;switch(e.type){case"Assertion":case"Backreference":case"Character":case"CharacterClass":case"CharacterSet":case"ExpressionCharacterClass":{const t=m(e,i),r=t.consume.union(t.assert);return a.isSubsetOf(r)?0:2}case"CapturingGroup":case"Group":case"Quantifier":return t;default:n(e)}}},s)}function p(e){let r=t.getEffectiveMaximumRepetition(e);return"Quantifier"===e.type&&(r*=e.max),r>20}function h(e){let t;if(0===e.min&&1===e.max)t="?";else if(0===e.min&&e.max===1/0)t="*";else if(1===e.min&&e.max===1/0)t="+";else{if(e.min===e.max)return 1===e.min?"":`{${e.min}}`;t=e.max===1/0?`{${e.min},}`:`{${e.min},${e.max}}`}return e.greedy||(t+="?"),t}function g(e,r,n){return e.element.raw===r.element.raw||!(!i(e)||!i(r))&&t.toUnicodeSet(e.element,n).equals(t.toUnicodeSet(r.element,n))}function y(e,t){return"ltr"===e?t.join(""):[...t].reverse().join("")}function d(e,t){return 0===t?"":1===t?e.raw:e.raw+`{${t}}`}function C(e){return t.hasSomeDescendant(e,(e=>"CapturingGroup"===e.type))}class w{constructor(e){this.source=e.pattern.raw,this.flags=e.flags.raw,this.patternOffset=e.pattern.start}replace(e,t){let r,n;if(Array.isArray(e)){r=1/0,n=-1/0;for(const t of e)r=Math.min(r,t.start),n=Math.max(n,t.end)}else r=e.start,n=e.end;const a=this.patternOffset;return{source:this.source.slice(0,r-a)+t+this.source.slice(n-a),flags:this.flags}}}function x(r,n){const{startQuant:a,endQuant:c}=n;if(C(a)||C(c))return;const o=new w(r);if(a.parent===c.parent){const n=t.getMatchingDirection(a);if(n===(a.start1?"(?:"+d+")":d;return n.replace([s,o,c],C)}}(r,o,n,a,c,u)}}}}function v(e,r,n,s){const i=t.toUnicodeSet(n.element,e),c=t.toUnicodeSet(s.element,e);if(!i.accept.isEmpty||!c.accept.isEmpty)return;const o=i.chars,u=c.chars;let l;if(l=o.isSubsetOf(u)?n:u.isSubsetOf(o)?s:void 0,l)return{which:l,replacement:d(l.element,l.min)};const m=a(u.without(o),e).source,f=s.element.raw+h({min:Math.max(0,s.min-1),max:1/0,greedy:s.greedy});let p;if(0===s.min){const e=s.greedy?"":"?";p=`(?:${y(r,[m,f])})?${e}`}else{const t=a(u.intersect(o),e).source,n=d(s.element,s.min-1);p=`(?:${y(r,[m,f])}|${y(r,[t,n])})`}return{which:s,replacement:p}}const S=()=>{};function E(t){return{set:t,pick:String.fromCodePoint(e.Words.pickMostReadableCharacter(t)),literal:a(t)}}function A(e,r){return t.hasSomeAncestor(r,(t=>t===e))}const b=new r.RegExpParser;exports.analyse=function(e,a){const{pattern:s,flags:i}=function(e){if("source"in e){const t=b.parseFlags(e.flags);return{pattern:b.parsePattern(e.source,void 0,void 0,t),flags:t}}return e}(e),{maxReports:u,reportTypes:g,assumeRejectingSuffix:y}=function(e){var t,r,n;return{maxReports:null!==(t=null==e?void 0:e.maxReports)&&void 0!==t?t:1/0,reportTypes:null!==(r=null==e?void 0:e.reportTypes)&&void 0!==r?r:{},assumeRejectingSuffix:null!==(n=null==e?void 0:e.assumeRejectingSuffix)&&void 0!==n&&n}}(a),d={parsed:{pattern:s,flags:i},literal:{source:s.raw,flags:i.raw},reports:[]};if(u<=0)return d;function C(e){d.reports.length{const r=function(e,t){const{quant:r,parentQuant:n}=t;if(r.greedy!==n.greedy)return;const a=new w(e);if(1===r.parent.elements.length&&"Group"===r.parent.parent.type&&r.parent.parent.parent===n){if(1===r.parent.parent.alternatives.length){const e=r.min,t=r.max,s=n.min,i=n.max;if(t===1/0&&0===s?e<=1:s===i||t*s+1>=e*(s+1)){const c={min:e*s,max:t*i,greedy:r.greedy};return a.replace(n,r.element.raw+h(c))}}if(n.max===1/0){if(1===r.min||0===r.min&&0===n.min)return a.replace(r,r.element.raw);if(0===r.min)return a.replace(r,r.element.raw+h({min:0,max:1,greedy:r.greedy}))}}}(e,t);return r||void 0};break;case"Trade":t.fix=()=>{const r=x(e,t);return r||void 0};break;default:n(t)}}(d.parsed,e),d.reports.push(e))}const v=function(e){const t=new Map;return function(r){let n=t.get(r);return void 0===n&&(n=e(r),t.set(r,n)),n}}((e=>m(e,i))),j={fork:e=>e,join:e=>o(e,i),continueAfter:(e,t)=>!(t.assert.isEmpty&&t.consume.isEmpty)&&d.reports.length!(t.assert.isEmpty&&t.consume.isEmpty)&&d.reports.length=u)return;const r=v(e.element);r.consume.isEmpty||(t.followPaths(e,"next",r,Object.assign(Object.assign({},j),{enter:(t,r)=>("Quantifier"===t.type&&R(e,t,r),r)})),t.followPaths(e,"enter",r,Object.assign(Object.assign({},j),{enter:(t,r)=>(t!==e&&"Quantifier"===t.type&&R(e,t,r),r),continueAfter:(t,r,n)=>j.continueAfter(t,r,n)&&t!==e})))}}),!i.sticky&&d.reports.length("Quantifier"===e.type&&P(e,t),t)}))}return d};