@evoscientist/webui 0.2.5 → 0.2.6
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/.next/BUILD_ID +1 -1
- package/dist/.next/build-manifest.json +13 -10
- package/dist/.next/prerender-manifest.json +18 -3
- package/dist/.next/required-server-files.json +27 -8
- package/dist/.next/server/app/_global-error/page/build-manifest.json +10 -7
- package/dist/.next/server/app/_global-error/page.js +6 -6
- package/dist/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/dist/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_global-error.html +1 -1
- package/dist/.next/server/app/_global-error.meta +11 -4
- package/dist/.next/server/app/_global-error.rsc +9 -9
- package/dist/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +16 -2
- package/dist/.next/server/app/_global-error.segments/_full.segment.rsc +9 -9
- package/dist/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/.next/server/app/_not-found/page/build-manifest.json +10 -7
- package/dist/.next/server/app/_not-found/page/next-font-manifest.json +1 -1
- package/dist/.next/server/app/_not-found/page.js +9 -10
- package/dist/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_not-found.html +1 -1
- package/dist/.next/server/app/_not-found.meta +16 -5
- package/dist/.next/server/app/_not-found.rsc +15 -15
- package/dist/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/dist/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +22 -2
- package/dist/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/.next/server/app/api/evosci-config/route/build-manifest.json +4 -1
- package/dist/.next/server/app/api/evosci-config/route.js +3 -3
- package/dist/.next/server/app/api/evosci-config/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/evosci-config/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/memory/executions/route/build-manifest.json +4 -1
- package/dist/.next/server/app/api/memory/executions/route.js +4 -3
- package/dist/.next/server/app/api/memory/executions/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/memory/executions/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/memory/observations/route/build-manifest.json +4 -1
- package/dist/.next/server/app/api/memory/observations/route.js +4 -3
- package/dist/.next/server/app/api/memory/observations/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/memory/observations/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/memory/route/build-manifest.json +4 -1
- package/dist/.next/server/app/api/memory/route.js +4 -3
- package/dist/.next/server/app/api/memory/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/memory/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/skills/catalog/route/build-manifest.json +4 -1
- package/dist/.next/server/app/api/skills/catalog/route.js +3 -3
- package/dist/.next/server/app/api/skills/catalog/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/skills/catalog/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/skills/detail/route/build-manifest.json +4 -1
- package/dist/.next/server/app/api/skills/detail/route.js +3 -3
- package/dist/.next/server/app/api/skills/detail/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/skills/detail/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/skills/install/route/build-manifest.json +4 -1
- package/dist/.next/server/app/api/skills/install/route.js +3 -3
- package/dist/.next/server/app/api/skills/install/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/skills/route/build-manifest.json +4 -1
- package/dist/.next/server/app/api/skills/route.js +4 -3
- package/dist/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/workspace/download/route/build-manifest.json +4 -1
- package/dist/.next/server/app/api/workspace/download/route.js +4 -3
- package/dist/.next/server/app/api/workspace/download/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/workspace/download/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/workspace/file/route/build-manifest.json +4 -1
- package/dist/.next/server/app/api/workspace/file/route.js +4 -4
- package/dist/.next/server/app/api/workspace/file/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/workspace/file/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/workspace/route/build-manifest.json +4 -1
- package/dist/.next/server/app/api/workspace/route.js +4 -3
- package/dist/.next/server/app/api/workspace/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/workspace/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/workspace/upload/route/build-manifest.json +4 -1
- package/dist/.next/server/app/api/workspace/upload/route.js +4 -3
- package/dist/.next/server/app/api/workspace/upload/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/workspace/upload/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/icon.png/route/build-manifest.json +4 -1
- package/dist/.next/server/app/icon.png/route.js +4 -4
- package/dist/.next/server/app/icon.png/route.js.nft.json +1 -1
- package/dist/.next/server/app/index.html +1 -1
- package/dist/.next/server/app/index.meta +11 -4
- package/dist/.next/server/app/index.rsc +16 -16
- package/dist/.next/server/app/index.segments/__PAGE__.segment.rsc +22 -5
- package/dist/.next/server/app/index.segments/_full.segment.rsc +16 -16
- package/dist/.next/server/app/index.segments/_tree.segment.rsc +3 -3
- package/dist/.next/server/app/page/build-manifest.json +10 -7
- package/dist/.next/server/app/page/next-font-manifest.json +1 -1
- package/dist/.next/server/app/page.js +10 -11
- package/dist/.next/server/app/page.js.nft.json +1 -1
- package/dist/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/chunks/[externals]__0l8ei7u._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__0239a1s._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__0d2jr7j._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__0jsq76h._.js +6 -0
- package/dist/.next/server/chunks/[root-of-the-server]__0k-rs5f._.js +6 -0
- package/dist/.next/server/chunks/[root-of-the-server]__0key-2n._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__0l3yhx4._.js +160 -0
- package/dist/.next/server/chunks/[root-of-the-server]__0nn8czk._.js +6 -0
- package/dist/.next/server/chunks/[root-of-the-server]__0t923su._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__0zqsdzd._.js +3 -0
- package/dist/.next/server/chunks/[root-of-the-server]__1alqt3_._.js +6 -0
- package/dist/.next/server/chunks/[turbopack]_runtime.js +97 -193
- package/dist/.next/server/chunks/_00r_7g_._.js +3 -0
- package/dist/.next/server/chunks/_042sj8j._.js +3 -0
- package/dist/.next/server/chunks/_0lp3ten._.js +3 -0
- package/dist/.next/server/chunks/_0m7b81h._.js +3 -0
- package/dist/.next/server/chunks/_13lro7d._.js +3 -0
- package/dist/.next/server/chunks/_154zcbx._.js +3 -0
- package/dist/.next/server/chunks/_1_oz68h._.js +3 -0
- package/dist/.next/server/chunks/_1lqtgjk._.js +3 -0
- package/dist/.next/server/chunks/{_next-internal_server_app_api_evosci-config_route_actions_0nka7fr.js → _next-internal_server_app_api_evosci-config_route_actions_13cf33i.js} +1 -1
- package/dist/.next/server/chunks/{_next-internal_server_app_api_memory_executions_route_actions_02b~_kt.js → _next-internal_server_app_api_memory_executions_route_actions_041n8x6.js} +1 -1
- package/dist/.next/server/chunks/{_next-internal_server_app_api_memory_observations_route_actions_0qhyoqo.js → _next-internal_server_app_api_memory_observations_route_actions_18ivi6u.js} +1 -1
- package/dist/.next/server/chunks/{_next-internal_server_app_api_memory_route_actions_0jf5z0q.js → _next-internal_server_app_api_memory_route_actions_0y2o7lg.js} +1 -1
- package/dist/.next/server/chunks/{_next-internal_server_app_api_skills_catalog_route_actions_0pp.pug.js → _next-internal_server_app_api_skills_catalog_route_actions_173mjj2.js} +1 -1
- package/dist/.next/server/chunks/{_next-internal_server_app_api_skills_detail_route_actions_02~v0so.js → _next-internal_server_app_api_skills_detail_route_actions_058ebza.js} +1 -1
- package/dist/.next/server/chunks/{_next-internal_server_app_api_skills_install_route_actions_03-v3ve.js → _next-internal_server_app_api_skills_install_route_actions_06zjol4.js} +1 -1
- package/dist/.next/server/chunks/{_next-internal_server_app_api_skills_route_actions_0kp0j6w.js → _next-internal_server_app_api_skills_route_actions_0_9y-ex.js} +1 -1
- package/dist/.next/server/chunks/{_next-internal_server_app_api_workspace_download_route_actions_0y83v2y.js → _next-internal_server_app_api_workspace_download_route_actions_1m4_t05.js} +1 -1
- package/dist/.next/server/chunks/{_next-internal_server_app_api_workspace_file_route_actions_06tfudj.js → _next-internal_server_app_api_workspace_file_route_actions_0bvzn6g.js} +1 -1
- package/dist/.next/server/chunks/{_next-internal_server_app_api_workspace_route_actions_0rc11bi.js → _next-internal_server_app_api_workspace_route_actions_19-xkal.js} +1 -1
- package/dist/.next/server/chunks/{_next-internal_server_app_api_workspace_upload_route_actions_070kzk5.js → _next-internal_server_app_api_workspace_upload_route_actions_0ccjxm_.js} +1 -1
- package/dist/.next/server/chunks/{_next-internal_server_app_icon_png_route_actions_12.gv.r.js → _next-internal_server_app_icon_png_route_actions_1-lsc8h.js} +1 -1
- package/dist/.next/server/chunks/ssr/{0t6k_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-NNHCCRGN_mjs_01.5gnv._.js → 1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-NNHCCRGN_mjs_03i6i8q._.js} +3 -3
- package/dist/.next/server/chunks/ssr/{0t6k_mermaid_dist_chunks_mermaid_core_mindmap-definition-RKZ34NQL_mjs_0ya3nf7._.js → 1daa_mermaid_dist_chunks_mermaid_core_mindmap-definition-RKZ34NQL_mjs_1m8bey3._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{0t6k_mermaid_dist_chunks_mermaid_core_requirementDiagram-4Y6WPE33_mjs_07c4~j8._.js → 1daa_mermaid_dist_chunks_mermaid_core_requirementDiagram-4Y6WPE33_mjs_0cvy8c2._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{0t6k_mermaid_dist_chunks_mermaid_core_timeline-definition-PNZ67QCA_mjs_0i6u~cs._.js → 1daa_mermaid_dist_chunks_mermaid_core_timeline-definition-PNZ67QCA_mjs_0vzw4gu._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{0_lp_modules_mermaid_dist_chunks_mermaid_core_gitGraphDiagram-PVQCEYII_mjs_0xc8cuq._.js → 1q96_modules_mermaid_dist_chunks_mermaid_core_gitGraphDiagram-PVQCEYII_mjs_1kl1645._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{0_lp_modules_mermaid_dist_chunks_mermaid_core_ishikawaDiagram-YF4QCWOH_mjs_12xi8w0._.js → 1q96_modules_mermaid_dist_chunks_mermaid_core_ishikawaDiagram-YF4QCWOH_mjs_1-btteu._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{0_lp_modules_mermaid_dist_chunks_mermaid_core_journeyDiagram-JHISSGLW_mjs_0d.k2tv._.js → 1q96_modules_mermaid_dist_chunks_mermaid_core_journeyDiagram-JHISSGLW_mjs_0omhwqk._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{0_lp_modules_mermaid_dist_chunks_mermaid_core_kanban-definition-UN3LZRKU_mjs_02zfksy._.js → 1q96_modules_mermaid_dist_chunks_mermaid_core_kanban-definition-UN3LZRKU_mjs_052rc5y._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{0_lp_modules_mermaid_dist_chunks_mermaid_core_quadrantDiagram-W4KKPZXB_mjs_0c30c1e._.js → 1q96_modules_mermaid_dist_chunks_mermaid_core_quadrantDiagram-W4KKPZXB_mjs_0l8r0bx._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{0_lp_modules_mermaid_dist_chunks_mermaid_core_sequenceDiagram-3UESZ5HK_mjs_07fd9jw._.js → 1q96_modules_mermaid_dist_chunks_mermaid_core_sequenceDiagram-3UESZ5HK_mjs_0c-9sj0._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{0_lp_modules_mermaid_dist_chunks_mermaid_core_wardleyDiagram-YWT4CUSO_mjs_0a2sjhb._.js → 1q96_modules_mermaid_dist_chunks_mermaid_core_wardleyDiagram-YWT4CUSO_mjs_0hqmyh5._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{0_lp_modules_mermaid_dist_chunks_mermaid_core_xychartDiagram-2RQKCTM6_mjs_0xpvx~c._.js → 1q96_modules_mermaid_dist_chunks_mermaid_core_xychartDiagram-2RQKCTM6_mjs_1l5rlhy._.js} +1 -1
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0471z20._.js +3 -0
- package/dist/.next/server/chunks/ssr/{[root-of-the-server]__031lpnq._.js → [root-of-the-server]__05c-vrc._.js} +7 -7
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__09pnxvp._.js +33 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0c75weq._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0imtqxe._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0nzxyl0._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0o0ct70._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0owaq8w._.js +12 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0xpcv9w._.js +14 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__1f4zvj-._.js +3 -0
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__1io3bae._.js +33 -0
- package/dist/.next/server/chunks/ssr/[turbopack]_runtime.js +97 -193
- package/dist/.next/server/chunks/ssr/_05yvop-._.js +4 -0
- package/dist/.next/server/chunks/ssr/{_next-internal_server_app__global-error_page_actions_0k77kol.js → _next-internal_server_app__global-error_page_actions_0zi5s8-.js} +1 -1
- package/dist/.next/server/chunks/ssr/{_next-internal_server_app__not-found_page_actions_0eq97pa.js → _next-internal_server_app__not-found_page_actions_0pt47yr.js} +1 -1
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_page_actions_0hhsz1j.js +3 -0
- package/dist/.next/server/chunks/ssr/{node_modules_0v29g77._.js → node_modules_0-n78w2._.js} +3 -3
- package/dist/.next/server/chunks/ssr/node_modules_00cex-8._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_0456qqx._.js +17 -0
- package/dist/.next/server/chunks/ssr/{node_modules_0po23em._.js → node_modules_07zdzg3._.js} +3 -3
- package/dist/.next/server/chunks/ssr/node_modules_082g_84._.js +31 -0
- package/dist/.next/server/chunks/ssr/node_modules_0_w_s0o._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_0chqc93._.js +11 -0
- package/dist/.next/server/chunks/ssr/{node_modules_09w7yel._.js → node_modules_0h91jdk._.js} +2 -2
- package/dist/.next/server/chunks/ssr/{node_modules_0x8-epl._.js → node_modules_0i3cah4._.js} +3 -3
- package/dist/.next/server/chunks/ssr/node_modules_0jx8vby._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_0kh3gaq._.js +45 -0
- package/dist/.next/server/chunks/ssr/node_modules_0oiuulr._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_0sud39z._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_0ty2qhi._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_0u1te_7._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_0uvms5m._.js +3 -0
- package/dist/.next/server/chunks/ssr/{node_modules_0hsalo_._.js → node_modules_0v4zc0t._.js} +2 -2
- package/dist/.next/server/chunks/ssr/{node_modules_0j48jbs._.js → node_modules_0xme7lg._.js} +2 -2
- package/dist/.next/server/chunks/ssr/node_modules_0z2foqi._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_0z4gniu._.js +17 -0
- package/dist/.next/server/chunks/ssr/{node_modules_0makin.._.js → node_modules_1-wfv6i._.js} +1 -1
- package/dist/.next/server/chunks/ssr/node_modules_111pp7w._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_15pczok._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_16l6ua_._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_16q2m8u._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_17rj81n._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_1831lye._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_19b6jde._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_1_jf-yx._.js +17 -0
- package/dist/.next/server/chunks/ssr/node_modules_1_v-pb8._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_1bmqmso._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_1jpcwgl._.js +151 -0
- package/dist/.next/server/chunks/ssr/node_modules_1lio4hi._.js +3 -0
- package/dist/.next/server/chunks/ssr/{node_modules_0~gyl9u._.js → node_modules_1nck62h._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_0z~-p3m._.js → node_modules_1p9b60w._.js} +2 -2
- package/dist/.next/server/chunks/ssr/node_modules_1tj6b0h._.js +3 -0
- package/dist/.next/server/chunks/ssr/{node_modules_0xheqa8._.js → node_modules_1z_uie6._.js} +2 -2
- package/dist/.next/server/chunks/ssr/node_modules_1zskgct._.js +26 -0
- package/dist/.next/server/chunks/ssr/{node_modules_13oabuj._.js → node_modules_20p8pl7._.js} +2 -2
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_01lis5y._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_07fm7s3._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0kitx9n._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0x5ivvr._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_145f4t2._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_1_o7dux._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_1alyi8-._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_1bxlr8e._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_1grmhd9._.js +3 -0
- package/dist/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_00~7fbh._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_01pthdh._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_01-g753._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_03fanqm._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_02.ao_s._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0597f-k._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0l0_~d-._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0__ix0y._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0c.1f2e._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0muxjzn._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0pjzhbh._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_16vf13h._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0uq.qxy._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_1fzbfn5._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0_yd3ib._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_1quf15b._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0.ksprp._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_1vi37xl._.js} +1 -1
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_20vrei_._.js +3 -0
- package/dist/.next/server/chunks/ssr/{node_modules_cytoscape_dist_cytoscape_esm_mjs_0642y5z._.js → node_modules_cytoscape_dist_cytoscape_esm_mjs_0arohj6._.js} +2 -2
- package/dist/.next/server/chunks/ssr/node_modules_dagre-d3-es_src_dagre_index_0g66msq.js +3 -0
- package/dist/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_0oc7z2j._.js → node_modules_katex_dist_katex_mjs_04eh6b6._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_0zuygmo._.js → node_modules_katex_dist_katex_mjs_1oxucd3._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_blockDiagram-GPEHLZMM_mjs_0bclh9~._.js → node_modules_mermaid_dist_chunks_mermaid_core_blockDiagram-GPEHLZMM_mjs_0jxv2ay._.js} +2 -2
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_c4Diagram-AAUBKEIU_mjs_11i~hhk._.js → node_modules_mermaid_dist_chunks_mermaid_core_c4Diagram-AAUBKEIU_mjs_1yyt6ej._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_chunk-3OPIFGDE_mjs_0p4md.t._.js → node_modules_mermaid_dist_chunks_mermaid_core_chunk-3OPIFGDE_mjs_165ua5_._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_chunk-5ZQYHXKU_mjs_0p7as5d._.js → node_modules_mermaid_dist_chunks_mermaid_core_chunk-5ZQYHXKU_mjs_16ac76u._.js} +2 -2
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_chunk-727SXJPM_mjs_05x94.y._.js → node_modules_mermaid_dist_chunks_mermaid_core_chunk-727SXJPM_mjs_0a9kagr._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_chunk-AQP2D5EJ_mjs_0_foecb._.js → node_modules_mermaid_dist_chunks_mermaid_core_chunk-AQP2D5EJ_mjs_1p-51mn._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_chunk-CSCIHK7Q_mjs_0g3lwf.._.js → node_modules_mermaid_dist_chunks_mermaid_core_chunk-CSCIHK7Q_mjs_0savw5-._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_chunk-KSCS5N6A_mjs_0.lzb4g._.js → node_modules_mermaid_dist_chunks_mermaid_core_chunk-KSCS5N6A_mjs_1vk17qr._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_chunk-O5CBEL6O_mjs_041viuq._.js → node_modules_mermaid_dist_chunks_mermaid_core_chunk-O5CBEL6O_mjs_074844c._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_chunk-XPW4576I_mjs_0h8ib.t._.js → node_modules_mermaid_dist_chunks_mermaid_core_chunk-XPW4576I_mjs_0u9wa-b._.js} +2 -2
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_dagre-BM42HDAG_mjs_0itw5kh._.js → node_modules_mermaid_dist_chunks_mermaid_core_dagre-BM42HDAG_mjs_0w_brpy._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_diagram-OG6HWLK6_mjs_0et-fze._.js → node_modules_mermaid_dist_chunks_mermaid_core_diagram-OG6HWLK6_mjs_0pzbdul._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_erDiagram-TEJ5UH35_mjs_12bfcsi._.js → node_modules_mermaid_dist_chunks_mermaid_core_erDiagram-TEJ5UH35_mjs_1_cyy1q._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_flowDiagram-I6XJVG4X_mjs_0136c8y._.js → node_modules_mermaid_dist_chunks_mermaid_core_flowDiagram-I6XJVG4X_mjs_01y3363._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_sankeyDiagram-5OEKKPKP_mjs_0z55106._.js → node_modules_mermaid_dist_chunks_mermaid_core_sankeyDiagram-5OEKKPKP_mjs_1nsv0tt._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_stateDiagram-AJRCARHV_mjs_0azazz~._.js → node_modules_mermaid_dist_chunks_mermaid_core_stateDiagram-AJRCARHV_mjs_0j4-fk2._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_vennDiagram-CIIHVFJN_mjs_0wzofym._.js → node_modules_mermaid_dist_chunks_mermaid_core_vennDiagram-CIIHVFJN_mjs_1jvbrvq._.js} +1 -1
- package/dist/.next/server/chunks/ssr/{node_modules_mermaid_dist_mermaid_core_mjs_0rr2bb.._.js → node_modules_mermaid_dist_mermaid_core_mjs_1ao-jv5._.js} +1 -1
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_1n3w9lb._.js +6 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_1vz8kh1._.js +3 -0
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js +3 -0
- package/dist/.next/server/chunks/ssr/{node_modules_next_dist_client_components_builtin_forbidden_0ghu-f7.js → node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js} +2 -2
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0q-w892.js +3 -0
- package/dist/.next/server/chunks/ssr/{node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js → node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js} +2 -2
- package/dist/.next/server/chunks/ssr/{node_modules_roughjs_bundled_rough_esm_0opq-c5.js → node_modules_roughjs_bundled_rough_esm_15c9pcx.js} +1 -1
- package/dist/.next/server/middleware-build-manifest.js +13 -10
- package/dist/.next/server/next-font-manifest.js +1 -1
- package/dist/.next/server/next-font-manifest.json +2 -2
- package/dist/.next/server/pages/404.html +1 -1
- package/dist/.next/server/pages/500.html +1 -1
- package/dist/.next/server/prefetch-hints.json +34 -1
- package/dist/.next/server/server-reference-manifest.js +1 -1
- package/dist/.next/server/server-reference-manifest.json +1 -1
- package/dist/.next/static/chunks/{0wbhqz.-ey98b.js → 01nhrh-3r57wh.js} +1 -1
- package/dist/.next/static/chunks/02g89o135esk3.js +22 -0
- package/dist/.next/static/chunks/03regxjjibliy.js +29 -0
- package/dist/.next/static/chunks/{0n46g0ilh8wj..js → 05cl5ojgc4_ku.js} +6 -6
- package/dist/.next/static/chunks/0c4y7_xzemq6-.js +1 -0
- package/dist/.next/static/chunks/{0p9rfgg_duajn.js → 0dm2etancr7wp.js} +1 -1
- package/dist/.next/static/chunks/{0hq~c-~dp2g~1.js → 0l2v1ybx0rm07.js} +1 -1
- package/dist/.next/static/chunks/{104yvyc1ce3q5.js → 0o19535rrdg5j.js} +1 -1
- package/dist/.next/static/chunks/0piaur2yhvb4v.js +1 -0
- package/dist/.next/static/chunks/{0rhvismtjivza.js → 0s3geiy0as3cz.js} +5 -5
- package/dist/.next/static/chunks/12b5tf_04ca4i.js +10 -0
- package/dist/.next/static/chunks/{0qm2930z0c.8m.js → 15746zaz9af2k.js} +16 -16
- package/dist/.next/static/chunks/15m2ikcj71414.js +1 -0
- package/dist/.next/static/chunks/{07znaqalfuldz.js → 17y1ca1c2d1k0.js} +1 -1
- package/dist/.next/static/chunks/{187v8dzyf1l-f.js → 18dnd1yq8sjcm.js} +1 -1
- package/dist/.next/static/chunks/1h978hs06gqwr.js +1 -0
- package/dist/.next/static/chunks/1s8wltynx2kei.js +24 -0
- package/dist/.next/static/chunks/1vqrf8u3eyf8l.js +1 -0
- package/dist/.next/static/chunks/{11h85j-8~tny3.js → 1wsp3h55ims3-.js} +1 -1
- package/dist/.next/static/chunks/1x1nff_ltcu7m.js +1 -0
- package/dist/.next/static/chunks/1ztlt8o8gnas8.js +1 -0
- package/dist/.next/static/chunks/{0mo3-obfy2_6v.js → 2-tnv5f86ywqz.js} +2 -2
- package/dist/.next/static/chunks/20uqpnur2j1hn.js +1 -0
- package/dist/.next/static/chunks/{175hd_pl41_vh.js → 26t_0sbrej8uf.js} +2 -2
- package/dist/.next/static/chunks/28flaeabfo316.js +31 -0
- package/dist/.next/static/chunks/2ba37l0xctlco.js +1 -0
- package/dist/.next/static/chunks/2ia3pig2diart.js +43 -0
- package/dist/.next/static/chunks/{0ez8v7k1e7v4o.js → 2qe97b2xjvm_s.js} +1 -1
- package/dist/.next/static/chunks/2rob7uh46oj_f.js +10 -0
- package/dist/.next/static/chunks/2v_t22-0u_seu.js +1 -0
- package/dist/.next/static/chunks/2zf625u-tcwdn.js +1 -0
- package/dist/.next/static/chunks/{0cs_h74-ljzlt.js → 3-q38f64d_smq.js} +3 -3
- package/dist/.next/static/chunks/31ttnjt6g35a0.js +1 -0
- package/dist/.next/static/chunks/33t46atd3n2zd.js +1 -0
- package/dist/.next/static/chunks/{0dsde0n1co0l..js → 357a_3k2qrz6b.js} +1 -1
- package/dist/.next/static/chunks/383s4_f7pq0oz.js +1 -0
- package/dist/.next/static/chunks/3cnkwh7z04e3e.js +24 -0
- package/dist/.next/static/chunks/{0e~yxiezknbzn.css → 3cyn-rs5rpay6.css} +2 -2
- package/dist/.next/static/chunks/3s7at3o7ube_p.js +9 -0
- package/dist/.next/static/chunks/{16m14x8k2fnon.js → 3wb9uvu5ii1sy.js} +1 -1
- package/dist/.next/static/chunks/41ii5ld31fjk5.js +148 -0
- package/dist/.next/static/chunks/turbopack-3cm-eevva8ksw.js +1 -0
- package/dist/node_modules/@img/sharp-darwin-arm64/index.cjs +2 -0
- package/dist/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64-0.35.3.node +0 -0
- package/dist/node_modules/@img/sharp-darwin-arm64/package.json +5 -4
- package/dist/node_modules/@img/sharp-libvips-darwin-arm64/README.md +15 -15
- package/dist/node_modules/@img/sharp-libvips-darwin-arm64/lib/glib-2.0/include/glibconfig.h +1 -3
- package/dist/node_modules/@img/sharp-libvips-darwin-arm64/lib/{libvips-cpp.8.17.3.dylib → libvips-cpp.8.18.3.dylib} +0 -0
- package/dist/node_modules/@img/sharp-libvips-darwin-arm64/package.json +3 -2
- package/dist/node_modules/@img/sharp-libvips-darwin-arm64/versions.json +21 -21
- package/dist/node_modules/@next/env/dist/index.js +1 -1
- package/dist/node_modules/@next/env/package.json +8 -8
- package/dist/node_modules/@swc/helpers/esm/_interop_require_default.js +4 -0
- package/dist/node_modules/@swc/helpers/esm/_interop_require_wildcard.js +36 -0
- package/dist/node_modules/@swc/helpers/package.json +703 -469
- package/dist/node_modules/next/dist/build/define-env.js +10 -2
- package/dist/node_modules/next/dist/build/duration-to-string.js +2 -3
- package/dist/node_modules/next/dist/build/next-config-ts/transpile-config.js +3 -114
- package/dist/node_modules/next/dist/build/segment-config/app/app-segment-config.js +35 -19
- package/dist/node_modules/next/dist/build/segment-config/app/app-segments.js +11 -1
- package/dist/node_modules/next/dist/build/static-paths/app.js +66 -19
- package/dist/node_modules/next/dist/build/swc/index.js +84 -23
- package/dist/node_modules/next/dist/build/swc/jest-transformer.js +1 -0
- package/dist/node_modules/next/dist/build/swc/options.js +13 -5
- package/dist/node_modules/next/dist/build/utils.js +112 -70
- package/dist/node_modules/next/dist/cli/next-test.js +2 -1
- package/dist/node_modules/next/dist/client/components/app-router-headers.js +0 -10
- package/dist/node_modules/next/dist/client/components/app-router-instance.js +50 -40
- package/dist/node_modules/next/dist/client/components/app-router.js +9 -1
- package/dist/node_modules/next/dist/client/components/error-boundary.js +13 -9
- package/dist/node_modules/next/dist/client/components/handle-isr-error.js +3 -3
- package/dist/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js +2 -2
- package/dist/node_modules/next/dist/{server/app-render/instant-validation/instant-samples-client.js → client/components/instant-samples.js} +13 -7
- package/dist/node_modules/next/dist/client/components/links.js +25 -8
- package/dist/node_modules/next/dist/client/components/nav-failure-handler.js +1 -1
- package/dist/node_modules/next/dist/client/components/navigation-dynamic-rendering.js +38 -0
- package/dist/node_modules/next/dist/client/components/navigation-untracked.js +5 -3
- package/dist/node_modules/next/dist/client/components/navigation.js +30 -9
- package/dist/node_modules/next/dist/client/components/offline.js +172 -0
- package/dist/node_modules/next/dist/client/components/readonly-url-search-params.js +5 -0
- package/dist/node_modules/next/dist/client/components/redirect.js +2 -2
- package/dist/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js +5 -1
- package/dist/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js +25 -17
- package/dist/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js +196 -50
- package/dist/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js +30 -19
- package/dist/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js +235 -102
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js +8 -2
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js +12 -5
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js +15 -2
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js +38 -9
- package/dist/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js +11 -2
- package/dist/node_modules/next/dist/client/components/router-reducer/router-reducer.js +10 -2
- package/dist/node_modules/next/dist/client/components/router-transition.js +135 -0
- package/dist/node_modules/next/dist/client/components/segment-cache/bfcache.js +9 -7
- package/dist/node_modules/next/dist/client/components/segment-cache/cache-key.js +31 -3
- package/dist/node_modules/next/dist/client/components/segment-cache/cache-map.js +33 -12
- package/dist/node_modules/next/dist/client/components/segment-cache/cache.js +1089 -338
- package/dist/node_modules/next/dist/client/components/segment-cache/fetch.js +37 -0
- package/dist/node_modules/next/dist/client/components/segment-cache/navigation-testing-lock.js +324 -103
- package/dist/node_modules/next/dist/client/components/segment-cache/navigation.js +218 -42
- package/dist/node_modules/next/dist/client/components/segment-cache/optimistic-routes.js +222 -117
- package/dist/node_modules/next/dist/client/components/segment-cache/prefetch.js +2 -1
- package/dist/node_modules/next/dist/client/components/segment-cache/scheduler.js +756 -235
- package/dist/node_modules/next/dist/client/components/segment-cache/types.js +19 -4
- package/dist/node_modules/next/dist/client/components/segment-cache/vary-path.js +50 -2
- package/dist/node_modules/next/dist/client/components/server-async-storage.js +43 -0
- package/dist/node_modules/next/dist/client/components/unstable-rethrow.js +15 -8
- package/dist/node_modules/next/dist/client/components/use-offline.js +68 -0
- package/dist/node_modules/next/dist/client/dev/debug-channel.js +367 -11
- package/dist/node_modules/next/dist/client/flight-data-helpers.js +4 -1
- package/dist/node_modules/next/dist/client/normalize-trailing-slash.js +2 -1
- package/dist/node_modules/next/dist/client/route-params.js +12 -10
- package/dist/node_modules/next/dist/compiled/@hapi/accept/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/@napi-rs/triples/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/@opentelemetry/api/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/@vercel/detect-agent/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/@vercel/detect-agent/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/async-retry/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/async-sema/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/busboy/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/bytes/index.js +2 -2
- package/dist/node_modules/next/dist/compiled/ci-info/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/commander/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/comment-json/index.js +2 -2
- package/dist/node_modules/next/dist/compiled/compression/index.js +10 -10
- package/dist/node_modules/next/dist/compiled/conf/index.js +2 -14
- package/dist/node_modules/next/dist/compiled/content-disposition/index.js +2 -2
- package/dist/node_modules/next/dist/compiled/cross-spawn/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/debug/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/edge-runtime/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/find-up/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/fresh/index.js +2 -2
- package/dist/node_modules/next/dist/compiled/httpxy/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/httpxy/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/image-detector/detector.js +1 -1
- package/dist/node_modules/next/dist/compiled/image-size/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/ipaddr.js/ipaddr.js +1 -1
- package/dist/node_modules/next/dist/compiled/is-animated/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/is-docker/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/is-wsl/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/jsonwebtoken/index.js +3 -3
- package/dist/node_modules/next/dist/compiled/nanoid/index.cjs +1 -1
- package/dist/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +144 -15
- package/dist/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +144 -15
- package/dist/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +3 -3
- package/dist/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +12 -12
- package/dist/node_modules/next/dist/compiled/p-limit/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/p-queue/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/path-browserify/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/picomatch/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/react-is/package.json +3 -3
- package/dist/node_modules/next/dist/compiled/semver/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/send/index.js +13 -13
- package/dist/node_modules/next/dist/compiled/source-map/source-map.js +1 -1
- package/dist/node_modules/next/dist/compiled/string-hash/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/strip-ansi/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/superstruct/index.cjs +1 -1
- package/dist/node_modules/next/dist/compiled/tar/index.min.js +1 -1
- package/dist/node_modules/next/dist/compiled/text-table/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/watchpack/watchpack.js +1 -1
- package/dist/node_modules/next/dist/compiled/write-file-atomic/index.js +1 -0
- package/dist/node_modules/next/dist/compiled/write-file-atomic/package.json +1 -0
- package/dist/node_modules/next/dist/compiled/ws/index.js +1 -1
- package/dist/node_modules/next/dist/compiled/zod/index.cjs +1 -1
- package/dist/node_modules/next/dist/compiled/zod-validation-error/index.js +1 -1
- package/dist/node_modules/next/dist/experimental/testmode/fetch.js +8 -0
- package/dist/node_modules/next/dist/experimental/testmode/httpget.js +9 -2
- package/dist/node_modules/next/dist/experimental/testmode/server.js +11 -0
- package/dist/node_modules/next/dist/lib/bundler.js +72 -1
- package/dist/node_modules/next/dist/lib/create-client-router-filter.js +16 -0
- package/dist/node_modules/next/dist/lib/find-root.js +187 -33
- package/dist/node_modules/next/dist/lib/format-dynamic-import-path.js +23 -4
- package/dist/node_modules/next/dist/lib/git-worktree.js +74 -0
- package/dist/node_modules/next/dist/lib/helpers/get-pkg-manager.js +10 -8
- package/dist/node_modules/next/dist/lib/helpers/git.js +59 -0
- package/dist/node_modules/next/dist/lib/install-dependencies.js +1 -1
- package/dist/node_modules/next/dist/lib/is-serializable-props.js +5 -0
- package/dist/node_modules/next/dist/lib/metadata/get-metadata-route.js +54 -15
- package/dist/node_modules/next/dist/lib/metadata/metadata.js +20 -46
- package/dist/node_modules/next/dist/lib/metadata/resolve-metadata.js +14 -14
- package/dist/node_modules/next/dist/lib/needs-experimental-react.js +2 -2
- package/dist/node_modules/next/dist/lib/patch-incorrect-lockfile.js +5 -5
- package/dist/node_modules/next/dist/lib/profiles-dir.js +45 -0
- package/dist/node_modules/next/dist/lib/require-instrumentation-client.js +10 -4
- package/dist/node_modules/next/dist/lib/resolve-build-paths.js +38 -10
- package/dist/node_modules/next/dist/lib/turbopack-cache-seed.js +171 -0
- package/dist/node_modules/next/dist/lib/typescript/getTypeScriptConfiguration.js +4 -84
- package/dist/node_modules/next/dist/lib/typescript/loadTsConfig.js +181 -0
- package/dist/node_modules/next/dist/lib/typescript/missingDependencyError.js +2 -3
- package/dist/node_modules/next/dist/lib/typescript/runTypeCheckCli.js +53 -0
- package/dist/node_modules/next/dist/lib/typescript/runTypeScriptCli.js +256 -0
- package/dist/node_modules/next/dist/lib/typescript/writeAppTypeDeclarations.js +2 -0
- package/dist/node_modules/next/dist/lib/verify-partytown-setup.js +15 -26
- package/dist/node_modules/next/dist/lib/verify-typescript-setup.js +97 -56
- package/dist/node_modules/next/dist/server/after/after-context.js +55 -17
- package/dist/node_modules/next/dist/server/after/after.js +4 -2
- package/dist/node_modules/next/dist/server/api-utils/index.js +20 -4
- package/dist/node_modules/next/dist/server/api-utils/node/try-get-preview-data.js +5 -2
- package/dist/node_modules/next/dist/server/app-render/action-handler.js +162 -54
- package/dist/node_modules/next/dist/server/app-render/app-render-prerender-utils.js +176 -11
- package/dist/node_modules/next/dist/server/app-render/app-render.js +3249 -1275
- package/dist/node_modules/next/dist/server/app-render/blocking-route-messages.js +181 -0
- package/dist/node_modules/next/dist/server/app-render/collect-segment-data.js +531 -210
- package/dist/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js +9 -4
- package/dist/node_modules/next/dist/server/app-render/create-component-tree.js +13 -77
- package/dist/node_modules/next/dist/server/app-render/create-error-handler.js +19 -18
- package/dist/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js +78 -26
- package/dist/node_modules/next/dist/server/app-render/debug-channel-server.js +26 -9
- package/dist/node_modules/next/dist/server/app-render/debug-channel-server.node.js +60 -0
- package/dist/node_modules/next/dist/server/app-render/debug-channel-server.web.js +8 -19
- package/dist/node_modules/next/dist/server/app-render/dev-validation-error-delivery.js +37 -0
- package/dist/node_modules/next/dist/server/app-render/dev-validation-events.js +26 -0
- package/dist/node_modules/next/dist/server/app-render/dev-validation-scheduler.js +87 -0
- package/dist/node_modules/next/dist/server/app-render/dev-validation-worker-globals.js +41 -0
- package/dist/node_modules/next/dist/server/app-render/dev-validation-worker-snapshot.js +79 -0
- package/dist/node_modules/next/dist/server/app-render/dynamic-rendering.js +261 -204
- package/dist/node_modules/next/dist/server/app-render/encryption.js +11 -9
- package/dist/node_modules/next/dist/server/app-render/entry-base.js +25 -16
- package/dist/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js +2 -6
- package/dist/node_modules/next/dist/server/app-render/get-layer-assets.js +11 -7
- package/dist/node_modules/next/dist/server/app-render/instant-test-bootstrap.js +20 -0
- package/dist/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js +21 -3
- package/dist/node_modules/next/dist/server/app-render/instant-validation/boundary-impl.js +25 -1
- package/dist/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js +24 -4
- package/dist/node_modules/next/dist/server/app-render/instant-validation/instant-config.js +119 -59
- package/dist/node_modules/next/dist/server/app-render/instant-validation/instant-samples.js +10 -10
- package/dist/node_modules/next/dist/server/app-render/instant-validation/instant-validation.js +394 -173
- package/dist/node_modules/next/dist/server/app-render/make-get-server-inserted-html.js +3 -4
- package/dist/node_modules/next/dist/server/app-render/manifests-singleton.js +78 -15
- package/dist/node_modules/next/dist/server/app-render/module-loading/instrument-module-getter.js +32 -0
- package/dist/node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js +2 -6
- package/dist/node_modules/next/dist/server/app-render/postponed-state.js +78 -5
- package/dist/node_modules/next/dist/server/app-render/render-css-resource.js +20 -15
- package/dist/node_modules/next/dist/server/app-render/staged-rendering.js +182 -201
- package/dist/node_modules/next/dist/server/app-render/stale-time.js +0 -10
- package/dist/node_modules/next/dist/server/app-render/stream-ops.js +85 -36
- package/dist/node_modules/next/dist/server/app-render/stream-ops.node.js +842 -0
- package/dist/node_modules/next/dist/server/app-render/stream-ops.web.js +116 -30
- package/dist/node_modules/next/dist/server/app-render/sync-io-messages.js +67 -0
- package/dist/node_modules/next/dist/server/app-render/use-flight-response.js +11 -8
- package/dist/node_modules/next/dist/server/app-render/vary-params.js +113 -188
- package/dist/node_modules/next/dist/server/app-render/wait-for-response.js +36 -0
- package/dist/node_modules/next/dist/server/app-render/walk-tree-with-flight-router-state.js +11 -6
- package/dist/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js +33 -63
- package/dist/node_modules/next/dist/server/async-storage/draft-mode-provider.js +2 -2
- package/dist/node_modules/next/dist/server/async-storage/request-store.js +84 -27
- package/dist/node_modules/next/dist/server/async-storage/work-store.js +7 -1
- package/dist/node_modules/next/dist/server/base-server.js +147 -72
- package/dist/node_modules/next/dist/server/body-streams.js +9 -1
- package/dist/node_modules/next/dist/server/client-component-renderer-logger.js +2 -2
- package/dist/node_modules/next/dist/server/config-schema.js +84 -10
- package/dist/node_modules/next/dist/server/config-shared.js +46 -20
- package/dist/node_modules/next/dist/server/config.js +343 -52
- package/dist/node_modules/next/dist/server/dev/browser-logs/file-logger.js +4 -4
- package/dist/node_modules/next/dist/server/dev/browser-logs/receive-logs.js +152 -100
- package/dist/node_modules/next/dist/server/dev/debug-channel.js +48 -23
- package/dist/node_modules/next/dist/server/dev/dev-validation-worker-pool.js +232 -0
- package/dist/node_modules/next/dist/server/dev/dev-validation-worker.js +308 -0
- package/dist/node_modules/next/dist/server/dev/hot-middleware.js +3 -1
- package/dist/node_modules/next/dist/server/dev/hot-reloader-rspack.js +1 -1
- package/dist/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +420 -144
- package/dist/node_modules/next/dist/server/dev/hot-reloader-types.js +2 -0
- package/dist/node_modules/next/dist/server/dev/hot-reloader-webpack.js +17 -23
- package/dist/node_modules/next/dist/server/dev/log-requests.js +3 -0
- package/dist/node_modules/next/dist/server/dev/middleware-turbopack.js +26 -7
- package/dist/node_modules/next/dist/server/dev/middleware-webpack.js +20 -8
- package/dist/node_modules/next/dist/server/dev/node-stack-frames.js +9 -0
- package/dist/node_modules/next/dist/server/dev/require-cache.js +33 -3
- package/dist/node_modules/next/dist/server/dev/serialized-errors.js +1 -1
- package/dist/node_modules/next/dist/server/dev/static-paths-worker.js +4 -3
- package/dist/node_modules/next/dist/server/dev/turbopack-utils.js +52 -12
- package/dist/node_modules/next/dist/server/dev/use-cache-probe-pool.js +177 -0
- package/dist/node_modules/next/dist/server/dev/use-cache-probe-worker.js +180 -0
- package/dist/node_modules/next/dist/server/dynamic-rendering-utils.js +200 -23
- package/dist/node_modules/next/dist/server/get-page-files.js +20 -3
- package/dist/node_modules/next/dist/server/image-optimizer.js +47 -39
- package/dist/node_modules/next/dist/server/lib/app-info-log.js +19 -16
- package/dist/node_modules/next/dist/server/lib/cache-handlers/default.js +41 -5
- package/dist/node_modules/next/dist/server/lib/cpu-profile.js +2 -5
- package/dist/node_modules/next/dist/server/lib/dev-bundler-service.js +17 -2
- package/dist/node_modules/next/dist/server/lib/encode-header-safe.js +44 -0
- package/dist/node_modules/next/dist/server/lib/generate-agent-files.js +180 -0
- package/dist/node_modules/next/dist/server/lib/implicit-tags.js +16 -6
- package/dist/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +17 -4
- package/dist/node_modules/next/dist/server/lib/incremental-cache/index.js +120 -74
- package/dist/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js +13 -11
- package/dist/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js +1 -1
- package/dist/node_modules/next/dist/server/lib/is-non-html-sec-fetch-dest.js +38 -0
- package/dist/node_modules/next/dist/server/lib/lazy-module.js +80 -0
- package/dist/node_modules/next/dist/server/lib/lru-cache.js +1 -1
- package/dist/node_modules/next/dist/server/lib/mock-request.js +1 -1
- package/dist/node_modules/next/dist/server/lib/params-utils.js +70 -0
- package/dist/node_modules/next/dist/server/lib/patch-fetch.js +66 -17
- package/dist/node_modules/next/dist/server/lib/release-compression-stream.js +24 -0
- package/dist/node_modules/next/dist/server/lib/render-server.js +3 -1
- package/dist/node_modules/next/dist/server/lib/router-server.js +70 -13
- package/dist/node_modules/next/dist/server/lib/router-utils/block-cross-site-dev.js +2 -2
- package/dist/node_modules/next/dist/server/lib/router-utils/cache-life-type-utils.js +1 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/filesystem.js +31 -10
- package/dist/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js +54 -36
- package/dist/node_modules/next/dist/server/lib/router-utils/proxy-request.js +19 -9
- package/dist/node_modules/next/dist/server/lib/router-utils/resolve-routes.js +5 -2
- package/dist/node_modules/next/dist/server/lib/router-utils/root-params-type-utils.js +61 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/route-types-utils.js +40 -0
- package/dist/node_modules/next/dist/server/lib/router-utils/typegen.js +55 -21
- package/dist/node_modules/next/dist/server/lib/source-maps.js +54 -9
- package/dist/node_modules/next/dist/server/lib/start-server.js +69 -23
- package/dist/node_modules/next/dist/server/lib/streaming-metadata.js +11 -22
- package/dist/node_modules/next/dist/server/lib/trace/constants.js +5 -0
- package/dist/node_modules/next/dist/server/lib/trace/local-span-recorder.js +385 -0
- package/dist/node_modules/next/dist/server/lib/trace/request-insights-identity.js +39 -0
- package/dist/node_modules/next/dist/server/lib/trace/request-insights.js +308 -0
- package/dist/node_modules/next/dist/server/lib/trace/span-store.js +69 -0
- package/dist/node_modules/next/dist/server/lib/trace/tracer.js +123 -11
- package/dist/node_modules/next/dist/server/lib/utils.js +14 -0
- package/dist/node_modules/next/dist/server/load-components.js +8 -2
- package/dist/node_modules/next/dist/server/mcp/get-or-create-mcp-server.js +10 -0
- package/dist/node_modules/next/dist/server/mcp/tools/compile-route.js +86 -0
- package/dist/node_modules/next/dist/server/mcp/tools/get-compilation-issues.js +68 -0
- package/dist/node_modules/next/dist/server/mcp/tools/get-request-insights.js +57 -0
- package/dist/node_modules/next/dist/server/mcp/tools/utils/format-compilation-issues.js +72 -0
- package/dist/node_modules/next/dist/server/mcp/tools/utils/resolve-path-to-route.js +49 -0
- package/dist/node_modules/next/dist/server/next-server.js +30 -16
- package/dist/node_modules/next/dist/server/next.js +42 -12
- package/dist/node_modules/next/dist/server/node-environment-extensions/io-utils.js +31 -124
- package/dist/node_modules/next/dist/server/node-environment-extensions/process-error-handlers.js +156 -77
- package/dist/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js +12 -2
- package/dist/node_modules/next/dist/server/og/cache-image-response.js +341 -0
- package/dist/node_modules/next/dist/server/og/image-response.js +22 -3
- package/dist/node_modules/next/dist/server/patch-error-inspect.js +70 -16
- package/dist/node_modules/next/dist/server/pipe-readable.js +73 -1
- package/dist/node_modules/next/dist/server/render-result.js +42 -0
- package/dist/node_modules/next/dist/server/render.js +3 -1
- package/dist/node_modules/next/dist/server/request/connection.js +6 -4
- package/dist/node_modules/next/dist/server/request/cookies.js +18 -14
- package/dist/node_modules/next/dist/server/request/draft-mode.js +11 -3
- package/dist/node_modules/next/dist/server/request/fallback-params.js +1 -1
- package/dist/node_modules/next/dist/server/request/headers.js +16 -10
- package/dist/node_modules/next/dist/server/request/io.js +96 -0
- package/dist/node_modules/next/dist/server/request/params.js +191 -84
- package/dist/node_modules/next/dist/server/request/pathname.js +24 -2
- package/dist/node_modules/next/dist/server/request/root-params.js +9 -1
- package/dist/node_modules/next/dist/server/request/search-params.js +126 -70
- package/dist/node_modules/next/dist/server/request/utils.js +39 -6
- package/dist/node_modules/next/dist/server/response-cache/index.js +36 -24
- package/dist/node_modules/next/dist/server/resume-data-cache/cache-store.js +7 -2
- package/dist/node_modules/next/dist/server/resume-data-cache/resume-data-cache.js +25 -7
- package/dist/node_modules/next/dist/server/revalidation-utils.js +1 -2
- package/dist/node_modules/next/dist/server/route-modules/app-page/module.js +15 -1
- package/dist/node_modules/next/dist/server/route-modules/app-page/normalize-request-url.js +40 -3
- package/dist/node_modules/next/dist/server/route-modules/app-route/module.js +79 -46
- package/dist/node_modules/next/dist/server/route-modules/pages/pages-handler.js +270 -248
- package/dist/node_modules/next/dist/server/route-modules/route-module.js +45 -8
- package/dist/node_modules/next/dist/server/stream-utils/node-buffered-transform-stream.js +51 -0
- package/dist/node_modules/next/dist/server/stream-utils/node-web-streams-helper.js +90 -69
- package/dist/node_modules/next/dist/server/typescript/index.js +3 -3
- package/dist/node_modules/next/dist/server/typescript/rules/client-boundary.js +7 -4
- package/dist/node_modules/next/dist/server/typescript/rules/config.js +50 -28
- package/dist/node_modules/next/dist/server/use-cache/cache-life-profile.js +84 -0
- package/dist/node_modules/next/dist/server/use-cache/cache-life.js +4 -65
- package/dist/node_modules/next/dist/server/use-cache/clone-cache-entry.js +28 -0
- package/dist/node_modules/next/dist/server/use-cache/constants.js +24 -8
- package/dist/node_modules/next/dist/server/use-cache/handlers.js +166 -13
- package/dist/node_modules/next/dist/server/use-cache/tiered-cache-handler.js +145 -0
- package/dist/node_modules/next/dist/server/use-cache/use-cache-errors.js +34 -11
- package/dist/node_modules/next/dist/server/use-cache/use-cache-probe-globals.js +39 -0
- package/dist/node_modules/next/dist/server/use-cache/use-cache-probe-scheduler.js +117 -0
- package/dist/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +1475 -458
- package/dist/node_modules/next/dist/server/web/adapter.js +37 -4
- package/dist/node_modules/next/dist/server/web/edge-route-module-wrapper.js +14 -2
- package/dist/node_modules/next/dist/server/web/error.js +15 -0
- package/dist/node_modules/next/dist/server/web/sandbox/context.js +8 -2
- package/dist/node_modules/next/dist/server/web/sandbox/resource-managers.js +45 -10
- package/dist/node_modules/next/dist/server/web/spec-extension/adapters/headers.js +103 -2
- package/dist/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.js +15 -0
- package/dist/node_modules/next/dist/server/web/spec-extension/revalidate.js +18 -6
- package/dist/node_modules/next/dist/server/web/spec-extension/unstable-cache.js +35 -17
- package/dist/node_modules/next/dist/server/web/spec-extension/url-pattern.js +1 -2
- package/dist/node_modules/next/dist/shared/lib/app-router-types.js +125 -12
- package/dist/node_modules/next/dist/shared/lib/constants.js +5 -0
- package/dist/node_modules/next/dist/shared/lib/deployment-id.js +1 -1
- package/dist/node_modules/next/dist/shared/lib/errors/empty-generate-static-params-error.js +14 -7
- package/dist/node_modules/next/dist/shared/lib/errors/hard-deprecated-config-error.js +5 -0
- package/dist/node_modules/next/dist/shared/lib/head.js +5 -4
- package/dist/node_modules/next/dist/shared/lib/instant-messages.js +43 -0
- package/dist/node_modules/next/dist/shared/lib/invariant-error.js +5 -0
- package/dist/node_modules/next/dist/shared/lib/request-insights.js +30 -0
- package/dist/node_modules/next/dist/shared/lib/router/adapters.js +4 -1
- package/dist/node_modules/next/dist/shared/lib/router/routes/app.js +36 -12
- package/dist/node_modules/next/dist/shared/lib/router/utils/escape-path-delimiters.js +1 -1
- package/dist/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js +1 -1
- package/dist/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js +2 -1
- package/dist/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js +5 -4
- package/dist/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js +1 -1
- package/dist/node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.js +46 -12
- package/dist/node_modules/next/dist/shared/lib/server-reference-info.js +12 -0
- package/dist/node_modules/next/dist/shared/lib/utils.js +10 -1
- package/dist/node_modules/next/dist/telemetry/agent-name.js +20 -0
- package/dist/node_modules/next/dist/telemetry/anonymous-meta.js +4 -2
- package/dist/node_modules/next/dist/telemetry/events/build.js +13 -0
- package/dist/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
- package/dist/node_modules/next/dist/telemetry/events/version.js +6 -4
- package/dist/node_modules/next/dist/telemetry/storage.js +6 -2
- package/dist/node_modules/next/dist/trace/report/to-json.js +7 -1
- package/dist/node_modules/next/package.json +16 -255
- package/dist/node_modules/semver/package.json +38 -0
- package/dist/node_modules/sharp/{lib/channel.js → dist/channel.cjs} +1 -1
- package/dist/node_modules/sharp/dist/channel.mjs +177 -0
- package/dist/node_modules/sharp/{lib/colour.js → dist/colour.cjs} +11 -7
- package/dist/node_modules/sharp/dist/colour.mjs +199 -0
- package/dist/node_modules/sharp/{lib/composite.js → dist/composite.cjs} +2 -1
- package/dist/node_modules/sharp/dist/composite.mjs +213 -0
- package/dist/node_modules/sharp/{lib/constructor.js → dist/constructor.cjs} +41 -29
- package/dist/node_modules/sharp/dist/constructor.mjs +511 -0
- package/dist/node_modules/sharp/dist/index.cjs +25 -0
- package/dist/node_modules/sharp/dist/index.d.cts +1999 -0
- package/dist/node_modules/sharp/dist/index.d.mts +2046 -0
- package/dist/node_modules/sharp/dist/index.mjs +25 -0
- package/dist/node_modules/sharp/{lib/input.js → dist/input.cjs} +27 -22
- package/dist/node_modules/sharp/dist/input.mjs +814 -0
- package/dist/node_modules/sharp/{lib/is.js → dist/is.cjs} +1 -1
- package/dist/node_modules/sharp/dist/is.mjs +143 -0
- package/dist/node_modules/sharp/{lib/libvips.js → dist/libvips.cjs} +35 -30
- package/dist/node_modules/sharp/dist/libvips.mjs +212 -0
- package/dist/node_modules/sharp/{lib/operation.js → dist/operation.cjs} +33 -51
- package/dist/node_modules/sharp/dist/operation.mjs +998 -0
- package/dist/node_modules/sharp/{lib/output.js → dist/output.cjs} +162 -40
- package/dist/node_modules/sharp/dist/output.mjs +1788 -0
- package/dist/node_modules/sharp/{lib/resize.js → dist/resize.cjs} +46 -24
- package/dist/node_modules/sharp/dist/resize.mjs +617 -0
- package/dist/node_modules/sharp/dist/sharp.cjs +174 -0
- package/dist/node_modules/sharp/dist/sharp.mjs +174 -0
- package/dist/node_modules/sharp/{lib/utility.js → dist/utility.cjs} +18 -8
- package/dist/node_modules/sharp/dist/utility.mjs +301 -0
- package/dist/node_modules/sharp/node_modules/semver/classes/range.js +17 -4
- package/dist/node_modules/sharp/node_modules/semver/classes/semver.js +19 -2
- package/dist/node_modules/sharp/node_modules/semver/functions/clean.js +8 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/compare-build.js +9 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/compare-loose.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/diff.js +60 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/inc.js +21 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/major.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/minor.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/patch.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/prerelease.js +8 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/rcompare.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/rsort.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/sort.js +5 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/truncate.js +48 -0
- package/dist/node_modules/sharp/node_modules/semver/functions/valid.js +8 -0
- package/dist/node_modules/sharp/node_modules/semver/index.js +93 -0
- package/dist/node_modules/sharp/node_modules/semver/package.json +2 -2
- package/dist/node_modules/sharp/node_modules/semver/ranges/gtr.js +6 -0
- package/dist/node_modules/sharp/node_modules/semver/ranges/intersects.js +9 -0
- package/dist/node_modules/sharp/node_modules/semver/ranges/ltr.js +6 -0
- package/dist/node_modules/sharp/node_modules/semver/ranges/max-satisfying.js +27 -0
- package/dist/node_modules/sharp/node_modules/semver/ranges/min-satisfying.js +26 -0
- package/dist/node_modules/sharp/node_modules/semver/ranges/min-version.js +63 -0
- package/dist/node_modules/sharp/node_modules/semver/ranges/outside.js +82 -0
- package/dist/node_modules/sharp/node_modules/semver/ranges/simplify.js +49 -0
- package/dist/node_modules/sharp/node_modules/semver/ranges/subset.js +249 -0
- package/dist/node_modules/sharp/node_modules/semver/ranges/to-comparators.js +10 -0
- package/dist/node_modules/sharp/node_modules/semver/ranges/valid.js +13 -0
- package/dist/node_modules/sharp/package.json +77 -52
- package/dist/package.json +2 -2
- package/dist/server.js +1 -1
- package/package.json +2 -2
- package/dist/.next/server/app/_global-error.segments/_head.segment.rsc +0 -5
- package/dist/.next/server/app/_global-error.segments/_index.segment.rsc +0 -5
- package/dist/.next/server/app/_not-found.segments/_head.segment.rsc +0 -6
- package/dist/.next/server/app/_not-found.segments/_index.segment.rsc +0 -8
- package/dist/.next/server/app/_not-found.segments/_not-found.segment.rsc +0 -5
- package/dist/.next/server/app/index.segments/_head.segment.rsc +0 -6
- package/dist/.next/server/app/index.segments/_index.segment.rsc +0 -8
- package/dist/.next/server/chunks/[externals]_next_dist_0arv.vj._.js +0 -3
- package/dist/.next/server/chunks/[root-of-the-server]__04y5ms7._.js +0 -6
- package/dist/.next/server/chunks/[root-of-the-server]__05vp2x.._.js +0 -3
- package/dist/.next/server/chunks/[root-of-the-server]__08kko28._.js +0 -3
- package/dist/.next/server/chunks/[root-of-the-server]__0bpxd~j._.js +0 -3
- package/dist/.next/server/chunks/[root-of-the-server]__0cnmh23._.js +0 -3
- package/dist/.next/server/chunks/[root-of-the-server]__0j8-xkl._.js +0 -13
- package/dist/.next/server/chunks/[root-of-the-server]__0nngqla._.js +0 -6
- package/dist/.next/server/chunks/[root-of-the-server]__0o.c5k_._.js +0 -3
- package/dist/.next/server/chunks/[root-of-the-server]__0pz~0wz._.js +0 -6
- package/dist/.next/server/chunks/[root-of-the-server]__0s6.s21._.js +0 -6
- package/dist/.next/server/chunks/[root-of-the-server]__0vunt~c._.js +0 -3
- package/dist/.next/server/chunks/[root-of-the-server]__0xoct7b._.js +0 -3
- package/dist/.next/server/chunks/[root-of-the-server]__0yvyeh4._.js +0 -3
- package/dist/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0dh.2jf.js +0 -3
- package/dist/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0qs61ly.js +0 -3
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__01cqrhy._.js +0 -33
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__098zro9._.js +0 -19
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0cylknl._.js +0 -12
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0e_kl3j._.js +0 -3
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0e~coys._.js +0 -3
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0lb9jwe._.js +0 -3
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0tcyn68._.js +0 -33
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__0zi~h76._.js +0 -3
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__1130a6w._.js +0 -3
- package/dist/.next/server/chunks/ssr/[root-of-the-server]__12~42ln._.js +0 -3
- package/dist/.next/server/chunks/ssr/_03eop86._.js +0 -4
- package/dist/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0-9jf7s._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0.l_o9k._.js +0 -26
- package/dist/.next/server/chunks/ssr/node_modules_00-o__w._.js +0 -45
- package/dist/.next/server/chunks/ssr/node_modules_00yk8df._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_01rqq7y._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_050o3~0._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_09x0yif._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0_ce7g1._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0a61e8g._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0a9st_6._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0cdeu-p._.js +0 -6
- package/dist/.next/server/chunks/ssr/node_modules_0d91z34._.js +0 -11
- package/dist/.next/server/chunks/ssr/node_modules_0exnvlg._.js +0 -17
- package/dist/.next/server/chunks/ssr/node_modules_0h3oz6o._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0kf5axs._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0k~wgzn._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0l-2che._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0m8d9.a._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0p1ro75._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0q8gl61._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0s8hn7e._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0skn4ke._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0u1jua0._.js +0 -17
- package/dist/.next/server/chunks/ssr/node_modules_0ujy5r7._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_0xl3swb._.js +0 -17
- package/dist/.next/server/chunks/ssr/node_modules_0yx-7n5._.js +0 -31
- package/dist/.next/server/chunks/ssr/node_modules_11r29oo._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_12uy2-t._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_00zox90._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_048nvza._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0bqbkzr._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0iy4ann._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0n~wpy6._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0rp8krb._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0se--ys._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0v554rd._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_12i5eeu._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_13s5vbm._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_dagre-d3-es_src_dagre_index_097t5l0.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_0xdsm99._.js +0 -6
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_client_components_0inhx6q._.js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js +0 -3
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00t_ate.js +0 -4
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_031v14j.js +0 -4
- package/dist/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rc3ul_.js +0 -4
- package/dist/.next/static/chunks/0-.wbb-l7eg0y.js +0 -1
- package/dist/.next/static/chunks/0-6znc4v4kg4~.js +0 -1
- package/dist/.next/static/chunks/038jxymv2x4u-.js +0 -148
- package/dist/.next/static/chunks/08nzg~fbi7p-7.js +0 -1
- package/dist/.next/static/chunks/0aqpm5mabssqz.js +0 -1
- package/dist/.next/static/chunks/0dcu67gngfgpb.js +0 -4
- package/dist/.next/static/chunks/0do2sl_ugmstg.js +0 -10
- package/dist/.next/static/chunks/0ge0mq0ea60lx.js +0 -1
- package/dist/.next/static/chunks/0h-pxsp01miga.js +0 -1
- package/dist/.next/static/chunks/0i8pgzf~hu-3m.js +0 -24
- package/dist/.next/static/chunks/0icpvuwlmnlty.js +0 -43
- package/dist/.next/static/chunks/0ipk1er3w80bj.js +0 -24
- package/dist/.next/static/chunks/0lfej4svc~ist.js +0 -1
- package/dist/.next/static/chunks/0lmzx880lnpb..js +0 -1
- package/dist/.next/static/chunks/0luwdx.2p-x9e.js +0 -31
- package/dist/.next/static/chunks/0npm9l63~4j0v.js +0 -1
- package/dist/.next/static/chunks/0r~zu0c3j_b7p.js +0 -1
- package/dist/.next/static/chunks/0w57stq9f_irn.js +0 -10
- package/dist/.next/static/chunks/0~b.d.ay4u9zg.js +0 -2
- package/dist/.next/static/chunks/112qdnf547wz8.js +0 -1
- package/dist/.next/static/chunks/11uh-ttx4zin-.js +0 -9
- package/dist/.next/static/chunks/14i46k409qlt0.js +0 -1
- package/dist/.next/static/chunks/14j238ax8coge.js +0 -29
- package/dist/.next/static/chunks/14u7twut.vmn5.js +0 -1
- package/dist/.next/static/chunks/16k05wezoz4u0.js +0 -1
- package/dist/.next/static/chunks/turbopack-12mx7z-ex6m1h.js +0 -1
- package/dist/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
- package/dist/node_modules/next/dist/client/components/unstable-rethrow.browser.js +0 -28
- package/dist/node_modules/next/dist/client/components/unstable-rethrow.server.js +0 -32
- package/dist/node_modules/next/dist/compiled/http-proxy/index.js +0 -34
- package/dist/node_modules/next/dist/compiled/http-proxy/package.json +0 -1
- package/dist/node_modules/next/dist/lib/fatal-error.js +0 -14
- package/dist/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +0 -39
- package/dist/node_modules/sharp/lib/index.js +0 -16
- package/dist/node_modules/sharp/lib/sharp.js +0 -121
- /package/dist/.next/static/{KtUBUvcK3Gu2PuRf9GGiJ → OdIi-OEl7eDEMfmeeT85N}/_buildManifest.js +0 -0
- /package/dist/.next/static/{KtUBUvcK3Gu2PuRf9GGiJ → OdIi-OEl7eDEMfmeeT85N}/_clientMiddlewareManifest.js +0 -0
- /package/dist/.next/static/{KtUBUvcK3Gu2PuRf9GGiJ → OdIi-OEl7eDEMfmeeT85N}/_ssgManifest.js +0 -0
- /package/dist/.next/static/chunks/{01ontipw7_pn-.js → 059oqdb-4djh4.js} +0 -0
- /package/dist/.next/static/chunks/{03lth2le32c6r.js → 0bk3aw3m9c72a.js} +0 -0
- /package/dist/.next/static/chunks/{03l_lqxocp3uj.js → 0bko6sy3fi25l.js} +0 -0
- /package/dist/.next/static/chunks/{03v0v690_bw8u.js → 0catqiaei7kwh.js} +0 -0
- /package/dist/.next/static/chunks/{03yru4-m-450t.js → 0cm59yzmvnr6a.js} +0 -0
- /package/dist/.next/static/chunks/{03~yq9q893hmn.js → 0cz1d0mv5g_q7.js} +0 -0
- /package/dist/.next/static/chunks/{06o.rsm2b~dht.js → 0ll25xvc8tvc7.js} +0 -0
- /package/dist/.next/static/chunks/{08o5wsrurx9ux.js → 0r-qze3me8owo.js} +0 -0
- /package/dist/.next/static/chunks/{09~n7y-jkmjlj.js → 0wf_g68m1dyuq.js} +0 -0
- /package/dist/.next/static/chunks/{0awsj.h.eiuen.js → 0z7hf76h0cz39.js} +0 -0
- /package/dist/.next/static/chunks/{0axtn1ln1j35_.js → 0zao0i_njogzy.js} +0 -0
- /package/dist/.next/static/chunks/{0c5xj4q0jmdu0.js → 11jp13p4e7ycl.js} +0 -0
- /package/dist/.next/static/chunks/{0cu8k_dz43e4y.js → 13j02-7zvh70e.js} +0 -0
- /package/dist/.next/static/chunks/{0e4xdug~7dxzk.js → 17zvg7jc-nx5v.js} +0 -0
- /package/dist/.next/static/chunks/{0f8bbcvfh6x_j.js → 1bi4m489puezc.js} +0 -0
- /package/dist/.next/static/chunks/{0gq18q-ip0uh2.js → 1g6nbgmclpjgd.js} +0 -0
- /package/dist/.next/static/chunks/{0k9_1v72yx36d.js → 1rxbddx-dyypf.js} +0 -0
- /package/dist/.next/static/chunks/{0l3uvjh3oslhq.js → 1un-c368y76x-.js} +0 -0
- /package/dist/.next/static/chunks/{0lypu-.xpph9..js → 1x5foe7mtvd8m.js} +0 -0
- /package/dist/.next/static/chunks/{0ortphe030oky.js → 24c-6p_4lbozm.js} +0 -0
- /package/dist/.next/static/chunks/{0oufb2b491l23.js → 24l5e3uup8rxf.js} +0 -0
- /package/dist/.next/static/chunks/{0ps77yd96walr.js → 27n_wru0tprv5.js} +0 -0
- /package/dist/.next/static/chunks/{0qfu4h5g.k-yt.js → 29x7ecuc6vybp.js} +0 -0
- /package/dist/.next/static/chunks/{0rmt10l3458p_.js → 2dqeid-8xhwun.js} +0 -0
- /package/dist/.next/static/chunks/{0s0v8xobo-2ok.js → 2f6739bq5ewxz.js} +0 -0
- /package/dist/.next/static/chunks/{0s8nwq43gep9_.js → 2fuc_smcevit1.js} +0 -0
- /package/dist/.next/static/chunks/{0spswjguxbqfn.js → 2h7acwi-mfsrx.js} +0 -0
- /package/dist/.next/static/chunks/{0xxouzzjw_a6q.js → 2y3wq_x8yyu_b.js} +0 -0
- /package/dist/.next/static/chunks/{0ydl92ezt_ppz.js → 2zrfdnujo3u51.js} +0 -0
- /package/dist/.next/static/chunks/{16pzrphqjtyli.js → 3-t8rqn47mim5.js} +0 -0
- /package/dist/.next/static/chunks/{0~.e-m04zn5l_.js → 3cvv663zekq_n.js} +0 -0
- /package/dist/.next/static/chunks/{11luuvvu~stmv.js → 3l6bwn061vy22.js} +0 -0
- /package/dist/.next/static/chunks/{11_7qxlc92f5s.js → 3mcxvhb8ujk39.js} +0 -0
- /package/dist/.next/static/chunks/{13mjf5q.pema_.js → 3rru41488bc4e.js} +0 -0
- /package/dist/.next/static/chunks/{159151ghv9-cc.js → 3x5hww03ialmf.js} +0 -0
- /package/dist/.next/static/chunks/{15r_pfbdb2jhp.js → 3ypwau9uw-qzz.js} +0 -0
- /package/dist/.next/static/chunks/{182b_f_n0-cdr.js → 44dlrjamdw9zn.js} +0 -0
- /package/dist/.next/static/media/{1bffadaabf893a1e-s.16ipb6fqu393i.woff2 → 1bffadaabf893a1e-s.3-6t-g6q0vh0a.woff2} +0 -0
- /package/dist/.next/static/media/{2bbe8d2671613f1f-s.067x_6k0k23tk.woff2 → 2bbe8d2671613f1f-s.0k62hbripvv8p.woff2} +0 -0
- /package/dist/.next/static/media/{2c55a0e60120577a-s.0bjc5tiuqdqro.woff2 → 2c55a0e60120577a-s.0-dom-5bn10r2.woff2} +0 -0
- /package/dist/.next/static/media/{5476f68d60460930-s.0wxq9webf.ew4.woff2 → 5476f68d60460930-s.2uwcyprjm3xu3.woff2} +0 -0
- /package/dist/.next/static/media/{83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2 → 83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2} +0 -0
- /package/dist/.next/static/media/{9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2 → 9c72aa0f40e4eef8-s.1y4-pdgsjb-pw.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_AMS-Regular.0b~8ki5y928w2.woff → KaTeX_AMS-Regular.10y3kupq4t663.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_AMS-Regular.0p1vbqd84i2~o.woff2 → KaTeX_AMS-Regular.25ieegmnh38ts.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_AMS-Regular.173t6ktr7uf-w.ttf → KaTeX_AMS-Regular.418dr7cz3fo2x.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Caligraphic-Bold.01-pzluls4zgb.woff2 → KaTeX_Caligraphic-Bold.06b-ya9t43ioz.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Caligraphic-Bold.0x2v1lwn~880f.woff → KaTeX_Caligraphic-Bold.2vmk2hva4ctha.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Caligraphic-Bold.16zv5fax0h0ka.ttf → KaTeX_Caligraphic-Bold.40ltxhe834pns.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Caligraphic-Regular.02i3z7wig438t.ttf → KaTeX_Caligraphic-Regular.07-7u27-nhn_r.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Caligraphic-Regular.0rysu1t-ncjq8.woff2 → KaTeX_Caligraphic-Regular.2eph4dlhid_m9.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Caligraphic-Regular.10927swgekwun.woff → KaTeX_Caligraphic-Regular.3gxeetazf831f.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Fraktur-Bold.0et27v~3~4uhe.ttf → KaTeX_Fraktur-Bold.19yqa_tc9d_gx.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Fraktur-Bold.0e-16u10iuyyf.woff → KaTeX_Fraktur-Bold.1alcy76__wdj2.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Fraktur-Bold.0w23i72~hprpq.woff2 → KaTeX_Fraktur-Bold.2sasz-d-jtw8y.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Fraktur-Regular.0b.riegzdfue2.woff → KaTeX_Fraktur-Regular.110oo81prr9n5.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Fraktur-Regular.0rekyoa-52fj_.woff2 → KaTeX_Fraktur-Regular.2d10y4xmjvzlf.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Fraktur-Regular.0vjwa15znhk~4.ttf → KaTeX_Fraktur-Regular.2qhy34r6a05dn.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Main-Bold.09i7~607shf-h.ttf → KaTeX_Main-Bold.0us_n0tnxlxu7.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Main-Bold.09lmynrorhcbw.woff → KaTeX_Main-Bold.0v1esh257kqpe.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Main-Bold.16pfc63_du6mx.woff2 → KaTeX_Main-Bold.3-rowy8o6_4ky.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Main-BoldItalic.0cp37g7x1q8h6.woff → KaTeX_Main-BoldItalic.13355ck5zr48q.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Main-BoldItalic.0d54rk08rx11s.woff2 → KaTeX_Main-BoldItalic.14r2naom8mrec.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Main-BoldItalic.15j6k~hix2t_0.ttf → KaTeX_Main-BoldItalic.3x_u9cepaced0.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Main-Italic.0382gqciexmbu.woff → KaTeX_Main-Italic.0afv392dj4w59.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Main-Italic.06o5nq0_91v60.woff2 → KaTeX_Main-Italic.0lig0v9j0700p.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Main-Italic.0su4i6mm18-wo.ttf → KaTeX_Main-Italic.2hkw3230mfwcv.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Main-Regular.08zh8z.7shijf.ttf → KaTeX_Main-Regular.0symfa7dqj6jd.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Main-Regular.0diheg01zyoph.woff → KaTeX_Main-Regular.15u8r3b2y7fv4.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Main-Regular.0kaf-ag2_wkm-.woff2 → KaTeX_Main-Regular.1ryvsdzh2w1_e.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Math-BoldItalic.0ajzxypnbx1h1.ttf → KaTeX_Math-BoldItalic.0y5w36a5aq__2.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Math-BoldItalic.0ck1myuerwyqw.woff → KaTeX_Math-BoldItalic.12pl58orkw9rg.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Math-BoldItalic.0ja97dn.cpc87.woff2 → KaTeX_Math-BoldItalic.1oopuu636h4il.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Math-Italic.09xkhecjcn5r9.woff → KaTeX_Math-Italic.0w0b1ugh62cfr.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Math-Italic.0x23a-bmp-5tg.ttf → KaTeX_Math-Italic.2vkekfblmz5nb.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Math-Italic.0zrha2c4sl2je.woff2 → KaTeX_Math-Italic.32405s1aq8vas.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_SansSerif-Bold.05a9.pc1j_zx9.woff2 → KaTeX_SansSerif-Bold.0h3wi2z_eouyg.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_SansSerif-Bold.0jcl-ayi1uun0.woff → KaTeX_SansSerif-Bold.1ovw5p-yjp56g.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_SansSerif-Bold.0re8y.dm7.mt5.ttf → KaTeX_SansSerif-Bold.2d03q85pwxpti.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_SansSerif-Italic.0a0234dc3s62j.woff2 → KaTeX_SansSerif-Italic.0wkjc4dm2kcit.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_SansSerif-Italic.0judofdln9731.woff → KaTeX_SansSerif-Italic.1qavw__2zz8gk.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_SansSerif-Italic.10z1iap9pfus8.ttf → KaTeX_SansSerif-Italic.3i-q087b23-m8.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_SansSerif-Regular.0h9yjlugq4q_e.woff → KaTeX_SansSerif-Regular.1i4afx8nk8n4r.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_SansSerif-Regular.0v6gcj32-czft.woff2 → KaTeX_SansSerif-Regular.2peiewu59z3d-.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_SansSerif-Regular.0zm18kga42ebc.ttf → KaTeX_SansSerif-Regular.31pbu25feko_c.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Script-Regular.0c4.h-mer83d_.woff2 → KaTeX_Script-Regular.11h14300o9pd0.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Script-Regular.0q14y6zkzlpob.ttf → KaTeX_Script-Regular.28p_x7iz71ofe.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Script-Regular.0ze6v4r_-99oy.woff → KaTeX_Script-Regular.3110jb9c-bxna.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Size1-Regular.013x6a4ierotp.woff2 → KaTeX_Size1-Regular.03lhvx36ekcou.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Size1-Regular.0kidw0oi.m68o.woff → KaTeX_Size1-Regular.1slf4bh0hc6vm.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Size1-Regular.0m6y-i6wfokni.ttf → KaTeX_Size1-Regular.1y57-ck23ey8c.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Size2-Regular.0blpmluwilgbg.woff → KaTeX_Size2-Regular.0-kwyvx03omo8.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Size2-Regular.0d5inmyp-tyv3.woff2 → KaTeX_Size2-Regular.14s5gg-puz6h-.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Size2-Regular.0wnhnvj-.k9d5.ttf → KaTeX_Size2-Regular.2u0s-b07k2o9m.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Size3-Regular.01h0xm_sfctj3.woff → KaTeX_Size3-Regular.04o9a_02gu_e8.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Size3-Regular.0iukctyhw5j56.woff2 → KaTeX_Size3-Regular.1n1rgzz84z8r9.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Size3-Regular.0jl8mqyf4gzpn.ttf → KaTeX_Size3-Regular.1pkn-dge4q0fv.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Size4-Regular.0w3.rb_c4stzk.woff2 → KaTeX_Size4-Regular.2sgotkdv3dcyv.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Size4-Regular.0wr_9l81-mu06.ttf → KaTeX_Size4-Regular.2uelkfk2yna5e.ttf} +0 -0
- /package/dist/.next/static/media/{KaTeX_Size4-Regular.12tvaesf3.zl3.woff → KaTeX_Size4-Regular.3p2r1l7xmebxv.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Typewriter-Regular.0c4zdxz~8frhm.woff2 → KaTeX_Typewriter-Regular.11gr2d2wuwz77.woff2} +0 -0
- /package/dist/.next/static/media/{KaTeX_Typewriter-Regular.0cgrzn5l3kao5.woff → KaTeX_Typewriter-Regular.12f8myjij3617.woff} +0 -0
- /package/dist/.next/static/media/{KaTeX_Typewriter-Regular.128~qc3858otl.ttf → KaTeX_Typewriter-Regular.3nee9kjfy6nm8.ttf} +0 -0
- /package/dist/.next/static/media/{ad66f9afd8947f86-s.11u06r12fd6v_.woff2 → ad66f9afd8947f86-s.3lvt2whj97whp.woff2} +0 -0
- /package/dist/.next/static/media/{icon.0j1xc6-m~vsbh.png → icon.1n_rla2f79pbj.png} +0 -0
|
@@ -9,7 +9,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
9
|
pingPrefetchTask: null,
|
|
10
10
|
reschedulePrefetchTask: null,
|
|
11
11
|
schedulePrefetchTask: null,
|
|
12
|
-
startRevalidationCooldown: null
|
|
12
|
+
startRevalidationCooldown: null,
|
|
13
|
+
subtreeHasSpeculativePrefetch: null
|
|
13
14
|
});
|
|
14
15
|
function _export(target, all) {
|
|
15
16
|
for(var name in all)Object.defineProperty(target, name, {
|
|
@@ -38,12 +39,16 @@ _export(exports, {
|
|
|
38
39
|
},
|
|
39
40
|
startRevalidationCooldown: function() {
|
|
40
41
|
return startRevalidationCooldown;
|
|
42
|
+
},
|
|
43
|
+
subtreeHasSpeculativePrefetch: function() {
|
|
44
|
+
return subtreeHasSpeculativePrefetch;
|
|
41
45
|
}
|
|
42
46
|
});
|
|
43
47
|
const _approutertypes = require("../../../shared/lib/app-router-types");
|
|
44
48
|
const _matchsegments = require("../match-segments");
|
|
45
49
|
const _cache = require("./cache");
|
|
46
50
|
const _cachekey = require("./cache-key");
|
|
51
|
+
const _routeparams = require("../../route-params");
|
|
47
52
|
const _types = require("./types");
|
|
48
53
|
const _segment = require("../../../shared/lib/segment");
|
|
49
54
|
const _lru = require("./lru");
|
|
@@ -76,25 +81,41 @@ function startRevalidationCooldown() {
|
|
|
76
81
|
pingPrefetchScheduler();
|
|
77
82
|
}, REVALIDATION_COOLDOWN_MS);
|
|
78
83
|
}
|
|
79
|
-
function schedulePrefetchTask(key, treeAtTimeOfPrefetch, fetchStrategy, priority, onInvalidate,
|
|
84
|
+
function schedulePrefetchTask(key, treeAtTimeOfPrefetch, fetchStrategy, priority, onInvalidate, navigationLockPrefetch) {
|
|
85
|
+
// Bind the task to the segment cache map that is active right now: the
|
|
86
|
+
// shared map, unless the Instant Navigation Testing lock is held, in which
|
|
87
|
+
// case the task gets the lock scope's private map. This is the single
|
|
88
|
+
// place work is bound to a map based on lock state — everything downstream
|
|
89
|
+
// receives the map explicitly. See `segmentCacheMap` in cache.ts.
|
|
90
|
+
let taskSegmentCacheMap = _cache.segmentCacheMap;
|
|
91
|
+
if (process.env.__NEXT_EXPOSE_TESTING_API) {
|
|
92
|
+
const { getNavigationLockSegmentCacheMap } = require('./navigation-testing-lock');
|
|
93
|
+
const lockMap = getNavigationLockSegmentCacheMap();
|
|
94
|
+
if (lockMap !== null) {
|
|
95
|
+
taskSegmentCacheMap = lockMap;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
80
98
|
// Spawn a new prefetch task
|
|
81
99
|
const task = {
|
|
82
100
|
key,
|
|
83
101
|
treeAtTimeOfPrefetch,
|
|
84
102
|
routeCacheVersion: (0, _cache.getCurrentRouteCacheVersion)(),
|
|
85
103
|
segmentCacheVersion: (0, _cache.getCurrentSegmentCacheVersion)(),
|
|
104
|
+
segmentCacheMap: taskSegmentCacheMap,
|
|
86
105
|
priority,
|
|
87
|
-
phase:
|
|
106
|
+
phase: 2,
|
|
88
107
|
hasBackgroundWork: false,
|
|
108
|
+
hasPendingResponses: false,
|
|
89
109
|
spawnedRuntimePrefetches: null,
|
|
90
110
|
fetchStrategy,
|
|
91
111
|
sortId: sortIdCounter++,
|
|
92
112
|
isCanceled: false,
|
|
113
|
+
fallbackRetryStatus: _cache.EntryStatus.Empty,
|
|
93
114
|
onInvalidate,
|
|
94
115
|
_heapIndex: -1
|
|
95
116
|
};
|
|
96
117
|
if (process.env.__NEXT_EXPOSE_TESTING_API) {
|
|
97
|
-
task.
|
|
118
|
+
task._navigationLockPrefetch = navigationLockPrefetch;
|
|
98
119
|
}
|
|
99
120
|
trackMostRecentlyHoveredLink(task);
|
|
100
121
|
heapPush(taskHeap, task);
|
|
@@ -115,15 +136,9 @@ function cancelPrefetchTask(task) {
|
|
|
115
136
|
// We must also explicitly mark the task as canceled so that a blocked task
|
|
116
137
|
// does not get added back to the queue when it's pinged by the network.
|
|
117
138
|
task.isCanceled = true;
|
|
139
|
+
// A running fallback-retry loop notices `isCanceled` when it next wakes and
|
|
140
|
+
// bails (settling its status to Rejected), so there's nothing to clean up here.
|
|
118
141
|
heapDelete(taskHeap, task);
|
|
119
|
-
if (process.env.__NEXT_EXPOSE_TESTING_API) {
|
|
120
|
-
// Call completion callback. In practice this shouldn't be reached for
|
|
121
|
-
// test-initiated prefetches since cancellation is only used by the Link
|
|
122
|
-
// component when elements scroll out of viewport.
|
|
123
|
-
const onComplete = task._onComplete;
|
|
124
|
-
task._onComplete = undefined;
|
|
125
|
-
onComplete?.();
|
|
126
|
-
}
|
|
127
142
|
}
|
|
128
143
|
function reschedulePrefetchTask(task, treeAtTimeOfPrefetch, fetchStrategy, priority) {
|
|
129
144
|
// Bump the prefetch task to the top of the queue, as if it were a fresh
|
|
@@ -132,13 +147,13 @@ function reschedulePrefetchTask(task, treeAtTimeOfPrefetch, fetchStrategy, prior
|
|
|
132
147
|
//
|
|
133
148
|
// The primary use case is to increase the priority of a Link-initated
|
|
134
149
|
// prefetch on hover.
|
|
135
|
-
//
|
|
136
|
-
// Note: _onComplete is not reset here because it's preserved on the same
|
|
137
|
-
// task object. When the rescheduled task completes, the original callback
|
|
138
|
-
// will still be invoked.
|
|
139
150
|
// Un-cancel the task, in case it was previously canceled.
|
|
140
151
|
task.isCanceled = false;
|
|
141
|
-
task.phase =
|
|
152
|
+
task.phase = 2;
|
|
153
|
+
// Note: fallback-retry state is deliberately NOT reset here. A retry loop runs
|
|
154
|
+
// at most once per task, even across reschedules, so a re-hover never starts a
|
|
155
|
+
// second loop. A loop already running simply continues (it only stops on
|
|
156
|
+
// cancel); `fallbackRetryStatus` never returns to `Empty` once it leaves it.
|
|
142
157
|
// Assign a new sort ID to move it ahead of all other tasks at the same
|
|
143
158
|
// priority level. (Higher sort IDs are processed first.)
|
|
144
159
|
task.sortId = sortIdCounter++;
|
|
@@ -195,6 +210,14 @@ function pingPrefetchScheduler() {
|
|
|
195
210
|
* Also checks if we're within the revalidation cooldown window, during which
|
|
196
211
|
* prefetch requests are delayed to allow CDN cache propagation.
|
|
197
212
|
*/ function hasNetworkBandwidth(task) {
|
|
213
|
+
// When offline, don't issue any prefetch requests. The scheduler will be
|
|
214
|
+
// re-pinged when connectivity is restored.
|
|
215
|
+
if (process.env.__NEXT_USE_OFFLINE) {
|
|
216
|
+
const { getOffline } = require('../offline');
|
|
217
|
+
if (getOffline()) {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
198
221
|
// Check if we're within the revalidation cooldown window
|
|
199
222
|
if (revalidationCooldownTimeoutHandle !== null) {
|
|
200
223
|
// We're within the cooldown window. Return false to prevent prefetching.
|
|
@@ -273,10 +296,13 @@ function processQueueInMicrotask() {
|
|
|
273
296
|
task.routeCacheVersion = (0, _cache.getCurrentRouteCacheVersion)();
|
|
274
297
|
task.segmentCacheVersion = (0, _cache.getCurrentSegmentCacheVersion)();
|
|
275
298
|
const exitStatus = pingRoute(now, task);
|
|
276
|
-
// These fields are only valid for a single
|
|
277
|
-
//
|
|
299
|
+
// These fields are only valid for a single "pass" — one pingRoute
|
|
300
|
+
// invocation for a task, which is what the comments here also call an
|
|
301
|
+
// attempt or an iteration. Reset them after each iteration of the
|
|
302
|
+
// task queue.
|
|
278
303
|
const hasBackgroundWork = task.hasBackgroundWork;
|
|
279
304
|
task.hasBackgroundWork = false;
|
|
305
|
+
task.hasPendingResponses = false;
|
|
280
306
|
task.spawnedRuntimePrefetches = null;
|
|
281
307
|
switch(exitStatus){
|
|
282
308
|
case 0:
|
|
@@ -291,9 +317,28 @@ function processQueueInMicrotask() {
|
|
|
291
317
|
task = heapPeek(taskHeap);
|
|
292
318
|
continue;
|
|
293
319
|
case 2:
|
|
294
|
-
if (task.phase ===
|
|
295
|
-
// Finished prefetching the route tree.
|
|
296
|
-
//
|
|
320
|
+
if (task.phase === 2) {
|
|
321
|
+
// Finished prefetching the route tree. The two-phase (Shell then
|
|
322
|
+
// Speculative) flow only applies to routes that have opted into
|
|
323
|
+
// Partial Prefetching — either globally via the `partialPrefetching`
|
|
324
|
+
// config or per segment (`prefetch: 'partial'` or
|
|
325
|
+
// `'unstable_eager'`), all surfaced as the
|
|
326
|
+
// `SubtreeHasPartialPrefetching` hint on the route tree. Every other
|
|
327
|
+
// route skips the Shell phase and goes straight to Speculative.
|
|
328
|
+
//
|
|
329
|
+
// The route entry is fulfilled at this point (the RouteTree phase
|
|
330
|
+
// just completed), so its prefetch hints are available.
|
|
331
|
+
const route = (0, _cache.readRouteCacheEntry)(now, task.key);
|
|
332
|
+
const routeHasPartialPrefetching = route !== null && route.status === _cache.EntryStatus.Fulfilled && (route.tree.prefetchHints & _approutertypes.PrefetchHint.SubtreeHasPartialPrefetching) !== 0;
|
|
333
|
+
task.phase = routeHasPartialPrefetching ? 1 : 0;
|
|
334
|
+
heapResift(taskHeap, task);
|
|
335
|
+
} else if (task.phase === 1) {
|
|
336
|
+
// Shell phase complete — a Done exit means the pass observed every
|
|
337
|
+
// response it cares about (otherwise it would have exited Blocked;
|
|
338
|
+
// see hasPendingResponses). Always advance to Speculative regardless
|
|
339
|
+
// of whether Shell-phase work fired — Speculative is responsible
|
|
340
|
+
// for the per-link concrete work and runs even on routes whose
|
|
341
|
+
// shell phase was a no-op.
|
|
297
342
|
task.phase = 0;
|
|
298
343
|
heapResift(taskHeap, task);
|
|
299
344
|
} else if (hasBackgroundWork) {
|
|
@@ -303,12 +348,29 @@ function processQueueInMicrotask() {
|
|
|
303
348
|
heapResift(taskHeap, task);
|
|
304
349
|
} else {
|
|
305
350
|
// The prefetch is complete. Continue to the next task.
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
351
|
+
//
|
|
352
|
+
// Completion is terminal in the normal flow: a task only completes
|
|
353
|
+
// after a full pass observed every response it cares about. In rare
|
|
354
|
+
// cases, though, a task can complete while still registered on an
|
|
355
|
+
// entry from an earlier pass whose subtree the final pass no longer
|
|
356
|
+
// reached; when that entry later settles, it re-pings the completed
|
|
357
|
+
// task. The re-run is a harmless idempotent no-op, but any
|
|
358
|
+
// per-completion side effect added here must be idempotent or
|
|
359
|
+
// once-guarded — in particular, the navigation-lock release below
|
|
360
|
+
// must not fire twice (hence the nulling).
|
|
361
|
+
if (process.env.__NEXT_EXPOSE_TESTING_API && task._navigationLockPrefetch != null) {
|
|
362
|
+
// This locked-navigation prefetch is complete: the final pass
|
|
363
|
+
// observed every segment response it cares about, so the data the
|
|
364
|
+
// navigation will read has settled. Resolve the prefetch's
|
|
365
|
+
// promise (awaited by `ensurePrefetchThenNavigate`) so the
|
|
366
|
+
// navigation proceeds against present data rather than a
|
|
367
|
+
// still-in-flight entry.
|
|
368
|
+
const { resolveNavigationLockPrefetch } = require('./navigation-testing-lock');
|
|
369
|
+
resolveNavigationLockPrefetch(task._navigationLockPrefetch);
|
|
370
|
+
// Release at most once per task: a stale registration from an
|
|
371
|
+
// earlier pass can re-ping a completed task (see above), so it can
|
|
372
|
+
// pass through here again.
|
|
373
|
+
task._navigationLockPrefetch = null;
|
|
312
374
|
}
|
|
313
375
|
heapPop(taskHeap);
|
|
314
376
|
}
|
|
@@ -335,6 +397,11 @@ function processQueueInMicrotask() {
|
|
|
335
397
|
* if (background(task)) {
|
|
336
398
|
* // Perform background-pri work
|
|
337
399
|
* }
|
|
400
|
+
*
|
|
401
|
+
* TODO: Model "background" as a phase (like Shell / Speculative) rather
|
|
402
|
+
* than as a priority. Conceptually it's the same pattern: defer work
|
|
403
|
+
* until a later pass over the task. The current priority-based encoding
|
|
404
|
+
* predates the phase model and could be unified.
|
|
338
405
|
*/ function background(task) {
|
|
339
406
|
if (task.priority === _types.PrefetchPriority.Background) {
|
|
340
407
|
return true;
|
|
@@ -366,7 +433,7 @@ function pingRoute(now, task) {
|
|
|
366
433
|
{
|
|
367
434
|
if (background(task)) {
|
|
368
435
|
routeWithoutSearch.status = _cache.EntryStatus.Pending;
|
|
369
|
-
spawnPrefetchSubtask((0, _cache.fetchRouteOnCacheMiss)(routeWithoutSearch, keyWithoutSearch));
|
|
436
|
+
spawnPrefetchSubtask((0, _cache.fetchRouteOnCacheMiss)(routeWithoutSearch, keyWithoutSearch, task.segmentCacheMap));
|
|
370
437
|
}
|
|
371
438
|
break;
|
|
372
439
|
}
|
|
@@ -380,6 +447,12 @@ function pingRoute(now, task) {
|
|
|
380
447
|
routeWithoutSearch;
|
|
381
448
|
}
|
|
382
449
|
}
|
|
450
|
+
if (exitStatus === 2 && task.hasPendingResponses) {
|
|
451
|
+
// The pass traversed the whole tree, but some segment responses haven't
|
|
452
|
+
// arrived yet, so the current phase isn't actually complete. Block until
|
|
453
|
+
// they do (see blockTaskOnPendingResponse for the full rationale).
|
|
454
|
+
return 1;
|
|
455
|
+
}
|
|
383
456
|
return exitStatus;
|
|
384
457
|
}
|
|
385
458
|
function pingRootRouteTree(now, task, route) {
|
|
@@ -399,7 +472,7 @@ function pingRootRouteTree(now, task, route) {
|
|
|
399
472
|
// behavior if PPR is disabled for a route (via the incremental opt-in).
|
|
400
473
|
//
|
|
401
474
|
// Those cases will be handled here.
|
|
402
|
-
spawnPrefetchSubtask((0, _cache.fetchRouteOnCacheMiss)(route, task.key));
|
|
475
|
+
spawnPrefetchSubtask((0, _cache.fetchRouteOnCacheMiss)(route, task.key, task.segmentCacheMap));
|
|
403
476
|
// If the request takes longer than a minute, a subsequent request should
|
|
404
477
|
// retry instead of waiting for this one. When the response is received,
|
|
405
478
|
// this value will be replaced by a new value based on the stale time sent
|
|
@@ -433,8 +506,8 @@ function pingRootRouteTree(now, task, route) {
|
|
|
433
506
|
}
|
|
434
507
|
case _cache.EntryStatus.Fulfilled:
|
|
435
508
|
{
|
|
436
|
-
if (task.phase
|
|
437
|
-
// Do not prefetch segment data
|
|
509
|
+
if (task.phase === 2) {
|
|
510
|
+
// Do not prefetch segment data during the route tree phase.
|
|
438
511
|
return 2;
|
|
439
512
|
}
|
|
440
513
|
// Recursively fill in the segment tree.
|
|
@@ -448,19 +521,20 @@ function pingRootRouteTree(now, task, route) {
|
|
|
448
521
|
// We don't need to do this for runtime prefetches, because those are only available in
|
|
449
522
|
// `cacheComponents`, where every route is PPR.
|
|
450
523
|
let fetchStrategy;
|
|
451
|
-
if (tree.prefetchHints & _approutertypes.PrefetchHint.
|
|
452
|
-
// If
|
|
453
|
-
// fetch strategy and switch to unified strategy used by
|
|
454
|
-
// Components (called `PPR` for now, will likely be renamed).
|
|
524
|
+
if (tree.prefetchHints & _approutertypes.PrefetchHint.SubtreeHasPartialPrefetching) {
|
|
525
|
+
// If Partial Prefetching is enabled anywhere on the target route,
|
|
526
|
+
// ignore the fetch strategy and switch to unified strategy used by
|
|
527
|
+
// Cache Components (called `PPR` for now, will likely be renamed).
|
|
455
528
|
//
|
|
456
529
|
// In practice, this just means that a "full" prefetch (<Link
|
|
457
530
|
// prefetch={true}>) has no effect. You're meant to use Runtime
|
|
458
531
|
// Prefetching instead — that's the new pattern that replaces
|
|
459
532
|
// prefetch={true}.
|
|
460
533
|
//
|
|
461
|
-
// The reason we check for
|
|
462
|
-
// flag is to support incremental adoption.
|
|
463
|
-
// continue to work until you opt into
|
|
534
|
+
// The reason we check for the Partial Prefetching opt-in rather than
|
|
535
|
+
// the `cacheComponents` flag is to support incremental adoption.
|
|
536
|
+
// `prefetch={true}` will continue to work until you opt into
|
|
537
|
+
// Partial Prefetching.
|
|
464
538
|
fetchStrategy = _types.FetchStrategy.PPR;
|
|
465
539
|
} else if (task.fetchStrategy === _types.FetchStrategy.PPR) {
|
|
466
540
|
fetchStrategy = route.supportsPerSegmentPrefetching ? _types.FetchStrategy.PPR : _types.FetchStrategy.LoadingBoundary;
|
|
@@ -477,24 +551,54 @@ function pingRootRouteTree(now, task, route) {
|
|
|
477
551
|
//
|
|
478
552
|
// Then, if there are any segments that need a runtime request,
|
|
479
553
|
// do another pass to perform a runtime prefetch.
|
|
480
|
-
|
|
481
|
-
|
|
554
|
+
// Derive the static walk's parameters once per pass; the walk
|
|
555
|
+
// functions below receive them as arguments and are phase-agnostic.
|
|
556
|
+
// During the Shell phase the walk targets the App Shell variant of
|
|
557
|
+
// each segment (keyed at the shell vary paths); otherwise it's the
|
|
558
|
+
// ordinary per-segment static strategy. This is the only place the
|
|
559
|
+
// phase is consulted — everything below keys off the strategy.
|
|
560
|
+
const staticWalkStrategy = task.phase === 1 ? _types.FetchStrategy.StaticShell : _types.FetchStrategy.PPR;
|
|
561
|
+
if (staticWalkStrategy === _types.FetchStrategy.PPR && !subtreeHasSpeculativePrefetch(task.fetchStrategy, tree.prefetchHints)) {
|
|
562
|
+
// Nothing in the target route needs to be speculatively prefetched.
|
|
563
|
+
// Bail out. (A PPR walk is the Speculative pass; same check as
|
|
564
|
+
// the per-subtree bail in pingNewPartOfCacheComponentsTree.)
|
|
565
|
+
return 2;
|
|
566
|
+
}
|
|
567
|
+
pingStaticHead(now, task, route, staticWalkStrategy);
|
|
568
|
+
const exitStatus = pingSharedPartOfCacheComponentsTree(now, task, route, task.treeAtTimeOfPrefetch, tree, null, staticWalkStrategy);
|
|
482
569
|
if (exitStatus === 0) {
|
|
483
570
|
// Child yielded without finishing.
|
|
484
571
|
return 0;
|
|
485
572
|
}
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
573
|
+
// We may need to do a runtime prefetch for one or more segments.
|
|
574
|
+
// Before checking, we can do some fast checks to bail out of this
|
|
575
|
+
// branch early.
|
|
576
|
+
//
|
|
577
|
+
// Runtime prefetches are only issued for walks that require runtime
|
|
578
|
+
// completeness — the same per-pass predicate that produced the
|
|
579
|
+
// deopt registrations during the traversal above; see the decision
|
|
580
|
+
// point in pingNewPartOfCacheComponentsTree. Which segments
|
|
581
|
+
// actually need a runtime request — registered directly, or only
|
|
582
|
+
// as the fallback after an insufficient static attempt — was
|
|
583
|
+
// decided there.
|
|
584
|
+
if (walkRequiresRuntimeCompleteness(staticWalkStrategy, route)) {
|
|
585
|
+
const runtimeStrategy = staticWalkStrategy === _types.FetchStrategy.StaticShell ? _types.FetchStrategy.RuntimeShell : _types.FetchStrategy.PPRRuntime;
|
|
586
|
+
// spawnedRuntimePrefetches was populated during the traversal
|
|
587
|
+
// above: every subtree in the new part of the tree that needs a
|
|
588
|
+
// runtime prefetch — plus, during the Shell phase, the head, if
|
|
589
|
+
// its static attempt was insufficient (see above).
|
|
590
|
+
//
|
|
591
|
+
// If it's null, nothing in the new part of the tree is a candidate
|
|
592
|
+
// for runtime prefetching, and we don't fetch the head, either —
|
|
593
|
+
// the head is runtime prefetched only if one of the segments is.
|
|
594
|
+
const spawnedRuntimePrefetches = task.spawnedRuntimePrefetches;
|
|
595
|
+
if (spawnedRuntimePrefetches !== null) {
|
|
596
|
+
const spawnedEntries = new Map();
|
|
597
|
+
pingRuntimeHead(now, task, route, spawnedEntries, runtimeStrategy);
|
|
598
|
+
const requestTree = pingRuntimePrefetches(now, task, route, tree, spawnedRuntimePrefetches, spawnedEntries, runtimeStrategy);
|
|
599
|
+
if (spawnedEntries.size > 0) {
|
|
600
|
+
spawnPrefetchSubtask((0, _cache.fetchSegmentPrefetchesUsingDynamicRequest)(task, route, runtimeStrategy, requestTree, spawnedEntries));
|
|
601
|
+
}
|
|
498
602
|
}
|
|
499
603
|
}
|
|
500
604
|
return 2;
|
|
@@ -503,6 +607,12 @@ function pingRootRouteTree(now, task, route) {
|
|
|
503
607
|
case _types.FetchStrategy.PPRRuntime:
|
|
504
608
|
case _types.FetchStrategy.LoadingBoundary:
|
|
505
609
|
{
|
|
610
|
+
if (task.phase === 1) {
|
|
611
|
+
// Shell phase only does work on routes that use the PPR strategy
|
|
612
|
+
// (Cache Components routes). Other strategies are Shell no-ops
|
|
613
|
+
// and fall through to Speculative.
|
|
614
|
+
return 2;
|
|
615
|
+
}
|
|
506
616
|
// Prefetch multiple segments using a single dynamic request.
|
|
507
617
|
// TODO: We can consolidate this branch with previous one by modeling
|
|
508
618
|
// it as if the first segment in the new tree has runtime prefetching
|
|
@@ -531,11 +641,127 @@ function pingRootRouteTree(now, task, route) {
|
|
|
531
641
|
}
|
|
532
642
|
return 2;
|
|
533
643
|
}
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
644
|
+
/**
|
|
645
|
+
* Prefetches the Head data for a page (metadata, viewport). The Head is not
|
|
646
|
+
* really a route segment, in the sense that it doesn't appear in the route
|
|
647
|
+
* tree, but we store it in the cache as if it were, using a special key.
|
|
648
|
+
*
|
|
649
|
+
* Symmetric with the per-segment decision point in
|
|
650
|
+
* pingNewPartOfCacheComponentsTree: the head deopts to the runtime prefetch
|
|
651
|
+
* path either when it requires runtime completeness and no static attempt is
|
|
652
|
+
* happening, or when a fulfilled static head entry reported that a runtime
|
|
653
|
+
* request would return more content than the entry contains. Deopting
|
|
654
|
+
* registers the head under its metadata request key, which makes the runtime
|
|
655
|
+
* gate in pingRootRouteTree fire even when every tree segment was
|
|
656
|
+
* sufficient; pingRuntimeHead performs the actual head work.
|
|
657
|
+
*/ function pingStaticHead(now, task, route, // The per-pass static walk strategy; see pingRootRouteTree where
|
|
658
|
+
// it's derived.
|
|
659
|
+
fetchStrategy) {
|
|
660
|
+
// The head is subject to the same per-pass runtime-completeness contract
|
|
661
|
+
// as the route's segments: during an App Shell walk, and during any walk
|
|
662
|
+
// of a Partial Prefetching route, the head needs a response at least as
|
|
663
|
+
// complete as a runtime one.
|
|
664
|
+
const headRequiresRuntimeCompleteness = walkRequiresRuntimeCompleteness(fetchStrategy, route);
|
|
665
|
+
if (headRequiresRuntimeCompleteness && // The head is not a tree node — it hangs off the route root — so the
|
|
666
|
+
// static-attempt hint is read from the root's node. (Segments read the
|
|
667
|
+
// bit from their own node; see the decision point in
|
|
668
|
+
// pingNewPartOfCacheComponentsTree.)
|
|
669
|
+
(route.tree.prefetchHints & _approutertypes.PrefetchHint.ShouldAttemptStaticPrefetch) === 0) {
|
|
670
|
+
// No static attempt: the head arrives via the runtime request instead.
|
|
671
|
+
addSpawnedRuntimePrefetch(task, route.metadata.requestKey);
|
|
672
|
+
return;
|
|
673
|
+
}
|
|
674
|
+
if (// If the head was inlined into a page's bundle (HeadOutlined is NOT set
|
|
675
|
+
// on the root), skip the standalone fetch — the head data will arrive
|
|
676
|
+
// as part of that page's response, and its runtime-completeness signal
|
|
677
|
+
// is carried by that page's own entries.
|
|
678
|
+
process.env.__NEXT_PREFETCH_INLINING && !(route.tree.prefetchHints & _approutertypes.PrefetchHint.HeadOutlined)) {
|
|
679
|
+
return;
|
|
680
|
+
}
|
|
681
|
+
const segments = {
|
|
682
|
+
tree: route.metadata,
|
|
683
|
+
entry: (0, _cache.readOrCreateSegmentCacheEntry)(now, task.segmentCacheMap, fetchStrategy, route.metadata),
|
|
684
|
+
parent: null
|
|
685
|
+
};
|
|
686
|
+
const needsRuntimeRequest = pingSegmentBundle(now, task, route, task.key, route.metadata, segments, fetchStrategy, true);
|
|
687
|
+
if (headRequiresRuntimeCompleteness && needsRuntimeRequest) {
|
|
688
|
+
// The static attempt was insufficient for the head. Deopt to a
|
|
689
|
+
// runtime prefetch. (Outside of runtime-completeness contexts the
|
|
690
|
+
// head's signal is unused — a partial static head is filled in by the
|
|
691
|
+
// navigation-time request, as with any other static segment.)
|
|
692
|
+
addSpawnedRuntimePrefetch(task, route.metadata.requestKey);
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
/**
|
|
696
|
+
* Whether the task needs a cache entry at least as complete as a runtime
|
|
697
|
+
* response for every segment it walks before the prefetch counts as done.
|
|
698
|
+
* Runtime completeness is the universal contract for Partial Prefetching,
|
|
699
|
+
* so the predicate is per pass, not per segment:
|
|
700
|
+
*
|
|
701
|
+
* - Every walk of a route that opts into Partial Prefetching (any segment
|
|
702
|
+
* with a partial-prefetching config, or the global `partialPrefetching`
|
|
703
|
+
* flag — both surfaced as SubtreeHasPartialPrefetching on the route
|
|
704
|
+
* root), in both the Shell and Speculative phases.
|
|
705
|
+
* - Every App Shell (StaticShell) walk, because the App Shell must be
|
|
706
|
+
* reusable across all params by definition. (In practice this is implied
|
|
707
|
+
* by the first case — the Shell phase only runs for Partial Prefetching
|
|
708
|
+
* routes.)
|
|
709
|
+
*
|
|
710
|
+
* Routes without Partial Prefetching keep the static-only contract: their
|
|
711
|
+
* walks prefetch static data and partial entries are acceptable — the
|
|
712
|
+
* dynamic holes are filled by the navigation-time request.
|
|
713
|
+
*
|
|
714
|
+
* Note that on a Partial Prefetching route, non-eager subtrees are still
|
|
715
|
+
* skipped by the Speculative pass of a default (auto) link — eagerness is
|
|
716
|
+
* unaffected by this predicate. But every segment the pass DOES walk (eager
|
|
717
|
+
* segments, and everything on a `prefetch={true}` walk) is held to the
|
|
718
|
+
* runtime-completeness contract. The contract is affordable because most
|
|
719
|
+
* routes carry the ShouldAttemptStaticPrefetch hint: their segments are
|
|
720
|
+
* prefetched statically and the responses' own sufficiency signal makes a
|
|
721
|
+
* runtime request rare. On a hint-unset route, a walked segment deopts
|
|
722
|
+
* directly to the batched runtime request — which then serves the segment's
|
|
723
|
+
* whole subtree, so navigations into it are complete without a
|
|
724
|
+
* navigation-time request.
|
|
725
|
+
*
|
|
726
|
+
* This is also the gate for the batched runtime request at the end of
|
|
727
|
+
* pingRootRouteTree; requiring runtime completeness does not itself mean a
|
|
728
|
+
* runtime request is issued for a given segment — see the decision point in
|
|
729
|
+
* pingNewPartOfCacheComponentsTree.
|
|
730
|
+
*/ function walkRequiresRuntimeCompleteness(staticWalkStrategy, route) {
|
|
731
|
+
return staticWalkStrategy === _types.FetchStrategy.StaticShell || (route.tree.prefetchHints & _approutertypes.PrefetchHint.SubtreeHasPartialPrefetching) !== 0;
|
|
732
|
+
}
|
|
733
|
+
/**
|
|
734
|
+
* The runtime counterpart of a pass's static walk strategy: the strategy the
|
|
735
|
+
* batched runtime request uses if this walk deopts. Each phase has exactly one
|
|
736
|
+
* — the Shell phase escalates to a runtime App Shell, the Speculative phase to
|
|
737
|
+
* a per-link concrete runtime prefetch.
|
|
738
|
+
*/ function getRuntimeStrategyForWalk(staticWalkStrategy) {
|
|
739
|
+
return staticWalkStrategy === _types.FetchStrategy.StaticShell ? _types.FetchStrategy.RuntimeShell : _types.FetchStrategy.PPRRuntime;
|
|
740
|
+
}
|
|
741
|
+
/**
|
|
742
|
+
* Whether this phase's runtime request would return more content for a
|
|
743
|
+
* fulfilled entry than the entry already holds.
|
|
744
|
+
*
|
|
745
|
+
* An entry records the tier its CONTENT achieved, not the one it was requested
|
|
746
|
+
* at, and that tier spans both axes — so a static response that needed no
|
|
747
|
+
* runtime data records the runtime counterpart of its own variant (see
|
|
748
|
+
* `recordedFetchStrategy` in cache.ts). That makes this a pure tier
|
|
749
|
+
* comparison: an entry at or above the phase's runtime tier has nothing to
|
|
750
|
+
* gain from it.
|
|
751
|
+
*/ function wouldRuntimeRequestProvideMore(entry, staticWalkStrategy) {
|
|
752
|
+
return (0, _cache.canNewFetchStrategyProvideMoreContent)(entry.fetchStrategy, getRuntimeStrategyForWalk(staticWalkStrategy));
|
|
753
|
+
}
|
|
754
|
+
/**
|
|
755
|
+
* Register a subtree root (or the head's metadata key) for the batched
|
|
756
|
+
* runtime request issued by the gate at the end of pingRootRouteTree.
|
|
757
|
+
*/ function addSpawnedRuntimePrefetch(task, requestKey) {
|
|
758
|
+
if (task.spawnedRuntimePrefetches === null) {
|
|
759
|
+
task.spawnedRuntimePrefetches = new Set([
|
|
760
|
+
requestKey
|
|
761
|
+
]);
|
|
762
|
+
} else {
|
|
763
|
+
task.spawnedRuntimePrefetches.add(requestKey);
|
|
764
|
+
}
|
|
539
765
|
}
|
|
540
766
|
function pingRuntimeHead(now, task, route, spawnedEntries, fetchStrategy) {
|
|
541
767
|
pingRouteTreeAndIncludeDynamicData(now, task, route, route.metadata, false, spawnedEntries, // When prefetching the head, there's no difference between Full
|
|
@@ -543,7 +769,9 @@ function pingRuntimeHead(now, task, route, spawnedEntries, fetchStrategy) {
|
|
|
543
769
|
fetchStrategy === _types.FetchStrategy.LoadingBoundary ? _types.FetchStrategy.Full : fetchStrategy);
|
|
544
770
|
}
|
|
545
771
|
// TODO: Rename dynamic -> runtime throughout this module
|
|
546
|
-
function pingSharedPartOfCacheComponentsTree(now, task, route, oldTree, newTree
|
|
772
|
+
function pingSharedPartOfCacheComponentsTree(now, task, route, oldTree, newTree, parentBundle, // The per-pass static walk strategy; see pingRootRouteTree where
|
|
773
|
+
// it's derived.
|
|
774
|
+
fetchStrategy) {
|
|
547
775
|
// When Cache Components is enabled (or PPR, or a fully static route when PPR
|
|
548
776
|
// is disabled; those cases are treated equivalently to Cache Components), we
|
|
549
777
|
// start by prefetching each segment individually. Once we reach the "new"
|
|
@@ -554,30 +782,51 @@ function pingSharedPartOfCacheComponentsTree(now, task, route, oldTree, newTree)
|
|
|
554
782
|
// The traversal starts in the "shared" part of the tree. Once we reach the
|
|
555
783
|
// "new" part of the tree, we switch to a different traversal,
|
|
556
784
|
// pingNewPartOfCacheComponentsTree.
|
|
557
|
-
//
|
|
558
|
-
|
|
559
|
-
|
|
785
|
+
// The shared part of the tree always performs the ordinary static (PPR)
|
|
786
|
+
// prefetch, regardless of phase. Phase-specific strategies — the runtime
|
|
787
|
+
// shell request and the Shell phase's StaticShell walk — apply only to the
|
|
788
|
+
// new part of the tree, so the per-pass walk strategy is irrelevant here.
|
|
789
|
+
// (The needs-runtime signal is ignored: shared segments are already
|
|
790
|
+
// rendered on the current page, so a runtime prefetch has nothing to add.)
|
|
791
|
+
const bundleInProgress = accumulateSegmentBundle(now, task, route, newTree, parentBundle, _types.FetchStrategy.PPR, true).bundle;
|
|
560
792
|
// Recursively ping the children.
|
|
561
793
|
const oldTreeChildren = oldTree[1];
|
|
562
794
|
const newTreeChildren = newTree.slots;
|
|
563
795
|
if (newTreeChildren !== null) {
|
|
564
|
-
for(const parallelRouteKey
|
|
796
|
+
for (const [parallelRouteKey, newTreeChild] of newTreeChildren){
|
|
565
797
|
if (!hasNetworkBandwidth(task)) {
|
|
566
798
|
// Stop prefetching segments until there's more bandwidth.
|
|
567
799
|
return 0;
|
|
568
800
|
}
|
|
569
|
-
const newTreeChild = newTreeChildren[parallelRouteKey];
|
|
570
801
|
const newTreeChildSegment = newTreeChild.segment;
|
|
571
802
|
const oldTreeChild = oldTreeChildren[parallelRouteKey];
|
|
572
803
|
const oldTreeChildSegment = oldTreeChild?.[0];
|
|
804
|
+
// Only pass the bundle to the child that accepts it. A parent is
|
|
805
|
+
// only ever bundled into one child.
|
|
806
|
+
const bundleForChild = process.env.__NEXT_PREFETCH_INLINING && bundleInProgress !== null && newTreeChild.prefetchHints & _approutertypes.PrefetchHint.ParentInlinedIntoSelf ? bundleInProgress : null;
|
|
573
807
|
let childExitStatus;
|
|
574
808
|
if (oldTreeChildSegment !== undefined && doesCurrentSegmentMatchCachedSegment(route, newTreeChildSegment, oldTreeChildSegment)) {
|
|
575
809
|
// We're still in the "shared" part of the tree.
|
|
576
|
-
childExitStatus = pingSharedPartOfCacheComponentsTree(now, task, route, oldTreeChild, newTreeChild);
|
|
810
|
+
childExitStatus = pingSharedPartOfCacheComponentsTree(now, task, route, oldTreeChild, newTreeChild, bundleForChild, fetchStrategy);
|
|
577
811
|
} else {
|
|
578
812
|
// We've entered the "new" part of the tree. Switch
|
|
579
813
|
// traversal functions.
|
|
580
|
-
|
|
814
|
+
//
|
|
815
|
+
// Bundle chains must not cross the strategy boundary: the shared
|
|
816
|
+
// part walks at PPR while a Shell-phase new part walks at
|
|
817
|
+
// StaticShell, and a chain spanning both would fulfill the shared
|
|
818
|
+
// parent's concrete-path entry with shell-variant data. Nor may we
|
|
819
|
+
// finish the chain by fetching the new-part child at PPR here —
|
|
820
|
+
// that would prefetch new-part segments at the concrete tier
|
|
821
|
+
// during the Shell phase, which only the Speculative phase is
|
|
822
|
+
// allowed to do. So drop the bundle instead, exactly like the
|
|
823
|
+
// Speculative walk's subtree bail does when a chain crosses into a
|
|
824
|
+
// subtree it skips: nothing in a dropped chain was upgraded to
|
|
825
|
+
// Pending, so no entry is stranded, and the inlined shared data is
|
|
826
|
+
// fetched by the Speculative pass whenever its walk of the new
|
|
827
|
+
// part permits the child fetch.
|
|
828
|
+
const bundleForNewPart = fetchStrategy === _types.FetchStrategy.StaticShell ? null : bundleForChild;
|
|
829
|
+
childExitStatus = pingNewPartOfCacheComponentsTree(now, task, route, newTreeChild, bundleForNewPart, fetchStrategy);
|
|
581
830
|
}
|
|
582
831
|
if (childExitStatus === 0) {
|
|
583
832
|
// Child yielded without finishing.
|
|
@@ -587,61 +836,105 @@ function pingSharedPartOfCacheComponentsTree(now, task, route, oldTree, newTree)
|
|
|
587
836
|
}
|
|
588
837
|
return 2;
|
|
589
838
|
}
|
|
590
|
-
function pingNewPartOfCacheComponentsTree(now, task, route, tree
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
//
|
|
594
|
-
//
|
|
595
|
-
//
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
839
|
+
function pingNewPartOfCacheComponentsTree(now, task, route, tree, parentBundle, // The per-pass static walk strategy; see pingRootRouteTree where
|
|
840
|
+
// it's derived.
|
|
841
|
+
fetchStrategy) {
|
|
842
|
+
// We're now prefetching in the "new" part of the tree, the part that
|
|
843
|
+
// doesn't exist on the current page. (In other words, we're deeper than
|
|
844
|
+
// the shared layouts.) Segments in here default to being prefetched
|
|
845
|
+
// statically, at the per-pass strategy derived in pingRootRouteTree.
|
|
846
|
+
//
|
|
847
|
+
// When the walk requires runtime completeness — an entry at least as
|
|
848
|
+
// complete as a runtime response for every segment before the prefetch
|
|
849
|
+
// can complete (see walkRequiresRuntimeCompleteness) — this function is
|
|
850
|
+
// also the per-segment decision point. If the segment's node carries the
|
|
851
|
+
// ShouldAttemptStaticPrefetch hint (the build-time prerender accessed no
|
|
852
|
+
// runtime data), its subtree is prefetched statically first,
|
|
853
|
+
// and the responses themselves decide whether that was enough: every
|
|
854
|
+
// fulfilled entry carries a needsRuntimeRequest signal. Pending responses
|
|
855
|
+
// block the task, so the attempt is serial, never raced: static attempt →
|
|
856
|
+
// observe → runtime only if needed. Without the hint, the segment deopts
|
|
857
|
+
// directly. Deopting registers the segment's request key in
|
|
858
|
+
// spawnedRuntimePrefetches; the runtime gate at the end of
|
|
859
|
+
// pingRootRouteTree issues a single batched runtime request for
|
|
860
|
+
// everything that accumulated, and that request re-fetches the whole
|
|
861
|
+
// subtree, so the walk stops descending at a deopt.
|
|
862
|
+
//
|
|
863
|
+
// Outside a runtime-completeness walk the same needsRuntimeRequest signal
|
|
864
|
+
// is routine and ignored — any partial entry of a page that accesses
|
|
865
|
+
// runtime data carries it, and the dynamic holes are filled by the
|
|
866
|
+
// navigation-time request.
|
|
867
|
+
if (// Only the Speculative pass skips subtrees with nothing to speculatively
|
|
868
|
+
// prefetch. (It's also the only pass that walks at FetchStrategy.PPR;
|
|
869
|
+
// the Shell phase walks at StaticShell and covers the whole new tree.)
|
|
870
|
+
fetchStrategy === _types.FetchStrategy.PPR && !subtreeHasSpeculativePrefetch(task.fetchStrategy, tree.prefetchHints)) {
|
|
871
|
+
// Nothing in the new part of the tree needs to be speculatively prefetched.
|
|
872
|
+
// Bail out.
|
|
873
|
+
return 2;
|
|
874
|
+
}
|
|
875
|
+
// Constant for the whole pass; recomputed here only because the walk is
|
|
876
|
+
// recursive and the check is cheap.
|
|
877
|
+
const segmentRequiresRuntimeCompleteness = walkRequiresRuntimeCompleteness(fetchStrategy, route);
|
|
878
|
+
// TODO: The static-attempt hint reflects the build-time prerender's whole
|
|
879
|
+
// runtime-data tracking, so a page that always accesses
|
|
880
|
+
// runtime data after the shell stage never attempts a static prefetch —
|
|
881
|
+
// even though its shell variant is rewindable at the shell boundary and
|
|
882
|
+
// perfectly reusable. The server could emit a second bit derived from the
|
|
883
|
+
// shell-stage value ("a static SHELL attempt is worthwhile even though
|
|
884
|
+
// the page accesses runtime data post-shell") to let such pages attempt
|
|
885
|
+
// static, too.
|
|
886
|
+
// A force-disabled segment deliberately does NOT deopt here: disabling
|
|
887
|
+
// prefetch is passive. It never initiates a request — its accumulation
|
|
888
|
+
// below contributes nothing — and must never be the reason a runtime
|
|
889
|
+
// prefetch spawns, though it may ride along in a runtime response issued
|
|
890
|
+
// on another segment's behalf.
|
|
891
|
+
const attemptStaticPrefetchOfSegment = (tree.prefetchHints & _approutertypes.PrefetchHint.ShouldAttemptStaticPrefetch) !== 0;
|
|
892
|
+
if (segmentRequiresRuntimeCompleteness && !attemptStaticPrefetchOfSegment) {
|
|
893
|
+
// Deopt directly to a runtime prefetch, without a static attempt.
|
|
894
|
+
addSpawnedRuntimePrefetch(task, tree.requestKey);
|
|
895
|
+
// If there's a pending static bundle from a parent, we need to finish
|
|
896
|
+
// prefetching it before bailing out to runtime prefetching.
|
|
897
|
+
if (parentBundle !== null) {
|
|
898
|
+
finishStaticBundleOnRuntimeBailout(now, task, route, tree, parentBundle, fetchStrategy);
|
|
622
899
|
}
|
|
623
|
-
// Then exit the traversal without prefetching anything further.
|
|
624
900
|
return 2;
|
|
625
901
|
}
|
|
626
|
-
//
|
|
627
|
-
|
|
628
|
-
|
|
902
|
+
// Prefetch this segment and its subtree statically, using the normal
|
|
903
|
+
// static bundling walk.
|
|
904
|
+
const accumulation = accumulateSegmentBundle(now, task, route, tree, parentBundle, fetchStrategy, true);
|
|
905
|
+
const bundleInProgress = accumulation.bundle;
|
|
906
|
+
if (segmentRequiresRuntimeCompleteness && accumulation.needsRuntimeRequest) {
|
|
907
|
+
// The static attempt for this segment was insufficient. Stop the walk
|
|
908
|
+
// and deopt — the runtime prefetch covers the whole subtree. (Unlike the
|
|
909
|
+
// direct deopt above, any open bundle is dropped rather than finished: a
|
|
910
|
+
// fulfilled InlinedIntoChild node can report a true signal while its
|
|
911
|
+
// chain is still open. That's safe — nothing in an un-pinged chain was
|
|
912
|
+
// upgraded to Pending, so no entry is stranded blocking the task, and
|
|
913
|
+
// Empty entries in the dropped chain are re-fetched by a later pass.)
|
|
914
|
+
addSpawnedRuntimePrefetch(task, tree.requestKey);
|
|
915
|
+
return 2;
|
|
916
|
+
}
|
|
629
917
|
if (tree.slots !== null) {
|
|
630
918
|
if (!hasNetworkBandwidth(task)) {
|
|
631
919
|
// Stop prefetching segments until there's more bandwidth.
|
|
632
920
|
return 0;
|
|
633
921
|
}
|
|
634
922
|
// Recursively ping the children.
|
|
635
|
-
for(const
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
923
|
+
for (const childTree of tree.slots.values()){
|
|
924
|
+
// Only pass the bundle to the child that accepts it. A parent is
|
|
925
|
+
// only ever bundled into one child.
|
|
926
|
+
const bundleForChild = process.env.__NEXT_PREFETCH_INLINING && bundleInProgress !== null && childTree.prefetchHints & _approutertypes.PrefetchHint.ParentInlinedIntoSelf ? bundleInProgress : null;
|
|
927
|
+
const childResult = pingNewPartOfCacheComponentsTree(now, task, route, childTree, bundleForChild, fetchStrategy);
|
|
928
|
+
if (childResult === 0) {
|
|
639
929
|
// Child yielded without finishing.
|
|
640
930
|
return 0;
|
|
641
931
|
}
|
|
642
932
|
}
|
|
643
933
|
}
|
|
644
|
-
//
|
|
934
|
+
// The static attempt was sufficient for this segment (each child is its
|
|
935
|
+
// own decision point) — or parts of it are still in flight, in which case
|
|
936
|
+
// the task is blocked and the decision re-runs against the received
|
|
937
|
+
// responses.
|
|
645
938
|
return 2;
|
|
646
939
|
}
|
|
647
940
|
function diffRouteTreeAgainstCurrent(now, task, route, oldTree, newTree, spawnedEntries, fetchStrategy) {
|
|
@@ -658,8 +951,7 @@ function diffRouteTreeAgainstCurrent(now, task, route, oldTree, newTree, spawned
|
|
|
658
951
|
const newTreeChildren = newTree.slots;
|
|
659
952
|
let requestTreeChildren = {};
|
|
660
953
|
if (newTreeChildren !== null) {
|
|
661
|
-
for(const parallelRouteKey
|
|
662
|
-
const newTreeChild = newTreeChildren[parallelRouteKey];
|
|
954
|
+
for (const [parallelRouteKey, newTreeChild] of newTreeChildren){
|
|
663
955
|
const newTreeChildSegment = newTreeChild.segment;
|
|
664
956
|
const oldTreeChild = oldTreeChildren[parallelRouteKey];
|
|
665
957
|
const oldTreeChildSegment = oldTreeChild?.[0];
|
|
@@ -734,6 +1026,9 @@ function diffRouteTreeAgainstCurrent(now, task, route, oldTree, newTree, spawned
|
|
|
734
1026
|
null,
|
|
735
1027
|
null
|
|
736
1028
|
];
|
|
1029
|
+
if (newTree.prefetchHints !== 0) {
|
|
1030
|
+
requestTree[4] = newTree.prefetchHints;
|
|
1031
|
+
}
|
|
737
1032
|
return requestTree;
|
|
738
1033
|
}
|
|
739
1034
|
function pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, tree, refetchMarkerContext, spawnedEntries) {
|
|
@@ -748,7 +1043,7 @@ function pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, tree, ref
|
|
|
748
1043
|
// "inside-shared-layout" tells the server where to start looking for a
|
|
749
1044
|
// loading boundary.
|
|
750
1045
|
let refetchMarker = refetchMarkerContext === null ? 'inside-shared-layout' : null;
|
|
751
|
-
const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, task.fetchStrategy, tree);
|
|
1046
|
+
const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, task.segmentCacheMap, task.fetchStrategy, tree);
|
|
752
1047
|
switch(segment.status){
|
|
753
1048
|
case _cache.EntryStatus.Empty:
|
|
754
1049
|
{
|
|
@@ -760,10 +1055,14 @@ function pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, tree, ref
|
|
|
760
1055
|
// though, I'll send the full tree and we'll look into this later as part
|
|
761
1056
|
// of a larger redesign of the request protocol.
|
|
762
1057
|
// Add the pending cache entry to the result map.
|
|
763
|
-
|
|
1058
|
+
const pendingSegment = (0, _cache.upgradeToPendingSegment)(segment, // Set the fetch strategy to LoadingBoundary to indicate that the server
|
|
764
1059
|
// might not include it in the pending response. If another route is able
|
|
765
1060
|
// to issue a per-segment request, we'll do that in the background.
|
|
766
|
-
_types.FetchStrategy.LoadingBoundary)
|
|
1061
|
+
_types.FetchStrategy.LoadingBoundary);
|
|
1062
|
+
spawnedEntries.set(tree.requestKey, pendingSegment);
|
|
1063
|
+
// The pass blocks on every request it spawns, not just requests it
|
|
1064
|
+
// finds already in flight.
|
|
1065
|
+
blockTaskOnPendingResponse(task, pendingSegment);
|
|
767
1066
|
if (refetchMarkerContext !== 'refetch') {
|
|
768
1067
|
refetchMarker = refetchMarkerContext = 'refetch';
|
|
769
1068
|
} else {
|
|
@@ -786,6 +1085,11 @@ function pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, tree, ref
|
|
|
786
1085
|
}
|
|
787
1086
|
case _cache.EntryStatus.Pending:
|
|
788
1087
|
{
|
|
1088
|
+
// There's another prefetch currently in progress. Don't add the refetch
|
|
1089
|
+
// marker yet, so the server knows it can skip rendering this segment.
|
|
1090
|
+
// The pass still depends on the in-flight response, so wait for it
|
|
1091
|
+
// before the phase can complete.
|
|
1092
|
+
blockTaskOnPendingResponse(task, segment);
|
|
789
1093
|
break;
|
|
790
1094
|
}
|
|
791
1095
|
case _cache.EntryStatus.Rejected:
|
|
@@ -797,8 +1101,7 @@ function pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, tree, ref
|
|
|
797
1101
|
}
|
|
798
1102
|
const requestTreeChildren = {};
|
|
799
1103
|
if (tree.slots !== null) {
|
|
800
|
-
for(const parallelRouteKey
|
|
801
|
-
const childTree = tree.slots[parallelRouteKey];
|
|
1104
|
+
for (const [parallelRouteKey, childTree] of tree.slots){
|
|
802
1105
|
requestTreeChildren[parallelRouteKey] = pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, childTree, refetchMarkerContext, spawnedEntries);
|
|
803
1106
|
}
|
|
804
1107
|
}
|
|
@@ -808,8 +1111,41 @@ function pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, tree, ref
|
|
|
808
1111
|
null,
|
|
809
1112
|
refetchMarker
|
|
810
1113
|
];
|
|
1114
|
+
if (tree.prefetchHints !== 0) {
|
|
1115
|
+
requestTree[4] = tree.prefetchHints;
|
|
1116
|
+
}
|
|
811
1117
|
return requestTree;
|
|
812
1118
|
}
|
|
1119
|
+
/**
|
|
1120
|
+
* Called during a pass when a segment's response hasn't been received yet —
|
|
1121
|
+
* whether the request was just spawned by this pass or was already in flight.
|
|
1122
|
+
* Marks the task as blocked: a phase only completes once a full pass observes
|
|
1123
|
+
* every segment response it cares about, because later decisions (like
|
|
1124
|
+
* whether a segment needs a follow-up runtime request) are made against the
|
|
1125
|
+
* contents of those responses, and a phase may need to restart its work based
|
|
1126
|
+
* on what they contain. The task is re-pinged (via pingBlockedTasks in
|
|
1127
|
+
* cache.ts) when the entry resolves, re-running the pass against the
|
|
1128
|
+
* received data. Only a pass that observes every response may advance the
|
|
1129
|
+
* phase or complete the task.
|
|
1130
|
+
*
|
|
1131
|
+
* Never call this for an entry that's already Rejected — nothing ever pings
|
|
1132
|
+
* a Rejected entry, so registering on one would strand the task. A rejected
|
|
1133
|
+
* segment is simply skipped: the pass keeps prefetching the rest of the tree
|
|
1134
|
+
* without it.
|
|
1135
|
+
*/ function blockTaskOnPendingResponse(task, segment) {
|
|
1136
|
+
// This state is reset after each iteration of the task queue. We use it to
|
|
1137
|
+
// inform the scheduler that the task is blocked.
|
|
1138
|
+
task.hasPendingResponses = true;
|
|
1139
|
+
// Add the task to this segment's blocked tasks, so it can be rescheduled
|
|
1140
|
+
// once the segment finishes loading.
|
|
1141
|
+
if (segment.blockedTasks === null) {
|
|
1142
|
+
segment.blockedTasks = new Set([
|
|
1143
|
+
task
|
|
1144
|
+
]);
|
|
1145
|
+
} else {
|
|
1146
|
+
segment.blockedTasks.add(task);
|
|
1147
|
+
}
|
|
1148
|
+
}
|
|
813
1149
|
function pingRouteTreeAndIncludeDynamicData(now, task, route, tree, isInsideRefetchingParent, spawnedEntries, fetchStrategy) {
|
|
814
1150
|
// The tree we're constructing is the same shape as the tree we're navigating
|
|
815
1151
|
// to. But even though this is a "new" tree, some of the individual segments
|
|
@@ -819,7 +1155,7 @@ function pingRouteTreeAndIncludeDynamicData(now, task, route, tree, isInsideRefe
|
|
|
819
1155
|
// explicit "refetch" marker so the server knows where to start rendering.
|
|
820
1156
|
// Once the server starts rendering along a path, it keeps rendering the
|
|
821
1157
|
// entire subtree.
|
|
822
|
-
const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, // Note that `fetchStrategy` might be different from `task.fetchStrategy`,
|
|
1158
|
+
const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, task.segmentCacheMap, // Note that `fetchStrategy` might be different from `task.fetchStrategy`,
|
|
823
1159
|
// and we have to use the former here.
|
|
824
1160
|
// We can have a task with `FetchStrategy.PPR` where some of its segments are configured to
|
|
825
1161
|
// always use runtime prefetching (via `export const prefetch`), and those should check for
|
|
@@ -857,12 +1193,12 @@ function pingRouteTreeAndIncludeDynamicData(now, task, route, tree, isInsideRefe
|
|
|
857
1193
|
// entry from a previous navigation, prefer that over making a new
|
|
858
1194
|
// request.
|
|
859
1195
|
if (fetchStrategy === _types.FetchStrategy.Full) {
|
|
860
|
-
const fulfilled = (0, _cache.attemptToUpgradeSegmentFromBFCache)(now, tree);
|
|
1196
|
+
const fulfilled = (0, _cache.attemptToUpgradeSegmentFromBFCache)(now, task.segmentCacheMap, tree);
|
|
861
1197
|
if (fulfilled !== null) {
|
|
862
1198
|
break;
|
|
863
1199
|
}
|
|
864
1200
|
}
|
|
865
|
-
spawnedSegment = pingFullSegmentRevalidation(now, tree, fetchStrategy);
|
|
1201
|
+
spawnedSegment = pingFullSegmentRevalidation(now, task, tree, fetchStrategy);
|
|
866
1202
|
}
|
|
867
1203
|
break;
|
|
868
1204
|
}
|
|
@@ -872,17 +1208,39 @@ function pingRouteTreeAndIncludeDynamicData(now, task, route, tree, isInsideRefe
|
|
|
872
1208
|
// There's either another prefetch currently in progress, or the previous
|
|
873
1209
|
// attempt failed. If the new strategy can provide more content, fetch it again.
|
|
874
1210
|
if ((0, _cache.canNewFetchStrategyProvideMoreContent)(segment.fetchStrategy, fetchStrategy)) {
|
|
875
|
-
spawnedSegment = pingFullSegmentRevalidation(now, tree, fetchStrategy);
|
|
1211
|
+
spawnedSegment = pingFullSegmentRevalidation(now, task, tree, fetchStrategy);
|
|
1212
|
+
}
|
|
1213
|
+
if (segment.status === _cache.EntryStatus.Pending) {
|
|
1214
|
+
// A response for this segment is still in flight. The pass must
|
|
1215
|
+
// observe it before the phase can complete.
|
|
1216
|
+
blockTaskOnPendingResponse(task, segment);
|
|
1217
|
+
} else {
|
|
1218
|
+
// The segment failed to load, or the server intentionally omitted it
|
|
1219
|
+
// from a response (both are encoded as Rejected). Skip it and keep
|
|
1220
|
+
// prefetching the rest of the tree; the entry's staleAt governs when
|
|
1221
|
+
// it may be retried. Don't register the task on the rejected entry —
|
|
1222
|
+
// nothing ever pings a Rejected entry.
|
|
1223
|
+
//
|
|
1224
|
+
// TODO: The cache encodes real failures and intentional server
|
|
1225
|
+
// omissions identically (both Rejected); with per-segment skipping
|
|
1226
|
+
// this has no task-lifecycle consequence, but distinguishing them
|
|
1227
|
+
// could still be useful someday.
|
|
876
1228
|
}
|
|
877
1229
|
break;
|
|
878
1230
|
}
|
|
879
1231
|
default:
|
|
880
1232
|
segment;
|
|
881
1233
|
}
|
|
1234
|
+
if (spawnedSegment !== null) {
|
|
1235
|
+
// A pass must observe the response for every request it spawns before
|
|
1236
|
+
// its phase can complete — not just requests it finds already in flight.
|
|
1237
|
+
// Block on the entry we just spawned; the task is re-pinged when it's
|
|
1238
|
+
// fulfilled or rejected.
|
|
1239
|
+
blockTaskOnPendingResponse(task, spawnedSegment);
|
|
1240
|
+
}
|
|
882
1241
|
const requestTreeChildren = {};
|
|
883
1242
|
if (tree.slots !== null) {
|
|
884
|
-
for(const parallelRouteKey
|
|
885
|
-
const childTree = tree.slots[parallelRouteKey];
|
|
1243
|
+
for (const [parallelRouteKey, childTree] of tree.slots){
|
|
886
1244
|
requestTreeChildren[parallelRouteKey] = pingRouteTreeAndIncludeDynamicData(now, task, route, childTree, isInsideRefetchingParent || spawnedSegment !== null, spawnedEntries, fetchStrategy);
|
|
887
1245
|
}
|
|
888
1246
|
}
|
|
@@ -898,9 +1256,12 @@ function pingRouteTreeAndIncludeDynamicData(now, task, route, tree, isInsideRefe
|
|
|
898
1256
|
null,
|
|
899
1257
|
refetchMarker
|
|
900
1258
|
];
|
|
1259
|
+
if (tree.prefetchHints !== 0) {
|
|
1260
|
+
requestTree[4] = tree.prefetchHints;
|
|
1261
|
+
}
|
|
901
1262
|
return requestTree;
|
|
902
1263
|
}
|
|
903
|
-
function pingRuntimePrefetches(now, task, route, tree, spawnedRuntimePrefetches, spawnedEntries) {
|
|
1264
|
+
function pingRuntimePrefetches(now, task, route, tree, spawnedRuntimePrefetches, spawnedEntries, fetchStrategy) {
|
|
904
1265
|
// Construct a request tree (FlightRouterState) for a runtime prefetch. If
|
|
905
1266
|
// a segment is part of the runtime prefetch, the tree is constructed by
|
|
906
1267
|
// diffing against what's already in the prefetch cache. Otherwise, we send
|
|
@@ -909,14 +1270,13 @@ function pingRuntimePrefetches(now, task, route, tree, spawnedRuntimePrefetches,
|
|
|
909
1270
|
// See pingRouteTreeAndIncludeDynamicData for details.
|
|
910
1271
|
if (spawnedRuntimePrefetches.has(tree.requestKey)) {
|
|
911
1272
|
// This segment needs a runtime prefetch.
|
|
912
|
-
return pingRouteTreeAndIncludeDynamicData(now, task, route, tree, false, spawnedEntries,
|
|
1273
|
+
return pingRouteTreeAndIncludeDynamicData(now, task, route, tree, false, spawnedEntries, fetchStrategy);
|
|
913
1274
|
}
|
|
914
1275
|
let requestTreeChildren = {};
|
|
915
1276
|
const slots = tree.slots;
|
|
916
1277
|
if (slots !== null) {
|
|
917
|
-
for(const parallelRouteKey
|
|
918
|
-
|
|
919
|
-
requestTreeChildren[parallelRouteKey] = pingRuntimePrefetches(now, task, route, childTree, spawnedRuntimePrefetches, spawnedEntries);
|
|
1278
|
+
for (const [parallelRouteKey, childTree] of slots){
|
|
1279
|
+
requestTreeChildren[parallelRouteKey] = pingRuntimePrefetches(now, task, route, childTree, spawnedRuntimePrefetches, spawnedEntries, fetchStrategy);
|
|
920
1280
|
}
|
|
921
1281
|
}
|
|
922
1282
|
// This segment is not part of the runtime prefetch. Clone the base tree.
|
|
@@ -926,131 +1286,281 @@ function pingRuntimePrefetches(now, task, route, tree, spawnedRuntimePrefetches,
|
|
|
926
1286
|
null,
|
|
927
1287
|
null
|
|
928
1288
|
];
|
|
1289
|
+
if (tree.prefetchHints !== 0) {
|
|
1290
|
+
requestTree[4] = tree.prefetchHints;
|
|
1291
|
+
}
|
|
929
1292
|
return requestTree;
|
|
930
1293
|
}
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
1294
|
+
/**
|
|
1295
|
+
* Walk a SegmentBundle, apply status-based logic to each entry, and if any
|
|
1296
|
+
* entries need data, spawn a single fetch request for the whole bundle.
|
|
1297
|
+
*
|
|
1298
|
+
* Returns true if a fulfilled entry in the bundle reported that a runtime
|
|
1299
|
+
* request would return more content than the entry contains
|
|
1300
|
+
* (needsRuntimeRequest, derived at write time from the response that
|
|
1301
|
+
* produced the entry). The callers surface this signal to the per-segment
|
|
1302
|
+
* decision point in pingNewPartOfCacheComponentsTree (and its analog for
|
|
1303
|
+
* the head in pingStaticHead), which uses it during a static attempt to
|
|
1304
|
+
* decide whether to fall back to a runtime prefetch.
|
|
1305
|
+
*/ function pingSegmentBundle(now, task, route, routeKey, tree, segments, // Per-pass static walk strategy; see pingRootRouteTree where it's derived.
|
|
1306
|
+
fetchStrategy, // False when finishing an open bundle chain on a runtime-prefetch bailout
|
|
1307
|
+
// (finishStaticBundleOnRuntimeBailout). The finish exists only to fetch
|
|
1308
|
+
// data the batched runtime request won't cover — Empty entries in the
|
|
1309
|
+
// chain — so it must not spawn revalidations over entries that are
|
|
1310
|
+
// already settled or in flight: the chain's terminal segments are inside
|
|
1311
|
+
// the deopted subtree, and re-fetching their static bundle would at best
|
|
1312
|
+
// duplicate the runtime request and at worst replace a runtime-complete
|
|
1313
|
+
// entry (e.g. a runtime App Shell) with a less complete static fallback
|
|
1314
|
+
// response.
|
|
1315
|
+
spawnRevalidations) {
|
|
1316
|
+
let segmentCount = 0;
|
|
1317
|
+
let needsFetch = false;
|
|
1318
|
+
let needsRuntimeRequest = false;
|
|
1319
|
+
let node = segments;
|
|
1320
|
+
while(node !== null){
|
|
1321
|
+
segmentCount++;
|
|
1322
|
+
const nodeEntry = node.entry;
|
|
1323
|
+
const nodeTree = node.tree;
|
|
1324
|
+
if (nodeEntry === null || nodeTree === null) {
|
|
1325
|
+
node = node.parent;
|
|
1326
|
+
continue;
|
|
1327
|
+
}
|
|
1328
|
+
switch(nodeEntry.status){
|
|
1329
|
+
case _cache.EntryStatus.Empty:
|
|
1330
|
+
(0, _cache.upgradeToPendingSegment)(nodeEntry, fetchStrategy);
|
|
1331
|
+
needsFetch = true;
|
|
1332
|
+
// The pass blocks on every request it spawns, not just requests it
|
|
1333
|
+
// finds already in flight.
|
|
1334
|
+
blockTaskOnPendingResponse(task, nodeEntry);
|
|
944
1335
|
break;
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
// background priority.
|
|
964
|
-
if (background(task)) {
|
|
965
|
-
// TODO: Instead of speculatively revalidating, consider including
|
|
966
|
-
// `hasLoading` in the route tree prefetch response.
|
|
967
|
-
pingPPRSegmentRevalidation(now, route, routeKey, tree);
|
|
968
|
-
}
|
|
969
|
-
break;
|
|
970
|
-
default:
|
|
971
|
-
segment.fetchStrategy;
|
|
1336
|
+
case _cache.EntryStatus.Pending:
|
|
1337
|
+
if (spawnRevalidations && // During a static shell attempt, never spawn revalidations — just
|
|
1338
|
+
// wait for the in-flight response (blocked below); its sufficiency
|
|
1339
|
+
// is checked on the re-run pass.
|
|
1340
|
+
fetchStrategy === _types.FetchStrategy.PPR && (0, _cache.canNewFetchStrategyProvideMoreContent)(nodeEntry.fetchStrategy, fetchStrategy)) {
|
|
1341
|
+
const revalidatingEntry = (0, _cache.readOrCreateRevalidatingSegmentEntry)(now, task.segmentCacheMap, fetchStrategy, nodeTree);
|
|
1342
|
+
if (revalidatingEntry.status === _cache.EntryStatus.Empty) {
|
|
1343
|
+
(0, _cache.upgradeToPendingSegment)(revalidatingEntry, fetchStrategy);
|
|
1344
|
+
node.entry = revalidatingEntry;
|
|
1345
|
+
needsFetch = true;
|
|
1346
|
+
// Block on the revalidation request we just spawned, in
|
|
1347
|
+
// addition to the original in-flight entry (blocked below).
|
|
1348
|
+
blockTaskOnPendingResponse(task, revalidatingEntry);
|
|
1349
|
+
} else {
|
|
1350
|
+
node.entry = null;
|
|
1351
|
+
}
|
|
1352
|
+
} else {
|
|
1353
|
+
node.entry = null;
|
|
972
1354
|
}
|
|
1355
|
+
blockTaskOnPendingResponse(task, nodeEntry);
|
|
973
1356
|
break;
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
//
|
|
978
|
-
//
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
//
|
|
991
|
-
//
|
|
992
|
-
//
|
|
993
|
-
//
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
1357
|
+
case _cache.EntryStatus.Rejected:
|
|
1358
|
+
if (spawnRevalidations && // During a static shell attempt, a rejected entry is skipped
|
|
1359
|
+
// outright: no retry revalidation, and — deliberately — no runtime
|
|
1360
|
+
// fallback either (per-segment rejection semantics; the entry's
|
|
1361
|
+
// staleAt governs when it may be retried). Note that the cache
|
|
1362
|
+
// path encodes "no shell exists" (a static response whose shell
|
|
1363
|
+
// byte offset is 0, i.e. the page wasn't produced by staged
|
|
1364
|
+
// rendering) as a rejection too, so such segments get no shell
|
|
1365
|
+
// prefetch at all — an edge that shouldn't occur for hint-set
|
|
1366
|
+
// Cache Components routes.
|
|
1367
|
+
fetchStrategy === _types.FetchStrategy.PPR && (0, _cache.canNewFetchStrategyProvideMoreContent)(nodeEntry.fetchStrategy, fetchStrategy)) {
|
|
1368
|
+
const revalidatingEntry = (0, _cache.readOrCreateRevalidatingSegmentEntry)(now, task.segmentCacheMap, fetchStrategy, nodeTree);
|
|
1369
|
+
if (revalidatingEntry.status === _cache.EntryStatus.Empty) {
|
|
1370
|
+
(0, _cache.upgradeToPendingSegment)(revalidatingEntry, fetchStrategy);
|
|
1371
|
+
node.entry = revalidatingEntry;
|
|
1372
|
+
needsFetch = true;
|
|
1373
|
+
// Block on the retry revalidation we just spawned, like any
|
|
1374
|
+
// other pending response. If the retry succeeds, its upsert
|
|
1375
|
+
// evicts the rejected entry (see evictShadowingSegmentEntries
|
|
1376
|
+
// in cache.ts) and the re-run pass reads the healed data. If it
|
|
1377
|
+
// rejects too, the re-run observes a settled revalidation and
|
|
1378
|
+
// moves on.
|
|
1379
|
+
blockTaskOnPendingResponse(task, revalidatingEntry);
|
|
1380
|
+
} else {
|
|
1381
|
+
node.entry = null;
|
|
1382
|
+
}
|
|
1383
|
+
} else {
|
|
1384
|
+
node.entry = null;
|
|
998
1385
|
}
|
|
999
1386
|
break;
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1387
|
+
case _cache.EntryStatus.Fulfilled:
|
|
1388
|
+
{
|
|
1389
|
+
const runtimeWouldProvideMore = wouldRuntimeRequestProvideMore(nodeEntry, fetchStrategy);
|
|
1390
|
+
if (runtimeWouldProvideMore) {
|
|
1391
|
+
// A runtime request would return more content for this segment
|
|
1392
|
+
// than the entry contains. Surface it via the return value, so the
|
|
1393
|
+
// caller can deopt this subtree to a runtime prefetch.
|
|
1394
|
+
needsRuntimeRequest = true;
|
|
1395
|
+
}
|
|
1396
|
+
// For entries below this phase's tier, upgrade during the phase
|
|
1397
|
+
// itself — no background deferral, since the whole point of the
|
|
1398
|
+
// Speculative phase is to bring the cache up to the
|
|
1399
|
+
// per-link-concrete tier. `isPartial` ensures a complete entry isn't
|
|
1400
|
+
// re-fetched.
|
|
1401
|
+
//
|
|
1402
|
+
// Exception: when a runtime request would return more AND this walk
|
|
1403
|
+
// permits one, skip the static path entirely. The runtime request
|
|
1404
|
+
// covers this segment and supersedes anything a static fetch could
|
|
1405
|
+
// add, so a static upgrade would at best duplicate it — delivering
|
|
1406
|
+
// the same content twice — and at worst replace runtime content with
|
|
1407
|
+
// static content.
|
|
1408
|
+
//
|
|
1409
|
+
// When no runtime request is permitted, the signal is irrelevant:
|
|
1410
|
+
// nothing can act on it, so it must not suppress the static upgrade.
|
|
1411
|
+
// That's what keeps a link prefetching static content on top of a
|
|
1412
|
+
// cached shell.
|
|
1413
|
+
const willBeSupersededByRuntimeRequest = runtimeWouldProvideMore && walkRequiresRuntimeCompleteness(fetchStrategy, route);
|
|
1414
|
+
// Check if we should attempt to upgrade a fallback ISR response to
|
|
1415
|
+
// a concrete version.
|
|
1416
|
+
const isUpgradeableISRFallbackRetry = nodeEntry.isUpgradeableISRFallback && // If the status is empty, then we haven't yet attempted to upgrade
|
|
1417
|
+
// the fallback.
|
|
1418
|
+
//
|
|
1419
|
+
// If the status is fulfilled, then the fallback was
|
|
1420
|
+
// successfully upgraded to a concrete version.
|
|
1421
|
+
//
|
|
1422
|
+
// Do not attempt to upgrade if the status is Pending or Rejected.
|
|
1423
|
+
(task.fallbackRetryStatus === _cache.EntryStatus.Empty || task.fallbackRetryStatus === _cache.EntryStatus.Fulfilled);
|
|
1424
|
+
if (spawnRevalidations && !willBeSupersededByRuntimeRequest && (nodeEntry.isPartial && (0, _cache.canNewFetchStrategyProvideMoreContent)(nodeEntry.fetchStrategy, fetchStrategy) || isUpgradeableISRFallbackRetry)) {
|
|
1425
|
+
const revalidatingEntry = (0, _cache.readOrCreateRevalidatingSegmentEntry)(now, task.segmentCacheMap, fetchStrategy, nodeTree);
|
|
1426
|
+
if (revalidatingEntry.status === _cache.EntryStatus.Empty) {
|
|
1427
|
+
(0, _cache.upgradeToPendingSegment)(revalidatingEntry, fetchStrategy);
|
|
1428
|
+
node.entry = revalidatingEntry;
|
|
1429
|
+
needsFetch = true;
|
|
1430
|
+
// The pass blocks on every request it spawns, including
|
|
1431
|
+
// revalidations of an already-fulfilled entry.
|
|
1432
|
+
blockTaskOnPendingResponse(task, revalidatingEntry);
|
|
1433
|
+
} else {
|
|
1434
|
+
// A non-empty revalidating entry means a request is already in
|
|
1435
|
+
// flight (or recently settled), so we dedupe and don't issue a
|
|
1436
|
+
// competing one — including for ISR-fallback upgrades, which then
|
|
1437
|
+
// share the same revalidation across tasks.
|
|
1438
|
+
node.entry = null;
|
|
1439
|
+
if (revalidatingEntry.status === _cache.EntryStatus.Pending) {
|
|
1440
|
+
// The deduped-against revalidation is still in flight, and this
|
|
1441
|
+
// pass depends on its response. Wait for it before the phase
|
|
1442
|
+
// can complete. (A settled revalidation we chose not to use
|
|
1443
|
+
// needs no waiting and is not a prefetch failure — the base
|
|
1444
|
+
// entry here is already Fulfilled.)
|
|
1445
|
+
blockTaskOnPendingResponse(task, revalidatingEntry);
|
|
1446
|
+
}
|
|
1447
|
+
}
|
|
1448
|
+
} else {
|
|
1449
|
+
node.entry = null;
|
|
1450
|
+
}
|
|
1451
|
+
break;
|
|
1452
|
+
}
|
|
1453
|
+
default:
|
|
1454
|
+
nodeEntry;
|
|
1455
|
+
}
|
|
1456
|
+
node = node.parent;
|
|
1457
|
+
}
|
|
1458
|
+
if (needsFetch) {
|
|
1459
|
+
spawnPrefetchSubtask((0, _cache.fetchSegmentsOnCacheMiss)(task, route, routeKey, tree, segments, segmentCount, fetchStrategy));
|
|
1005
1460
|
}
|
|
1006
|
-
|
|
1007
|
-
// there's nothing else for us to do (except write the server data into the
|
|
1008
|
-
// entry, which is handled by `fetchSegmentOnCacheMiss`).
|
|
1461
|
+
return needsRuntimeRequest;
|
|
1009
1462
|
}
|
|
1010
1463
|
/**
|
|
1011
|
-
*
|
|
1012
|
-
*
|
|
1013
|
-
*
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1464
|
+
* During the tree walk, decide whether this segment should be added to the
|
|
1465
|
+
* in-progress bundle (if it has InlinedIntoChild) or finalize the bundle
|
|
1466
|
+
* and ping it, triggering a fetch if any of its entries need data (if it
|
|
1467
|
+
* doesn't). Returns the updated bundle to pass to children (null if the
|
|
1468
|
+
* bundle was finalized here), along with the needs-runtime signal from the
|
|
1469
|
+
* bundle ping, if one happened (always false otherwise).
|
|
1470
|
+
*/ function accumulateSegmentBundle(now, task, route, tree, parentBundle, // Per-pass static walk strategy; see pingRootRouteTree where it's derived.
|
|
1471
|
+
// PPR for the normal static bundling walk; StaticShell during the Shell
|
|
1472
|
+
// phase's static App Shell attempt, whose entries are keyed at the shell
|
|
1473
|
+
// vary paths.
|
|
1474
|
+
fetchStrategy, // False when finishing a chain on a runtime-prefetch bailout; see
|
|
1475
|
+
// pingSegmentBundle.
|
|
1476
|
+
spawnRevalidations) {
|
|
1477
|
+
// Prefetching is disabled for this segment (prefetch: 'force-disabled'):
|
|
1478
|
+
// the server emits null for its slot, and it participates in the bundle
|
|
1479
|
+
// chain with null tree/entry so the null-slot positions line up.
|
|
1480
|
+
// (Partial Prefetching segments are NOT in this mask — the server emits
|
|
1481
|
+
// static data for them unconditionally.) Intentionally not gated by the
|
|
1482
|
+
// prefetch inlining flag: we never statically prefetch unprefetchable
|
|
1483
|
+
// segments.
|
|
1484
|
+
if (tree.prefetchHints & _approutertypes.StaticPrefetchDisabled) {
|
|
1485
|
+
return {
|
|
1486
|
+
bundle: {
|
|
1487
|
+
tree: null,
|
|
1488
|
+
entry: null,
|
|
1489
|
+
parent: parentBundle
|
|
1490
|
+
},
|
|
1491
|
+
needsRuntimeRequest: false
|
|
1492
|
+
};
|
|
1021
1493
|
}
|
|
1022
|
-
|
|
1494
|
+
const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, task.segmentCacheMap, fetchStrategy, tree);
|
|
1495
|
+
if (process.env.__NEXT_PREFETCH_INLINING && tree.prefetchHints & _approutertypes.PrefetchHint.InlinedIntoChild) {
|
|
1496
|
+
if (segment.status === _cache.EntryStatus.Pending) {
|
|
1497
|
+
// The chain this entry joins may be dropped before it's ever pinged
|
|
1498
|
+
// (see the drop sites in pingNewPartOfCacheComponentsTree), and only
|
|
1499
|
+
// the ping blocks on Pending entries. Register on the in-flight
|
|
1500
|
+
// response at read time instead, so the pass observes it before the
|
|
1501
|
+
// phase can complete even if the chain is dropped. When the chain does
|
|
1502
|
+
// get pinged, the ping's own registration dedupes against this one.
|
|
1503
|
+
blockTaskOnPendingResponse(task, segment);
|
|
1504
|
+
}
|
|
1505
|
+
return {
|
|
1506
|
+
bundle: {
|
|
1507
|
+
tree,
|
|
1508
|
+
entry: segment,
|
|
1509
|
+
parent: parentBundle
|
|
1510
|
+
},
|
|
1511
|
+
// No bundle ping happens here, but the node's own entry may already be
|
|
1512
|
+
// fulfilled and insufficient. Report that signal directly: the chain
|
|
1513
|
+
// ping only reaches the terminal descendant, and if that descendant is
|
|
1514
|
+
// itself a decision point it consumes the signal for its own subtree,
|
|
1515
|
+
// leaving this ancestor's insufficiency invisible to the decision
|
|
1516
|
+
// point above it.
|
|
1517
|
+
needsRuntimeRequest: segment.status === _cache.EntryStatus.Fulfilled && wouldRuntimeRequestProvideMore(segment, fetchStrategy)
|
|
1518
|
+
};
|
|
1519
|
+
}
|
|
1520
|
+
// Not bundled. Build a single-node bundle and ping it. If this page
|
|
1521
|
+
// accepts the head (HeadInlinedIntoSelf), prepend the head's cache entry
|
|
1522
|
+
// to the bundle.
|
|
1523
|
+
let effectiveParent = parentBundle;
|
|
1524
|
+
if (process.env.__NEXT_PREFETCH_INLINING && tree.prefetchHints & _approutertypes.PrefetchHint.HeadInlinedIntoSelf) {
|
|
1525
|
+
effectiveParent = {
|
|
1526
|
+
tree: route.metadata,
|
|
1527
|
+
entry: (0, _cache.readOrCreateSegmentCacheEntry)(now, task.segmentCacheMap, fetchStrategy, route.metadata),
|
|
1528
|
+
parent: parentBundle
|
|
1529
|
+
};
|
|
1530
|
+
}
|
|
1531
|
+
const segments = {
|
|
1532
|
+
tree,
|
|
1533
|
+
entry: segment,
|
|
1534
|
+
parent: effectiveParent
|
|
1535
|
+
};
|
|
1536
|
+
const needsRuntimeRequest = pingSegmentBundle(now, task, route, task.key, tree, segments, fetchStrategy, spawnRevalidations);
|
|
1537
|
+
return {
|
|
1538
|
+
bundle: null,
|
|
1539
|
+
needsRuntimeRequest
|
|
1540
|
+
};
|
|
1023
1541
|
}
|
|
1024
|
-
function
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1542
|
+
function finishStaticBundleOnRuntimeBailout(now, task, route, tree, parentBundle, // The same static walk strategy the parent bundle was accumulated with.
|
|
1543
|
+
// Any needs-runtime signal from finishing the bundle is dropped: the
|
|
1544
|
+
// caller is already deopting this subtree to a runtime prefetch.
|
|
1545
|
+
fetchStrategy) {
|
|
1546
|
+
const bundle = accumulateSegmentBundle(now, task, route, tree, parentBundle, fetchStrategy, // The batched runtime request covers the deopted subtree; only fetch
|
|
1547
|
+
// Empty entries the chain would otherwise strand — never spawn
|
|
1548
|
+
// revalidations over settled or in-flight ones. See pingSegmentBundle.
|
|
1549
|
+
false).bundle;
|
|
1550
|
+
if (bundle === null) {
|
|
1551
|
+
return;
|
|
1028
1552
|
}
|
|
1029
1553
|
if (tree.slots !== null) {
|
|
1030
|
-
for(const
|
|
1031
|
-
|
|
1554
|
+
for (const childTree of tree.slots.values()){
|
|
1555
|
+
if (childTree.prefetchHints & _approutertypes.PrefetchHint.ParentInlinedIntoSelf) {
|
|
1556
|
+
finishStaticBundleOnRuntimeBailout(now, task, route, childTree, bundle, fetchStrategy);
|
|
1557
|
+
return;
|
|
1558
|
+
}
|
|
1032
1559
|
}
|
|
1033
1560
|
}
|
|
1034
1561
|
}
|
|
1035
|
-
function
|
|
1036
|
-
const revalidatingSegment = (0, _cache.readOrCreateRevalidatingSegmentEntry)(now,
|
|
1037
|
-
switch(revalidatingSegment.status){
|
|
1038
|
-
case _cache.EntryStatus.Empty:
|
|
1039
|
-
// Spawn a prefetch request. The fetch function handles upserting
|
|
1040
|
-
// the entry at the correct fulfilled vary path upon completion.
|
|
1041
|
-
spawnPrefetchSubtask((0, _cache.fetchSegmentOnCacheMiss)(route, (0, _cache.upgradeToPendingSegment)(revalidatingSegment, _types.FetchStrategy.PPR), routeKey, tree));
|
|
1042
|
-
break;
|
|
1043
|
-
case _cache.EntryStatus.Pending:
|
|
1044
|
-
break;
|
|
1045
|
-
case _cache.EntryStatus.Fulfilled:
|
|
1046
|
-
case _cache.EntryStatus.Rejected:
|
|
1047
|
-
break;
|
|
1048
|
-
default:
|
|
1049
|
-
revalidatingSegment;
|
|
1050
|
-
}
|
|
1051
|
-
}
|
|
1052
|
-
function pingFullSegmentRevalidation(now, tree, fetchStrategy) {
|
|
1053
|
-
const revalidatingSegment = (0, _cache.readOrCreateRevalidatingSegmentEntry)(now, fetchStrategy, tree);
|
|
1562
|
+
function pingFullSegmentRevalidation(now, task, tree, fetchStrategy) {
|
|
1563
|
+
const revalidatingSegment = (0, _cache.readOrCreateRevalidatingSegmentEntry)(now, task.segmentCacheMap, fetchStrategy, tree);
|
|
1054
1564
|
if (revalidatingSegment.status === _cache.EntryStatus.Empty) {
|
|
1055
1565
|
// During a Full/PPRRuntime prefetch, a single dynamic request is made for all the
|
|
1056
1566
|
// segments that we need. So we don't initiate a request here directly. By
|
|
@@ -1067,7 +1577,7 @@ function pingFullSegmentRevalidation(now, tree, fetchStrategy) {
|
|
|
1067
1577
|
if ((0, _cache.canNewFetchStrategyProvideMoreContent)(nonEmptyRevalidatingSegment.fetchStrategy, fetchStrategy)) {
|
|
1068
1578
|
// The existing revalidation was fetched using a less specific strategy.
|
|
1069
1579
|
// Reset it and start a new revalidation.
|
|
1070
|
-
const emptySegment = (0, _cache.overwriteRevalidatingSegmentCacheEntry)(now, fetchStrategy, tree);
|
|
1580
|
+
const emptySegment = (0, _cache.overwriteRevalidatingSegmentCacheEntry)(now, task.segmentCacheMap, fetchStrategy, tree);
|
|
1071
1581
|
const pendingSegment = (0, _cache.upgradeToPendingSegment)(emptySegment, fetchStrategy);
|
|
1072
1582
|
// The upsert is handled by fulfillEntrySpawnedByRuntimePrefetch
|
|
1073
1583
|
// when the dynamic prefetch response is written into the cache.
|
|
@@ -1076,6 +1586,9 @@ function pingFullSegmentRevalidation(now, tree, fetchStrategy) {
|
|
|
1076
1586
|
switch(nonEmptyRevalidatingSegment.status){
|
|
1077
1587
|
case _cache.EntryStatus.Pending:
|
|
1078
1588
|
// There's already an in-progress prefetch that includes this segment.
|
|
1589
|
+
// The pass needs the contents of that response, too. Wait for it
|
|
1590
|
+
// before the phase can complete.
|
|
1591
|
+
blockTaskOnPendingResponse(task, nonEmptyRevalidatingSegment);
|
|
1079
1592
|
return null;
|
|
1080
1593
|
case _cache.EntryStatus.Fulfilled:
|
|
1081
1594
|
case _cache.EntryStatus.Rejected:
|
|
@@ -1101,11 +1614,19 @@ function doesCurrentSegmentMatchCachedSegment(route, currentSegment, cachedSegme
|
|
|
1101
1614
|
// _and_ the server response format, when conceptually those are three
|
|
1102
1615
|
// different things and treated in different ways. We should encode more of
|
|
1103
1616
|
// this information into the type design so mistakes are less likely.
|
|
1104
|
-
return currentSegment === (0, _segment.addSearchParamsIfPageSegment)(_segment.PAGE_SEGMENT_KEY,
|
|
1617
|
+
return currentSegment === (0, _segment.addSearchParamsIfPageSegment)(_segment.PAGE_SEGMENT_KEY, (0, _routeparams.urlSearchParamsToParsedUrlQuery)(new URLSearchParams(route.renderedSearch)));
|
|
1105
1618
|
}
|
|
1106
1619
|
// Non-page segments are compared using the same function as the server
|
|
1107
1620
|
return (0, _matchsegments.matchSegment)(cachedSegment, currentSegment);
|
|
1108
1621
|
}
|
|
1622
|
+
function subtreeHasSpeculativePrefetch(fetchStrategy, prefetchHints) {
|
|
1623
|
+
return(// Check if this is a "full" prefetch (<Link prefetch={true}>).
|
|
1624
|
+
fetchStrategy === _types.FetchStrategy.Full || // Check if something in this subtree is configured to be eagerly
|
|
1625
|
+
// prefetched at the route level. Segments that don't opt into Partial
|
|
1626
|
+
// Prefetching are marked eager, so a route without any Partial Prefetching
|
|
1627
|
+
// still speculatively prefetches everything.
|
|
1628
|
+
(prefetchHints & _approutertypes.PrefetchHint.SubtreeHasEagerPrefetch) !== 0);
|
|
1629
|
+
}
|
|
1109
1630
|
// -----------------------------------------------------------------------------
|
|
1110
1631
|
// The remainder of the module is a MinHeap implementation. Try not to put any
|
|
1111
1632
|
// logic below here unless it's related to the heap algorithm. We can extract
|