(input: string, ruleCallback: (rule: CssRule) => CssRule)
| 1073 | } |
| 1074 | |
| 1075 | export function processRules(input: string, ruleCallback: (rule: CssRule) => CssRule): string { |
| 1076 | const escaped = escapeInStrings(input); |
| 1077 | const inputWithEscapedBlocks = escapeBlocks(escaped, CONTENT_PAIRS, BLOCK_PLACEHOLDER); |
| 1078 | let nextBlockIndex = 0; |
| 1079 | const escapedResult = inputWithEscapedBlocks.escapedString.replace(_ruleRe, (...m: string[]) => { |
| 1080 | const selector = m[2]; |
| 1081 | let content = ''; |
| 1082 | let suffix = m[4]; |
| 1083 | let contentPrefix = ''; |
| 1084 | if (suffix && suffix.startsWith('{' + BLOCK_PLACEHOLDER)) { |
| 1085 | content = inputWithEscapedBlocks.blocks[nextBlockIndex++]; |
| 1086 | suffix = suffix.substring(BLOCK_PLACEHOLDER.length + 1); |
| 1087 | contentPrefix = '{'; |
| 1088 | } |
| 1089 | const rule = ruleCallback(new CssRule(selector, content)); |
| 1090 | return `${m[1]}${rule.selector}${m[3]}${contentPrefix}${rule.content}${suffix}`; |
| 1091 | }); |
| 1092 | return unescapeInStrings(escapedResult); |
| 1093 | } |
| 1094 | |
| 1095 | class StringWithEscapedBlocks { |
| 1096 | constructor( |
no test coverage detected