UNPKG

css-inline-stream

Version:

Inline CSS classes into styles from HTML streams

39 lines (31 loc) 1.22 kB
const parseStyle = require("./parse-style"); module.exports = function parseCSSToMap(cssString) { // Remove comments and whitespace cssString = cssString .replace(/\/\*[\s\S]*?\*\//g, '') // Remove comments .replace(/\s+/g, ' ') // Normalize whitespace .trim(); // Regex to match selectors and their rulesets // Captures: Group 1 = selector, Group 2 = ruleset content const ruleRegex = /([^{]+)\{([^}]+)\}/g; // Create map to store results const cssMap = new Map(); // Find all matches and add to map let match; while ((match = ruleRegex.exec(cssString)) !== null) { const selector = match[1].trim(); const ruleset = parseStyle(match[2].trim()); // If selector already exists, combine rulesets mergeSelectorRule(selector,ruleset,cssMap); } return cssMap; } module.exports.mergeSelectorRule = mergeSelectorRule; function mergeSelectorRule(selector,ruleset,cssMap) { if (cssMap.has(selector)) { const existingRules = cssMap.get(selector); cssMap.set(selector,{...existingRules, ...ruleset}); } else { cssMap.set(selector, ruleset); } }