{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {Plugin} from 'rollup';\nimport * as path from 'path';\n\nconst criticalSuffix = '_critical.min.css';\n\n/**\n * Default `criticalConfig` passed in to `critical`\n */\nconst defaultCriticalConfig: Partial<CriticalConfig> = {\n  inline: false,\n  extract: false,\n  width: 1200,\n  height: 1200,\n  penthouse: {\n    blockJSRequests: false\n  }\n};\n\n/**\n * [Vite.js](https://vitejs.dev/) & [Rollup](https://rollupjs.org/) plugin for generating critical CSS\n * that uses the [critical](https://github.com/addyosmani/critical) generator under the hood.\n *\n * @param {CriticalPluginConfig} pluginConfig - the plugin configuration object\n * @param {Function} callback - callback upon completion of the critical CSS generation\n * @constructor\n */\nfunction PluginCritical(pluginConfig: CriticalPluginConfig, callback?: CriticalPluginCallback): Plugin {\n  return {\n    name: 'critical',\n    async writeBundle(outputOptions, bundle) {\n      const css: Array<string> = [];\n      // Find all of the generated CSS assets\n      for (const chunk of Object.values(bundle)) {\n        if (chunk.type === 'asset' && chunk.fileName.endsWith('.css')) {\n          const cssFile = path.join(outputOptions.dir || '', chunk.fileName);\n          css.push(cssFile);\n        }\n      }\n      // If we have no CSS, skip bundle\n      if (!css.length) {\n        return;\n      }\n      // Iterate through the pages\n      for (const page of pluginConfig.criticalPages) {\n        const criticalBase = pluginConfig.criticalBase;\n        const criticalSrc = pluginConfig.criticalUrl + page.uri;\n        // If inline is set to true, use HTML as target, otherwise CSS with suffix\n        const criticalTarget = (pluginConfig.criticalConfig && pluginConfig.criticalConfig.inline == true) ? page.template + \".html\" : page.template + criticalSuffix;\n        // Merge in our options\n        const options = Object.assign(\n            { css },\n            defaultCriticalConfig,\n            {\n              base: criticalBase,\n              src: criticalSrc,\n              target: criticalTarget,\n            },\n            pluginConfig.criticalConfig\n        );\n        // Horrible nonsense to import an ESM module into CJS\n        // ref: https://adamcoster.com/blog/commonjs-and-esm-importexport-compatibility-examples\n        const generate = (await import('critical')).generate;\n        // Generate the Critical CSS\n        console.log(`Generating critical CSS from ${criticalSrc} to ${criticalTarget}`);\n        await generate(options, (err: string) => {\n          if (err) {\n            console.error(err);\n          }\n          if (callback) {\n            callback(err);\n          }\n        });\n      }\n    }\n  }\n}\n\nexport default PluginCritical;\n"],"mappings":"0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAsB,qBAEhBC,EAAiB,oBAKjBC,EAAiD,CACrD,OAAQ,GACR,QAAS,GACT,MAAO,KACP,OAAQ,KACR,UAAW,CACT,gBAAiB,EACnB,CACF,EAUA,SAASC,EAAeC,EAAoCC,EAA2C,CACrG,MAAO,CACL,KAAM,WACN,MAAM,YAAYC,EAAeC,EAAQ,CACvC,IAAMC,EAAqB,CAAC,EAE5B,QAAWC,KAAS,OAAO,OAAOF,CAAM,EACtC,GAAIE,EAAM,OAAS,SAAWA,EAAM,SAAS,SAAS,MAAM,EAAG,CAC7D,IAAMC,EAAe,OAAKJ,EAAc,KAAO,GAAIG,EAAM,QAAQ,EACjED,EAAI,KAAKE,CAAO,CAClB,CAGF,GAAKF,EAAI,OAIT,QAAWG,KAAQP,EAAa,cAAe,CAC7C,IAAMQ,EAAeR,EAAa,aAC5BS,EAAcT,EAAa,YAAcO,EAAK,IAE9CG,EAAkBV,EAAa,gBAAkBA,EAAa,eAAe,QAAU,GAAQO,EAAK,SAAW,QAAUA,EAAK,SAAWV,EAEzIc,EAAU,OAAO,OACnB,CAAE,IAAAP,CAAI,EACNN,EACA,CACE,KAAMU,EACN,IAAKC,EACL,OAAQC,CACV,EACAV,EAAa,cACjB,EAGMY,GAAY,KAAM,QAAO,UAAU,GAAG,SAE5C,QAAQ,IAAI,gCAAgCH,CAAW,OAAOC,CAAc,EAAE,EAC9E,MAAME,EAASD,EAAUE,GAAgB,CACnCA,GACF,QAAQ,MAAMA,CAAG,EAEfZ,GACFA,EAASY,CAAG,CAEhB,CAAC,CACH,CACF,CACF,CACF,CAEA,IAAOnB,EAAQK","names":["index_exports","__export","index_default","__toCommonJS","path","criticalSuffix","defaultCriticalConfig","PluginCritical","pluginConfig","callback","outputOptions","bundle","css","chunk","cssFile","page","criticalBase","criticalSrc","criticalTarget","options","generate","err"]}