{"version":3,"file":"getCSSRules.mjs","sources":["../../../src/parser/getCSSRules.ts"],"sourcesContent":["import type { CSSRules } from './typedefs';\n\n/**\n * Returns CSS rules for a given SVG document\n * @param {HTMLElement} doc SVG document to parse\n * @return {Object} CSS rules of this document\n */\nexport function getCSSRules(doc: Document) {\n  const styles = doc.getElementsByTagName('style');\n  let i;\n  let len;\n  const allRules: CSSRules = {};\n\n  // very crude parsing of style contents\n  for (i = 0, len = styles.length; i < len; i++) {\n    const styleContents = (styles[i].textContent || '').replace(\n      // remove comments\n      /\\/\\*[\\s\\S]*?\\*\\//g,\n      ''\n    );\n\n    if (styleContents.trim() === '') {\n      continue;\n    }\n    // recovers all the rule in this form `body { style code... }`\n    // rules = styleContents.match(/[^{]*\\{[\\s\\S]*?\\}/g);\n    styleContents\n      .split('}')\n      // remove empty rules and remove everything if we didn't split in at least 2 pieces\n      .filter((rule, index, array) => array.length > 1 && rule.trim())\n      // at this point we have hopefully an array of rules `body { style code... `\n      .forEach((rule) => {\n        // if there is more than one opening bracket and the rule starts with '@', it is likely\n        // a nested at-rule like @media, @supports, @scope, etc. Ignore these as the code below\n        // can not handle it.\n        if (\n          (rule.match(/{/g) || []).length > 1 &&\n          rule.trim().startsWith('@')\n        ) {\n          return;\n        }\n\n        const match = rule.split('{'),\n          ruleObj: Record<string, string> = {},\n          declaration = match[1].trim(),\n          propertyValuePairs = declaration.split(';').filter(function (pair) {\n            return pair.trim();\n          });\n\n        for (i = 0, len = propertyValuePairs.length; i < len; i++) {\n          const pair = propertyValuePairs[i].split(':'),\n            property = pair[0].trim(),\n            value = pair[1].trim();\n          ruleObj[property] = value;\n        }\n        rule = match[0].trim();\n        rule.split(',').forEach((_rule) => {\n          _rule = _rule.replace(/^svg/i, '').trim();\n          if (_rule === '') {\n            return;\n          }\n          allRules[_rule] = {\n            ...(allRules[_rule] || {}),\n            ...ruleObj,\n          };\n        });\n      });\n  }\n  return allRules;\n}\n"],"names":["getCSSRules","doc","styles","getElementsByTagName","i","len","allRules","length","styleContents","textContent","replace","trim","split","filter","rule","index","array","forEach","match","startsWith","ruleObj","declaration","propertyValuePairs","pair","property","value","_rule","_objectSpread"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACO,SAASA,WAAWA,CAACC,GAAa,EAAE;AACzC,EAAA,MAAMC,MAAM,GAAGD,GAAG,CAACE,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAChD,EAAA,IAAIC,CAAC,CAAA;AACL,EAAA,IAAIC,GAAG,CAAA;EACP,MAAMC,QAAkB,GAAG,EAAE,CAAA;;AAE7B;AACA,EAAA,KAAKF,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGH,MAAM,CAACK,MAAM,EAAEH,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;AAC7C,IAAA,MAAMI,aAAa,GAAG,CAACN,MAAM,CAACE,CAAC,CAAC,CAACK,WAAW,IAAI,EAAE,EAAEC,OAAO;AACzD;IACA,mBAAmB,EACnB,EACF,CAAC,CAAA;AAED,IAAA,IAAIF,aAAa,CAACG,IAAI,EAAE,KAAK,EAAE,EAAE;AAC/B,MAAA,SAAA;AACF,KAAA;AACA;AACA;IACAH,aAAa,CACVI,KAAK,CAAC,GAAG,CAAA;AACV;AAAA,KACCC,MAAM,CAAC,CAACC,IAAI,EAAEC,KAAK,EAAEC,KAAK,KAAKA,KAAK,CAACT,MAAM,GAAG,CAAC,IAAIO,IAAI,CAACH,IAAI,EAAE,CAAA;AAC/D;KACCM,OAAO,CAAEH,IAAI,IAAK;AACjB;AACA;AACA;MACA,IACE,CAACA,IAAI,CAACI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAEX,MAAM,GAAG,CAAC,IACnCO,IAAI,CAACH,IAAI,EAAE,CAACQ,UAAU,CAAC,GAAG,CAAC,EAC3B;AACA,QAAA,OAAA;AACF,OAAA;AAEA,MAAA,MAAMD,KAAK,GAAGJ,IAAI,CAACF,KAAK,CAAC,GAAG,CAAC;QAC3BQ,OAA+B,GAAG,EAAE;QACpCC,WAAW,GAAGH,KAAK,CAAC,CAAC,CAAC,CAACP,IAAI,EAAE;AAC7BW,QAAAA,kBAAkB,GAAGD,WAAW,CAACT,KAAK,CAAC,GAAG,CAAC,CAACC,MAAM,CAAC,UAAUU,IAAI,EAAE;AACjE,UAAA,OAAOA,IAAI,CAACZ,IAAI,EAAE,CAAA;AACpB,SAAC,CAAC,CAAA;AAEJ,MAAA,KAAKP,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGiB,kBAAkB,CAACf,MAAM,EAAEH,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;QACzD,MAAMmB,IAAI,GAAGD,kBAAkB,CAAClB,CAAC,CAAC,CAACQ,KAAK,CAAC,GAAG,CAAC;UAC3CY,QAAQ,GAAGD,IAAI,CAAC,CAAC,CAAC,CAACZ,IAAI,EAAE;UACzBc,KAAK,GAAGF,IAAI,CAAC,CAAC,CAAC,CAACZ,IAAI,EAAE,CAAA;AACxBS,QAAAA,OAAO,CAACI,QAAQ,CAAC,GAAGC,KAAK,CAAA;AAC3B,OAAA;MACAX,IAAI,GAAGI,KAAK,CAAC,CAAC,CAAC,CAACP,IAAI,EAAE,CAAA;MACtBG,IAAI,CAACF,KAAK,CAAC,GAAG,CAAC,CAACK,OAAO,CAAES,KAAK,IAAK;AACjCA,QAAAA,KAAK,GAAGA,KAAK,CAAChB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAACC,IAAI,EAAE,CAAA;QACzC,IAAIe,KAAK,KAAK,EAAE,EAAE;AAChB,UAAA,OAAA;AACF,SAAA;AACApB,QAAAA,QAAQ,CAACoB,KAAK,CAAC,GAAAC,cAAA,CAAAA,cAAA,CAAA,EAAA,EACTrB,QAAQ,CAACoB,KAAK,CAAC,IAAI,EAAE,CAAA,EACtBN,OAAO,CACX,CAAA;AACH,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACN,GAAA;AACA,EAAA,OAAOd,QAAQ,CAAA;AACjB;;;;"}