{"version":3,"file":"getSpriteContent.mjs","sources":["../../../../src/getSpriteContent.ts"],"sourcesContent":["import fg from 'fast-glob';\nimport fs from 'node:fs';\nimport { optimize } from 'svgo';\nimport type { Config as SVGOConfig } from 'svgo';\nimport path from 'node:path';\nimport { HTMLElement, parse } from 'node-html-parser';\nimport type { SvgSpritemapOptions } from './index';\n\ntype GetSpriteContentOptions = Pick<\n  SvgSpritemapOptions,\n  'pattern' | 'prefix' | 'svgo' | 'currentColor'\n>;\n\nexport function getSpriteContent({\n  pattern,\n  prefix,\n  svgo,\n  currentColor,\n}: GetSpriteContentOptions): string {\n  const svgFiles = fg.sync(pattern);\n  const symbols: string[] = [];\n  const definitions: string[] = [];\n\n  let svgoConfig: SVGOConfig = {};\n\n  if (typeof svgo === 'object') {\n    svgoConfig = svgo;\n  }\n\n  if (currentColor) {\n    if (!svgoConfig.plugins) {\n      svgoConfig.plugins = [];\n    }\n    svgoConfig.plugins.push({\n      name: 'convertColors',\n      params: {\n        currentColor: true,\n      },\n    });\n  }\n\n  svgFiles.forEach(file => {\n    let code = fs.readFileSync(file, 'utf-8');\n    const result = svgo ? optimize(code, svgoConfig).data : code;\n    const name = path.basename(file, '.svg');\n    const symbolId = prefix ? `${prefix}-${name}` : name;\n\n    const svgElement = parse(result).querySelector('svg') as HTMLElement;\n    const symbol = parse('<symbol/>').querySelector('symbol') as HTMLElement;\n\n    const defs = svgElement.querySelector('defs');\n\n    if (defs) {\n      defs.childNodes.forEach(def => definitions.push(def.toString()));\n      svgElement.removeChild(defs);\n    }\n\n    symbol.setAttribute('id', symbolId);\n\n    if (svgElement.attributes.viewBox) {\n      symbol.setAttribute('viewBox', svgElement.attributes.viewBox);\n    }\n\n    svgElement.childNodes.forEach(child => symbol.appendChild(child));\n\n    symbols.push(symbol.toString());\n  });\n\n  return `<svg xmlns=\"http://www.w3.org/2000/svg\">${\n    definitions.length > 0 ? `<defs>${definitions.join('')}</defs>` : ''\n  }${symbols.join('')}</svg>`;\n}\n"],"names":[],"mappings":";;;;;AAaO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAC5B,QAAA,WAAW,GAAG,KAAK,OAAO;AAChC,QAAM,UAAoB,CAAC;AAC3B,QAAM,cAAwB,CAAC;AAE/B,MAAI,aAAyB,CAAC;AAE1B,MAAA,OAAO,SAAS,UAAU;AACf,iBAAA;AAAA,EAAA;AAGf,MAAI,cAAc;AACZ,QAAA,CAAC,WAAW,SAAS;AACvB,iBAAW,UAAU,CAAC;AAAA,IAAA;AAExB,eAAW,QAAQ,KAAK;AAAA,MACtB,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,cAAc;AAAA,MAAA;AAAA,IAChB,CACD;AAAA,EAAA;AAGH,WAAS,QAAQ,CAAQ,SAAA;AACvB,QAAI,OAAO,GAAG,aAAa,MAAM,OAAO;AACxC,UAAM,SAAS,OAAO,SAAS,MAAM,UAAU,EAAE,OAAO;AACxD,UAAM,OAAO,KAAK,SAAS,MAAM,MAAM;AACvC,UAAM,WAAW,SAAS,GAAG,MAAM,IAAI,IAAI,KAAK;AAEhD,UAAM,aAAa,MAAM,MAAM,EAAE,cAAc,KAAK;AACpD,UAAM,SAAS,MAAM,WAAW,EAAE,cAAc,QAAQ;AAElD,UAAA,OAAO,WAAW,cAAc,MAAM;AAE5C,QAAI,MAAM;AACH,WAAA,WAAW,QAAQ,CAAO,QAAA,YAAY,KAAK,IAAI,SAAA,CAAU,CAAC;AAC/D,iBAAW,YAAY,IAAI;AAAA,IAAA;AAGtB,WAAA,aAAa,MAAM,QAAQ;AAE9B,QAAA,WAAW,WAAW,SAAS;AACjC,aAAO,aAAa,WAAW,WAAW,WAAW,OAAO;AAAA,IAAA;AAG9D,eAAW,WAAW,QAAQ,CAAA,UAAS,OAAO,YAAY,KAAK,CAAC;AAExD,YAAA,KAAK,OAAO,UAAU;AAAA,EAAA,CAC/B;AAED,SAAO,2CACL,YAAY,SAAS,IAAI,SAAS,YAAY,KAAK,EAAE,CAAC,YAAY,EACpE,GAAG,QAAQ,KAAK,EAAE,CAAC;AACrB;"}