// NOTICE: This file is generated by Rollup. To modify it, // please instead edit the ESM counterpart and rebuild with Rollup (npm run build). 'use strict'; /** @import { Node as PostcssNode } from 'postcss' */ /** * Make a fix range as narrow as possible by trimming common prefixes and suffixes * * @param {PostcssNode} node * @param {{range: [number, number], text: string}} fixData * @returns {{range: [number, number], text: string}} */ function narrowFixRange(node, fixData) { if (!node.source) { return fixData; } let startOffset = fixData.range[0]; let endOffset = fixData.range[1]; const stringRepresentation = node.source.input.css.slice(startOffset, endOffset); let replacementStartOffset = 0; for (let i = 0; i < stringRepresentation.length; i++) { const a = stringRepresentation[i]; const b = fixData.text[i]; if (a !== b) break; startOffset++; replacementStartOffset++; } let replacementEndOffset = fixData.text.length; for (let i = 0; i < stringRepresentation.length; i++) { const ia = stringRepresentation.length - 1 - i; if (ia < replacementStartOffset) break; const a = stringRepresentation[ia]; const ib = fixData.text.length - 1 - i; if (ib < replacementStartOffset) break; const b = fixData.text[ib]; if (a !== b) break; endOffset--; replacementEndOffset--; } // Try to have a context size of at least 1 if (startOffset === endOffset) { if (startOffset > fixData.range[0]) { startOffset--; replacementStartOffset--; } else if (endOffset < fixData.range[1]) { endOffset++; replacementEndOffset++; } } return { text: fixData.text.slice(replacementStartOffset, replacementEndOffset), range: [startOffset, endOffset], }; } module.exports = narrowFixRange;