next 15.4.0-canary.122 → 15.4.0-canary.123

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.
Files changed (53) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/index.js +2 -2
  3. package/dist/build/swc/index.js +1 -1
  4. package/dist/build/webpack/loaders/devtool/devtool-style-inject.js +1 -1
  5. package/dist/build/webpack/loaders/devtool/devtool-style-inject.js.map +1 -1
  6. package/dist/build/webpack-config.js +2 -2
  7. package/dist/client/app-bootstrap.js +1 -1
  8. package/dist/client/index.js +1 -1
  9. package/dist/compiled/next-devtools/index.js +212 -3
  10. package/dist/compiled/next-devtools/index.js.map +1 -1
  11. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js +1 -1
  12. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js.map +1 -1
  13. package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js +1 -1
  14. package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js.map +1 -1
  15. package/dist/compiled/next-server/pages-api.runtime.dev.js +1 -1
  16. package/dist/compiled/next-server/pages-api.runtime.dev.js.map +1 -1
  17. package/dist/compiled/next-server/pages-api.runtime.prod.js +1 -1
  18. package/dist/compiled/next-server/pages-api.runtime.prod.js.map +1 -1
  19. package/dist/compiled/next-server/pages-turbo.runtime.dev.js +1 -1
  20. package/dist/compiled/next-server/pages-turbo.runtime.dev.js.map +1 -1
  21. package/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
  22. package/dist/compiled/next-server/pages-turbo.runtime.prod.js.map +1 -1
  23. package/dist/compiled/next-server/pages.runtime.dev.js +1 -1
  24. package/dist/compiled/next-server/pages.runtime.dev.js.map +1 -1
  25. package/dist/compiled/next-server/pages.runtime.prod.js +1 -1
  26. package/dist/compiled/next-server/pages.runtime.prod.js.map +1 -1
  27. package/dist/esm/build/index.js +2 -2
  28. package/dist/esm/build/swc/index.js +1 -1
  29. package/dist/esm/build/webpack/loaders/devtool/devtool-style-inject.js +1 -1
  30. package/dist/esm/build/webpack/loaders/devtool/devtool-style-inject.js.map +1 -1
  31. package/dist/esm/build/webpack-config.js +2 -2
  32. package/dist/esm/client/app-bootstrap.js +1 -1
  33. package/dist/esm/client/index.js +1 -1
  34. package/dist/esm/lib/server-external-packages.json +1 -0
  35. package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
  36. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  37. package/dist/esm/server/lib/app-info-log.js +1 -1
  38. package/dist/esm/server/lib/start-server.js +1 -1
  39. package/dist/esm/shared/lib/canary-only.js +1 -1
  40. package/dist/lib/server-external-packages.json +1 -0
  41. package/dist/next-devtools/dev-overlay/components/devtools-panel/devtools-panel-tab/segments-explorer-tab.d.ts +0 -1
  42. package/dist/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/segments-explorer.d.ts +0 -1
  43. package/dist/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.d.ts +1 -1
  44. package/dist/next-devtools/dev-overlay/components/overview/segment-explorer.d.ts +1 -1
  45. package/dist/server/dev/hot-reloader-turbopack.js +1 -1
  46. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  47. package/dist/server/lib/app-info-log.js +1 -1
  48. package/dist/server/lib/start-server.js +1 -1
  49. package/dist/shared/lib/canary-only.js +1 -1
  50. package/dist/telemetry/anonymous-meta.js +1 -1
  51. package/dist/telemetry/events/session-stopped.js +2 -2
  52. package/dist/telemetry/events/version.js +2 -2
  53. package/package.json +15 -15
@@ -320,7 +320,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
320
320
  const nextBuildSpan = trace('next-build', undefined, {
321
321
  buildMode: experimentalBuildMode,
322
322
  isTurboBuild: String(isTurbopack),
323
- version: "15.4.0-canary.122"
323
+ version: "15.4.0-canary.123"
324
324
  });
325
325
  NextBuildContext.nextBuildSpan = nextBuildSpan;
326
326
  NextBuildContext.dir = dir;
@@ -707,7 +707,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
707
707
  // Files outside of the distDir can be "type": "module"
708
708
  await writeFileUtf8(path.join(distDir, 'package.json'), '{"type": "commonjs"}');
709
709
  // These are written to distDir, so they need to come after creating and cleaning distDr.
710
- await recordFrameworkVersion("15.4.0-canary.122");
710
+ await recordFrameworkVersion("15.4.0-canary.123");
711
711
  await updateBuildDiagnostics({
712
712
  buildStage: 'start'
713
713
  });
@@ -11,7 +11,7 @@ import { isDeepStrictEqual } from 'util';
11
11
  import { getDefineEnv } from '../define-env';
12
12
  import { getReactCompilerLoader } from '../get-babel-loader-config';
13
13
  import { TurbopackInternalError } from '../../shared/lib/turbopack/utils';
14
- const nextVersion = "15.4.0-canary.122";
14
+ const nextVersion = "15.4.0-canary.123";
15
15
  const ArchName = arch();
16
16
  const PlatformName = platform();
17
17
  function infoLog(...args) {
@@ -91,7 +91,7 @@ function startObservingForPortal() {
91
91
  cache.isObserving = false;
92
92
  } else {
93
93
  // Try again after a short delay
94
- setTimeout(checkShadowRoot, 50);
94
+ setTimeout(checkShadowRoot, 20);
95
95
  }
96
96
  };
97
97
  checkShadowRoot();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/build/webpack/loaders/devtool/devtool-style-inject.js"],"sourcesContent":["/* @ts-check */\n/**\n * Style injection mechanism for Next.js devtools with shadow DOM support\n * Handles caching of style elements when the nextjs-portal shadow root is not available\n */\n\n// Global cache for style elements when shadow root is not available\nif (typeof window !== 'undefined') {\n window._nextjsDevtoolsStyleCache = window._nextjsDevtoolsStyleCache || {\n pendingElements: [],\n isObserving: false,\n lastInsertedElement: null,\n cachedShadowRoot: null, // Cache the shadow root once found\n }\n}\n\n/**\n * @returns {ShadowRoot | null}\n */\nfunction getShadowRoot() {\n const cache = window._nextjsDevtoolsStyleCache\n\n // Return cached shadow root if available\n if (cache.cachedShadowRoot) {\n return cache.cachedShadowRoot\n }\n\n // Query the DOM and cache the result if found\n const portal = document.querySelector('nextjs-portal')\n const shadowRoot = portal?.shadowRoot || null\n\n if (shadowRoot) {\n cache.cachedShadowRoot = shadowRoot\n }\n\n return shadowRoot\n}\n\n/**\n * @param {HTMLElement} element\n * @param {ShadowRoot} shadowRoot\n */\nfunction insertElementIntoShadowRoot(element, shadowRoot) {\n const cache = window._nextjsDevtoolsStyleCache\n\n if (!cache.lastInsertedElement) {\n shadowRoot.insertBefore(element, shadowRoot.firstChild)\n } else if (cache.lastInsertedElement.nextSibling) {\n shadowRoot.insertBefore(element, cache.lastInsertedElement.nextSibling)\n } else {\n shadowRoot.appendChild(element)\n }\n\n cache.lastInsertedElement = element\n}\n\nfunction flushCachedElements() {\n const cache = window._nextjsDevtoolsStyleCache\n const shadowRoot = getShadowRoot()\n\n if (!shadowRoot) {\n return\n }\n\n cache.pendingElements.forEach((element) => {\n insertElementIntoShadowRoot(element, shadowRoot)\n })\n cache.pendingElements = []\n}\n\nfunction startObservingForPortal() {\n const cache = window._nextjsDevtoolsStyleCache\n\n if (cache.isObserving) {\n return\n }\n cache.isObserving = true\n\n // First check if the portal already exists\n const shadowRoot = getShadowRoot() // This will cache it if found\n if (shadowRoot) {\n flushCachedElements()\n return\n }\n\n // Set up MutationObserver to watch for the portal element\n const observer = new MutationObserver((mutations) => {\n if (mutations.length === 0 || mutations[0].addedNodes.length === 0) {\n return\n }\n\n // Check if mutation is script[data-nextjs-dev-overlay] tag, which is the\n // parent of the nextjs-portal element\n const mutationNode = mutations[0].addedNodes[0]\n let portalNode = null\n if (\n // app router: body > script[data-nextjs-dev-overlay] > nextjs-portal\n mutationNode.tagName === 'SCRIPT' &&\n mutationNode.getAttribute('data-nextjs-dev-overlay')\n ) {\n portalNode = mutationNode.firstChild\n } else if (\n // pages router: body > nextjs-portal\n mutationNode.tagName === 'NEXTJS-PORTAL'\n ) {\n portalNode = mutationNode\n }\n if (!portalNode) {\n return\n }\n\n // Wait until shadow root is available\n const checkShadowRoot = () => {\n if (getShadowRoot()) {\n flushCachedElements()\n observer.disconnect()\n cache.isObserving = false\n } else {\n // Try again after a short delay\n setTimeout(checkShadowRoot, 50)\n }\n }\n checkShadowRoot()\n })\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n })\n}\n\n/**\n * @param {HTMLElement} element\n */\nfunction insertAtTop(element) {\n // Add special recognizable data prop to element\n element.setAttribute('data-nextjs-dev-tool-style', 'true')\n\n const shadowRoot = getShadowRoot()\n if (shadowRoot) {\n // Shadow root is available, insert directly\n insertElementIntoShadowRoot(element, shadowRoot)\n } else {\n // Shadow root not available, cache the element\n const cache = window._nextjsDevtoolsStyleCache\n cache.pendingElements.push(element)\n\n // Start observing for the portal if not already observing\n startObservingForPortal()\n }\n}\n\nmodule.exports = insertAtTop\n"],"names":["window","_nextjsDevtoolsStyleCache","pendingElements","isObserving","lastInsertedElement","cachedShadowRoot","getShadowRoot","cache","portal","document","querySelector","shadowRoot","insertElementIntoShadowRoot","element","insertBefore","firstChild","nextSibling","appendChild","flushCachedElements","forEach","startObservingForPortal","observer","MutationObserver","mutations","length","addedNodes","mutationNode","portalNode","tagName","getAttribute","checkShadowRoot","disconnect","setTimeout","observe","body","childList","subtree","insertAtTop","setAttribute","push","module","exports"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../../../src/build/webpack/loaders/devtool/devtool-style-inject.js"],"sourcesContent":["/* @ts-check */\n/**\n * Style injection mechanism for Next.js devtools with shadow DOM support\n * Handles caching of style elements when the nextjs-portal shadow root is not available\n */\n\n// Global cache for style elements when shadow root is not available\nif (typeof window !== 'undefined') {\n window._nextjsDevtoolsStyleCache = window._nextjsDevtoolsStyleCache || {\n pendingElements: [],\n isObserving: false,\n lastInsertedElement: null,\n cachedShadowRoot: null, // Cache the shadow root once found\n }\n}\n\n/**\n * @returns {ShadowRoot | null}\n */\nfunction getShadowRoot() {\n const cache = window._nextjsDevtoolsStyleCache\n\n // Return cached shadow root if available\n if (cache.cachedShadowRoot) {\n return cache.cachedShadowRoot\n }\n\n // Query the DOM and cache the result if found\n const portal = document.querySelector('nextjs-portal')\n const shadowRoot = portal?.shadowRoot || null\n\n if (shadowRoot) {\n cache.cachedShadowRoot = shadowRoot\n }\n\n return shadowRoot\n}\n\n/**\n * @param {HTMLElement} element\n * @param {ShadowRoot} shadowRoot\n */\nfunction insertElementIntoShadowRoot(element, shadowRoot) {\n const cache = window._nextjsDevtoolsStyleCache\n\n if (!cache.lastInsertedElement) {\n shadowRoot.insertBefore(element, shadowRoot.firstChild)\n } else if (cache.lastInsertedElement.nextSibling) {\n shadowRoot.insertBefore(element, cache.lastInsertedElement.nextSibling)\n } else {\n shadowRoot.appendChild(element)\n }\n\n cache.lastInsertedElement = element\n}\n\nfunction flushCachedElements() {\n const cache = window._nextjsDevtoolsStyleCache\n const shadowRoot = getShadowRoot()\n\n if (!shadowRoot) {\n return\n }\n\n cache.pendingElements.forEach((element) => {\n insertElementIntoShadowRoot(element, shadowRoot)\n })\n cache.pendingElements = []\n}\n\nfunction startObservingForPortal() {\n const cache = window._nextjsDevtoolsStyleCache\n\n if (cache.isObserving) {\n return\n }\n cache.isObserving = true\n\n // First check if the portal already exists\n const shadowRoot = getShadowRoot() // This will cache it if found\n if (shadowRoot) {\n flushCachedElements()\n return\n }\n\n // Set up MutationObserver to watch for the portal element\n const observer = new MutationObserver((mutations) => {\n if (mutations.length === 0 || mutations[0].addedNodes.length === 0) {\n return\n }\n\n // Check if mutation is script[data-nextjs-dev-overlay] tag, which is the\n // parent of the nextjs-portal element\n const mutationNode = mutations[0].addedNodes[0]\n let portalNode = null\n if (\n // app router: body > script[data-nextjs-dev-overlay] > nextjs-portal\n mutationNode.tagName === 'SCRIPT' &&\n mutationNode.getAttribute('data-nextjs-dev-overlay')\n ) {\n portalNode = mutationNode.firstChild\n } else if (\n // pages router: body > nextjs-portal\n mutationNode.tagName === 'NEXTJS-PORTAL'\n ) {\n portalNode = mutationNode\n }\n if (!portalNode) {\n return\n }\n\n // Wait until shadow root is available\n const checkShadowRoot = () => {\n if (getShadowRoot()) {\n flushCachedElements()\n observer.disconnect()\n cache.isObserving = false\n } else {\n // Try again after a short delay\n setTimeout(checkShadowRoot, 20)\n }\n }\n checkShadowRoot()\n })\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n })\n}\n\n/**\n * @param {HTMLElement} element\n */\nfunction insertAtTop(element) {\n // Add special recognizable data prop to element\n element.setAttribute('data-nextjs-dev-tool-style', 'true')\n\n const shadowRoot = getShadowRoot()\n if (shadowRoot) {\n // Shadow root is available, insert directly\n insertElementIntoShadowRoot(element, shadowRoot)\n } else {\n // Shadow root not available, cache the element\n const cache = window._nextjsDevtoolsStyleCache\n cache.pendingElements.push(element)\n\n // Start observing for the portal if not already observing\n startObservingForPortal()\n }\n}\n\nmodule.exports = insertAtTop\n"],"names":["window","_nextjsDevtoolsStyleCache","pendingElements","isObserving","lastInsertedElement","cachedShadowRoot","getShadowRoot","cache","portal","document","querySelector","shadowRoot","insertElementIntoShadowRoot","element","insertBefore","firstChild","nextSibling","appendChild","flushCachedElements","forEach","startObservingForPortal","observer","MutationObserver","mutations","length","addedNodes","mutationNode","portalNode","tagName","getAttribute","checkShadowRoot","disconnect","setTimeout","observe","body","childList","subtree","insertAtTop","setAttribute","push","module","exports"],"mappings":"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","ignoreList":[0]}
@@ -1588,7 +1588,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
1588
1588
  isClient && new CopyFilePlugin({
1589
1589
  // file path to build output of `@next/polyfill-nomodule`
1590
1590
  filePath: require.resolve('./polyfills/polyfill-nomodule'),
1591
- cacheKey: "15.4.0-canary.122",
1591
+ cacheKey: "15.4.0-canary.123",
1592
1592
  name: `static/chunks/polyfills${dev ? '' : '-[hash]'}.js`,
1593
1593
  minimize: false,
1594
1594
  info: {
@@ -1768,7 +1768,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
1768
1768
  // - Next.js location on disk (some loaders use absolute paths and some resolve options depend on absolute paths)
1769
1769
  // - Next.js version
1770
1770
  // - next.config.js keys that affect compilation
1771
- version: `${__dirname}|${"15.4.0-canary.122"}|${configVars}`,
1771
+ version: `${__dirname}|${"15.4.0-canary.123"}|${configVars}`,
1772
1772
  cacheDirectory: path.join(distDir, 'cache', 'webpack'),
1773
1773
  // For production builds, it's more efficient to compress all cache files together instead of compression each one individually.
1774
1774
  // 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.4.0-canary.122";
6
+ */ const version = "15.4.0-canary.123";
7
7
  window.next = {
8
8
  version,
9
9
  appDir: true
@@ -26,7 +26,7 @@ import { SearchParamsContext, PathParamsContext } from '../shared/lib/hooks-clie
26
26
  import { onRecoverableError } from './react-client-callbacks/on-recoverable-error';
27
27
  import tracer from './tracing/tracer';
28
28
  import { isNextRouterError } from './components/is-next-router-error';
29
- export const version = "15.4.0-canary.122";
29
+ export const version = "15.4.0-canary.123";
30
30
  export let router;
31
31
  export const emitter = mitt();
32
32
  const looseToArray = (input)=>[].slice.call(input);
@@ -15,6 +15,7 @@
15
15
  "@react-pdf/renderer",
16
16
  "@sentry/profiling-node",
17
17
  "@sparticuz/chromium",
18
+ "@sparticuz/chromium-min",
18
19
  "@swc/core",
19
20
  "@xenova/transformers",
20
21
  "argon2",
@@ -87,7 +87,7 @@ export async function createHotReloaderTurbopack(opts, serverFields, distDir, re
87
87
  }
88
88
  const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
89
89
  const hotReloaderSpan = trace('hot-reloader', undefined, {
90
- version: "15.4.0-canary.122"
90
+ version: "15.4.0-canary.123"
91
91
  });
92
92
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
93
93
  // of the current `next dev` invocation.
@@ -185,7 +185,7 @@ export default class HotReloaderWebpack {
185
185
  this.previewProps = previewProps;
186
186
  this.rewrites = rewrites;
187
187
  this.hotReloaderSpan = trace('hot-reloader', undefined, {
188
- version: "15.4.0-canary.122"
188
+ version: "15.4.0-canary.123"
189
189
  });
190
190
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
191
191
  // of the current `next dev` invocation.
@@ -12,7 +12,7 @@ export function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures
12
12
  } else {
13
13
  bundlerSuffix = '';
14
14
  }
15
- Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"15.4.0-canary.122"}`))}${bundlerSuffix}`);
15
+ Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"15.4.0-canary.123"}`))}${bundlerSuffix}`);
16
16
  if (appUrl) {
17
17
  Log.bootstrap(`- Local: ${appUrl}`);
18
18
  }
@@ -103,7 +103,7 @@ export async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup,
103
103
  export async function startServer(serverOptions) {
104
104
  const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate } = serverOptions;
105
105
  let { port } = serverOptions;
106
- process.title = `next-server (v${"15.4.0-canary.122"})`;
106
+ process.title = `next-server (v${"15.4.0-canary.123"})`;
107
107
  let handlersReady = ()=>{};
108
108
  let handlersError = ()=>{};
109
109
  let handlersPromise = new Promise((resolve, reject)=>{
@@ -1,6 +1,6 @@
1
1
  export function isStableBuild() {
2
2
  var _process_env___NEXT_VERSION;
3
- return !((_process_env___NEXT_VERSION = "15.4.0-canary.122") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
3
+ return !((_process_env___NEXT_VERSION = "15.4.0-canary.123") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
4
4
  }
5
5
  export class CanaryOnlyError extends Error {
6
6
  constructor(arg){
@@ -15,6 +15,7 @@
15
15
  "@react-pdf/renderer",
16
16
  "@sentry/profiling-node",
17
17
  "@sparticuz/chromium",
18
+ "@sparticuz/chromium-min",
18
19
  "@swc/core",
19
20
  "@xenova/transformers",
20
21
  "argon2",
@@ -2,4 +2,3 @@ export declare function SegmentsExplorerTab({ routerType, page, }: {
2
2
  routerType: 'app' | 'pages';
3
3
  page: string;
4
4
  }): import("react/jsx-runtime").JSX.Element;
5
- export declare const SEGMENTS_EXPLORER_TAB_STYLES = "\n";
@@ -3,4 +3,3 @@ export declare function SegmentsExplorer({ routerType, page, ...props }: DevTool
3
3
  routerType: 'app' | 'pages';
4
4
  page: string;
5
5
  }): import("react/jsx-runtime").JSX.Element;
6
- export declare const SEGMENTS_EXPLORER_STYLES = "\n [data-nextjs-segments-explorer] {\n margin: -16px;\n }\n";
@@ -1,7 +1,7 @@
1
+ import './segment-boundary-trigger.css';
1
2
  import type { SegmentNodeState } from '../../../userspace/app/segment-explorer-node';
2
3
  export declare function SegmentBoundaryTrigger({ onSelectBoundary, offset, boundaries, }: {
3
4
  onSelectBoundary: SegmentNodeState['setBoundaryType'];
4
5
  offset: number;
5
6
  boundaries: Record<'not-found' | 'loading' | 'error', string | null>;
6
7
  }): import("react/jsx-runtime").JSX.Element;
7
- export declare const styles = "\n .segment-boundary-trigger {\n margin-left: auto;\n gap: 8px;\n }\n\n .segment-boundary-trigger-button {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 500;\n color: var(--color-gray-1000);\n border-radius: 6px;\n background: transparent;\n border: none;\n }\n\n .segment-boundary-trigger-button svg {\n width: 20px;\n height: 20px;\n }\n\n .segment-boundary-trigger-button:hover {\n background: var(--color-gray-400);\n color: var(--color-gray-1000);\n }\n\n .segment-boundary-dropdown {\n padding: 8px;\n background: var(--color-background-100);\n border: 1px solid var(--color-gray-400);\n border-radius: 6px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n min-width: 120px;\n }\n\n .segment-boundary-dropdown-positioner {\n z-index: 2147483648;\n }\n\n .segment-boundary-dropdown-item {\n display: flex;\n align-items: center;\n padding: 10px 8px;\n line-height: 20px;\n font-size: 14px;\n border-radius: 6px;\n color: var(--color-gray-1000);\n cursor: pointer;\n min-width: 220px;\n border: none;\n background: none;\n width: 100%;\n }\n\n .segment-boundary-dropdown-item[data-disabled] {\n color: var(--color-gray-400);\n cursor: not-allowed;\n }\n\n .segment-boundary-dropdown-item svg {\n margin-right: 12px;\n color: currentColor;\n }\n\n .segment-boundary-dropdown-item:hover {\n background: var(--color-gray-200);\n }\n\n .segment-boundary-dropdown-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n }\n\n .segment-boundary-dropdown-item:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n }\n\n .segment-boundary-dropdown-divider {\n height: 1px;\n background: var(--color-gray-400);\n margin: 8px 0;\n }\n";
@@ -1,5 +1,5 @@
1
+ import './segment-explorer.css';
1
2
  export declare function PageSegmentTree({ isAppRouter, page, }: {
2
3
  isAppRouter: boolean;
3
4
  page: string;
4
5
  }): import("react/jsx-runtime").JSX.Element;
5
- export declare const DEV_TOOLS_INFO_RENDER_FILES_STYLES: string;
@@ -143,7 +143,7 @@ async function createHotReloaderTurbopack(opts, serverFields, distDir, resetFetc
143
143
  }
144
144
  const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
145
145
  const hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
146
- version: "15.4.0-canary.122"
146
+ version: "15.4.0-canary.123"
147
147
  });
148
148
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
149
149
  // of the current `next dev` invocation.
@@ -261,7 +261,7 @@ class HotReloaderWebpack {
261
261
  this.previewProps = previewProps;
262
262
  this.rewrites = rewrites;
263
263
  this.hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
264
- version: "15.4.0-canary.122"
264
+ version: "15.4.0-canary.123"
265
265
  });
266
266
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
267
267
  // of the current `next dev` invocation.
@@ -80,7 +80,7 @@ function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures, maxEx
80
80
  } else {
81
81
  bundlerSuffix = '';
82
82
  }
83
- _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.4.0-canary.122"}`))}${bundlerSuffix}`);
83
+ _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.4.0-canary.123"}`))}${bundlerSuffix}`);
84
84
  if (appUrl) {
85
85
  _log.bootstrap(`- Local: ${appUrl}`);
86
86
  }
@@ -171,7 +171,7 @@ async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup, server
171
171
  async function startServer(serverOptions) {
172
172
  const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate } = serverOptions;
173
173
  let { port } = serverOptions;
174
- process.title = `next-server (v${"15.4.0-canary.122"})`;
174
+ process.title = `next-server (v${"15.4.0-canary.123"})`;
175
175
  let handlersReady = ()=>{};
176
176
  let handlersError = ()=>{};
177
177
  let handlersPromise = new Promise((resolve, reject)=>{
@@ -22,7 +22,7 @@ _export(exports, {
22
22
  });
23
23
  function isStableBuild() {
24
24
  var _process_env___NEXT_VERSION;
25
- return !((_process_env___NEXT_VERSION = "15.4.0-canary.122") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
25
+ return !((_process_env___NEXT_VERSION = "15.4.0-canary.123") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
26
26
  }
27
27
  class CanaryOnlyError extends Error {
28
28
  constructor(arg){
@@ -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.4.0-canary.122"
84
+ nextVersion: "15.4.0-canary.123"
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.4.0-canary.122" !== 'string') {
14
+ if (typeof "15.4.0-canary.123" !== 'string') {
15
15
  return [];
16
16
  }
17
17
  const payload = {
18
- nextVersion: "15.4.0-canary.122",
18
+ nextVersion: "15.4.0-canary.123",
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.4.0-canary.122" !== 'string') {
39
+ if (typeof "15.4.0-canary.123" !== 'string') {
40
40
  return [];
41
41
  }
42
42
  const { images, i18n } = nextConfig || {};
43
43
  const payload = {
44
- nextVersion: "15.4.0-canary.122",
44
+ nextVersion: "15.4.0-canary.123",
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.4.0-canary.122",
3
+ "version": "15.4.0-canary.123",
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.4.0-canary.122",
103
+ "@next/env": "15.4.0-canary.123",
104
104
  "@swc/helpers": "0.5.15",
105
105
  "caniuse-lite": "^1.0.30001579",
106
106
  "postcss": "8.4.31",
@@ -130,14 +130,14 @@
130
130
  },
131
131
  "optionalDependencies": {
132
132
  "sharp": "^0.34.1",
133
- "@next/swc-darwin-arm64": "15.4.0-canary.122",
134
- "@next/swc-darwin-x64": "15.4.0-canary.122",
135
- "@next/swc-linux-arm64-gnu": "15.4.0-canary.122",
136
- "@next/swc-linux-arm64-musl": "15.4.0-canary.122",
137
- "@next/swc-linux-x64-gnu": "15.4.0-canary.122",
138
- "@next/swc-linux-x64-musl": "15.4.0-canary.122",
139
- "@next/swc-win32-arm64-msvc": "15.4.0-canary.122",
140
- "@next/swc-win32-x64-msvc": "15.4.0-canary.122"
133
+ "@next/swc-darwin-arm64": "15.4.0-canary.123",
134
+ "@next/swc-darwin-x64": "15.4.0-canary.123",
135
+ "@next/swc-linux-arm64-gnu": "15.4.0-canary.123",
136
+ "@next/swc-linux-arm64-musl": "15.4.0-canary.123",
137
+ "@next/swc-linux-x64-gnu": "15.4.0-canary.123",
138
+ "@next/swc-linux-x64-musl": "15.4.0-canary.123",
139
+ "@next/swc-win32-arm64-msvc": "15.4.0-canary.123",
140
+ "@next/swc-win32-x64-msvc": "15.4.0-canary.123"
141
141
  },
142
142
  "devDependencies": {
143
143
  "@ampproject/toolbox-optimizer": "2.8.3",
@@ -171,11 +171,11 @@
171
171
  "@jest/types": "29.5.0",
172
172
  "@mswjs/interceptors": "0.23.0",
173
173
  "@napi-rs/triples": "1.2.0",
174
- "@next/font": "15.4.0-canary.122",
175
- "@next/polyfill-module": "15.4.0-canary.122",
176
- "@next/polyfill-nomodule": "15.4.0-canary.122",
177
- "@next/react-refresh-utils": "15.4.0-canary.122",
178
- "@next/swc": "15.4.0-canary.122",
174
+ "@next/font": "15.4.0-canary.123",
175
+ "@next/polyfill-module": "15.4.0-canary.123",
176
+ "@next/polyfill-nomodule": "15.4.0-canary.123",
177
+ "@next/react-refresh-utils": "15.4.0-canary.123",
178
+ "@next/swc": "15.4.0-canary.123",
179
179
  "@opentelemetry/api": "1.6.0",
180
180
  "@playwright/test": "1.51.1",
181
181
  "@rspack/core": "1.4.5",