next.js
next.js copied to clipboard
Fix cardinality of opentelemetry span names on client-side navigation
What?
As noticed in issue https://github.com/vercel/next.js/issues/54694, span names for dynamic routes are not consistent and sometimes miss the "next.route" attribute, and have a span name that have the parameters instead of the capturing placeholders.
Fixing a bug or a limitation
- Fixes https://github.com/vercel/next.js/issues/54694 (at least partially)
- Adds test case for client-side navigation previously leading to wrong span attributes (test added into the test/e2e/opentelemetry/instrumentation test suite) Updated test/e2e/opentelemetry/instrumentation app used to test telemetry (some pages with link between them where created but not quite correct in the links, and were not handling the defined params)
Limits
This PR identify a case where some traces are wrong (see bellow for the detailed identified case). But there might be others that the other of https://github.com/vercel/next.js/issues/54694 might think of.
How
Function renderToHTMLOrFlightImpl is the one responsible for rendering of the page. It is also the one that set the next.route attribute, the one that has the interpreted route instead of the full url. However, there is a shortcut to exit the function before next.route is set when the condition isRSCRequest && !isStaticGeneration is met. I think we can set next.route before, so in any case the route has the correct value.
For Contributors
This is a duplicate of https://github.com/vercel/next.js/pull/59282 in order to (hopefully) regenerate the logs from the failing tests so that the original PR can be appropriately modified and then merged.
Credit to @Leonils for the change here. This PR is merely a continuation of his.
Allow CI Workflow Run
- [x] approve CI run for commit: c9f8807bfaa44c1b56723782379a1fcfe5a581bb
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer
@PatNeedham Re-adding that label so you can run CI → tests.
Stats from current PR
Default Build (Increase detected ⚠️)
General
| vercel/next.js canary | PatNeedham/next.js fix/telemetry-client-navigation | Change | |
|---|---|---|---|
| buildDuration | 18.8s | 16.1s | N/A |
| buildDurationCached | 8.9s | 8.6s | N/A |
| nodeModulesSize | 345 MB | 345 MB | N/A |
| nextStartRea..uration (ms) | 441ms | 416ms | N/A |
Client Bundles (main, webpack)
| vercel/next.js canary | PatNeedham/next.js fix/telemetry-client-navigation | Change | |
|---|---|---|---|
| 1813.HASH.js gzip | 169 B | 169 B | ✓ |
| 3433-HASH.js gzip | 5.06 kB | 5.06 kB | N/A |
| 6159-HASH.js gzip | 33.6 kB | 33.6 kB | N/A |
| 69089819-HASH.js gzip | 50.8 kB | 50.8 kB | N/A |
| framework-HASH.js gzip | 55.8 kB | 55.8 kB | N/A |
| main-app-HASH.js gzip | 220 B | 221 B | N/A |
| main-HASH.js gzip | 32.3 kB | 32.3 kB | N/A |
| webpack-HASH.js gzip | 1.71 kB | 1.7 kB | N/A |
| Overall change | 169 B | 169 B | ✓ |
Legacy Client Bundles (polyfills)
| vercel/next.js canary | PatNeedham/next.js fix/telemetry-client-navigation | Change | |
|---|---|---|---|
| polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
| Overall change | 31 kB | 31 kB | ✓ |
Client Pages
| vercel/next.js canary | PatNeedham/next.js fix/telemetry-client-navigation | Change | |
|---|---|---|---|
| _app-HASH.js gzip | 192 B | 193 B | N/A |
| _error-HASH.js gzip | 192 B | 192 B | ✓ |
| amp-HASH.js gzip | 511 B | 510 B | N/A |
| css-HASH.js gzip | 342 B | 343 B | N/A |
| dynamic-HASH.js gzip | 2.53 kB | 2.52 kB | N/A |
| edge-ssr-HASH.js gzip | 265 B | 266 B | N/A |
| head-HASH.js gzip | 362 B | 364 B | N/A |
| hooks-HASH.js gzip | 391 B | 392 B | N/A |
| image-HASH.js gzip | 4.27 kB | 4.27 kB | N/A |
| index-HASH.js gzip | 269 B | 268 B | N/A |
| link-HASH.js gzip | 2.69 kB | 2.69 kB | N/A |
| routerDirect..HASH.js gzip | 328 B | 329 B | N/A |
| script-HASH.js gzip | 394 B | 397 B | N/A |
| withRouter-HASH.js gzip | 324 B | 324 B | ✓ |
| 1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
| Overall change | 622 B | 622 B | ✓ |
Client Build Manifests
| vercel/next.js canary | PatNeedham/next.js fix/telemetry-client-navigation | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 483 B | 483 B | ✓ |
| Overall change | 483 B | 483 B | ✓ |
Rendered Page Sizes
| vercel/next.js canary | PatNeedham/next.js fix/telemetry-client-navigation | Change | |
|---|---|---|---|
| index.html gzip | 522 B | 523 B | N/A |
| link.html gzip | 536 B | 536 B | ✓ |
| withRouter.html gzip | 518 B | 518 B | ✓ |
| Overall change | 1.05 kB | 1.05 kB | ✓ |
Edge SSR bundle Size
| vercel/next.js canary | PatNeedham/next.js fix/telemetry-client-navigation | Change | |
|---|---|---|---|
| edge-ssr.js gzip | 121 kB | 121 kB | N/A |
| page.js gzip | 179 kB | 179 kB | N/A |
| Overall change | 0 B | 0 B | ✓ |
Middleware size
| vercel/next.js canary | PatNeedham/next.js fix/telemetry-client-navigation | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 658 B | 659 B | N/A |
| middleware-r..fest.js gzip | 155 B | 153 B | N/A |
| middleware.js gzip | 25.8 kB | 25.8 kB | N/A |
| edge-runtime..pack.js gzip | 839 B | 839 B | ✓ |
| Overall change | 839 B | 839 B | ✓ |
Next Runtimes
| vercel/next.js canary | PatNeedham/next.js fix/telemetry-client-navigation | Change | |
|---|---|---|---|
| app-page-exp...dev.js gzip | 174 kB | 174 kB | N/A |
| app-page-exp..prod.js gzip | 106 kB | 106 kB | ✓ |
| app-page-tur..prod.js gzip | 115 kB | 115 kB | N/A |
| app-page-tur..prod.js gzip | 94.5 kB | 94.5 kB | N/A |
| app-page.run...dev.js gzip | 160 kB | 160 kB | N/A |
| app-page.run..prod.js gzip | 93.2 kB | 93.2 kB | N/A |
| app-route-ex...dev.js gzip | 21.1 kB | 21.1 kB | ✓ |
| app-route-ex..prod.js gzip | 15 kB | 15 kB | ✓ |
| app-route-tu..prod.js gzip | 15 kB | 15 kB | ✓ |
| app-route-tu..prod.js gzip | 14.8 kB | 14.8 kB | ✓ |
| app-route.ru...dev.js gzip | 20.9 kB | 20.9 kB | ✓ |
| app-route.ru..prod.js gzip | 14.8 kB | 14.8 kB | ✓ |
| pages-api-tu..prod.js gzip | 9.55 kB | 9.55 kB | ✓ |
| pages-api.ru...dev.js gzip | 9.82 kB | 9.82 kB | ✓ |
| pages-api.ru..prod.js gzip | 9.55 kB | 9.55 kB | ✓ |
| pages-turbo...prod.js gzip | 21.5 kB | 21.5 kB | ✓ |
| pages.runtim...dev.js gzip | 22.1 kB | 22.1 kB | ✓ |
| pages.runtim..prod.js gzip | 21.5 kB | 21.5 kB | ✓ |
| server.runti..prod.js gzip | 52.2 kB | 52.2 kB | ✓ |
| Overall change | 354 kB | 354 kB | ✓ |
build cache Overall increase ⚠️
| vercel/next.js canary | PatNeedham/next.js fix/telemetry-client-navigation | Change | |
|---|---|---|---|
| 0.pack gzip | 1.65 MB | 1.65 MB | ⚠️ +1.25 kB |
| index.pack gzip | 126 kB | 127 kB | ⚠️ +549 B |
| Overall change | 1.77 MB | 1.77 MB | ⚠️ +1.8 kB |
Diff details
Diff for page.js
@@ -15,7 +15,7 @@
/***/
},
- /***/ 6273: /***/ (
+ /***/ 159: /***/ (
__unused_webpack_module,
__webpack_exports__,
__webpack_require__
@@ -30,7 +30,7 @@
default: () => /* binding */ nHandler,
});
- // NAMESPACE OBJECT: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statshmvCwg%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
+ // NAMESPACE OBJECT: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statshmvCwg%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
var page_next_edge_ssr_entry_namespaceObject = {};
__webpack_require__.r(page_next_edge_ssr_entry_namespaceObject);
__webpack_require__.d(page_next_edge_ssr_entry_namespaceObject, {
@@ -68,24 +68,24 @@
tree: () => tree,
});
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/web/globals.js
- var globals = __webpack_require__(5107);
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/web/adapter.js + 3 modules
- var adapter = __webpack_require__(6713);
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/build/webpack/loaders/next-edge-ssr-loader/render.js + 87 modules
- var render = __webpack_require__(6526);
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/lib/incremental-cache/index.js + 3 modules
- var incremental_cache = __webpack_require__(2116);
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/app-render/app-render.js + 52 modules
- var app_render = __webpack_require__(7906);
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/future/route-modules/app-page/module.compiled.js
- var module_compiled = __webpack_require__(4445);
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/future/route-kind.js
- var route_kind = __webpack_require__(8063);
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/client/components/error-boundary.js
- var error_boundary = __webpack_require__(3483);
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/app-render/entry-base.js + 9 modules
- var entry_base = __webpack_require__(7165); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statshmvCwg%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/web/globals.js
+ var globals = __webpack_require__(4009);
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/web/adapter.js + 3 modules
+ var adapter = __webpack_require__(6978);
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/build/webpack/loaders/next-edge-ssr-loader/render.js + 87 modules
+ var render = __webpack_require__(8791);
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/lib/incremental-cache/index.js + 3 modules
+ var incremental_cache = __webpack_require__(994);
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/app-render/app-render.js + 52 modules
+ var app_render = __webpack_require__(3653);
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/future/route-modules/app-page/module.compiled.js
+ var module_compiled = __webpack_require__(8414);
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/future/route-kind.js
+ var route_kind = __webpack_require__(2229);
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/client/components/error-boundary.js
+ var error_boundary = __webpack_require__(8002);
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/app-render/entry-base.js + 9 modules
+ var entry_base = __webpack_require__(7832); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statshmvCwg%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
// We inject the tree and pages here so that we can use them in the route
// module.
const tree = {
@@ -102,7 +102,7 @@
page: [
() =>
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 4791)
+ __webpack_require__.bind(__webpack_require__, 3053)
),
"/tmp/next-statshmvCwg/stats-app/app/app-edge-ssr/page.js",
],
@@ -116,14 +116,14 @@
layout: [
() =>
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 9469)
+ __webpack_require__.bind(__webpack_require__, 9363)
),
"/tmp/next-statshmvCwg/stats-app/app/layout.js",
],
"not-found": [
() =>
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 3048)
+ __webpack_require__.bind(__webpack_require__, 6385)
),
"next/dist/client/components/not-found-error",
],
@@ -159,12 +159,12 @@
});
//# sourceMappingURL=app-page.js.map
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/lib/page-types.js
- var page_types = __webpack_require__(3047);
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/app-render/encryption-utils.js
- var encryption_utils = __webpack_require__(866);
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/app-render/action-utils.js
- var action_utils = __webpack_require__(2041); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js?{"absolute500Path":"","absoluteAppPath":"next/dist/pages/_app","absoluteDocumentPath":"next/dist/pages/_document","absoluteErrorPath":"next/dist/pages/_error","absolutePagePath":"private-next-app-dir/app-edge-ssr/page.js","dev":false,"isServerComponent":true,"page":"/app-edge-ssr/page","stringifiedConfig":"eyJlbnYiOnt9LCJlc2xpbnQiOnsiaWdub3JlRHVyaW5nQnVpbGRzIjpmYWxzZX0sInR5cGVzY3JpcHQiOnsiaWdub3JlQnVpbGRFcnJvcnMiOmZhbHNlLCJ0c2NvbmZpZ1BhdGgiOiJ0c2NvbmZpZy5qc29uIn0sImRpc3REaXIiOiIubmV4dCIsImNsZWFuRGlzdERpciI6dHJ1ZSwiYXNzZXRQcmVmaXgiOiIiLCJjYWNoZU1heE1lbW9yeVNpemUiOjUyNDI4ODAwLCJjb25maWdPcmlnaW4iOiJuZXh0LmNvbmZpZy5qcyIsInVzZUZpbGVTeXN0ZW1QdWJsaWNSb3V0ZXMiOnRydWUsImdlbmVyYXRlRXRhZ3MiOnRydWUsInBhZ2VFeHRlbnNpb25zIjpbInRzeCIsInRzIiwianN4IiwianMiXSwicG93ZXJlZEJ5SGVhZGVyIjp0cnVlLCJjb21wcmVzcyI6dHJ1ZSwiaW1hZ2VzIjp7ImRldmljZVNpemVzIjpbNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXSwiaW1hZ2VTaXplcyI6WzE2LDMyLDQ4LDY0LDk2LDEyOCwyNTYsMzg0XSwicGF0aCI6Ii9fbmV4dC9pbWFnZSIsImxvYWRlciI6ImRlZmF1bHQiLCJsb2FkZXJGaWxlIjoiIiwiZG9tYWlucyI6W10sImRpc2FibGVTdGF0aWNJbWFnZXMiOmZhbHNlLCJtaW5pbXVtQ2FjaGVUVEwiOjYwLCJmb3JtYXRzIjpbImltYWdlL3dlYnAiXSwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyI6ZmFsc2UsImNvbnRlbnRTZWN1cml0eVBvbGljeSI6InNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94OyIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiOiJhdHRhY2htZW50IiwicmVtb3RlUGF0dGVybnMiOltdLCJ1bm9wdGltaXplZCI6ZmFsc2V9LCJkZXZJbmRpY2F0b3JzIjp7ImJ1aWxkQWN0aXZpdHkiOnRydWUsImJ1aWxkQWN0aXZpdHlQb3NpdGlvbiI6ImJvdHRvbS1yaWdodCJ9LCJvbkRlbWFuZEVudHJpZXMiOnsibWF4SW5hY3RpdmVBZ2UiOjYwMDAwLCJwYWdlc0J1ZmZlckxlbmd0aCI6NX0sImFtcCI6eyJjYW5vbmljYWxCYXNlIjoiIn0sImJhc2VQYXRoIjoiIiwic2Fzc09wdGlvbnMiOnt9LCJ0cmFpbGluZ1NsYXNoIjpmYWxzZSwiaTE4biI6bnVsbCwicHJvZHVjdGlvbkJyb3dzZXJTb3VyY2VNYXBzIjpmYWxzZSwib3B0aW1pemVGb250cyI6dHJ1ZSwiZXhjbHVkZURlZmF1bHRNb21lbnRMb2NhbGVzIjp0cnVlLCJzZXJ2ZXJSdW50aW1lQ29uZmlnIjp7fSwicHVibGljUnVudGltZUNvbmZpZyI6e30sInJlYWN0UHJvZHVjdGlvblByb2ZpbGluZyI6ZmFsc2UsInJlYWN0U3RyaWN0TW9kZSI6bnVsbCwiaHR0cEFnZW50T3B0aW9ucyI6eyJrZWVwQWxpdmUiOnRydWV9LCJzdGF0aWNQYWdlR2VuZXJhdGlvblRpbWVvdXQiOjYwLCJtb2R1bGFyaXplSW1wb3J0cyI6eyJAbXVpL2ljb25zLW1hdGVyaWFsIjp7InRyYW5zZm9ybSI6IkBtdWkvaWNvbnMtbWF0ZXJpYWwve3ttZW1iZXJ9fSJ9LCJsb2Rhc2giOnsidHJhbnNmb3JtIjoibG9kYXNoL3t7bWVtYmVyfX0ifX0sImV4cGVyaW1lbnRhbCI6eyJmbHlpbmdTaHV0dGxlIjpmYWxzZSwicHJlcmVuZGVyRWFybHlFeGl0IjpmYWxzZSwic2VydmVyTWluaWZpY2F0aW9uIjp0cnVlLCJzZXJ2ZXJTb3VyY2VNYXBzIjpmYWxzZSwibGlua05vVG91Y2hTdGFydCI6ZmFsc2UsImNhc2VTZW5zaXRpdmVSb3V0ZXMiOmZhbHNlLCJwcmVsb2FkRW50cmllc09uU3RhcnQiOnRydWUsImNsaWVudFJvdXRlckZpbHRlciI6dHJ1ZSwiY2xpZW50Um91dGVyRmlsdGVyUmVkaXJlY3RzIjpmYWxzZSwiZmV0Y2hDYWNoZUtleVByZWZpeCI6IiIsIm1pZGRsZXdhcmVQcmVmZXRjaCI6ImZsZXhpYmxlIiwib3B0aW1pc3RpY0NsaWVudENhY2hlIjp0cnVlLCJtYW51YWxDbGllbnRCYXNlUGF0aCI6ZmFsc2UsImNwdXMiOjE5LCJtZW1vcnlCYXNlZFdvcmtlcnNDb3VudCI6ZmFsc2UsImlzckZsdXNoVG9EaXNrIjp0cnVlLCJ3b3JrZXJUaHJlYWRzIjpmYWxzZSwib3B0aW1pemVDc3MiOmZhbHNlLCJuZXh0U2NyaXB0V29ya2VycyI6ZmFsc2UsInNjcm9sbFJlc3RvcmF0aW9uIjpmYWxzZSwiZXh0ZXJuYWxEaXIiOmZhbHNlLCJkaXNhYmxlT3B0aW1pemVkTG9hZGluZyI6ZmFsc2UsImd6aXBTaXplIjp0cnVlLCJjcmFDb21wYXQiOmZhbHNlLCJlc21FeHRlcm5hbHMiOnRydWUsImZ1bGx5U3BlY2lmaWVkIjpmYWxzZSwib3V0cHV0RmlsZVRyYWNpbmdSb290IjoiL3RtcC9uZXh0LXN0YXRzaG12Q3dnL3N0YXRzLWFwcCIsInN3Y1RyYWNlUHJvZmlsaW5nIjpmYWxzZSwiZm9yY2VTd2NUcmFuc2Zvcm1zIjpmYWxzZSwibGFyZ2VQYWdlRGF0YUJ5dGVzIjoxMjgwMDAsImFkanVzdEZvbnRGYWxsYmFja3MiOmZhbHNlLCJhZGp1c3RGb250RmFsbGJhY2tzV2l0aFNpemVBZGp1c3QiOmZhbHNlLCJ0eXBlZFJvdXRlcyI6ZmFsc2UsImluc3RydW1lbnRhdGlvbkhvb2siOmZhbHNlLCJwYXJhbGxlbFNlcnZlckNvbXBpbGVzIjpmYWxzZSwicGFyYWxsZWxTZXJ2ZXJCdWlsZFRyYWNlcyI6ZmFsc2UsInBwciI6ZmFsc2UsIm9wdGltaXplU2VydmVyUmVhY3QiOnRydWUsInVzZUVhcmx5SW1wb3J0IjpmYWxzZSwic3RhbGVUaW1lcyI6eyJkeW5hbWljIjozMCwic3RhdGljIjozMDB9LCJvcHRpbWl6ZVBhY2thZ2VJbXBvcnRzIjpbImx1Y2lkZS1yZWFjdCIsImRhdGUtZm5zIiwibG9kYXNoLWVzIiwicmFtZGEiLCJhbnRkIiwicmVhY3QtYm9vdHN0cmFwIiwiYWhvb2tzIiwiQGFudC1kZXNpZ24vaWNvbnMiLCJAaGVhZGxlc3N1aS9yZWFjdCIsIkBoZWFkbGVzc3VpLWZsb2F0L3JlYWN0IiwiQGhlcm9pY29ucy9yZWFjdC8yMC9zb2xpZCIsIkBoZXJvaWNvbnMvcmVhY3QvMjQvc29saWQiLCJAaGVyb2ljb25zL3JlYWN0LzI0L291dGxpbmUiLCJAdmlzeC92aXN4IiwiQHRyZW1vci9yZWFjdCIsInJ4anMiLCJAbXVpL21hdGVyaWFsIiwiQG11aS9pY29ucy1tYXRlcmlhbCIsInJlY2hhcnRzIiwicmVhY3QtdXNlIiwiQG1hdGVyaWFsLXVpL2NvcmUiLCJAbWF0ZXJpYWwtdWkvaWNvbnMiLCJAdGFibGVyL2ljb25zLXJlYWN0IiwibXVpLWNvcmUiLCJyZWFjdC1pY29ucy9haSIsInJlYWN0LWljb25zL2JpIiwicmVhY3QtaWNvbnMvYnMiLCJyZWFjdC1pY29ucy9jZyIsInJlYWN0LWljb25zL2NpIiwicmVhY3QtaWNvbnMvZGkiLCJyZWFjdC1pY29ucy9mYSIsInJlYWN0LWljb25zL2ZhNiIsInJlYWN0LWljb25zL2ZjIiwicmVhY3QtaWNvbnMvZmkiLCJyZWFjdC1pY29ucy9naSIsInJlYWN0LWljb25zL2dvIiwicmVhY3QtaWNvbnMvZ3IiLCJyZWFjdC1pY29ucy9oaSIsInJlYWN0LWljb25zL2hpMiIsInJlYWN0LWljb25zL2ltIiwicmVhY3QtaWNvbnMvaW8iLCJyZWFjdC1pY29ucy9pbzUiLCJyZWFjdC1pY29ucy9saWEiLCJyZWFjdC1pY29ucy9saWIiLCJyZWFjdC1pY29ucy9sdSIsInJlYWN0LWljb25zL21kIiwicmVhY3QtaWNvbnMvcGkiLCJyZWFjdC1pY29ucy9yaSIsInJlYWN0LWljb25zL3J4IiwicmVhY3QtaWNvbnMvc2kiLCJyZWFjdC1pY29ucy9zbCIsInJlYWN0LWljb25zL3RiIiwicmVhY3QtaWNvbnMvdGZpIiwicmVhY3QtaWNvbnMvdGkiLCJyZWFjdC1pY29ucy92c2MiLCJyZWFjdC1pY29ucy93aSJdfSwiYnVuZGxlUGFnZXNSb3V0ZXJEZXBlbmRlbmNpZXMiOmZhbHNlLCJjb25maWdGaWxlIjoiL3RtcC9uZXh0LXN0YXRzaG12Q3dnL3N0YXRzLWFwcC9uZXh0LmNvbmZpZy5qcyIsImNvbmZpZ0ZpbGVOYW1lIjoibmV4dC5jb25maWcuanMifQ==","pagesType":"app","appDirLoader":"bmV4dC1hcHAtbG9hZGVyP25hbWU9YXBwJTJGYXBwLWVkZ2Utc3NyJTJGcGFnZSZwYWdlPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcHAtZWRnZS1zc3IlMkZwYWdlLmpzJmFwcERpcj0lMkZ0bXAlMkZuZXh0LXN0YXRzaG12Q3dnJTJGc3RhdHMtYXBwJTJGYXBwJmFwcFBhdGhzPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JnByZWZlcnJlZFJlZ2lvbj0mbWlkZGxld2FyZUNvbmZpZz1lMzAlM0Qh","sriEnabled":false,"middlewareConfig":"e30="}!
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/lib/page-types.js
+ var page_types = __webpack_require__(9287);
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/app-render/encryption-utils.js
+ var encryption_utils = __webpack_require__(3934);
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/app-render/action-utils.js
+ var action_utils = __webpack_require__(1730); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js?{"absolute500Path":"","absoluteAppPath":"next/dist/pages/_app","absoluteDocumentPath":"next/dist/pages/_document","absoluteErrorPath":"next/dist/pages/_error","absolutePagePath":"private-next-app-dir/app-edge-ssr/page.js","dev":false,"isServerComponent":true,"page":"/app-edge-ssr/page","stringifiedConfig":"eyJlbnYiOnt9LCJlc2xpbnQiOnsiaWdub3JlRHVyaW5nQnVpbGRzIjpmYWxzZX0sInR5cGVzY3JpcHQiOnsiaWdub3JlQnVpbGRFcnJvcnMiOmZhbHNlLCJ0c2NvbmZpZ1BhdGgiOiJ0c2NvbmZpZy5qc29uIn0sImRpc3REaXIiOiIubmV4dCIsImNsZWFuRGlzdERpciI6dHJ1ZSwiYXNzZXRQcmVmaXgiOiIiLCJjYWNoZU1heE1lbW9yeVNpemUiOjUyNDI4ODAwLCJjb25maWdPcmlnaW4iOiJuZXh0LmNvbmZpZy5qcyIsInVzZUZpbGVTeXN0ZW1QdWJsaWNSb3V0ZXMiOnRydWUsImdlbmVyYXRlRXRhZ3MiOnRydWUsInBhZ2VFeHRlbnNpb25zIjpbInRzeCIsInRzIiwianN4IiwianMiXSwicG93ZXJlZEJ5SGVhZGVyIjp0cnVlLCJjb21wcmVzcyI6dHJ1ZSwiaW1hZ2VzIjp7ImRldmljZVNpemVzIjpbNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXSwiaW1hZ2VTaXplcyI6WzE2LDMyLDQ4LDY0LDk2LDEyOCwyNTYsMzg0XSwicGF0aCI6Ii9fbmV4dC9pbWFnZSIsImxvYWRlciI6ImRlZmF1bHQiLCJsb2FkZXJGaWxlIjoiIiwiZG9tYWlucyI6W10sImRpc2FibGVTdGF0aWNJbWFnZXMiOmZhbHNlLCJtaW5pbXVtQ2FjaGVUVEwiOjYwLCJmb3JtYXRzIjpbImltYWdlL3dlYnAiXSwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyI6ZmFsc2UsImNvbnRlbnRTZWN1cml0eVBvbGljeSI6InNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94OyIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiOiJhdHRhY2htZW50IiwicmVtb3RlUGF0dGVybnMiOltdLCJ1bm9wdGltaXplZCI6ZmFsc2V9LCJkZXZJbmRpY2F0b3JzIjp7ImJ1aWxkQWN0aXZpdHkiOnRydWUsImJ1aWxkQWN0aXZpdHlQb3NpdGlvbiI6ImJvdHRvbS1yaWdodCJ9LCJvbkRlbWFuZEVudHJpZXMiOnsibWF4SW5hY3RpdmVBZ2UiOjYwMDAwLCJwYWdlc0J1ZmZlckxlbmd0aCI6NX0sImFtcCI6eyJjYW5vbmljYWxCYXNlIjoiIn0sImJhc2VQYXRoIjoiIiwic2Fzc09wdGlvbnMiOnt9LCJ0cmFpbGluZ1NsYXNoIjpmYWxzZSwiaTE4biI6bnVsbCwicHJvZHVjdGlvbkJyb3dzZXJTb3VyY2VNYXBzIjpmYWxzZSwib3B0aW1pemVGb250cyI6dHJ1ZSwiZXhjbHVkZURlZmF1bHRNb21lbnRMb2NhbGVzIjp0cnVlLCJzZXJ2ZXJSdW50aW1lQ29uZmlnIjp7fSwicHVibGljUnVudGltZUNvbmZpZyI6e30sInJlYWN0UHJvZHVjdGlvblByb2ZpbGluZyI6ZmFsc2UsInJlYWN0U3RyaWN0TW9kZSI6bnVsbCwiaHR0cEFnZW50T3B0aW9ucyI6eyJrZWVwQWxpdmUiOnRydWV9LCJzdGF0aWNQYWdlR2VuZXJhdGlvblRpbWVvdXQiOjYwLCJtb2R1bGFyaXplSW1wb3J0cyI6eyJAbXVpL2ljb25zLW1hdGVyaWFsIjp7InRyYW5zZm9ybSI6IkBtdWkvaWNvbnMtbWF0ZXJpYWwve3ttZW1iZXJ9fSJ9LCJsb2Rhc2giOnsidHJhbnNmb3JtIjoibG9kYXNoL3t7bWVtYmVyfX0ifX0sImV4cGVyaW1lbnRhbCI6eyJmbHlpbmdTaHV0dGxlIjpmYWxzZSwicHJlcmVuZGVyRWFybHlFeGl0IjpmYWxzZSwic2VydmVyTWluaWZpY2F0aW9uIjp0cnVlLCJzZXJ2ZXJTb3VyY2VNYXBzIjpmYWxzZSwibGlua05vVG91Y2hTdGFydCI6ZmFsc2UsImNhc2VTZW5zaXRpdmVSb3V0ZXMiOmZhbHNlLCJwcmVsb2FkRW50cmllc09uU3RhcnQiOnRydWUsImNsaWVudFJvdXRlckZpbHRlciI6dHJ1ZSwiY2xpZW50Um91dGVyRmlsdGVyUmVkaXJlY3RzIjpmYWxzZSwiZmV0Y2hDYWNoZUtleVByZWZpeCI6IiIsIm1pZGRsZXdhcmVQcmVmZXRjaCI6ImZsZXhpYmxlIiwib3B0aW1pc3RpY0NsaWVudENhY2hlIjp0cnVlLCJtYW51YWxDbGllbnRCYXNlUGF0aCI6ZmFsc2UsImNwdXMiOjE5LCJtZW1vcnlCYXNlZFdvcmtlcnNDb3VudCI6ZmFsc2UsImlzckZsdXNoVG9EaXNrIjp0cnVlLCJ3b3JrZXJUaHJlYWRzIjpmYWxzZSwib3B0aW1pemVDc3MiOmZhbHNlLCJuZXh0U2NyaXB0V29ya2VycyI6ZmFsc2UsInNjcm9sbFJlc3RvcmF0aW9uIjpmYWxzZSwiZXh0ZXJuYWxEaXIiOmZhbHNlLCJkaXNhYmxlT3B0aW1pemVkTG9hZGluZyI6ZmFsc2UsImd6aXBTaXplIjp0cnVlLCJjcmFDb21wYXQiOmZhbHNlLCJlc21FeHRlcm5hbHMiOnRydWUsImZ1bGx5U3BlY2lmaWVkIjpmYWxzZSwib3V0cHV0RmlsZVRyYWNpbmdSb290IjoiL3RtcC9uZXh0LXN0YXRzaG12Q3dnL3N0YXRzLWFwcCIsInN3Y1RyYWNlUHJvZmlsaW5nIjpmYWxzZSwiZm9yY2VTd2NUcmFuc2Zvcm1zIjpmYWxzZSwibGFyZ2VQYWdlRGF0YUJ5dGVzIjoxMjgwMDAsImFkanVzdEZvbnRGYWxsYmFja3MiOmZhbHNlLCJhZGp1c3RGb250RmFsbGJhY2tzV2l0aFNpemVBZGp1c3QiOmZhbHNlLCJ0eXBlZFJvdXRlcyI6ZmFsc2UsImluc3RydW1lbnRhdGlvbkhvb2siOmZhbHNlLCJwYXJhbGxlbFNlcnZlckNvbXBpbGVzIjpmYWxzZSwicGFyYWxsZWxTZXJ2ZXJCdWlsZFRyYWNlcyI6ZmFsc2UsInBwciI6ZmFsc2UsIm9wdGltaXplU2VydmVyUmVhY3QiOnRydWUsInVzZUVhcmx5SW1wb3J0IjpmYWxzZSwic3RhbGVUaW1lcyI6eyJkeW5hbWljIjozMCwic3RhdGljIjozMDB9LCJvcHRpbWl6ZVBhY2thZ2VJbXBvcnRzIjpbImx1Y2lkZS1yZWFjdCIsImRhdGUtZm5zIiwibG9kYXNoLWVzIiwicmFtZGEiLCJhbnRkIiwicmVhY3QtYm9vdHN0cmFwIiwiYWhvb2tzIiwiQGFudC1kZXNpZ24vaWNvbnMiLCJAaGVhZGxlc3N1aS9yZWFjdCIsIkBoZWFkbGVzc3VpLWZsb2F0L3JlYWN0IiwiQGhlcm9pY29ucy9yZWFjdC8yMC9zb2xpZCIsIkBoZXJvaWNvbnMvcmVhY3QvMjQvc29saWQiLCJAaGVyb2ljb25zL3JlYWN0LzI0L291dGxpbmUiLCJAdmlzeC92aXN4IiwiQHRyZW1vci9yZWFjdCIsInJ4anMiLCJAbXVpL21hdGVyaWFsIiwiQG11aS9pY29ucy1tYXRlcmlhbCIsInJlY2hhcnRzIiwicmVhY3QtdXNlIiwiQG1hdGVyaWFsLXVpL2NvcmUiLCJAbWF0ZXJpYWwtdWkvaWNvbnMiLCJAdGFibGVyL2ljb25zLXJlYWN0IiwibXVpLWNvcmUiLCJyZWFjdC1pY29ucy9haSIsInJlYWN0LWljb25zL2JpIiwicmVhY3QtaWNvbnMvYnMiLCJyZWFjdC1pY29ucy9jZyIsInJlYWN0LWljb25zL2NpIiwicmVhY3QtaWNvbnMvZGkiLCJyZWFjdC1pY29ucy9mYSIsInJlYWN0LWljb25zL2ZhNiIsInJlYWN0LWljb25zL2ZjIiwicmVhY3QtaWNvbnMvZmkiLCJyZWFjdC1pY29ucy9naSIsInJlYWN0LWljb25zL2dvIiwicmVhY3QtaWNvbnMvZ3IiLCJyZWFjdC1pY29ucy9oaSIsInJlYWN0LWljb25zL2hpMiIsInJlYWN0LWljb25zL2ltIiwicmVhY3QtaWNvbnMvaW8iLCJyZWFjdC1pY29ucy9pbzUiLCJyZWFjdC1pY29ucy9saWEiLCJyZWFjdC1pY29ucy9saWIiLCJyZWFjdC1pY29ucy9sdSIsInJlYWN0LWljb25zL21kIiwicmVhY3QtaWNvbnMvcGkiLCJyZWFjdC1pY29ucy9yaSIsInJlYWN0LWljb25zL3J4IiwicmVhY3QtaWNvbnMvc2kiLCJyZWFjdC1pY29ucy9zbCIsInJlYWN0LWljb25zL3RiIiwicmVhY3QtaWNvbnMvdGZpIiwicmVhY3QtaWNvbnMvdGkiLCJyZWFjdC1pY29ucy92c2MiLCJyZWFjdC1pY29ucy93aSJdfSwiYnVuZGxlUGFnZXNSb3V0ZXJEZXBlbmRlbmNpZXMiOmZhbHNlLCJjb25maWdGaWxlIjoiL3RtcC9uZXh0LXN0YXRzaG12Q3dnL3N0YXRzLWFwcC9uZXh0LmNvbmZpZy5qcyIsImNvbmZpZ0ZpbGVOYW1lIjoibmV4dC5jb25maWcuanMifQ==","pagesType":"app","appDirLoader":"bmV4dC1hcHAtbG9hZGVyP25hbWU9YXBwJTJGYXBwLWVkZ2Utc3NyJTJGcGFnZSZwYWdlPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcHAtZWRnZS1zc3IlMkZwYWdlLmpzJmFwcERpcj0lMkZ0bXAlMkZuZXh0LXN0YXRzaG12Q3dnJTJGc3RhdHMtYXBwJTJGYXBwJmFwcFBhdGhzPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JnByZWZlcnJlZFJlZ2lvbj0mbWlkZGxld2FyZUNvbmZpZz1lMzAlM0Qh","sriEnabled":false,"middlewareConfig":"e30="}!
var _self___RSC_MANIFEST;
const incrementalCacheHandler = null;
@@ -402,47 +402,47 @@
/***/
},
- /***/ 744: /***/ (
+ /***/ 4480: /***/ (
__unused_webpack_module,
__unused_webpack_exports,
__webpack_require__
) => {
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 1817)
+ __webpack_require__.bind(__webpack_require__, 4394)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 9652)
+ __webpack_require__.bind(__webpack_require__, 4988)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 3519)
+ __webpack_require__.bind(__webpack_require__, 9932)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 4977)
+ __webpack_require__.bind(__webpack_require__, 6371)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 9558)
+ __webpack_require__.bind(__webpack_require__, 9592)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 2096)
+ __webpack_require__.bind(__webpack_require__, 2380)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 3392)
+ __webpack_require__.bind(__webpack_require__, 6487)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 9693)
+ __webpack_require__.bind(__webpack_require__, 7202)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 5675)
+ __webpack_require__.bind(__webpack_require__, 4645)
);
/***/
},
- /***/ 7129: /***/ () => {
+ /***/ 8402: /***/ () => {
/***/
},
- /***/ 4791: /***/ (
+ /***/ 3053: /***/ (
__unused_webpack_module,
__webpack_exports__,
__webpack_require__
@@ -462,7 +462,7 @@
/***/
},
- /***/ 9469: /***/ (
+ /***/ 9363: /***/ (
__unused_webpack_module,
__webpack_exports__,
__webpack_require__
@@ -474,7 +474,7 @@
/* harmony export */
});
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
- __webpack_require__(3251);
+ __webpack_require__(4470);
function RootLayout({ children }) {
return /*#__PURE__*/ (0,
@@ -493,7 +493,7 @@
// webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) =>
__webpack_require__((__webpack_require__.s = moduleId));
- /******/ __webpack_require__.O(0, [33, 320], () => __webpack_exec__(6273));
+ /******/ __webpack_require__.O(0, [778, 793], () => __webpack_exec__(159));
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ (_ENTRIES = typeof _ENTRIES === "undefined" ? {} : _ENTRIES)[
"middleware_app/app-edge-ssr/page"
Diff for middleware.js
Diff too large to display
Diff for edge-ssr.js
Diff too large to display
Diff for image-HASH.js
@@ -1,7 +1,7 @@
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
[8358],
{
- /***/ 5497: /***/ (
+ /***/ 2307: /***/ (
__unused_webpack_module,
__unused_webpack_exports,
__webpack_require__
@@ -9,7 +9,7 @@
(window.__NEXT_P = window.__NEXT_P || []).push([
"/image",
function () {
- return __webpack_require__(5700);
+ return __webpack_require__(4720);
},
]);
if (false) {
@@ -18,7 +18,7 @@
/***/
},
- /***/ 959: /***/ (module, exports, __webpack_require__) => {
+ /***/ 8697: /***/ (module, exports, __webpack_require__) => {
"use strict";
/* __next_internal_client_entry_do_not_use__ cjs */
Object.defineProperty(exports, "__esModule", {
@@ -40,15 +40,15 @@
__webpack_require__(5439)
);
const _head = /*#__PURE__*/ _interop_require_default._(
- __webpack_require__(232)
+ __webpack_require__(2185)
);
- const _getimgprops = __webpack_require__(7335);
- const _imageconfig = __webpack_require__(7712);
- const _imageconfigcontextsharedruntime = __webpack_require__(1207);
- const _warnonce = __webpack_require__(9114);
- const _routercontextsharedruntime = __webpack_require__(8426);
+ const _getimgprops = __webpack_require__(9461);
+ const _imageconfig = __webpack_require__(5517);
+ const _imageconfigcontextsharedruntime = __webpack_require__(8947);
+ const _warnonce = __webpack_require__(5860);
+ const _routercontextsharedruntime = __webpack_require__(7328);
const _imageloader = /*#__PURE__*/ _interop_require_default._(
- __webpack_require__(8106)
+ __webpack_require__(7310)
);
// This is replaced by webpack define plugin
const configEnv = {
@@ -376,7 +376,7 @@
/***/
},
- /***/ 7335: /***/ (
+ /***/ 9461: /***/ (
__unused_webpack_module,
exports,
__webpack_require__
@@ -392,9 +392,9 @@
return getImgProps;
},
});
- const _warnonce = __webpack_require__(9114);
- const _imageblursvg = __webpack_require__(9966);
- const _imageconfig = __webpack_require__(7712);
+ const _warnonce = __webpack_require__(5860);
+ const _imageblursvg = __webpack_require__(5425);
+ const _imageconfig = __webpack_require__(5517);
const VALID_LOADING_VALUES =
/* unused pure expression or super */ null && [
"lazy",
@@ -769,7 +769,7 @@
/***/
},
- /***/ 9966: /***/ (__unused_webpack_module, exports) => {
+ /***/ 5425: /***/ (__unused_webpack_module, exports) => {
"use strict";
/**
* A shared function, used on both client and server, to generate a SVG blur placeholder.
@@ -824,7 +824,7 @@
/***/
},
- /***/ 8366: /***/ (
+ /***/ 9578: /***/ (
__unused_webpack_module,
exports,
__webpack_require__
@@ -851,10 +851,10 @@
},
});
const _interop_require_default = __webpack_require__(1478);
- const _getimgprops = __webpack_require__(7335);
- const _imagecomponent = __webpack_require__(959);
+ const _getimgprops = __webpack_require__(9461);
+ const _imagecomponent = __webpack_require__(8697);
const _imageloader = /*#__PURE__*/ _interop_require_default._(
- __webpack_require__(8106)
+ __webpack_require__(7310)
);
function getImageProps(imgProps) {
const { props } = (0, _getimgprops.getImgProps)(imgProps, {
@@ -886,7 +886,7 @@
/***/
},
- /***/ 8106: /***/ (__unused_webpack_module, exports) => {
+ /***/ 7310: /***/ (__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", {
@@ -921,7 +921,7 @@
/***/
},
- /***/ 5700: /***/ (
+ /***/ 4720: /***/ (
__unused_webpack_module,
__webpack_exports__,
__webpack_require__
@@ -938,8 +938,8 @@
// EXTERNAL MODULE: ./node_modules/.pnpm/[email protected]/node_modules/react/jsx-runtime.js
var jsx_runtime = __webpack_require__(3456);
- // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/image.js
- var next_image = __webpack_require__(5008);
+ // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/image.js
+ var next_image = __webpack_require__(932);
var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // CONCATENATED MODULE: ./pages/nextjs.png
/* harmony default export */ const nextjs = {
src: "/_next/static/media/nextjs.cae0b805.png",
@@ -969,12 +969,12 @@
/***/
},
- /***/ 5008: /***/ (
+ /***/ 932: /***/ (
module,
__unused_webpack_exports,
__webpack_require__
) => {
- module.exports = __webpack_require__(8366);
+ module.exports = __webpack_require__(9578);
/***/
},
@@ -984,7 +984,7 @@
/******/ var __webpack_exec__ = (moduleId) =>
__webpack_require__((__webpack_require__.s = moduleId));
/******/ __webpack_require__.O(0, [2888, 9774, 179], () =>
- __webpack_exec__(5497)
+ __webpack_exec__(2307)
);
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;
Diff for main-HASH.js
Diff too large to display
Diff for app-page-exp..ntime.dev.js
Diff too large to display
Diff for app-page-exp..time.prod.js
Diff too large to display
Diff for app-page-tur..time.prod.js
Diff too large to display
Diff for app-page-tur..time.prod.js
Diff too large to display
Diff for app-page.runtime.dev.js
Diff too large to display
Diff for app-page.runtime.prod.js
Diff too large to display
Failing test suites
Commit: e28b95c9abd6bfc3751c416b01c1f7f0033555c0
pnpm test-start test/production/deterministic-build/index.test.ts
- deterministic build > should have same md5 file across build
Expand output
● deterministic build › should have same md5 file across build
expect(received).toEqual(expected) // deep equality
- Expected - 2
+ Received + 2
@@ -12,21 +12,21 @@
"9fce7989bff5d35b01e177447faca50d",
"d7aa1834e4b5ee75408143d266ce2f1c",
"4f3949b630a0e25d6cb90a5a8a79459a",
"c80caa65f66639d08c05a9f2de812440",
"775fb25ff0d4bbf78bf4789e47160d77",
- "cbf8e847e74d128ace43621124e950f3",
+ "ba293c1928a7ce7fa6dab423a5b5ae69",
],
"/app-route/edge/route": Array [
"1b1d23e65fe6680a71bfa119a1a4621a",
"49318b1fadb2d705059a2e0d8df88bb6",
"9fce7989bff5d35b01e177447faca50d",
"d7aa1834e4b5ee75408143d266ce2f1c",
"4f3949b630a0e25d6cb90a5a8a79459a",
"c80caa65f66639d08c05a9f2de812440",
"775fb25ff0d4bbf78bf4789e47160d77",
- "adaa37da1ad72cd0cded7b8cbed06e37",
+ "58997aa0200dd74be61f2fc94ea732eb",
],
"/pages-page/edge": Array [
"1b1d23e65fe6680a71bfa119a1a4621a",
"49318b1fadb2d705059a2e0d8df88bb6",
"9fce7989bff5d35b01e177447faca50d",
63 |
64 | it('should have same md5 file across build', async () => {
> 65 | expect(edgeBuildFileMd5Hashes[0]).toEqual(edgeBuildFileMd5Hashes[1])
| ^
66 | expect(nodeBuildFileMd5Hashes[0]).toEqual(nodeBuildFileMd5Hashes[1])
67 | })
68 | })
at Object.toEqual (production/deterministic-build/index.test.ts:65:39)
Read more about building and testing Next.js in contributing.md.
pnpm test-start test/e2e/opentelemetry/instrumentation/opentelemetry.test.ts
- opentelemetry > incoming context propagation > app router > should handle client-side navigation
- opentelemetry > root context > app router > should handle client-side navigation
Expand output
● opentelemetry › root context › app router › should handle client-side navigation
expect(received).toMatchSnapshot()
Snapshot name: `opentelemetry root context app router should handle client-side navigation 1`
- Snapshot - 109
+ Received + 109
@@ -3,159 +3,159 @@
"attributes": {
"next.route": "/app/[param]/loading/page1",
"next.span_name": "resolve page components",
"next.span_type": "NextNodeServer.findPageComponents",
},
- "duration": 87.5,
+ "duration": 247.521,
"events": [],
- "id": "98978cccb0a87e95",
+ "id": "725b034e09facb60",
"kind": 0,
"links": [],
"name": "resolve page components",
- "parentId": "a8ef684cf17adeb9",
+ "parentId": "9439414607d0c59e",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828309586000,
- "traceId": "dfab070c61d3909e9c61144462be133e",
+ "timestamp": 1716176291797000,
+ "traceId": "fb88d4d07f6033061ed90934cba9e154",
},
{
"attributes": {
- "next.segment": "[param]",
- "next.span_name": "resolve segment modules",
- "next.span_type": "NextNodeServer.getLayoutOrPageModule",
+ "next.span_name": "build component tree",
+ "next.span_type": "NextNodeServer.createComponentTree",
},
- "duration": 34.084,
+ "duration": 3509.753,
"events": [],
- "id": "34bb44ac38b6f0a5",
+ "id": "977c965ca536607a",
"kind": 0,
"links": [],
- "name": "resolve segment modules",
- "parentId": "3c37465e5e82510d",
+ "name": "build component tree",
+ "parentId": "b63d279b0f12bd61",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828309589000,
- "traceId": "dfab070c61d3909e9c61144462be133e",
+ "timestamp": 1716176291801000,
+ "traceId": "fb88d4d07f6033061ed90934cba9e154",
},
{
"attributes": {
- "next.span_name": "build component tree",
- "next.span_type": "NextNodeServer.createComponentTree",
+ "next.span_name": "start response",
+ "next.span_type": "NextNodeServer.startResponse",
},
- "duration": 1412.541,
+ "duration": 24.621,
"events": [],
- "id": "3c37465e5e82510d",
+ "id": "d39c72f476dc4c87",
"kind": 0,
"links": [],
- "name": "build component tree",
- "parentId": "f74e9bbee479cd47",
+ "name": "start response",
+ "parentId": "b63d279b0f12bd61",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828309588000,
- "traceId": "dfab070c61d3909e9c61144462be133e",
+ "timestamp": 1716176291817000,
+ "traceId": "fb88d4d07f6033061ed90934cba9e154",
},
{
"attributes": {
- "next.route": "/app/[param]/loading/page1",
- "next.span_name": "render route (app) /app/[param]/loading/page1",
- "next.span_type": "AppRender.getBodyResult",
+ "next.page": "/app/[param]/layout",
+ "next.span_name": "generateMetadata /app/[param]/layout",
+ "next.span_type": "ResolveMetadata.generateMetadata",
},
- "duration": 7391.792,
+ "duration": 54.126,
"events": [],
- "id": "f74e9bbee479cd47",
+ "id": "4f08da86e6ec953d",
"kind": 0,
"links": [],
- "name": "render route (app) /app/[param]/loading/page1",
- "parentId": "a8ef684cf17adeb9",
+ "name": "generateMetadata /app/[param]/layout",
+ "parentId": "b63d279b0f12bd61",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828309587000,
- "traceId": "dfab070c61d3909e9c61144462be133e",
+ "timestamp": 1716176291809000,
+ "traceId": "fb88d4d07f6033061ed90934cba9e154",
},
{
"attributes": {
- "next.segment": "__PAGE__",
- "next.span_name": "resolve segment modules",
- "next.span_type": "NextNodeServer.getLayoutOrPageModule",
+ "next.route": "/app/[param]/loading/page1",
+ "next.span_name": "render route (app) /app/[param]/loading/page1",
+ "next.span_type": "AppRender.getBodyResult",
},
- "duration": 25.709,
+ "duration": 12576.104,
"events": [],
- "id": "6b95decf0bbaf8b1",
+ "id": "b63d279b0f12bd61",
"kind": 0,
"links": [],
- "name": "resolve segment modules",
- "parentId": "3c37465e5e82510d",
+ "name": "render route (app) /app/[param]/loading/page1",
+ "parentId": "9439414607d0c59e",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828309589000,
- "traceId": "dfab070c61d3909e9c61144462be133e",
+ "timestamp": 1716176291800000,
+ "traceId": "fb88d4d07f6033061ed90934cba9e154",
},
{
"attributes": {
- "next.page": "/app/[param]/layout",
- "next.span_name": "generateMetadata /app/[param]/layout",
- "next.span_type": "ResolveMetadata.generateMetadata",
+ "next.segment": "[param]",
+ "next.span_name": "resolve segment modules",
+ "next.span_type": "NextNodeServer.getLayoutOrPageModule",
},
- "duration": 19.5,
+ "duration": 102.554,
"events": [],
- "id": "7d04403a7cb8d014",
+ "id": "56c2bec96207f123",
"kind": 0,
"links": [],
- "name": "generateMetadata /app/[param]/layout",
- "parentId": "f74e9bbee479cd47",
+ "name": "resolve segment modules",
+ "parentId": "977c965ca536607a",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828309592000,
- "traceId": "dfab070c61d3909e9c61144462be133e",
+ "timestamp": 1716176291802000,
+ "traceId": "fb88d4d07f6033061ed90934cba9e154",
},
{
"attributes": {
- "next.span_name": "start response",
- "next.span_type": "NextNodeServer.startResponse",
+ "next.segment": "__PAGE__",
+ "next.span_name": "resolve segment modules",
+ "next.span_type": "NextNodeServer.getLayoutOrPageModule",
},
- "duration": 10.208,
+ "duration": 937.056,
"events": [],
- "id": "57c7f4ac74cb7cbf",
+ "id": "3b7e481f377374dc",
"kind": 0,
"links": [],
- "name": "start response",
- "parentId": "f74e9bbee479cd47",
+ "name": "resolve segment modules",
+ "parentId": "977c965ca536607a",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828309596000,
- "traceId": "dfab070c61d3909e9c61144462be133e",
+ "timestamp": 1716176291803000,
+ "traceId": "fb88d4d07f6033061ed90934cba9e154",
},
{
"attributes": {
"next.clientComponentLoadCount": 5,
},
- "duration": 14.25,
+ "duration": 15.577,
"events": [],
- "id": "c79bbdc913a7fd41",
+ "id": "ec07ce927b3975c3",
"kind": 0,
"links": [],
"name": "NextNodeServer.clientComponentLoading",
- "parentId": "f74e9bbee479cd47",
+ "parentId": "b63d279b0f12bd61",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828309591483.8,
- "traceId": "dfab070c61d3909e9c61144462be133e",
+ "timestamp": 1716176291808643.8,
+ "traceId": "fb88d4d07f6033061ed90934cba9e154",
},
{
"attributes": {
"http.method": "GET",
"http.route": "/app/[param]/loading/page1",
@@ -164,61 +164,61 @@
"next.route": "/app/[param]/loading/page1",
"next.rsc": false,
"next.span_name": "GET /app/[param]/loading/page1",
"next.span_type": "BaseServer.handleRequest",
},
- "duration": 521727.708,
+ "duration": 519102.079,
"events": [],
- "id": "a8ef684cf17adeb9",
+ "id": "9439414607d0c59e",
"kind": 1,
"links": [],
"name": "GET /app/[param]/loading/page1",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828309585000,
- "traceId": "dfab070c61d3909e9c61144462be133e",
+ "timestamp": 1716176291796000,
+ "traceId": "fb88d4d07f6033061ed90934cba9e154",
},
{
"attributes": {
"next.route": "/app/[param]/loading/page2",
"next.span_name": "resolve page components",
"next.span_type": "NextNodeServer.findPageComponents",
},
- "duration": 156.542,
+ "duration": 257.947,
"events": [],
- "id": "0c79afdbfbb1e0f6",
+ "id": "5005f5b8f96dc66a",
"kind": 0,
"links": [],
"name": "resolve page components",
- "parentId": "f95c305a64c1d71c",
+ "parentId": "d2d5728b782467a3",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828310141000,
- "traceId": "c8ee82aa15bab3736d7e0f608c92bbe8",
+ "timestamp": 1716176292360000,
+ "traceId": "136fe973fba4072110230df19c54b0ef",
},
{
"attributes": {
"next.span_name": "start response",
"next.span_type": "NextNodeServer.startResponse",
},
- "duration": 18.667,
+ "duration": 40.771,
"events": [],
- "id": "f4a9aa06018c421d",
+ "id": "a0fc6213241f02fb",
"kind": 0,
"links": [],
"name": "start response",
- "parentId": "f95c305a64c1d71c",
+ "parentId": "d2d5728b782467a3",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828310146000,
- "traceId": "c8ee82aa15bab3736d7e0f608c92bbe8",
+ "timestamp": 1716176292366000,
+ "traceId": "136fe973fba4072110230df19c54b0ef",
},
{
"attributes": {
"http.method": "GET",
"http.route": "/app/[param]/loading/page2",
@@ -227,120 +227,120 @@
"next.route": "/app/[param]/loading/page2",
"next.rsc": true,
"next.span_name": "RSC GET /app/[param]/loading/page2",
"next.span_type": "BaseServer.handleRequest",
},
- "duration": 7208.166,
+ "duration": 12725.349,
"events": [],
- "id": "f95c305a64c1d71c",
+ "id": "d2d5728b782467a3",
"kind": 1,
"links": [],
"name": "RSC GET /app/[param]/loading/page2",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828310140000,
- "traceId": "c8ee82aa15bab3736d7e0f608c92bbe8",
+ "timestamp": 1716176292359000,
+ "traceId": "136fe973fba4072110230df19c54b0ef",
},
{
"attributes": {
"next.route": "/app/[param]/loading/page2",
"next.span_name": "resolve page components",
"next.span_type": "NextNodeServer.findPageComponents",
},
- "duration": 95.5,
+ "duration": 223.148,
"events": [],
- "id": "f53658b0f59fa556",
+ "id": "858f1caaa95814c4",
"kind": 0,
"links": [],
"name": "resolve page components",
- "parentId": "6e8569377f2a6820",
+ "parentId": "63c4a9ce29c86cdc",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828310207000,
- "traceId": "00a2fc222e9b84a206b4e051abb37507",
+ "timestamp": 1716176292474000,
+ "traceId": "e4f4855d71ee17799e2c4a164ed64342",
},
{
"attributes": {
"next.span_name": "build component tree",
"next.span_type": "NextNodeServer.createComponentTree",
},
- "duration": 433.791,
+ "duration": 1145.968,
"events": [],
- "id": "033016075b37475b",
+ "id": "09b3044ada7daaf5",
"kind": 0,
"links": [],
"name": "build component tree",
- "parentId": "6e8569377f2a6820",
+ "parentId": "63c4a9ce29c86cdc",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828310209000,
- "traceId": "00a2fc222e9b84a206b4e051abb37507",
+ "timestamp": 1716176292476000,
+ "traceId": "e4f4855d71ee17799e2c4a164ed64342",
},
{
"attributes": {
"next.span_name": "start response",
"next.span_type": "NextNodeServer.startResponse",
},
- "duration": 9.291,
+ "duration": 28.38,
"events": [],
- "id": "2f39a1cc4c856ace",
+ "id": "225e3174d805dcbc",
"kind": 0,
"links": [],
"name": "start response",
- "parentId": "6e8569377f2a6820",
+ "parentId": "63c4a9ce29c86cdc",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828310210000,
- "traceId": "00a2fc222e9b84a206b4e051abb37507",
+ "timestamp": 1716176292481000,
+ "traceId": "e4f4855d71ee17799e2c4a164ed64342",
},
{
"attributes": {
"next.page": "/app/[param]/layout",
"next.span_name": "generateMetadata /app/[param]/layout",
"next.span_type": "ResolveMetadata.generateMetadata",
},
- "duration": 18.959,
+ "duration": 60.366,
"events": [],
- "id": "1bc21cf0c9c5a53d",
+ "id": "16ae95d9955d28b7",
"kind": 0,
"links": [],
"name": "generateMetadata /app/[param]/layout",
- "parentId": "6e8569377f2a6820",
+ "parentId": "63c4a9ce29c86cdc",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828310211000,
- "traceId": "00a2fc222e9b84a206b4e051abb37507",
+ "timestamp": 1716176292483000,
+ "traceId": "e4f4855d71ee17799e2c4a164ed64342",
},
{
"attributes": {
"next.segment": "__PAGE__",
"next.span_name": "resolve segment modules",
"next.span_type": "NextNodeServer.getLayoutOrPageModule",
},
- "duration": 44.709,
+ "duration": 130.915,
"events": [],
- "id": "cdcaa32b04cba524",
+ "id": "3c5e59dfa4593284",
"kind": 0,
"links": [],
"name": "resolve segment modules",
- "parentId": "033016075b37475b",
+ "parentId": "09b3044ada7daaf5",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828310209000,
- "traceId": "00a2fc222e9b84a206b4e051abb37507",
+ "timestamp": 1716176292476000,
+ "traceId": "e4f4855d71ee17799e2c4a164ed64342",
},
{
"attributes": {
"http.method": "GET",
"http.route": "/app/[param]/loading/page2",
@@ -349,19 +349,19 @@
"next.route": "/app/[param]/loading/page2",
"next.rsc": true,
"next.span_name": "RSC GET /app/[param]/loading/page2",
"next.span_type": "BaseServer.handleRequest",
},
- "duration": 509500.541,
+ "duration": 510767.812,
"events": [],
- "id": "6e8569377f2a6820",
+ "id": "63c4a9ce29c86cdc",
"kind": 1,
"links": [],
"name": "RSC GET /app/[param]/loading/page2",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828310207000,
- "traceId": "00a2fc222e9b84a206b4e051abb37507",
+ "timestamp": 1716176292473000,
+ "traceId": "e4f4855d71ee17799e2c4a164ed64342",
},
]
535 | await browser.elementByCss('a').click().waitForElementByCss('#page2')
536 |
> 537 | expect(getCollector().getSpans()).toMatchSnapshot()
| ^
538 | })
539 | })
540 |
at Object.toMatchSnapshot (e2e/opentelemetry/instrumentation/opentelemetry.test.ts:537:45)
● opentelemetry › incoming context propagation › app router › should handle client-side navigation
expect(received).toMatchSnapshot()
Snapshot name: `opentelemetry incoming context propagation app router should handle client-side navigation 1`
- Snapshot - 106
+ Received + 106
@@ -3,159 +3,159 @@
"attributes": {
"next.route": "/app/[param]/loading/page1",
"next.span_name": "resolve page components",
"next.span_type": "NextNodeServer.findPageComponents",
},
- "duration": 170.875,
+ "duration": 327.556,
"events": [],
- "id": "09c96f86f462995f",
+ "id": "cdf7c2f4833f1e1f",
"kind": 0,
"links": [],
"name": "resolve page components",
- "parentId": "b5d89814ae8a3785",
+ "parentId": "db5c88dd8122c20b",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828323740000,
- "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+ "timestamp": 1716176305999000,
+ "traceId": "0050b8b49bfe9635f698deda4170ec58",
},
{
"attributes": {
- "next.segment": "[param]",
- "next.span_name": "resolve segment modules",
- "next.span_type": "NextNodeServer.getLayoutOrPageModule",
+ "next.page": "/app/[param]/layout",
+ "next.span_name": "generateMetadata /app/[param]/layout",
+ "next.span_type": "ResolveMetadata.generateMetadata",
},
- "duration": 21.583,
+ "duration": 55.241,
"events": [],
- "id": "474afbf4c184decb",
+ "id": "4d0d25771db86b65",
"kind": 0,
"links": [],
- "name": "resolve segment modules",
- "parentId": "5e4ad2d3e35c5ca6",
+ "name": "generateMetadata /app/[param]/layout",
+ "parentId": "2faa2ec24416a7d1",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828323742000,
- "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+ "timestamp": 1716176306010000,
+ "traceId": "0050b8b49bfe9635f698deda4170ec58",
},
{
"attributes": {
"next.span_name": "build component tree",
"next.span_type": "NextNodeServer.createComponentTree",
},
- "duration": 531.708,
+ "duration": 1666.356,
"events": [],
- "id": "5e4ad2d3e35c5ca6",
+ "id": "fbb44b200e1d4b63",
"kind": 0,
"links": [],
"name": "build component tree",
- "parentId": "d9f18e48ee445b87",
+ "parentId": "2faa2ec24416a7d1",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828323742000,
- "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+ "timestamp": 1716176306002000,
+ "traceId": "0050b8b49bfe9635f698deda4170ec58",
},
{
"attributes": {
- "next.segment": "__PAGE__",
- "next.span_name": "resolve segment modules",
- "next.span_type": "NextNodeServer.getLayoutOrPageModule",
+ "next.span_name": "start response",
+ "next.span_type": "NextNodeServer.startResponse",
},
- "duration": 20.75,
+ "duration": 27.737,
"events": [],
- "id": "1f3de733e4e72874",
+ "id": "1688548c09c16a05",
"kind": 0,
"links": [],
- "name": "resolve segment modules",
- "parentId": "5e4ad2d3e35c5ca6",
+ "name": "start response",
+ "parentId": "2faa2ec24416a7d1",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828323742000,
- "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+ "timestamp": 1716176306018000,
+ "traceId": "0050b8b49bfe9635f698deda4170ec58",
},
{
"attributes": {
- "next.page": "/app/[param]/layout",
- "next.span_name": "generateMetadata /app/[param]/layout",
- "next.span_type": "ResolveMetadata.generateMetadata",
+ "next.route": "/app/[param]/loading/page1",
+ "next.span_name": "render route (app) /app/[param]/loading/page1",
+ "next.span_type": "AppRender.getBodyResult",
},
- "duration": 18.167,
+ "duration": 11816.775,
"events": [],
- "id": "947a0cdf9d432ddb",
+ "id": "2faa2ec24416a7d1",
"kind": 0,
"links": [],
- "name": "generateMetadata /app/[param]/layout",
- "parentId": "d9f18e48ee445b87",
+ "name": "render route (app) /app/[param]/loading/page1",
+ "parentId": "db5c88dd8122c20b",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828323745000,
- "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+ "timestamp": 1716176306001000,
+ "traceId": "0050b8b49bfe9635f698deda4170ec58",
},
{
"attributes": {
- "next.span_name": "start response",
- "next.span_type": "NextNodeServer.startResponse",
+ "next.segment": "[param]",
+ "next.span_name": "resolve segment modules",
+ "next.span_type": "NextNodeServer.getLayoutOrPageModule",
},
- "duration": 9.5,
+ "duration": 88.834,
"events": [],
- "id": "4729a09c9abaf881",
+ "id": "439ef96cb10c07f9",
"kind": 0,
"links": [],
- "name": "start response",
- "parentId": "d9f18e48ee445b87",
+ "name": "resolve segment modules",
+ "parentId": "fbb44b200e1d4b63",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828323747000,
- "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+ "timestamp": 1716176306003000,
+ "traceId": "0050b8b49bfe9635f698deda4170ec58",
},
{
"attributes": {
- "next.route": "/app/[param]/loading/page1",
- "next.span_name": "render route (app) /app/[param]/loading/page1",
- "next.span_type": "AppRender.getBodyResult",
+ "next.segment": "__PAGE__",
+ "next.span_name": "resolve segment modules",
+ "next.span_type": "NextNodeServer.getLayoutOrPageModule",
},
- "duration": 4530.667,
+ "duration": 80.428,
"events": [],
- "id": "d9f18e48ee445b87",
+ "id": "14acabcce20f6c8f",
"kind": 0,
"links": [],
- "name": "render route (app) /app/[param]/loading/page1",
- "parentId": "b5d89814ae8a3785",
+ "name": "resolve segment modules",
+ "parentId": "fbb44b200e1d4b63",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828323741000,
- "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+ "timestamp": 1716176306003000,
+ "traceId": "0050b8b49bfe9635f698deda4170ec58",
},
{
"attributes": {
"next.clientComponentLoadCount": 5,
},
- "duration": 9.958,
+ "duration": 22.895,
"events": [],
- "id": "9a80488e523592a4",
+ "id": "9fc0f501851d9626",
"kind": 0,
"links": [],
"name": "NextNodeServer.clientComponentLoading",
- "parentId": "d9f18e48ee445b87",
+ "parentId": "2faa2ec24416a7d1",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828323744233,
- "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+ "timestamp": 1716176306009033.2,
+ "traceId": "0050b8b49bfe9635f698deda4170ec58",
},
{
"attributes": {
"http.method": "GET",
"http.route": "/app/[param]/loading/page1",
@@ -164,61 +164,61 @@
"next.route": "/app/[param]/loading/page1",
"next.rsc": false,
"next.span_name": "GET /app/[param]/loading/page1",
"next.span_type": "BaseServer.handleRequest",
},
- "duration": 512386.25,
+ "duration": 516375.447,
"events": [],
- "id": "b5d89814ae8a3785",
+ "id": "db5c88dd8122c20b",
"kind": 1,
"links": [],
"name": "GET /app/[param]/loading/page1",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828323740000,
- "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+ "timestamp": 1716176305998000,
+ "traceId": "0050b8b49bfe9635f698deda4170ec58",
},
{
"attributes": {
"next.route": "/app/[param]/loading/page2",
"next.span_name": "resolve page components",
"next.span_type": "NextNodeServer.findPageComponents",
},
- "duration": 102.875,
+ "duration": 244.298,
"events": [],
- "id": "d3dbb304cf8b1d20",
+ "id": "fd5ee1a4da3a6ee7",
"kind": 0,
"links": [],
"name": "resolve page components",
- "parentId": "2be589c6b654639f",
+ "parentId": "4260c0b116dd4fa3",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828324275000,
- "traceId": "b108b059df9687b1ddc7f7668c3c1d1c",
+ "timestamp": 1716176306543000,
+ "traceId": "003d8aa97955f4df7bd89e0554e4beac",
},
{
"attributes": {
"next.span_name": "start response",
"next.span_type": "NextNodeServer.startResponse",
},
- "duration": 11.209,
+ "duration": 26.034,
"events": [],
- "id": "9b71a10e381ba2d9",
+ "id": "8fad53515c6b4013",
"kind": 0,
"links": [],
"name": "start response",
- "parentId": "2be589c6b654639f",
+ "parentId": "4260c0b116dd4fa3",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828324277000,
- "traceId": "b108b059df9687b1ddc7f7668c3c1d1c",
+ "timestamp": 1716176306546000,
+ "traceId": "003d8aa97955f4df7bd89e0554e4beac",
},
{
"attributes": {
"http.method": "GET",
"http.route": "/app/[param]/loading/page2",
@@ -227,120 +227,120 @@
"next.route": "/app/[param]/loading/page2",
"next.rsc": true,
"next.span_name": "RSC GET /app/[param]/loading/page2",
"next.span_type": "BaseServer.handleRequest",
},
- "duration": 3384.292,
+ "duration": 8417.915,
"events": [],
- "id": "2be589c6b654639f",
+ "id": "4260c0b116dd4fa3",
"kind": 1,
"links": [],
"name": "RSC GET /app/[param]/loading/page2",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828324274000,
- "traceId": "b108b059df9687b1ddc7f7668c3c1d1c",
+ "timestamp": 1716176306542000,
+ "traceId": "003d8aa97955f4df7bd89e0554e4beac",
},
{
"attributes": {
"next.route": "/app/[param]/loading/page2",
"next.span_name": "resolve page components",
"next.span_type": "NextNodeServer.findPageComponents",
},
- "duration": 120.792,
+ "duration": 206.667,
"events": [],
- "id": "2047a97fc18855ec",
+ "id": "44b9de99168c1515",
"kind": 0,
"links": [],
"name": "resolve page components",
- "parentId": "e38488814f571329",
+ "parentId": "2d8667fcd65d1d4f",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828324340000,
- "traceId": "0d6c1543230df4c288312d4c179d2d79",
+ "timestamp": 1716176306636000,
+ "traceId": "6fd3e12883415675d0de7678d8867b16",
},
{
"attributes": {
"next.span_name": "build component tree",
"next.span_type": "NextNodeServer.createComponentTree",
},
- "duration": 560.917,
+ "duration": 781.839,
"events": [],
- "id": "4cee7b5a66761fd6",
+ "id": "88db6db56a4f81e8",
"kind": 0,
"links": [],
"name": "build component tree",
- "parentId": "e38488814f571329",
+ "parentId": "2d8667fcd65d1d4f",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828324341000,
- "traceId": "0d6c1543230df4c288312d4c179d2d79",
+ "timestamp": 1716176306638000,
+ "traceId": "6fd3e12883415675d0de7678d8867b16",
},
{
"attributes": {
"next.span_name": "start response",
"next.span_type": "NextNodeServer.startResponse",
},
- "duration": 12.667,
+ "duration": 32.69,
"events": [],
- "id": "e0656af2298f1a78",
+ "id": "9f1125bfc068e0e1",
"kind": 0,
"links": [],
"name": "start response",
- "parentId": "e38488814f571329",
+ "parentId": "2d8667fcd65d1d4f",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828324343000,
- "traceId": "0d6c1543230df4c288312d4c179d2d79",
+ "timestamp": 1716176306641000,
+ "traceId": "6fd3e12883415675d0de7678d8867b16",
},
{
"attributes": {
"next.page": "/app/[param]/layout",
"next.span_name": "generateMetadata /app/[param]/layout",
"next.span_type": "ResolveMetadata.generateMetadata",
},
- "duration": 22.833,
+ "duration": 55.178,
"events": [],
- "id": "bbcc32e4994f8a16",
+ "id": "90cd8d9f188ed890",
"kind": 0,
"links": [],
"name": "generateMetadata /app/[param]/layout",
- "parentId": "e38488814f571329",
+ "parentId": "2d8667fcd65d1d4f",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828324344000,
- "traceId": "0d6c1543230df4c288312d4c179d2d79",
+ "timestamp": 1716176306643000,
+ "traceId": "6fd3e12883415675d0de7678d8867b16",
},
{
"attributes": {
"next.segment": "__PAGE__",
"next.span_name": "resolve segment modules",
"next.span_type": "NextNodeServer.getLayoutOrPageModule",
},
- "duration": 82,
+ "duration": 69.521,
"events": [],
- "id": "6cfa448cf5fdd5fe",
+ "id": "6f2b571b2fd01455",
"kind": 0,
"links": [],
"name": "resolve segment modules",
- "parentId": "4cee7b5a66761fd6",
+ "parentId": "88db6db56a4f81e8",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828324341000,
- "traceId": "0d6c1543230df4c288312d4c179d2d79",
+ "timestamp": 1716176306638000,
+ "traceId": "6fd3e12883415675d0de7678d8867b16",
},
{
"attributes": {
"http.method": "GET",
"http.route": "/app/[param]/loading/page2",
@@ -349,19 +349,19 @@
"next.route": "/app/[param]/loading/page2",
"next.rsc": true,
"next.span_name": "RSC GET /app/[param]/loading/page2",
"next.span_type": "BaseServer.handleRequest",
},
- "duration": 507666.583,
+ "duration": 508118.08,
"events": [],
- "id": "e38488814f571329",
+ "id": "2d8667fcd65d1d4f",
"kind": 1,
"links": [],
"name": "RSC GET /app/[param]/loading/page2",
"runtime": "nodejs",
"status": {
"code": 0,
},
- "timestamp": 1715828324340000,
- "traceId": "0d6c1543230df4c288312d4c179d2d79",
+ "timestamp": 1716176306635000,
+ "traceId": "6fd3e12883415675d0de7678d8867b16",
},
]
535 | await browser.elementByCss('a').click().waitForElementByCss('#page2')
536 |
> 537 | expect(getCollector().getSpans()).toMatchSnapshot()
| ^
538 | })
539 | })
540 |
at Object.toMatchSnapshot (e2e/opentelemetry/instrumentation/opentelemetry.test.ts:537:45)
Read more about building and testing Next.js in contributing.md.
@PatNeedham Looks like that test fail (pnpm test-start test/production/graceful-shutdown/index.test.ts) was a flaky fail.
@samcx any suggestion for how @Leonils be added as a co-author on this PR so he gets credit for resolving the initial bug?
@PatNeedham Unfortunately GitHub doesn't provide a way for this besides adding a co-author to a commit. But you can add it to the 
Thank you a lot for the time you took to complete this @PatNeedham. I tried several times to run ci tests locally, but always got some randomly failing tests and wasn't able to understand how to stabilize my environment to finish my PR and retrigger a run.
@PatNeedham I think we're missing the test from the previous 
Good catch, let me add that back and update this branch shortly. In the mean time, what would be the right way to run just a subset of the e2e tests locally? For example, from the original PR's test checks, only these ones failed:
I see the test dev (1 through 4) processes are defined here: https://github.com/vercel/next.js/blob/v14.3.0-canary.30/.github/workflows/build_and_test.yml#L287-L300 - so I tried running this command locally:
NEXT_TEST_MODE=dev node run-tests.js --timings -g 2/4 -c 8 --type development
(replacing TEST_CONCURRENCY with 8 since it's specified in the env section further up in the file)
That's running now for the past ~15 minutes still ongoing. I'm guessing there's a -- --matchingTests opentelemetry type of argument I need to include to limit which ones get run?
I can't fully add back the it('should handle client-side navigation', async () => { ... }) test because the supporting helper functions use traceFile from the ./constants file, but that value got removed a couple months back: https://github.com/vercel/next.js/pull/62120/files#diff-95fdfa81f6699cf4ad4345cd01cc66ae151d91091ddf3f5ea4f04dd714c49f1b - is it safe to re-add it to that file?
export const traceFile = 'otel-trace.txt'
Back then I used pnpm testheadless test/e2e/opentelemetry/opentelemetry-client-navigation.test.ts to develop the test, but when I tried to run more tests, I took also ages...
For the test "should handle client-side navigation", it's essentially a snapshot test. I ran the test first expecting nothing, reviewed the traces and was happy with what I got. I saw some changes in theses files last time, so there might be new/modified traces too. The only important part is that we have target with the actual value ("http.target": "/app/foo/loading/page1") and route with the placeholder: "next.route": "/app/[param]/loading/page1"
@PatNeedham I can confirm the previously failed run were test flakes so that's fine (the Next.js team needs to fix this separately, but not blocking). No need to merge canary as well—I'll merge it if necessary.
I doubt reintroducing the file will be enough : the TestReporter that was reporting the the file has been rewritten to send to a mock server.
See what was done in the instrumentation when I wrote my PR versus now :
- Old (when I wrote my PR): https://github.com/Leonils/next.js/blob/697f99e1fd9d9e8bd3728e0872deb5dfcadeff5d/test/e2e/opentelemetry/instrumentation-node-test.ts
- New: https://github.com/vercel/next.js/blob/canary/test/e2e/opentelemetry/instrumentation-test.ts
@Leonils you were right - ~10 of the opentelemetry tests are failing in the most recent run. From https://github.com/vercel/next.js/actions/runs/8885666248/job/24397637495?pr=64852 :
I'll revisit this tomorrow, gotta take a break now. But feel free to push to my branch if you want to test anything. expect(received).toMatchObject(expected) appears 8 times in the logs linked to above; some/most of them appear that just additional fields were added to the trace objects, nothing removed, which is somewhat reassuring.
Last commit I just pushed is as close as I've been to get everything passing.
pnpm testheadless test/e2e/opentelemetry/opentelemetry.test.ts
Running that locally shows 2 failed, 25 passed, 27 total
The 2 failed ones are just
opentelemetry › incoming context propagation › app router › should handle client-side navigation
opentelemetry › root context › app router › should handle client-side navigation
And it looks like the issue is just contained to the parentTraceId value:
What might be going awry in that test? @dvoytenko I want to loop you in on this since I see you introduced that expectTrace function a couple months back as part of https://github.com/vercel/next.js/pull/62120
For the root context › app router path invocation of that test, it looks like the value received as "parentId": undefined, in all places while the expected value was "parentId": "<random-id>",.
Last commit I just pushed is as close as I've been to get everything passing.
pnpm testheadless test/e2e/opentelemetry/opentelemetry.test.tsRunning that locally shows
2 failed, 25 passed, 27 totalThe 2 failed ones are just
opentelemetry › incoming context propagation › app router › should handle client-side navigation opentelemetry › root context › app router › should handle client-side navigationAnd it looks like the issue is just contained to the parentTraceId value:
What might be going awry in that test? @dvoytenko I want to loop you in on this since I see you introduced that
expectTracefunction a couple months back as part of #62120
IMHO those tests just need to change to use snapshots.
Thank you @dvoytenko for the suggestion, I've modified the test to use that approach and updated this PR's description so I believe it's in a mergeable state now.
Is there anything that can be done here to get this merged? Would love to see it land soon.
Would also like to see this land. For now we're using an OTEL span processor to reduce cardinality but it's less than ideal because we lose route information
span/nextjs:
include:
attributes:
- key: next.span_type
value: (BaseServer\.handleRequest|AppRender\.fetch)
match_type: regexp
name:
to_attributes:
rules:
- ^(RSC|fetch)?.?(GET|POST|PUT) (?P<url>.+)$
Are there anything we can help with to get this merged @dvoytenko, @Blackskar875 ?
