util.js.map
5 KB
{"version":3,"names":["generateRegexpuOptions","pattern","toTransform","feat","name","ok","hasFeature","FEATURES","featDuplicateNamedGroups","regex","seen","Set","match","exec","add","has","unicodeFlag","unicodeSetsFlag","dotAllFlag","unicodePropertyEscapes","namedGroups","onNamedGroup","canSkipRegexpu","node","options","flags","includes","test","transformFlags","regexpuOptions","replace"],"sources":["../src/util.ts"],"sourcesContent":["import type { types as t } from \"@babel/core\";\nimport { FEATURES, hasFeature } from \"./features\";\n\nimport type { RegexpuOptions } from \"regexpu-core\";\n\nexport function generateRegexpuOptions(\n pattern: string,\n toTransform: number,\n): RegexpuOptions {\n type Experimental = 1;\n\n const feat = <Stability extends 0 | 1 = 0>(\n name: keyof typeof FEATURES,\n ok: \"transform\" | (Stability extends 0 ? never : \"parse\") = \"transform\",\n ) => {\n return hasFeature(toTransform, FEATURES[name]) ? ok : false;\n };\n\n const featDuplicateNamedGroups = (): \"transform\" | false => {\n if (!feat(\"duplicateNamedCaptureGroups\")) return false;\n\n // This can return false positive, for example for /\\(?<a>\\)/.\n // However, it's such a rare occurrence that it's ok to compile\n // the regexp even if we only need to compile regexps with\n // duplicate named capturing groups.\n const regex = /\\(\\?<([^>]+)>/g;\n const seen = new Set();\n for (let match; (match = regex.exec(pattern)); seen.add(match[1])) {\n if (seen.has(match[1])) return \"transform\";\n }\n return false;\n };\n\n return {\n unicodeFlag: feat(\"unicodeFlag\"),\n unicodeSetsFlag:\n feat<Experimental>(\"unicodeSetsFlag\") ||\n feat<Experimental>(\"unicodeSetsFlag_syntax\", \"parse\"),\n dotAllFlag: feat(\"dotAllFlag\"),\n unicodePropertyEscapes: feat(\"unicodePropertyEscape\"),\n namedGroups: feat(\"namedCaptureGroups\") || featDuplicateNamedGroups(),\n onNamedGroup: () => {},\n };\n}\n\nexport function canSkipRegexpu(\n node: t.RegExpLiteral,\n options: RegexpuOptions,\n): boolean {\n const { flags, pattern } = node;\n\n if (flags.includes(\"v\")) {\n if (options.unicodeSetsFlag === \"transform\") return false;\n }\n\n if (flags.includes(\"u\")) {\n if (options.unicodeFlag === \"transform\") return false;\n if (\n options.unicodePropertyEscapes === \"transform\" &&\n /\\\\[pP]{/.test(pattern)\n ) {\n return false;\n }\n }\n\n if (flags.includes(\"s\")) {\n if (options.dotAllFlag === \"transform\") return false;\n }\n\n if (options.namedGroups === \"transform\" && /\\(\\?<(?![=!])/.test(pattern)) {\n return false;\n }\n\n return true;\n}\n\nexport function transformFlags(regexpuOptions: RegexpuOptions, flags: string) {\n if (regexpuOptions.unicodeSetsFlag === \"transform\") {\n flags = flags.replace(\"v\", \"u\");\n }\n if (regexpuOptions.unicodeFlag === \"transform\") {\n flags = flags.replace(\"u\", \"\");\n }\n if (regexpuOptions.dotAllFlag === \"transform\") {\n flags = flags.replace(\"s\", \"\");\n }\n return flags;\n}\n"],"mappings":";;;;;;;;;AACA;;AAIO,SAASA,sBAAT,CACLC,OADK,EAELC,WAFK,EAGW;EAGhB,MAAMC,IAAI,GAAG,CACXC,IADW,EAEXC,EAAyD,GAAG,WAFjD,KAGR;IACH,OAAO,IAAAC,oBAAA,EAAWJ,WAAX,EAAwBK,kBAAA,CAASH,IAAT,CAAxB,IAA0CC,EAA1C,GAA+C,KAAtD;EACD,CALD;;EAOA,MAAMG,wBAAwB,GAAG,MAA2B;IAC1D,IAAI,CAACL,IAAI,CAAC,6BAAD,CAAT,EAA0C,OAAO,KAAP;IAM1C,MAAMM,KAAK,GAAG,gBAAd;IACA,MAAMC,IAAI,GAAG,IAAIC,GAAJ,EAAb;;IACA,KAAK,IAAIC,KAAT,EAAiBA,KAAK,GAAGH,KAAK,CAACI,IAAN,CAAWZ,OAAX,CAAzB,EAA+CS,IAAI,CAACI,GAAL,CAASF,KAAK,CAAC,CAAD,CAAd,CAA/C,EAAmE;MACjE,IAAIF,IAAI,CAACK,GAAL,CAASH,KAAK,CAAC,CAAD,CAAd,CAAJ,EAAwB,OAAO,WAAP;IACzB;;IACD,OAAO,KAAP;EACD,CAbD;;EAeA,OAAO;IACLI,WAAW,EAAEb,IAAI,CAAC,aAAD,CADZ;IAELc,eAAe,EACbd,IAAI,CAAe,iBAAf,CAAJ,IACAA,IAAI,CAAe,wBAAf,EAAyC,OAAzC,CAJD;IAKLe,UAAU,EAAEf,IAAI,CAAC,YAAD,CALX;IAMLgB,sBAAsB,EAAEhB,IAAI,CAAC,uBAAD,CANvB;IAOLiB,WAAW,EAAEjB,IAAI,CAAC,oBAAD,CAAJ,IAA8BK,wBAAwB,EAP9D;IAQLa,YAAY,EAAE,MAAM,CAAE;EARjB,CAAP;AAUD;;AAEM,SAASC,cAAT,CACLC,IADK,EAELC,OAFK,EAGI;EACT,MAAM;IAAEC,KAAF;IAASxB;EAAT,IAAqBsB,IAA3B;;EAEA,IAAIE,KAAK,CAACC,QAAN,CAAe,GAAf,CAAJ,EAAyB;IACvB,IAAIF,OAAO,CAACP,eAAR,KAA4B,WAAhC,EAA6C,OAAO,KAAP;EAC9C;;EAED,IAAIQ,KAAK,CAACC,QAAN,CAAe,GAAf,CAAJ,EAAyB;IACvB,IAAIF,OAAO,CAACR,WAAR,KAAwB,WAA5B,EAAyC,OAAO,KAAP;;IACzC,IACEQ,OAAO,CAACL,sBAAR,KAAmC,WAAnC,IACA,UAAUQ,IAAV,CAAe1B,OAAf,CAFF,EAGE;MACA,OAAO,KAAP;IACD;EACF;;EAED,IAAIwB,KAAK,CAACC,QAAN,CAAe,GAAf,CAAJ,EAAyB;IACvB,IAAIF,OAAO,CAACN,UAAR,KAAuB,WAA3B,EAAwC,OAAO,KAAP;EACzC;;EAED,IAAIM,OAAO,CAACJ,WAAR,KAAwB,WAAxB,IAAuC,gBAAgBO,IAAhB,CAAqB1B,OAArB,CAA3C,EAA0E;IACxE,OAAO,KAAP;EACD;;EAED,OAAO,IAAP;AACD;;AAEM,SAAS2B,cAAT,CAAwBC,cAAxB,EAAwDJ,KAAxD,EAAuE;EAC5E,IAAII,cAAc,CAACZ,eAAf,KAAmC,WAAvC,EAAoD;IAClDQ,KAAK,GAAGA,KAAK,CAACK,OAAN,CAAc,GAAd,EAAmB,GAAnB,CAAR;EACD;;EACD,IAAID,cAAc,CAACb,WAAf,KAA+B,WAAnC,EAAgD;IAC9CS,KAAK,GAAGA,KAAK,CAACK,OAAN,CAAc,GAAd,EAAmB,EAAnB,CAAR;EACD;;EACD,IAAID,cAAc,CAACX,UAAf,KAA8B,WAAlC,EAA+C;IAC7CO,KAAK,GAAGA,KAAK,CAACK,OAAN,CAAc,GAAd,EAAmB,EAAnB,CAAR;EACD;;EACD,OAAOL,KAAP;AACD"}