UNPKG

next

Version:

The React Framework

78 lines (77 loc) 3.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.raw = void 0; var _loaderUtils3 = _interopRequireDefault(require("next/dist/compiled/loader-utils3")); var _imageOptimizer = require("../../../server/image-optimizer"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const BLUR_IMG_SIZE = 8; const BLUR_QUALITY = 70; const VALID_BLUR_EXT = [ 'jpeg', 'png', 'webp', 'avif' ] // should match next/client/image.tsx ; function nextImageLoader(content) { const imageLoaderSpan = this.currentTraceSpan.traceChild('next-image-loader'); return imageLoaderSpan.traceAsyncFn(async ()=>{ const { isServer , isDev , assetPrefix , basePath } = this.getOptions(); const context = this.rootContext; const opts = { context, content }; const interpolatedName = _loaderUtils3.default.interpolateName(this, '/static/media/[name].[hash:8].[ext]', opts); const outputPath = assetPrefix + '/_next' + interpolatedName; let extension = _loaderUtils3.default.interpolateName(this, '[ext]', opts); if (extension === 'jpg') { extension = 'jpeg'; } const imageSizeSpan = imageLoaderSpan.traceChild('image-size-calculation'); const imageSize = await imageSizeSpan.traceAsyncFn(()=>(0, _imageOptimizer).getImageSize(content, extension) ); let blurDataURL; if (VALID_BLUR_EXT.includes(extension)) { if (isDev) { const prefix = 'http://localhost'; const url = new URL(`${basePath || ''}/_next/image`, prefix); url.searchParams.set('url', outputPath); url.searchParams.set('w', BLUR_IMG_SIZE); url.searchParams.set('q', BLUR_QUALITY); blurDataURL = url.href.slice(prefix.length); } else { // Shrink the image's largest dimension const dimension = imageSize.width >= imageSize.height ? 'width' : 'height'; const resizeImageSpan = imageLoaderSpan.traceChild('image-resize'); const resizedImage = await resizeImageSpan.traceAsyncFn(()=>(0, _imageOptimizer).resizeImage(content, dimension, BLUR_IMG_SIZE, extension, BLUR_QUALITY) ); const blurDataURLSpan = imageLoaderSpan.traceChild('image-base64-tostring'); blurDataURL = blurDataURLSpan.traceFn(()=>`data:image/${extension};base64,${resizedImage.toString('base64')}` ); } } const stringifiedData = imageLoaderSpan.traceChild('image-data-stringify').traceFn(()=>JSON.stringify({ src: outputPath, height: imageSize.height, width: imageSize.width, blurDataURL }) ); if (!isServer) { this.emitFile(interpolatedName, content, null); } return `export default ${stringifiedData};`; }); } const raw = true; exports.raw = raw; var _default = nextImageLoader; exports.default = _default; //# sourceMappingURL=next-image-loader.js.map