'use strict'; const { unit } = require('postcss-value-parser'); const keywords = require('./keywords'); const minifyFamily = require('./minify-family'); const minifyWeight = require('./minify-weight'); /** * @param {import('postcss-value-parser').Node[]} nodes * @param {import('../index').Options} opts * @return {import('postcss-value-parser').Node[]} */ module.exports = function (nodes, opts) { let i, max, node, family; let familyStart = NaN; let hasSize = false; for (i = 0, max = nodes.length; i < max; i += 1) { node = nodes[i]; if (node.type === 'word') { if (hasSize) { continue; } const value = node.value.toLowerCase(); if ( value === 'normal' || value === 'inherit' || value === 'initial' || value === 'unset' ) { familyStart = i; } else if (keywords.style.has(value) || unit(value)) { familyStart = i; } else if (keywords.variant.has(value)) { familyStart = i; } else if (keywords.weight.has(value)) { node.value = minifyWeight(value); familyStart = i; } else if (keywords.stretch.has(value)) { familyStart = i; } else if (keywords.size.has(value) || unit(value)) { familyStart = i; hasSize = true; } } else if ( node.type === 'function' && nodes[i + 1] && nodes[i + 1].type === 'space' ) { familyStart = i; } else if (node.type === 'div' && node.value === '/') { familyStart = i + 1; break; } } familyStart += 2; family = minifyFamily(nodes.slice(familyStart), opts); return nodes.slice(0, familyStart).concat(family); };