'use strict'; const CONSTANTS = require('./constants.js'); const common = require('./common.js'); const debug = common.debug; const getScriptName = common.getScriptName; const isResourceLink = common.isResourceLink; const isScript = common.isScript; const matches = common.matches; const shouldAdd = options => { return options.custom.length > 0; }; const add = (options, tags) => { const update = updateElement.bind(null, options); return tags.map(update); }; const updateElement = (options, tag) => { return (isScript(tag) || isResourceLink(tag)) ? updateScriptElement(options, tag) : tag; }; const updateScriptElement = (options, tag) => { const scriptName = getScriptName(options, tag); let updated = false; options.custom.forEach(customOption => { if (matches(scriptName, customOption.test)) { tag.attributes = tag.attributes || {}; tag.attributes[customOption.attribute] = customOption.value; updated = true; } }); if (updated) { debug(`${CONSTANTS.PLUGIN}: updated to: ${JSON.stringify(tag)}`); } return tag; }; module.exports = { shouldAdd, add };