import {regExpEscape} from './regexp.js'; /** * Created a RegExp that matches an existing empty template parameter with the * given name. */ const existingEmptyParameterRegExp = paramName => new RegExp(`^( *\\| *${regExpEscape(paramName)}( *)=) *$`, 'm'); /** * Sets the value of an existing empty parameter. * @param {string} pageContent * @param {string} paramName * @param {string} value * @returns {string | null} */ export function setEmptyParameter (pageContent, paramName, value) { const regexp = existingEmptyParameterRegExp(paramName) if (pageContent.match(regexp)) { return pageContent.replace(regexp, `$1$2${value}`); } return null; } /** * Creates a RegExp that matches an existing template parameter with the given * name. */ const existingParameterRegExp = paramName => new RegExp(`^( *)\\|( *)${regExpEscape(paramName)}( *)=( *).*$`, 'm'); /** * Inserts a new parameter before or after an existing parameter. * @param {string} pageContent * @param {string} existingParamName * @param {'before' | 'after'} location * @param {string} newParamName * @param {string} value * @returns {string | null} */ export function addParameterBesideExistingParameter (pageContent, newParamName, value, location, existingParamName) { let regexp = existingParameterRegExp(existingParamName); if (pageContent.match(regexp)) { let newParameterPattern = `$1|$2${newParamName}$3=$4${value}`; return pageContent.replace( regexp, location === 'before' ? `${newParameterPattern}\n$&` : `$&\n${newParameterPattern}` ); } return null; }