UNPKG

ts-regex-builder

Version:

Maintainable regular expressions for TypeScript and JavaScript.

1 lines 3.1 kB
{"version":3,"file":"builders.mjs","names":["encode","buildRegExp","sequence","flags","pattern","ensureUnicodeFlagIfNeeded","flagsString","encodeFlags","RegExp","buildPattern","result","global","ignoreCase","multiline","hasIndices","dotAll","sticky","unicode","unicodeModePatterns","match","Error"],"sources":["../../src/builders.ts"],"sourcesContent":["import type { RegexFlags, RegexSequence } from './types';\nimport { encode } from './encoder';\n\n/**\n * Generate RegExp object from elements with optional flags.\n *\n * @param elements Single regex element or array of elements\n * @param flags RegExp flags object\n * @returns RegExp object\n */\nexport function buildRegExp(sequence: RegexSequence, flags?: RegexFlags): RegExp {\n const pattern = encode(sequence).pattern;\n ensureUnicodeFlagIfNeeded(pattern, flags);\n\n const flagsString = encodeFlags(flags ?? {});\n return new RegExp(pattern, flagsString);\n}\n\n/**\n * Generate regex pattern from elements.\n * @param elements Single regex element or array of elements\n * @returns regex pattern string\n */\nexport function buildPattern(sequence: RegexSequence): string {\n return encode(sequence).pattern;\n}\n\nfunction encodeFlags(flags: RegexFlags): string {\n let result = '';\n\n if (flags.global) result += 'g';\n if (flags.ignoreCase) result += 'i';\n if (flags.multiline) result += 'm';\n if (flags.hasIndices) result += 'd';\n if (flags.dotAll) result += 's';\n if (flags.sticky) result += 'y';\n if (flags.unicode) result += 'u';\n\n return result;\n}\n\n// Matches unicode mode patterns: \\u{...}, \\p{...}, \\P{...}, but avoids valid \\\\u{...}, etc\nconst unicodeModePatterns = /(?<!\\\\)(?:\\\\u|\\\\[pP])\\{.+?\\}/;\n\nfunction ensureUnicodeFlagIfNeeded(pattern: string, flags: RegexFlags | undefined) {\n if (flags?.unicode) {\n return;\n }\n\n const match = pattern.match(unicodeModePatterns);\n if (match) {\n throw new Error(`Pattern \"${match?.[0]}\" requires \"unicode\" flag to be set.`);\n }\n}\n"],"mappings":"SACSA,MAAM;AASf,OAAO,SAASC,WAAWA,CAACC,QAAuB,EAAEC,KAAkB,EAAU;EAC/E,MAAMC,OAAO,GAAGJ,MAAM,CAACE,QAAQ,CAAC,CAACE,OAAO;EACxCC,yBAAyB,CAACD,OAAO,EAAED,KAAK,CAAC;EAEzC,MAAMG,WAAW,GAAGC,WAAW,CAACJ,KAAK,IAAI,CAAC,CAAC,CAAC;EAC5C,OAAO,IAAIK,MAAM,CAACJ,OAAO,EAAEE,WAAW,CAAC;AACzC;AAOA,OAAO,SAASG,YAAYA,CAACP,QAAuB,EAAU;EAC5D,OAAOF,MAAM,CAACE,QAAQ,CAAC,CAACE,OAAO;AACjC;AAEA,SAASG,WAAWA,CAACJ,KAAiB,EAAU;EAC9C,IAAIO,MAAM,GAAG,EAAE;EAEf,IAAIP,KAAK,CAACQ,MAAM,EAAED,MAAM,IAAI,GAAG;EAC/B,IAAIP,KAAK,CAACS,UAAU,EAAEF,MAAM,IAAI,GAAG;EACnC,IAAIP,KAAK,CAACU,SAAS,EAAEH,MAAM,IAAI,GAAG;EAClC,IAAIP,KAAK,CAACW,UAAU,EAAEJ,MAAM,IAAI,GAAG;EACnC,IAAIP,KAAK,CAACY,MAAM,EAAEL,MAAM,IAAI,GAAG;EAC/B,IAAIP,KAAK,CAACa,MAAM,EAAEN,MAAM,IAAI,GAAG;EAC/B,IAAIP,KAAK,CAACc,OAAO,EAAEP,MAAM,IAAI,GAAG;EAEhC,OAAOA,MAAM;AACf;AAGA,MAAMQ,mBAAmB,GAAG,8BAA8B;AAE1D,SAASb,yBAAyBA,CAACD,OAAe,EAAED,KAA6B,EAAE;EACjF,IAAIA,KAAK,EAAEc,OAAO,EAAE;IAClB;EACF;EAEA,MAAME,KAAK,GAAGf,OAAO,CAACe,KAAK,CAACD,mBAAmB,CAAC;EAChD,IAAIC,KAAK,EAAE;IACT,MAAM,IAAIC,KAAK,CAAE,YAAWD,KAAK,GAAG,CAAC,CAAE,sCAAqC,CAAC;EAC/E;AACF","ignoreList":[]}