{"version":3,"sources":["jsdelivr-header.js","/npm/speed-measure-webpack-plugin@1.5.0/index.js"],"names":[],"mappings":"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","file":"/npm/speed-measure-webpack-plugin@1.5.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/speed-measure-webpack-plugin@1.5.0/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\");\nconst chalk = require(\"chalk\");\nconst { WrappedPlugin, clear } = require(\"./WrappedPlugin\");\nconst {\n  getModuleName,\n  getLoaderNames,\n  prependLoader,\n  tap,\n} = require(\"./utils\");\nconst {\n  getHumanOutput,\n  getMiscOutput,\n  getPluginsOutput,\n  getLoadersOutput,\n  smpTag,\n} = require(\"./output\");\n\nconst NS = path.dirname(fs.realpathSync(__filename));\n\nmodule.exports = class SpeedMeasurePlugin {\n  constructor(options) {\n    this.options = options || {};\n\n    this.timeEventData = {};\n    this.smpPluginAdded = false;\n\n    this.wrap = this.wrap.bind(this);\n    this.getOutput = this.getOutput.bind(this);\n    this.addTimeEvent = this.addTimeEvent.bind(this);\n    this.apply = this.apply.bind(this);\n    this.provideLoaderTiming = this.provideLoaderTiming.bind(this);\n    this.generateLoadersBuildComparison = this.generateLoadersBuildComparison.bind(\n      this\n    );\n  }\n\n  wrap(config) {\n    if (this.options.disable) return config;\n    if (Array.isArray(config)) return config.map(this.wrap);\n    if (typeof config === \"function\")\n      return (...args) => this.wrap(config(...args));\n\n    config.plugins = (config.plugins || []).map((plugin) => {\n      const pluginName =\n        Object.keys(this.options.pluginNames || {}).find(\n          (pluginName) => plugin === this.options.pluginNames[pluginName]\n        ) ||\n        (plugin.constructor && plugin.constructor.name) ||\n        \"(unable to deduce plugin name)\";\n      return new WrappedPlugin(plugin, pluginName, this);\n    });\n\n    if (config.optimization && config.optimization.minimizer) {\n      config.optimization.minimizer = config.optimization.minimizer.map(\n        (plugin) => {\n          return new WrappedPlugin(plugin, plugin.constructor.name, this);\n        }\n      );\n    }\n\n    if (config.module && this.options.granularLoaderData) {\n      config.module = prependLoader(config.module);\n    }\n\n    if (!this.smpPluginAdded) {\n      config.plugins = config.plugins.concat(this);\n      this.smpPluginAdded = true;\n    }\n\n    return config;\n  }\n\n  generateLoadersBuildComparison() {\n    const objBuildData = { loaderInfo: [] };\n    const loaderFile = this.options.compareLoadersBuild.filePath;\n    const outputObj = getLoadersOutput(this.timeEventData.loaders);\n\n    if (!loaderFile) {\n      throw new Error(\n        \"`options.compareLoadersBuild.filePath` is a required field\"\n      );\n    }\n\n    if (!outputObj) {\n      throw new Error(\"No output found!\");\n    }\n\n    const buildDetailsFile = fs.existsSync(loaderFile)\n      ? fs.readFileSync(loaderFile)\n      : \"[]\";\n    const buildDetails = JSON.parse(buildDetailsFile.toString());\n    const buildCount = buildDetails.length;\n    const buildNo =\n      buildCount > 0 ? buildDetails[buildCount - 1][\"buildNo\"] + 1 : 1;\n\n    // create object format of current loader and write in the file\n    outputObj.build.forEach((loaderObj) => {\n      const loaderInfo = {};\n      loaderInfo[\"Name\"] = loaderObj.loaders.join(\",\") || \"\";\n      loaderInfo[\"Time\"] = loaderObj.activeTime || \"\";\n      loaderInfo[\"Count\"] =\n        this.options.outputFormat === \"humanVerbose\"\n          ? loaderObj.averages.dataPoints\n          : \"\";\n      loaderInfo[`Comparison`] = \"\";\n\n      // Getting the comparison from the previous build by default only\n      // in case if build data is more then one\n      if (buildCount > 0) {\n        const prevBuildIndex = buildCount - 1;\n        for (\n          var y = 0;\n          y < buildDetails[prevBuildIndex][\"loaderInfo\"].length;\n          y++\n        ) {\n          const prevloaderDetails =\n            buildDetails[prevBuildIndex][\"loaderInfo\"][y];\n          if (\n            loaderInfo[\"Name\"] == prevloaderDetails[\"Name\"] &&\n            prevloaderDetails[\"Time\"]\n          ) {\n            const previousBuildTime =\n              buildDetails[prevBuildIndex][\"loaderInfo\"][y][\"Time\"];\n            const savedTime = previousBuildTime > loaderObj.activeTime;\n\n            loaderInfo[`Comparison`] = `${savedTime ? \"-\" : \"+\"}${Math.abs(\n              loaderObj.activeTime - previousBuildTime\n            )}ms | ${savedTime ? \"(slower)\" : \"(faster)\"}`;\n          }\n        }\n      }\n\n      objBuildData[\"loaderInfo\"].push(loaderInfo);\n    });\n\n    buildDetails.push({ buildNo, loaderInfo: objBuildData[\"loaderInfo\"] });\n\n    fs.writeFileSync(loaderFile, JSON.stringify(buildDetails));\n\n    for (let i = 0; i < buildDetails.length; i++) {\n      const outputTable = [];\n      console.log(\"--------------------------------------------\");\n      console.log(\"Build No \", buildDetails[i][\"buildNo\"]);\n      console.log(\"--------------------------------------------\");\n\n      if (buildDetails[i][\"loaderInfo\"]) {\n        buildDetails[i][\"loaderInfo\"].forEach((buildInfo) => {\n          const objCurrentBuild = {};\n          objCurrentBuild[\"Name\"] = buildInfo[\"Name\"] || \"\";\n          objCurrentBuild[\"Time (ms)\"] = buildInfo[\"Time\"] || \"\";\n          if (this.options.outputFormat === \"humanVerbose\")\n            objCurrentBuild[\"Count\"] = buildInfo[\"Count\"] || 0;\n          objCurrentBuild[\"Comparison\"] = buildInfo[\"Comparison\"] || \"\";\n          outputTable.push(objCurrentBuild);\n        });\n      }\n      console.table(outputTable);\n    }\n  }\n\n  getOutput() {\n    const outputObj = {};\n    if (this.timeEventData.misc)\n      outputObj.misc = getMiscOutput(this.timeEventData.misc);\n    if (this.timeEventData.plugins)\n      outputObj.plugins = getPluginsOutput(this.timeEventData.plugins);\n    if (this.timeEventData.loaders)\n      outputObj.loaders = getLoadersOutput(this.timeEventData.loaders);\n\n    if (this.options.outputFormat === \"json\")\n      return JSON.stringify(outputObj, null, 2);\n    if (typeof this.options.outputFormat === \"function\")\n      return this.options.outputFormat(outputObj);\n    return getHumanOutput(\n      outputObj,\n      Object.assign(\n        { verbose: this.options.outputFormat === \"humanVerbose\" },\n        this.options\n      )\n    );\n  }\n\n  addTimeEvent(category, event, eventType, data = {}) {\n    const allowFailure = data.allowFailure;\n    delete data.allowFailure;\n\n    const tED = this.timeEventData;\n    if (!tED[category]) tED[category] = {};\n    if (!tED[category][event]) tED[category][event] = [];\n    const eventList = tED[category][event];\n    const curTime = new Date().getTime();\n\n    if (eventType === \"start\") {\n      data.start = curTime;\n      eventList.push(data);\n    } else if (eventType === \"end\") {\n      const matchingEvent = eventList.find((e) => {\n        const allowOverwrite = !e.end || !data.fillLast;\n        const idMatch = e.id !== undefined && e.id === data.id;\n        const nameMatch =\n          !data.id && e.name !== undefined && e.name === data.name;\n        return allowOverwrite && (idMatch || nameMatch);\n      });\n      const eventToModify =\n        matchingEvent || (data.fillLast && eventList.find((e) => !e.end));\n      if (!eventToModify) {\n        console.error(\n          \"Could not find a matching event to end\",\n          category,\n          event,\n          data\n        );\n        if (allowFailure) return;\n        throw new Error(\"No matching event!\");\n      }\n\n      eventToModify.end = curTime;\n    }\n  }\n\n  apply(compiler) {\n    if (this.options.disable) return;\n\n    tap(compiler, \"compile\", () => {\n      this.addTimeEvent(\"misc\", \"compile\", \"start\", { watch: false });\n    });\n    tap(compiler, \"done\", () => {\n      clear();\n      this.addTimeEvent(\"misc\", \"compile\", \"end\", { fillLast: true });\n\n      const outputToFile = typeof this.options.outputTarget === \"string\";\n      chalk.enabled = !outputToFile;\n      const output = this.getOutput();\n      chalk.enabled = true;\n      if (outputToFile) {\n        const writeMethod = fs.existsSync(this.options.outputTarget)\n          ? fs.appendFileSync\n          : fs.writeFileSync;\n        writeMethod(this.options.outputTarget, output + \"\\n\");\n        console.log(\n          smpTag() + \"Outputted timing info to \" + this.options.outputTarget\n        );\n      } else {\n        const outputFunc = this.options.outputTarget || console.log;\n        outputFunc(output);\n      }\n\n      if (this.options.compareLoadersBuild)\n        this.generateLoadersBuildComparison();\n\n      this.timeEventData = {};\n    });\n\n    tap(compiler, \"compilation\", (compilation) => {\n      tap(compilation, \"normal-module-loader\", (loaderContext) => {\n        loaderContext[NS] = this.provideLoaderTiming;\n      });\n\n      tap(compilation, \"build-module\", (module) => {\n        const name = getModuleName(module);\n        if (name) {\n          this.addTimeEvent(\"loaders\", \"build\", \"start\", {\n            name,\n            fillLast: true,\n            loaders: getLoaderNames(module.loaders),\n          });\n        }\n      });\n\n      tap(compilation, \"succeed-module\", (module) => {\n        const name = getModuleName(module);\n        if (name) {\n          this.addTimeEvent(\"loaders\", \"build\", \"end\", {\n            name,\n            fillLast: true,\n          });\n        }\n      });\n    });\n  }\n\n  provideLoaderTiming(info) {\n    const infoData = { id: info.id };\n    if (info.type !== \"end\") {\n      infoData.loader = info.loaderName;\n      infoData.name = info.module;\n    }\n\n    this.addTimeEvent(\"loaders\", \"build-specific\", info.type, infoData);\n  }\n};\n"]}