| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | 'use strict';const balancedMatch = require('balanced-match');/** * Replace all of the characters that are arguments to a certain * CSS function with some innocuous character. * * This is useful if you need to use a RegExp to find a string * but want to ignore matches in certain functions (e.g. `url()`, * which might contain all kinds of false positives). * * For example: * blurFunctionArguments("abc url(abc) abc", "url") === "abc url(```) abc" * * @param {string} source * @param {string} functionName * @return {string} - The result string, with the function arguments "blurred" */module.exports = function blurFunctionArguments(source, functionName, blurChar = '`') {	const nameWithParen = `${functionName.toLowerCase()}(`;	const lowerCaseSource = source.toLowerCase();	if (!lowerCaseSource.includes(nameWithParen)) {		return source;	}	const functionNameLength = functionName.length;	let result = source;	let searchStartIndex = 0;	while (lowerCaseSource.includes(nameWithParen, searchStartIndex)) {		const openingParenIndex =			lowerCaseSource.indexOf(nameWithParen, searchStartIndex) + functionNameLength;		const parensMatch = balancedMatch('(', ')', lowerCaseSource.slice(openingParenIndex));		if (!parensMatch) {			throw new Error(`No parens match: "${source}"`);		}		const closingParenIndex = parensMatch.end + openingParenIndex;		const argumentsLength = closingParenIndex - openingParenIndex - 1;		result =			result.slice(0, openingParenIndex + 1) +			blurChar.repeat(argumentsLength) +			result.slice(closingParenIndex);		searchStartIndex = closingParenIndex;	}	return result;};
 |