{"version":3,"sources":["jsdelivr-header.js","/npm/vite-plugin-image-to-webp@1.0.14/dist/plugin.js"],"names":[],"mappings":"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","file":"/npm/vite-plugin-image-to-webp@1.0.14/dist/plugin.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/vite-plugin-image-to-webp@1.0.14/dist/plugin.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.imageToWebpPlugin = imageToWebpPlugin;\nconst fs_1 = __importDefault(require(\"fs\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst sharp_1 = __importDefault(require(\"sharp\"));\nconst pluginName = 'vite-plugin-image-to-webp';\nfunction getBeautifiedFileSize(size) {\n    const sizeInBytes = size;\n    let readableSize = '';\n    if (Math.abs(sizeInBytes) < 1024) {\n        readableSize = `${sizeInBytes} bytes`;\n    }\n    else {\n        const sizeInKB = Math.round(sizeInBytes / 1024);\n        readableSize = `${sizeInKB} kB`;\n    }\n    return readableSize;\n}\nfunction logBeautifiedConversionData(label, conversionData, options) {\n    let beforeNice = getBeautifiedFileSize(conversionData.before);\n    let afterNice = getBeautifiedFileSize(conversionData.after);\n    let totalPercentageSaved = Math.round((1 - conversionData.after / conversionData.before) * 100);\n    let difference = getBeautifiedFileSize(conversionData.before - conversionData.after);\n    if (totalPercentageSaved < 0) {\n        console.log(`${label}\\x1b[35m${beforeNice} => ${afterNice} - \\x1b[31m${totalPercentageSaved}% MORE (${difference})`);\n        console.log('Maybe try to change the options. Your current vite.config.ts options:', options.webpQuality);\n    }\n    else {\n        console.log(`${label}\\x1b[35m${beforeNice} => ${afterNice} - \\x1b[36m${totalPercentageSaved}% less (${difference})`);\n    }\n}\nfunction imageToWebpPlugin(options) {\n    options = Object.assign({ imageFormats: ['jpg', 'jpeg', 'png'], webpQuality: {}, destinationFolder: 'dist' }, options);\n    return {\n        name: pluginName,\n        apply: 'build',\n        async closeBundle() {\n            let imageFilesRegex = new RegExp(`\\.(${options.imageFormats.join('|')})$`);\n            const allDistFiles = [];\n            const walk = (dir) => {\n                fs_1.default.readdirSync(dir).forEach(file => {\n                    const filePath = path_1.default.join(dir, file);\n                    if (fs_1.default.statSync(filePath).isDirectory()) {\n                        walk(filePath);\n                    }\n                    allDistFiles.push(filePath);\n                });\n            };\n            walk(options.destinationFolder);\n            let allImageFilesToBeReplaced = [];\n            let imageConversionData = [];\n            try {\n                for (const originalFilePath of allDistFiles) {\n                    // if it's the one of the searched image files\n                    if (imageFilesRegex.test(originalFilePath)) {\n                        allImageFilesToBeReplaced.push(originalFilePath);\n                        const destinationWebpPath = originalFilePath.replace(imageFilesRegex, '.webp');\n                        // convert image to .webp\n                        await (0, sharp_1.default)(originalFilePath)\n                            .webp(options.webpQuality)\n                            .toFile(destinationWebpPath);\n                        // aggregate the stats for the new and old image\n                        // in order to calculate the compression success (kB and %)\n                        const originalFileStats = fs_1.default.statSync(originalFilePath);\n                        const newFileStats = fs_1.default.statSync(destinationWebpPath);\n                        imageConversionData.push({\n                            before: originalFileStats.size,\n                            after: newFileStats.size,\n                            percentage: Math.round((1 - newFileStats.size / originalFileStats.size) * 100)\n                        });\n                        // remove the original file (in the dist folder only)\n                        fs_1.default.unlinkSync(originalFilePath);\n                    }\n                }\n                let notLoggedYet = true;\n                // intro\n                console.log(`\\n\\x1b[36m${pluginName}: \\x1b[0m`);\n                let i = 0;\n                // for all js, html and css files:\n                const replacePaths = (filePath) => {\n                    let fileContent = fs_1.default.readFileSync(filePath, 'utf-8');\n                    // TODO: make it more efficient. no need yet but there has to be a way\n                    allImageFilesToBeReplaced.forEach(filePath => {\n                        let parsedImagePath = path_1.default.parse(filePath);\n                        // eg: \"background.png\"\n                        let fileNameWithExtension = parsedImagePath.base;\n                        let fileNameRegex = new RegExp(fileNameWithExtension, 'gi');\n                        // eg: \"background.webp\"\n                        let newImageName = parsedImagePath.name + '.webp';\n                        // replace the image file name inside the dist's js, css and html files\n                        fileContent = fileContent.replace(fileNameRegex, newImageName);\n                        if (notLoggedYet) {\n                            logBeautifiedConversionData(`\\x1b[90mcreated: \\x1b[32m${newImageName} - `, imageConversionData[i], options);\n                            i++;\n                        }\n                    });\n                    notLoggedYet = false;\n                    // save the new file content\n                    fs_1.default.writeFileSync(filePath, fileContent, 'utf-8');\n                };\n                // for all dist files (js, html and css)\n                for (const file of allDistFiles) {\n                    if (/\\.(js|html|css)$/.test(file)) {\n                        replacePaths(file);\n                    }\n                }\n                /**\n                 * aggregate the save image data\n                 */\n                let totalConversionData = {\n                    before: 0,\n                    after: 0,\n                    percentage: 0\n                };\n                imageConversionData.forEach(e => {\n                    totalConversionData.before += e.before;\n                    totalConversionData.after += e.after;\n                });\n                logBeautifiedConversionData('\\n\\x1b[32mtotal savings: ', totalConversionData, options);\n                console.log('\\n');\n            }\n            catch (error) {\n                console.log(`\\x1b[31m\\n${pluginName} - error:\\n\\x1b[0m`, error);\n                console.log('\\nYour current options: ', options);\n            }\n        }\n    };\n}\n"]}