'use strict'; const valueParser = require('postcss-value-parser'); const listStyleTypes = require('./listStyleTypes.json'); const definedTypes = new Set(listStyleTypes['list-style-type']); const definedPosition = new Set(['inside', 'outside']); /** * @param {import('postcss-value-parser').ParsedValue} listStyle * @return {string} */ module.exports = function listStyleNormalizer(listStyle) { const order = { type: '', position: '', image: '' }; listStyle.walk((decl) => { if (decl.type === 'word') { if (definedTypes.has(decl.value)) { // its a type field order.type = `${order.type} ${decl.value}`; } else if (definedPosition.has(decl.value)) { order.position = `${order.position} ${decl.value}`; } else if (decl.value === 'none') { if ( order.type .split(' ') .filter((e) => e !== '' && e !== ' ') .includes('none') ) { order.image = `${order.image} ${decl.value}`; } else { order.type = `${order.type} ${decl.value}`; } } else { order.type = `${order.type} ${decl.value}`; } } if (decl.type === 'function') { order.image = `${order.image} ${valueParser.stringify(decl)}`; } }); return `${order.type.trim()} ${order.position.trim()} ${order.image.trim()}`.trim(); };