stylelint-taro-rn
Version:
A collection of React Native specific rules for stylelint
1 lines • 4.08 kB
Source Map (JSON)
{"version":3,"file":"matchesStringOrRegExp.js","sources":["../../src/utils/matchesStringOrRegExp.js"],"sourcesContent":["/**\n * Compares a string to a second value that, if it fits a certain convention,\n * is converted to a regular expression before the comparison.\n * If it doesn't fit the convention, then two strings are compared.\n *\n * Any strings starting and ending with `/` are interpreted\n * as regular expressions.\n */\nexport function matchesStringOrRegExp (\n input /*: string | Array<string> */,\n comparison /*: string | Array<string> */\n) /*: false | { match: string, pattern: string } */ {\n if (!Array.isArray(input)) {\n return testAgainstStringOrRegExpOrArray(input, comparison)\n }\n\n for (const inputItem of input) {\n const testResult = testAgainstStringOrRegExpOrArray(inputItem, comparison)\n if (testResult) {\n return testResult\n }\n }\n\n return false\n}\n\nfunction testAgainstStringOrRegExpOrArray (value, comparison) {\n if (!Array.isArray(comparison)) {\n return testAgainstStringOrRegExp(value, comparison)\n }\n\n for (const comparisonItem of comparison) {\n const testResult = testAgainstStringOrRegExp(value, comparisonItem)\n if (testResult) {\n return testResult\n }\n }\n return false\n}\n\nfunction testAgainstStringOrRegExp (value, comparison) {\n // If it's a RegExp, test directly\n if (comparison instanceof RegExp) {\n return comparison.test(value)\n ? { match: value, pattern: comparison }\n : false\n }\n\n // Check if it's RegExp in a string\n const firstComparisonChar = comparison[0]\n const lastComparisonChar = comparison[comparison.length - 1]\n const secondToLastComparisonChar = comparison[comparison.length - 2]\n\n const comparisonIsRegex =\n firstComparisonChar === '/' &&\n (lastComparisonChar === '/' ||\n (secondToLastComparisonChar === '/' && lastComparisonChar === 'i'))\n\n const hasCaseInsensitiveFlag =\n comparisonIsRegex && lastComparisonChar === 'i'\n\n // If so, create a new RegExp from it\n if (comparisonIsRegex) {\n const valueMatches = hasCaseInsensitiveFlag\n ? new RegExp(comparison.slice(1, -2), 'i').test(value)\n : new RegExp(comparison.slice(1, -1)).test(value)\n return valueMatches ? { match: value, pattern: comparison } : false\n }\n\n // Otherwise, it's a string. Do a strict comparison\n return value === comparison ? { match: value, pattern: comparison } : false\n}\n"],"names":[],"mappings":"AAAA;;;;;;;AAOG;AACG,SAAU,qBAAqB,CACnC,KAAK,gCACL,UAAU,gCAA8B;IAExC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzB,QAAA,OAAO,gCAAgC,CAAC,KAAK,EAAE,UAAU,CAAC;;AAG5D,IAAA,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE;QAC7B,MAAM,UAAU,GAAG,gCAAgC,CAAC,SAAS,EAAE,UAAU,CAAC;QAC1E,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,UAAU;;;AAIrB,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,gCAAgC,CAAE,KAAK,EAAE,UAAU,EAAA;IAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC9B,QAAA,OAAO,yBAAyB,CAAC,KAAK,EAAE,UAAU,CAAC;;AAGrD,IAAA,KAAK,MAAM,cAAc,IAAI,UAAU,EAAE;QACvC,MAAM,UAAU,GAAG,yBAAyB,CAAC,KAAK,EAAE,cAAc,CAAC;QACnE,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,UAAU;;;AAGrB,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,yBAAyB,CAAE,KAAK,EAAE,UAAU,EAAA;;AAEnD,IAAA,IAAI,UAAU,YAAY,MAAM,EAAE;AAChC,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK;cACxB,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU;cACnC,KAAK;;;AAIX,IAAA,MAAM,mBAAmB,GAAG,UAAU,CAAC,CAAC,CAAC;IACzC,MAAM,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5D,MAAM,0BAA0B,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AAEpE,IAAA,MAAM,iBAAiB,GACrB,mBAAmB,KAAK,GAAG;SAC1B,kBAAkB,KAAK,GAAG;aACxB,0BAA0B,KAAK,GAAG,IAAI,kBAAkB,KAAK,GAAG,CAAC,CAAC;AAEvE,IAAA,MAAM,sBAAsB,GAC1B,iBAAiB,IAAI,kBAAkB,KAAK,GAAG;;IAGjD,IAAI,iBAAiB,EAAE;QACrB,MAAM,YAAY,GAAG;cACjB,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;AACrD,cAAE,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACnD,QAAA,OAAO,YAAY,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK;;;AAIrE,IAAA,OAAO,KAAK,KAAK,UAAU,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK;AAC7E;;;;"}