bpms_site/.svn/pristine/69/69582b9972f33de99ed092554e4ee447999fa3a7.svn-base
2025-11-02 16:38:49 +03:30

53 lines
2.3 KiB
Plaintext

import path from "path";
import loaderUtils from "next/dist/compiled/loader-utils3";
import { getImageSize } from "../../../../server/image-optimizer";
import { getBlurImage } from "./blur";
function nextImageLoader(content) {
const imageLoaderSpan = this.currentTraceSpan.traceChild("next-image-loader");
return imageLoaderSpan.traceAsyncFn(async ()=>{
const options = this.getOptions();
const { compilerType, isDev, assetPrefix, basePath } = options;
const context = this.rootContext;
const opts = {
context,
content
};
const interpolatedName = loaderUtils.interpolateName(this, "/static/media/[name].[hash:8].[ext]", opts);
const outputPath = assetPrefix + "/_next" + interpolatedName;
let extension = loaderUtils.interpolateName(this, "[ext]", opts);
if (extension === "jpg") {
extension = "jpeg";
}
const imageSizeSpan = imageLoaderSpan.traceChild("image-size-calculation");
const imageSize = await imageSizeSpan.traceAsyncFn(()=>getImageSize(content, extension).catch((err)=>err));
if (imageSize instanceof Error) {
const err = imageSize;
err.name = "InvalidImageFormatError";
throw err;
}
const { dataURL: blurDataURL, width: blurWidth, height: blurHeight } = await getBlurImage(content, extension, imageSize, {
basePath,
outputPath,
isDev,
tracing: imageLoaderSpan.traceChild.bind(imageLoaderSpan)
});
const stringifiedData = imageLoaderSpan.traceChild("image-data-stringify").traceFn(()=>JSON.stringify({
src: outputPath,
height: imageSize.height,
width: imageSize.width,
blurDataURL,
blurWidth,
blurHeight
}));
if (compilerType === "client") {
this.emitFile(interpolatedName, content, null);
} else {
this.emitFile(path.join("..", isDev || compilerType === "edge-server" ? "" : "..", interpolatedName), content, null);
}
return `export default ${stringifiedData};`;
});
}
export const raw = true;
export default nextImageLoader;
//# sourceMappingURL=index.js.map