UNPKG

next

Version:

The React Framework

83 lines (82 loc) 4.75 kB
import { findClosestQuality } from './find-closest-quality'; import { getDeploymentId } from './deployment-id'; function defaultLoader({ config, src, width, quality }) { if (src.startsWith('/') && src.includes('?') && config.localPatterns?.length === 1 && config.localPatterns[0].pathname === '**' && config.localPatterns[0].search === '') { throw Object.defineProperty(new Error(`Image with src "${src}" is using a query string which is not configured in images.localPatterns.` + `\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`), "__NEXT_ERROR_CODE", { value: "E871", enumerable: false, configurable: true }); } if (process.env.NODE_ENV !== 'production') { const missingValues = []; // these should always be provided but make sure they are if (!src) missingValues.push('src'); if (!width) missingValues.push('width'); if (missingValues.length > 0) { throw Object.defineProperty(new Error(`Next Image Optimization requires ${missingValues.join(', ')} to be provided. Make sure you pass them as props to the \`next/image\` component. Received: ${JSON.stringify({ src, width, quality })}`), "__NEXT_ERROR_CODE", { value: "E188", enumerable: false, configurable: true }); } if (src.startsWith('//')) { throw Object.defineProperty(new Error(`Failed to parse src "${src}" on \`next/image\`, protocol-relative URL (//) must be changed to an absolute URL (http:// or https://)`), "__NEXT_ERROR_CODE", { value: "E360", enumerable: false, configurable: true }); } if (src.startsWith('/') && config.localPatterns) { if (process.env.NODE_ENV !== 'test' && // micromatch isn't compatible with edge runtime process.env.NEXT_RUNTIME !== 'edge') { // We use dynamic require because this should only error in development const { hasLocalMatch } = require('./match-local-pattern'); if (!hasLocalMatch(config.localPatterns, src)) { throw Object.defineProperty(new Error(`Invalid src prop (${src}) on \`next/image\` does not match \`images.localPatterns\` configured in your \`next.config.js\`\n` + `See more info: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`), "__NEXT_ERROR_CODE", { value: "E426", enumerable: false, configurable: true }); } } } if (!src.startsWith('/') && (config.domains || config.remotePatterns)) { let parsedSrc; try { parsedSrc = new URL(src); } catch (err) { console.error(err); throw Object.defineProperty(new Error(`Failed to parse src "${src}" on \`next/image\`, if using relative image it must start with a leading slash "/" or be an absolute URL (http:// or https://)`), "__NEXT_ERROR_CODE", { value: "E63", enumerable: false, configurable: true }); } if (process.env.NODE_ENV !== 'test' && // micromatch isn't compatible with edge runtime process.env.NEXT_RUNTIME !== 'edge') { // We use dynamic require because this should only error in development const { hasRemoteMatch } = require('./match-remote-pattern'); if (!hasRemoteMatch(config.domains, config.remotePatterns, parsedSrc)) { throw Object.defineProperty(new Error(`Invalid src prop (${src}) on \`next/image\`, hostname "${parsedSrc.hostname}" is not configured under images in your \`next.config.js\`\n` + `See more info: https://nextjs.org/docs/messages/next-image-unconfigured-host`), "__NEXT_ERROR_CODE", { value: "E231", enumerable: false, configurable: true }); } } } } const q = findClosestQuality(quality, config); let deploymentId = getDeploymentId(); return `${config.path}?url=${encodeURIComponent(src)}&w=${width}&q=${q}${src.startsWith('/') && deploymentId ? `&dpl=${deploymentId}` : ''}`; } // We use this to determine if the import is the default loader // or a custom loader defined by the user in next.config.js defaultLoader.__next_img_default = true; export default defaultLoader; //# sourceMappingURL=image-loader.js.map