UNPKG

rollup-plugin-critical

Version:
1 lines 4.07 kB
{"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"]}