next 15.2.0-canary.50 → 15.2.0-canary.52

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.

Files changed (91) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/index.js +2 -2
  3. package/dist/build/load-jsconfig.d.ts +1 -0
  4. package/dist/build/load-jsconfig.js +2 -1
  5. package/dist/build/load-jsconfig.js.map +1 -1
  6. package/dist/build/swc/index.js +1 -1
  7. package/dist/build/webpack-config.d.ts +3 -1
  8. package/dist/build/webpack-config.js +44 -23
  9. package/dist/build/webpack-config.js.map +1 -1
  10. package/dist/client/app-bootstrap.js +1 -1
  11. package/dist/client/components/errors/attach-hydration-error-state.js +37 -24
  12. package/dist/client/components/errors/attach-hydration-error-state.js.map +1 -1
  13. package/dist/client/components/errors/hydration-error-info.js +86 -19
  14. package/dist/client/components/errors/hydration-error-info.js.map +1 -1
  15. package/dist/client/components/is-hydration-error.d.ts +1 -0
  16. package/dist/client/components/is-hydration-error.js +41 -3
  17. package/dist/client/components/is-hydration-error.js.map +1 -1
  18. package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.js +1 -2
  19. package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.js.map +1 -1
  20. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.d.ts +1 -56
  21. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.js +4 -240
  22. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.js.map +1 -1
  23. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.stories.js +0 -21
  24. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.stories.js.map +1 -1
  25. package/dist/client/components/react-dev-overlay/hydration-diff/diff-view.d.ts +54 -0
  26. package/dist/client/components/react-dev-overlay/hydration-diff/diff-view.js +101 -0
  27. package/dist/client/components/react-dev-overlay/hydration-diff/diff-view.js.map +1 -0
  28. package/dist/client/components/react-dev-overlay/internal/container/Errors.js +1 -2
  29. package/dist/client/components/react-dev-overlay/internal/container/Errors.js.map +1 -1
  30. package/dist/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.d.ts +2 -56
  31. package/dist/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js +28 -227
  32. package/dist/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js.map +1 -1
  33. package/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js +1 -1
  34. package/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js.map +1 -1
  35. package/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js +3 -1
  36. package/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js.map +1 -1
  37. package/dist/client/index.js +1 -1
  38. package/dist/compiled/next-server/app-page-experimental.runtime.dev.js +2 -2
  39. package/dist/compiled/next-server/app-page-experimental.runtime.dev.js.map +1 -1
  40. package/dist/compiled/next-server/app-page.runtime.dev.js +2 -2
  41. package/dist/compiled/next-server/app-page.runtime.dev.js.map +1 -1
  42. package/dist/compiled/next-server/server.runtime.prod.js +6 -6
  43. package/dist/compiled/next-server/server.runtime.prod.js.map +1 -1
  44. package/dist/esm/build/index.js +2 -2
  45. package/dist/esm/build/load-jsconfig.js +2 -1
  46. package/dist/esm/build/load-jsconfig.js.map +1 -1
  47. package/dist/esm/build/swc/index.js +1 -1
  48. package/dist/esm/build/webpack-config.js +44 -23
  49. package/dist/esm/build/webpack-config.js.map +1 -1
  50. package/dist/esm/client/app-bootstrap.js +1 -1
  51. package/dist/esm/client/components/errors/attach-hydration-error-state.js +38 -25
  52. package/dist/esm/client/components/errors/attach-hydration-error-state.js.map +1 -1
  53. package/dist/esm/client/components/errors/hydration-error-info.js +87 -20
  54. package/dist/esm/client/components/errors/hydration-error-info.js.map +1 -1
  55. package/dist/esm/client/components/is-hydration-error.js +36 -2
  56. package/dist/esm/client/components/is-hydration-error.js.map +1 -1
  57. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/errors.js +1 -2
  58. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/errors.js.map +1 -1
  59. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.js +3 -287
  60. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.js.map +1 -1
  61. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.stories.js +0 -21
  62. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.stories.js.map +1 -1
  63. package/dist/esm/client/components/react-dev-overlay/hydration-diff/diff-view.js +132 -0
  64. package/dist/esm/client/components/react-dev-overlay/hydration-diff/diff-view.js.map +1 -0
  65. package/dist/esm/client/components/react-dev-overlay/internal/container/Errors.js +1 -2
  66. package/dist/esm/client/components/react-dev-overlay/internal/container/Errors.js.map +1 -1
  67. package/dist/esm/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js +12 -271
  68. package/dist/esm/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js.map +1 -1
  69. package/dist/esm/client/components/react-dev-overlay/internal/container/RuntimeError/index.js +1 -1
  70. package/dist/esm/client/components/react-dev-overlay/internal/container/RuntimeError/index.js.map +1 -1
  71. package/dist/esm/client/components/react-dev-overlay/internal/styles/ComponentStyles.js +3 -1
  72. package/dist/esm/client/components/react-dev-overlay/internal/styles/ComponentStyles.js.map +1 -1
  73. package/dist/esm/client/index.js +1 -1
  74. package/dist/esm/lib/metadata/metadata.js +2 -2
  75. package/dist/esm/lib/metadata/metadata.js.map +1 -1
  76. package/dist/esm/server/config.js +1 -1
  77. package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
  78. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  79. package/dist/esm/server/lib/app-info-log.js +1 -1
  80. package/dist/esm/server/lib/start-server.js +1 -1
  81. package/dist/lib/metadata/metadata.js +2 -2
  82. package/dist/lib/metadata/metadata.js.map +1 -1
  83. package/dist/server/config.js +1 -1
  84. package/dist/server/dev/hot-reloader-turbopack.js +1 -1
  85. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  86. package/dist/server/lib/app-info-log.js +1 -1
  87. package/dist/server/lib/start-server.js +1 -1
  88. package/dist/telemetry/anonymous-meta.js +1 -1
  89. package/dist/telemetry/events/session-stopped.js +2 -2
  90. package/dist/telemetry/events/version.js +2 -2
  91. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/metadata/metadata.tsx"],"sourcesContent":["import type { ParsedUrlQuery } from 'querystring'\nimport type { GetDynamicParamFromSegment } from '../../server/app-render/app-render'\nimport type { LoaderTree } from '../../server/lib/app-dir-module'\nimport type { CreateServerParamsForMetadata } from '../../server/request/params'\n\nimport { Suspense, cache, cloneElement } from 'react'\nimport {\n AppleWebAppMeta,\n FormatDetectionMeta,\n ItunesMeta,\n BasicMeta,\n ViewportMeta,\n VerificationMeta,\n FacebookMeta,\n} from './generate/basic'\nimport { AlternatesMetadata } from './generate/alternate'\nimport {\n OpenGraphMetadata,\n TwitterMetadata,\n AppLinksMeta,\n} from './generate/opengraph'\nimport { IconsMetadata } from './generate/icons'\nimport {\n type MetadataErrorType,\n resolveMetadata,\n resolveViewport,\n} from './resolve-metadata'\nimport { MetaFilter } from './generate/meta'\nimport type {\n ResolvedMetadata,\n ResolvedViewport,\n} from './types/metadata-interface'\nimport { isHTTPAccessFallbackError } from '../../client/components/http-access-fallback/http-access-fallback'\nimport type { MetadataContext } from './types/resolvers'\nimport type { WorkStore } from '../../server/app-render/work-async-storage.external'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n} from './metadata-constants'\nimport { AsyncMetadata } from './async-metadata'\nimport { isPostpone } from '../../server/lib/router-utils/is-postpone'\n\n// Use a promise to share the status of the metadata resolving,\n// returning two components `MetadataTree` and `MetadataOutlet`\n// `MetadataTree` is the one that will be rendered at first in the content sequence for metadata tags.\n// `MetadataOutlet` is the one that will be rendered under error boundaries for metadata resolving errors.\n// In this way we can let the metadata tags always render successfully,\n// and the error will be caught by the error boundary and trigger fallbacks.\nexport function createMetadataComponents({\n tree,\n searchParams,\n metadataContext,\n getDynamicParamFromSegment,\n appUsingSizeAdjustment,\n errorType,\n createServerParamsForMetadata,\n workStore,\n MetadataBoundary,\n ViewportBoundary,\n serveStreamingMetadata,\n}: {\n tree: LoaderTree\n searchParams: Promise<ParsedUrlQuery>\n metadataContext: MetadataContext\n getDynamicParamFromSegment: GetDynamicParamFromSegment\n appUsingSizeAdjustment: boolean\n errorType?: MetadataErrorType | 'redirect'\n createServerParamsForMetadata: CreateServerParamsForMetadata\n workStore: WorkStore\n MetadataBoundary: (props: { children: React.ReactNode }) => React.ReactNode\n ViewportBoundary: (props: { children: React.ReactNode }) => React.ReactNode\n serveStreamingMetadata: boolean\n}): {\n MetadataTree: React.ComponentType\n ViewportTree: React.ComponentType\n getMetadataReady: () => Promise<void>\n getViewportReady: () => Promise<void>\n} {\n function ViewportTree() {\n return (\n <>\n <ViewportBoundary>\n <Viewport />\n </ViewportBoundary>\n {/* This meta tag is for next/font which is still required to be blocking. */}\n {appUsingSizeAdjustment ? (\n <meta name=\"next-size-adjust\" content=\"\" />\n ) : null}\n </>\n )\n }\n\n function MetadataTree() {\n return (\n <MetadataBoundary>\n <Metadata />\n </MetadataBoundary>\n )\n }\n\n function viewport() {\n return getResolvedViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n errorType\n )\n }\n\n async function Viewport() {\n try {\n return await viewport()\n } catch (error) {\n if (!errorType && isHTTPAccessFallbackError(error)) {\n try {\n return await getNotFoundViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore\n )\n } catch {}\n }\n // We don't actually want to error in this component. We will\n // also error in the MetadataOutlet which causes the error to\n // bubble from the right position in the page to be caught by the\n // appropriate boundaries\n return null\n }\n }\n Viewport.displayName = VIEWPORT_BOUNDARY_NAME\n\n function metadata() {\n return getResolvedMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore,\n errorType\n )\n }\n\n async function resolveFinalMetadata() {\n try {\n return await metadata()\n } catch (metadataErr) {\n if (!errorType && isHTTPAccessFallbackError(metadataErr)) {\n try {\n return await getNotFoundMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore\n )\n } catch (notFoundMetadataErr) {\n // In PPR rendering we still need to throw the postpone error.\n // If metadata is postponed, React needs to be aware of the location of error.\n if (isPostpone(notFoundMetadataErr)) {\n throw notFoundMetadataErr\n }\n }\n }\n // In PPR rendering we still need to throw the postpone error.\n // If metadata is postponed, React needs to be aware of the location of error.\n if (isPostpone(metadataErr)) {\n throw metadataErr\n }\n // We don't actually want to error in this component. We will\n // also error in the MetadataOutlet which causes the error to\n // bubble from the right position in the page to be caught by the\n // appropriate boundaries\n return null\n }\n }\n async function Metadata() {\n const promise = resolveFinalMetadata()\n if (serveStreamingMetadata) {\n return (\n <Suspense fallback={null}>\n <AsyncMetadata promise={promise} />\n </Suspense>\n )\n }\n return await promise\n }\n\n Metadata.displayName = METADATA_BOUNDARY_NAME\n\n async function getMetadataReady(): Promise<void> {\n // Only warm up metadata() call when it's blocking metadata,\n // otherwise it will be fully managed by AsyncMetadata component.\n if (!serveStreamingMetadata) {\n await metadata()\n }\n return undefined\n }\n\n async function getViewportReady(): Promise<void> {\n await viewport()\n return undefined\n }\n\n return {\n ViewportTree,\n MetadataTree,\n getViewportReady,\n getMetadataReady,\n }\n}\n\nconst getResolvedMetadata = cache(getResolvedMetadataImpl)\nasync function getResolvedMetadataImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n metadataContext: MetadataContext,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorType?: MetadataErrorType | 'redirect'\n): Promise<React.ReactNode> {\n const errorConvention = errorType === 'redirect' ? undefined : errorType\n return renderMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore,\n errorConvention\n )\n}\n\nconst getNotFoundMetadata = cache(getNotFoundMetadataImpl)\nasync function getNotFoundMetadataImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n metadataContext: MetadataContext,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore\n): Promise<React.ReactNode> {\n const notFoundErrorConvention = 'not-found'\n return renderMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore,\n notFoundErrorConvention\n )\n}\n\nconst getResolvedViewport = cache(getResolvedViewportImpl)\nasync function getResolvedViewportImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorType?: MetadataErrorType | 'redirect'\n): Promise<React.ReactNode> {\n const errorConvention = errorType === 'redirect' ? undefined : errorType\n return renderViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n errorConvention\n )\n}\n\nconst getNotFoundViewport = cache(getNotFoundViewportImpl)\nasync function getNotFoundViewportImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore\n): Promise<React.ReactNode> {\n const notFoundErrorConvention = 'not-found'\n return renderViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n notFoundErrorConvention\n )\n}\n\nasync function renderMetadata(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n metadataContext: MetadataContext,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorConvention?: MetadataErrorType\n) {\n const resolvedMetadata = await resolveMetadata(\n tree,\n searchParams,\n errorConvention,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n metadataContext\n )\n const elements: Array<React.ReactNode> =\n createMetadataElements(resolvedMetadata)\n return (\n <>\n {elements.map((el, index) => {\n return cloneElement(el as React.ReactElement, { key: index })\n })}\n </>\n )\n}\n\nasync function renderViewport(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorConvention?: MetadataErrorType\n) {\n const notFoundResolvedViewport = await resolveViewport(\n tree,\n searchParams,\n errorConvention,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore\n )\n\n const elements: Array<React.ReactNode> = createViewportElements(\n notFoundResolvedViewport\n )\n return (\n <>\n {elements.map((el, index) => {\n return cloneElement(el as React.ReactElement, { key: index })\n })}\n </>\n )\n}\n\nfunction createMetadataElements(metadata: ResolvedMetadata) {\n return MetaFilter([\n BasicMeta({ metadata }),\n AlternatesMetadata({ alternates: metadata.alternates }),\n ItunesMeta({ itunes: metadata.itunes }),\n FacebookMeta({ facebook: metadata.facebook }),\n FormatDetectionMeta({ formatDetection: metadata.formatDetection }),\n VerificationMeta({ verification: metadata.verification }),\n AppleWebAppMeta({ appleWebApp: metadata.appleWebApp }),\n OpenGraphMetadata({ openGraph: metadata.openGraph }),\n TwitterMetadata({ twitter: metadata.twitter }),\n AppLinksMeta({ appLinks: metadata.appLinks }),\n IconsMetadata({ icons: metadata.icons }),\n ])\n}\n\nfunction createViewportElements(viewport: ResolvedViewport) {\n return MetaFilter([ViewportMeta({ viewport: viewport })])\n}\n"],"names":["Suspense","cache","cloneElement","AppleWebAppMeta","FormatDetectionMeta","ItunesMeta","BasicMeta","ViewportMeta","VerificationMeta","FacebookMeta","AlternatesMetadata","OpenGraphMetadata","TwitterMetadata","AppLinksMeta","IconsMetadata","resolveMetadata","resolveViewport","MetaFilter","isHTTPAccessFallbackError","METADATA_BOUNDARY_NAME","VIEWPORT_BOUNDARY_NAME","AsyncMetadata","isPostpone","createMetadataComponents","tree","searchParams","metadataContext","getDynamicParamFromSegment","appUsingSizeAdjustment","errorType","createServerParamsForMetadata","workStore","MetadataBoundary","ViewportBoundary","serveStreamingMetadata","ViewportTree","Viewport","meta","name","content","MetadataTree","Metadata","viewport","getResolvedViewport","error","getNotFoundViewport","displayName","metadata","getResolvedMetadata","resolveFinalMetadata","metadataErr","getNotFoundMetadata","notFoundMetadataErr","promise","fallback","getMetadataReady","undefined","getViewportReady","getResolvedMetadataImpl","errorConvention","renderMetadata","getNotFoundMetadataImpl","notFoundErrorConvention","getResolvedViewportImpl","renderViewport","getNotFoundViewportImpl","resolvedMetadata","elements","createMetadataElements","map","el","index","key","notFoundResolvedViewport","createViewportElements","alternates","itunes","facebook","formatDetection","verification","appleWebApp","openGraph","twitter","appLinks","icons"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/lib/metadata/metadata.tsx"],"sourcesContent":["import type { ParsedUrlQuery } from 'querystring'\nimport type { GetDynamicParamFromSegment } from '../../server/app-render/app-render'\nimport type { LoaderTree } from '../../server/lib/app-dir-module'\nimport type { CreateServerParamsForMetadata } from '../../server/request/params'\n\nimport { Suspense, cache, cloneElement } from 'react'\nimport {\n AppleWebAppMeta,\n FormatDetectionMeta,\n ItunesMeta,\n BasicMeta,\n ViewportMeta,\n VerificationMeta,\n FacebookMeta,\n} from './generate/basic'\nimport { AlternatesMetadata } from './generate/alternate'\nimport {\n OpenGraphMetadata,\n TwitterMetadata,\n AppLinksMeta,\n} from './generate/opengraph'\nimport { IconsMetadata } from './generate/icons'\nimport {\n type MetadataErrorType,\n resolveMetadata,\n resolveViewport,\n} from './resolve-metadata'\nimport { MetaFilter } from './generate/meta'\nimport type {\n ResolvedMetadata,\n ResolvedViewport,\n} from './types/metadata-interface'\nimport { isHTTPAccessFallbackError } from '../../client/components/http-access-fallback/http-access-fallback'\nimport type { MetadataContext } from './types/resolvers'\nimport type { WorkStore } from '../../server/app-render/work-async-storage.external'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n} from './metadata-constants'\nimport { AsyncMetadata } from './async-metadata'\nimport { isPostpone } from '../../server/lib/router-utils/is-postpone'\n\n// Use a promise to share the status of the metadata resolving,\n// returning two components `MetadataTree` and `MetadataOutlet`\n// `MetadataTree` is the one that will be rendered at first in the content sequence for metadata tags.\n// `MetadataOutlet` is the one that will be rendered under error boundaries for metadata resolving errors.\n// In this way we can let the metadata tags always render successfully,\n// and the error will be caught by the error boundary and trigger fallbacks.\nexport function createMetadataComponents({\n tree,\n searchParams,\n metadataContext,\n getDynamicParamFromSegment,\n appUsingSizeAdjustment,\n errorType,\n createServerParamsForMetadata,\n workStore,\n MetadataBoundary,\n ViewportBoundary,\n serveStreamingMetadata,\n}: {\n tree: LoaderTree\n searchParams: Promise<ParsedUrlQuery>\n metadataContext: MetadataContext\n getDynamicParamFromSegment: GetDynamicParamFromSegment\n appUsingSizeAdjustment: boolean\n errorType?: MetadataErrorType | 'redirect'\n createServerParamsForMetadata: CreateServerParamsForMetadata\n workStore: WorkStore\n MetadataBoundary: (props: { children: React.ReactNode }) => React.ReactNode\n ViewportBoundary: (props: { children: React.ReactNode }) => React.ReactNode\n serveStreamingMetadata: boolean\n}): {\n MetadataTree: React.ComponentType\n ViewportTree: React.ComponentType\n getMetadataReady: () => Promise<void>\n getViewportReady: () => Promise<void>\n} {\n function ViewportTree() {\n return (\n <>\n <ViewportBoundary>\n <Viewport />\n </ViewportBoundary>\n {/* This meta tag is for next/font which is still required to be blocking. */}\n {appUsingSizeAdjustment ? (\n <meta name=\"next-size-adjust\" content=\"\" />\n ) : null}\n </>\n )\n }\n\n function MetadataTree() {\n return (\n <MetadataBoundary>\n <Metadata />\n </MetadataBoundary>\n )\n }\n\n function viewport() {\n return getResolvedViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n errorType\n )\n }\n\n async function Viewport() {\n try {\n return await viewport()\n } catch (error) {\n if (!errorType && isHTTPAccessFallbackError(error)) {\n try {\n return await getNotFoundViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore\n )\n } catch {}\n }\n // We don't actually want to error in this component. We will\n // also error in the MetadataOutlet which causes the error to\n // bubble from the right position in the page to be caught by the\n // appropriate boundaries\n return null\n }\n }\n Viewport.displayName = VIEWPORT_BOUNDARY_NAME\n\n function metadata() {\n return getResolvedMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore,\n errorType\n )\n }\n\n async function resolveFinalMetadata() {\n try {\n return await metadata()\n } catch (metadataErr) {\n if (!errorType && isHTTPAccessFallbackError(metadataErr)) {\n try {\n return await getNotFoundMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore\n )\n } catch (notFoundMetadataErr) {\n // In PPR rendering we still need to throw the postpone error.\n // If metadata is postponed, React needs to be aware of the location of error.\n if (serveStreamingMetadata && isPostpone(notFoundMetadataErr)) {\n throw notFoundMetadataErr\n }\n }\n }\n // In PPR rendering we still need to throw the postpone error.\n // If metadata is postponed, React needs to be aware of the location of error.\n if (serveStreamingMetadata && isPostpone(metadataErr)) {\n throw metadataErr\n }\n // We don't actually want to error in this component. We will\n // also error in the MetadataOutlet which causes the error to\n // bubble from the right position in the page to be caught by the\n // appropriate boundaries\n return null\n }\n }\n async function Metadata() {\n const promise = resolveFinalMetadata()\n if (serveStreamingMetadata) {\n return (\n <Suspense fallback={null}>\n <AsyncMetadata promise={promise} />\n </Suspense>\n )\n }\n return await promise\n }\n\n Metadata.displayName = METADATA_BOUNDARY_NAME\n\n async function getMetadataReady(): Promise<void> {\n // Only warm up metadata() call when it's blocking metadata,\n // otherwise it will be fully managed by AsyncMetadata component.\n if (!serveStreamingMetadata) {\n await metadata()\n }\n return undefined\n }\n\n async function getViewportReady(): Promise<void> {\n await viewport()\n return undefined\n }\n\n return {\n ViewportTree,\n MetadataTree,\n getViewportReady,\n getMetadataReady,\n }\n}\n\nconst getResolvedMetadata = cache(getResolvedMetadataImpl)\nasync function getResolvedMetadataImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n metadataContext: MetadataContext,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorType?: MetadataErrorType | 'redirect'\n): Promise<React.ReactNode> {\n const errorConvention = errorType === 'redirect' ? undefined : errorType\n return renderMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore,\n errorConvention\n )\n}\n\nconst getNotFoundMetadata = cache(getNotFoundMetadataImpl)\nasync function getNotFoundMetadataImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n metadataContext: MetadataContext,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore\n): Promise<React.ReactNode> {\n const notFoundErrorConvention = 'not-found'\n return renderMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore,\n notFoundErrorConvention\n )\n}\n\nconst getResolvedViewport = cache(getResolvedViewportImpl)\nasync function getResolvedViewportImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorType?: MetadataErrorType | 'redirect'\n): Promise<React.ReactNode> {\n const errorConvention = errorType === 'redirect' ? undefined : errorType\n return renderViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n errorConvention\n )\n}\n\nconst getNotFoundViewport = cache(getNotFoundViewportImpl)\nasync function getNotFoundViewportImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore\n): Promise<React.ReactNode> {\n const notFoundErrorConvention = 'not-found'\n return renderViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n notFoundErrorConvention\n )\n}\n\nasync function renderMetadata(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n metadataContext: MetadataContext,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorConvention?: MetadataErrorType\n) {\n const resolvedMetadata = await resolveMetadata(\n tree,\n searchParams,\n errorConvention,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n metadataContext\n )\n const elements: Array<React.ReactNode> =\n createMetadataElements(resolvedMetadata)\n return (\n <>\n {elements.map((el, index) => {\n return cloneElement(el as React.ReactElement, { key: index })\n })}\n </>\n )\n}\n\nasync function renderViewport(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorConvention?: MetadataErrorType\n) {\n const notFoundResolvedViewport = await resolveViewport(\n tree,\n searchParams,\n errorConvention,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore\n )\n\n const elements: Array<React.ReactNode> = createViewportElements(\n notFoundResolvedViewport\n )\n return (\n <>\n {elements.map((el, index) => {\n return cloneElement(el as React.ReactElement, { key: index })\n })}\n </>\n )\n}\n\nfunction createMetadataElements(metadata: ResolvedMetadata) {\n return MetaFilter([\n BasicMeta({ metadata }),\n AlternatesMetadata({ alternates: metadata.alternates }),\n ItunesMeta({ itunes: metadata.itunes }),\n FacebookMeta({ facebook: metadata.facebook }),\n FormatDetectionMeta({ formatDetection: metadata.formatDetection }),\n VerificationMeta({ verification: metadata.verification }),\n AppleWebAppMeta({ appleWebApp: metadata.appleWebApp }),\n OpenGraphMetadata({ openGraph: metadata.openGraph }),\n TwitterMetadata({ twitter: metadata.twitter }),\n AppLinksMeta({ appLinks: metadata.appLinks }),\n IconsMetadata({ icons: metadata.icons }),\n ])\n}\n\nfunction createViewportElements(viewport: ResolvedViewport) {\n return MetaFilter([ViewportMeta({ viewport: viewport })])\n}\n"],"names":["Suspense","cache","cloneElement","AppleWebAppMeta","FormatDetectionMeta","ItunesMeta","BasicMeta","ViewportMeta","VerificationMeta","FacebookMeta","AlternatesMetadata","OpenGraphMetadata","TwitterMetadata","AppLinksMeta","IconsMetadata","resolveMetadata","resolveViewport","MetaFilter","isHTTPAccessFallbackError","METADATA_BOUNDARY_NAME","VIEWPORT_BOUNDARY_NAME","AsyncMetadata","isPostpone","createMetadataComponents","tree","searchParams","metadataContext","getDynamicParamFromSegment","appUsingSizeAdjustment","errorType","createServerParamsForMetadata","workStore","MetadataBoundary","ViewportBoundary","serveStreamingMetadata","ViewportTree","Viewport","meta","name","content","MetadataTree","Metadata","viewport","getResolvedViewport","error","getNotFoundViewport","displayName","metadata","getResolvedMetadata","resolveFinalMetadata","metadataErr","getNotFoundMetadata","notFoundMetadataErr","promise","fallback","getMetadataReady","undefined","getViewportReady","getResolvedMetadataImpl","errorConvention","renderMetadata","getNotFoundMetadataImpl","notFoundErrorConvention","getResolvedViewportImpl","renderViewport","getNotFoundViewportImpl","resolvedMetadata","elements","createMetadataElements","map","el","index","key","notFoundResolvedViewport","createViewportElements","alternates","itunes","facebook","formatDetection","verification","appleWebApp","openGraph","twitter","appLinks","icons"],"mappings":"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"}
@@ -177,7 +177,7 @@ function assignDefaults(dir, userConfig, silent) {
177
177
  enumerable: false
178
178
  });
179
179
  }
180
- if (!((_process_env___NEXT_VERSION = "15.2.0-canary.50") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV) {
180
+ if (!((_process_env___NEXT_VERSION = "15.2.0-canary.52") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV) {
181
181
  var _result_experimental7, _result_experimental8, _result_experimental_turbo3, _result_experimental9;
182
182
  // Prevents usage of certain experimental features outside of canary
183
183
  if ((_result_experimental7 = result.experimental) == null ? void 0 : _result_experimental7.ppr) {
@@ -80,7 +80,7 @@ export async function createHotReloaderTurbopack(opts, serverFields, distDir, re
80
80
  }
81
81
  const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
82
82
  const hotReloaderSpan = trace('hot-reloader', undefined, {
83
- version: "15.2.0-canary.50"
83
+ version: "15.2.0-canary.52"
84
84
  });
85
85
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
86
86
  // of the current `next dev` invocation.
@@ -178,7 +178,7 @@ export default class HotReloaderWebpack {
178
178
  this.previewProps = previewProps;
179
179
  this.rewrites = rewrites;
180
180
  this.hotReloaderSpan = trace('hot-reloader', undefined, {
181
- version: "15.2.0-canary.50"
181
+ version: "15.2.0-canary.52"
182
182
  });
183
183
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
184
184
  // of the current `next dev` invocation.
@@ -4,7 +4,7 @@ import { bold, purple } from '../../lib/picocolors';
4
4
  import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD } from '../../shared/lib/constants';
5
5
  import loadConfig, { getConfiguredExperimentalFeatures } from '../config';
6
6
  export function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures, maxExperimentalFeatures = Infinity }) {
7
- Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"15.2.0-canary.50"}`))}${process.env.TURBOPACK ? ' (Turbopack)' : ''}`);
7
+ Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"15.2.0-canary.52"}`))}${process.env.TURBOPACK ? ' (Turbopack)' : ''}`);
8
8
  if (appUrl) {
9
9
  Log.bootstrap(`- Local: ${appUrl}`);
10
10
  }
@@ -43,7 +43,7 @@ export async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup,
43
43
  export async function startServer(serverOptions) {
44
44
  const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate } = serverOptions;
45
45
  let { port } = serverOptions;
46
- process.title = `next-server (v${"15.2.0-canary.50"})`;
46
+ process.title = `next-server (v${"15.2.0-canary.52"})`;
47
47
  let handlersReady = ()=>{};
48
48
  let handlersError = ()=>{};
49
49
  let handlersPromise = new Promise((resolve, reject)=>{
@@ -72,14 +72,14 @@ function createMetadataComponents({ tree, searchParams, metadataContext, getDyna
72
72
  } catch (notFoundMetadataErr) {
73
73
  // In PPR rendering we still need to throw the postpone error.
74
74
  // If metadata is postponed, React needs to be aware of the location of error.
75
- if ((0, _ispostpone.isPostpone)(notFoundMetadataErr)) {
75
+ if (serveStreamingMetadata && (0, _ispostpone.isPostpone)(notFoundMetadataErr)) {
76
76
  throw notFoundMetadataErr;
77
77
  }
78
78
  }
79
79
  }
80
80
  // In PPR rendering we still need to throw the postpone error.
81
81
  // If metadata is postponed, React needs to be aware of the location of error.
82
- if ((0, _ispostpone.isPostpone)(metadataErr)) {
82
+ if (serveStreamingMetadata && (0, _ispostpone.isPostpone)(metadataErr)) {
83
83
  throw metadataErr;
84
84
  }
85
85
  // We don't actually want to error in this component. We will
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/metadata/metadata.tsx"],"sourcesContent":["import type { ParsedUrlQuery } from 'querystring'\nimport type { GetDynamicParamFromSegment } from '../../server/app-render/app-render'\nimport type { LoaderTree } from '../../server/lib/app-dir-module'\nimport type { CreateServerParamsForMetadata } from '../../server/request/params'\n\nimport { Suspense, cache, cloneElement } from 'react'\nimport {\n AppleWebAppMeta,\n FormatDetectionMeta,\n ItunesMeta,\n BasicMeta,\n ViewportMeta,\n VerificationMeta,\n FacebookMeta,\n} from './generate/basic'\nimport { AlternatesMetadata } from './generate/alternate'\nimport {\n OpenGraphMetadata,\n TwitterMetadata,\n AppLinksMeta,\n} from './generate/opengraph'\nimport { IconsMetadata } from './generate/icons'\nimport {\n type MetadataErrorType,\n resolveMetadata,\n resolveViewport,\n} from './resolve-metadata'\nimport { MetaFilter } from './generate/meta'\nimport type {\n ResolvedMetadata,\n ResolvedViewport,\n} from './types/metadata-interface'\nimport { isHTTPAccessFallbackError } from '../../client/components/http-access-fallback/http-access-fallback'\nimport type { MetadataContext } from './types/resolvers'\nimport type { WorkStore } from '../../server/app-render/work-async-storage.external'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n} from './metadata-constants'\nimport { AsyncMetadata } from './async-metadata'\nimport { isPostpone } from '../../server/lib/router-utils/is-postpone'\n\n// Use a promise to share the status of the metadata resolving,\n// returning two components `MetadataTree` and `MetadataOutlet`\n// `MetadataTree` is the one that will be rendered at first in the content sequence for metadata tags.\n// `MetadataOutlet` is the one that will be rendered under error boundaries for metadata resolving errors.\n// In this way we can let the metadata tags always render successfully,\n// and the error will be caught by the error boundary and trigger fallbacks.\nexport function createMetadataComponents({\n tree,\n searchParams,\n metadataContext,\n getDynamicParamFromSegment,\n appUsingSizeAdjustment,\n errorType,\n createServerParamsForMetadata,\n workStore,\n MetadataBoundary,\n ViewportBoundary,\n serveStreamingMetadata,\n}: {\n tree: LoaderTree\n searchParams: Promise<ParsedUrlQuery>\n metadataContext: MetadataContext\n getDynamicParamFromSegment: GetDynamicParamFromSegment\n appUsingSizeAdjustment: boolean\n errorType?: MetadataErrorType | 'redirect'\n createServerParamsForMetadata: CreateServerParamsForMetadata\n workStore: WorkStore\n MetadataBoundary: (props: { children: React.ReactNode }) => React.ReactNode\n ViewportBoundary: (props: { children: React.ReactNode }) => React.ReactNode\n serveStreamingMetadata: boolean\n}): {\n MetadataTree: React.ComponentType\n ViewportTree: React.ComponentType\n getMetadataReady: () => Promise<void>\n getViewportReady: () => Promise<void>\n} {\n function ViewportTree() {\n return (\n <>\n <ViewportBoundary>\n <Viewport />\n </ViewportBoundary>\n {/* This meta tag is for next/font which is still required to be blocking. */}\n {appUsingSizeAdjustment ? (\n <meta name=\"next-size-adjust\" content=\"\" />\n ) : null}\n </>\n )\n }\n\n function MetadataTree() {\n return (\n <MetadataBoundary>\n <Metadata />\n </MetadataBoundary>\n )\n }\n\n function viewport() {\n return getResolvedViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n errorType\n )\n }\n\n async function Viewport() {\n try {\n return await viewport()\n } catch (error) {\n if (!errorType && isHTTPAccessFallbackError(error)) {\n try {\n return await getNotFoundViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore\n )\n } catch {}\n }\n // We don't actually want to error in this component. We will\n // also error in the MetadataOutlet which causes the error to\n // bubble from the right position in the page to be caught by the\n // appropriate boundaries\n return null\n }\n }\n Viewport.displayName = VIEWPORT_BOUNDARY_NAME\n\n function metadata() {\n return getResolvedMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore,\n errorType\n )\n }\n\n async function resolveFinalMetadata() {\n try {\n return await metadata()\n } catch (metadataErr) {\n if (!errorType && isHTTPAccessFallbackError(metadataErr)) {\n try {\n return await getNotFoundMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore\n )\n } catch (notFoundMetadataErr) {\n // In PPR rendering we still need to throw the postpone error.\n // If metadata is postponed, React needs to be aware of the location of error.\n if (isPostpone(notFoundMetadataErr)) {\n throw notFoundMetadataErr\n }\n }\n }\n // In PPR rendering we still need to throw the postpone error.\n // If metadata is postponed, React needs to be aware of the location of error.\n if (isPostpone(metadataErr)) {\n throw metadataErr\n }\n // We don't actually want to error in this component. We will\n // also error in the MetadataOutlet which causes the error to\n // bubble from the right position in the page to be caught by the\n // appropriate boundaries\n return null\n }\n }\n async function Metadata() {\n const promise = resolveFinalMetadata()\n if (serveStreamingMetadata) {\n return (\n <Suspense fallback={null}>\n <AsyncMetadata promise={promise} />\n </Suspense>\n )\n }\n return await promise\n }\n\n Metadata.displayName = METADATA_BOUNDARY_NAME\n\n async function getMetadataReady(): Promise<void> {\n // Only warm up metadata() call when it's blocking metadata,\n // otherwise it will be fully managed by AsyncMetadata component.\n if (!serveStreamingMetadata) {\n await metadata()\n }\n return undefined\n }\n\n async function getViewportReady(): Promise<void> {\n await viewport()\n return undefined\n }\n\n return {\n ViewportTree,\n MetadataTree,\n getViewportReady,\n getMetadataReady,\n }\n}\n\nconst getResolvedMetadata = cache(getResolvedMetadataImpl)\nasync function getResolvedMetadataImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n metadataContext: MetadataContext,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorType?: MetadataErrorType | 'redirect'\n): Promise<React.ReactNode> {\n const errorConvention = errorType === 'redirect' ? undefined : errorType\n return renderMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore,\n errorConvention\n )\n}\n\nconst getNotFoundMetadata = cache(getNotFoundMetadataImpl)\nasync function getNotFoundMetadataImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n metadataContext: MetadataContext,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore\n): Promise<React.ReactNode> {\n const notFoundErrorConvention = 'not-found'\n return renderMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore,\n notFoundErrorConvention\n )\n}\n\nconst getResolvedViewport = cache(getResolvedViewportImpl)\nasync function getResolvedViewportImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorType?: MetadataErrorType | 'redirect'\n): Promise<React.ReactNode> {\n const errorConvention = errorType === 'redirect' ? undefined : errorType\n return renderViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n errorConvention\n )\n}\n\nconst getNotFoundViewport = cache(getNotFoundViewportImpl)\nasync function getNotFoundViewportImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore\n): Promise<React.ReactNode> {\n const notFoundErrorConvention = 'not-found'\n return renderViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n notFoundErrorConvention\n )\n}\n\nasync function renderMetadata(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n metadataContext: MetadataContext,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorConvention?: MetadataErrorType\n) {\n const resolvedMetadata = await resolveMetadata(\n tree,\n searchParams,\n errorConvention,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n metadataContext\n )\n const elements: Array<React.ReactNode> =\n createMetadataElements(resolvedMetadata)\n return (\n <>\n {elements.map((el, index) => {\n return cloneElement(el as React.ReactElement, { key: index })\n })}\n </>\n )\n}\n\nasync function renderViewport(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorConvention?: MetadataErrorType\n) {\n const notFoundResolvedViewport = await resolveViewport(\n tree,\n searchParams,\n errorConvention,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore\n )\n\n const elements: Array<React.ReactNode> = createViewportElements(\n notFoundResolvedViewport\n )\n return (\n <>\n {elements.map((el, index) => {\n return cloneElement(el as React.ReactElement, { key: index })\n })}\n </>\n )\n}\n\nfunction createMetadataElements(metadata: ResolvedMetadata) {\n return MetaFilter([\n BasicMeta({ metadata }),\n AlternatesMetadata({ alternates: metadata.alternates }),\n ItunesMeta({ itunes: metadata.itunes }),\n FacebookMeta({ facebook: metadata.facebook }),\n FormatDetectionMeta({ formatDetection: metadata.formatDetection }),\n VerificationMeta({ verification: metadata.verification }),\n AppleWebAppMeta({ appleWebApp: metadata.appleWebApp }),\n OpenGraphMetadata({ openGraph: metadata.openGraph }),\n TwitterMetadata({ twitter: metadata.twitter }),\n AppLinksMeta({ appLinks: metadata.appLinks }),\n IconsMetadata({ icons: metadata.icons }),\n ])\n}\n\nfunction createViewportElements(viewport: ResolvedViewport) {\n return MetaFilter([ViewportMeta({ viewport: viewport })])\n}\n"],"names":["createMetadataComponents","tree","searchParams","metadataContext","getDynamicParamFromSegment","appUsingSizeAdjustment","errorType","createServerParamsForMetadata","workStore","MetadataBoundary","ViewportBoundary","serveStreamingMetadata","ViewportTree","Viewport","meta","name","content","MetadataTree","Metadata","viewport","getResolvedViewport","error","isHTTPAccessFallbackError","getNotFoundViewport","displayName","VIEWPORT_BOUNDARY_NAME","metadata","getResolvedMetadata","resolveFinalMetadata","metadataErr","getNotFoundMetadata","notFoundMetadataErr","isPostpone","promise","Suspense","fallback","AsyncMetadata","METADATA_BOUNDARY_NAME","getMetadataReady","undefined","getViewportReady","cache","getResolvedMetadataImpl","errorConvention","renderMetadata","getNotFoundMetadataImpl","notFoundErrorConvention","getResolvedViewportImpl","renderViewport","getNotFoundViewportImpl","resolvedMetadata","resolveMetadata","elements","createMetadataElements","map","el","index","cloneElement","key","notFoundResolvedViewport","resolveViewport","createViewportElements","MetaFilter","BasicMeta","AlternatesMetadata","alternates","ItunesMeta","itunes","FacebookMeta","facebook","FormatDetectionMeta","formatDetection","VerificationMeta","verification","AppleWebAppMeta","appleWebApp","OpenGraphMetadata","openGraph","TwitterMetadata","twitter","AppLinksMeta","appLinks","IconsMetadata","icons","ViewportMeta"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/lib/metadata/metadata.tsx"],"sourcesContent":["import type { ParsedUrlQuery } from 'querystring'\nimport type { GetDynamicParamFromSegment } from '../../server/app-render/app-render'\nimport type { LoaderTree } from '../../server/lib/app-dir-module'\nimport type { CreateServerParamsForMetadata } from '../../server/request/params'\n\nimport { Suspense, cache, cloneElement } from 'react'\nimport {\n AppleWebAppMeta,\n FormatDetectionMeta,\n ItunesMeta,\n BasicMeta,\n ViewportMeta,\n VerificationMeta,\n FacebookMeta,\n} from './generate/basic'\nimport { AlternatesMetadata } from './generate/alternate'\nimport {\n OpenGraphMetadata,\n TwitterMetadata,\n AppLinksMeta,\n} from './generate/opengraph'\nimport { IconsMetadata } from './generate/icons'\nimport {\n type MetadataErrorType,\n resolveMetadata,\n resolveViewport,\n} from './resolve-metadata'\nimport { MetaFilter } from './generate/meta'\nimport type {\n ResolvedMetadata,\n ResolvedViewport,\n} from './types/metadata-interface'\nimport { isHTTPAccessFallbackError } from '../../client/components/http-access-fallback/http-access-fallback'\nimport type { MetadataContext } from './types/resolvers'\nimport type { WorkStore } from '../../server/app-render/work-async-storage.external'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n} from './metadata-constants'\nimport { AsyncMetadata } from './async-metadata'\nimport { isPostpone } from '../../server/lib/router-utils/is-postpone'\n\n// Use a promise to share the status of the metadata resolving,\n// returning two components `MetadataTree` and `MetadataOutlet`\n// `MetadataTree` is the one that will be rendered at first in the content sequence for metadata tags.\n// `MetadataOutlet` is the one that will be rendered under error boundaries for metadata resolving errors.\n// In this way we can let the metadata tags always render successfully,\n// and the error will be caught by the error boundary and trigger fallbacks.\nexport function createMetadataComponents({\n tree,\n searchParams,\n metadataContext,\n getDynamicParamFromSegment,\n appUsingSizeAdjustment,\n errorType,\n createServerParamsForMetadata,\n workStore,\n MetadataBoundary,\n ViewportBoundary,\n serveStreamingMetadata,\n}: {\n tree: LoaderTree\n searchParams: Promise<ParsedUrlQuery>\n metadataContext: MetadataContext\n getDynamicParamFromSegment: GetDynamicParamFromSegment\n appUsingSizeAdjustment: boolean\n errorType?: MetadataErrorType | 'redirect'\n createServerParamsForMetadata: CreateServerParamsForMetadata\n workStore: WorkStore\n MetadataBoundary: (props: { children: React.ReactNode }) => React.ReactNode\n ViewportBoundary: (props: { children: React.ReactNode }) => React.ReactNode\n serveStreamingMetadata: boolean\n}): {\n MetadataTree: React.ComponentType\n ViewportTree: React.ComponentType\n getMetadataReady: () => Promise<void>\n getViewportReady: () => Promise<void>\n} {\n function ViewportTree() {\n return (\n <>\n <ViewportBoundary>\n <Viewport />\n </ViewportBoundary>\n {/* This meta tag is for next/font which is still required to be blocking. */}\n {appUsingSizeAdjustment ? (\n <meta name=\"next-size-adjust\" content=\"\" />\n ) : null}\n </>\n )\n }\n\n function MetadataTree() {\n return (\n <MetadataBoundary>\n <Metadata />\n </MetadataBoundary>\n )\n }\n\n function viewport() {\n return getResolvedViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n errorType\n )\n }\n\n async function Viewport() {\n try {\n return await viewport()\n } catch (error) {\n if (!errorType && isHTTPAccessFallbackError(error)) {\n try {\n return await getNotFoundViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore\n )\n } catch {}\n }\n // We don't actually want to error in this component. We will\n // also error in the MetadataOutlet which causes the error to\n // bubble from the right position in the page to be caught by the\n // appropriate boundaries\n return null\n }\n }\n Viewport.displayName = VIEWPORT_BOUNDARY_NAME\n\n function metadata() {\n return getResolvedMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore,\n errorType\n )\n }\n\n async function resolveFinalMetadata() {\n try {\n return await metadata()\n } catch (metadataErr) {\n if (!errorType && isHTTPAccessFallbackError(metadataErr)) {\n try {\n return await getNotFoundMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore\n )\n } catch (notFoundMetadataErr) {\n // In PPR rendering we still need to throw the postpone error.\n // If metadata is postponed, React needs to be aware of the location of error.\n if (serveStreamingMetadata && isPostpone(notFoundMetadataErr)) {\n throw notFoundMetadataErr\n }\n }\n }\n // In PPR rendering we still need to throw the postpone error.\n // If metadata is postponed, React needs to be aware of the location of error.\n if (serveStreamingMetadata && isPostpone(metadataErr)) {\n throw metadataErr\n }\n // We don't actually want to error in this component. We will\n // also error in the MetadataOutlet which causes the error to\n // bubble from the right position in the page to be caught by the\n // appropriate boundaries\n return null\n }\n }\n async function Metadata() {\n const promise = resolveFinalMetadata()\n if (serveStreamingMetadata) {\n return (\n <Suspense fallback={null}>\n <AsyncMetadata promise={promise} />\n </Suspense>\n )\n }\n return await promise\n }\n\n Metadata.displayName = METADATA_BOUNDARY_NAME\n\n async function getMetadataReady(): Promise<void> {\n // Only warm up metadata() call when it's blocking metadata,\n // otherwise it will be fully managed by AsyncMetadata component.\n if (!serveStreamingMetadata) {\n await metadata()\n }\n return undefined\n }\n\n async function getViewportReady(): Promise<void> {\n await viewport()\n return undefined\n }\n\n return {\n ViewportTree,\n MetadataTree,\n getViewportReady,\n getMetadataReady,\n }\n}\n\nconst getResolvedMetadata = cache(getResolvedMetadataImpl)\nasync function getResolvedMetadataImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n metadataContext: MetadataContext,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorType?: MetadataErrorType | 'redirect'\n): Promise<React.ReactNode> {\n const errorConvention = errorType === 'redirect' ? undefined : errorType\n return renderMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore,\n errorConvention\n )\n}\n\nconst getNotFoundMetadata = cache(getNotFoundMetadataImpl)\nasync function getNotFoundMetadataImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n metadataContext: MetadataContext,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore\n): Promise<React.ReactNode> {\n const notFoundErrorConvention = 'not-found'\n return renderMetadata(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n metadataContext,\n createServerParamsForMetadata,\n workStore,\n notFoundErrorConvention\n )\n}\n\nconst getResolvedViewport = cache(getResolvedViewportImpl)\nasync function getResolvedViewportImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorType?: MetadataErrorType | 'redirect'\n): Promise<React.ReactNode> {\n const errorConvention = errorType === 'redirect' ? undefined : errorType\n return renderViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n errorConvention\n )\n}\n\nconst getNotFoundViewport = cache(getNotFoundViewportImpl)\nasync function getNotFoundViewportImpl(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore\n): Promise<React.ReactNode> {\n const notFoundErrorConvention = 'not-found'\n return renderViewport(\n tree,\n searchParams,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n notFoundErrorConvention\n )\n}\n\nasync function renderMetadata(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n metadataContext: MetadataContext,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorConvention?: MetadataErrorType\n) {\n const resolvedMetadata = await resolveMetadata(\n tree,\n searchParams,\n errorConvention,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore,\n metadataContext\n )\n const elements: Array<React.ReactNode> =\n createMetadataElements(resolvedMetadata)\n return (\n <>\n {elements.map((el, index) => {\n return cloneElement(el as React.ReactElement, { key: index })\n })}\n </>\n )\n}\n\nasync function renderViewport(\n tree: LoaderTree,\n searchParams: Promise<ParsedUrlQuery>,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n createServerParamsForMetadata: CreateServerParamsForMetadata,\n workStore: WorkStore,\n errorConvention?: MetadataErrorType\n) {\n const notFoundResolvedViewport = await resolveViewport(\n tree,\n searchParams,\n errorConvention,\n getDynamicParamFromSegment,\n createServerParamsForMetadata,\n workStore\n )\n\n const elements: Array<React.ReactNode> = createViewportElements(\n notFoundResolvedViewport\n )\n return (\n <>\n {elements.map((el, index) => {\n return cloneElement(el as React.ReactElement, { key: index })\n })}\n </>\n )\n}\n\nfunction createMetadataElements(metadata: ResolvedMetadata) {\n return MetaFilter([\n BasicMeta({ metadata }),\n AlternatesMetadata({ alternates: metadata.alternates }),\n ItunesMeta({ itunes: metadata.itunes }),\n FacebookMeta({ facebook: metadata.facebook }),\n FormatDetectionMeta({ formatDetection: metadata.formatDetection }),\n VerificationMeta({ verification: metadata.verification }),\n AppleWebAppMeta({ appleWebApp: metadata.appleWebApp }),\n OpenGraphMetadata({ openGraph: metadata.openGraph }),\n TwitterMetadata({ twitter: metadata.twitter }),\n AppLinksMeta({ appLinks: metadata.appLinks }),\n IconsMetadata({ icons: metadata.icons }),\n ])\n}\n\nfunction createViewportElements(viewport: ResolvedViewport) {\n return MetaFilter([ViewportMeta({ viewport: viewport })])\n}\n"],"names":["createMetadataComponents","tree","searchParams","metadataContext","getDynamicParamFromSegment","appUsingSizeAdjustment","errorType","createServerParamsForMetadata","workStore","MetadataBoundary","ViewportBoundary","serveStreamingMetadata","ViewportTree","Viewport","meta","name","content","MetadataTree","Metadata","viewport","getResolvedViewport","error","isHTTPAccessFallbackError","getNotFoundViewport","displayName","VIEWPORT_BOUNDARY_NAME","metadata","getResolvedMetadata","resolveFinalMetadata","metadataErr","getNotFoundMetadata","notFoundMetadataErr","isPostpone","promise","Suspense","fallback","AsyncMetadata","METADATA_BOUNDARY_NAME","getMetadataReady","undefined","getViewportReady","cache","getResolvedMetadataImpl","errorConvention","renderMetadata","getNotFoundMetadataImpl","notFoundErrorConvention","getResolvedViewportImpl","renderViewport","getNotFoundViewportImpl","resolvedMetadata","resolveMetadata","elements","createMetadataElements","map","el","index","cloneElement","key","notFoundResolvedViewport","resolveViewport","createViewportElements","MetaFilter","BasicMeta","AlternatesMetadata","alternates","ItunesMeta","itunes","FacebookMeta","facebook","FormatDetectionMeta","formatDetection","VerificationMeta","verification","AppleWebAppMeta","appleWebApp","OpenGraphMetadata","openGraph","TwitterMetadata","twitter","AppLinksMeta","appLinks","IconsMetadata","icons","ViewportMeta"],"mappings":"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"}
@@ -256,7 +256,7 @@ function assignDefaults(dir, userConfig, silent) {
256
256
  enumerable: false
257
257
  });
258
258
  }
259
- if (!((_process_env___NEXT_VERSION = "15.2.0-canary.50") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV) {
259
+ if (!((_process_env___NEXT_VERSION = "15.2.0-canary.52") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV) {
260
260
  var _result_experimental7, _result_experimental8, _result_experimental_turbo3, _result_experimental9;
261
261
  // Prevents usage of certain experimental features outside of canary
262
262
  if ((_result_experimental7 = result.experimental) == null ? void 0 : _result_experimental7.ppr) {
@@ -136,7 +136,7 @@ async function createHotReloaderTurbopack(opts, serverFields, distDir, resetFetc
136
136
  }
137
137
  const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
138
138
  const hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
139
- version: "15.2.0-canary.50"
139
+ version: "15.2.0-canary.52"
140
140
  });
141
141
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
142
142
  // of the current `next dev` invocation.
@@ -254,7 +254,7 @@ class HotReloaderWebpack {
254
254
  this.previewProps = previewProps;
255
255
  this.rewrites = rewrites;
256
256
  this.hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
257
- version: "15.2.0-canary.50"
257
+ version: "15.2.0-canary.52"
258
258
  });
259
259
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
260
260
  // of the current `next dev` invocation.
@@ -67,7 +67,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
67
67
  return newObj;
68
68
  }
69
69
  function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures, maxExperimentalFeatures = Infinity }) {
70
- _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.2.0-canary.50"}`))}${process.env.TURBOPACK ? ' (Turbopack)' : ''}`);
70
+ _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.2.0-canary.52"}`))}${process.env.TURBOPACK ? ' (Turbopack)' : ''}`);
71
71
  if (appUrl) {
72
72
  _log.bootstrap(`- Local: ${appUrl}`);
73
73
  }
@@ -111,7 +111,7 @@ async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup, server
111
111
  async function startServer(serverOptions) {
112
112
  const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate } = serverOptions;
113
113
  let { port } = serverOptions;
114
- process.title = `next-server (v${"15.2.0-canary.50"})`;
114
+ process.title = `next-server (v${"15.2.0-canary.52"})`;
115
115
  let handlersReady = ()=>{};
116
116
  let handlersError = ()=>{};
117
117
  let handlersPromise = new Promise((resolve, reject)=>{
@@ -81,7 +81,7 @@ function getAnonymousMeta() {
81
81
  isWsl: _iswsl.default,
82
82
  isCI: _ciinfo.isCI,
83
83
  ciName: _ciinfo.isCI && _ciinfo.name || null,
84
- nextVersion: "15.2.0-canary.50"
84
+ nextVersion: "15.2.0-canary.52"
85
85
  };
86
86
  return traits;
87
87
  }
@@ -11,11 +11,11 @@ Object.defineProperty(exports, "eventCliSessionStopped", {
11
11
  const EVENT_VERSION = 'NEXT_CLI_SESSION_STOPPED';
12
12
  function eventCliSessionStopped(event) {
13
13
  // This should be an invariant, if it fails our build tooling is broken.
14
- if (typeof "15.2.0-canary.50" !== 'string') {
14
+ if (typeof "15.2.0-canary.52" !== 'string') {
15
15
  return [];
16
16
  }
17
17
  const payload = {
18
- nextVersion: "15.2.0-canary.50",
18
+ nextVersion: "15.2.0-canary.52",
19
19
  nodeVersion: process.version,
20
20
  cliCommand: event.cliCommand,
21
21
  durationMilliseconds: event.durationMilliseconds,
@@ -36,12 +36,12 @@ function hasBabelConfig(dir) {
36
36
  function eventCliSession(dir, nextConfig, event) {
37
37
  var _nextConfig_experimental_staleTimes, _nextConfig_experimental_staleTimes1, _nextConfig_experimental_reactCompiler, _nextConfig_experimental_reactCompiler1;
38
38
  // This should be an invariant, if it fails our build tooling is broken.
39
- if (typeof "15.2.0-canary.50" !== 'string') {
39
+ if (typeof "15.2.0-canary.52" !== 'string') {
40
40
  return [];
41
41
  }
42
42
  const { images, i18n } = nextConfig || {};
43
43
  const payload = {
44
- nextVersion: "15.2.0-canary.50",
44
+ nextVersion: "15.2.0-canary.52",
45
45
  nodeVersion: process.version,
46
46
  cliCommand: event.cliCommand,
47
47
  isSrcDir: event.isSrcDir,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next",
3
- "version": "15.2.0-canary.50",
3
+ "version": "15.2.0-canary.52",
4
4
  "description": "The React Framework",
5
5
  "main": "./dist/server/next.js",
6
6
  "license": "MIT",
@@ -100,7 +100,7 @@
100
100
  ]
101
101
  },
102
102
  "dependencies": {
103
- "@next/env": "15.2.0-canary.50",
103
+ "@next/env": "15.2.0-canary.52",
104
104
  "@swc/counter": "0.1.3",
105
105
  "@swc/helpers": "0.5.15",
106
106
  "busboy": "1.6.0",
@@ -132,14 +132,14 @@
132
132
  },
133
133
  "optionalDependencies": {
134
134
  "sharp": "^0.33.5",
135
- "@next/swc-darwin-arm64": "15.2.0-canary.50",
136
- "@next/swc-darwin-x64": "15.2.0-canary.50",
137
- "@next/swc-linux-arm64-gnu": "15.2.0-canary.50",
138
- "@next/swc-linux-arm64-musl": "15.2.0-canary.50",
139
- "@next/swc-linux-x64-gnu": "15.2.0-canary.50",
140
- "@next/swc-linux-x64-musl": "15.2.0-canary.50",
141
- "@next/swc-win32-arm64-msvc": "15.2.0-canary.50",
142
- "@next/swc-win32-x64-msvc": "15.2.0-canary.50"
135
+ "@next/swc-darwin-arm64": "15.2.0-canary.52",
136
+ "@next/swc-darwin-x64": "15.2.0-canary.52",
137
+ "@next/swc-linux-arm64-gnu": "15.2.0-canary.52",
138
+ "@next/swc-linux-arm64-musl": "15.2.0-canary.52",
139
+ "@next/swc-linux-x64-gnu": "15.2.0-canary.52",
140
+ "@next/swc-linux-x64-musl": "15.2.0-canary.52",
141
+ "@next/swc-win32-arm64-msvc": "15.2.0-canary.52",
142
+ "@next/swc-win32-x64-msvc": "15.2.0-canary.52"
143
143
  },
144
144
  "devDependencies": {
145
145
  "@ampproject/toolbox-optimizer": "2.8.3",
@@ -172,11 +172,11 @@
172
172
  "@jest/types": "29.5.0",
173
173
  "@mswjs/interceptors": "0.23.0",
174
174
  "@napi-rs/triples": "1.2.0",
175
- "@next/font": "15.2.0-canary.50",
176
- "@next/polyfill-module": "15.2.0-canary.50",
177
- "@next/polyfill-nomodule": "15.2.0-canary.50",
178
- "@next/react-refresh-utils": "15.2.0-canary.50",
179
- "@next/swc": "15.2.0-canary.50",
175
+ "@next/font": "15.2.0-canary.52",
176
+ "@next/polyfill-module": "15.2.0-canary.52",
177
+ "@next/polyfill-nomodule": "15.2.0-canary.52",
178
+ "@next/react-refresh-utils": "15.2.0-canary.52",
179
+ "@next/swc": "15.2.0-canary.52",
180
180
  "@opentelemetry/api": "1.6.0",
181
181
  "@playwright/test": "1.41.2",
182
182
  "@storybook/addon-a11y": "8.5.2",