next 15.2.0-canary.50 → 15.2.0-canary.51

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 CHANGED
@@ -75,7 +75,7 @@ const program = new NextRootCommand();
75
75
  program.name('next').description('The Next.js CLI allows you to develop, build, start your application, and more.').configureHelp({
76
76
  formatHelp: (cmd, helper)=>(0, _formatclihelpoutput.formatCliHelpOutput)(cmd, helper),
77
77
  subcommandTerm: (cmd)=>`${cmd.name()} ${cmd.usage()}`
78
- }).helpCommand(false).helpOption('-h, --help', 'Displays this message.').version(`Next.js v${"15.2.0-canary.50"}`, '-v, --version', 'Outputs the Next.js version.');
78
+ }).helpCommand(false).helpOption('-h, --help', 'Displays this message.').version(`Next.js v${"15.2.0-canary.51"}`, '-v, --version', 'Outputs the Next.js version.');
79
79
  program.command('build').description('Creates an optimized production build of your application. The output displays information about each route.').argument('[directory]', `A directory on which to build the application. ${(0, _picocolors.italic)('If no directory is provided, the current directory will be used.')}`).option('-d, --debug', 'Enables a more verbose build output.').option('--no-lint', 'Disables linting.').option('--no-mangling', 'Disables mangling.').option('--profile', 'Enables production profiling for React.').option('--experimental-app-only', 'Builds only App Router routes.').addOption(new _commander.Option('--experimental-turbo').hideHelp()).addOption(new _commander.Option('--experimental-build-mode [mode]', 'Uses an experimental build mode.').choices([
80
80
  'compile',
81
81
  'generate'
@@ -364,7 +364,7 @@ async function build(dir, reactProductionProfiling = false, debugOutput = false,
364
364
  const nextBuildSpan = (0, _trace.trace)('next-build', undefined, {
365
365
  buildMode: experimentalBuildMode,
366
366
  isTurboBuild: String(turboNextBuild),
367
- version: "15.2.0-canary.50"
367
+ version: "15.2.0-canary.51"
368
368
  });
369
369
  _buildcontext.NextBuildContext.nextBuildSpan = nextBuildSpan;
370
370
  _buildcontext.NextBuildContext.dir = dir;
@@ -729,7 +729,7 @@ async function build(dir, reactProductionProfiling = false, debugOutput = false,
729
729
  // Files outside of the distDir can be "type": "module"
730
730
  await writeFileUtf8(_path.default.join(distDir, 'package.json'), '{"type": "commonjs"}');
731
731
  // These are written to distDir, so they need to come after creating and cleaning distDr.
732
- await (0, _builddiagnostics.recordFrameworkVersion)("15.2.0-canary.50");
732
+ await (0, _builddiagnostics.recordFrameworkVersion)("15.2.0-canary.51");
733
733
  await (0, _builddiagnostics.updateBuildDiagnostics)({
734
734
  buildStage: 'start'
735
735
  });
@@ -119,7 +119,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
119
119
  }
120
120
  return newObj;
121
121
  }
122
- const nextVersion = "15.2.0-canary.50";
122
+ const nextVersion = "15.2.0-canary.51";
123
123
  const ArchName = (0, _os.arch)();
124
124
  const PlatformName = (0, _os.platform)();
125
125
  function infoLog(...args) {
@@ -1510,7 +1510,7 @@ async function getBaseWebpackConfig(dir, { buildId, encryptionKey, config, compi
1510
1510
  isClient && new _copyfileplugin.CopyFilePlugin({
1511
1511
  // file path to build output of `@next/polyfill-nomodule`
1512
1512
  filePath: require.resolve('./polyfills/polyfill-nomodule'),
1513
- cacheKey: "15.2.0-canary.50",
1513
+ cacheKey: "15.2.0-canary.51",
1514
1514
  name: `static/chunks/polyfills${dev ? '' : '-[hash]'}.js`,
1515
1515
  minimize: false,
1516
1516
  info: {
@@ -1743,7 +1743,7 @@ async function getBaseWebpackConfig(dir, { buildId, encryptionKey, config, compi
1743
1743
  // - Next.js location on disk (some loaders use absolute paths and some resolve options depend on absolute paths)
1744
1744
  // - Next.js version
1745
1745
  // - next.config.js keys that affect compilation
1746
- version: `${__dirname}|${"15.2.0-canary.50"}|${configVars}`,
1746
+ version: `${__dirname}|${"15.2.0-canary.51"}|${configVars}`,
1747
1747
  cacheDirectory: _path.default.join(distDir, 'cache', 'webpack'),
1748
1748
  // For production builds, it's more efficient to compress all cache files together instead of compression each one individually.
1749
1749
  // So we disable compression here and allow the build runner to take care of compressing the cache as a whole.
@@ -13,7 +13,7 @@ Object.defineProperty(exports, "appBootstrap", {
13
13
  return appBootstrap;
14
14
  }
15
15
  });
16
- const version = "15.2.0-canary.50";
16
+ const version = "15.2.0-canary.51";
17
17
  window.next = {
18
18
  version,
19
19
  appDir: true
@@ -62,7 +62,7 @@ const _onrecoverableerror = require("./react-client-callbacks/on-recoverable-err
62
62
  const _tracer = /*#__PURE__*/ _interop_require_default._(require("./tracing/tracer"));
63
63
  const _reporttosocket = /*#__PURE__*/ _interop_require_default._(require("./tracing/report-to-socket"));
64
64
  const _isnextroutererror = require("./components/is-next-router-error");
65
- const version = "15.2.0-canary.50";
65
+ const version = "15.2.0-canary.51";
66
66
  let router;
67
67
  const emitter = (0, _mitt.default)();
68
68
  const looseToArray = (input)=>[].slice.call(input);
@@ -296,7 +296,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
296
296
  const nextBuildSpan = trace('next-build', undefined, {
297
297
  buildMode: experimentalBuildMode,
298
298
  isTurboBuild: String(turboNextBuild),
299
- version: "15.2.0-canary.50"
299
+ version: "15.2.0-canary.51"
300
300
  });
301
301
  NextBuildContext.nextBuildSpan = nextBuildSpan;
302
302
  NextBuildContext.dir = dir;
@@ -661,7 +661,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
661
661
  // Files outside of the distDir can be "type": "module"
662
662
  await writeFileUtf8(path.join(distDir, 'package.json'), '{"type": "commonjs"}');
663
663
  // These are written to distDir, so they need to come after creating and cleaning distDr.
664
- await recordFrameworkVersion("15.2.0-canary.50");
664
+ await recordFrameworkVersion("15.2.0-canary.51");
665
665
  await updateBuildDiagnostics({
666
666
  buildStage: 'start'
667
667
  });
@@ -11,7 +11,7 @@ import { isDeepStrictEqual } from 'util';
11
11
  import { getDefineEnv } from '../webpack/plugins/define-env-plugin';
12
12
  import { getReactCompilerLoader } from '../get-babel-loader-config';
13
13
  import { TurbopackInternalError } from '../../shared/lib/turbopack/utils';
14
- const nextVersion = "15.2.0-canary.50";
14
+ const nextVersion = "15.2.0-canary.51";
15
15
  const ArchName = arch();
16
16
  const PlatformName = platform();
17
17
  function infoLog(...args) {
@@ -1411,7 +1411,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
1411
1411
  isClient && new CopyFilePlugin({
1412
1412
  // file path to build output of `@next/polyfill-nomodule`
1413
1413
  filePath: require.resolve('./polyfills/polyfill-nomodule'),
1414
- cacheKey: "15.2.0-canary.50",
1414
+ cacheKey: "15.2.0-canary.51",
1415
1415
  name: `static/chunks/polyfills${dev ? '' : '-[hash]'}.js`,
1416
1416
  minimize: false,
1417
1417
  info: {
@@ -1644,7 +1644,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
1644
1644
  // - Next.js location on disk (some loaders use absolute paths and some resolve options depend on absolute paths)
1645
1645
  // - Next.js version
1646
1646
  // - next.config.js keys that affect compilation
1647
- version: `${__dirname}|${"15.2.0-canary.50"}|${configVars}`,
1647
+ version: `${__dirname}|${"15.2.0-canary.51"}|${configVars}`,
1648
1648
  cacheDirectory: path.join(distDir, 'cache', 'webpack'),
1649
1649
  // For production builds, it's more efficient to compress all cache files together instead of compression each one individually.
1650
1650
  // So we disable compression here and allow the build runner to take care of compressing the cache as a whole.
@@ -3,7 +3,7 @@
3
3
  * sure the following scripts are executed in the correct order:
4
4
  * - Polyfills
5
5
  * - next/script with `beforeInteractive` strategy
6
- */ const version = "15.2.0-canary.50";
6
+ */ const version = "15.2.0-canary.51";
7
7
  window.next = {
8
8
  version,
9
9
  appDir: true
@@ -27,7 +27,7 @@ import { onRecoverableError } from './react-client-callbacks/on-recoverable-erro
27
27
  import tracer from './tracing/tracer';
28
28
  import reportToSocket from './tracing/report-to-socket';
29
29
  import { isNextRouterError } from './components/is-next-router-error';
30
- export const version = "15.2.0-canary.50";
30
+ export const version = "15.2.0-canary.51";
31
31
  export let router;
32
32
  export const emitter = mitt();
33
33
  const looseToArray = (input)=>[].slice.call(input);
@@ -68,14 +68,14 @@ export function createMetadataComponents({ tree, searchParams, metadataContext,
68
68
  } catch (notFoundMetadataErr) {
69
69
  // In PPR rendering we still need to throw the postpone error.
70
70
  // If metadata is postponed, React needs to be aware of the location of error.
71
- if (isPostpone(notFoundMetadataErr)) {
71
+ if (serveStreamingMetadata && isPostpone(notFoundMetadataErr)) {
72
72
  throw notFoundMetadataErr;
73
73
  }
74
74
  }
75
75
  }
76
76
  // In PPR rendering we still need to throw the postpone error.
77
77
  // If metadata is postponed, React needs to be aware of the location of error.
78
- if (isPostpone(metadataErr)) {
78
+ if (serveStreamingMetadata && isPostpone(metadataErr)) {
79
79
  throw metadataErr;
80
80
  }
81
81
  // 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":["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.51") == 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.51"
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.51"
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.51"}`))}${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.51"})`;
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.51") == 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.51"
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.51"
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.51"}`))}${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.51"})`;
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.51"
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.51" !== 'string') {
15
15
  return [];
16
16
  }
17
17
  const payload = {
18
- nextVersion: "15.2.0-canary.50",
18
+ nextVersion: "15.2.0-canary.51",
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.51" !== '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.51",
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.51",
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.51",
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.51",
136
+ "@next/swc-darwin-x64": "15.2.0-canary.51",
137
+ "@next/swc-linux-arm64-gnu": "15.2.0-canary.51",
138
+ "@next/swc-linux-arm64-musl": "15.2.0-canary.51",
139
+ "@next/swc-linux-x64-gnu": "15.2.0-canary.51",
140
+ "@next/swc-linux-x64-musl": "15.2.0-canary.51",
141
+ "@next/swc-win32-arm64-msvc": "15.2.0-canary.51",
142
+ "@next/swc-win32-x64-msvc": "15.2.0-canary.51"
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.51",
176
+ "@next/polyfill-module": "15.2.0-canary.51",
177
+ "@next/polyfill-nomodule": "15.2.0-canary.51",
178
+ "@next/react-refresh-utils": "15.2.0-canary.51",
179
+ "@next/swc": "15.2.0-canary.51",
180
180
  "@opentelemetry/api": "1.6.0",
181
181
  "@playwright/test": "1.41.2",
182
182
  "@storybook/addon-a11y": "8.5.2",