next 15.2.2-canary.6 → 15.2.2-canary.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of next might be problematic. Click here for more details.
- package/dist/bin/next +1 -1
- package/dist/build/handle-entrypoints.d.ts +3 -23
- package/dist/build/handle-entrypoints.js +36 -149
- package/dist/build/handle-entrypoints.js.map +1 -1
- package/dist/build/index.js +2 -2
- package/dist/build/swc/generated-native.d.ts +4 -0
- package/dist/build/swc/index.js +77 -68
- package/dist/build/swc/index.js.map +1 -1
- package/dist/build/swc/types.d.ts +1 -0
- package/dist/build/turbopack-build/impl.js +33 -160
- package/dist/build/turbopack-build/impl.js.map +1 -1
- package/dist/build/webpack-config.js +2 -2
- package/dist/client/app-bootstrap.js +1 -1
- package/dist/client/components/react-dev-overlay/ui/components/errors/dev-tools-indicator/next-logo.js +3 -5
- package/dist/client/components/react-dev-overlay/ui/components/errors/dev-tools-indicator/next-logo.js.map +1 -1
- package/dist/client/components/react-dev-overlay/ui/components/errors/error-overlay-layout/error-overlay-layout.d.ts +1 -1
- package/dist/client/components/react-dev-overlay/ui/components/errors/error-overlay-nav/error-overlay-nav.d.ts +1 -1
- package/dist/client/components/react-dev-overlay/ui/components/errors/error-overlay-nav/error-overlay-nav.js +1 -1
- package/dist/client/components/react-dev-overlay/ui/components/errors/error-overlay-nav/error-overlay-nav.js.map +1 -1
- package/dist/client/components/react-dev-overlay/ui/styles/base.js +1 -1
- package/dist/client/components/react-dev-overlay/ui/styles/base.js.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/compiled/next-server/app-page-experimental.runtime.dev.js +2 -2
- package/dist/compiled/next-server/app-page-experimental.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/app-page.runtime.dev.js +2 -2
- package/dist/compiled/next-server/app-page.runtime.dev.js.map +1 -1
- package/dist/esm/build/handle-entrypoints.js +31 -140
- package/dist/esm/build/handle-entrypoints.js.map +1 -1
- package/dist/esm/build/index.js +2 -2
- package/dist/esm/build/swc/generated-native.d.ts +4 -0
- package/dist/esm/build/swc/index.js +77 -68
- package/dist/esm/build/swc/index.js.map +1 -1
- package/dist/esm/build/swc/types.js.map +1 -1
- package/dist/esm/build/turbopack-build/impl.js +34 -120
- package/dist/esm/build/turbopack-build/impl.js.map +1 -1
- package/dist/esm/build/webpack-config.js +2 -2
- package/dist/esm/client/app-bootstrap.js +1 -1
- package/dist/esm/client/components/react-dev-overlay/ui/components/errors/dev-tools-indicator/next-logo.js +3 -5
- package/dist/esm/client/components/react-dev-overlay/ui/components/errors/dev-tools-indicator/next-logo.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/ui/components/errors/error-overlay-nav/error-overlay-nav.js +1 -1
- package/dist/esm/client/components/react-dev-overlay/ui/components/errors/error-overlay-nav/error-overlay-nav.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/ui/styles/base.js +1 -1
- package/dist/esm/client/components/react-dev-overlay/ui/styles/base.js.map +1 -1
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/esm/server/lib/app-info-log.js +1 -1
- package/dist/esm/server/lib/start-server.js +1 -1
- package/dist/esm/shared/lib/canary-only.js +1 -1
- package/dist/esm/shared/lib/get-img-props.js +11 -1
- package/dist/esm/shared/lib/get-img-props.js.map +1 -1
- package/dist/esm/shared/lib/turbopack/manifest-loader.js +24 -14
- package/dist/esm/shared/lib/turbopack/manifest-loader.js.map +1 -1
- package/dist/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/server/lib/app-info-log.js +1 -1
- package/dist/server/lib/start-server.js +1 -1
- package/dist/shared/lib/canary-only.js +1 -1
- package/dist/shared/lib/get-img-props.d.ts +2 -1
- package/dist/shared/lib/get-img-props.js +11 -1
- package/dist/shared/lib/get-img-props.js.map +1 -1
- package/dist/shared/lib/turbopack/manifest-loader.d.ts +4 -1
- package/dist/shared/lib/turbopack/manifest-loader.js +24 -14
- package/dist/shared/lib/turbopack/manifest-loader.js.map +1 -1
- package/dist/telemetry/anonymous-meta.js +1 -1
- package/dist/telemetry/events/build.d.ts +2 -1
- package/dist/telemetry/events/build.js +2 -1
- package/dist/telemetry/events/build.js.map +1 -1
- package/dist/telemetry/events/session-stopped.d.ts +2 -1
- package/dist/telemetry/events/session-stopped.js +4 -3
- package/dist/telemetry/events/session-stopped.js.map +1 -1
- package/dist/telemetry/events/version.d.ts +2 -1
- package/dist/telemetry/events/version.js +3 -2
- package/dist/telemetry/events/version.js.map +1 -1
- package/package.json +15 -15
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/shared/lib/get-img-props.ts"],"sourcesContent":["import { warnOnce } from './utils/warn-once'\nimport { getImageBlurSvg } from './image-blur-svg'\nimport { imageConfigDefault } from './image-config'\nimport type {\n ImageConfigComplete,\n ImageLoaderProps,\n ImageLoaderPropsWithConfig,\n} from './image-config'\n\nimport type { JSX } from 'react'\n\nexport interface StaticImageData {\n src: string\n height: number\n width: number\n blurDataURL?: string\n blurWidth?: number\n blurHeight?: number\n}\n\nexport interface StaticRequire {\n default: StaticImageData\n}\n\nexport type StaticImport = StaticRequire | StaticImageData\n\nexport type ImageProps = Omit<\n JSX.IntrinsicElements['img'],\n 'src' | 'srcSet' | 'ref' | 'alt' | 'width' | 'height' | 'loading'\n> & {\n src: string | StaticImport\n alt: string\n width?: number | `${number}`\n height?: number | `${number}`\n fill?: boolean\n loader?: ImageLoader\n quality?: number | `${number}`\n priority?: boolean\n loading?: LoadingValue\n placeholder?: PlaceholderValue\n blurDataURL?: string\n unoptimized?: boolean\n overrideSrc?: string\n /**\n * @deprecated Use `onLoad` instead.\n * @see https://nextjs.org/docs/app/api-reference/components/image#onload\n */\n onLoadingComplete?: OnLoadingComplete\n /**\n * @deprecated Use `fill` prop instead of `layout=\"fill\"` or change import to `next/legacy/image`.\n * @see https://nextjs.org/docs/api-reference/next/legacy/image\n */\n layout?: string\n /**\n * @deprecated Use `style` prop instead.\n */\n objectFit?: string\n /**\n * @deprecated Use `style` prop instead.\n */\n objectPosition?: string\n /**\n * @deprecated This prop does not do anything.\n */\n lazyBoundary?: string\n /**\n * @deprecated This prop does not do anything.\n */\n lazyRoot?: string\n}\n\nexport type ImgProps = Omit<ImageProps, 'src' | 'loader'> & {\n loading: LoadingValue\n width: number | undefined\n height: number | undefined\n style: NonNullable<JSX.IntrinsicElements['img']['style']>\n sizes: string | undefined\n srcSet: string | undefined\n src: string\n}\n\nconst VALID_LOADING_VALUES = ['lazy', 'eager', undefined] as const\ntype LoadingValue = (typeof VALID_LOADING_VALUES)[number]\ntype ImageConfig = ImageConfigComplete & {\n allSizes: number[]\n output?: 'standalone' | 'export'\n}\n\nexport type ImageLoader = (p: ImageLoaderProps) => string\n\n// Do not export - this is an internal type only\n// because `next.config.js` is only meant for the\n// built-in loaders, not for a custom loader() prop.\ntype ImageLoaderWithConfig = (p: ImageLoaderPropsWithConfig) => string\n\nexport type PlaceholderValue = 'blur' | 'empty' | `data:image/${string}`\nexport type OnLoad = React.ReactEventHandler<HTMLImageElement> | undefined\nexport type OnLoadingComplete = (img: HTMLImageElement) => void\n\nfunction isStaticRequire(\n src: StaticRequire | StaticImageData\n): src is StaticRequire {\n return (src as StaticRequire).default !== undefined\n}\n\nfunction isStaticImageData(\n src: StaticRequire | StaticImageData\n): src is StaticImageData {\n return (src as StaticImageData).src !== undefined\n}\n\nfunction isStaticImport(src: string | StaticImport): src is StaticImport {\n return (\n !!src &&\n typeof src === 'object' &&\n (isStaticRequire(src as StaticImport) ||\n isStaticImageData(src as StaticImport))\n )\n}\n\nconst allImgs = new Map<\n string,\n { src: string; priority: boolean; placeholder: PlaceholderValue }\n>()\nlet perfObserver: PerformanceObserver | undefined\n\nfunction getInt(x: unknown): number | undefined {\n if (typeof x === 'undefined') {\n return x\n }\n if (typeof x === 'number') {\n return Number.isFinite(x) ? x : NaN\n }\n if (typeof x === 'string' && /^[0-9]+$/.test(x)) {\n return parseInt(x, 10)\n }\n return NaN\n}\n\nfunction getWidths(\n { deviceSizes, allSizes }: ImageConfig,\n width: number | undefined,\n sizes: string | undefined\n): { widths: number[]; kind: 'w' | 'x' } {\n if (sizes) {\n // Find all the \"vw\" percent sizes used in the sizes prop\n const viewportWidthRe = /(^|\\s)(1?\\d?\\d)vw/g\n const percentSizes = []\n for (let match; (match = viewportWidthRe.exec(sizes)); match) {\n percentSizes.push(parseInt(match[2]))\n }\n if (percentSizes.length) {\n const smallestRatio = Math.min(...percentSizes) * 0.01\n return {\n widths: allSizes.filter((s) => s >= deviceSizes[0] * smallestRatio),\n kind: 'w',\n }\n }\n return { widths: allSizes, kind: 'w' }\n }\n if (typeof width !== 'number') {\n return { widths: deviceSizes, kind: 'w' }\n }\n\n const widths = [\n ...new Set(\n // > This means that most OLED screens that say they are 3x resolution,\n // > are actually 3x in the green color, but only 1.5x in the red and\n // > blue colors. Showing a 3x resolution image in the app vs a 2x\n // > resolution image will be visually the same, though the 3x image\n // > takes significantly more data. Even true 3x resolution screens are\n // > wasteful as the human eye cannot see that level of detail without\n // > something like a magnifying glass.\n // https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices.html\n [width, width * 2 /*, width * 3*/].map(\n (w) => allSizes.find((p) => p >= w) || allSizes[allSizes.length - 1]\n )\n ),\n ]\n return { widths, kind: 'x' }\n}\n\ntype GenImgAttrsData = {\n config: ImageConfig\n src: string\n unoptimized: boolean\n loader: ImageLoaderWithConfig\n width?: number\n quality?: number\n sizes?: string\n}\n\ntype GenImgAttrsResult = {\n src: string\n srcSet: string | undefined\n sizes: string | undefined\n}\n\nfunction generateImgAttrs({\n config,\n src,\n unoptimized,\n width,\n quality,\n sizes,\n loader,\n}: GenImgAttrsData): GenImgAttrsResult {\n if (unoptimized) {\n return { src, srcSet: undefined, sizes: undefined }\n }\n\n const { widths, kind } = getWidths(config, width, sizes)\n const last = widths.length - 1\n\n return {\n sizes: !sizes && kind === 'w' ? '100vw' : sizes,\n srcSet: widths\n .map(\n (w, i) =>\n `${loader({ config, src, quality, width: w })} ${\n kind === 'w' ? w : i + 1\n }${kind}`\n )\n .join(', '),\n\n // It's intended to keep `src` the last attribute because React updates\n // attributes in order. If we keep `src` the first one, Safari will\n // immediately start to fetch `src`, before `sizes` and `srcSet` are even\n // updated by React. That causes multiple unnecessary requests if `srcSet`\n // and `sizes` are defined.\n // This bug cannot be reproduced in Chrome or Firefox.\n src: loader({ config, src, quality, width: widths[last] }),\n }\n}\n\n/**\n * A shared function, used on both client and server, to generate the props for <img>.\n */\nexport function getImgProps(\n {\n src,\n sizes,\n unoptimized = false,\n priority = false,\n loading,\n className,\n quality,\n width,\n height,\n fill = false,\n style,\n overrideSrc,\n onLoad,\n onLoadingComplete,\n placeholder = 'empty',\n blurDataURL,\n fetchPriority,\n decoding = 'async',\n layout,\n objectFit,\n objectPosition,\n lazyBoundary,\n lazyRoot,\n ...rest\n }: ImageProps,\n _state: {\n defaultLoader: ImageLoaderWithConfig\n imgConf: ImageConfigComplete\n showAltText?: boolean\n blurComplete?: boolean\n }\n): {\n props: ImgProps\n meta: {\n unoptimized: boolean\n priority: boolean\n placeholder: NonNullable<ImageProps['placeholder']>\n fill: boolean\n }\n} {\n const { imgConf, showAltText, blurComplete, defaultLoader } = _state\n let config: ImageConfig\n let c = imgConf || imageConfigDefault\n if ('allSizes' in c) {\n config = c as ImageConfig\n } else {\n const allSizes = [...c.deviceSizes, ...c.imageSizes].sort((a, b) => a - b)\n const deviceSizes = c.deviceSizes.sort((a, b) => a - b)\n const qualities = c.qualities?.sort((a, b) => a - b)\n config = { ...c, allSizes, deviceSizes, qualities }\n }\n\n if (typeof defaultLoader === 'undefined') {\n throw new Error(\n 'images.loaderFile detected but the file is missing default export.\\nRead more: https://nextjs.org/docs/messages/invalid-images-config'\n )\n }\n let loader: ImageLoaderWithConfig = rest.loader || defaultLoader\n\n // Remove property so it's not spread on <img> element\n delete rest.loader\n delete (rest as any).srcSet\n\n // This special value indicates that the user\n // didn't define a \"loader\" prop or \"loader\" config.\n const isDefaultLoader = '__next_img_default' in loader\n\n if (isDefaultLoader) {\n if (config.loader === 'custom') {\n throw new Error(\n `Image with src \"${src}\" is missing \"loader\" prop.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader`\n )\n }\n } else {\n // The user defined a \"loader\" prop or config.\n // Since the config object is internal only, we\n // must not pass it to the user-defined \"loader\".\n const customImageLoader = loader as ImageLoader\n loader = (obj) => {\n const { config: _, ...opts } = obj\n return customImageLoader(opts)\n }\n }\n\n if (layout) {\n if (layout === 'fill') {\n fill = true\n }\n const layoutToStyle: Record<string, Record<string, string> | undefined> = {\n intrinsic: { maxWidth: '100%', height: 'auto' },\n responsive: { width: '100%', height: 'auto' },\n }\n const layoutToSizes: Record<string, string | undefined> = {\n responsive: '100vw',\n fill: '100vw',\n }\n const layoutStyle = layoutToStyle[layout]\n if (layoutStyle) {\n style = { ...style, ...layoutStyle }\n }\n const layoutSizes = layoutToSizes[layout]\n if (layoutSizes && !sizes) {\n sizes = layoutSizes\n }\n }\n\n let staticSrc = ''\n let widthInt = getInt(width)\n let heightInt = getInt(height)\n let blurWidth: number | undefined\n let blurHeight: number | undefined\n if (isStaticImport(src)) {\n const staticImageData = isStaticRequire(src) ? src.default : src\n\n if (!staticImageData.src) {\n throw new Error(\n `An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(\n staticImageData\n )}`\n )\n }\n if (!staticImageData.height || !staticImageData.width) {\n throw new Error(\n `An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(\n staticImageData\n )}`\n )\n }\n\n blurWidth = staticImageData.blurWidth\n blurHeight = staticImageData.blurHeight\n blurDataURL = blurDataURL || staticImageData.blurDataURL\n staticSrc = staticImageData.src\n\n if (!fill) {\n if (!widthInt && !heightInt) {\n widthInt = staticImageData.width\n heightInt = staticImageData.height\n } else if (widthInt && !heightInt) {\n const ratio = widthInt / staticImageData.width\n heightInt = Math.round(staticImageData.height * ratio)\n } else if (!widthInt && heightInt) {\n const ratio = heightInt / staticImageData.height\n widthInt = Math.round(staticImageData.width * ratio)\n }\n }\n }\n src = typeof src === 'string' ? src : staticSrc\n\n let isLazy =\n !priority && (loading === 'lazy' || typeof loading === 'undefined')\n if (!src || src.startsWith('data:') || src.startsWith('blob:')) {\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n unoptimized = true\n isLazy = false\n }\n if (config.unoptimized) {\n unoptimized = true\n }\n if (\n isDefaultLoader &&\n !config.dangerouslyAllowSVG &&\n src.split('?', 1)[0].endsWith('.svg')\n ) {\n // Special case to make svg serve as-is to avoid proxying\n // through the built-in Image Optimization API.\n unoptimized = true\n }\n\n const qualityInt = getInt(quality)\n\n if (process.env.NODE_ENV !== 'production') {\n if (config.output === 'export' && isDefaultLoader && !unoptimized) {\n throw new Error(\n `Image Optimization using the default loader is not compatible with \\`{ output: 'export' }\\`.\n Possible solutions:\n - Remove \\`{ output: 'export' }\\` and run \"next start\" to run server mode including the Image Optimization API.\n - Configure \\`{ images: { unoptimized: true } }\\` in \\`next.config.js\\` to disable the Image Optimization API.\n Read more: https://nextjs.org/docs/messages/export-image-api`\n )\n }\n if (!src) {\n // React doesn't show the stack trace and there's\n // no `src` to help identify which image, so we\n // instead console.error(ref) during mount.\n unoptimized = true\n } else {\n if (fill) {\n if (width) {\n throw new Error(\n `Image with src \"${src}\" has both \"width\" and \"fill\" properties. Only one should be used.`\n )\n }\n if (height) {\n throw new Error(\n `Image with src \"${src}\" has both \"height\" and \"fill\" properties. Only one should be used.`\n )\n }\n if (style?.position && style.position !== 'absolute') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.position\" properties. Images with \"fill\" always use position absolute - it cannot be modified.`\n )\n }\n if (style?.width && style.width !== '100%') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.width\" properties. Images with \"fill\" always use width 100% - it cannot be modified.`\n )\n }\n if (style?.height && style.height !== '100%') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.height\" properties. Images with \"fill\" always use height 100% - it cannot be modified.`\n )\n }\n } else {\n if (typeof widthInt === 'undefined') {\n throw new Error(\n `Image with src \"${src}\" is missing required \"width\" property.`\n )\n } else if (isNaN(widthInt)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"width\" property. Expected a numeric value in pixels but received \"${width}\".`\n )\n }\n if (typeof heightInt === 'undefined') {\n throw new Error(\n `Image with src \"${src}\" is missing required \"height\" property.`\n )\n } else if (isNaN(heightInt)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"height\" property. Expected a numeric value in pixels but received \"${height}\".`\n )\n }\n // eslint-disable-next-line no-control-regex\n if (/^[\\x00-\\x20]/.test(src)) {\n throw new Error(\n `Image with src \"${src}\" cannot start with a space or control character. Use src.trimStart() to remove it or encodeURIComponent(src) to keep it.`\n )\n }\n // eslint-disable-next-line no-control-regex\n if (/[\\x00-\\x20]$/.test(src)) {\n throw new Error(\n `Image with src \"${src}\" cannot end with a space or control character. Use src.trimEnd() to remove it or encodeURIComponent(src) to keep it.`\n )\n }\n }\n }\n if (!VALID_LOADING_VALUES.includes(loading)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"loading\" property. Provided \"${loading}\" should be one of ${VALID_LOADING_VALUES.map(\n String\n ).join(',')}.`\n )\n }\n if (priority && loading === 'lazy') {\n throw new Error(\n `Image with src \"${src}\" has both \"priority\" and \"loading='lazy'\" properties. Only one should be used.`\n )\n }\n if (\n placeholder !== 'empty' &&\n placeholder !== 'blur' &&\n !placeholder.startsWith('data:image/')\n ) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"placeholder\" property \"${placeholder}\".`\n )\n }\n if (placeholder !== 'empty') {\n if (widthInt && heightInt && widthInt * heightInt < 1600) {\n warnOnce(\n `Image with src \"${src}\" is smaller than 40x40. Consider removing the \"placeholder\" property to improve performance.`\n )\n }\n }\n if (placeholder === 'blur' && !blurDataURL) {\n const VALID_BLUR_EXT = ['jpeg', 'png', 'webp', 'avif'] // should match next-image-loader\n\n throw new Error(\n `Image with src \"${src}\" has \"placeholder='blur'\" property but is missing the \"blurDataURL\" property.\n Possible solutions:\n - Add a \"blurDataURL\" property, the contents should be a small Data URL to represent the image\n - Change the \"src\" property to a static import with one of the supported file types: ${VALID_BLUR_EXT.join(\n ','\n )} (animated images not supported)\n - Remove the \"placeholder\" property, effectively no blur effect\n Read more: https://nextjs.org/docs/messages/placeholder-blur-data-url`\n )\n }\n if ('ref' in rest) {\n warnOnce(\n `Image with src \"${src}\" is using unsupported \"ref\" property. Consider using the \"onLoad\" property instead.`\n )\n }\n\n if (!unoptimized && !isDefaultLoader) {\n const urlStr = loader({\n config,\n src,\n width: widthInt || 400,\n quality: qualityInt || 75,\n })\n let url: URL | undefined\n try {\n url = new URL(urlStr)\n } catch (err) {}\n if (urlStr === src || (url && url.pathname === src && !url.search)) {\n warnOnce(\n `Image with src \"${src}\" has a \"loader\" property that does not implement width. Please implement it or use the \"unoptimized\" property instead.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader-width`\n )\n }\n }\n\n if (onLoadingComplete) {\n warnOnce(\n `Image with src \"${src}\" is using deprecated \"onLoadingComplete\" property. Please use the \"onLoad\" property instead.`\n )\n }\n\n for (const [legacyKey, legacyValue] of Object.entries({\n layout,\n objectFit,\n objectPosition,\n lazyBoundary,\n lazyRoot,\n })) {\n if (legacyValue) {\n warnOnce(\n `Image with src \"${src}\" has legacy prop \"${legacyKey}\". Did you forget to run the codemod?` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-upgrade-to-13`\n )\n }\n }\n\n if (\n typeof window !== 'undefined' &&\n !perfObserver &&\n window.PerformanceObserver\n ) {\n perfObserver = new PerformanceObserver((entryList) => {\n for (const entry of entryList.getEntries()) {\n // @ts-ignore - missing \"LargestContentfulPaint\" class with \"element\" prop\n const imgSrc = entry?.element?.src || ''\n const lcpImage = allImgs.get(imgSrc)\n if (\n lcpImage &&\n !lcpImage.priority &&\n lcpImage.placeholder === 'empty' &&\n !lcpImage.src.startsWith('data:') &&\n !lcpImage.src.startsWith('blob:')\n ) {\n // https://web.dev/lcp/#measure-lcp-in-javascript\n warnOnce(\n `Image with src \"${lcpImage.src}\" was detected as the Largest Contentful Paint (LCP). Please add the \"priority\" property if this image is above the fold.` +\n `\\nRead more: https://nextjs.org/docs/api-reference/next/image#priority`\n )\n }\n }\n })\n try {\n perfObserver.observe({\n type: 'largest-contentful-paint',\n buffered: true,\n })\n } catch (err) {\n // Log error but don't crash the app\n console.error(err)\n }\n }\n }\n const imgStyle = Object.assign(\n fill\n ? {\n position: 'absolute',\n height: '100%',\n width: '100%',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n objectFit,\n objectPosition,\n }\n : {},\n showAltText ? {} : { color: 'transparent' },\n style\n )\n\n const backgroundImage =\n !blurComplete && placeholder !== 'empty'\n ? placeholder === 'blur'\n ? `url(\"data:image/svg+xml;charset=utf-8,${getImageBlurSvg({\n widthInt,\n heightInt,\n blurWidth,\n blurHeight,\n blurDataURL: blurDataURL || '', // assume not undefined\n objectFit: imgStyle.objectFit,\n })}\")`\n : `url(\"${placeholder}\")` // assume `data:image/`\n : null\n\n let placeholderStyle = backgroundImage\n ? {\n backgroundSize: imgStyle.objectFit || 'cover',\n backgroundPosition: imgStyle.objectPosition || '50% 50%',\n backgroundRepeat: 'no-repeat',\n backgroundImage,\n }\n : {}\n\n if (process.env.NODE_ENV === 'development') {\n if (\n placeholderStyle.backgroundImage &&\n placeholder === 'blur' &&\n blurDataURL?.startsWith('/')\n ) {\n // During `next dev`, we don't want to generate blur placeholders with webpack\n // because it can delay starting the dev server. Instead, `next-image-loader.js`\n // will inline a special url to lazily generate the blur placeholder at request time.\n placeholderStyle.backgroundImage = `url(\"${blurDataURL}\")`\n }\n }\n\n const imgAttributes = generateImgAttrs({\n config,\n src,\n unoptimized,\n width: widthInt,\n quality: qualityInt,\n sizes,\n loader,\n })\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined') {\n let fullUrl: URL\n try {\n fullUrl = new URL(imgAttributes.src)\n } catch (e) {\n fullUrl = new URL(imgAttributes.src, window.location.href)\n }\n allImgs.set(fullUrl.href, { src, priority, placeholder })\n }\n }\n\n const props: ImgProps = {\n ...rest,\n loading: isLazy ? 'lazy' : loading,\n fetchPriority,\n width: widthInt,\n height: heightInt,\n decoding,\n className,\n style: { ...imgStyle, ...placeholderStyle },\n sizes: imgAttributes.sizes,\n srcSet: imgAttributes.srcSet,\n src: overrideSrc || imgAttributes.src,\n }\n const meta = { unoptimized, priority, placeholder, fill }\n return { props, meta }\n}\n"],"names":["getImgProps","VALID_LOADING_VALUES","undefined","isStaticRequire","src","default","isStaticImageData","isStaticImport","allImgs","Map","perfObserver","getInt","x","Number","isFinite","NaN","test","parseInt","getWidths","width","sizes","deviceSizes","allSizes","viewportWidthRe","percentSizes","match","exec","push","length","smallestRatio","Math","min","widths","filter","s","kind","Set","map","w","find","p","generateImgAttrs","config","unoptimized","quality","loader","srcSet","last","i","join","_state","priority","loading","className","height","fill","style","overrideSrc","onLoad","onLoadingComplete","placeholder","blurDataURL","fetchPriority","decoding","layout","objectFit","objectPosition","lazyBoundary","lazyRoot","rest","imgConf","showAltText","blurComplete","defaultLoader","c","imageConfigDefault","imageSizes","sort","a","b","qualities","Error","isDefaultLoader","customImageLoader","obj","_","opts","layoutToStyle","intrinsic","maxWidth","responsive","layoutToSizes","layoutStyle","layoutSizes","staticSrc","widthInt","heightInt","blurWidth","blurHeight","staticImageData","JSON","stringify","ratio","round","isLazy","startsWith","dangerouslyAllowSVG","split","endsWith","qualityInt","process","env","NODE_ENV","output","position","isNaN","includes","String","warnOnce","VALID_BLUR_EXT","urlStr","url","URL","err","pathname","search","legacyKey","legacyValue","Object","entries","window","PerformanceObserver","entryList","entry","getEntries","imgSrc","element","lcpImage","get","observe","type","buffered","console","error","imgStyle","assign","left","top","right","bottom","color","backgroundImage","getImageBlurSvg","placeholderStyle","backgroundSize","backgroundPosition","backgroundRepeat","imgAttributes","fullUrl","e","location","href","set","props","meta"],"mappings":"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"}
|
1
|
+
{"version":3,"sources":["../../../src/shared/lib/get-img-props.ts"],"sourcesContent":["import { warnOnce } from './utils/warn-once'\nimport { getImageBlurSvg } from './image-blur-svg'\nimport { imageConfigDefault } from './image-config'\nimport type {\n ImageConfigComplete,\n ImageLoaderProps,\n ImageLoaderPropsWithConfig,\n} from './image-config'\n\nimport type { CSSProperties, JSX } from 'react'\n\nexport interface StaticImageData {\n src: string\n height: number\n width: number\n blurDataURL?: string\n blurWidth?: number\n blurHeight?: number\n}\n\nexport interface StaticRequire {\n default: StaticImageData\n}\n\nexport type StaticImport = StaticRequire | StaticImageData\n\nexport type ImageProps = Omit<\n JSX.IntrinsicElements['img'],\n 'src' | 'srcSet' | 'ref' | 'alt' | 'width' | 'height' | 'loading'\n> & {\n src: string | StaticImport\n alt: string\n width?: number | `${number}`\n height?: number | `${number}`\n fill?: boolean\n loader?: ImageLoader\n quality?: number | `${number}`\n priority?: boolean\n loading?: LoadingValue\n placeholder?: PlaceholderValue\n blurDataURL?: string\n unoptimized?: boolean\n overrideSrc?: string\n /**\n * @deprecated Use `onLoad` instead.\n * @see https://nextjs.org/docs/app/api-reference/components/image#onload\n */\n onLoadingComplete?: OnLoadingComplete\n /**\n * @deprecated Use `fill` prop instead of `layout=\"fill\"` or change import to `next/legacy/image`.\n * @see https://nextjs.org/docs/api-reference/next/legacy/image\n */\n layout?: string\n /**\n * @deprecated Use `style` prop instead.\n */\n objectFit?: string\n /**\n * @deprecated Use `style` prop instead.\n */\n objectPosition?: string\n /**\n * @deprecated This prop does not do anything.\n */\n lazyBoundary?: string\n /**\n * @deprecated This prop does not do anything.\n */\n lazyRoot?: string\n}\n\nexport type ImgProps = Omit<ImageProps, 'src' | 'loader'> & {\n loading: LoadingValue\n width: number | undefined\n height: number | undefined\n style: NonNullable<JSX.IntrinsicElements['img']['style']>\n sizes: string | undefined\n srcSet: string | undefined\n src: string\n}\n\nconst VALID_LOADING_VALUES = ['lazy', 'eager', undefined] as const\n\n// Object-fit values that are not valid background-size values\nconst INVALID_BACKGROUND_SIZE_VALUES = [\n '-moz-initial',\n 'fill',\n 'none',\n 'scale-down',\n undefined,\n]\ntype LoadingValue = (typeof VALID_LOADING_VALUES)[number]\ntype ImageConfig = ImageConfigComplete & {\n allSizes: number[]\n output?: 'standalone' | 'export'\n}\n\nexport type ImageLoader = (p: ImageLoaderProps) => string\n\n// Do not export - this is an internal type only\n// because `next.config.js` is only meant for the\n// built-in loaders, not for a custom loader() prop.\ntype ImageLoaderWithConfig = (p: ImageLoaderPropsWithConfig) => string\n\nexport type PlaceholderValue = 'blur' | 'empty' | `data:image/${string}`\nexport type OnLoad = React.ReactEventHandler<HTMLImageElement> | undefined\nexport type OnLoadingComplete = (img: HTMLImageElement) => void\n\nexport type PlaceholderStyle = Partial<\n Pick<\n CSSProperties,\n | 'backgroundSize'\n | 'backgroundPosition'\n | 'backgroundRepeat'\n | 'backgroundImage'\n >\n>\n\nfunction isStaticRequire(\n src: StaticRequire | StaticImageData\n): src is StaticRequire {\n return (src as StaticRequire).default !== undefined\n}\n\nfunction isStaticImageData(\n src: StaticRequire | StaticImageData\n): src is StaticImageData {\n return (src as StaticImageData).src !== undefined\n}\n\nfunction isStaticImport(src: string | StaticImport): src is StaticImport {\n return (\n !!src &&\n typeof src === 'object' &&\n (isStaticRequire(src as StaticImport) ||\n isStaticImageData(src as StaticImport))\n )\n}\n\nconst allImgs = new Map<\n string,\n { src: string; priority: boolean; placeholder: PlaceholderValue }\n>()\nlet perfObserver: PerformanceObserver | undefined\n\nfunction getInt(x: unknown): number | undefined {\n if (typeof x === 'undefined') {\n return x\n }\n if (typeof x === 'number') {\n return Number.isFinite(x) ? x : NaN\n }\n if (typeof x === 'string' && /^[0-9]+$/.test(x)) {\n return parseInt(x, 10)\n }\n return NaN\n}\n\nfunction getWidths(\n { deviceSizes, allSizes }: ImageConfig,\n width: number | undefined,\n sizes: string | undefined\n): { widths: number[]; kind: 'w' | 'x' } {\n if (sizes) {\n // Find all the \"vw\" percent sizes used in the sizes prop\n const viewportWidthRe = /(^|\\s)(1?\\d?\\d)vw/g\n const percentSizes = []\n for (let match; (match = viewportWidthRe.exec(sizes)); match) {\n percentSizes.push(parseInt(match[2]))\n }\n if (percentSizes.length) {\n const smallestRatio = Math.min(...percentSizes) * 0.01\n return {\n widths: allSizes.filter((s) => s >= deviceSizes[0] * smallestRatio),\n kind: 'w',\n }\n }\n return { widths: allSizes, kind: 'w' }\n }\n if (typeof width !== 'number') {\n return { widths: deviceSizes, kind: 'w' }\n }\n\n const widths = [\n ...new Set(\n // > This means that most OLED screens that say they are 3x resolution,\n // > are actually 3x in the green color, but only 1.5x in the red and\n // > blue colors. Showing a 3x resolution image in the app vs a 2x\n // > resolution image will be visually the same, though the 3x image\n // > takes significantly more data. Even true 3x resolution screens are\n // > wasteful as the human eye cannot see that level of detail without\n // > something like a magnifying glass.\n // https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices.html\n [width, width * 2 /*, width * 3*/].map(\n (w) => allSizes.find((p) => p >= w) || allSizes[allSizes.length - 1]\n )\n ),\n ]\n return { widths, kind: 'x' }\n}\n\ntype GenImgAttrsData = {\n config: ImageConfig\n src: string\n unoptimized: boolean\n loader: ImageLoaderWithConfig\n width?: number\n quality?: number\n sizes?: string\n}\n\ntype GenImgAttrsResult = {\n src: string\n srcSet: string | undefined\n sizes: string | undefined\n}\n\nfunction generateImgAttrs({\n config,\n src,\n unoptimized,\n width,\n quality,\n sizes,\n loader,\n}: GenImgAttrsData): GenImgAttrsResult {\n if (unoptimized) {\n return { src, srcSet: undefined, sizes: undefined }\n }\n\n const { widths, kind } = getWidths(config, width, sizes)\n const last = widths.length - 1\n\n return {\n sizes: !sizes && kind === 'w' ? '100vw' : sizes,\n srcSet: widths\n .map(\n (w, i) =>\n `${loader({ config, src, quality, width: w })} ${\n kind === 'w' ? w : i + 1\n }${kind}`\n )\n .join(', '),\n\n // It's intended to keep `src` the last attribute because React updates\n // attributes in order. If we keep `src` the first one, Safari will\n // immediately start to fetch `src`, before `sizes` and `srcSet` are even\n // updated by React. That causes multiple unnecessary requests if `srcSet`\n // and `sizes` are defined.\n // This bug cannot be reproduced in Chrome or Firefox.\n src: loader({ config, src, quality, width: widths[last] }),\n }\n}\n\n/**\n * A shared function, used on both client and server, to generate the props for <img>.\n */\nexport function getImgProps(\n {\n src,\n sizes,\n unoptimized = false,\n priority = false,\n loading,\n className,\n quality,\n width,\n height,\n fill = false,\n style,\n overrideSrc,\n onLoad,\n onLoadingComplete,\n placeholder = 'empty',\n blurDataURL,\n fetchPriority,\n decoding = 'async',\n layout,\n objectFit,\n objectPosition,\n lazyBoundary,\n lazyRoot,\n ...rest\n }: ImageProps,\n _state: {\n defaultLoader: ImageLoaderWithConfig\n imgConf: ImageConfigComplete\n showAltText?: boolean\n blurComplete?: boolean\n }\n): {\n props: ImgProps\n meta: {\n unoptimized: boolean\n priority: boolean\n placeholder: NonNullable<ImageProps['placeholder']>\n fill: boolean\n }\n} {\n const { imgConf, showAltText, blurComplete, defaultLoader } = _state\n let config: ImageConfig\n let c = imgConf || imageConfigDefault\n if ('allSizes' in c) {\n config = c as ImageConfig\n } else {\n const allSizes = [...c.deviceSizes, ...c.imageSizes].sort((a, b) => a - b)\n const deviceSizes = c.deviceSizes.sort((a, b) => a - b)\n const qualities = c.qualities?.sort((a, b) => a - b)\n config = { ...c, allSizes, deviceSizes, qualities }\n }\n\n if (typeof defaultLoader === 'undefined') {\n throw new Error(\n 'images.loaderFile detected but the file is missing default export.\\nRead more: https://nextjs.org/docs/messages/invalid-images-config'\n )\n }\n let loader: ImageLoaderWithConfig = rest.loader || defaultLoader\n\n // Remove property so it's not spread on <img> element\n delete rest.loader\n delete (rest as any).srcSet\n\n // This special value indicates that the user\n // didn't define a \"loader\" prop or \"loader\" config.\n const isDefaultLoader = '__next_img_default' in loader\n\n if (isDefaultLoader) {\n if (config.loader === 'custom') {\n throw new Error(\n `Image with src \"${src}\" is missing \"loader\" prop.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader`\n )\n }\n } else {\n // The user defined a \"loader\" prop or config.\n // Since the config object is internal only, we\n // must not pass it to the user-defined \"loader\".\n const customImageLoader = loader as ImageLoader\n loader = (obj) => {\n const { config: _, ...opts } = obj\n return customImageLoader(opts)\n }\n }\n\n if (layout) {\n if (layout === 'fill') {\n fill = true\n }\n const layoutToStyle: Record<string, Record<string, string> | undefined> = {\n intrinsic: { maxWidth: '100%', height: 'auto' },\n responsive: { width: '100%', height: 'auto' },\n }\n const layoutToSizes: Record<string, string | undefined> = {\n responsive: '100vw',\n fill: '100vw',\n }\n const layoutStyle = layoutToStyle[layout]\n if (layoutStyle) {\n style = { ...style, ...layoutStyle }\n }\n const layoutSizes = layoutToSizes[layout]\n if (layoutSizes && !sizes) {\n sizes = layoutSizes\n }\n }\n\n let staticSrc = ''\n let widthInt = getInt(width)\n let heightInt = getInt(height)\n let blurWidth: number | undefined\n let blurHeight: number | undefined\n if (isStaticImport(src)) {\n const staticImageData = isStaticRequire(src) ? src.default : src\n\n if (!staticImageData.src) {\n throw new Error(\n `An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(\n staticImageData\n )}`\n )\n }\n if (!staticImageData.height || !staticImageData.width) {\n throw new Error(\n `An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(\n staticImageData\n )}`\n )\n }\n\n blurWidth = staticImageData.blurWidth\n blurHeight = staticImageData.blurHeight\n blurDataURL = blurDataURL || staticImageData.blurDataURL\n staticSrc = staticImageData.src\n\n if (!fill) {\n if (!widthInt && !heightInt) {\n widthInt = staticImageData.width\n heightInt = staticImageData.height\n } else if (widthInt && !heightInt) {\n const ratio = widthInt / staticImageData.width\n heightInt = Math.round(staticImageData.height * ratio)\n } else if (!widthInt && heightInt) {\n const ratio = heightInt / staticImageData.height\n widthInt = Math.round(staticImageData.width * ratio)\n }\n }\n }\n src = typeof src === 'string' ? src : staticSrc\n\n let isLazy =\n !priority && (loading === 'lazy' || typeof loading === 'undefined')\n if (!src || src.startsWith('data:') || src.startsWith('blob:')) {\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n unoptimized = true\n isLazy = false\n }\n if (config.unoptimized) {\n unoptimized = true\n }\n if (\n isDefaultLoader &&\n !config.dangerouslyAllowSVG &&\n src.split('?', 1)[0].endsWith('.svg')\n ) {\n // Special case to make svg serve as-is to avoid proxying\n // through the built-in Image Optimization API.\n unoptimized = true\n }\n\n const qualityInt = getInt(quality)\n\n if (process.env.NODE_ENV !== 'production') {\n if (config.output === 'export' && isDefaultLoader && !unoptimized) {\n throw new Error(\n `Image Optimization using the default loader is not compatible with \\`{ output: 'export' }\\`.\n Possible solutions:\n - Remove \\`{ output: 'export' }\\` and run \"next start\" to run server mode including the Image Optimization API.\n - Configure \\`{ images: { unoptimized: true } }\\` in \\`next.config.js\\` to disable the Image Optimization API.\n Read more: https://nextjs.org/docs/messages/export-image-api`\n )\n }\n if (!src) {\n // React doesn't show the stack trace and there's\n // no `src` to help identify which image, so we\n // instead console.error(ref) during mount.\n unoptimized = true\n } else {\n if (fill) {\n if (width) {\n throw new Error(\n `Image with src \"${src}\" has both \"width\" and \"fill\" properties. Only one should be used.`\n )\n }\n if (height) {\n throw new Error(\n `Image with src \"${src}\" has both \"height\" and \"fill\" properties. Only one should be used.`\n )\n }\n if (style?.position && style.position !== 'absolute') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.position\" properties. Images with \"fill\" always use position absolute - it cannot be modified.`\n )\n }\n if (style?.width && style.width !== '100%') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.width\" properties. Images with \"fill\" always use width 100% - it cannot be modified.`\n )\n }\n if (style?.height && style.height !== '100%') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.height\" properties. Images with \"fill\" always use height 100% - it cannot be modified.`\n )\n }\n } else {\n if (typeof widthInt === 'undefined') {\n throw new Error(\n `Image with src \"${src}\" is missing required \"width\" property.`\n )\n } else if (isNaN(widthInt)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"width\" property. Expected a numeric value in pixels but received \"${width}\".`\n )\n }\n if (typeof heightInt === 'undefined') {\n throw new Error(\n `Image with src \"${src}\" is missing required \"height\" property.`\n )\n } else if (isNaN(heightInt)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"height\" property. Expected a numeric value in pixels but received \"${height}\".`\n )\n }\n // eslint-disable-next-line no-control-regex\n if (/^[\\x00-\\x20]/.test(src)) {\n throw new Error(\n `Image with src \"${src}\" cannot start with a space or control character. Use src.trimStart() to remove it or encodeURIComponent(src) to keep it.`\n )\n }\n // eslint-disable-next-line no-control-regex\n if (/[\\x00-\\x20]$/.test(src)) {\n throw new Error(\n `Image with src \"${src}\" cannot end with a space or control character. Use src.trimEnd() to remove it or encodeURIComponent(src) to keep it.`\n )\n }\n }\n }\n if (!VALID_LOADING_VALUES.includes(loading)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"loading\" property. Provided \"${loading}\" should be one of ${VALID_LOADING_VALUES.map(\n String\n ).join(',')}.`\n )\n }\n if (priority && loading === 'lazy') {\n throw new Error(\n `Image with src \"${src}\" has both \"priority\" and \"loading='lazy'\" properties. Only one should be used.`\n )\n }\n if (\n placeholder !== 'empty' &&\n placeholder !== 'blur' &&\n !placeholder.startsWith('data:image/')\n ) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"placeholder\" property \"${placeholder}\".`\n )\n }\n if (placeholder !== 'empty') {\n if (widthInt && heightInt && widthInt * heightInt < 1600) {\n warnOnce(\n `Image with src \"${src}\" is smaller than 40x40. Consider removing the \"placeholder\" property to improve performance.`\n )\n }\n }\n if (placeholder === 'blur' && !blurDataURL) {\n const VALID_BLUR_EXT = ['jpeg', 'png', 'webp', 'avif'] // should match next-image-loader\n\n throw new Error(\n `Image with src \"${src}\" has \"placeholder='blur'\" property but is missing the \"blurDataURL\" property.\n Possible solutions:\n - Add a \"blurDataURL\" property, the contents should be a small Data URL to represent the image\n - Change the \"src\" property to a static import with one of the supported file types: ${VALID_BLUR_EXT.join(\n ','\n )} (animated images not supported)\n - Remove the \"placeholder\" property, effectively no blur effect\n Read more: https://nextjs.org/docs/messages/placeholder-blur-data-url`\n )\n }\n if ('ref' in rest) {\n warnOnce(\n `Image with src \"${src}\" is using unsupported \"ref\" property. Consider using the \"onLoad\" property instead.`\n )\n }\n\n if (!unoptimized && !isDefaultLoader) {\n const urlStr = loader({\n config,\n src,\n width: widthInt || 400,\n quality: qualityInt || 75,\n })\n let url: URL | undefined\n try {\n url = new URL(urlStr)\n } catch (err) {}\n if (urlStr === src || (url && url.pathname === src && !url.search)) {\n warnOnce(\n `Image with src \"${src}\" has a \"loader\" property that does not implement width. Please implement it or use the \"unoptimized\" property instead.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader-width`\n )\n }\n }\n\n if (onLoadingComplete) {\n warnOnce(\n `Image with src \"${src}\" is using deprecated \"onLoadingComplete\" property. Please use the \"onLoad\" property instead.`\n )\n }\n\n for (const [legacyKey, legacyValue] of Object.entries({\n layout,\n objectFit,\n objectPosition,\n lazyBoundary,\n lazyRoot,\n })) {\n if (legacyValue) {\n warnOnce(\n `Image with src \"${src}\" has legacy prop \"${legacyKey}\". Did you forget to run the codemod?` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-upgrade-to-13`\n )\n }\n }\n\n if (\n typeof window !== 'undefined' &&\n !perfObserver &&\n window.PerformanceObserver\n ) {\n perfObserver = new PerformanceObserver((entryList) => {\n for (const entry of entryList.getEntries()) {\n // @ts-ignore - missing \"LargestContentfulPaint\" class with \"element\" prop\n const imgSrc = entry?.element?.src || ''\n const lcpImage = allImgs.get(imgSrc)\n if (\n lcpImage &&\n !lcpImage.priority &&\n lcpImage.placeholder === 'empty' &&\n !lcpImage.src.startsWith('data:') &&\n !lcpImage.src.startsWith('blob:')\n ) {\n // https://web.dev/lcp/#measure-lcp-in-javascript\n warnOnce(\n `Image with src \"${lcpImage.src}\" was detected as the Largest Contentful Paint (LCP). Please add the \"priority\" property if this image is above the fold.` +\n `\\nRead more: https://nextjs.org/docs/api-reference/next/image#priority`\n )\n }\n }\n })\n try {\n perfObserver.observe({\n type: 'largest-contentful-paint',\n buffered: true,\n })\n } catch (err) {\n // Log error but don't crash the app\n console.error(err)\n }\n }\n }\n const imgStyle = Object.assign(\n fill\n ? {\n position: 'absolute',\n height: '100%',\n width: '100%',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n objectFit,\n objectPosition,\n }\n : {},\n showAltText ? {} : { color: 'transparent' },\n style\n )\n\n const backgroundImage =\n !blurComplete && placeholder !== 'empty'\n ? placeholder === 'blur'\n ? `url(\"data:image/svg+xml;charset=utf-8,${getImageBlurSvg({\n widthInt,\n heightInt,\n blurWidth,\n blurHeight,\n blurDataURL: blurDataURL || '', // assume not undefined\n objectFit: imgStyle.objectFit,\n })}\")`\n : `url(\"${placeholder}\")` // assume `data:image/`\n : null\n\n const backgroundSize = !INVALID_BACKGROUND_SIZE_VALUES.includes(\n imgStyle.objectFit\n )\n ? imgStyle.objectFit\n : imgStyle.objectFit === 'fill'\n ? '100% 100%' // the background-size equivalent of `fill`\n : 'cover'\n\n let placeholderStyle: PlaceholderStyle = backgroundImage\n ? {\n backgroundSize,\n backgroundPosition: imgStyle.objectPosition || '50% 50%',\n backgroundRepeat: 'no-repeat',\n backgroundImage,\n }\n : {}\n\n if (process.env.NODE_ENV === 'development') {\n if (\n placeholderStyle.backgroundImage &&\n placeholder === 'blur' &&\n blurDataURL?.startsWith('/')\n ) {\n // During `next dev`, we don't want to generate blur placeholders with webpack\n // because it can delay starting the dev server. Instead, `next-image-loader.js`\n // will inline a special url to lazily generate the blur placeholder at request time.\n placeholderStyle.backgroundImage = `url(\"${blurDataURL}\")`\n }\n }\n\n const imgAttributes = generateImgAttrs({\n config,\n src,\n unoptimized,\n width: widthInt,\n quality: qualityInt,\n sizes,\n loader,\n })\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined') {\n let fullUrl: URL\n try {\n fullUrl = new URL(imgAttributes.src)\n } catch (e) {\n fullUrl = new URL(imgAttributes.src, window.location.href)\n }\n allImgs.set(fullUrl.href, { src, priority, placeholder })\n }\n }\n\n const props: ImgProps = {\n ...rest,\n loading: isLazy ? 'lazy' : loading,\n fetchPriority,\n width: widthInt,\n height: heightInt,\n decoding,\n className,\n style: { ...imgStyle, ...placeholderStyle },\n sizes: imgAttributes.sizes,\n srcSet: imgAttributes.srcSet,\n src: overrideSrc || imgAttributes.src,\n }\n const meta = { unoptimized, priority, placeholder, fill }\n return { props, meta }\n}\n"],"names":["getImgProps","VALID_LOADING_VALUES","undefined","INVALID_BACKGROUND_SIZE_VALUES","isStaticRequire","src","default","isStaticImageData","isStaticImport","allImgs","Map","perfObserver","getInt","x","Number","isFinite","NaN","test","parseInt","getWidths","width","sizes","deviceSizes","allSizes","viewportWidthRe","percentSizes","match","exec","push","length","smallestRatio","Math","min","widths","filter","s","kind","Set","map","w","find","p","generateImgAttrs","config","unoptimized","quality","loader","srcSet","last","i","join","_state","priority","loading","className","height","fill","style","overrideSrc","onLoad","onLoadingComplete","placeholder","blurDataURL","fetchPriority","decoding","layout","objectFit","objectPosition","lazyBoundary","lazyRoot","rest","imgConf","showAltText","blurComplete","defaultLoader","c","imageConfigDefault","imageSizes","sort","a","b","qualities","Error","isDefaultLoader","customImageLoader","obj","_","opts","layoutToStyle","intrinsic","maxWidth","responsive","layoutToSizes","layoutStyle","layoutSizes","staticSrc","widthInt","heightInt","blurWidth","blurHeight","staticImageData","JSON","stringify","ratio","round","isLazy","startsWith","dangerouslyAllowSVG","split","endsWith","qualityInt","process","env","NODE_ENV","output","position","isNaN","includes","String","warnOnce","VALID_BLUR_EXT","urlStr","url","URL","err","pathname","search","legacyKey","legacyValue","Object","entries","window","PerformanceObserver","entryList","entry","getEntries","imgSrc","element","lcpImage","get","observe","type","buffered","console","error","imgStyle","assign","left","top","right","bottom","color","backgroundImage","getImageBlurSvg","backgroundSize","placeholderStyle","backgroundPosition","backgroundRepeat","imgAttributes","fullUrl","e","location","href","set","props","meta"],"mappings":"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"}
|
@@ -47,7 +47,10 @@ export declare class TurbopackManifestLoader {
|
|
47
47
|
loadFontManifest(pageName: string, type?: 'app' | 'pages'): Promise<void>;
|
48
48
|
private mergeFontManifests;
|
49
49
|
private writeNextFontManifest;
|
50
|
-
|
50
|
+
/**
|
51
|
+
* @returns If the manifest was written or not
|
52
|
+
*/
|
53
|
+
loadMiddlewareManifest(pageName: string, type: 'pages' | 'app' | 'middleware' | 'instrumentation'): Promise<boolean>;
|
51
54
|
getMiddlewareManifest(key: EntryKey): TurbopackMiddlewareManifest | undefined;
|
52
55
|
deleteMiddlewareManifest(key: EntryKey): boolean;
|
53
56
|
private mergeMiddlewareManifests;
|
@@ -23,25 +23,27 @@ const _utils = require("../router/utils");
|
|
23
23
|
const _fs = require("fs");
|
24
24
|
const _turbopackutils = require("../../../server/dev/turbopack-utils");
|
25
25
|
const _trytoparsepath = require("../../../lib/try-to-parse-path");
|
26
|
-
const getManifestPath = (page, distDir, name, type)=>{
|
26
|
+
const getManifestPath = (page, distDir, name, type, firstCall)=>{
|
27
27
|
let manifestPath = _path.posix.join(distDir, "server", type, type === 'middleware' || type === 'instrumentation' ? '' : type === 'app' ? page : (0, _getassetpathfromroute.default)(page), name);
|
28
|
+
if (firstCall) {
|
29
|
+
const isSitemapRoute = /[\\/]sitemap(.xml)?\/route$/.test(page);
|
30
|
+
// Check the ambiguity of /sitemap and /sitemap.xml
|
31
|
+
if (isSitemapRoute && !(0, _fs.existsSync)(manifestPath)) {
|
32
|
+
manifestPath = getManifestPath(page.replace(/\/sitemap\/route$/, '/sitemap.xml/route'), distDir, name, type, false);
|
33
|
+
}
|
34
|
+
// existsSync is faster than using the async version
|
35
|
+
if (!(0, _fs.existsSync)(manifestPath) && page.endsWith('/route')) {
|
36
|
+
// TODO: Improve implementation of metadata routes, currently it requires this extra check for the variants of the files that can be written.
|
37
|
+
let metadataPage = (0, _turbopackutils.addRouteSuffix)((0, _turbopackutils.addMetadataIdToRoute)((0, _turbopackutils.removeRouteSuffix)(page)));
|
38
|
+
manifestPath = getManifestPath(metadataPage, distDir, name, type, false);
|
39
|
+
}
|
40
|
+
}
|
28
41
|
return manifestPath;
|
29
42
|
};
|
30
43
|
async function readPartialManifest(distDir, name, pageName, type) {
|
31
44
|
if (type === void 0) type = 'pages';
|
32
45
|
const page = pageName;
|
33
|
-
const
|
34
|
-
let manifestPath = getManifestPath(page, distDir, name, type);
|
35
|
-
// Check the ambiguity of /sitemap and /sitemap.xml
|
36
|
-
if (isSitemapRoute && !(0, _fs.existsSync)(manifestPath)) {
|
37
|
-
manifestPath = getManifestPath(pageName.replace(/\/sitemap\/route$/, '/sitemap.xml/route'), distDir, name, type);
|
38
|
-
}
|
39
|
-
// existsSync is faster than using the async version
|
40
|
-
if (!(0, _fs.existsSync)(manifestPath) && page.endsWith('/route')) {
|
41
|
-
// TODO: Improve implementation of metadata routes, currently it requires this extra check for the variants of the files that can be written.
|
42
|
-
let metadataPage = (0, _turbopackutils.addRouteSuffix)((0, _turbopackutils.addMetadataIdToRoute)((0, _turbopackutils.removeRouteSuffix)(page)));
|
43
|
-
manifestPath = getManifestPath(metadataPage, distDir, name, type);
|
44
|
-
}
|
46
|
+
const manifestPath = getManifestPath(page, distDir, name, type, true);
|
45
47
|
return JSON.parse(await (0, _promises.readFile)(_path.posix.join(manifestPath), 'utf-8'));
|
46
48
|
}
|
47
49
|
class TurbopackManifestLoader {
|
@@ -321,8 +323,16 @@ class TurbopackManifestLoader {
|
|
321
323
|
await (0, _writeatomic.writeFileAtomic)(fontManifestJsonPath, json);
|
322
324
|
await (0, _writeatomic.writeFileAtomic)(fontManifestJsPath, "self.__NEXT_FONT_MANIFEST=" + JSON.stringify(json));
|
323
325
|
}
|
324
|
-
|
326
|
+
/**
|
327
|
+
* @returns If the manifest was written or not
|
328
|
+
*/ async loadMiddlewareManifest(pageName, type) {
|
329
|
+
const middlewareManifestPath = getManifestPath(pageName, this.distDir, _constants.MIDDLEWARE_MANIFEST, type, true);
|
330
|
+
// middlewareManifest is actually "edge manifest" and not all routes are edge runtime. If it is not written we skip it.
|
331
|
+
if (!(0, _fs.existsSync)(middlewareManifestPath)) {
|
332
|
+
return false;
|
333
|
+
}
|
325
334
|
this.middlewareManifests.set((0, _entrykey.getEntryKey)(type === 'middleware' || type === 'instrumentation' ? 'root' : type, 'server', pageName), await readPartialManifest(this.distDir, _constants.MIDDLEWARE_MANIFEST, pageName, type));
|
335
|
+
return true;
|
326
336
|
}
|
327
337
|
getMiddlewareManifest(key) {
|
328
338
|
return this.middlewareManifests.get(key);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/shared/lib/turbopack/manifest-loader.ts"],"sourcesContent":["import type {\n EdgeFunctionDefinition,\n MiddlewareManifest,\n} from '../../../build/webpack/plugins/middleware-plugin'\nimport type {\n StatsAsset,\n StatsChunk,\n StatsChunkGroup,\n StatsModule,\n StatsCompilation as WebpackStats,\n} from 'webpack'\nimport type { BuildManifest } from '../../../server/get-page-files'\nimport type { AppBuildManifest } from '../../../build/webpack/plugins/app-build-manifest-plugin'\nimport type { PagesManifest } from '../../../build/webpack/plugins/pages-manifest-plugin'\nimport { pathToRegexp } from 'next/dist/compiled/path-to-regexp'\nimport type { ActionManifest } from '../../../build/webpack/plugins/flight-client-entry-plugin'\nimport type { NextFontManifest } from '../../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { REACT_LOADABLE_MANIFEST } from '../constants'\nimport {\n APP_BUILD_MANIFEST,\n APP_PATHS_MANIFEST,\n BUILD_MANIFEST,\n INTERCEPTION_ROUTE_REWRITE_MANIFEST,\n MIDDLEWARE_BUILD_MANIFEST,\n MIDDLEWARE_MANIFEST,\n NEXT_FONT_MANIFEST,\n PAGES_MANIFEST,\n SERVER_REFERENCE_MANIFEST,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST,\n WEBPACK_STATS,\n} from '../constants'\nimport { join, posix } from 'path'\nimport { readFile } from 'fs/promises'\nimport type { SetupOpts } from '../../../server/lib/router-utils/setup-dev-bundler'\nimport { deleteCache } from '../../../server/dev/require-cache'\nimport { writeFileAtomic } from '../../../lib/fs/write-atomic'\nimport { isInterceptionRouteRewrite } from '../../../lib/generate-interception-routes-rewrites'\nimport {\n type ClientBuildManifest,\n normalizeRewritesForBuildManifest,\n srcEmptySsgManifest,\n processRoute,\n} from '../../../build/webpack/plugins/build-manifest-plugin'\nimport getAssetPathFromRoute from '../router/utils/get-asset-path-from-route'\nimport { getEntryKey, type EntryKey } from './entry-key'\nimport type { CustomRoutes } from '../../../lib/load-custom-routes'\nimport { getSortedRoutes } from '../router/utils'\nimport { existsSync } from 'fs'\nimport {\n addMetadataIdToRoute,\n addRouteSuffix,\n removeRouteSuffix,\n} from '../../../server/dev/turbopack-utils'\nimport { tryToParsePath } from '../../../lib/try-to-parse-path'\nimport type { Entrypoints } from '../../../build/swc/types'\n\ninterface InstrumentationDefinition {\n files: string[]\n name: 'instrumentation'\n}\n\ntype TurbopackMiddlewareManifest = MiddlewareManifest & {\n instrumentation?: InstrumentationDefinition\n}\n\nconst getManifestPath = (\n page: string,\n distDir: string,\n name: string,\n type: string\n) => {\n let manifestPath = posix.join(\n distDir,\n `server`,\n type,\n type === 'middleware' || type === 'instrumentation'\n ? ''\n : type === 'app'\n ? page\n : getAssetPathFromRoute(page),\n name\n )\n return manifestPath\n}\n\nasync function readPartialManifest<T>(\n distDir: string,\n name:\n | typeof MIDDLEWARE_MANIFEST\n | typeof BUILD_MANIFEST\n | typeof APP_BUILD_MANIFEST\n | typeof PAGES_MANIFEST\n | typeof WEBPACK_STATS\n | typeof APP_PATHS_MANIFEST\n | `${typeof SERVER_REFERENCE_MANIFEST}.json`\n | `${typeof NEXT_FONT_MANIFEST}.json`\n | typeof REACT_LOADABLE_MANIFEST,\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation' = 'pages'\n): Promise<T> {\n const page = pageName\n const isSitemapRoute = /[\\\\/]sitemap(.xml)?\\/route$/.test(page)\n let manifestPath = getManifestPath(page, distDir, name, type)\n\n // Check the ambiguity of /sitemap and /sitemap.xml\n if (isSitemapRoute && !existsSync(manifestPath)) {\n manifestPath = getManifestPath(\n pageName.replace(/\\/sitemap\\/route$/, '/sitemap.xml/route'),\n distDir,\n name,\n type\n )\n }\n // existsSync is faster than using the async version\n if (!existsSync(manifestPath) && page.endsWith('/route')) {\n // TODO: Improve implementation of metadata routes, currently it requires this extra check for the variants of the files that can be written.\n let metadataPage = addRouteSuffix(\n addMetadataIdToRoute(removeRouteSuffix(page))\n )\n manifestPath = getManifestPath(metadataPage, distDir, name, type)\n }\n return JSON.parse(await readFile(posix.join(manifestPath), 'utf-8')) as T\n}\n\nexport class TurbopackManifestLoader {\n private actionManifests: Map<EntryKey, ActionManifest> = new Map()\n private appBuildManifests: Map<EntryKey, AppBuildManifest> = new Map()\n private appPathsManifests: Map<EntryKey, PagesManifest> = new Map()\n private buildManifests: Map<EntryKey, BuildManifest> = new Map()\n private fontManifests: Map<EntryKey, NextFontManifest> = new Map()\n private middlewareManifests: Map<EntryKey, TurbopackMiddlewareManifest> =\n new Map()\n private pagesManifests: Map<string, PagesManifest> = new Map()\n private webpackStats: Map<EntryKey, WebpackStats> = new Map()\n private encryptionKey: string\n\n private readonly distDir: string\n private readonly buildId: string\n\n constructor({\n distDir,\n buildId,\n encryptionKey,\n }: {\n buildId: string\n distDir: string\n encryptionKey: string\n }) {\n this.distDir = distDir\n this.buildId = buildId\n this.encryptionKey = encryptionKey\n }\n\n delete(key: EntryKey) {\n this.actionManifests.delete(key)\n this.appBuildManifests.delete(key)\n this.appPathsManifests.delete(key)\n this.buildManifests.delete(key)\n this.fontManifests.delete(key)\n this.middlewareManifests.delete(key)\n this.pagesManifests.delete(key)\n this.webpackStats.delete(key)\n }\n\n async loadActionManifest(pageName: string): Promise<void> {\n this.actionManifests.set(\n getEntryKey('app', 'server', pageName),\n await readPartialManifest(\n this.distDir,\n `${SERVER_REFERENCE_MANIFEST}.json`,\n pageName,\n 'app'\n )\n )\n }\n\n private async mergeActionManifests(manifests: Iterable<ActionManifest>) {\n type ActionEntries = ActionManifest['edge' | 'node']\n const manifest: ActionManifest = {\n node: {},\n edge: {},\n encryptionKey: this.encryptionKey,\n }\n\n function mergeActionIds(\n actionEntries: ActionEntries,\n other: ActionEntries\n ): void {\n for (const key in other) {\n const action = (actionEntries[key] ??= {\n workers: {},\n layer: {},\n })\n Object.assign(action.workers, other[key].workers)\n Object.assign(action.layer, other[key].layer)\n }\n }\n\n for (const m of manifests) {\n mergeActionIds(manifest.node, m.node)\n mergeActionIds(manifest.edge, m.edge)\n }\n for (const key in manifest.node) {\n const entry = manifest.node[key]\n entry.workers = sortObjectByKey(entry.workers)\n entry.layer = sortObjectByKey(entry.layer)\n }\n for (const key in manifest.edge) {\n const entry = manifest.edge[key]\n entry.workers = sortObjectByKey(entry.workers)\n entry.layer = sortObjectByKey(entry.layer)\n }\n\n return manifest\n }\n\n private async writeActionManifest(): Promise<void> {\n const actionManifest = await this.mergeActionManifests(\n this.actionManifests.values()\n )\n const actionManifestJsonPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.json`\n )\n const actionManifestJsPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.js`\n )\n const json = JSON.stringify(actionManifest, null, 2)\n deleteCache(actionManifestJsonPath)\n deleteCache(actionManifestJsPath)\n await writeFileAtomic(actionManifestJsonPath, json)\n await writeFileAtomic(\n actionManifestJsPath,\n `self.__RSC_SERVER_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n async loadAppBuildManifest(pageName: string): Promise<void> {\n this.appBuildManifests.set(\n getEntryKey('app', 'server', pageName),\n await readPartialManifest(\n this.distDir,\n APP_BUILD_MANIFEST,\n pageName,\n 'app'\n )\n )\n }\n\n private mergeAppBuildManifests(manifests: Iterable<AppBuildManifest>) {\n const manifest: AppBuildManifest = {\n pages: {},\n }\n for (const m of manifests) {\n Object.assign(manifest.pages, m.pages)\n }\n manifest.pages = sortObjectByKey(manifest.pages)\n return manifest\n }\n\n private async writeAppBuildManifest(): Promise<void> {\n const appBuildManifest = this.mergeAppBuildManifests(\n this.appBuildManifests.values()\n )\n const appBuildManifestPath = join(this.distDir, APP_BUILD_MANIFEST)\n deleteCache(appBuildManifestPath)\n await writeFileAtomic(\n appBuildManifestPath,\n JSON.stringify(appBuildManifest, null, 2)\n )\n }\n\n async loadAppPathsManifest(pageName: string): Promise<void> {\n this.appPathsManifests.set(\n getEntryKey('app', 'server', pageName),\n await readPartialManifest(\n this.distDir,\n APP_PATHS_MANIFEST,\n pageName,\n 'app'\n )\n )\n }\n\n private async writeAppPathsManifest(): Promise<void> {\n const appPathsManifest = this.mergePagesManifests(\n this.appPathsManifests.values()\n )\n const appPathsManifestPath = join(\n this.distDir,\n 'server',\n APP_PATHS_MANIFEST\n )\n deleteCache(appPathsManifestPath)\n await writeFileAtomic(\n appPathsManifestPath,\n JSON.stringify(appPathsManifest, null, 2)\n )\n }\n\n private async writeWebpackStats(): Promise<void> {\n const webpackStats = this.mergeWebpackStats(this.webpackStats.values())\n const path = join(this.distDir, 'server', WEBPACK_STATS)\n deleteCache(path)\n await writeFileAtomic(path, JSON.stringify(webpackStats, null, 2))\n }\n\n async loadBuildManifest(\n pageName: string,\n type: 'app' | 'pages' = 'pages'\n ): Promise<void> {\n this.buildManifests.set(\n getEntryKey(type, 'server', pageName),\n await readPartialManifest(this.distDir, BUILD_MANIFEST, pageName, type)\n )\n }\n\n async loadWebpackStats(\n pageName: string,\n type: 'app' | 'pages' = 'pages'\n ): Promise<void> {\n this.webpackStats.set(\n getEntryKey(type, 'client', pageName),\n await readPartialManifest(this.distDir, WEBPACK_STATS, pageName, type)\n )\n }\n\n private mergeWebpackStats(statsFiles: Iterable<WebpackStats>): WebpackStats {\n const entrypoints: Record<string, StatsChunkGroup> = {}\n const assets: Map<string, StatsAsset> = new Map()\n const chunks: Map<string, StatsChunk> = new Map()\n const modules: Map<string | number, StatsModule> = new Map()\n\n for (const statsFile of statsFiles) {\n if (statsFile.entrypoints) {\n for (const [k, v] of Object.entries(statsFile.entrypoints)) {\n if (!entrypoints[k]) {\n entrypoints[k] = v\n }\n }\n }\n\n if (statsFile.assets) {\n for (const asset of statsFile.assets) {\n if (!assets.has(asset.name)) {\n assets.set(asset.name, asset)\n }\n }\n }\n\n if (statsFile.chunks) {\n for (const chunk of statsFile.chunks) {\n if (!chunks.has(chunk.name)) {\n chunks.set(chunk.name, chunk)\n }\n }\n }\n\n if (statsFile.modules) {\n for (const module of statsFile.modules) {\n const id = module.id\n if (id != null) {\n // Merge the chunk list for the module. This can vary across endpoints.\n const existing = modules.get(id)\n if (existing == null) {\n modules.set(id, module)\n } else if (module.chunks != null && existing.chunks != null) {\n for (const chunk of module.chunks) {\n if (!existing.chunks.includes(chunk)) {\n existing.chunks.push(chunk)\n }\n }\n }\n }\n }\n }\n }\n\n return {\n entrypoints,\n assets: [...assets.values()],\n chunks: [...chunks.values()],\n modules: [...modules.values()],\n }\n }\n\n private mergeBuildManifests(manifests: Iterable<BuildManifest>) {\n const manifest: Partial<BuildManifest> & Pick<BuildManifest, 'pages'> = {\n pages: {\n '/_app': [],\n },\n // Something in next.js depends on these to exist even for app dir rendering\n devFiles: [],\n ampDevFiles: [],\n polyfillFiles: [],\n lowPriorityFiles: [\n `static/${this.buildId}/_ssgManifest.js`,\n `static/${this.buildId}/_buildManifest.js`,\n ],\n rootMainFiles: [],\n ampFirstPages: [],\n }\n for (const m of manifests) {\n Object.assign(manifest.pages, m.pages)\n if (m.rootMainFiles.length) manifest.rootMainFiles = m.rootMainFiles\n // polyfillFiles should always be the same, so we can overwrite instead of actually merging\n if (m.polyfillFiles.length) manifest.polyfillFiles = m.polyfillFiles\n }\n manifest.pages = sortObjectByKey(manifest.pages) as BuildManifest['pages']\n return manifest\n }\n\n private async writeBuildManifest(\n entrypoints: Entrypoints,\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): Promise<void> {\n const rewrites = productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n const buildManifest = this.mergeBuildManifests(this.buildManifests.values())\n const buildManifestPath = join(this.distDir, BUILD_MANIFEST)\n const middlewareBuildManifestPath = join(\n this.distDir,\n 'server',\n `${MIDDLEWARE_BUILD_MANIFEST}.js`\n )\n const interceptionRewriteManifestPath = join(\n this.distDir,\n 'server',\n `${INTERCEPTION_ROUTE_REWRITE_MANIFEST}.js`\n )\n deleteCache(buildManifestPath)\n deleteCache(middlewareBuildManifestPath)\n deleteCache(interceptionRewriteManifestPath)\n await writeFileAtomic(\n buildManifestPath,\n JSON.stringify(buildManifest, null, 2)\n )\n await writeFileAtomic(\n middlewareBuildManifestPath,\n // we use globalThis here because middleware can be node\n // which doesn't have \"self\"\n `globalThis.__BUILD_MANIFEST=${JSON.stringify(buildManifest)};`\n )\n\n const interceptionRewrites = JSON.stringify(\n rewrites.beforeFiles.filter(isInterceptionRouteRewrite)\n )\n\n await writeFileAtomic(\n interceptionRewriteManifestPath,\n `self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST=${JSON.stringify(\n interceptionRewrites\n )};`\n )\n\n const pagesKeys = [...entrypoints.page.keys()]\n if (entrypoints.global.app) {\n pagesKeys.push('/_app')\n }\n if (entrypoints.global.error) {\n pagesKeys.push('/_error')\n }\n\n const sortedPageKeys = getSortedRoutes(pagesKeys)\n const content: ClientBuildManifest = {\n __rewrites: normalizeRewritesForBuildManifest(rewrites) as any,\n ...Object.fromEntries(\n sortedPageKeys.map((pathname) => [\n pathname,\n [`static/chunks/pages${pathname === '/' ? '/index' : pathname}.js`],\n ])\n ),\n sortedPages: sortedPageKeys,\n }\n const buildManifestJs = `self.__BUILD_MANIFEST = ${JSON.stringify(\n content\n )};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`\n await writeFileAtomic(\n join(this.distDir, 'static', this.buildId, '_buildManifest.js'),\n buildManifestJs\n )\n await writeFileAtomic(\n join(this.distDir, 'static', this.buildId, '_ssgManifest.js'),\n srcEmptySsgManifest\n )\n }\n\n private async writeClientMiddlewareManifest(): Promise<void> {\n const middlewareManifest = this.mergeMiddlewareManifests(\n this.middlewareManifests.values()\n )\n\n const matchers = middlewareManifest?.middleware['/']?.matchers || []\n\n const clientMiddlewareManifestPath = join(\n this.distDir,\n 'static',\n this.buildId,\n `${TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST}`\n )\n deleteCache(clientMiddlewareManifestPath)\n await writeFileAtomic(\n clientMiddlewareManifestPath,\n JSON.stringify(matchers, null, 2)\n )\n }\n\n private async writeFallbackBuildManifest(): Promise<void> {\n const fallbackBuildManifest = this.mergeBuildManifests(\n [\n this.buildManifests.get(getEntryKey('pages', 'server', '_app')),\n this.buildManifests.get(getEntryKey('pages', 'server', '_error')),\n ].filter(Boolean) as BuildManifest[]\n )\n const fallbackBuildManifestPath = join(\n this.distDir,\n `fallback-${BUILD_MANIFEST}`\n )\n deleteCache(fallbackBuildManifestPath)\n await writeFileAtomic(\n fallbackBuildManifestPath,\n JSON.stringify(fallbackBuildManifest, null, 2)\n )\n }\n\n async loadFontManifest(\n pageName: string,\n type: 'app' | 'pages' = 'pages'\n ): Promise<void> {\n this.fontManifests.set(\n getEntryKey(type, 'server', pageName),\n await readPartialManifest(\n this.distDir,\n `${NEXT_FONT_MANIFEST}.json`,\n pageName,\n type\n )\n )\n }\n\n private mergeFontManifests(manifests: Iterable<NextFontManifest>) {\n const manifest: NextFontManifest = {\n app: {},\n appUsingSizeAdjust: false,\n pages: {},\n pagesUsingSizeAdjust: false,\n }\n for (const m of manifests) {\n Object.assign(manifest.app, m.app)\n Object.assign(manifest.pages, m.pages)\n\n manifest.appUsingSizeAdjust =\n manifest.appUsingSizeAdjust || m.appUsingSizeAdjust\n manifest.pagesUsingSizeAdjust =\n manifest.pagesUsingSizeAdjust || m.pagesUsingSizeAdjust\n }\n manifest.app = sortObjectByKey(manifest.app)\n manifest.pages = sortObjectByKey(manifest.pages)\n return manifest\n }\n\n private async writeNextFontManifest(): Promise<void> {\n const fontManifest = this.mergeFontManifests(this.fontManifests.values())\n const json = JSON.stringify(fontManifest, null, 2)\n\n const fontManifestJsonPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.json`\n )\n const fontManifestJsPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.js`\n )\n deleteCache(fontManifestJsonPath)\n deleteCache(fontManifestJsPath)\n await writeFileAtomic(fontManifestJsonPath, json)\n await writeFileAtomic(\n fontManifestJsPath,\n `self.__NEXT_FONT_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n async loadMiddlewareManifest(\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation'\n ): Promise<void> {\n this.middlewareManifests.set(\n getEntryKey(\n type === 'middleware' || type === 'instrumentation' ? 'root' : type,\n 'server',\n pageName\n ),\n await readPartialManifest(\n this.distDir,\n MIDDLEWARE_MANIFEST,\n pageName,\n type\n )\n )\n }\n\n getMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.get(key)\n }\n\n deleteMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.delete(key)\n }\n\n private mergeMiddlewareManifests(\n manifests: Iterable<TurbopackMiddlewareManifest>\n ): MiddlewareManifest {\n const manifest: MiddlewareManifest = {\n version: 3,\n middleware: {},\n sortedMiddleware: [],\n functions: {},\n }\n let instrumentation: InstrumentationDefinition | undefined = undefined\n for (const m of manifests) {\n Object.assign(manifest.functions, m.functions)\n Object.assign(manifest.middleware, m.middleware)\n if (m.instrumentation) {\n instrumentation = m.instrumentation\n }\n }\n manifest.functions = sortObjectByKey(manifest.functions)\n manifest.middleware = sortObjectByKey(manifest.middleware)\n const updateFunctionDefinition = (\n fun: EdgeFunctionDefinition\n ): EdgeFunctionDefinition => {\n return {\n ...fun,\n files: [...(instrumentation?.files ?? []), ...fun.files],\n }\n }\n for (const key of Object.keys(manifest.middleware)) {\n const value = manifest.middleware[key]\n manifest.middleware[key] = updateFunctionDefinition(value)\n }\n for (const key of Object.keys(manifest.functions)) {\n const value = manifest.functions[key]\n manifest.functions[key] = updateFunctionDefinition(value)\n }\n for (const fun of Object.values(manifest.functions).concat(\n Object.values(manifest.middleware)\n )) {\n for (const matcher of fun.matchers) {\n if (!matcher.regexp) {\n matcher.regexp = pathToRegexp(matcher.originalSource, [], {\n delimiter: '/',\n sensitive: false,\n strict: true,\n }).source.replaceAll('\\\\/', '/')\n }\n }\n }\n manifest.sortedMiddleware = Object.keys(manifest.middleware)\n\n return manifest\n }\n\n private async writeMiddlewareManifest(): Promise<void> {\n const middlewareManifest = this.mergeMiddlewareManifests(\n this.middlewareManifests.values()\n )\n\n // Normalize regexes as it uses path-to-regexp\n for (const key in middlewareManifest.middleware) {\n middlewareManifest.middleware[key].matchers.forEach((matcher) => {\n if (!matcher.regexp.startsWith('^')) {\n const parsedPage = tryToParsePath(matcher.regexp)\n if (parsedPage.error || !parsedPage.regexStr) {\n throw new Error(`Invalid source: ${matcher.regexp}`)\n }\n matcher.regexp = parsedPage.regexStr\n }\n })\n }\n\n const middlewareManifestPath = join(\n this.distDir,\n 'server',\n MIDDLEWARE_MANIFEST\n )\n deleteCache(middlewareManifestPath)\n await writeFileAtomic(\n middlewareManifestPath,\n JSON.stringify(middlewareManifest, null, 2)\n )\n }\n\n async loadPagesManifest(pageName: string): Promise<void> {\n this.pagesManifests.set(\n getEntryKey('pages', 'server', pageName),\n await readPartialManifest(this.distDir, PAGES_MANIFEST, pageName)\n )\n }\n\n private mergePagesManifests(manifests: Iterable<PagesManifest>) {\n const manifest: PagesManifest = {}\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private async writePagesManifest(): Promise<void> {\n const pagesManifest = this.mergePagesManifests(this.pagesManifests.values())\n const pagesManifestPath = join(this.distDir, 'server', PAGES_MANIFEST)\n deleteCache(pagesManifestPath)\n await writeFileAtomic(\n pagesManifestPath,\n JSON.stringify(pagesManifest, null, 2)\n )\n }\n\n async writeManifests({\n devRewrites,\n productionRewrites,\n entrypoints,\n }: {\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined\n productionRewrites: CustomRoutes['rewrites'] | undefined\n entrypoints: Entrypoints\n }) {\n await this.writeActionManifest()\n await this.writeAppBuildManifest()\n await this.writeAppPathsManifest()\n await this.writeBuildManifest(entrypoints, devRewrites, productionRewrites)\n await this.writeFallbackBuildManifest()\n await this.writeMiddlewareManifest()\n await this.writeClientMiddlewareManifest()\n await this.writeNextFontManifest()\n await this.writePagesManifest()\n\n if (process.env.TURBOPACK_STATS != null) {\n await this.writeWebpackStats()\n }\n }\n}\n\nfunction sortObjectByKey(obj: Record<string, any>) {\n return Object.keys(obj)\n .sort()\n .reduce(\n (acc, key) => {\n acc[key] = obj[key]\n return acc\n },\n {} as Record<string, any>\n )\n}\n"],"names":["TurbopackManifestLoader","getManifestPath","page","distDir","name","type","manifestPath","posix","join","getAssetPathFromRoute","readPartialManifest","pageName","isSitemapRoute","test","existsSync","replace","endsWith","metadataPage","addRouteSuffix","addMetadataIdToRoute","removeRouteSuffix","JSON","parse","readFile","delete","key","actionManifests","appBuildManifests","appPathsManifests","buildManifests","fontManifests","middlewareManifests","pagesManifests","webpackStats","loadActionManifest","set","getEntryKey","SERVER_REFERENCE_MANIFEST","mergeActionManifests","manifests","manifest","node","edge","encryptionKey","mergeActionIds","actionEntries","other","action","workers","layer","Object","assign","m","entry","sortObjectByKey","writeActionManifest","actionManifest","values","actionManifestJsonPath","actionManifestJsPath","json","stringify","deleteCache","writeFileAtomic","loadAppBuildManifest","APP_BUILD_MANIFEST","mergeAppBuildManifests","pages","writeAppBuildManifest","appBuildManifest","appBuildManifestPath","loadAppPathsManifest","APP_PATHS_MANIFEST","writeAppPathsManifest","appPathsManifest","mergePagesManifests","appPathsManifestPath","writeWebpackStats","mergeWebpackStats","path","WEBPACK_STATS","loadBuildManifest","BUILD_MANIFEST","loadWebpackStats","statsFiles","entrypoints","assets","Map","chunks","modules","statsFile","k","v","entries","asset","has","chunk","module","id","existing","get","includes","push","mergeBuildManifests","devFiles","ampDevFiles","polyfillFiles","lowPriorityFiles","buildId","rootMainFiles","ampFirstPages","length","writeBuildManifest","devRewrites","productionRewrites","rewrites","beforeFiles","map","processRoute","afterFiles","fallback","buildManifest","buildManifestPath","middlewareBuildManifestPath","MIDDLEWARE_BUILD_MANIFEST","interceptionRewriteManifestPath","INTERCEPTION_ROUTE_REWRITE_MANIFEST","interceptionRewrites","filter","isInterceptionRouteRewrite","pagesKeys","keys","global","app","error","sortedPageKeys","getSortedRoutes","content","__rewrites","normalizeRewritesForBuildManifest","fromEntries","pathname","sortedPages","buildManifestJs","srcEmptySsgManifest","writeClientMiddlewareManifest","middlewareManifest","mergeMiddlewareManifests","matchers","middleware","clientMiddlewareManifestPath","TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST","writeFallbackBuildManifest","fallbackBuildManifest","Boolean","fallbackBuildManifestPath","loadFontManifest","NEXT_FONT_MANIFEST","mergeFontManifests","appUsingSizeAdjust","pagesUsingSizeAdjust","writeNextFontManifest","fontManifest","fontManifestJsonPath","fontManifestJsPath","loadMiddlewareManifest","MIDDLEWARE_MANIFEST","getMiddlewareManifest","deleteMiddlewareManifest","version","sortedMiddleware","functions","instrumentation","undefined","updateFunctionDefinition","fun","files","value","concat","matcher","regexp","pathToRegexp","originalSource","delimiter","sensitive","strict","source","replaceAll","writeMiddlewareManifest","forEach","startsWith","parsedPage","tryToParsePath","regexStr","Error","middlewareManifestPath","loadPagesManifest","PAGES_MANIFEST","writePagesManifest","pagesManifest","pagesManifestPath","writeManifests","process","env","TURBOPACK_STATS","constructor","obj","sort","reduce","acc"],"mappings":"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"}
|
1
|
+
{"version":3,"sources":["../../../../src/shared/lib/turbopack/manifest-loader.ts"],"sourcesContent":["import type {\n EdgeFunctionDefinition,\n MiddlewareManifest,\n} from '../../../build/webpack/plugins/middleware-plugin'\nimport type {\n StatsAsset,\n StatsChunk,\n StatsChunkGroup,\n StatsModule,\n StatsCompilation as WebpackStats,\n} from 'webpack'\nimport type { BuildManifest } from '../../../server/get-page-files'\nimport type { AppBuildManifest } from '../../../build/webpack/plugins/app-build-manifest-plugin'\nimport type { PagesManifest } from '../../../build/webpack/plugins/pages-manifest-plugin'\nimport { pathToRegexp } from 'next/dist/compiled/path-to-regexp'\nimport type { ActionManifest } from '../../../build/webpack/plugins/flight-client-entry-plugin'\nimport type { NextFontManifest } from '../../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { REACT_LOADABLE_MANIFEST } from '../constants'\nimport {\n APP_BUILD_MANIFEST,\n APP_PATHS_MANIFEST,\n BUILD_MANIFEST,\n INTERCEPTION_ROUTE_REWRITE_MANIFEST,\n MIDDLEWARE_BUILD_MANIFEST,\n MIDDLEWARE_MANIFEST,\n NEXT_FONT_MANIFEST,\n PAGES_MANIFEST,\n SERVER_REFERENCE_MANIFEST,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST,\n WEBPACK_STATS,\n} from '../constants'\nimport { join, posix } from 'path'\nimport { readFile } from 'fs/promises'\nimport type { SetupOpts } from '../../../server/lib/router-utils/setup-dev-bundler'\nimport { deleteCache } from '../../../server/dev/require-cache'\nimport { writeFileAtomic } from '../../../lib/fs/write-atomic'\nimport { isInterceptionRouteRewrite } from '../../../lib/generate-interception-routes-rewrites'\nimport {\n type ClientBuildManifest,\n normalizeRewritesForBuildManifest,\n srcEmptySsgManifest,\n processRoute,\n} from '../../../build/webpack/plugins/build-manifest-plugin'\nimport getAssetPathFromRoute from '../router/utils/get-asset-path-from-route'\nimport { getEntryKey, type EntryKey } from './entry-key'\nimport type { CustomRoutes } from '../../../lib/load-custom-routes'\nimport { getSortedRoutes } from '../router/utils'\nimport { existsSync } from 'fs'\nimport {\n addMetadataIdToRoute,\n addRouteSuffix,\n removeRouteSuffix,\n} from '../../../server/dev/turbopack-utils'\nimport { tryToParsePath } from '../../../lib/try-to-parse-path'\nimport type { Entrypoints } from '../../../build/swc/types'\n\ninterface InstrumentationDefinition {\n files: string[]\n name: 'instrumentation'\n}\n\ntype TurbopackMiddlewareManifest = MiddlewareManifest & {\n instrumentation?: InstrumentationDefinition\n}\n\ntype ManifestName =\n | typeof MIDDLEWARE_MANIFEST\n | typeof BUILD_MANIFEST\n | typeof APP_BUILD_MANIFEST\n | typeof PAGES_MANIFEST\n | typeof WEBPACK_STATS\n | typeof APP_PATHS_MANIFEST\n | `${typeof SERVER_REFERENCE_MANIFEST}.json`\n | `${typeof NEXT_FONT_MANIFEST}.json`\n | typeof REACT_LOADABLE_MANIFEST\n\nconst getManifestPath = (\n page: string,\n distDir: string,\n name: ManifestName,\n type: string,\n firstCall: boolean\n) => {\n let manifestPath = posix.join(\n distDir,\n `server`,\n type,\n type === 'middleware' || type === 'instrumentation'\n ? ''\n : type === 'app'\n ? page\n : getAssetPathFromRoute(page),\n name\n )\n\n if (firstCall) {\n const isSitemapRoute = /[\\\\/]sitemap(.xml)?\\/route$/.test(page)\n // Check the ambiguity of /sitemap and /sitemap.xml\n if (isSitemapRoute && !existsSync(manifestPath)) {\n manifestPath = getManifestPath(\n page.replace(/\\/sitemap\\/route$/, '/sitemap.xml/route'),\n distDir,\n name,\n type,\n false\n )\n }\n // existsSync is faster than using the async version\n if (!existsSync(manifestPath) && page.endsWith('/route')) {\n // TODO: Improve implementation of metadata routes, currently it requires this extra check for the variants of the files that can be written.\n let metadataPage = addRouteSuffix(\n addMetadataIdToRoute(removeRouteSuffix(page))\n )\n manifestPath = getManifestPath(metadataPage, distDir, name, type, false)\n }\n }\n\n return manifestPath\n}\n\nasync function readPartialManifest<T>(\n distDir: string,\n name: ManifestName,\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation' = 'pages'\n): Promise<T> {\n const page = pageName\n const manifestPath = getManifestPath(page, distDir, name, type, true)\n return JSON.parse(await readFile(posix.join(manifestPath), 'utf-8')) as T\n}\n\nexport class TurbopackManifestLoader {\n private actionManifests: Map<EntryKey, ActionManifest> = new Map()\n private appBuildManifests: Map<EntryKey, AppBuildManifest> = new Map()\n private appPathsManifests: Map<EntryKey, PagesManifest> = new Map()\n private buildManifests: Map<EntryKey, BuildManifest> = new Map()\n private fontManifests: Map<EntryKey, NextFontManifest> = new Map()\n private middlewareManifests: Map<EntryKey, TurbopackMiddlewareManifest> =\n new Map()\n private pagesManifests: Map<string, PagesManifest> = new Map()\n private webpackStats: Map<EntryKey, WebpackStats> = new Map()\n private encryptionKey: string\n\n private readonly distDir: string\n private readonly buildId: string\n\n constructor({\n distDir,\n buildId,\n encryptionKey,\n }: {\n buildId: string\n distDir: string\n encryptionKey: string\n }) {\n this.distDir = distDir\n this.buildId = buildId\n this.encryptionKey = encryptionKey\n }\n\n delete(key: EntryKey) {\n this.actionManifests.delete(key)\n this.appBuildManifests.delete(key)\n this.appPathsManifests.delete(key)\n this.buildManifests.delete(key)\n this.fontManifests.delete(key)\n this.middlewareManifests.delete(key)\n this.pagesManifests.delete(key)\n this.webpackStats.delete(key)\n }\n\n async loadActionManifest(pageName: string): Promise<void> {\n this.actionManifests.set(\n getEntryKey('app', 'server', pageName),\n await readPartialManifest(\n this.distDir,\n `${SERVER_REFERENCE_MANIFEST}.json`,\n pageName,\n 'app'\n )\n )\n }\n\n private async mergeActionManifests(manifests: Iterable<ActionManifest>) {\n type ActionEntries = ActionManifest['edge' | 'node']\n const manifest: ActionManifest = {\n node: {},\n edge: {},\n encryptionKey: this.encryptionKey,\n }\n\n function mergeActionIds(\n actionEntries: ActionEntries,\n other: ActionEntries\n ): void {\n for (const key in other) {\n const action = (actionEntries[key] ??= {\n workers: {},\n layer: {},\n })\n Object.assign(action.workers, other[key].workers)\n Object.assign(action.layer, other[key].layer)\n }\n }\n\n for (const m of manifests) {\n mergeActionIds(manifest.node, m.node)\n mergeActionIds(manifest.edge, m.edge)\n }\n for (const key in manifest.node) {\n const entry = manifest.node[key]\n entry.workers = sortObjectByKey(entry.workers)\n entry.layer = sortObjectByKey(entry.layer)\n }\n for (const key in manifest.edge) {\n const entry = manifest.edge[key]\n entry.workers = sortObjectByKey(entry.workers)\n entry.layer = sortObjectByKey(entry.layer)\n }\n\n return manifest\n }\n\n private async writeActionManifest(): Promise<void> {\n const actionManifest = await this.mergeActionManifests(\n this.actionManifests.values()\n )\n const actionManifestJsonPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.json`\n )\n const actionManifestJsPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.js`\n )\n const json = JSON.stringify(actionManifest, null, 2)\n deleteCache(actionManifestJsonPath)\n deleteCache(actionManifestJsPath)\n await writeFileAtomic(actionManifestJsonPath, json)\n await writeFileAtomic(\n actionManifestJsPath,\n `self.__RSC_SERVER_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n async loadAppBuildManifest(pageName: string): Promise<void> {\n this.appBuildManifests.set(\n getEntryKey('app', 'server', pageName),\n await readPartialManifest(\n this.distDir,\n APP_BUILD_MANIFEST,\n pageName,\n 'app'\n )\n )\n }\n\n private mergeAppBuildManifests(manifests: Iterable<AppBuildManifest>) {\n const manifest: AppBuildManifest = {\n pages: {},\n }\n for (const m of manifests) {\n Object.assign(manifest.pages, m.pages)\n }\n manifest.pages = sortObjectByKey(manifest.pages)\n return manifest\n }\n\n private async writeAppBuildManifest(): Promise<void> {\n const appBuildManifest = this.mergeAppBuildManifests(\n this.appBuildManifests.values()\n )\n const appBuildManifestPath = join(this.distDir, APP_BUILD_MANIFEST)\n deleteCache(appBuildManifestPath)\n await writeFileAtomic(\n appBuildManifestPath,\n JSON.stringify(appBuildManifest, null, 2)\n )\n }\n\n async loadAppPathsManifest(pageName: string): Promise<void> {\n this.appPathsManifests.set(\n getEntryKey('app', 'server', pageName),\n await readPartialManifest(\n this.distDir,\n APP_PATHS_MANIFEST,\n pageName,\n 'app'\n )\n )\n }\n\n private async writeAppPathsManifest(): Promise<void> {\n const appPathsManifest = this.mergePagesManifests(\n this.appPathsManifests.values()\n )\n const appPathsManifestPath = join(\n this.distDir,\n 'server',\n APP_PATHS_MANIFEST\n )\n deleteCache(appPathsManifestPath)\n await writeFileAtomic(\n appPathsManifestPath,\n JSON.stringify(appPathsManifest, null, 2)\n )\n }\n\n private async writeWebpackStats(): Promise<void> {\n const webpackStats = this.mergeWebpackStats(this.webpackStats.values())\n const path = join(this.distDir, 'server', WEBPACK_STATS)\n deleteCache(path)\n await writeFileAtomic(path, JSON.stringify(webpackStats, null, 2))\n }\n\n async loadBuildManifest(\n pageName: string,\n type: 'app' | 'pages' = 'pages'\n ): Promise<void> {\n this.buildManifests.set(\n getEntryKey(type, 'server', pageName),\n await readPartialManifest(this.distDir, BUILD_MANIFEST, pageName, type)\n )\n }\n\n async loadWebpackStats(\n pageName: string,\n type: 'app' | 'pages' = 'pages'\n ): Promise<void> {\n this.webpackStats.set(\n getEntryKey(type, 'client', pageName),\n await readPartialManifest(this.distDir, WEBPACK_STATS, pageName, type)\n )\n }\n\n private mergeWebpackStats(statsFiles: Iterable<WebpackStats>): WebpackStats {\n const entrypoints: Record<string, StatsChunkGroup> = {}\n const assets: Map<string, StatsAsset> = new Map()\n const chunks: Map<string, StatsChunk> = new Map()\n const modules: Map<string | number, StatsModule> = new Map()\n\n for (const statsFile of statsFiles) {\n if (statsFile.entrypoints) {\n for (const [k, v] of Object.entries(statsFile.entrypoints)) {\n if (!entrypoints[k]) {\n entrypoints[k] = v\n }\n }\n }\n\n if (statsFile.assets) {\n for (const asset of statsFile.assets) {\n if (!assets.has(asset.name)) {\n assets.set(asset.name, asset)\n }\n }\n }\n\n if (statsFile.chunks) {\n for (const chunk of statsFile.chunks) {\n if (!chunks.has(chunk.name)) {\n chunks.set(chunk.name, chunk)\n }\n }\n }\n\n if (statsFile.modules) {\n for (const module of statsFile.modules) {\n const id = module.id\n if (id != null) {\n // Merge the chunk list for the module. This can vary across endpoints.\n const existing = modules.get(id)\n if (existing == null) {\n modules.set(id, module)\n } else if (module.chunks != null && existing.chunks != null) {\n for (const chunk of module.chunks) {\n if (!existing.chunks.includes(chunk)) {\n existing.chunks.push(chunk)\n }\n }\n }\n }\n }\n }\n }\n\n return {\n entrypoints,\n assets: [...assets.values()],\n chunks: [...chunks.values()],\n modules: [...modules.values()],\n }\n }\n\n private mergeBuildManifests(manifests: Iterable<BuildManifest>) {\n const manifest: Partial<BuildManifest> & Pick<BuildManifest, 'pages'> = {\n pages: {\n '/_app': [],\n },\n // Something in next.js depends on these to exist even for app dir rendering\n devFiles: [],\n ampDevFiles: [],\n polyfillFiles: [],\n lowPriorityFiles: [\n `static/${this.buildId}/_ssgManifest.js`,\n `static/${this.buildId}/_buildManifest.js`,\n ],\n rootMainFiles: [],\n ampFirstPages: [],\n }\n for (const m of manifests) {\n Object.assign(manifest.pages, m.pages)\n if (m.rootMainFiles.length) manifest.rootMainFiles = m.rootMainFiles\n // polyfillFiles should always be the same, so we can overwrite instead of actually merging\n if (m.polyfillFiles.length) manifest.polyfillFiles = m.polyfillFiles\n }\n manifest.pages = sortObjectByKey(manifest.pages) as BuildManifest['pages']\n return manifest\n }\n\n private async writeBuildManifest(\n entrypoints: Entrypoints,\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): Promise<void> {\n const rewrites = productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n const buildManifest = this.mergeBuildManifests(this.buildManifests.values())\n const buildManifestPath = join(this.distDir, BUILD_MANIFEST)\n const middlewareBuildManifestPath = join(\n this.distDir,\n 'server',\n `${MIDDLEWARE_BUILD_MANIFEST}.js`\n )\n const interceptionRewriteManifestPath = join(\n this.distDir,\n 'server',\n `${INTERCEPTION_ROUTE_REWRITE_MANIFEST}.js`\n )\n deleteCache(buildManifestPath)\n deleteCache(middlewareBuildManifestPath)\n deleteCache(interceptionRewriteManifestPath)\n await writeFileAtomic(\n buildManifestPath,\n JSON.stringify(buildManifest, null, 2)\n )\n await writeFileAtomic(\n middlewareBuildManifestPath,\n // we use globalThis here because middleware can be node\n // which doesn't have \"self\"\n `globalThis.__BUILD_MANIFEST=${JSON.stringify(buildManifest)};`\n )\n\n const interceptionRewrites = JSON.stringify(\n rewrites.beforeFiles.filter(isInterceptionRouteRewrite)\n )\n\n await writeFileAtomic(\n interceptionRewriteManifestPath,\n `self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST=${JSON.stringify(\n interceptionRewrites\n )};`\n )\n\n const pagesKeys = [...entrypoints.page.keys()]\n if (entrypoints.global.app) {\n pagesKeys.push('/_app')\n }\n if (entrypoints.global.error) {\n pagesKeys.push('/_error')\n }\n\n const sortedPageKeys = getSortedRoutes(pagesKeys)\n const content: ClientBuildManifest = {\n __rewrites: normalizeRewritesForBuildManifest(rewrites) as any,\n ...Object.fromEntries(\n sortedPageKeys.map((pathname) => [\n pathname,\n [`static/chunks/pages${pathname === '/' ? '/index' : pathname}.js`],\n ])\n ),\n sortedPages: sortedPageKeys,\n }\n const buildManifestJs = `self.__BUILD_MANIFEST = ${JSON.stringify(\n content\n )};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`\n await writeFileAtomic(\n join(this.distDir, 'static', this.buildId, '_buildManifest.js'),\n buildManifestJs\n )\n await writeFileAtomic(\n join(this.distDir, 'static', this.buildId, '_ssgManifest.js'),\n srcEmptySsgManifest\n )\n }\n\n private async writeClientMiddlewareManifest(): Promise<void> {\n const middlewareManifest = this.mergeMiddlewareManifests(\n this.middlewareManifests.values()\n )\n\n const matchers = middlewareManifest?.middleware['/']?.matchers || []\n\n const clientMiddlewareManifestPath = join(\n this.distDir,\n 'static',\n this.buildId,\n `${TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST}`\n )\n deleteCache(clientMiddlewareManifestPath)\n await writeFileAtomic(\n clientMiddlewareManifestPath,\n JSON.stringify(matchers, null, 2)\n )\n }\n\n private async writeFallbackBuildManifest(): Promise<void> {\n const fallbackBuildManifest = this.mergeBuildManifests(\n [\n this.buildManifests.get(getEntryKey('pages', 'server', '_app')),\n this.buildManifests.get(getEntryKey('pages', 'server', '_error')),\n ].filter(Boolean) as BuildManifest[]\n )\n const fallbackBuildManifestPath = join(\n this.distDir,\n `fallback-${BUILD_MANIFEST}`\n )\n deleteCache(fallbackBuildManifestPath)\n await writeFileAtomic(\n fallbackBuildManifestPath,\n JSON.stringify(fallbackBuildManifest, null, 2)\n )\n }\n\n async loadFontManifest(\n pageName: string,\n type: 'app' | 'pages' = 'pages'\n ): Promise<void> {\n this.fontManifests.set(\n getEntryKey(type, 'server', pageName),\n await readPartialManifest(\n this.distDir,\n `${NEXT_FONT_MANIFEST}.json`,\n pageName,\n type\n )\n )\n }\n\n private mergeFontManifests(manifests: Iterable<NextFontManifest>) {\n const manifest: NextFontManifest = {\n app: {},\n appUsingSizeAdjust: false,\n pages: {},\n pagesUsingSizeAdjust: false,\n }\n for (const m of manifests) {\n Object.assign(manifest.app, m.app)\n Object.assign(manifest.pages, m.pages)\n\n manifest.appUsingSizeAdjust =\n manifest.appUsingSizeAdjust || m.appUsingSizeAdjust\n manifest.pagesUsingSizeAdjust =\n manifest.pagesUsingSizeAdjust || m.pagesUsingSizeAdjust\n }\n manifest.app = sortObjectByKey(manifest.app)\n manifest.pages = sortObjectByKey(manifest.pages)\n return manifest\n }\n\n private async writeNextFontManifest(): Promise<void> {\n const fontManifest = this.mergeFontManifests(this.fontManifests.values())\n const json = JSON.stringify(fontManifest, null, 2)\n\n const fontManifestJsonPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.json`\n )\n const fontManifestJsPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.js`\n )\n deleteCache(fontManifestJsonPath)\n deleteCache(fontManifestJsPath)\n await writeFileAtomic(fontManifestJsonPath, json)\n await writeFileAtomic(\n fontManifestJsPath,\n `self.__NEXT_FONT_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n /**\n * @returns If the manifest was written or not\n */\n async loadMiddlewareManifest(\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation'\n ): Promise<boolean> {\n const middlewareManifestPath = getManifestPath(\n pageName,\n this.distDir,\n MIDDLEWARE_MANIFEST,\n type,\n true\n )\n\n // middlewareManifest is actually \"edge manifest\" and not all routes are edge runtime. If it is not written we skip it.\n if (!existsSync(middlewareManifestPath)) {\n return false\n }\n\n this.middlewareManifests.set(\n getEntryKey(\n type === 'middleware' || type === 'instrumentation' ? 'root' : type,\n 'server',\n pageName\n ),\n await readPartialManifest(\n this.distDir,\n MIDDLEWARE_MANIFEST,\n pageName,\n type\n )\n )\n\n return true\n }\n\n getMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.get(key)\n }\n\n deleteMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.delete(key)\n }\n\n private mergeMiddlewareManifests(\n manifests: Iterable<TurbopackMiddlewareManifest>\n ): MiddlewareManifest {\n const manifest: MiddlewareManifest = {\n version: 3,\n middleware: {},\n sortedMiddleware: [],\n functions: {},\n }\n let instrumentation: InstrumentationDefinition | undefined = undefined\n for (const m of manifests) {\n Object.assign(manifest.functions, m.functions)\n Object.assign(manifest.middleware, m.middleware)\n if (m.instrumentation) {\n instrumentation = m.instrumentation\n }\n }\n manifest.functions = sortObjectByKey(manifest.functions)\n manifest.middleware = sortObjectByKey(manifest.middleware)\n const updateFunctionDefinition = (\n fun: EdgeFunctionDefinition\n ): EdgeFunctionDefinition => {\n return {\n ...fun,\n files: [...(instrumentation?.files ?? []), ...fun.files],\n }\n }\n for (const key of Object.keys(manifest.middleware)) {\n const value = manifest.middleware[key]\n manifest.middleware[key] = updateFunctionDefinition(value)\n }\n for (const key of Object.keys(manifest.functions)) {\n const value = manifest.functions[key]\n manifest.functions[key] = updateFunctionDefinition(value)\n }\n for (const fun of Object.values(manifest.functions).concat(\n Object.values(manifest.middleware)\n )) {\n for (const matcher of fun.matchers) {\n if (!matcher.regexp) {\n matcher.regexp = pathToRegexp(matcher.originalSource, [], {\n delimiter: '/',\n sensitive: false,\n strict: true,\n }).source.replaceAll('\\\\/', '/')\n }\n }\n }\n manifest.sortedMiddleware = Object.keys(manifest.middleware)\n\n return manifest\n }\n\n private async writeMiddlewareManifest(): Promise<void> {\n const middlewareManifest = this.mergeMiddlewareManifests(\n this.middlewareManifests.values()\n )\n\n // Normalize regexes as it uses path-to-regexp\n for (const key in middlewareManifest.middleware) {\n middlewareManifest.middleware[key].matchers.forEach((matcher) => {\n if (!matcher.regexp.startsWith('^')) {\n const parsedPage = tryToParsePath(matcher.regexp)\n if (parsedPage.error || !parsedPage.regexStr) {\n throw new Error(`Invalid source: ${matcher.regexp}`)\n }\n matcher.regexp = parsedPage.regexStr\n }\n })\n }\n\n const middlewareManifestPath = join(\n this.distDir,\n 'server',\n MIDDLEWARE_MANIFEST\n )\n deleteCache(middlewareManifestPath)\n await writeFileAtomic(\n middlewareManifestPath,\n JSON.stringify(middlewareManifest, null, 2)\n )\n }\n\n async loadPagesManifest(pageName: string): Promise<void> {\n this.pagesManifests.set(\n getEntryKey('pages', 'server', pageName),\n await readPartialManifest(this.distDir, PAGES_MANIFEST, pageName)\n )\n }\n\n private mergePagesManifests(manifests: Iterable<PagesManifest>) {\n const manifest: PagesManifest = {}\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private async writePagesManifest(): Promise<void> {\n const pagesManifest = this.mergePagesManifests(this.pagesManifests.values())\n const pagesManifestPath = join(this.distDir, 'server', PAGES_MANIFEST)\n deleteCache(pagesManifestPath)\n await writeFileAtomic(\n pagesManifestPath,\n JSON.stringify(pagesManifest, null, 2)\n )\n }\n\n async writeManifests({\n devRewrites,\n productionRewrites,\n entrypoints,\n }: {\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined\n productionRewrites: CustomRoutes['rewrites'] | undefined\n entrypoints: Entrypoints\n }) {\n await this.writeActionManifest()\n await this.writeAppBuildManifest()\n await this.writeAppPathsManifest()\n await this.writeBuildManifest(entrypoints, devRewrites, productionRewrites)\n await this.writeFallbackBuildManifest()\n await this.writeMiddlewareManifest()\n await this.writeClientMiddlewareManifest()\n await this.writeNextFontManifest()\n await this.writePagesManifest()\n\n if (process.env.TURBOPACK_STATS != null) {\n await this.writeWebpackStats()\n }\n }\n}\n\nfunction sortObjectByKey(obj: Record<string, any>) {\n return Object.keys(obj)\n .sort()\n .reduce(\n (acc, key) => {\n acc[key] = obj[key]\n return acc\n },\n {} as Record<string, any>\n )\n}\n"],"names":["TurbopackManifestLoader","getManifestPath","page","distDir","name","type","firstCall","manifestPath","posix","join","getAssetPathFromRoute","isSitemapRoute","test","existsSync","replace","endsWith","metadataPage","addRouteSuffix","addMetadataIdToRoute","removeRouteSuffix","readPartialManifest","pageName","JSON","parse","readFile","delete","key","actionManifests","appBuildManifests","appPathsManifests","buildManifests","fontManifests","middlewareManifests","pagesManifests","webpackStats","loadActionManifest","set","getEntryKey","SERVER_REFERENCE_MANIFEST","mergeActionManifests","manifests","manifest","node","edge","encryptionKey","mergeActionIds","actionEntries","other","action","workers","layer","Object","assign","m","entry","sortObjectByKey","writeActionManifest","actionManifest","values","actionManifestJsonPath","actionManifestJsPath","json","stringify","deleteCache","writeFileAtomic","loadAppBuildManifest","APP_BUILD_MANIFEST","mergeAppBuildManifests","pages","writeAppBuildManifest","appBuildManifest","appBuildManifestPath","loadAppPathsManifest","APP_PATHS_MANIFEST","writeAppPathsManifest","appPathsManifest","mergePagesManifests","appPathsManifestPath","writeWebpackStats","mergeWebpackStats","path","WEBPACK_STATS","loadBuildManifest","BUILD_MANIFEST","loadWebpackStats","statsFiles","entrypoints","assets","Map","chunks","modules","statsFile","k","v","entries","asset","has","chunk","module","id","existing","get","includes","push","mergeBuildManifests","devFiles","ampDevFiles","polyfillFiles","lowPriorityFiles","buildId","rootMainFiles","ampFirstPages","length","writeBuildManifest","devRewrites","productionRewrites","rewrites","beforeFiles","map","processRoute","afterFiles","fallback","buildManifest","buildManifestPath","middlewareBuildManifestPath","MIDDLEWARE_BUILD_MANIFEST","interceptionRewriteManifestPath","INTERCEPTION_ROUTE_REWRITE_MANIFEST","interceptionRewrites","filter","isInterceptionRouteRewrite","pagesKeys","keys","global","app","error","sortedPageKeys","getSortedRoutes","content","__rewrites","normalizeRewritesForBuildManifest","fromEntries","pathname","sortedPages","buildManifestJs","srcEmptySsgManifest","writeClientMiddlewareManifest","middlewareManifest","mergeMiddlewareManifests","matchers","middleware","clientMiddlewareManifestPath","TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST","writeFallbackBuildManifest","fallbackBuildManifest","Boolean","fallbackBuildManifestPath","loadFontManifest","NEXT_FONT_MANIFEST","mergeFontManifests","appUsingSizeAdjust","pagesUsingSizeAdjust","writeNextFontManifest","fontManifest","fontManifestJsonPath","fontManifestJsPath","loadMiddlewareManifest","middlewareManifestPath","MIDDLEWARE_MANIFEST","getMiddlewareManifest","deleteMiddlewareManifest","version","sortedMiddleware","functions","instrumentation","undefined","updateFunctionDefinition","fun","files","value","concat","matcher","regexp","pathToRegexp","originalSource","delimiter","sensitive","strict","source","replaceAll","writeMiddlewareManifest","forEach","startsWith","parsedPage","tryToParsePath","regexStr","Error","loadPagesManifest","PAGES_MANIFEST","writePagesManifest","pagesManifest","pagesManifestPath","writeManifests","process","env","TURBOPACK_STATS","constructor","obj","sort","reduce","acc"],"mappings":"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"}
|
@@ -58,13 +58,14 @@ type EventBuildOptimized = {
|
|
58
58
|
rewritesWithHasCount: number;
|
59
59
|
redirectsWithHasCount: number;
|
60
60
|
middlewareCount: number;
|
61
|
+
isRspack: boolean;
|
61
62
|
totalAppPagesCount?: number;
|
62
63
|
staticAppPagesCount?: number;
|
63
64
|
serverAppPagesCount?: number;
|
64
65
|
edgeRuntimeAppCount?: number;
|
65
66
|
edgeRuntimePagesCount?: number;
|
66
67
|
};
|
67
|
-
export declare function eventBuildOptimize(pagePaths: string[], event: Omit<EventBuildOptimized, 'totalPageCount' | 'hasDunderPages' | 'hasTestPages'>): {
|
68
|
+
export declare function eventBuildOptimize(pagePaths: string[], event: Omit<EventBuildOptimized, 'totalPageCount' | 'hasDunderPages' | 'hasTestPages' | 'isRspack'>): {
|
68
69
|
eventName: string;
|
69
70
|
payload: EventBuildOptimized;
|
70
71
|
};
|
@@ -87,7 +87,8 @@ function eventBuildOptimize(pagePaths, event) {
|
|
87
87
|
staticAppPagesCount: event.staticAppPagesCount,
|
88
88
|
serverAppPagesCount: event.serverAppPagesCount,
|
89
89
|
edgeRuntimeAppCount: event.edgeRuntimeAppCount,
|
90
|
-
edgeRuntimePagesCount: event.edgeRuntimePagesCount
|
90
|
+
edgeRuntimePagesCount: event.edgeRuntimePagesCount,
|
91
|
+
isRspack: process.env.NEXT_RSPACK !== undefined
|
91
92
|
}
|
92
93
|
};
|
93
94
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/telemetry/events/build.ts"],"sourcesContent":["import type { TelemetryPlugin } from '../../build/webpack/plugins/telemetry-plugin/telemetry-plugin'\nimport type { SWC_TARGET_TRIPLE } from '../../build/webpack/plugins/telemetry-plugin/telemetry-plugin'\nimport type { UseCacheTrackerKey } from '../../build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils'\n\nconst REGEXP_DIRECTORY_DUNDER =\n /[\\\\/]__[^\\\\/]+(?<![\\\\/]__(?:tests|mocks))__[\\\\/]/i\nconst REGEXP_DIRECTORY_TESTS = /[\\\\/]__(tests|mocks)__[\\\\/]/i\nconst REGEXP_FILE_TEST = /\\.(?:spec|test)\\.[^.]+$/i\n\nconst EVENT_TYPE_CHECK_COMPLETED = 'NEXT_TYPE_CHECK_COMPLETED'\ntype EventTypeCheckCompleted = {\n durationInSeconds: number\n typescriptVersion: string | null\n inputFilesCount?: number\n totalFilesCount?: number\n incremental?: boolean\n}\n\nexport function eventTypeCheckCompleted(event: EventTypeCheckCompleted): {\n eventName: string\n payload: EventTypeCheckCompleted\n} {\n return {\n eventName: EVENT_TYPE_CHECK_COMPLETED,\n payload: event,\n }\n}\n\nconst EVENT_LINT_CHECK_COMPLETED = 'NEXT_LINT_CHECK_COMPLETED'\nexport type EventLintCheckCompleted = {\n durationInSeconds: number\n eslintVersion: string | null\n lintedFilesCount?: number\n lintFix?: boolean\n buildLint?: boolean\n nextEslintPluginVersion?: string | null\n nextEslintPluginErrorsCount?: number\n nextEslintPluginWarningsCount?: number\n nextRulesEnabled: {\n [ruleName: `@next/next/${string}`]: 'off' | 'warn' | 'error'\n }\n}\n\nexport function eventLintCheckCompleted(event: EventLintCheckCompleted): {\n eventName: string\n payload: EventLintCheckCompleted\n} {\n return {\n eventName: EVENT_LINT_CHECK_COMPLETED,\n payload: event,\n }\n}\n\nconst EVENT_BUILD_COMPLETED = 'NEXT_BUILD_COMPLETED'\ntype EventBuildCompleted = {\n durationInSeconds: number\n totalPageCount: number\n hasDunderPages: boolean\n hasTestPages: boolean\n totalAppPagesCount?: number\n}\n\nexport function eventBuildCompleted(\n pagePaths: string[],\n event: Omit<\n EventBuildCompleted,\n 'totalPageCount' | 'hasDunderPages' | 'hasTestPages'\n >\n): { eventName: string; payload: EventBuildCompleted } {\n return {\n eventName: EVENT_BUILD_COMPLETED,\n payload: {\n ...event,\n totalPageCount: pagePaths.length,\n hasDunderPages: pagePaths.some((path) =>\n REGEXP_DIRECTORY_DUNDER.test(path)\n ),\n hasTestPages: pagePaths.some(\n (path) =>\n REGEXP_DIRECTORY_TESTS.test(path) || REGEXP_FILE_TEST.test(path)\n ),\n totalAppPagesCount: event.totalAppPagesCount,\n },\n }\n}\n\nconst EVENT_BUILD_OPTIMIZED = 'NEXT_BUILD_OPTIMIZED'\ntype EventBuildOptimized = {\n durationInSeconds: number\n totalPageCount: number\n staticPageCount: number\n staticPropsPageCount: number\n serverPropsPageCount: number\n ssrPageCount: number\n hasDunderPages: boolean\n hasTestPages: boolean\n hasStatic404: boolean\n hasReportWebVitals: boolean\n headersCount: number\n rewritesCount: number\n redirectsCount: number\n headersWithHasCount: number\n rewritesWithHasCount: number\n redirectsWithHasCount: number\n middlewareCount: number\n totalAppPagesCount?: number\n staticAppPagesCount?: number\n serverAppPagesCount?: number\n edgeRuntimeAppCount?: number\n edgeRuntimePagesCount?: number\n}\n\nexport function eventBuildOptimize(\n pagePaths: string[],\n event: Omit<\n EventBuildOptimized,\n 'totalPageCount' | 'hasDunderPages' | 'hasTestPages'\n >\n): { eventName: string; payload: EventBuildOptimized } {\n return {\n eventName: EVENT_BUILD_OPTIMIZED,\n payload: {\n ...event,\n totalPageCount: pagePaths.length,\n hasDunderPages: pagePaths.some((path) =>\n REGEXP_DIRECTORY_DUNDER.test(path)\n ),\n hasTestPages: pagePaths.some(\n (path) =>\n REGEXP_DIRECTORY_TESTS.test(path) || REGEXP_FILE_TEST.test(path)\n ),\n totalAppPagesCount: event.totalAppPagesCount,\n staticAppPagesCount: event.staticAppPagesCount,\n serverAppPagesCount: event.serverAppPagesCount,\n edgeRuntimeAppCount: event.edgeRuntimeAppCount,\n edgeRuntimePagesCount: event.edgeRuntimePagesCount,\n },\n }\n}\n\nexport const EVENT_BUILD_FEATURE_USAGE = 'NEXT_BUILD_FEATURE_USAGE'\nexport type EventBuildFeatureUsage = {\n // NOTE: If you are adding features, make sure to update the `enum` field\n // for `featureName` in https://github.com/vercel/next-telemetry/blob/master/events/v1/featureUsage.ts\n // *before* you make changes here.\n featureName:\n | 'next/image'\n | 'next/legacy/image'\n | 'next/future/image'\n | 'next/script'\n | 'next/dynamic'\n | '@next/font/google'\n | '@next/font/local'\n | 'next/font/google'\n | 'next/font/local'\n | 'experimental/nextScriptWorkers'\n | 'experimental/dynamicIO'\n | 'experimental/optimizeCss'\n | 'experimental/ppr'\n | 'swcLoader'\n | 'swcRelay'\n | 'swcStyledComponents'\n | 'swcReactRemoveProperties'\n | 'swcExperimentalDecorators'\n | 'swcRemoveConsole'\n | 'swcImportSource'\n | 'swcEmotion'\n | `swc/target/${SWC_TARGET_TRIPLE}`\n | 'turbotrace'\n | 'build-lint'\n | 'vercelImageGeneration'\n | 'transpilePackages'\n | 'skipMiddlewareUrlNormalize'\n | 'skipTrailingSlashRedirect'\n | 'modularizeImports'\n | 'esmExternals'\n | 'webpackPlugins'\n | UseCacheTrackerKey\n invocationCount: number\n}\nexport function eventBuildFeatureUsage(\n usages: ReturnType<TelemetryPlugin['usages']>\n): Array<{ eventName: string; payload: EventBuildFeatureUsage }> {\n return usages.map(({ featureName, invocationCount }) => ({\n eventName: EVENT_BUILD_FEATURE_USAGE,\n payload: {\n featureName,\n invocationCount,\n },\n }))\n}\n\nexport const EVENT_NAME_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS =\n 'NEXT_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS'\n\nexport type EventPackageUsedInGetServerSideProps = {\n package: string\n}\n\nexport function eventPackageUsedInGetServerSideProps(\n packagesUsedInServerSideProps: ReturnType<\n TelemetryPlugin['packagesUsedInServerSideProps']\n >\n): Array<{ eventName: string; payload: EventPackageUsedInGetServerSideProps }> {\n return packagesUsedInServerSideProps.map((packageName) => ({\n eventName: EVENT_NAME_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS,\n payload: {\n package: packageName,\n },\n }))\n}\n"],"names":["EVENT_BUILD_FEATURE_USAGE","EVENT_NAME_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS","eventBuildCompleted","eventBuildFeatureUsage","eventBuildOptimize","eventLintCheckCompleted","eventPackageUsedInGetServerSideProps","eventTypeCheckCompleted","REGEXP_DIRECTORY_DUNDER","REGEXP_DIRECTORY_TESTS","REGEXP_FILE_TEST","EVENT_TYPE_CHECK_COMPLETED","event","eventName","payload","EVENT_LINT_CHECK_COMPLETED","EVENT_BUILD_COMPLETED","pagePaths","totalPageCount","length","hasDunderPages","some","path","test","hasTestPages","totalAppPagesCount","EVENT_BUILD_OPTIMIZED","staticAppPagesCount","serverAppPagesCount","edgeRuntimeAppCount","edgeRuntimePagesCount","usages","map","featureName","invocationCount","packagesUsedInServerSideProps","packageName","package"],"mappings":";;;;;;;;;;;;;;;;;;;;;
|
1
|
+
{"version":3,"sources":["../../../src/telemetry/events/build.ts"],"sourcesContent":["import type { TelemetryPlugin } from '../../build/webpack/plugins/telemetry-plugin/telemetry-plugin'\nimport type { SWC_TARGET_TRIPLE } from '../../build/webpack/plugins/telemetry-plugin/telemetry-plugin'\nimport type { UseCacheTrackerKey } from '../../build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils'\n\nconst REGEXP_DIRECTORY_DUNDER =\n /[\\\\/]__[^\\\\/]+(?<![\\\\/]__(?:tests|mocks))__[\\\\/]/i\nconst REGEXP_DIRECTORY_TESTS = /[\\\\/]__(tests|mocks)__[\\\\/]/i\nconst REGEXP_FILE_TEST = /\\.(?:spec|test)\\.[^.]+$/i\n\nconst EVENT_TYPE_CHECK_COMPLETED = 'NEXT_TYPE_CHECK_COMPLETED'\ntype EventTypeCheckCompleted = {\n durationInSeconds: number\n typescriptVersion: string | null\n inputFilesCount?: number\n totalFilesCount?: number\n incremental?: boolean\n}\n\nexport function eventTypeCheckCompleted(event: EventTypeCheckCompleted): {\n eventName: string\n payload: EventTypeCheckCompleted\n} {\n return {\n eventName: EVENT_TYPE_CHECK_COMPLETED,\n payload: event,\n }\n}\n\nconst EVENT_LINT_CHECK_COMPLETED = 'NEXT_LINT_CHECK_COMPLETED'\nexport type EventLintCheckCompleted = {\n durationInSeconds: number\n eslintVersion: string | null\n lintedFilesCount?: number\n lintFix?: boolean\n buildLint?: boolean\n nextEslintPluginVersion?: string | null\n nextEslintPluginErrorsCount?: number\n nextEslintPluginWarningsCount?: number\n nextRulesEnabled: {\n [ruleName: `@next/next/${string}`]: 'off' | 'warn' | 'error'\n }\n}\n\nexport function eventLintCheckCompleted(event: EventLintCheckCompleted): {\n eventName: string\n payload: EventLintCheckCompleted\n} {\n return {\n eventName: EVENT_LINT_CHECK_COMPLETED,\n payload: event,\n }\n}\n\nconst EVENT_BUILD_COMPLETED = 'NEXT_BUILD_COMPLETED'\ntype EventBuildCompleted = {\n durationInSeconds: number\n totalPageCount: number\n hasDunderPages: boolean\n hasTestPages: boolean\n totalAppPagesCount?: number\n}\n\nexport function eventBuildCompleted(\n pagePaths: string[],\n event: Omit<\n EventBuildCompleted,\n 'totalPageCount' | 'hasDunderPages' | 'hasTestPages'\n >\n): { eventName: string; payload: EventBuildCompleted } {\n return {\n eventName: EVENT_BUILD_COMPLETED,\n payload: {\n ...event,\n totalPageCount: pagePaths.length,\n hasDunderPages: pagePaths.some((path) =>\n REGEXP_DIRECTORY_DUNDER.test(path)\n ),\n hasTestPages: pagePaths.some(\n (path) =>\n REGEXP_DIRECTORY_TESTS.test(path) || REGEXP_FILE_TEST.test(path)\n ),\n totalAppPagesCount: event.totalAppPagesCount,\n },\n }\n}\n\nconst EVENT_BUILD_OPTIMIZED = 'NEXT_BUILD_OPTIMIZED'\ntype EventBuildOptimized = {\n durationInSeconds: number\n totalPageCount: number\n staticPageCount: number\n staticPropsPageCount: number\n serverPropsPageCount: number\n ssrPageCount: number\n hasDunderPages: boolean\n hasTestPages: boolean\n hasStatic404: boolean\n hasReportWebVitals: boolean\n headersCount: number\n rewritesCount: number\n redirectsCount: number\n headersWithHasCount: number\n rewritesWithHasCount: number\n redirectsWithHasCount: number\n middlewareCount: number\n isRspack: boolean\n totalAppPagesCount?: number\n staticAppPagesCount?: number\n serverAppPagesCount?: number\n edgeRuntimeAppCount?: number\n edgeRuntimePagesCount?: number\n}\n\nexport function eventBuildOptimize(\n pagePaths: string[],\n event: Omit<\n EventBuildOptimized,\n 'totalPageCount' | 'hasDunderPages' | 'hasTestPages' | 'isRspack'\n >\n): { eventName: string; payload: EventBuildOptimized } {\n return {\n eventName: EVENT_BUILD_OPTIMIZED,\n payload: {\n ...event,\n totalPageCount: pagePaths.length,\n hasDunderPages: pagePaths.some((path) =>\n REGEXP_DIRECTORY_DUNDER.test(path)\n ),\n hasTestPages: pagePaths.some(\n (path) =>\n REGEXP_DIRECTORY_TESTS.test(path) || REGEXP_FILE_TEST.test(path)\n ),\n totalAppPagesCount: event.totalAppPagesCount,\n staticAppPagesCount: event.staticAppPagesCount,\n serverAppPagesCount: event.serverAppPagesCount,\n edgeRuntimeAppCount: event.edgeRuntimeAppCount,\n edgeRuntimePagesCount: event.edgeRuntimePagesCount,\n isRspack: process.env.NEXT_RSPACK !== undefined,\n },\n }\n}\n\nexport const EVENT_BUILD_FEATURE_USAGE = 'NEXT_BUILD_FEATURE_USAGE'\nexport type EventBuildFeatureUsage = {\n // NOTE: If you are adding features, make sure to update the `enum` field\n // for `featureName` in https://github.com/vercel/next-telemetry/blob/master/events/v1/featureUsage.ts\n // *before* you make changes here.\n featureName:\n | 'next/image'\n | 'next/legacy/image'\n | 'next/future/image'\n | 'next/script'\n | 'next/dynamic'\n | '@next/font/google'\n | '@next/font/local'\n | 'next/font/google'\n | 'next/font/local'\n | 'experimental/nextScriptWorkers'\n | 'experimental/dynamicIO'\n | 'experimental/optimizeCss'\n | 'experimental/ppr'\n | 'swcLoader'\n | 'swcRelay'\n | 'swcStyledComponents'\n | 'swcReactRemoveProperties'\n | 'swcExperimentalDecorators'\n | 'swcRemoveConsole'\n | 'swcImportSource'\n | 'swcEmotion'\n | `swc/target/${SWC_TARGET_TRIPLE}`\n | 'turbotrace'\n | 'build-lint'\n | 'vercelImageGeneration'\n | 'transpilePackages'\n | 'skipMiddlewareUrlNormalize'\n | 'skipTrailingSlashRedirect'\n | 'modularizeImports'\n | 'esmExternals'\n | 'webpackPlugins'\n | UseCacheTrackerKey\n invocationCount: number\n}\nexport function eventBuildFeatureUsage(\n usages: ReturnType<TelemetryPlugin['usages']>\n): Array<{ eventName: string; payload: EventBuildFeatureUsage }> {\n return usages.map(({ featureName, invocationCount }) => ({\n eventName: EVENT_BUILD_FEATURE_USAGE,\n payload: {\n featureName,\n invocationCount,\n },\n }))\n}\n\nexport const EVENT_NAME_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS =\n 'NEXT_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS'\n\nexport type EventPackageUsedInGetServerSideProps = {\n package: string\n}\n\nexport function eventPackageUsedInGetServerSideProps(\n packagesUsedInServerSideProps: ReturnType<\n TelemetryPlugin['packagesUsedInServerSideProps']\n >\n): Array<{ eventName: string; payload: EventPackageUsedInGetServerSideProps }> {\n return packagesUsedInServerSideProps.map((packageName) => ({\n eventName: EVENT_NAME_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS,\n payload: {\n package: packageName,\n },\n }))\n}\n"],"names":["EVENT_BUILD_FEATURE_USAGE","EVENT_NAME_PACKAGE_USED_IN_GET_SERVER_SIDE_PROPS","eventBuildCompleted","eventBuildFeatureUsage","eventBuildOptimize","eventLintCheckCompleted","eventPackageUsedInGetServerSideProps","eventTypeCheckCompleted","REGEXP_DIRECTORY_DUNDER","REGEXP_DIRECTORY_TESTS","REGEXP_FILE_TEST","EVENT_TYPE_CHECK_COMPLETED","event","eventName","payload","EVENT_LINT_CHECK_COMPLETED","EVENT_BUILD_COMPLETED","pagePaths","totalPageCount","length","hasDunderPages","some","path","test","hasTestPages","totalAppPagesCount","EVENT_BUILD_OPTIMIZED","staticAppPagesCount","serverAppPagesCount","edgeRuntimeAppCount","edgeRuntimePagesCount","isRspack","process","env","NEXT_RSPACK","undefined","usages","map","featureName","invocationCount","packagesUsedInServerSideProps","packageName","package"],"mappings":";;;;;;;;;;;;;;;;;;;;;IA8IaA,yBAAyB;eAAzBA;;IAoDAC,gDAAgD;eAAhDA;;IApIGC,mBAAmB;eAAnBA;;IAwHAC,sBAAsB;eAAtBA;;IArEAC,kBAAkB;eAAlBA;;IAtEAC,uBAAuB;eAAvBA;;IA8JAC,oCAAoC;eAApCA;;IAvLAC,uBAAuB;eAAvBA;;;AAdhB,MAAMC,0BACJ;AACF,MAAMC,yBAAyB;AAC/B,MAAMC,mBAAmB;AAEzB,MAAMC,6BAA6B;AAS5B,SAASJ,wBAAwBK,KAA8B;IAIpE,OAAO;QACLC,WAAWF;QACXG,SAASF;IACX;AACF;AAEA,MAAMG,6BAA6B;AAe5B,SAASV,wBAAwBO,KAA8B;IAIpE,OAAO;QACLC,WAAWE;QACXD,SAASF;IACX;AACF;AAEA,MAAMI,wBAAwB;AASvB,SAASd,oBACde,SAAmB,EACnBL,KAGC;IAED,OAAO;QACLC,WAAWG;QACXF,SAAS;YACP,GAAGF,KAAK;YACRM,gBAAgBD,UAAUE,MAAM;YAChCC,gBAAgBH,UAAUI,IAAI,CAAC,CAACC,OAC9Bd,wBAAwBe,IAAI,CAACD;YAE/BE,cAAcP,UAAUI,IAAI,CAC1B,CAACC,OACCb,uBAAuBc,IAAI,CAACD,SAASZ,iBAAiBa,IAAI,CAACD;YAE/DG,oBAAoBb,MAAMa,kBAAkB;QAC9C;IACF;AACF;AAEA,MAAMC,wBAAwB;AA2BvB,SAAStB,mBACda,SAAmB,EACnBL,KAGC;IAED,OAAO;QACLC,WAAWa;QACXZ,SAAS;YACP,GAAGF,KAAK;YACRM,gBAAgBD,UAAUE,MAAM;YAChCC,gBAAgBH,UAAUI,IAAI,CAAC,CAACC,OAC9Bd,wBAAwBe,IAAI,CAACD;YAE/BE,cAAcP,UAAUI,IAAI,CAC1B,CAACC,OACCb,uBAAuBc,IAAI,CAACD,SAASZ,iBAAiBa,IAAI,CAACD;YAE/DG,oBAAoBb,MAAMa,kBAAkB;YAC5CE,qBAAqBf,MAAMe,mBAAmB;YAC9CC,qBAAqBhB,MAAMgB,mBAAmB;YAC9CC,qBAAqBjB,MAAMiB,mBAAmB;YAC9CC,uBAAuBlB,MAAMkB,qBAAqB;YAClDC,UAAUC,QAAQC,GAAG,CAACC,WAAW,KAAKC;QACxC;IACF;AACF;AAEO,MAAMnC,4BAA4B;AAwClC,SAASG,uBACdiC,MAA6C;IAE7C,OAAOA,OAAOC,GAAG,CAAC,CAAC,EAAEC,WAAW,EAAEC,eAAe,EAAE,GAAM,CAAA;YACvD1B,WAAWb;YACXc,SAAS;gBACPwB;gBACAC;YACF;QACF,CAAA;AACF;AAEO,MAAMtC,mDACX;AAMK,SAASK,qCACdkC,6BAEC;IAED,OAAOA,8BAA8BH,GAAG,CAAC,CAACI,cAAiB,CAAA;YACzD5B,WAAWZ;YACXa,SAAS;gBACP4B,SAASD;YACX;QACF,CAAA;AACF"}
|
@@ -6,8 +6,9 @@ export type EventCliSessionStopped = {
|
|
6
6
|
durationMilliseconds?: number | null;
|
7
7
|
pagesDir?: boolean;
|
8
8
|
appDir?: boolean;
|
9
|
+
isRspack: boolean;
|
9
10
|
};
|
10
|
-
export declare function eventCliSessionStopped(event: Omit<EventCliSessionStopped, 'nextVersion' | 'nodeVersion'>): {
|
11
|
+
export declare function eventCliSessionStopped(event: Omit<EventCliSessionStopped, 'nextVersion' | 'nodeVersion' | 'isRspack'>): {
|
11
12
|
eventName: string;
|
12
13
|
payload: EventCliSessionStopped;
|
13
14
|
}[];
|