{"version":3,"sources":["jsdelivr-header.js","/npm/svg2html@1.2.2/lib/index.js"],"names":[],"mappings":"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","file":"/npm/svg2html@1.2.2/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/svg2html@1.2.2/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const path = require('path');\nconst fs = require('fs-extra');\nconst glob = require('glob');\nconst _ = require('lodash');\nconst Svgo = require('svgo');\nconst parser = require(\"posthtml-parser\");\nconst ora = require('ora');\nconst cwd = process.cwd();\n\nlet spinner;\nconst svg2htmlLib = {\n  travelAll: false,\n\n  async run({ inDir, outDir, rmAttr = '', exclude = 'node_modules' }) {\n    this.inDir = inDir;\n    this.outDir = outDir;\n    this.rmAttr = rmAttr;\n    this.exclude = exclude.split('|');\n\n    spinner = ora('Loading...').start();\n\n    this.svgo = new Svgo({\n      plugins: [{\n        removeAttrs: { attrs: `(${rmAttr})` },\n      }]\n    });\n\n    if (!Array.isArray(inDir)) {\n      inDir = [inDir];\n    }\n    const stat = fs.lstatSync(_.head(inDir));\n    this.outDir = path.isAbsolute(outDir) ? outDir : path.join(cwd, outDir, '/');\n\n    if (inDir.length < 2 && stat.isDirectory()) {\n      const files = await this.globPromise(`${inDir}/**/*.svg`);\n\n      inDir = _.head(inDir);\n      inDir = path.isAbsolute(inDir) ? inDir : path.join(cwd, inDir, '/');\n\n      await this.svg2html(inDir, this.outDir);\n      await this.generateAllHtml(files);\n    } else {\n      await this.handlerFiles(inDir);\n    }\n  },\n\n  async svg2html(inDir, outDir) {\n    this.handlerDir(inDir, outDir);\n  },\n\n  async handlerDir(inDir, outDir) {\n    const dirents = fs.readdirSync(inDir, {\n      withFileTypes: true\n    });\n\n    const svgs = dirents.filter((dirent) => {\n      return /\\.svg$/.test(dirent.name);\n    }).map(dirent => `${inDir}/${dirent.name}`);\n\n    const folders = dirents.filter((dirent) => {\n      return dirent.isDirectory()\n    }).map(dirent => dirent.name)\n      .filter(name => !this.exclude.includes(name));\n\n    // DLR\n    await this.generateIndexHtml(svgs, outDir);\n\n    folders.map((folder) => {\n      const subInDir = path.join(inDir, folder, '/');\n      const subOutDir = path.join(outDir, folder, '/');\n\n      this.svg2html(subInDir, subOutDir);\n    });\n  },\n\n  async handlerFiles(inDir) {\n    inDir = inDir.map((item) => {\n      return path.isAbsolute(item) ? item : path.join(cwd, item)\n    })\n    await this.generateAllHtml(inDir);\n  },\n\n  buildHtml(svgs) {\n    _.each(svgs, (values, key) => {\n      svgs[key] = values.map((svgFile) => {\n        const svgCont = fs.readFileSync(svgFile, 'utf-8');\n        const svgParserTag = _.find(parser(svgCont), {tag: 'svg'});\n        const svgParserWidth = svgParserTag.attrs.width\n        const svgXlinkHrefReg = /xlink:href=['\"]#(\\w+)?['\"]/;\n        const svgBlockWidth = 100;\n        const svgBlockSize = 1 / 2;\n\n        return this.svgo.optimize(svgCont, { path: svgFile }).then(function (result) {\n          const xlinkHrefMatch = result.data.match(new RegExp(svgXlinkHrefReg, 'g'))\n          if (xlinkHrefMatch) {\n            _.uniq(xlinkHrefMatch).map((matchstr) => {\n              const oldId = matchstr.match(svgXlinkHrefReg)[1];\n              const idReg = new RegExp(`id=['\"]${oldId}?['\"]`)\n              const random = _.random(1, 100);\n              const now = Date.now();\n              const newId = `${oldId}_${now}_${random}`;\n              result.data = result.data.replace(idReg, `id=\"${newId}\"`);\n              result.data = result.data.replace(new RegExp(matchstr, 'g'), matchstr.replace(`#${oldId}`, `#${newId}`));\n            });\n          }\n\n          return {\n            content: result.data,\n            name: path.parse(svgFile).name,\n            scale: svgParserWidth ? (svgBlockWidth * svgBlockSize) / Number(svgParserWidth.replace(/\\D+/, '')) : svgBlockSize\n          };\n        });\n      });\n    });\n\n    return new Promise((resolve, reject) => {\n      const buildSvgs = {};\n\n      _.each(svgs, (values, key) => {\n        Promise.all(values).then((res) => {\n          buildSvgs[key.replace(process.env.HOME, '')] = res;\n          return buildSvgs;\n        }).then((res) => {\n          const template = fs.readFileSync(`${__dirname}/templates/index.html`, 'utf-8');\n          const html = template.replace('$svgData', JSON.stringify(res));\n\n          resolve(html);\n        }).catch((reason)=> {\n          reject(reason);\n        });\n      });\n    });\n\n  },\n\n  generateIndexHtml(svgs, outDir) {\n    if (svgs.length) {\n      const allSvgMap = this.buildSvgMap(svgs);\n\n      return this.buildHtml(allSvgMap).then((html) => {\n        fs.outputFile(`${outDir}/index.html`, html);\n      });\n    } else {\n      return Promise.resolve();\n    }\n  },\n\n  buildSvgMap(svgs) {\n    const allSvgMap = {};\n\n    svgs.map((file) => {\n      let list = allSvgMap[path.dirname(file)];\n      if (!list) {\n        list = allSvgMap[path.dirname(file)] = [];\n      }\n      list.push(file);\n    });\n    return allSvgMap;\n  },\n\n  async generateAllHtml(svgs) {\n    if (!this.travelAll) {\n      this.travelAll = true;\n      const allSvgMap = this.buildSvgMap(svgs);\n\n      _.each(allSvgMap, (value, key) => {\n        if (this.exclude.includes(key.split('/').pop())) {\n          delete allSvgMap[key];\n        }\n      });\n\n      const html = await this.buildHtml(allSvgMap);\n      fs.outputFile(`${this.outDir}/all.html`, html);\n      this.travelAll = false;\n    }\n    spinner.stop();\n  },\n\n  globPromise(pattern, options) {\n    return new Promise((resolve, reject) => {\n      glob(pattern, (err, files) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(files);\n        }\n      });\n    });\n  }\n};\n\nmodule.exports = svg2htmlLib;"]}