including-modules
This commit is contained in:
+16
@@ -0,0 +1,16 @@
|
||||
export declare function getBlurImage(content: Buffer, extension: string, imageSize: {
|
||||
width: number;
|
||||
height: number;
|
||||
}, { basePath, outputPath, isDev, tracing, }: {
|
||||
basePath: string;
|
||||
outputPath: string;
|
||||
isDev: boolean;
|
||||
tracing: (name?: string) => {
|
||||
traceFn(fn: Function): any;
|
||||
traceAsyncFn(fn: Function): any;
|
||||
};
|
||||
}): Promise<{
|
||||
dataURL: string | undefined;
|
||||
width: number;
|
||||
height: number;
|
||||
}>;
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "getBlurImage", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return getBlurImage;
|
||||
}
|
||||
});
|
||||
const _isanimated = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/is-animated"));
|
||||
const _imageoptimizer = require("../../../../server/image-optimizer");
|
||||
function _interop_require_default(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 other usages
|
||||
;
|
||||
async function getBlurImage(content, extension, imageSize, { basePath, outputPath, isDev, tracing = ()=>({
|
||||
traceFn: (fn)=>(...args)=>fn(...args),
|
||||
traceAsyncFn: (fn)=>(...args)=>fn(...args)
|
||||
}) }) {
|
||||
let blurDataURL;
|
||||
let blurWidth = 0;
|
||||
let blurHeight = 0;
|
||||
if (VALID_BLUR_EXT.includes(extension) && !(0, _isanimated.default)(content)) {
|
||||
// Shrink the image's largest dimension
|
||||
if (imageSize.width >= imageSize.height) {
|
||||
blurWidth = BLUR_IMG_SIZE;
|
||||
blurHeight = Math.max(Math.round(imageSize.height / imageSize.width * BLUR_IMG_SIZE), 1);
|
||||
} else {
|
||||
blurWidth = Math.max(Math.round(imageSize.width / imageSize.height * BLUR_IMG_SIZE), 1);
|
||||
blurHeight = BLUR_IMG_SIZE;
|
||||
}
|
||||
if (isDev) {
|
||||
// During `next dev`, we don't want to generate blur placeholders with webpack
|
||||
// because it can delay starting the dev server. Instead, we inline a
|
||||
// special url to lazily generate the blur placeholder at request time.
|
||||
const prefix = 'http://localhost';
|
||||
const url = new URL(`${basePath || ''}/_next/image`, prefix);
|
||||
url.searchParams.set('url', outputPath);
|
||||
url.searchParams.set('w', String(blurWidth));
|
||||
url.searchParams.set('q', String(BLUR_QUALITY));
|
||||
blurDataURL = url.href.slice(prefix.length);
|
||||
} else {
|
||||
const resizeImageSpan = tracing('image-resize');
|
||||
const resizedImage = await resizeImageSpan.traceAsyncFn(()=>(0, _imageoptimizer.optimizeImage)({
|
||||
buffer: content,
|
||||
width: blurWidth,
|
||||
height: blurHeight,
|
||||
contentType: `image/${extension}`,
|
||||
quality: BLUR_QUALITY
|
||||
}));
|
||||
const blurDataURLSpan = tracing('image-base64-tostring');
|
||||
blurDataURL = blurDataURLSpan.traceFn(()=>`data:image/${extension};base64,${resizedImage.toString('base64')}`);
|
||||
}
|
||||
}
|
||||
return {
|
||||
dataURL: blurDataURL,
|
||||
width: blurWidth,
|
||||
height: blurHeight
|
||||
};
|
||||
}
|
||||
|
||||
//# sourceMappingURL=blur.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../../../src/build/webpack/loaders/next-image-loader/blur.ts"],"sourcesContent":["import isAnimated from 'next/dist/compiled/is-animated'\nimport { optimizeImage } from '../../../../server/image-optimizer'\n\nconst BLUR_IMG_SIZE = 8\nconst BLUR_QUALITY = 70\nconst VALID_BLUR_EXT = ['jpeg', 'png', 'webp', 'avif'] // should match other usages\n\nexport async function getBlurImage(\n content: Buffer,\n extension: string,\n imageSize: { width: number; height: number },\n {\n basePath,\n outputPath,\n isDev,\n tracing = () => ({\n traceFn:\n (fn) =>\n (...args: any) =>\n fn(...args),\n traceAsyncFn:\n (fn) =>\n (...args: any) =>\n fn(...args),\n }),\n }: {\n basePath: string\n outputPath: string\n isDev: boolean\n tracing: (name?: string) => {\n traceFn(fn: Function): any\n traceAsyncFn(fn: Function): any\n }\n }\n) {\n let blurDataURL: string | undefined\n let blurWidth: number = 0\n let blurHeight: number = 0\n\n if (VALID_BLUR_EXT.includes(extension) && !isAnimated(content)) {\n // Shrink the image's largest dimension\n if (imageSize.width >= imageSize.height) {\n blurWidth = BLUR_IMG_SIZE\n blurHeight = Math.max(\n Math.round((imageSize.height / imageSize.width) * BLUR_IMG_SIZE),\n 1\n )\n } else {\n blurWidth = Math.max(\n Math.round((imageSize.width / imageSize.height) * BLUR_IMG_SIZE),\n 1\n )\n blurHeight = BLUR_IMG_SIZE\n }\n\n if (isDev) {\n // During `next dev`, we don't want to generate blur placeholders with webpack\n // because it can delay starting the dev server. Instead, we inline a\n // special url to lazily generate the blur placeholder at request time.\n const prefix = 'http://localhost'\n const url = new URL(`${basePath || ''}/_next/image`, prefix)\n url.searchParams.set('url', outputPath)\n url.searchParams.set('w', String(blurWidth))\n url.searchParams.set('q', String(BLUR_QUALITY))\n blurDataURL = url.href.slice(prefix.length)\n } else {\n const resizeImageSpan = tracing('image-resize')\n const resizedImage = await resizeImageSpan.traceAsyncFn(() =>\n optimizeImage({\n buffer: content,\n width: blurWidth,\n height: blurHeight,\n contentType: `image/${extension}`,\n quality: BLUR_QUALITY,\n })\n )\n const blurDataURLSpan = tracing('image-base64-tostring')\n blurDataURL = blurDataURLSpan.traceFn(\n () =>\n `data:image/${extension};base64,${resizedImage.toString('base64')}`\n )\n }\n }\n return {\n dataURL: blurDataURL,\n width: blurWidth,\n height: blurHeight,\n }\n}\n"],"names":["getBlurImage","BLUR_IMG_SIZE","BLUR_QUALITY","VALID_BLUR_EXT","content","extension","imageSize","basePath","outputPath","isDev","tracing","traceFn","fn","args","traceAsyncFn","blurDataURL","blurWidth","blurHeight","includes","isAnimated","width","height","Math","max","round","prefix","url","URL","searchParams","set","String","href","slice","length","resizeImageSpan","resizedImage","optimizeImage","buffer","contentType","quality","blurDataURLSpan","toString","dataURL"],"mappings":";;;;+BAOsBA;;;eAAAA;;;mEAPC;gCACO;;;;;;AAE9B,MAAMC,gBAAgB;AACtB,MAAMC,eAAe;AACrB,MAAMC,iBAAiB;IAAC;IAAQ;IAAO;IAAQ;CAAO,CAAC,4BAA4B;;AAE5E,eAAeH,aACpBI,OAAe,EACfC,SAAiB,EACjBC,SAA4C,EAC5C,EACEC,QAAQ,EACRC,UAAU,EACVC,KAAK,EACLC,UAAU,IAAO,CAAA;QACfC,SACE,CAACC,KACD,CAAC,GAAGC,OACFD,MAAMC;QACVC,cACE,CAACF,KACD,CAAC,GAAGC,OACFD,MAAMC;IACZ,CAAA,CAAE,EASH;IAED,IAAIE;IACJ,IAAIC,YAAoB;IACxB,IAAIC,aAAqB;IAEzB,IAAId,eAAee,QAAQ,CAACb,cAAc,CAACc,IAAAA,mBAAU,EAACf,UAAU;QAC9D,uCAAuC;QACvC,IAAIE,UAAUc,KAAK,IAAId,UAAUe,MAAM,EAAE;YACvCL,YAAYf;YACZgB,aAAaK,KAAKC,GAAG,CACnBD,KAAKE,KAAK,CAAC,AAAClB,UAAUe,MAAM,GAAGf,UAAUc,KAAK,GAAInB,gBAClD;QAEJ,OAAO;YACLe,YAAYM,KAAKC,GAAG,CAClBD,KAAKE,KAAK,CAAC,AAAClB,UAAUc,KAAK,GAAGd,UAAUe,MAAM,GAAIpB,gBAClD;YAEFgB,aAAahB;QACf;QAEA,IAAIQ,OAAO;YACT,8EAA8E;YAC9E,qEAAqE;YACrE,uEAAuE;YACvE,MAAMgB,SAAS;YACf,MAAMC,MAAM,IAAIC,IAAI,GAAGpB,YAAY,GAAG,YAAY,CAAC,EAAEkB;YACrDC,IAAIE,YAAY,CAACC,GAAG,CAAC,OAAOrB;YAC5BkB,IAAIE,YAAY,CAACC,GAAG,CAAC,KAAKC,OAAOd;YACjCU,IAAIE,YAAY,CAACC,GAAG,CAAC,KAAKC,OAAO5B;YACjCa,cAAcW,IAAIK,IAAI,CAACC,KAAK,CAACP,OAAOQ,MAAM;QAC5C,OAAO;YACL,MAAMC,kBAAkBxB,QAAQ;YAChC,MAAMyB,eAAe,MAAMD,gBAAgBpB,YAAY,CAAC,IACtDsB,IAAAA,6BAAa,EAAC;oBACZC,QAAQjC;oBACRgB,OAAOJ;oBACPK,QAAQJ;oBACRqB,aAAa,CAAC,MAAM,EAAEjC,WAAW;oBACjCkC,SAASrC;gBACX;YAEF,MAAMsC,kBAAkB9B,QAAQ;YAChCK,cAAcyB,gBAAgB7B,OAAO,CACnC,IACE,CAAC,WAAW,EAAEN,UAAU,QAAQ,EAAE8B,aAAaM,QAAQ,CAAC,WAAW;QAEzE;IACF;IACA,OAAO;QACLC,SAAS3B;QACTK,OAAOJ;QACPK,QAAQJ;IACV;AACF","ignoreList":[0]}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
declare function nextImageLoader(this: any, content: Buffer): any;
|
||||
export declare const raw = true;
|
||||
export default nextImageLoader;
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
default: null,
|
||||
raw: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
default: function() {
|
||||
return _default;
|
||||
},
|
||||
raw: function() {
|
||||
return raw;
|
||||
}
|
||||
});
|
||||
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
||||
const _loaderutils3 = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/loader-utils3"));
|
||||
const _imageoptimizer = require("../../../../server/image-optimizer");
|
||||
const _blur = require("./blur");
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
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 = _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).catch((err)=>err));
|
||||
if (imageSize instanceof Error) {
|
||||
const err = imageSize;
|
||||
err.name = 'InvalidImageFormatError';
|
||||
throw err;
|
||||
}
|
||||
const { dataURL: blurDataURL, width: blurWidth, height: blurHeight } = await (0, _blur.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.default.join('..', isDev || compilerType === 'edge-server' ? '' : '..', interpolatedName), content, null);
|
||||
}
|
||||
return `export default ${stringifiedData};`;
|
||||
});
|
||||
}
|
||||
const raw = true;
|
||||
const _default = nextImageLoader;
|
||||
|
||||
//# sourceMappingURL=index.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../../../src/build/webpack/loaders/next-image-loader/index.ts"],"sourcesContent":["import type { CompilerNameValues } from '../../../../shared/lib/constants'\n\nimport path from 'path'\nimport loaderUtils from 'next/dist/compiled/loader-utils3'\nimport { getImageSize } from '../../../../server/image-optimizer'\nimport { getBlurImage } from './blur'\n\ninterface Options {\n compilerType: CompilerNameValues\n isDev: boolean\n assetPrefix: string\n basePath: string\n}\n\nfunction nextImageLoader(this: any, content: Buffer) {\n const imageLoaderSpan = this.currentTraceSpan.traceChild('next-image-loader')\n return imageLoaderSpan.traceAsyncFn(async () => {\n const options: Options = this.getOptions()\n const { compilerType, isDev, assetPrefix, basePath } = options\n const context = this.rootContext\n\n const opts = { context, content }\n const interpolatedName = loaderUtils.interpolateName(\n this,\n '/static/media/[name].[hash:8].[ext]',\n opts\n )\n const outputPath = assetPrefix + '/_next' + interpolatedName\n let extension = loaderUtils.interpolateName(this, '[ext]', opts)\n if (extension === 'jpg') {\n extension = 'jpeg'\n }\n\n const imageSizeSpan = imageLoaderSpan.traceChild('image-size-calculation')\n const imageSize = await imageSizeSpan.traceAsyncFn(() =>\n getImageSize(content).catch((err) => err)\n )\n\n if (imageSize instanceof Error) {\n const err = imageSize\n err.name = 'InvalidImageFormatError'\n throw err\n }\n\n const {\n dataURL: blurDataURL,\n width: blurWidth,\n height: blurHeight,\n } = await getBlurImage(content, extension, imageSize, {\n basePath,\n outputPath,\n isDev,\n tracing: imageLoaderSpan.traceChild.bind(imageLoaderSpan),\n })\n\n const stringifiedData = imageLoaderSpan\n .traceChild('image-data-stringify')\n .traceFn(() =>\n JSON.stringify({\n src: outputPath,\n height: imageSize.height,\n width: imageSize.width,\n blurDataURL,\n blurWidth,\n blurHeight,\n })\n )\n\n if (compilerType === 'client') {\n this.emitFile(interpolatedName, content, null)\n } else {\n this.emitFile(\n path.join(\n '..',\n isDev || compilerType === 'edge-server' ? '' : '..',\n interpolatedName\n ),\n content,\n null\n )\n }\n\n return `export default ${stringifiedData};`\n })\n}\nexport const raw = true\nexport default nextImageLoader\n"],"names":["raw","nextImageLoader","content","imageLoaderSpan","currentTraceSpan","traceChild","traceAsyncFn","options","getOptions","compilerType","isDev","assetPrefix","basePath","context","rootContext","opts","interpolatedName","loaderUtils","interpolateName","outputPath","extension","imageSizeSpan","imageSize","getImageSize","catch","err","Error","name","dataURL","blurDataURL","width","blurWidth","height","blurHeight","getBlurImage","tracing","bind","stringifiedData","traceFn","JSON","stringify","src","emitFile","path","join"],"mappings":";;;;;;;;;;;;;;;IAsFA,OAA8B;eAA9B;;IADaA,GAAG;eAAHA;;;6DAnFI;qEACO;gCACK;sBACA;;;;;;AAS7B,SAASC,gBAA2BC,OAAe;IACjD,MAAMC,kBAAkB,IAAI,CAACC,gBAAgB,CAACC,UAAU,CAAC;IACzD,OAAOF,gBAAgBG,YAAY,CAAC;QAClC,MAAMC,UAAmB,IAAI,CAACC,UAAU;QACxC,MAAM,EAAEC,YAAY,EAAEC,KAAK,EAAEC,WAAW,EAAEC,QAAQ,EAAE,GAAGL;QACvD,MAAMM,UAAU,IAAI,CAACC,WAAW;QAEhC,MAAMC,OAAO;YAAEF;YAASX;QAAQ;QAChC,MAAMc,mBAAmBC,qBAAW,CAACC,eAAe,CAClD,IAAI,EACJ,uCACAH;QAEF,MAAMI,aAAaR,cAAc,WAAWK;QAC5C,IAAII,YAAYH,qBAAW,CAACC,eAAe,CAAC,IAAI,EAAE,SAASH;QAC3D,IAAIK,cAAc,OAAO;YACvBA,YAAY;QACd;QAEA,MAAMC,gBAAgBlB,gBAAgBE,UAAU,CAAC;QACjD,MAAMiB,YAAY,MAAMD,cAAcf,YAAY,CAAC,IACjDiB,IAAAA,4BAAY,EAACrB,SAASsB,KAAK,CAAC,CAACC,MAAQA;QAGvC,IAAIH,qBAAqBI,OAAO;YAC9B,MAAMD,MAAMH;YACZG,IAAIE,IAAI,GAAG;YACX,MAAMF;QACR;QAEA,MAAM,EACJG,SAASC,WAAW,EACpBC,OAAOC,SAAS,EAChBC,QAAQC,UAAU,EACnB,GAAG,MAAMC,IAAAA,kBAAY,EAAChC,SAASkB,WAAWE,WAAW;YACpDV;YACAO;YACAT;YACAyB,SAAShC,gBAAgBE,UAAU,CAAC+B,IAAI,CAACjC;QAC3C;QAEA,MAAMkC,kBAAkBlC,gBACrBE,UAAU,CAAC,wBACXiC,OAAO,CAAC,IACPC,KAAKC,SAAS,CAAC;gBACbC,KAAKtB;gBACLa,QAAQV,UAAUU,MAAM;gBACxBF,OAAOR,UAAUQ,KAAK;gBACtBD;gBACAE;gBACAE;YACF;QAGJ,IAAIxB,iBAAiB,UAAU;YAC7B,IAAI,CAACiC,QAAQ,CAAC1B,kBAAkBd,SAAS;QAC3C,OAAO;YACL,IAAI,CAACwC,QAAQ,CACXC,aAAI,CAACC,IAAI,CACP,MACAlC,SAASD,iBAAiB,gBAAgB,KAAK,MAC/CO,mBAEFd,SACA;QAEJ;QAEA,OAAO,CAAC,eAAe,EAAEmC,gBAAgB,CAAC,CAAC;IAC7C;AACF;AACO,MAAMrC,MAAM;MACnB,WAAeC","ignoreList":[0]}
|
||||
Reference in New Issue
Block a user