next 15.6.0-canary.2 → 15.6.0-canary.4
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.
- package/dist/bin/next +1 -1
- package/dist/build/adapter/build-complete.js +1 -1
- package/dist/build/adapter/build-complete.js.map +1 -1
- package/dist/build/index.js +9 -5
- package/dist/build/index.js.map +1 -1
- package/dist/build/swc/index.js +1 -1
- package/dist/build/templates/app-page.js +5 -1
- package/dist/build/templates/app-page.js.map +1 -1
- package/dist/build/webpack/loaders/devtool/devtool-style-inject.js +31 -26
- package/dist/build/webpack/loaders/devtool/devtool-style-inject.js.map +1 -1
- package/dist/build/webpack-config.js +2 -2
- package/dist/client/app-bootstrap.js +1 -1
- package/dist/client/index.js +1 -1
- package/dist/compiled/next-devtools/index.js +1 -1
- package/dist/compiled/next-devtools/index.js.map +1 -1
- package/dist/compiled/next-server/server.runtime.prod.js +5 -5
- package/dist/compiled/next-server/server.runtime.prod.js.map +1 -1
- package/dist/esm/build/adapter/build-complete.js +1 -1
- package/dist/esm/build/adapter/build-complete.js.map +1 -1
- package/dist/esm/build/index.js +9 -5
- package/dist/esm/build/index.js.map +1 -1
- package/dist/esm/build/swc/index.js +1 -1
- package/dist/esm/build/templates/app-page.js +5 -1
- package/dist/esm/build/templates/app-page.js.map +1 -1
- package/dist/esm/build/webpack/loaders/devtool/devtool-style-inject.js +31 -26
- package/dist/esm/build/webpack/loaders/devtool/devtool-style-inject.js.map +1 -1
- package/dist/esm/build/webpack-config.js +2 -2
- package/dist/esm/client/app-bootstrap.js +1 -1
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/esm/server/lib/app-info-log.js +1 -1
- package/dist/esm/server/lib/router-utils/setup-dev-bundler.js +1 -1
- package/dist/esm/server/lib/router-utils/setup-dev-bundler.js.map +1 -1
- package/dist/esm/server/lib/start-server.js +1 -1
- package/dist/esm/server/node-environment-extensions/unhandled-rejection.js +50 -1
- package/dist/esm/server/node-environment-extensions/unhandled-rejection.js.map +1 -1
- package/dist/esm/shared/lib/canary-only.js +1 -1
- package/dist/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/server/lib/app-info-log.js +1 -1
- package/dist/server/lib/router-utils/setup-dev-bundler.js +1 -1
- package/dist/server/lib/router-utils/setup-dev-bundler.js.map +1 -1
- package/dist/server/lib/start-server.js +1 -1
- package/dist/server/node-environment-extensions/unhandled-rejection.js +50 -1
- package/dist/server/node-environment-extensions/unhandled-rejection.js.map +1 -1
- package/dist/shared/lib/canary-only.js +1 -1
- package/dist/telemetry/anonymous-meta.js +1 -1
- package/dist/telemetry/events/session-stopped.js +2 -2
- package/dist/telemetry/events/version.js +2 -2
- package/package.json +15 -15
@@ -22,6 +22,30 @@ Object.defineProperty(exports, "__esModule", {
|
|
22
22
|
value: true
|
23
23
|
});
|
24
24
|
const _workunitasyncstorageexternal = require("../app-render/work-unit-async-storage.external");
|
25
|
+
const MODE = process.env.NEXT_USE_UNHANDLED_REJECTION_FILTER;
|
26
|
+
let ENABLE_UHR_FILTER = false;
|
27
|
+
let DEBUG_UHR_FILTER = false;
|
28
|
+
switch(MODE){
|
29
|
+
case 'debug':
|
30
|
+
DEBUG_UHR_FILTER = true;
|
31
|
+
// fallthrough
|
32
|
+
case 'enabled':
|
33
|
+
case 'true':
|
34
|
+
case '1':
|
35
|
+
ENABLE_UHR_FILTER = true;
|
36
|
+
break;
|
37
|
+
case 'false':
|
38
|
+
case 'disabled':
|
39
|
+
case '0':
|
40
|
+
case '':
|
41
|
+
case undefined:
|
42
|
+
break;
|
43
|
+
default:
|
44
|
+
if (typeof MODE === 'string') {
|
45
|
+
console.error(`NEXT_USE_UNHANDLED_REJECTION_FILTER has an unrecognized value: ${JSON.stringify(MODE)}. Use "enabled", "disabled", or "debug" or omit the environment variable altogether`);
|
46
|
+
}
|
47
|
+
}
|
48
|
+
const debug = DEBUG_UHR_FILTER ? (...args)=>console.log('[UNHANDLED REJECTION DEBUG]', ...args, new Error().stack) : undefined;
|
25
49
|
let filterInstalled = false;
|
26
50
|
// We store the proxied listeners for unhandled rejections here.
|
27
51
|
let underlyingListeners = [];
|
@@ -46,8 +70,10 @@ let didWarnRemoveAll = false;
|
|
46
70
|
* This should be called once during server startup to install the global filter.
|
47
71
|
*/ function installUnhandledRejectionFilter() {
|
48
72
|
if (filterInstalled) {
|
73
|
+
debug == null ? void 0 : debug('unexpected second install');
|
49
74
|
return;
|
50
75
|
}
|
76
|
+
debug == null ? void 0 : debug('installUnhandledRejectionFilter', process.listeners('unhandledRejection').map((l)=>l.toString()));
|
51
77
|
// Capture existing handlers
|
52
78
|
underlyingListeners = Array.from(process.listeners('unhandledRejection'));
|
53
79
|
// We assume all existing handlers are not "once"
|
@@ -78,6 +104,7 @@ let didWarnRemoveAll = false;
|
|
78
104
|
// Intercept process.on to capture new unhandled rejection handlers
|
79
105
|
process.on = patchMethod(originalProcessOn, function(event, listener) {
|
80
106
|
if (event === 'unhandledRejection') {
|
107
|
+
debug == null ? void 0 : debug('process.on/addListener', listener.toString());
|
81
108
|
// Add new handlers to our internal queue instead of the process
|
82
109
|
underlyingListeners.push(listener);
|
83
110
|
listenerMetadata.push({
|
@@ -94,6 +121,7 @@ let didWarnRemoveAll = false;
|
|
94
121
|
// Intercept process.once for one-time handlers
|
95
122
|
process.once = patchMethod(originalProcessOnce, function(event, listener) {
|
96
123
|
if (event === 'unhandledRejection') {
|
124
|
+
debug == null ? void 0 : debug('process.once', listener.toString());
|
97
125
|
underlyingListeners.push(listener);
|
98
126
|
listenerMetadata.push({
|
99
127
|
listener,
|
@@ -107,6 +135,7 @@ let didWarnRemoveAll = false;
|
|
107
135
|
// Intercept process.prependListener for handlers that should go first
|
108
136
|
process.prependListener = patchMethod(originalProcessPrependListener, function(event, listener) {
|
109
137
|
if (event === 'unhandledRejection') {
|
138
|
+
debug == null ? void 0 : debug('process.prependListener', listener.toString());
|
110
139
|
if (didWarnPrepend === false) {
|
111
140
|
didWarnPrepend = true;
|
112
141
|
console.warn('Warning: `prependListener("unhandledRejection")` called, but Next.js maintains the first listener ' + 'which filters out unnecessary events from aborted prerenders. Your handler will be second.');
|
@@ -125,6 +154,7 @@ let didWarnRemoveAll = false;
|
|
125
154
|
// Intercept process.prependOnceListener for one-time handlers that should go first
|
126
155
|
process.prependOnceListener = patchMethod(originalProcessPrependOnceListener, function(event, listener) {
|
127
156
|
if (event === 'unhandledRejection') {
|
157
|
+
debug == null ? void 0 : debug('process.prependOnceListener', listener.toString());
|
128
158
|
if (didWarnPrepend === false) {
|
129
159
|
didWarnPrepend = true;
|
130
160
|
console.warn('Warning: `prependOnceListener("unhandledRejection")` called, but Next.js maintains the first listener ' + 'which filters out unnecessary events from aborted prerenders. Your handler will be second.');
|
@@ -143,6 +173,7 @@ let didWarnRemoveAll = false;
|
|
143
173
|
// Intercept process.removeListener
|
144
174
|
process.removeListener = patchMethod(originalProcessRemoveListener, function(event, listener) {
|
145
175
|
if (event === 'unhandledRejection') {
|
176
|
+
debug == null ? void 0 : debug('process.removeListener', listener.toString());
|
146
177
|
// Check if they're trying to remove our filtering handler
|
147
178
|
if (listener === filteringUnhandledRejectionHandler) {
|
148
179
|
uninstallUnhandledRejectionFilter();
|
@@ -150,8 +181,11 @@ let didWarnRemoveAll = false;
|
|
150
181
|
}
|
151
182
|
const index = underlyingListeners.lastIndexOf(listener);
|
152
183
|
if (index > -1) {
|
184
|
+
debug == null ? void 0 : debug('process.removeListener match found', index);
|
153
185
|
underlyingListeners.splice(index, 1);
|
154
186
|
listenerMetadata.splice(index, 1);
|
187
|
+
} else {
|
188
|
+
debug == null ? void 0 : debug('process.removeListener match not found', index);
|
155
189
|
}
|
156
190
|
return process;
|
157
191
|
}
|
@@ -163,6 +197,7 @@ let didWarnRemoveAll = false;
|
|
163
197
|
// Intercept process.removeAllListeners
|
164
198
|
process.removeAllListeners = patchMethod(originalProcessRemoveAllListeners, function(event) {
|
165
199
|
if (event === 'unhandledRejection') {
|
200
|
+
debug == null ? void 0 : debug('process.removeAllListeners', underlyingListeners.map((l)=>l.toString()));
|
166
201
|
if (didWarnRemoveAll === false) {
|
167
202
|
didWarnRemoveAll = true;
|
168
203
|
console.warn('Warning: `removeAllListeners("unhandledRejection")` called. Next.js maintains an `unhandledRejection` listener ' + 'to filter out unnecessary rejection warnings caused by aborting prerenders early. It is not recommended that you ' + 'uninstall this behavior, but if you want to you must call `process.removeListener("unhandledRejection", listener)`. ' + 'You can acquire the listener from `process.listeners("unhandledRejection")[0]`.');
|
@@ -183,6 +218,10 @@ let didWarnRemoveAll = false;
|
|
183
218
|
// Intercept process.listeners to return our internal handlers for unhandled rejection
|
184
219
|
process.listeners = patchMethod(originalProcessListeners, function(event) {
|
185
220
|
if (event === 'unhandledRejection') {
|
221
|
+
debug == null ? void 0 : debug('process.listeners', [
|
222
|
+
filteringUnhandledRejectionHandler,
|
223
|
+
...underlyingListeners
|
224
|
+
].map((l)=>l.toString()));
|
186
225
|
return [
|
187
226
|
filteringUnhandledRejectionHandler,
|
188
227
|
...underlyingListeners
|
@@ -196,6 +235,8 @@ let didWarnRemoveAll = false;
|
|
196
235
|
originalProcessOn.call(process, 'unhandledRejection', filteringUnhandledRejectionHandler);
|
197
236
|
originalProcessOn.call(process, 'rejectionHandled', noopRejectionHandled);
|
198
237
|
filterInstalled = true;
|
238
|
+
debug == null ? void 0 : debug('after install actual listeners', originalProcessListeners.call(process, 'unhandledRejection').map((l)=>l.toString()));
|
239
|
+
debug == null ? void 0 : debug('after install listeners', process.listeners('unhandledRejection').map((l)=>l.toString()));
|
199
240
|
}
|
200
241
|
/**
|
201
242
|
* Uninstalls the unhandled rejection filter and restores original process methods.
|
@@ -203,8 +244,13 @@ let didWarnRemoveAll = false;
|
|
203
244
|
* @internal
|
204
245
|
*/ function uninstallUnhandledRejectionFilter() {
|
205
246
|
if (!filterInstalled) {
|
247
|
+
debug == null ? void 0 : debug('unexpected second uninstall');
|
206
248
|
return;
|
207
249
|
}
|
250
|
+
debug == null ? void 0 : debug('uninstallUnhandledRejectionFilter', [
|
251
|
+
filteringUnhandledRejectionHandler,
|
252
|
+
...underlyingListeners
|
253
|
+
].map((l)=>l.toString()));
|
208
254
|
// Restore original process methods
|
209
255
|
process.on = originalProcessOn;
|
210
256
|
process.addListener = originalProcessAddListener;
|
@@ -230,6 +276,7 @@ let didWarnRemoveAll = false;
|
|
230
276
|
filterInstalled = false;
|
231
277
|
underlyingListeners.length = 0;
|
232
278
|
listenerMetadata.length = 0;
|
279
|
+
debug == null ? void 0 : debug('after uninstall', process.listeners('unhandledRejection').map((l)=>l.toString()));
|
233
280
|
}
|
234
281
|
/**
|
235
282
|
* The filtering handler that decides whether to suppress or delegate unhandled rejections.
|
@@ -294,6 +341,8 @@ let didWarnRemoveAll = false;
|
|
294
341
|
}
|
295
342
|
function noopRejectionHandled() {}
|
296
343
|
// Install the filter when this module is imported
|
297
|
-
|
344
|
+
if (ENABLE_UHR_FILTER) {
|
345
|
+
installUnhandledRejectionFilter();
|
346
|
+
}
|
298
347
|
|
299
348
|
//# sourceMappingURL=unhandled-rejection.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/server/node-environment-extensions/unhandled-rejection.tsx"],"sourcesContent":["/**\n * Manages unhandled rejection listeners to intelligently filter rejections\n * from aborted prerenders when cache components are enabled.\n *\n * THE PROBLEM:\n * When we abort prerenders we expect to find numerous unhandled promise rejections due to\n * things like awaiting Request data like `headers()`. The rejections are fine and should\n * not be construed as problematic so we need to avoid the appearance of a problem by\n * omitting them from the logged output.\n *\n * THE STRATEGY:\n * 1. Install a filtering unhandled rejection handler\n * 2. Intercept process event methods to capture new handlers in our internal queue\n * 3. For each rejection, check if it comes from an aborted prerender context\n * 4. If yes, suppress it. If no, delegate to all handlers in our queue\n * 5. This provides precise filtering without time-based windows\n *\n * This ensures we suppress noisy prerender-related rejections while preserving\n * normal error logging for genuine unhandled rejections.\n */\n\nimport { workUnitAsyncStorage } from '../app-render/work-unit-async-storage.external'\n\ntype ListenerMetadata = {\n listener: NodeJS.UnhandledRejectionListener\n once: boolean\n}\n\nlet filterInstalled = false\n\n// We store the proxied listeners for unhandled rejections here.\nlet underlyingListeners: Array<NodeJS.UnhandledRejectionListener> = []\n// We store a unique pointer to each event listener registration to track\n// details like whether the listener is a once listener.\nlet listenerMetadata: Array<ListenerMetadata> = []\n\nlet originalProcessOn: typeof process.on\nlet originalProcessAddListener: typeof process.addListener\nlet originalProcessOnce: typeof process.once\nlet originalProcessRemoveListener: typeof process.removeListener\nlet originalProcessRemoveAllListeners: typeof process.removeAllListeners\nlet originalProcessListeners: typeof process.listeners\nlet originalProcessPrependListener: typeof process.prependListener\nlet originalProcessPrependOnceListener: typeof process.prependOnceListener\nlet originalProcessOff: typeof process.off\n\nlet didWarnPrepend = false\nlet didWarnRemoveAll = false\n\n/**\n * Installs a filtering unhandled rejection handler that intelligently suppresses\n * rejections from aborted prerender contexts.\n *\n * This should be called once during server startup to install the global filter.\n */\nfunction installUnhandledRejectionFilter(): void {\n if (filterInstalled) {\n return\n }\n\n // Capture existing handlers\n underlyingListeners = Array.from(process.listeners('unhandledRejection'))\n // We assume all existing handlers are not \"once\"\n listenerMetadata = underlyingListeners.map((l) => ({\n listener: l,\n once: false,\n }))\n\n // Store the original process methods\n originalProcessOn = process.on\n originalProcessAddListener = process.addListener\n originalProcessOnce = process.once\n originalProcessOff = process.off\n originalProcessRemoveListener = process.removeListener\n originalProcessRemoveAllListeners = process.removeAllListeners\n originalProcessListeners = process.listeners\n originalProcessPrependListener = process.prependListener\n originalProcessPrependOnceListener = process.prependOnceListener\n\n // Helper function to create a patched method that preserves toString behavior\n function patchMethod<T extends Function>(original: T, patchedImpl: T): T {\n // Preserve the original toString behavior\n Object.defineProperty(patchedImpl, 'toString', {\n value: original.toString.bind(original),\n writable: true,\n configurable: true,\n })\n return patchedImpl\n }\n\n // Intercept process.on to capture new unhandled rejection handlers\n process.on = patchMethod(originalProcessOn, function (\n event: string | symbol,\n listener: (...args: any[]) => void\n ) {\n if (event === 'unhandledRejection') {\n // Add new handlers to our internal queue instead of the process\n underlyingListeners.push(listener as NodeJS.UnhandledRejectionListener)\n listenerMetadata.push({ listener, once: false })\n return process\n }\n // For other events, use the original method\n return originalProcessOn.call(process, event, listener)\n } as typeof process.on)\n\n // Intercept process.addListener (alias for process.on)\n process.addListener = patchMethod(\n originalProcessAddListener,\n process.on as typeof originalProcessAddListener\n )\n\n // Intercept process.once for one-time handlers\n process.once = patchMethod(originalProcessOnce, function (\n event: string | symbol,\n listener: (...args: any[]) => void\n ) {\n if (event === 'unhandledRejection') {\n underlyingListeners.push(listener)\n listenerMetadata.push({ listener, once: true })\n return process\n }\n // For other events, use the original method\n return originalProcessOnce.call(process, event, listener)\n } as typeof process.once)\n\n // Intercept process.prependListener for handlers that should go first\n process.prependListener = patchMethod(\n originalProcessPrependListener,\n function (event: string | symbol, listener: (...args: any[]) => void) {\n if (event === 'unhandledRejection') {\n if (didWarnPrepend === false) {\n didWarnPrepend = true\n console.warn(\n 'Warning: `prependListener(\"unhandledRejection\")` called, but Next.js maintains the first listener ' +\n 'which filters out unnecessary events from aborted prerenders. Your handler will be second.'\n )\n }\n // Add new handlers to the beginning of our internal queue\n underlyingListeners.unshift(\n listener as NodeJS.UnhandledRejectionListener\n )\n listenerMetadata.unshift({ listener, once: false })\n return process\n }\n // For other events, use the original method\n return originalProcessPrependListener.call(\n process,\n event as any,\n listener\n )\n } as typeof process.prependListener\n )\n\n // Intercept process.prependOnceListener for one-time handlers that should go first\n process.prependOnceListener = patchMethod(\n originalProcessPrependOnceListener,\n function (event: string | symbol, listener: (...args: any[]) => void) {\n if (event === 'unhandledRejection') {\n if (didWarnPrepend === false) {\n didWarnPrepend = true\n console.warn(\n 'Warning: `prependOnceListener(\"unhandledRejection\")` called, but Next.js maintains the first listener ' +\n 'which filters out unnecessary events from aborted prerenders. Your handler will be second.'\n )\n }\n // Add to the beginning of our internal queue\n underlyingListeners.unshift(listener)\n listenerMetadata.unshift({ listener, once: true })\n return process\n }\n // For other events, use the original method\n return originalProcessPrependOnceListener.call(\n process,\n event as any,\n listener\n )\n } as typeof process.prependOnceListener\n )\n\n // Intercept process.removeListener\n process.removeListener = patchMethod(originalProcessRemoveListener, function (\n event: string | symbol,\n listener: (...args: any[]) => void\n ) {\n if (event === 'unhandledRejection') {\n // Check if they're trying to remove our filtering handler\n if (listener === filteringUnhandledRejectionHandler) {\n uninstallUnhandledRejectionFilter()\n return process\n }\n\n const index = underlyingListeners.lastIndexOf(listener)\n if (index > -1) {\n underlyingListeners.splice(index, 1)\n listenerMetadata.splice(index, 1)\n }\n return process\n }\n // For other events, use the original method\n return originalProcessRemoveListener.call(process, event, listener)\n } as typeof process.removeListener)\n\n // Intercept process.off (alias for process.removeListener)\n process.off = patchMethod(\n originalProcessOff,\n process.removeListener as typeof originalProcessOff\n )\n\n // Intercept process.removeAllListeners\n process.removeAllListeners = patchMethod(\n originalProcessRemoveAllListeners,\n function (event?: string | symbol) {\n if (event === 'unhandledRejection') {\n if (didWarnRemoveAll === false) {\n didWarnRemoveAll = true\n console.warn(\n 'Warning: `removeAllListeners(\"unhandledRejection\")` called. Next.js maintains an `unhandledRejection` listener ' +\n 'to filter out unnecessary rejection warnings caused by aborting prerenders early. It is not recommended that you ' +\n 'uninstall this behavior, but if you want to you must call `process.removeListener(\"unhandledRejection\", listener)`. ' +\n 'You can acquire the listener from `process.listeners(\"unhandledRejection\")[0]`.'\n )\n }\n underlyingListeners.length = 0\n listenerMetadata.length = 0\n return process\n }\n\n // For other specific events, use the original method\n if (event !== undefined) {\n return originalProcessRemoveAllListeners.call(process, event)\n }\n\n // If no event specified (removeAllListeners()), uninstall our patch completely\n console.warn(\n 'Warning: `removeAllListeners()` called - uninstalling Next.js unhandled rejection filter. ' +\n 'You will observe `unhandledRejection` logs from prerendering which are not problematic.'\n )\n uninstallUnhandledRejectionFilter()\n return originalProcessRemoveAllListeners.call(process)\n } as typeof process.removeAllListeners\n )\n\n // Intercept process.listeners to return our internal handlers for unhandled rejection\n process.listeners = patchMethod(originalProcessListeners, function (\n event: string | symbol\n ) {\n if (event === 'unhandledRejection') {\n return [filteringUnhandledRejectionHandler, ...underlyingListeners]\n }\n return originalProcessListeners.call(process, event as any)\n } as typeof process.listeners)\n\n // Remove all existing handlers\n originalProcessRemoveAllListeners.call(process, 'unhandledRejection')\n\n // Install our filtering handler\n originalProcessOn.call(\n process,\n 'unhandledRejection',\n filteringUnhandledRejectionHandler\n )\n\n originalProcessOn.call(process, 'rejectionHandled', noopRejectionHandled)\n\n filterInstalled = true\n}\n\n/**\n * Uninstalls the unhandled rejection filter and restores original process methods.\n * This is called when someone explicitly removes our filtering handler.\n * @internal\n */\nfunction uninstallUnhandledRejectionFilter(): void {\n if (!filterInstalled) {\n return\n }\n\n // Restore original process methods\n process.on = originalProcessOn\n process.addListener = originalProcessAddListener\n process.once = originalProcessOnce\n process.prependListener = originalProcessPrependListener\n process.prependOnceListener = originalProcessPrependOnceListener\n process.removeListener = originalProcessRemoveListener\n process.off = originalProcessOff\n process.removeAllListeners = originalProcessRemoveAllListeners\n process.listeners = originalProcessListeners\n\n // Remove our filtering handler\n originalProcessRemoveListener.call(\n process,\n 'unhandledRejection',\n filteringUnhandledRejectionHandler\n )\n\n originalProcessRemoveListener.call(\n process,\n 'rejectionHandled',\n noopRejectionHandled\n )\n\n // Re-register all the handlers that were in our internal queue\n for (const meta of listenerMetadata) {\n if (meta.once) {\n originalProcessOnce.call(process, 'unhandledRejection', meta.listener)\n } else {\n originalProcessOn.call(process, 'unhandledRejection', meta.listener)\n }\n }\n\n // Reset state\n filterInstalled = false\n underlyingListeners.length = 0\n listenerMetadata.length = 0\n}\n\n/**\n * The filtering handler that decides whether to suppress or delegate unhandled rejections.\n */\nfunction filteringUnhandledRejectionHandler(\n reason: any,\n promise: Promise<any>\n): void {\n const capturedListenerMetadata = Array.from(listenerMetadata)\n\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime': {\n const signal = workUnitStore.renderSignal\n if (signal.aborted) {\n // This unhandledRejection is from async work spawned in a now\n // aborted prerender. We don't need to report this.\n return\n }\n break\n }\n case 'prerender-ppr':\n case 'prerender-legacy':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n // Not from an aborted prerender, delegate to original handlers\n if (capturedListenerMetadata.length === 0) {\n // We need to log something because the default behavior when there is\n // no event handler installed is to trigger an Unhandled Exception.\n // We don't do that here b/c we don't want to rely on this implicit default\n // to kill the process since it can be disabled by installing a userland listener\n // and you may also choose to run Next.js with args such that unhandled rejections\n // do not automatically terminate the process.\n console.error('Unhandled Rejection:', reason)\n } else {\n try {\n for (const meta of capturedListenerMetadata) {\n if (meta.once) {\n // This is a once listener. we remove it from our set before we call it\n const index = listenerMetadata.indexOf(meta)\n if (index !== -1) {\n underlyingListeners.splice(index, 1)\n listenerMetadata.splice(index, 1)\n }\n }\n const listener = meta.listener\n listener(reason, promise)\n }\n } catch (error) {\n // If any handlers error we produce an Uncaught Exception\n setImmediate(() => {\n throw error\n })\n }\n }\n}\n\nfunction noopRejectionHandled() {}\n\n// Install the filter when this module is imported\ninstallUnhandledRejectionFilter()\n"],"names":["filterInstalled","underlyingListeners","listenerMetadata","originalProcessOn","originalProcessAddListener","originalProcessOnce","originalProcessRemoveListener","originalProcessRemoveAllListeners","originalProcessListeners","originalProcessPrependListener","originalProcessPrependOnceListener","originalProcessOff","didWarnPrepend","didWarnRemoveAll","installUnhandledRejectionFilter","Array","from","process","listeners","map","l","listener","once","on","addListener","off","removeListener","removeAllListeners","prependListener","prependOnceListener","patchMethod","original","patchedImpl","Object","defineProperty","value","toString","bind","writable","configurable","event","push","call","console","warn","unshift","filteringUnhandledRejectionHandler","uninstallUnhandledRejectionFilter","index","lastIndexOf","splice","length","undefined","noopRejectionHandled","meta","reason","promise","capturedListenerMetadata","workUnitStore","workUnitAsyncStorage","getStore","type","signal","renderSignal","aborted","error","indexOf","setImmediate"],"mappings":"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","ignoreList":[0]}
|
1
|
+
{"version":3,"sources":["../../../src/server/node-environment-extensions/unhandled-rejection.tsx"],"sourcesContent":["/**\n * Manages unhandled rejection listeners to intelligently filter rejections\n * from aborted prerenders when cache components are enabled.\n *\n * THE PROBLEM:\n * When we abort prerenders we expect to find numerous unhandled promise rejections due to\n * things like awaiting Request data like `headers()`. The rejections are fine and should\n * not be construed as problematic so we need to avoid the appearance of a problem by\n * omitting them from the logged output.\n *\n * THE STRATEGY:\n * 1. Install a filtering unhandled rejection handler\n * 2. Intercept process event methods to capture new handlers in our internal queue\n * 3. For each rejection, check if it comes from an aborted prerender context\n * 4. If yes, suppress it. If no, delegate to all handlers in our queue\n * 5. This provides precise filtering without time-based windows\n *\n * This ensures we suppress noisy prerender-related rejections while preserving\n * normal error logging for genuine unhandled rejections.\n */\n\nimport { workUnitAsyncStorage } from '../app-render/work-unit-async-storage.external'\n\nconst MODE:\n | 'enabled'\n | 'debug'\n | 'true'\n | 'false'\n | '1'\n | '0'\n | ''\n | string\n | undefined = process.env.NEXT_USE_UNHANDLED_REJECTION_FILTER\n\nlet ENABLE_UHR_FILTER = false\nlet DEBUG_UHR_FILTER = false\n\nswitch (MODE) {\n case 'debug':\n DEBUG_UHR_FILTER = true\n // fallthrough\n case 'enabled':\n case 'true':\n case '1':\n ENABLE_UHR_FILTER = true\n break\n case 'false':\n case 'disabled':\n case '0':\n case '':\n case undefined:\n break\n default:\n if (typeof MODE === 'string') {\n console.error(\n `NEXT_USE_UNHANDLED_REJECTION_FILTER has an unrecognized value: ${JSON.stringify(MODE)}. Use \"enabled\", \"disabled\", or \"debug\" or omit the environment variable altogether`\n )\n }\n}\n\nconst debug = DEBUG_UHR_FILTER\n ? (...args: any[]) =>\n console.log('[UNHANDLED REJECTION DEBUG]', ...args, new Error().stack)\n : undefined\n\ntype ListenerMetadata = {\n listener: NodeJS.UnhandledRejectionListener\n once: boolean\n}\n\nlet filterInstalled = false\n\n// We store the proxied listeners for unhandled rejections here.\nlet underlyingListeners: Array<NodeJS.UnhandledRejectionListener> = []\n// We store a unique pointer to each event listener registration to track\n// details like whether the listener is a once listener.\nlet listenerMetadata: Array<ListenerMetadata> = []\n\nlet originalProcessOn: typeof process.on\nlet originalProcessAddListener: typeof process.addListener\nlet originalProcessOnce: typeof process.once\nlet originalProcessRemoveListener: typeof process.removeListener\nlet originalProcessRemoveAllListeners: typeof process.removeAllListeners\nlet originalProcessListeners: typeof process.listeners\nlet originalProcessPrependListener: typeof process.prependListener\nlet originalProcessPrependOnceListener: typeof process.prependOnceListener\nlet originalProcessOff: typeof process.off\n\nlet didWarnPrepend = false\nlet didWarnRemoveAll = false\n\n/**\n * Installs a filtering unhandled rejection handler that intelligently suppresses\n * rejections from aborted prerender contexts.\n *\n * This should be called once during server startup to install the global filter.\n */\nfunction installUnhandledRejectionFilter(): void {\n if (filterInstalled) {\n debug?.('unexpected second install')\n return\n }\n\n debug?.(\n 'installUnhandledRejectionFilter',\n process.listeners('unhandledRejection').map((l) => l.toString())\n )\n\n // Capture existing handlers\n underlyingListeners = Array.from(process.listeners('unhandledRejection'))\n // We assume all existing handlers are not \"once\"\n listenerMetadata = underlyingListeners.map((l) => ({\n listener: l,\n once: false,\n }))\n\n // Store the original process methods\n originalProcessOn = process.on\n originalProcessAddListener = process.addListener\n originalProcessOnce = process.once\n originalProcessOff = process.off\n originalProcessRemoveListener = process.removeListener\n originalProcessRemoveAllListeners = process.removeAllListeners\n originalProcessListeners = process.listeners\n originalProcessPrependListener = process.prependListener\n originalProcessPrependOnceListener = process.prependOnceListener\n\n // Helper function to create a patched method that preserves toString behavior\n function patchMethod<T extends Function>(original: T, patchedImpl: T): T {\n // Preserve the original toString behavior\n Object.defineProperty(patchedImpl, 'toString', {\n value: original.toString.bind(original),\n writable: true,\n configurable: true,\n })\n return patchedImpl\n }\n\n // Intercept process.on to capture new unhandled rejection handlers\n process.on = patchMethod(originalProcessOn, function (\n event: string | symbol,\n listener: (...args: any[]) => void\n ) {\n if (event === 'unhandledRejection') {\n debug?.('process.on/addListener', listener.toString())\n // Add new handlers to our internal queue instead of the process\n underlyingListeners.push(listener as NodeJS.UnhandledRejectionListener)\n listenerMetadata.push({ listener, once: false })\n return process\n }\n // For other events, use the original method\n return originalProcessOn.call(process, event, listener)\n } as typeof process.on)\n\n // Intercept process.addListener (alias for process.on)\n process.addListener = patchMethod(\n originalProcessAddListener,\n process.on as typeof originalProcessAddListener\n )\n\n // Intercept process.once for one-time handlers\n process.once = patchMethod(originalProcessOnce, function (\n event: string | symbol,\n listener: (...args: any[]) => void\n ) {\n if (event === 'unhandledRejection') {\n debug?.('process.once', listener.toString())\n underlyingListeners.push(listener)\n listenerMetadata.push({ listener, once: true })\n return process\n }\n // For other events, use the original method\n return originalProcessOnce.call(process, event, listener)\n } as typeof process.once)\n\n // Intercept process.prependListener for handlers that should go first\n process.prependListener = patchMethod(\n originalProcessPrependListener,\n function (event: string | symbol, listener: (...args: any[]) => void) {\n if (event === 'unhandledRejection') {\n debug?.('process.prependListener', listener.toString())\n if (didWarnPrepend === false) {\n didWarnPrepend = true\n console.warn(\n 'Warning: `prependListener(\"unhandledRejection\")` called, but Next.js maintains the first listener ' +\n 'which filters out unnecessary events from aborted prerenders. Your handler will be second.'\n )\n }\n // Add new handlers to the beginning of our internal queue\n underlyingListeners.unshift(\n listener as NodeJS.UnhandledRejectionListener\n )\n listenerMetadata.unshift({ listener, once: false })\n return process\n }\n // For other events, use the original method\n return originalProcessPrependListener.call(\n process,\n event as any,\n listener\n )\n } as typeof process.prependListener\n )\n\n // Intercept process.prependOnceListener for one-time handlers that should go first\n process.prependOnceListener = patchMethod(\n originalProcessPrependOnceListener,\n function (event: string | symbol, listener: (...args: any[]) => void) {\n if (event === 'unhandledRejection') {\n debug?.('process.prependOnceListener', listener.toString())\n if (didWarnPrepend === false) {\n didWarnPrepend = true\n console.warn(\n 'Warning: `prependOnceListener(\"unhandledRejection\")` called, but Next.js maintains the first listener ' +\n 'which filters out unnecessary events from aborted prerenders. Your handler will be second.'\n )\n }\n // Add to the beginning of our internal queue\n underlyingListeners.unshift(listener)\n listenerMetadata.unshift({ listener, once: true })\n return process\n }\n // For other events, use the original method\n return originalProcessPrependOnceListener.call(\n process,\n event as any,\n listener\n )\n } as typeof process.prependOnceListener\n )\n\n // Intercept process.removeListener\n process.removeListener = patchMethod(originalProcessRemoveListener, function (\n event: string | symbol,\n listener: (...args: any[]) => void\n ) {\n if (event === 'unhandledRejection') {\n debug?.('process.removeListener', listener.toString())\n // Check if they're trying to remove our filtering handler\n if (listener === filteringUnhandledRejectionHandler) {\n uninstallUnhandledRejectionFilter()\n return process\n }\n\n const index = underlyingListeners.lastIndexOf(listener)\n if (index > -1) {\n debug?.('process.removeListener match found', index)\n underlyingListeners.splice(index, 1)\n listenerMetadata.splice(index, 1)\n } else {\n debug?.('process.removeListener match not found', index)\n }\n return process\n }\n // For other events, use the original method\n return originalProcessRemoveListener.call(process, event, listener)\n } as typeof process.removeListener)\n\n // Intercept process.off (alias for process.removeListener)\n process.off = patchMethod(\n originalProcessOff,\n process.removeListener as typeof originalProcessOff\n )\n\n // Intercept process.removeAllListeners\n process.removeAllListeners = patchMethod(\n originalProcessRemoveAllListeners,\n function (event?: string | symbol) {\n if (event === 'unhandledRejection') {\n debug?.(\n 'process.removeAllListeners',\n underlyingListeners.map((l) => l.toString())\n )\n if (didWarnRemoveAll === false) {\n didWarnRemoveAll = true\n console.warn(\n 'Warning: `removeAllListeners(\"unhandledRejection\")` called. Next.js maintains an `unhandledRejection` listener ' +\n 'to filter out unnecessary rejection warnings caused by aborting prerenders early. It is not recommended that you ' +\n 'uninstall this behavior, but if you want to you must call `process.removeListener(\"unhandledRejection\", listener)`. ' +\n 'You can acquire the listener from `process.listeners(\"unhandledRejection\")[0]`.'\n )\n }\n underlyingListeners.length = 0\n listenerMetadata.length = 0\n return process\n }\n\n // For other specific events, use the original method\n if (event !== undefined) {\n return originalProcessRemoveAllListeners.call(process, event)\n }\n\n // If no event specified (removeAllListeners()), uninstall our patch completely\n console.warn(\n 'Warning: `removeAllListeners()` called - uninstalling Next.js unhandled rejection filter. ' +\n 'You will observe `unhandledRejection` logs from prerendering which are not problematic.'\n )\n uninstallUnhandledRejectionFilter()\n return originalProcessRemoveAllListeners.call(process)\n } as typeof process.removeAllListeners\n )\n\n // Intercept process.listeners to return our internal handlers for unhandled rejection\n process.listeners = patchMethod(originalProcessListeners, function (\n event: string | symbol\n ) {\n if (event === 'unhandledRejection') {\n debug?.(\n 'process.listeners',\n [filteringUnhandledRejectionHandler, ...underlyingListeners].map((l) =>\n l.toString()\n )\n )\n return [filteringUnhandledRejectionHandler, ...underlyingListeners]\n }\n return originalProcessListeners.call(process, event as any)\n } as typeof process.listeners)\n\n // Remove all existing handlers\n originalProcessRemoveAllListeners.call(process, 'unhandledRejection')\n\n // Install our filtering handler\n originalProcessOn.call(\n process,\n 'unhandledRejection',\n filteringUnhandledRejectionHandler\n )\n\n originalProcessOn.call(process, 'rejectionHandled', noopRejectionHandled)\n\n filterInstalled = true\n\n debug?.(\n 'after install actual listeners',\n originalProcessListeners\n .call(process, 'unhandledRejection' as any)\n .map((l) => l.toString())\n )\n\n debug?.(\n 'after install listeners',\n process.listeners('unhandledRejection').map((l) => l.toString())\n )\n}\n\n/**\n * Uninstalls the unhandled rejection filter and restores original process methods.\n * This is called when someone explicitly removes our filtering handler.\n * @internal\n */\nfunction uninstallUnhandledRejectionFilter(): void {\n if (!filterInstalled) {\n debug?.('unexpected second uninstall')\n return\n }\n\n debug?.(\n 'uninstallUnhandledRejectionFilter',\n [filteringUnhandledRejectionHandler, ...underlyingListeners].map((l) =>\n l.toString()\n )\n )\n\n // Restore original process methods\n process.on = originalProcessOn\n process.addListener = originalProcessAddListener\n process.once = originalProcessOnce\n process.prependListener = originalProcessPrependListener\n process.prependOnceListener = originalProcessPrependOnceListener\n process.removeListener = originalProcessRemoveListener\n process.off = originalProcessOff\n process.removeAllListeners = originalProcessRemoveAllListeners\n process.listeners = originalProcessListeners\n\n // Remove our filtering handler\n originalProcessRemoveListener.call(\n process,\n 'unhandledRejection',\n filteringUnhandledRejectionHandler\n )\n\n originalProcessRemoveListener.call(\n process,\n 'rejectionHandled',\n noopRejectionHandled\n )\n\n // Re-register all the handlers that were in our internal queue\n for (const meta of listenerMetadata) {\n if (meta.once) {\n originalProcessOnce.call(process, 'unhandledRejection', meta.listener)\n } else {\n originalProcessOn.call(process, 'unhandledRejection', meta.listener)\n }\n }\n\n // Reset state\n filterInstalled = false\n underlyingListeners.length = 0\n listenerMetadata.length = 0\n\n debug?.(\n 'after uninstall',\n process.listeners('unhandledRejection').map((l) => l.toString())\n )\n}\n\n/**\n * The filtering handler that decides whether to suppress or delegate unhandled rejections.\n */\nfunction filteringUnhandledRejectionHandler(\n reason: any,\n promise: Promise<any>\n): void {\n const capturedListenerMetadata = Array.from(listenerMetadata)\n\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime': {\n const signal = workUnitStore.renderSignal\n if (signal.aborted) {\n // This unhandledRejection is from async work spawned in a now\n // aborted prerender. We don't need to report this.\n return\n }\n break\n }\n case 'prerender-ppr':\n case 'prerender-legacy':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n // Not from an aborted prerender, delegate to original handlers\n if (capturedListenerMetadata.length === 0) {\n // We need to log something because the default behavior when there is\n // no event handler installed is to trigger an Unhandled Exception.\n // We don't do that here b/c we don't want to rely on this implicit default\n // to kill the process since it can be disabled by installing a userland listener\n // and you may also choose to run Next.js with args such that unhandled rejections\n // do not automatically terminate the process.\n console.error('Unhandled Rejection:', reason)\n } else {\n try {\n for (const meta of capturedListenerMetadata) {\n if (meta.once) {\n // This is a once listener. we remove it from our set before we call it\n const index = listenerMetadata.indexOf(meta)\n if (index !== -1) {\n underlyingListeners.splice(index, 1)\n listenerMetadata.splice(index, 1)\n }\n }\n const listener = meta.listener\n listener(reason, promise)\n }\n } catch (error) {\n // If any handlers error we produce an Uncaught Exception\n setImmediate(() => {\n throw error\n })\n }\n }\n}\n\nfunction noopRejectionHandled() {}\n\n// Install the filter when this module is imported\nif (ENABLE_UHR_FILTER) {\n installUnhandledRejectionFilter()\n}\n"],"names":["MODE","process","env","NEXT_USE_UNHANDLED_REJECTION_FILTER","ENABLE_UHR_FILTER","DEBUG_UHR_FILTER","undefined","console","error","JSON","stringify","debug","args","log","Error","stack","filterInstalled","underlyingListeners","listenerMetadata","originalProcessOn","originalProcessAddListener","originalProcessOnce","originalProcessRemoveListener","originalProcessRemoveAllListeners","originalProcessListeners","originalProcessPrependListener","originalProcessPrependOnceListener","originalProcessOff","didWarnPrepend","didWarnRemoveAll","installUnhandledRejectionFilter","listeners","map","l","toString","Array","from","listener","once","on","addListener","off","removeListener","removeAllListeners","prependListener","prependOnceListener","patchMethod","original","patchedImpl","Object","defineProperty","value","bind","writable","configurable","event","push","call","warn","unshift","filteringUnhandledRejectionHandler","uninstallUnhandledRejectionFilter","index","lastIndexOf","splice","length","noopRejectionHandled","meta","reason","promise","capturedListenerMetadata","workUnitStore","workUnitAsyncStorage","getStore","type","signal","renderSignal","aborted","indexOf","setImmediate"],"mappings":"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","ignoreList":[0]}
|
@@ -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.6.0-canary.
|
25
|
+
return !((_process_env___NEXT_VERSION = "15.6.0-canary.4") == 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){
|
@@ -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.6.0-canary.
|
14
|
+
if (typeof "15.6.0-canary.4" !== 'string') {
|
15
15
|
return [];
|
16
16
|
}
|
17
17
|
const payload = {
|
18
|
-
nextVersion: "15.6.0-canary.
|
18
|
+
nextVersion: "15.6.0-canary.4",
|
19
19
|
nodeVersion: process.version,
|
20
20
|
cliCommand: event.cliCommand,
|
21
21
|
durationMilliseconds: event.durationMilliseconds,
|
@@ -12,12 +12,12 @@ const EVENT_VERSION = 'NEXT_CLI_SESSION_STARTED';
|
|
12
12
|
function eventCliSession(nextConfig, event) {
|
13
13
|
var _nextConfig_experimental_staleTimes, _nextConfig_experimental_staleTimes1, _nextConfig_experimental_reactCompiler, _nextConfig_experimental_reactCompiler1;
|
14
14
|
// This should be an invariant, if it fails our build tooling is broken.
|
15
|
-
if (typeof "15.6.0-canary.
|
15
|
+
if (typeof "15.6.0-canary.4" !== 'string') {
|
16
16
|
return [];
|
17
17
|
}
|
18
18
|
const { images, i18n } = nextConfig || {};
|
19
19
|
const payload = {
|
20
|
-
nextVersion: "15.6.0-canary.
|
20
|
+
nextVersion: "15.6.0-canary.4",
|
21
21
|
nodeVersion: process.version,
|
22
22
|
cliCommand: event.cliCommand,
|
23
23
|
isSrcDir: event.isSrcDir,
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "next",
|
3
|
-
"version": "15.6.0-canary.
|
3
|
+
"version": "15.6.0-canary.4",
|
4
4
|
"description": "The React Framework",
|
5
5
|
"main": "./dist/server/next.js",
|
6
6
|
"license": "MIT",
|
@@ -102,7 +102,7 @@
|
|
102
102
|
]
|
103
103
|
},
|
104
104
|
"dependencies": {
|
105
|
-
"@next/env": "15.6.0-canary.
|
105
|
+
"@next/env": "15.6.0-canary.4",
|
106
106
|
"@swc/helpers": "0.5.15",
|
107
107
|
"caniuse-lite": "^1.0.30001579",
|
108
108
|
"postcss": "8.4.31",
|
@@ -132,14 +132,14 @@
|
|
132
132
|
},
|
133
133
|
"optionalDependencies": {
|
134
134
|
"sharp": "^0.34.3",
|
135
|
-
"@next/swc-darwin-arm64": "15.6.0-canary.
|
136
|
-
"@next/swc-darwin-x64": "15.6.0-canary.
|
137
|
-
"@next/swc-linux-arm64-gnu": "15.6.0-canary.
|
138
|
-
"@next/swc-linux-arm64-musl": "15.6.0-canary.
|
139
|
-
"@next/swc-linux-x64-gnu": "15.6.0-canary.
|
140
|
-
"@next/swc-linux-x64-musl": "15.6.0-canary.
|
141
|
-
"@next/swc-win32-arm64-msvc": "15.6.0-canary.
|
142
|
-
"@next/swc-win32-x64-msvc": "15.6.0-canary.
|
135
|
+
"@next/swc-darwin-arm64": "15.6.0-canary.4",
|
136
|
+
"@next/swc-darwin-x64": "15.6.0-canary.4",
|
137
|
+
"@next/swc-linux-arm64-gnu": "15.6.0-canary.4",
|
138
|
+
"@next/swc-linux-arm64-musl": "15.6.0-canary.4",
|
139
|
+
"@next/swc-linux-x64-gnu": "15.6.0-canary.4",
|
140
|
+
"@next/swc-linux-x64-musl": "15.6.0-canary.4",
|
141
|
+
"@next/swc-win32-arm64-msvc": "15.6.0-canary.4",
|
142
|
+
"@next/swc-win32-x64-msvc": "15.6.0-canary.4"
|
143
143
|
},
|
144
144
|
"devDependencies": {
|
145
145
|
"@ampproject/toolbox-optimizer": "2.8.3",
|
@@ -174,11 +174,11 @@
|
|
174
174
|
"@jest/types": "29.5.0",
|
175
175
|
"@mswjs/interceptors": "0.23.0",
|
176
176
|
"@napi-rs/triples": "1.2.0",
|
177
|
-
"@next/font": "15.6.0-canary.
|
178
|
-
"@next/polyfill-module": "15.6.0-canary.
|
179
|
-
"@next/polyfill-nomodule": "15.6.0-canary.
|
180
|
-
"@next/react-refresh-utils": "15.6.0-canary.
|
181
|
-
"@next/swc": "15.6.0-canary.
|
177
|
+
"@next/font": "15.6.0-canary.4",
|
178
|
+
"@next/polyfill-module": "15.6.0-canary.4",
|
179
|
+
"@next/polyfill-nomodule": "15.6.0-canary.4",
|
180
|
+
"@next/react-refresh-utils": "15.6.0-canary.4",
|
181
|
+
"@next/swc": "15.6.0-canary.4",
|
182
182
|
"@opentelemetry/api": "1.6.0",
|
183
183
|
"@playwright/test": "1.51.1",
|
184
184
|
"@rspack/core": "1.5.0",
|