diff --git a/Gruntfile.js b/Gruntfile.js index f96eda8ce5f61..0a8c65142daae 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1508,6 +1508,22 @@ module.exports = function(grunt) { dest: SOURCE_DIR } }, + cwebp: { + dynamic: { + options: { + q: 80 + }, + files: [{ + expand: true, + cwd: SOURCE_DIR, + src: [ + 'wp-{admin,includes}/images/**/*.webp', + 'wp-content/themes/**/*.webp' + ], + dest: SOURCE_DIR + }], + } + }, replace: { 'emoji-regex': { options: { @@ -1936,7 +1952,7 @@ module.exports = function(grunt) { grunt.log.writeln( 'Configuration files modified. Running `prerelease`.' ); taskList.push( 'prerelease' ); } else { - if ( [ 'png', 'jpg', 'gif', 'jpeg' ].some( testExtension ) ) { + if ( [ 'png', 'jpg', 'gif', 'jpeg', 'webp' ].some( testExtension ) ) { grunt.log.writeln( 'Image files modified. Minifying.' ); taskList.push( 'precommit:image' ); } diff --git a/package-lock.json b/package-lock.json index 5b497251c419d..704b72ceef80d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,6 +68,7 @@ "grunt-contrib-jshint": "3.2.0", "grunt-contrib-uglify": "~5.2.2", "grunt-contrib-watch": "~1.1.0", + "grunt-cwebp": "3.0.3", "grunt-file-append": "0.0.7", "grunt-jsdoc": "2.4.1", "grunt-legacy-util": "^2.0.2", @@ -11478,6 +11479,27 @@ "dev": true, "license": "MIT" }, + "node_modules/cwebp-bin": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cwebp-bin/-/cwebp-bin-6.1.2.tgz", + "integrity": "sha512-NLEZ/BVAl9g426hwUX/qrQ7b/EfQH7BS1tr+CzPo2EgDQbcdzmUVE+fIfsi64lsL638lWgzTEViMAL4pxV1GOg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.1" + }, + "bin": { + "cwebp": "cli.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/imagemin/cwebp-bin?sponsor=1" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -15436,6 +15458,172 @@ "node": ">=0.10.0" } }, + "node_modules/grunt-cwebp": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/grunt-cwebp/-/grunt-cwebp-3.0.3.tgz", + "integrity": "sha512-aIYdsJBiMIpOgeGWLb6ZFFD0xyfiu5ja2+7eAlYA41cJiJm/oFr3kiLkNQl2wbxRKL7QSB8+P5hde8+R+DJaHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cwebp-bin": "^6.1.1", + "execa": "^4.0.3", + "mkdirp": "^1.0.4", + "replace-ext": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "grunt": "^1.3.0" + } + }, + "node_modules/grunt-cwebp/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/grunt-cwebp/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/grunt-cwebp/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/grunt-cwebp/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/grunt-cwebp/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/grunt-cwebp/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-cwebp/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-cwebp/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-cwebp/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/grunt-cwebp/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-cwebp/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/grunt-file-append": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/grunt-file-append/-/grunt-file-append-0.0.7.tgz", diff --git a/package.json b/package.json index d8e955f0d9809..28143d9465ae1 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "grunt-contrib-concat": "2.1.0", "grunt-contrib-copy": "~1.0.0", "grunt-contrib-cssmin": "~5.0.0", + "grunt-contrib-imagemin": "~4.0.0", "grunt-contrib-jshint": "3.2.0", "grunt-contrib-uglify": "~5.2.2", "grunt-contrib-watch": "~1.1.0",