@karan171996/metricflow 0.1.4 → 0.1.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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +3 -2
- package/.next/build/chunks/[root-of-the-server]__1kki86f._.js +2 -2
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_1gfkiq9._.js +1 -1
- package/.next/build/chunks/{node_modules_20v-8wl._.js → node_modules__pnpm_0q5gz_g._.js} +181 -230
- package/.next/build-manifest.json +7 -7
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/next-minimal-server.js.nft.json +1 -1
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +14 -14
- package/.next/routes-manifest.json +11 -3
- package/.next/server/app/_global-error/page/build-manifest.json +4 -4
- package/.next/server/app/_global-error/page.js +7 -7
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +8 -9
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +12 -13
- package/.next/server/app/_global-error.segments/_full.segment.rsc +8 -9
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page/build-manifest.json +4 -4
- package/.next/server/app/_not-found/page.js +10 -10
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +18 -18
- package/.next/server/app/_not-found.segments/_full.segment.rsc +18 -18
- package/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +7 -7
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/analyze/route.js +5 -5
- package/.next/server/app/api/analyze/route.js.nft.json +1 -1
- package/.next/server/app/api/connect/route.js +5 -5
- package/.next/server/app/api/connect/route.js.nft.json +1 -1
- package/.next/server/app/api/health/route.js +4 -4
- package/.next/server/app/api/health/route.js.nft.json +1 -1
- package/.next/server/app/api/metrics/route.js +6 -6
- package/.next/server/app/api/metrics/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/route.js +4 -4
- package/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/server/app/api/setup/ai/route.js +5 -5
- package/.next/server/app/api/setup/ai/route.js.nft.json +1 -1
- package/.next/server/app/api/setup/route.js +5 -5
- package/.next/server/app/api/setup/route.js.nft.json +1 -1
- package/.next/server/app/api/timings/route.js +4 -4
- package/.next/server/app/api/timings/route.js.nft.json +1 -1
- package/.next/server/app/connect/page/build-manifest.json +4 -4
- package/.next/server/app/connect/page.js +11 -11
- package/.next/server/app/connect/page.js.nft.json +1 -1
- package/.next/server/app/connect/page_client-reference-manifest.js +1 -1
- package/.next/server/app/connect.html +2 -2
- package/.next/server/app/connect.rsc +20 -20
- package/.next/server/app/connect.segments/_full.segment.rsc +20 -20
- package/.next/server/app/connect.segments/_index.segment.rsc +11 -11
- package/.next/server/app/connect.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/connect.segments/connect/__PAGE__.segment.rsc +12 -12
- package/.next/server/app/icon.svg/route/app-paths-manifest.json +3 -0
- package/.next/server/app/icon.svg/route.js +7 -0
- package/.next/server/app/icon.svg/route.js.nft.json +1 -0
- package/.next/server/app/icon.svg.body +4 -0
- package/.next/server/app/icon.svg.meta +1 -0
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +21 -21
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +7 -7
- package/.next/server/app/index.segments/_full.segment.rsc +21 -21
- package/.next/server/app/index.segments/_index.segment.rsc +11 -11
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/page/build-manifest.json +4 -4
- package/.next/server/app/page.js +11 -11
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/performance/[slug]/page/build-manifest.json +4 -4
- package/.next/server/app/performance/[slug]/page.js +13 -12
- package/.next/server/app/performance/[slug]/page.js.nft.json +1 -1
- package/.next/server/app/performance/[slug]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/performance/page/build-manifest.json +4 -4
- package/.next/server/app/performance/page.js +11 -11
- package/.next/server/app/performance/page.js.nft.json +1 -1
- package/.next/server/app/performance/page_client-reference-manifest.js +1 -1
- package/.next/server/app/performance.html +2 -2
- package/.next/server/app/performance.rsc +21 -21
- package/.next/server/app/performance.segments/_full.segment.rsc +21 -21
- package/.next/server/app/performance.segments/_index.segment.rsc +11 -11
- package/.next/server/app/performance.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/performance.segments/performance/__PAGE__.segment.rsc +32 -31
- package/.next/server/app/settings/page/build-manifest.json +4 -4
- package/.next/server/app/settings/page.js +12 -12
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +32 -32
- package/.next/server/app/settings.segments/_full.segment.rsc +32 -32
- package/.next/server/app/settings.segments/_index.segment.rsc +11 -11
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +27 -27
- package/.next/server/app/setup/page/build-manifest.json +4 -4
- package/.next/server/app/setup/page.js +11 -11
- package/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/server/app/setup.html +2 -2
- package/.next/server/app/setup.rsc +21 -21
- package/.next/server/app/setup.segments/_full.segment.rsc +21 -21
- package/.next/server/app/setup.segments/_index.segment.rsc +11 -11
- package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +13 -13
- package/.next/server/app/tools/[tool]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/tools/[tool]/page/build-manifest.json +19 -0
- package/.next/server/app/tools/[tool]/page/next-font-manifest.json +6 -0
- package/.next/server/app/tools/[tool]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/tools/[tool]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/tools/[tool]/page.js +17 -0
- package/.next/server/app/tools/[tool]/page.js.nft.json +1 -0
- package/.next/server/app/tools/[tool]/page_client-reference-manifest.js +3 -0
- package/.next/server/app-paths-manifest.json +3 -2
- package/.next/server/chunks/{[externals]__162fo45._.js → [externals]__1o8qm3w._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__05mqvyo._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0luj3_8._.js → [root-of-the-server]__0eo1oa6._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0fkj1-q._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0i0nt_u._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1su9v2-._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1wcikrf._.js +5 -0
- package/.next/server/chunks/_08xo8nu._.js +22 -0
- package/.next/server/chunks/_0w8wvdn._.js +3 -0
- package/.next/server/chunks/_0wct7-r._.js +17 -0
- package/.next/server/chunks/_1f80q3b._.js +158 -0
- package/.next/server/chunks/_1l9d64o._.js +3 -0
- package/.next/server/chunks/_1lktrox._.js +8 -0
- package/.next/server/chunks/_1ze9o4l._.js +8 -0
- package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_1r2h_ub.js +3 -0
- package/.next/server/chunks/ssr/{node_modules_cn_dist_index_166wuka.js → 0f2__cn_dist_index_1jh2egc.js} +2 -2
- package/.next/server/chunks/ssr/0x0c_next_dist_03da18h._.js +6 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_1v8aef8._.js → 0x0c_next_dist_0lkq344._.js} +2 -2
- package/.next/server/chunks/ssr/0x0c_next_dist_1icgwks._.js +151 -0
- package/.next/server/chunks/ssr/0x0c_next_dist_client_components_1z4ahr3._.js +3 -0
- package/.next/server/chunks/ssr/0x0c_next_dist_client_components_builtin_forbidden_0pm41ij.js +3 -0
- package/.next/server/chunks/ssr/0x0c_next_dist_client_components_builtin_global-error_1-wtk5-.js +3 -0
- package/.next/server/chunks/ssr/0x0c_next_dist_client_components_builtin_unauthorized_0v3_y-3.js +3 -0
- package/.next/server/chunks/ssr/{node_modules_next_dist_client_components_server-async-storage_0t1dato.js → 0x0c_next_dist_client_components_server-async-storage_1-oepaa.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__02c3m72._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__031i31p._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__1c8dejo._.js → [root-of-the-server]__07myivi._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__0g1dtzd._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0kocjhm._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0l4t71c._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0tikq3c._.js +14 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__1vxra_4._.js → [root-of-the-server]__1-0b897._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__146cm0r._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1cl7b4r._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1mydt_n._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1thxzex._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__18hr860._.js → [root-of-the-server]__1wd0g6g._.js} +3 -3
- package/.next/server/chunks/ssr/_02_o-ya._.js +6 -0
- package/.next/server/chunks/ssr/_09540a5._.js +151 -0
- package/.next/server/chunks/ssr/{_1b_fov9._.js → _0defuav._.js} +2 -2
- package/.next/server/chunks/ssr/_0e_s0v0._.js +3 -0
- package/.next/server/chunks/ssr/_0htqt7_._.js +18 -0
- package/.next/server/chunks/ssr/_0me-cg5._.js +3 -0
- package/.next/server/chunks/ssr/{_20txlee._.js → _13m9nev._.js} +2 -2
- package/.next/server/chunks/ssr/_1idvrlk._.js +7 -0
- package/.next/server/chunks/ssr/_1qy3_r5._.js +3 -0
- package/.next/server/chunks/ssr/_1rd2o5p._.js +3 -0
- package/.next/server/chunks/ssr/_1t7ag6f._.js +3 -0
- package/.next/server/chunks/ssr/{_1rkc3oc._.js → _1tpe22e._.js} +3 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_tools_[tool]_page_actions_0-u-_p-.js +3 -0
- package/.next/server/chunks/ssr/app_layout_tsx_2144vk_._.js +1 -1
- package/.next/server/chunks/ssr/app_loading_tsx_0a1flg9._.js +1 -1
- package/.next/server/chunks/ssr/app_performance_[slug]_loading_tsx_0d5z78a._.js +1 -1
- package/.next/server/chunks/ssr/app_performance_loading_tsx_1bq2nq9._.js +1 -1
- package/.next/server/chunks/ssr/app_settings_loading_tsx_0nv_78v._.js +1 -1
- package/.next/server/chunks/ssr/components_0j32dj5._.js +1 -1
- package/.next/server/chunks/ssr/{node_modules_1wax83z._.js → node_modules__pnpm_0hf3oiy._.js} +3 -3
- package/.next/server/middleware-build-manifest.js +7 -7
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/06qwhmc60u5rw.js +5 -0
- package/.next/static/chunks/1-4lacz2t2rmw.js +4 -0
- package/.next/static/chunks/11ea1elg0081p.js +1 -0
- package/.next/static/chunks/12nwz8qd2ocwk.css +1 -0
- package/.next/static/chunks/1ou_bh9mvu5x1.js +1 -0
- package/.next/static/chunks/1t-tmstauvn0u.js +1 -0
- package/.next/static/chunks/23d4pgenwzdj5.js +1 -0
- package/.next/static/chunks/2dpz7gbtyu5go.js +1 -0
- package/.next/static/chunks/2rz3rt3tdd_p4.js +1 -0
- package/.next/static/chunks/3dfy6smxuju__.js +1 -0
- package/.next/static/chunks/{2uf-bm2nz17t-.js → 3dwrl3svcft9m.js} +1 -1
- package/.next/static/chunks/3fmhqgzb47j23.js +1 -0
- package/.next/static/chunks/{212boumyeyva9.js → 3y_9ajtx5_9ky.js} +2 -2
- package/.next/static/chunks/42z_0gfabqpr_.js +31 -0
- package/.next/static/chunks/44rowux-iee-x.js +22 -0
- package/.next/static/chunks/{turbopack-2-rd7l6sk4a9l.js → turbopack-00gi3z1duuih6.js} +1 -1
- package/.next/static/media/icon.23mz8iwcatff2.svg +4 -0
- package/.next/trace +1 -1
- package/.next/trace-build +1 -1
- package/README.md +153 -65
- package/bin/cli.mjs +7 -2
- package/package.json +16 -17
- package/.next/server/app/favicon.ico/route/app-paths-manifest.json +0 -3
- package/.next/server/app/favicon.ico/route.js +0 -7
- package/.next/server/app/favicon.ico/route.js.nft.json +0 -1
- package/.next/server/app/favicon.ico.body +0 -0
- package/.next/server/app/favicon.ico.meta +0 -1
- package/.next/server/chunks/[root-of-the-server]__027a1hx._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__14tfjrn._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1fj5wte._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1lxxc0h._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1uv-wzy._.js +0 -5
- package/.next/server/chunks/_0g9k22b._.js +0 -8
- package/.next/server/chunks/_0zwkfj-._.js +0 -8
- package/.next/server/chunks/_10b5gsp._.js +0 -22
- package/.next/server/chunks/_1494cut._.js +0 -3
- package/.next/server/chunks/_1gvvd7n._.js +0 -158
- package/.next/server/chunks/_1pe45_3._.js +0 -17
- package/.next/server/chunks/_1qtlv__._.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_0g2jjls.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__036j_vr._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__07u4jsj._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0ev464o._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0f5axvr._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0hg5gib._.js +0 -33
- package/.next/server/chunks/ssr/[root-of-the-server]__0tmkhxy._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__1mwg_vi._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__1p_6ezv._.js +0 -14
- package/.next/server/chunks/ssr/[root-of-the-server]__1uohrpp._.js +0 -3
- package/.next/server/chunks/ssr/_0c7qo1d._.js +0 -3
- package/.next/server/chunks/ssr/_0dbmzjx._.js +0 -166
- package/.next/server/chunks/ssr/_0fa4_2r._.js +0 -3
- package/.next/server/chunks/ssr/_0v7wda8._.js +0 -3
- package/.next/server/chunks/ssr/_1d1ipgp._.js +0 -6
- package/.next/server/chunks/ssr/_1l_271l._.js +0 -3
- package/.next/server/chunks/ssr/_1p5i72g._.js +0 -151
- package/.next/server/chunks/ssr/_1q7r2qu._.js +0 -7
- package/.next/server/chunks/ssr/node_modules_next_dist_0nkkbfv._.js +0 -6
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js +0 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js +0 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0q-w892.js +0 -3
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js +0 -3
- package/.next/static/chunks/0-xs4v9s677gv.js +0 -1
- package/.next/static/chunks/0no0cbj4p6v97.js +0 -5
- package/.next/static/chunks/1kpyel_do_nn_.js +0 -1
- package/.next/static/chunks/1rj7ns8rte9vc.js +0 -1
- package/.next/static/chunks/1u5zan5bs9a7v.js +0 -31
- package/.next/static/chunks/2qnz-czvmzvfy.js +0 -1
- package/.next/static/chunks/2wylvi3d9igvb.css +0 -1
- package/.next/static/chunks/3-kx-5mj07qy0.js +0 -22
- package/.next/static/chunks/32d1qdgpjfhb0.js +0 -4
- package/.next/static/chunks/39nm1s5w6_g9_.js +0 -1
- package/.next/static/chunks/3fntmmi971322.js +0 -1
- package/.next/static/chunks/3uvkn3v63w-bb.js +0 -1
- package/.next/static/media/favicon.2vob68tjqpejf.ico +0 -0
- /package/.next/server/app/{favicon.ico → icon.svg}/route/build-manifest.json +0 -0
- /package/.next/static/{HBZh84zxGSK-agDgmsIjU → PgrMGvOetgfaX9yDcTEN_}/_buildManifest.js +0 -0
- /package/.next/static/{HBZh84zxGSK-agDgmsIjU → PgrMGvOetgfaX9yDcTEN_}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{HBZh84zxGSK-agDgmsIjU → PgrMGvOetgfaX9yDcTEN_}/_ssgManifest.js +0 -0
package/.next/trace
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":269,"timestamp":28157631922,"id":4,"parentId":1,"tags":{},"startTime":1790969850918,"traceId":"661bca807f65b037"},{"name":"load-custom-routes","duration":442,"timestamp":28157632321,"id":5,"parentId":1,"tags":{},"startTime":1790969850918,"traceId":"661bca807f65b037"},{"name":"create-dist-dir","duration":221,"timestamp":28157632787,"id":6,"parentId":1,"tags":{},"startTime":1790969850919,"traceId":"661bca807f65b037"},{"name":"clean","duration":54458,"timestamp":28157633736,"id":7,"parentId":1,"tags":{},"startTime":1790969850920,"traceId":"661bca807f65b037"},{"name":"discover-routes","duration":5963,"timestamp":28157696920,"id":8,"parentId":1,"tags":{},"startTime":1790969850983,"traceId":"661bca807f65b037"},{"name":"create-root-mapping","duration":64,"timestamp":28157702921,"id":9,"parentId":1,"tags":{},"startTime":1790969850989,"traceId":"661bca807f65b037"},{"name":"generate-route-types","duration":19681,"timestamp":28157704466,"id":10,"parentId":1,"tags":{},"startTime":1790969850990,"traceId":"661bca807f65b037"},{"name":"public-dir-conflict-check","duration":87,"timestamp":28157724210,"id":11,"parentId":1,"tags":{},"startTime":1790969851010,"traceId":"661bca807f65b037"},{"name":"generate-routes-manifest","duration":2627,"timestamp":28157724400,"id":12,"parentId":1,"tags":{},"startTime":1790969851010,"traceId":"661bca807f65b037"},{"name":"run-turbopack","duration":2048035,"timestamp":28157736640,"id":14,"parentId":1,"tags":{},"startTime":1790969851022,"traceId":"661bca807f65b037"},{"name":"turbopack-build-events","duration":75,"timestamp":28158024534,"id":15,"parentId":1,"tags":{},"startTime":1790969851310,"traceId":"661bca807f65b037"},{"name":"turbopack-persistence","duration":136000,"timestamp":28159249931,"id":16,"parentId":15,"tags":{"reason":"stop","snapshot_duration_ms":1.757506,"persist_duration_ms":134.413546,"task_count":655,"bytes_written":587644,"bytes_deleted":0},"startTime":1790969852673,"traceId":"661bca807f65b037"},{"name":"run-typescript","duration":2585206,"timestamp":28159791404,"id":18,"parentId":1,"tags":{},"startTime":1790969853077,"traceId":"661bca807f65b037"},{"name":"generate-required-server-files","duration":901,"timestamp":28162378405,"id":20,"parentId":1,"tags":{},"startTime":1790969855664,"traceId":"661bca807f65b037"},{"name":"check-static-error-page","duration":6911,"timestamp":28162405659,"id":22,"parentId":21,"tags":{},"startTime":1790969855692,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1108543,"timestamp":28162413896,"id":41,"parentId":24,"tags":{},"startTime":1790969855700,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1114357,"timestamp":28162408149,"id":24,"parentId":21,"tags":{"page":"/_global-error"},"startTime":1790969855694,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1332960,"timestamp":28162414071,"id":44,"parentId":27,"tags":{},"startTime":1790969855700,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1338494,"timestamp":28162408579,"id":27,"parentId":21,"tags":{"page":"/api/health"},"startTime":1790969855694,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1439233,"timestamp":28162414500,"id":50,"parentId":34,"tags":{},"startTime":1790969855700,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1444015,"timestamp":28162409763,"id":34,"parentId":21,"tags":{"page":"/favicon.ico"},"startTime":1790969855696,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1477243,"timestamp":28162413562,"id":40,"parentId":23,"tags":{},"startTime":1790969855699,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1484252,"timestamp":28162406598,"id":23,"parentId":21,"tags":{"page":"/_not-found"},"startTime":1790969855692,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1483205,"timestamp":28162414118,"id":45,"parentId":28,"tags":{},"startTime":1790969855700,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1488698,"timestamp":28162408671,"id":28,"parentId":21,"tags":{"page":"/api/metrics"},"startTime":1790969855695,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1483068,"timestamp":28162417194,"id":52,"parentId":35,"tags":{},"startTime":1790969855703,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1490225,"timestamp":28162410076,"id":35,"parentId":21,"tags":{"page":"/"},"startTime":1790969855696,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1495700,"timestamp":28162413962,"id":42,"parentId":25,"tags":{},"startTime":1790969855700,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1501331,"timestamp":28162408375,"id":25,"parentId":21,"tags":{"page":"/api/analyze"},"startTime":1790969855694,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1498069,"timestamp":28162417176,"id":51,"parentId":33,"tags":{},"startTime":1790969855703,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1505730,"timestamp":28162409554,"id":33,"parentId":21,"tags":{"page":"/connect"},"startTime":1790969855695,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1501321,"timestamp":28162414177,"id":46,"parentId":29,"tags":{},"startTime":1790969855700,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1506792,"timestamp":28162408762,"id":29,"parentId":21,"tags":{"page":"/api/settings"},"startTime":1790969855695,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1499766,"timestamp":28162417212,"id":54,"parentId":38,"tags":{},"startTime":1790969855703,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1504631,"timestamp":28162412388,"id":38,"parentId":21,"tags":{"page":"/settings"},"startTime":1790969855698,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1509472,"timestamp":28162414018,"id":43,"parentId":26,"tags":{},"startTime":1790969855700,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1515040,"timestamp":28162408485,"id":26,"parentId":21,"tags":{"page":"/api/connect"},"startTime":1790969855694,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1511404,"timestamp":28162414244,"id":47,"parentId":30,"tags":{},"startTime":1790969855700,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1516538,"timestamp":28162409142,"id":30,"parentId":21,"tags":{"page":"/api/setup/ai"},"startTime":1790969855695,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1514170,"timestamp":28162414437,"id":49,"parentId":32,"tags":{},"startTime":1790969855700,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1519245,"timestamp":28162409389,"id":32,"parentId":21,"tags":{"page":"/api/timings"},"startTime":1790969855695,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1530093,"timestamp":28162414317,"id":48,"parentId":31,"tags":{},"startTime":1790969855700,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1535174,"timestamp":28162409265,"id":31,"parentId":21,"tags":{"page":"/api/setup"},"startTime":1790969855695,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1527841,"timestamp":28162417204,"id":53,"parentId":37,"tags":{},"startTime":1790969855703,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1532800,"timestamp":28162412267,"id":37,"parentId":21,"tags":{"page":"/performance"},"startTime":1790969855698,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1546797,"timestamp":28162417219,"id":55,"parentId":39,"tags":{},"startTime":1790969855703,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1551571,"timestamp":28162412480,"id":39,"parentId":21,"tags":{"page":"/setup"},"startTime":1790969855698,"traceId":"661bca807f65b037"},{"name":"is-page-static","duration":1547044,"timestamp":28162417226,"id":56,"parentId":36,"tags":{},"startTime":1790969855703,"traceId":"661bca807f65b037"},{"name":"check-page","duration":1554095,"timestamp":28162410203,"id":36,"parentId":21,"tags":{"page":"/performance/[slug]"},"startTime":1790969855696,"traceId":"661bca807f65b037"},{"name":"static-check","duration":1559222,"timestamp":28162405097,"id":21,"parentId":1,"tags":{},"startTime":1790969855691,"traceId":"661bca807f65b037"},{"name":"write-routes-manifest","duration":439,"timestamp":28163965352,"id":58,"parentId":1,"tags":{},"startTime":1790969857251,"traceId":"661bca807f65b037"},{"name":"load-dotenv","duration":34,"timestamp":28163976364,"id":61,"parentId":60,"tags":{},"startTime":1790969857262,"traceId":"661bca807f65b037"},{"name":"run-export-path-map","duration":476,"timestamp":28163977752,"id":62,"parentId":60,"tags":{},"startTime":1790969857264,"traceId":"661bca807f65b037"},{"name":"next-export","duration":623496,"timestamp":28163975285,"id":60,"parentId":1,"tags":{},"startTime":1790969857261,"traceId":"661bca807f65b037"},{"name":"move-exported-app-not-found-","duration":917,"timestamp":28164600901,"id":63,"parentId":59,"tags":{},"startTime":1790969857887,"traceId":"661bca807f65b037"},{"name":"move-exported-app-global-error-","duration":557,"timestamp":28164601910,"id":64,"parentId":59,"tags":{},"startTime":1790969857888,"traceId":"661bca807f65b037"},{"name":"static-generation","duration":635139,"timestamp":28163967731,"id":59,"parentId":1,"tags":{},"startTime":1790969857254,"traceId":"661bca807f65b037"},{"name":"write-routes-manifest","duration":391,"timestamp":28164603024,"id":65,"parentId":1,"tags":{},"startTime":1790969857889,"traceId":"661bca807f65b037"},{"name":"print-tree-view","duration":3859,"timestamp":28164668413,"id":66,"parentId":1,"tags":{},"startTime":1790969857954,"traceId":"661bca807f65b037"},{"name":"write-route-bundle-stats","duration":7733,"timestamp":28164672296,"id":67,"parentId":1,"tags":{},"startTime":1790969857958,"traceId":"661bca807f65b037"},{"name":"telemetry-flush","duration":460398,"timestamp":28164680044,"id":68,"parentId":1,"tags":{},"startTime":1790969857966,"traceId":"661bca807f65b037"},{"name":"next-build","duration":7552941,"timestamp":28157587525,"id":1,"tags":{"buildMode":"default","version":"16.3.8","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1790969850873,"traceId":"661bca807f65b037"}]
|
|
1
|
+
[{"name":"generate-buildid","duration":238,"timestamp":61148938119,"id":4,"parentId":1,"tags":{},"startTime":1791002842700,"traceId":"1b3a7aabc9e57426"},{"name":"load-custom-routes","duration":425,"timestamp":61148938480,"id":5,"parentId":1,"tags":{},"startTime":1791002842700,"traceId":"1b3a7aabc9e57426"},{"name":"create-dist-dir","duration":256,"timestamp":61148938931,"id":6,"parentId":1,"tags":{},"startTime":1791002842700,"traceId":"1b3a7aabc9e57426"},{"name":"clean","duration":60677,"timestamp":61148939952,"id":7,"parentId":1,"tags":{},"startTime":1791002842701,"traceId":"1b3a7aabc9e57426"},{"name":"discover-routes","duration":6846,"timestamp":61149009861,"id":8,"parentId":1,"tags":{},"startTime":1791002842771,"traceId":"1b3a7aabc9e57426"},{"name":"create-root-mapping","duration":67,"timestamp":61149016744,"id":9,"parentId":1,"tags":{},"startTime":1791002842778,"traceId":"1b3a7aabc9e57426"},{"name":"generate-route-types","duration":18369,"timestamp":61149018304,"id":10,"parentId":1,"tags":{},"startTime":1791002842780,"traceId":"1b3a7aabc9e57426"},{"name":"public-dir-conflict-check","duration":82,"timestamp":61149036727,"id":11,"parentId":1,"tags":{},"startTime":1791002842798,"traceId":"1b3a7aabc9e57426"},{"name":"generate-routes-manifest","duration":2857,"timestamp":61149036902,"id":12,"parentId":1,"tags":{},"startTime":1791002842798,"traceId":"1b3a7aabc9e57426"},{"name":"run-turbopack","duration":1201501,"timestamp":61149049184,"id":14,"parentId":1,"tags":{},"startTime":1791002842811,"traceId":"1b3a7aabc9e57426"},{"name":"turbopack-build-events","duration":88,"timestamp":61149354998,"id":15,"parentId":1,"tags":{},"startTime":1791002843117,"traceId":"1b3a7aabc9e57426"},{"name":"turbopack-persistence","duration":112000,"timestamp":61149709627,"id":16,"parentId":15,"tags":{"reason":"stop","snapshot_duration_ms":1.594754,"persist_duration_ms":110.05646700000001,"task_count":526,"bytes_written":546505,"bytes_deleted":0},"startTime":1791002843583,"traceId":"1b3a7aabc9e57426"},{"name":"run-typescript","duration":2697101,"timestamp":61150254399,"id":18,"parentId":1,"tags":{},"startTime":1791002844016,"traceId":"1b3a7aabc9e57426"},{"name":"generate-required-server-files","duration":837,"timestamp":61152952192,"id":20,"parentId":1,"tags":{},"startTime":1791002846714,"traceId":"1b3a7aabc9e57426"},{"name":"check-static-error-page","duration":9846,"timestamp":61152973436,"id":22,"parentId":21,"tags":{},"startTime":1791002846735,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":986469,"timestamp":61152984756,"id":42,"parentId":24,"tags":{},"startTime":1791002846746,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":995349,"timestamp":61152975938,"id":24,"parentId":21,"tags":{"page":"/_global-error"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1178534,"timestamp":61152984931,"id":45,"parentId":27,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1186997,"timestamp":61152976507,"id":27,"parentId":21,"tags":{"page":"/api/health"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1269848,"timestamp":61152984482,"id":41,"parentId":23,"tags":{},"startTime":1791002846746,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1280048,"timestamp":61152974323,"id":23,"parentId":21,"tags":{"page":"/_not-found"},"startTime":1791002846736,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1288044,"timestamp":61152985236,"id":50,"parentId":32,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1296239,"timestamp":61152977084,"id":32,"parentId":21,"tags":{"page":"/api/timings"},"startTime":1791002846739,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1285641,"timestamp":61152988845,"id":54,"parentId":37,"tags":{},"startTime":1791002846750,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1291681,"timestamp":61152982841,"id":37,"parentId":21,"tags":{"page":"/performance"},"startTime":1791002846744,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1289545,"timestamp":61152988861,"id":56,"parentId":39,"tags":{},"startTime":1791002846750,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1295359,"timestamp":61152983090,"id":39,"parentId":21,"tags":{"page":"/setup"},"startTime":1791002846745,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1302931,"timestamp":61152988865,"id":57,"parentId":40,"tags":{},"startTime":1791002846750,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1308656,"timestamp":61152983181,"id":40,"parentId":21,"tags":{"page":"/tools/[tool]"},"startTime":1791002846745,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1308627,"timestamp":61152985037,"id":47,"parentId":29,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1316952,"timestamp":61152976747,"id":29,"parentId":21,"tags":{"page":"/api/settings"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1312365,"timestamp":61152988811,"id":52,"parentId":33,"tags":{},"startTime":1791002846750,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1323261,"timestamp":61152977977,"id":33,"parentId":21,"tags":{"page":"/connect"},"startTime":1791002846740,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1325763,"timestamp":61152985299,"id":51,"parentId":34,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1332969,"timestamp":61152978145,"id":34,"parentId":21,"tags":{"page":"/icon.svg"},"startTime":1791002846740,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1327886,"timestamp":61152984980,"id":46,"parentId":28,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1336261,"timestamp":61152976631,"id":28,"parentId":21,"tags":{"page":"/api/metrics"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1327464,"timestamp":61152988830,"id":53,"parentId":35,"tags":{},"startTime":1791002846750,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1338032,"timestamp":61152978283,"id":35,"parentId":21,"tags":{"page":"/"},"startTime":1791002846740,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1332424,"timestamp":61152985107,"id":48,"parentId":30,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1340701,"timestamp":61152976852,"id":30,"parentId":21,"tags":{"page":"/api/setup/ai"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1346199,"timestamp":61152985180,"id":49,"parentId":31,"tags":{},"startTime":1791002846747,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1354450,"timestamp":61152976963,"id":31,"parentId":21,"tags":{"page":"/api/setup"},"startTime":1791002846739,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1342385,"timestamp":61152989819,"id":58,"parentId":36,"tags":{},"startTime":1791002846751,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1353720,"timestamp":61152978511,"id":36,"parentId":21,"tags":{"page":"/performance/[slug]"},"startTime":1791002846740,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1349225,"timestamp":61152984877,"id":44,"parentId":26,"tags":{},"startTime":1791002846746,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1357728,"timestamp":61152976391,"id":26,"parentId":21,"tags":{"page":"/api/connect"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1354454,"timestamp":61152988853,"id":55,"parentId":38,"tags":{},"startTime":1791002846750,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1360360,"timestamp":61152982981,"id":38,"parentId":21,"tags":{"page":"/settings"},"startTime":1791002846745,"traceId":"1b3a7aabc9e57426"},{"name":"is-page-static","duration":1366556,"timestamp":61152984822,"id":43,"parentId":25,"tags":{},"startTime":1791002846746,"traceId":"1b3a7aabc9e57426"},{"name":"check-page","duration":1375149,"timestamp":61152976255,"id":25,"parentId":21,"tags":{"page":"/api/analyze"},"startTime":1791002846738,"traceId":"1b3a7aabc9e57426"},{"name":"static-check","duration":1378550,"timestamp":61152972874,"id":21,"parentId":1,"tags":{},"startTime":1791002846734,"traceId":"1b3a7aabc9e57426"},{"name":"write-routes-manifest","duration":402,"timestamp":61154352092,"id":60,"parentId":1,"tags":{},"startTime":1791002848114,"traceId":"1b3a7aabc9e57426"},{"name":"load-dotenv","duration":28,"timestamp":61154361450,"id":63,"parentId":62,"tags":{},"startTime":1791002848123,"traceId":"1b3a7aabc9e57426"},{"name":"run-export-path-map","duration":428,"timestamp":61154362837,"id":64,"parentId":62,"tags":{},"startTime":1791002848124,"traceId":"1b3a7aabc9e57426"},{"name":"next-export","duration":515908,"timestamp":61154360528,"id":62,"parentId":1,"tags":{},"startTime":1791002848122,"traceId":"1b3a7aabc9e57426"},{"name":"move-exported-app-not-found-","duration":1078,"timestamp":61154878644,"id":65,"parentId":61,"tags":{},"startTime":1791002848640,"traceId":"1b3a7aabc9e57426"},{"name":"move-exported-app-global-error-","duration":647,"timestamp":61154879800,"id":66,"parentId":61,"tags":{},"startTime":1791002848641,"traceId":"1b3a7aabc9e57426"},{"name":"static-generation","duration":526600,"timestamp":61154354211,"id":61,"parentId":1,"tags":{},"startTime":1791002848116,"traceId":"1b3a7aabc9e57426"},{"name":"write-routes-manifest","duration":377,"timestamp":61154880976,"id":67,"parentId":1,"tags":{},"startTime":1791002848643,"traceId":"1b3a7aabc9e57426"},{"name":"print-tree-view","duration":2794,"timestamp":61154956976,"id":68,"parentId":1,"tags":{},"startTime":1791002848719,"traceId":"1b3a7aabc9e57426"},{"name":"write-route-bundle-stats","duration":7045,"timestamp":61154959790,"id":69,"parentId":1,"tags":{},"startTime":1791002848721,"traceId":"1b3a7aabc9e57426"},{"name":"telemetry-flush","duration":471046,"timestamp":61154966851,"id":70,"parentId":1,"tags":{},"startTime":1791002848728,"traceId":"1b3a7aabc9e57426"},{"name":"next-build","duration":6542824,"timestamp":61148895098,"id":1,"tags":{"buildMode":"default","version":"16.3.8","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1791002842657,"traceId":"1b3a7aabc9e57426"}]
|
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":1201501,"timestamp":61149049184,"id":14,"parentId":1,"tags":{},"startTime":1791002842811,"traceId":"1b3a7aabc9e57426"},{"name":"turbopack-build-events","duration":88,"timestamp":61149354998,"id":15,"parentId":1,"tags":{},"startTime":1791002843117,"traceId":"1b3a7aabc9e57426"},{"name":"turbopack-persistence","duration":112000,"timestamp":61149709627,"id":16,"parentId":15,"tags":{"reason":"stop","snapshot_duration_ms":1.594754,"persist_duration_ms":110.05646700000001,"task_count":526,"bytes_written":546505,"bytes_deleted":0},"startTime":1791002843583,"traceId":"1b3a7aabc9e57426"},{"name":"run-typescript","duration":2697101,"timestamp":61150254399,"id":18,"parentId":1,"tags":{},"startTime":1791002844016,"traceId":"1b3a7aabc9e57426"},{"name":"static-check","duration":1378550,"timestamp":61152972874,"id":21,"parentId":1,"tags":{},"startTime":1791002846734,"traceId":"1b3a7aabc9e57426"},{"name":"static-generation","duration":526600,"timestamp":61154354211,"id":61,"parentId":1,"tags":{},"startTime":1791002848116,"traceId":"1b3a7aabc9e57426"},{"name":"telemetry-flush","duration":471046,"timestamp":61154966851,"id":70,"parentId":1,"tags":{},"startTime":1791002848728,"traceId":"1b3a7aabc9e57426"},{"name":"next-build","duration":6542824,"timestamp":61148895098,"id":1,"tags":{"buildMode":"default","version":"16.3.8","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1791002842657,"traceId":"1b3a7aabc9e57426"}]
|
package/README.md
CHANGED
|
@@ -1,79 +1,134 @@
|
|
|
1
1
|
# MetricFlow — Performance Dashboard
|
|
2
2
|
|
|
3
|
-
MetricFlow is a local
|
|
3
|
+
MetricFlow is a local dashboard for your website. It reads real-user performance metrics from **New Relic** and JavaScript errors from **Sentry**, joins them per page, and can ask an AI model (Gemini, Claude or OpenAI) what to fix first.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
It runs on your own machine with your own keys. There is no MetricFlow server and no account to create.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```bash
|
|
8
|
+
npx @karan171996/metricflow
|
|
9
|
+
```
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
- **Data sources**: New Relic (load time, LCP, TTFB, FID, error rate, throughput, Apdex) and Sentry (error count, warnings, latest errors).
|
|
13
|
-
- **API routes** (Next.js route handlers): `GET /api/metrics`, `POST /api/analyze`, `GET /api/health`, `/api/timings`.
|
|
14
|
-
- **CLI**: `performance-dashboard` starts the production server and opens your browser. Supports `--json` and `--no-color`.
|
|
11
|
+
> **Status: early, work in progress (v0.1.5).** Things will change. Bug reports and feedback are welcome in [Issues](https://github.com/karan171996/MetricFlow/issues).
|
|
12
|
+
|
|
13
|
+

|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
_Screenshots use sample data, not real New Relic or Sentry numbers._
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
## What you need
|
|
19
18
|
|
|
20
|
-
|
|
19
|
+
| | Required? | Why |
|
|
20
|
+
| --- | --- | --- |
|
|
21
|
+
| Node.js `>=20.12` | Yes | Runs the dashboard |
|
|
22
|
+
| A New Relic account, with the **Browser agent** on your site | Yes | Page views, load time, Core Web Vitals, Apdex |
|
|
23
|
+
| A Sentry project | Yes | Error counts and latest errors per page |
|
|
24
|
+
| A Gemini, Claude or OpenAI API key | No | AI suggestions on the dashboard |
|
|
21
25
|
|
|
22
|
-
|
|
26
|
+
New Relic and Sentry both have free plans, which are enough to try MetricFlow.
|
|
23
27
|
|
|
24
|
-
|
|
28
|
+
## Get started in 4 steps
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
### 1. Start the dashboard
|
|
27
31
|
|
|
28
|
-
|
|
32
|
+
From any folder (usually your website's project folder):
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx @karan171996/metricflow
|
|
36
|
+
```
|
|
29
37
|
|
|
30
38
|
```
|
|
31
|
-
$ performance-dashboard
|
|
32
39
|
✔ Dashboard is running
|
|
33
40
|
URL http://localhost:3000
|
|
34
41
|
Stop Ctrl+C
|
|
35
42
|
```
|
|
36
43
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
- Node.js `>=20.12`
|
|
40
|
-
- Optional but needed for real data: New Relic, Sentry and Gemini keys
|
|
44
|
+
Your browser opens the dashboard. The first time, it shows **Connect your data**, because no keys are set yet.
|
|
41
45
|
|
|
42
|
-
|
|
46
|
+
To install it in a project instead of using `npx` each time:
|
|
43
47
|
|
|
44
48
|
```bash
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
npm install
|
|
48
|
-
cp .env.local.example .env.local # then fill in your keys
|
|
49
|
-
npm run dev # development, http://localhost:3000
|
|
49
|
+
npm install --save-dev @karan171996/metricflow
|
|
50
|
+
npx performance-dashboard
|
|
50
51
|
```
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
The dashboard header shows the `name` from that project's `package.json`.
|
|
53
54
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
```
|
|
55
|
+
### 2. Add your keys
|
|
56
|
+
|
|
57
|
+
You need five values. Where to find each one:
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
| Value | Where to find it |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| New Relic **User API key** | New Relic → API keys → create key, type **User**. Starts with `NRAK-`. |
|
|
62
|
+
| New Relic **account ID** | A plain number, shown next to your keys in New Relic. |
|
|
63
|
+
| Sentry **auth token** | Sentry → Settings → Auth Tokens. Scopes: `project:read`, `event:read`. |
|
|
64
|
+
| Sentry **organization slug** | The name in your Sentry URL: `sentry.io/organizations/<slug>/`. |
|
|
65
|
+
| Sentry **project slug** | Sentry → Project settings. |
|
|
60
66
|
|
|
61
|
-
|
|
67
|
+
Save them in one of two ways:
|
|
62
68
|
|
|
63
|
-
- **
|
|
64
|
-
- **
|
|
65
|
-
- **Old toolchains:** the New Relic browser agent may not work in projects on webpack 4 (Create React App 2). This is untested; check before relying on it.
|
|
69
|
+
- **On the Setup page.** Click **Set up keys** on the dashboard (or open `/setup`), paste the values and save. MetricFlow checks each key with New Relic and Sentry before saving it.
|
|
70
|
+
- **In a `.env.local` file** in the folder where you run the command:
|
|
66
71
|
|
|
67
|
-
|
|
72
|
+
```bash
|
|
73
|
+
NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID=1234567
|
|
74
|
+
NEWRELIC_API_KEY=NRAK-...
|
|
75
|
+
SENTRY_API_KEY=sntrys_...
|
|
76
|
+
SENTRY_ORG_SLUG=your-org
|
|
77
|
+
SENTRY_PROJECT_ID=your-project
|
|
78
|
+
```
|
|
68
79
|
|
|
69
|
-
|
|
80
|
+
Restart the dashboard after editing the file.
|
|
70
81
|
|
|
71
|
-
|
|
82
|
+
> **Using `npx`?** Keys saved on the Setup page are stored inside the downloaded package folder, so they can disappear when npm clears its cache or you update MetricFlow. For keys that stay put, use `.env.local` in your project folder. Add `.env.local` to your `.gitignore` so the keys are never committed.
|
|
83
|
+
|
|
84
|
+
**Optional AI suggestions:** on the Setup page, add a Gemini, Claude or OpenAI key, or set one in `.env.local` (`GEMINI_API_KEY`, `CLAUDE_API_KEY` or `OPENAI_API_KEY`). If you set more than one, `AI_PROVIDER=gemini|claude|openai` picks which one is used.
|
|
85
|
+
|
|
86
|
+
### 3. Send data from your site
|
|
87
|
+
|
|
88
|
+
MetricFlow only reads data. Your website has to send it to New Relic and Sentry first. After saving your keys, click **Next: connect your app** (or open `/connect`). That page gives you copy-paste snippets:
|
|
89
|
+
|
|
90
|
+
1. **New Relic Browser agent**: records page views, load timing and Core Web Vitals.
|
|
91
|
+
2. **`emitMetric()` helper** (optional): sends your own numbers through the Browser agent.
|
|
92
|
+
3. **Sentry**: sends JavaScript errors. Use your project's DSN.
|
|
93
|
+
|
|
94
|
+
Add them to your site, deploy or run it, and open a few pages.
|
|
95
|
+
|
|
96
|
+
### 4. Check that metrics arrive
|
|
97
|
+
|
|
98
|
+
On `/connect`, the **Events received** panel shows a row for each source:
|
|
99
|
+
|
|
100
|
+
- **Browser agent (page views)**
|
|
101
|
+
- **Custom events (emitMetric / test event)**
|
|
102
|
+
- **Sentry errors**
|
|
103
|
+
|
|
104
|
+
Reload a few pages of your site and watch the rows turn green. New Relic can take a minute or two to show new data.
|
|
105
|
+
|
|
106
|
+
To test without touching your site, add a New Relic **Ingest - License** key on `/connect` and click **Send test event**. This key is only used for the test button and is different from the User key.
|
|
107
|
+
|
|
108
|
+
Then open the dashboard (`/`). Your top 20 pages (by page views, last 24 hours) appear automatically. The dashboard refreshes every 30 seconds.
|
|
109
|
+
|
|
110
|
+
## What you'll see
|
|
111
|
+
|
|
112
|
+
| Page | What it shows |
|
|
113
|
+
| --- | --- |
|
|
114
|
+
| **Dashboard** (`/`) | Average response time, error rate, throughput and Apdex; TTFB, LCP and CLS cards with trends; pages passing Core Web Vitals; what moved since the last check; AI suggestions |
|
|
115
|
+
| **Performance** (`/performance`) | Every tracked page with its health. Click a row for that page's detail view |
|
|
116
|
+
| **New Relic** (`/tools/new-relic`) | New Relic numbers only, per page |
|
|
117
|
+
| **Sentry** (`/tools/sentry`) | Error count, latest error and when it was last seen, per page |
|
|
118
|
+
| **Settings** (`/settings`) | Warning and critical thresholds used to mark pages Healthy, Warning or Critical |
|
|
119
|
+
|
|
120
|
+

|
|
121
|
+
|
|
122
|
+
## Troubleshooting
|
|
123
|
+
|
|
124
|
+
| You see | What to do |
|
|
72
125
|
| --- | --- |
|
|
73
|
-
|
|
|
74
|
-
|
|
|
75
|
-
|
|
|
76
|
-
|
|
|
126
|
+
| **Connect your data** after adding keys | If you used `.env.local`, restart the dashboard. Check that all five values are set. |
|
|
127
|
+
| A page says **No data yet** | That page has no page views in New Relic in the last 24 hours. Check the Browser agent is on that page, then reload it. |
|
|
128
|
+
| **Could not load metrics** | New Relic rejected the request. Check the User API key and account ID on `/setup`, then click **Retry**. |
|
|
129
|
+
| Error counts are always 0 | Check the Sentry token scopes (`project:read`, `event:read`) and that the project slug is right. |
|
|
130
|
+
| `http://localhost:3000` shows a different app | Another app is using port 3000 over IPv6. Open `http://127.0.0.1:3000` instead, or pick another port: `npx @karan171996/metricflow 4000`. |
|
|
131
|
+
| Port already in use | Start on another port: `npx @karan171996/metricflow 4000`. |
|
|
77
132
|
|
|
78
133
|
## CLI usage
|
|
79
134
|
|
|
@@ -90,6 +145,8 @@ performance-dashboard [port] [options]
|
|
|
90
145
|
| `--host <addr>` | Address to listen on. Default `127.0.0.1` (this machine only). `--host 0.0.0.0` exposes the dashboard, and the New Relic/Sentry data behind it, to your network and prints a warning |
|
|
91
146
|
| `[port]` | Port to listen on; default `3000`. The `PORT` environment variable also works |
|
|
92
147
|
|
|
148
|
+
The CLI loads `.env.local` and `.env` from the folder you run it in. Set `METRICFLOW_PROJECT_NAME` to change the name shown in the dashboard header.
|
|
149
|
+
|
|
93
150
|
Examples:
|
|
94
151
|
|
|
95
152
|
```bash
|
|
@@ -110,38 +167,69 @@ Errors print what failed and how to fix it. Exit code `2` is bad usage, `1` is a
|
|
|
110
167
|
$ performance-dashboard abc
|
|
111
168
|
✖ Invalid port "abc".
|
|
112
169
|
→ Use a number from 1 to 65535, e.g. performance-dashboard 4000
|
|
113
|
-
|
|
114
|
-
$ performance-dashboard # before `npm run build`
|
|
115
|
-
✖ No build found.
|
|
116
|
-
→ Run `npm run build` first (published packages include it).
|
|
117
170
|
```
|
|
118
171
|
|
|
119
172
|
Human text goes to stdout; errors, warnings and spinners go to stderr. Full spec: [CLI_OUTPUT.md](https://github.com/karan171996/MetricFlow/blob/main/CLI_OUTPUT.md).
|
|
120
173
|
|
|
121
|
-
##
|
|
174
|
+
## All environment variables
|
|
122
175
|
|
|
176
|
+
| Variable | Purpose |
|
|
177
|
+
| --- | --- |
|
|
178
|
+
| `NEXT_PUBLIC_NEWRELIC_ACCOUNT_ID`, `NEWRELIC_API_KEY` | Read metrics from New Relic (required) |
|
|
179
|
+
| `SENTRY_API_KEY`, `SENTRY_ORG_SLUG`, `SENTRY_PROJECT_ID` | Read errors from Sentry (required) |
|
|
180
|
+
| `GEMINI_API_KEY`, `CLAUDE_API_KEY`, `OPENAI_API_KEY` | AI suggestions (optional, any one) |
|
|
181
|
+
| `AI_PROVIDER` | `gemini`, `claude` or `openai`; picks the AI key when several are set |
|
|
182
|
+
| `NEWRELIC_INSERT_KEY` | Only for **Send test event** on `/connect` and `pnpm send-test-data` |
|
|
183
|
+
| `SENTRY_DSN` | Only for `pnpm send-test-data` |
|
|
184
|
+
| `METRICFLOW_PROJECT_NAME` | Overrides the project name in the header |
|
|
185
|
+
|
|
186
|
+
## Develop from source
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
git clone https://github.com/karan171996/MetricFlow.git
|
|
190
|
+
cd MetricFlow
|
|
191
|
+
pnpm install
|
|
192
|
+
cp .env.local.example .env.local # then fill in your keys
|
|
193
|
+
pnpm dev # http://127.0.0.1:3000
|
|
123
194
|
```
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
195
|
+
|
|
196
|
+
This repo uses [pnpm](https://pnpm.io) (`corepack enable` picks the pinned version). Install scripts are allowed only for the packages listed in `pnpm-workspace.yaml` (Cypress and `unrs-resolver`).
|
|
197
|
+
|
|
198
|
+
Run the production build through the CLI:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
pnpm build
|
|
202
|
+
node bin/cli.mjs
|
|
132
203
|
```
|
|
133
204
|
|
|
134
|
-
|
|
205
|
+
### Tests
|
|
135
206
|
|
|
136
207
|
```bash
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
208
|
+
pnpm test # all tests, fake keys, no network
|
|
209
|
+
pnpm test:cli # node:test suite only
|
|
210
|
+
pnpm test:real # against your real accounts (.env.local)
|
|
211
|
+
pnpm cy:run # Cypress tests (app must be running)
|
|
212
|
+
pnpm lint
|
|
213
|
+
pnpm send-test-data # one dummy event to Sentry and New Relic
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
`pnpm test` uses fake keys from `.env.test.example` and never reads `.env.local`. `pnpm test:real` reads `.env.local` and never prints the keys. `send-test-data` needs `SENTRY_DSN` and `NEWRELIC_INSERT_KEY`.
|
|
217
|
+
|
|
218
|
+
### Project structure
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
app/ Next.js App Router: pages and api/ route handlers
|
|
222
|
+
components/ UI, one folder per feature; ui/ is generated shadcn code
|
|
223
|
+
lib/ Data fetching (New Relic, Sentry), transforms, hooks
|
|
224
|
+
bin/ CLI (cli.mjs) and output formatter (output.mjs)
|
|
225
|
+
scripts/ send-test-data.mjs, test-env.mjs
|
|
226
|
+
test/ node:test suites
|
|
227
|
+
cypress/ End-to-end smoke test
|
|
228
|
+
docs/images/ README screenshots (not shipped in the npm package)
|
|
140
229
|
```
|
|
141
230
|
|
|
142
231
|
## Contributing
|
|
143
232
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
4. This project uses a recent Next.js with breaking changes; read `node_modules/next/dist/docs/` before changing framework code.
|
|
233
|
+
Nobody pushes straight to `main`: fork, branch, and open a pull request. Commit messages and PR titles use the `type(scope): description` format, for example `fix(api): handle an empty New Relic response` or `feat(ui): add a Sentry page`. Types are `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore` and `revert`.
|
|
234
|
+
|
|
235
|
+
Full steps, the commit format and the PR checklist are in [CONTRIBUTING.md](CONTRIBUTING.md).
|
package/bin/cli.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { spawn } from "node:child_process";
|
|
3
|
-
import { existsSync } from "node:fs";
|
|
3
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
4
4
|
import { createRequire } from "node:module";
|
|
5
5
|
import net from "node:net";
|
|
6
|
-
import { dirname, join } from "node:path";
|
|
6
|
+
import { basename, dirname, join } from "node:path";
|
|
7
7
|
import { fileURLToPath } from "node:url";
|
|
8
8
|
import { helpText, out, wantsHelp, wantsJson, wantsVersion } from "./output.mjs";
|
|
9
9
|
|
|
@@ -41,6 +41,10 @@ for (const f of [".env.local", ".env"]) {
|
|
|
41
41
|
if (existsSync(f)) process.loadEnvFile(f);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
// Dashboard title: the name of the project this is run in (its package.json name, else the folder name).
|
|
45
|
+
let projectName = basename(process.cwd());
|
|
46
|
+
try { projectName = JSON.parse(readFileSync("package.json", "utf8")).name || projectName; } catch { /* no package.json here */ }
|
|
47
|
+
|
|
44
48
|
if (!existsSync(join(root, ".next"))) {
|
|
45
49
|
out.error("No build found.", { code: "no_build", hint: "Run `npm run build` first (published packages include it)." });
|
|
46
50
|
process.exit(1);
|
|
@@ -53,6 +57,7 @@ const server = spawn(process.execPath, [nextBin, "start", "-p", port, "-H", host
|
|
|
53
57
|
stdio: ["inherit", wantsJson ? 2 : "inherit", "inherit"], // keep stdout clean for --json
|
|
54
58
|
// Pass --no-color/--json down so Next's own output matches.
|
|
55
59
|
env: {
|
|
60
|
+
METRICFLOW_PROJECT_NAME: projectName, // set it yourself to override the title
|
|
56
61
|
...process.env,
|
|
57
62
|
...(loopback ? {} : { METRICFLOW_EXPOSED: "1" }), // app's isLocalRequest honors this
|
|
58
63
|
...(process.argv.includes("--no-color") || wantsJson ? { FORCE_COLOR: undefined, NO_COLOR: "1" } : {}),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@karan171996/metricflow",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,20 +10,6 @@
|
|
|
10
10
|
"bugs": {
|
|
11
11
|
"url": "https://github.com/karan171996/MetricFlow/issues"
|
|
12
12
|
},
|
|
13
|
-
"scripts": {
|
|
14
|
-
"dev": "next dev -H 127.0.0.1",
|
|
15
|
-
"build": "next build",
|
|
16
|
-
"start": "next start -H 127.0.0.1",
|
|
17
|
-
"lint": "eslint",
|
|
18
|
-
"send-test-data": "node scripts/send-test-data.mjs",
|
|
19
|
-
"cy:open": "cypress open",
|
|
20
|
-
"cy:run": "cypress run",
|
|
21
|
-
"prepublishOnly": "next build",
|
|
22
|
-
"test:cli": "node --experimental-test-module-mocks --import ./test/register.mjs --test test/*.test.mjs",
|
|
23
|
-
"test:basic": "node scripts/test-env.mjs basic",
|
|
24
|
-
"test:real": "node scripts/test-env.mjs real",
|
|
25
|
-
"test": "npm run test:basic"
|
|
26
|
-
},
|
|
27
13
|
"dependencies": {
|
|
28
14
|
"axios": "^1.20.0",
|
|
29
15
|
"next": "16.3.8",
|
|
@@ -42,7 +28,7 @@
|
|
|
42
28
|
"cypress": "^16.1.1",
|
|
43
29
|
"dotenv": "^18.0.1",
|
|
44
30
|
"eslint": "^9",
|
|
45
|
-
"eslint-config-next": "16.3.8",
|
|
31
|
+
"eslint-config-next": "^16.3.8",
|
|
46
32
|
"lucide-react": "^1.47.0",
|
|
47
33
|
"recharts": "^3.10.1",
|
|
48
34
|
"shadcn": "^4.21.0",
|
|
@@ -68,5 +54,18 @@
|
|
|
68
54
|
},
|
|
69
55
|
"publishConfig": {
|
|
70
56
|
"access": "public"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"dev": "next dev -H 127.0.0.1",
|
|
60
|
+
"build": "next build",
|
|
61
|
+
"start": "next start -H 127.0.0.1",
|
|
62
|
+
"lint": "eslint",
|
|
63
|
+
"send-test-data": "node scripts/send-test-data.mjs",
|
|
64
|
+
"cy:open": "cypress open",
|
|
65
|
+
"cy:run": "cypress run",
|
|
66
|
+
"test:cli": "node --experimental-test-module-mocks --import ./test/register.mjs --test test/*.test.mjs",
|
|
67
|
+
"test:basic": "node scripts/test-env.mjs basic",
|
|
68
|
+
"test:real": "node scripts/test-env.mjs real",
|
|
69
|
+
"test": "pnpm run test:basic"
|
|
71
70
|
}
|
|
72
|
-
}
|
|
71
|
+
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
var R=require("../../chunks/[turbopack]_runtime.js")("server/app/favicon.ico/route.js")
|
|
2
|
-
R.c("server/chunks/[externals]__162fo45._.js")
|
|
3
|
-
R.c("server/chunks/[root-of-the-server]__1uv-wzy._.js")
|
|
4
|
-
R.c("server/chunks/_1gvvd7n._.js")
|
|
5
|
-
R.c("server/chunks/_next-internal_server_app_favicon_ico_route_actions_0g2jjls.js")
|
|
6
|
-
R.m(6218)
|
|
7
|
-
module.exports=R.m(6218).exports
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":1,"files":["../../../../node_modules/@opentelemetry/api/build/src/api/context.js","../../../../node_modules/@opentelemetry/api/build/src/api/diag.js","../../../../node_modules/@opentelemetry/api/build/src/api/metrics.js","../../../../node_modules/@opentelemetry/api/build/src/api/propagation.js","../../../../node_modules/@opentelemetry/api/build/src/api/trace.js","../../../../node_modules/@opentelemetry/api/build/src/baggage/context-helpers.js","../../../../node_modules/@opentelemetry/api/build/src/baggage/internal/baggage-impl.js","../../../../node_modules/@opentelemetry/api/build/src/baggage/internal/symbol.js","../../../../node_modules/@opentelemetry/api/build/src/baggage/utils.js","../../../../node_modules/@opentelemetry/api/build/src/context-api.js","../../../../node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js","../../../../node_modules/@opentelemetry/api/build/src/context/context.js","../../../../node_modules/@opentelemetry/api/build/src/diag-api.js","../../../../node_modules/@opentelemetry/api/build/src/diag/ComponentLogger.js","../../../../node_modules/@opentelemetry/api/build/src/diag/consoleLogger.js","../../../../node_modules/@opentelemetry/api/build/src/diag/internal/logLevelLogger.js","../../../../node_modules/@opentelemetry/api/build/src/diag/types.js","../../../../node_modules/@opentelemetry/api/build/src/index.js","../../../../node_modules/@opentelemetry/api/build/src/internal/global-utils.js","../../../../node_modules/@opentelemetry/api/build/src/internal/semver.js","../../../../node_modules/@opentelemetry/api/build/src/metrics-api.js","../../../../node_modules/@opentelemetry/api/build/src/metrics/Metric.js","../../../../node_modules/@opentelemetry/api/build/src/metrics/NoopMeter.js","../../../../node_modules/@opentelemetry/api/build/src/metrics/NoopMeterProvider.js","../../../../node_modules/@opentelemetry/api/build/src/propagation-api.js","../../../../node_modules/@opentelemetry/api/build/src/propagation/NoopTextMapPropagator.js","../../../../node_modules/@opentelemetry/api/build/src/propagation/TextMapPropagator.js","../../../../node_modules/@opentelemetry/api/build/src/trace-api.js","../../../../node_modules/@opentelemetry/api/build/src/trace/NonRecordingSpan.js","../../../../node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js","../../../../node_modules/@opentelemetry/api/build/src/trace/NoopTracerProvider.js","../../../../node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js","../../../../node_modules/@opentelemetry/api/build/src/trace/ProxyTracerProvider.js","../../../../node_modules/@opentelemetry/api/build/src/trace/SamplingResult.js","../../../../node_modules/@opentelemetry/api/build/src/trace/context-utils.js","../../../../node_modules/@opentelemetry/api/build/src/trace/internal/tracestate-impl.js","../../../../node_modules/@opentelemetry/api/build/src/trace/internal/tracestate-validators.js","../../../../node_modules/@opentelemetry/api/build/src/trace/internal/utils.js","../../../../node_modules/@opentelemetry/api/build/src/trace/invalid-span-constants.js","../../../../node_modules/@opentelemetry/api/build/src/trace/span_kind.js","../../../../node_modules/@opentelemetry/api/build/src/trace/spancontext-utils.js","../../../../node_modules/@opentelemetry/api/build/src/trace/status.js","../../../../node_modules/@opentelemetry/api/build/src/trace/trace_flags.js","../../../../node_modules/@opentelemetry/api/build/src/version.js","../../../../node_modules/@opentelemetry/api/package.json","../../../../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../../../node_modules/@swc/helpers/esm/_interop_require_default.js","../../../../node_modules/@swc/helpers/package.json","../../../../node_modules/next/dist/build/adapter/setup-node-env.external.js","../../../../node_modules/next/dist/client/components/hooks-server-context.js","../../../../node_modules/next/dist/client/components/static-generation-bailout.js","../../../../node_modules/next/dist/client/lib/console.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/hash.js/sha256/256.js","../../../../node_modules/next/dist/compiled/hash.js/sha256/package.json","../../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js","../../../../node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js","../../../../node_modules/next/dist/compiled/source-map/package.json","../../../../node_modules/next/dist/compiled/source-map/source-map.js","../../../../node_modules/next/dist/compiled/stacktrace-parser/package.json","../../../../node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../../../node_modules/next/dist/compiled/ws/index.js","../../../../node_modules/next/dist/compiled/ws/package.json","../../../../node_modules/next/dist/lib/client-and-server-references.js","../../../../node_modules/next/dist/lib/constants.js","../../../../node_modules/next/dist/lib/framework/boundary-constants.js","../../../../node_modules/next/dist/lib/interop-default.js","../../../../node_modules/next/dist/lib/is-error.js","../../../../node_modules/next/dist/lib/picocolors.js","../../../../node_modules/next/dist/lib/scheduler.js","../../../../node_modules/next/dist/lib/semver-noop.js","../../../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../node_modules/next/dist/server/app-render/async-local-storage.js","../../../../node_modules/next/dist/server/app-render/blocking-route-messages.js","../../../../node_modules/next/dist/server/app-render/cache-signal.js","../../../../node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../../../node_modules/next/dist/server/app-render/console-async-storage.external.js","../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js","../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js","../../../../node_modules/next/dist/server/app-render/dynamic-rendering.js","../../../../node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../../../node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js","../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../../../node_modules/next/dist/server/app-render/staged-rendering.js","../../../../node_modules/next/dist/server/app-render/sync-io-messages.js","../../../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../../../node_modules/next/dist/server/dynamic-rendering-utils.js","../../../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../node_modules/next/dist/server/lib/lru-cache.js","../../../../node_modules/next/dist/server/lib/parse-stack.js","../../../../node_modules/next/dist/server/lib/route-cache-key.js","../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../../../node_modules/next/dist/server/lib/source-maps.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/dist/server/load-manifest.external.js","../../../../node_modules/next/dist/server/node-environment-baseline.js","../../../../node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../../../node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../../../node_modules/next/dist/server/node-environment-extensions/console-file.js","../../../../node_modules/next/dist/server/node-environment-extensions/date.js","../../../../node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../../../node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../../../node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../../../node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../../../node_modules/next/dist/server/node-environment-extensions/random.js","../../../../node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../../../node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../../../node_modules/next/dist/server/node-environment.js","../../../../node_modules/next/dist/server/node-polyfill-crypto.js","../../../../node_modules/next/dist/server/normalizers/built/app/app-pathname-normalizer.js","../../../../node_modules/next/dist/server/normalizers/normalizers.js","../../../../node_modules/next/dist/server/normalizers/underscore-normalizer.js","../../../../node_modules/next/dist/server/normalizers/wrap-normalizer-fn.js","../../../../node_modules/next/dist/server/patch-error-inspect.js","../../../../node_modules/next/dist/server/require-hook.js","../../../../node_modules/next/dist/server/response-cache/types.js","../../../../node_modules/next/dist/server/route-kind.js","../../../../node_modules/next/dist/server/runtime-reacts.external.js","../../../../node_modules/next/dist/shared/lib/deep-freeze.js","../../../../node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js","../../../../node_modules/next/dist/shared/lib/instant-messages.js","../../../../node_modules/next/dist/shared/lib/invariant-error.js","../../../../node_modules/next/dist/shared/lib/is-plain-object.js","../../../../node_modules/next/dist/shared/lib/is-thenable.js","../../../../node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js","../../../../node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../../node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js","../../../../node_modules/next/dist/shared/lib/page-path/normalize-page-path.js","../../../../node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../../../node_modules/next/dist/shared/lib/router/utils/app-paths.js","../../../../node_modules/next/dist/shared/lib/router/utils/index.js","../../../../node_modules/next/dist/shared/lib/router/utils/interception-routes.js","../../../../node_modules/next/dist/shared/lib/router/utils/is-dynamic.js","../../../../node_modules/next/dist/shared/lib/router/utils/sorted-routes.js","../../../../node_modules/next/dist/shared/lib/segment.js","../../../../node_modules/next/dist/shared/lib/server-reference-info.js","../../../../node_modules/next/dist/shared/lib/utils.js","../../../../node_modules/next/package.json","../../../../node_modules/react/cjs/react.development.js","../../../../node_modules/react/cjs/react.production.js","../../../../node_modules/react/index.js","../../../../node_modules/react/package.json","../../chunks/[externals]__162fo45._.js","../../chunks/[root-of-the-server]__1uv-wzy._.js","../../chunks/[turbopack]_runtime.js","../../chunks/_1gvvd7n._.js","../../chunks/_next-internal_server_app_favicon_ico_route_actions_0g2jjls.js"],"fileHashes":["172e2d0e47a44b837ebd71535e967798","ecaefc960875f4b4478c683e73868e97","60bb9347b45136d9001f53cc52c455b9","1688bab7eb45e055dfb4115e5ddb24ea","8a8d642d72df10d4c220afe994a01856","20bdd4b4525c96a49ed16963e26a2eed","a92df63e5739351744f97455b5240a43","278a1b9314619d5b139579778c63821c","5a1c20c40797fe27e1313dac8629b9ee","7ca889e055cbac55f3fc53269dd35f4c","b804ddd90490f0a4956975f8bec22895","60c199f949bf5ab9a83a6697ed671e3e","4230bd96b9af8df2603b511bf2852572","1bf51ab1838f6069e52ebb0379dc15ad","80362cb0887ef099422f3ff1b0741bfd","307fded55028a922987d31d457f4eb0f","0a6947b7e5f1647f306ed16050e0cca2","473daa91af28369f42fa126ab3b759d4","d6195590b26d593a890d64a7f798882d","ae37a4e15fb5f4b4c4ee2c10cc265960","610e2bfe060bdc7fafb0c0ebf7bd7a8a","2a757c4ca36d8279aa9119f8a63020d3","80921b78f5ff5fdeb1a52f4077005175","a333665cab650bf91c1b11e50b58e332","97b8ec25979167442b851db19b7bc16a","cebad90d9af458656dde5ade945c62a5","545c5aba22e8706cb49e58760da574f1","51abf9ab6e73140f103e896d7e09a834","205ff882084f7212fa4bf89da2091470","b1fd0f8807d316464ee7874c79a3f1b2","6599745fb07469d377bac4c3c44453d0","99d087be5f678d4090002e4f4c61c223","44f6a17b2f80a4ccdf02a6e62982f471","8c09c961bb6087487e61d9a2da2751d8","10179f5f52b595ea37aaa355a2e36b6e","526af5d2af6a149d8eb02720fad6bfdf","b32e4765b9646b0523d32f4f33268528","7f1b8fd9fc382ddcc7d60b679705c7d1","3a59ef7efb74e06f3acd57d413a2a1a5","8a6cf7553c652463e8ec0c1a900d7651","af4f830364aaadb65d255633e581e35a","b976329ed5a1f2471db9c025e50bb2c1","b52e122266ed8144b0103a84bbfce0b3","45ef20b343f78116f008ff25913baff3","6495a40408437fb6dcfb2455f239e63e","ef6ac6914a3f24c9f4a98105a3bdd310","bcdfbca94848d30153fa83f8421423d7","50bb01754878225cf6730e02b44f84d6","a5446fb306fcfec27c39f81de38ec842","9c53694dd40423680deefb5a1e3c25af","57ca86e5858543e1466b92725355539a","11eb668649d2434d25d26977b8e01e49","02186196a2cc227a67f668f00873f72a","fa8a4dd27dcbde144881044b2fa74f64","92efc99184eb4dffe99e07a90f5ad81b","18929c800606d32dc25e59d7f3455fa5","cd28bbc5151decba058dfd44bd7f47ef","a8da0851d005c95af6d4ff8b8db146ce","07b88c21a35bcfb0be55b0ecfbc01397","a314e26c9f8a818bb4a416807e52fa1a","61445cc4a73d56b154f397d2e4213b60","4e6491a35b1970e74a940d26e575216a","0bcd39f6f5be09dab16374e3bf84459e","ce87d6acf7ef1610862d34a9c59528ea","d1e9d6e75ad3a9d63cc0825ec4ebe282","b81183ad70cf2df4130a6f7853eff593","edcceea1e2a5c13a14d12f4d422f733a","92d7eec9f49250bf6325e1b4186fb521","0b3ab74e31e82ffa9b20013ed883782e","15ad04875f6d43fc8bd602b20d828566","5fe712e91d39531cd872b189115c7a25","c07db8edca1ca7e626b14dbf4e3584a8","0aa24beea9e1b8ae34954feb1be5caa6","f9295c2e844d919b0be75fffe2e10989","9b1c71085acfacbddbca5126bca3f550","6505c89743b18298e0e22489f1d956ed","8f2d8843ff7d322ecc237601ab58e1d7","d90d4f1de46d810d671d85f21ec5d352","2eecc48be406b9c64276e31215c29e95","981807b2548ffbff8d9ad94a758813fb","9f6a333435676ba7b0045e6b0d2d9b98","2701737ab664a8fe7700053638aa0db8","33916079c6a49d35edf38970b6afa990","046a57d6280182df9f32d77ba452677f","94e9332b8f4251c1b03791e57aad9399","6978bf3fb2c443a8c9022d43a243c56a","8fb4ea2a1e97dc7ad2cbbf5641b1aa23","7175e4648ef6975b79e76f0f46dc69df","7a4c4e16ecb22ffb0ba224fa37e94a70","848334e0b7acedfd5656296df4adae7c","0a201256d245b3a0e27ed288b6ba68ae","498fc15d07579c19b3cc959a96eb5bb8","40c6916156cc44db5f0c8e266c9f1e60","1acc3875adfbadf8dd6721e71e776ecd","1eb18df669f40e7a0c8e077b365c907d","08cab8a9c8062eac4f6b9cbcc303417a","bef9750470e394d3052dfe5a7847e9a0","4d1a01dfd6b6423b2d0ff0467f613bd8","7cfcc764f9b49f84e568c2a8b481ef89","341ade317df8ec02b7d7b686949f05a3","59f473418a3a0c96c8ec855aa72bd02a","d3c2a37fdf66b455a0ed47d33fc12229","215309237f9a05ec8f52edadcd0565bf","06301f971477597e382ec18e13f95e42","5f3e641690915ca863053b107ae0493a","44cca5b4413d63e3179289d31fe1bcf1","ce930365528e6b0f94d346e8a3a6c976","85ef440bb2c4d6dcc19f40e9d77059e3","b73d42aa8f40f578ac38efd8516ad8a3","fc4f7117734aa11e26028c3a1f0e9934","4b5216f48144eab06a89f40a112df0f9","7f7c41d2d2c4e4ea0359ce7e30c4676d","a52c1bfa60cdd122eb82001cf748b39b","4daf2c54f6e769ac3f1c55e2d2356e62","67530655ee6d2037c694d851f60a4d3a","72e15054e5bb83aa2714e9aa0f2a8aaa","72944fa2cce5836dad49dfd7147626d0","3c5c716d6aebf4093db91e57fe322e0c","64c0567172a45f553110cf14514d76dc","f5232a6a89b9b1646513f6f36cfd6edc","ed734e4322f6faf639acccc2130bd1f9","3a55a78645b57706246de6914d4ce134","438a096196cbf3f40712fc244347eced","59be47cbf4cb15affb56354159123835","0258cfa61471ed365f22acb22afd12db","28dfa4cf2be84ac882b092ae5afabf32","dbfa85b37328d28f5383d4a3929cece1","4c9c4bf389c624b596102b496c6b8c73","e124239b7fff31a73bfc3e95cfc593d3","38636bd694da4120897a2a695111039c","03f54ee64db45e6ac7025c881590f862","df6b0e8744489135e6c0c0520e07cca8","48538028ed97d91e767563f56035e684","217152373b3f900ae15ce0920bb06da9","ef229e92de99756605459456a30408f5","6dadc2917fc514e7e4c6f4cabe7d69a6","a81a01b4510a203a8811e202d3537fe8","37ac4cbd6b18d52a47105218c3573c36","5ab4d38c634c37598fc59a79eeef302f","e2a4479a35cb46058fa5fa4148e39287","a5ceecfe744045263b3b4c06e4d48cce","3a4566f4bd473c7fdfbb61f33b3fc0bb","44eca32d0e78189af01db90f90423c3f","5654b3d7d7805129b98db879f3bbd2af","995585143a6aa4597bb37cc29f6b6a3b","1f0dc12ac30b54f9bce844f5ae8b0906","c5888b6071631a3067ee4ac41fbdb167","22f2a2ad0edce5f59635f5ff2103737c","9c695460b513c801721475c2933ff8cc","2e27f2fa52041541cbb3652a7b01c358","deef54fb4c402325da2038fd78856071","0399a90269a2732ffe275bb1c1dd4cdc","b85b1ae0931ff943c3ce90f3556aed6d","dfea88cc5423da5be7ec5d44ddcaaedd","220a1d153fd4a6d65e4ef3ab23305e12","bd95af69943c6b10d72a1520da203070","2e2b6ee2ccf6a93255a41d6364a2937b","649abb7e2ae57a9e8ba160fd45c4081a","1dfa75c82f2fcac0f1c3c82a3b4345a5","9aaaa4f59fa0fcca3134ae0f5f0aec4d","4441feb4fbabff3c3ab20c0a0f80a31d","ca3e8da5b75106f616d4f40bccecccc5"],"entryHash":"d0544fa3f73aa9e46bdb5aee046d2362"}
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"status":200,"headers":{"cache-control":"public, max-age=0, must-revalidate","content-type":"image/x-icon","x-next-cache-tags":"_N_T_/layout,_N_T_/favicon.ico/layout,_N_T_/favicon.ico/route,_N_T_/favicon.ico"},"routeCache":{"key":"/route-cache/APP_ROUTE/adb2ea089a587cf57dd95fa5b11714bc555600b8777692e029801fce568a54ac/$/favicon.ico","owner":{"kind":"APP_ROUTE","sourceRoute":"/favicon.ico/route"},"isFallback":false}}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[49719,(e,t,r)=>{t.exports=e.x("assert",()=>require("assert"))},54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},27699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},21517,(e,t,r)=>{t.exports=e.x("http",()=>require("http"))},25328,(e,t,r)=>{t.exports=e.x("http2",()=>require("http2"))},24836,(e,t,r)=>{t.exports=e.x("https",()=>require("https"))},4446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},59043,(e,t,r)=>{t.exports=e.x("next/dist/server/runtime-reacts.external.js",()=>require("next/dist/server/runtime-reacts.external.js"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},2157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},50227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},46786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},88947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},55004,(e,t,r)=>{t.exports=e.x("tls",()=>require("tls"))},70722,(e,t,r)=>{t.exports=e.x("tty",()=>require("tty"))},92509,(e,t,r)=>{t.exports=e.x("url",()=>require("url"))},24361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},6461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},83464,e=>{"use strict";var t=e.i(65617),r=e.i(12892),s=e.i(24514);let a=/[\s\0#"'`\\$]/,n=()=>Response.json({error:(0,s.REFUSAL_MESSAGE)()},{status:403}),o={gemini:e=>t.default.get("https://generativelanguage.googleapis.com/v1beta/models",{params:{key:e},timeout:8e3}),claude:e=>t.default.get("https://api.anthropic.com/v1/models",{headers:{"x-api-key":e,"anthropic-version":"2023-06-01"},timeout:8e3}),openai:e=>t.default.get("https://api.openai.com/v1/models",{headers:{Authorization:`Bearer ${e}`},timeout:8e3})};async function i(e){return(0,s.isLocalRequest)(e)?Response.json({provider:(0,r.activeAi)()?.provider??null,keys:Object.fromEntries(Object.entries(r.AI_PROVIDERS).map(([e,t])=>[e,!!process.env[t.key]]))}):n()}async function u(e){let i;if(!(0,s.isLocalRequest)(e))return n();try{i=await e.json()}catch{return Response.json({error:"Invalid request body."},{status:400})}let u=i.provider;if(!("string"==typeof u&&u in r.AI_PROVIDERS))return Response.json({saved:!1,error:"Choose a provider."},{status:400});let l="string"==typeof i.key?i.key.trim():"";if(!l)return Response.json({saved:!1,error:"Required."},{status:400});if(a.test(l))return Response.json({saved:!1,error:"Contains spaces or special characters. Paste the key without them."},{status:400});try{await o[u](l)}catch(a){let e=t.default.isAxiosError(a)?a.response?.status:void 0,s=400===e||401===e||403===e?`${r.AI_PROVIDERS[u].label} rejected this key.`:`Could not reach ${r.AI_PROVIDERS[u].label} to check the key.`;return Response.json({saved:!1,error:s},{status:422})}try{(0,r.writeEnvLocal)({[r.AI_PROVIDER_KEY]:u,[r.AI_PROVIDERS[u].key]:l})}catch{return Response.json({saved:!1,error:"Key is valid but .env.local could not be written. Check folder permissions."},{status:500})}return Response.json({saved:!0,provider:u})}e.s(["GET",0,i,"POST",0,u])},71526,e=>{"use strict";var t=e.i(47909),r=e.i(74017),s=e.i(96250),a=e.i(59756),n=e.i(61916),o=e.i(74677),i=e.i(69741),u=e.i(16795),l=e.i(87718),p=e.i(95169),d=e.i(47587),c=e.i(66012),h=e.i(70101),x=e.i(26937),R=e.i(10372),v=e.i(93695),f=e.i(9580);e.i(52474);var m=e.i(220);let g=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/setup/ai/route",pathname:"/api/setup/ai",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/setup/ai/route.ts",nextConfigOutput:"",userland:()=>e.r(83464),...{}}),{workAsyncStorage:E,workUnitAsyncStorage:w,serverHooks:y}=g;async function q(e,t,s){s.requestMeta&&(0,a.setRequestMeta)(e,s.requestMeta),g.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let E="/api/setup/ai/route";E=E.replace(/\/index$/,"")||"/";let w=await g.prepare(e,t,{srcPage:E,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:y,deploymentId:q,params:C,nextConfig:A,parsedUrl:b,isDraftMode:S,prerenderManifest:O,routerServerContext:P,isOnDemandRevalidate:T,revalidateOnlyGenerated:_,resolvedPathname:I,clientReferenceManifest:k,serverActionsManifest:j}=w,N=(0,i.normalizeAppPath)(E),D=!!O.routes[I]&&(g.isDev||(0,f.isRouteCacheOwner)(I,g.cacheOwner,O.routes[I])),M=!!(O.dynamicRoutes[N]||D),H=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,b,!1):t.end("This page could not be found"),null);if(M&&!S){let e=O.dynamicRoutes[N];if(e&&!1===e.fallback&&!D){if(A.adapterPath)return await H();throw new v.NoFallbackError}}let U=null;!M||g.isDev||S||(U="/index"===(U=I)?"/":U);let L=!0===g.isDev||!M,$=M&&!L;j&&k&&(0,o.setManifestsSingleton)({page:E,clientReferenceManifest:k,serverActionsManifest:j});let F=e.method||"GET",K=(0,n.getTracer)(),V=K.getActiveScopeSpan(),G=!!(null==P?void 0:P.isWrappedByNextServer),B=!!(0,a.getRequestMeta)(e,"minimalMode"),X=(0,a.getRequestMeta)(e,"incrementalCache")||await g.getIncrementalCache(e,A,O,B);null==X||X.resetRequestCache(),globalThis.__incrementalCache=X;let z={params:C,previewProps:O.preview,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts,useCacheTimeout:A.experimental.useCacheTimeout},cacheComponents:!!A.cacheComponents,validationLevel:A.experimental.instantInsights.validationLevel,isDraftMode:S,supportsDynamicResponse:L,incrementalCache:X,hmrRefreshHash:(0,a.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:A.cacheLife,staticPageGenerationTimeout:A.staticPageGenerationTimeout,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,a)=>g.onRequestError(e,t,s,a,P)},sharedContext:{buildId:y,deploymentId:q}},W=new u.NodeNextRequest(e),Y=new u.NodeNextResponse(t),Z=l.NextRequestAdapter.fromNodeNextRequest(W,(0,l.signalFromNodeResponse)(t)),J=async({previousCacheEntry:r})=>{try{if(!B&&T&&_&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await g.handle(Z,z);e.fetchMetrics=z.renderOpts.fetchMetrics;let n=z.renderOpts.pendingWaitUntil;n&&s.waitUntil&&(s.waitUntil(n),n=void 0);let o=z.renderOpts.collectedTags;if(!M)return await (0,c.sendResponse)(W,Y,a,n),null;{let e=await a.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(a.headers);o&&(t[R.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==z.renderOpts.collectedRevalidate&&!(z.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&z.renderOpts.collectedRevalidate,s=void 0===z.renderOpts.collectedExpire||z.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==r&&r>0?A.expireTime:void 0:z.renderOpts.collectedExpire;return{value:{kind:m.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await g.onRequestError(e,t,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:T})},!1,P),t}},Q=async(a,o)=>{try{var i,u;let a=await g.handleResponse({req:e,nextConfig:A,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:O,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:_,responseGenerator:J,waitUntil:s.waitUntil,isMinimalMode:B});if(!M)return;if((null==a||null==(i=a.value)?void 0:i.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==a||null==(u=a.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",T?"REVALIDATED":a.isMiss?"MISS":a.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let n=(0,h.fromNodeOutgoingHttpHeaders)(a.value.headers);B&&M||n.delete(R.NEXT_CACHE_TAGS_HEADER),!a.cacheControl||t.getHeader("Cache-Control")||n.get("Cache-Control")||n.set("Cache-Control",(0,x.getCacheControlHeader)(a.cacheControl)),await (0,c.sendResponse)(W,Y,new Response(a.value.body,{headers:n,status:a.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await g.onRequestError(e,t,{routerKind:"App Router",routePath:N,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:T})},!1,P),M)throw t;await (0,c.sendResponse)(W,Y,new Response(null,{status:500}));return}finally{(()=>{if(!a)return;let e=t.statusCode;a.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(a.setStatus({code:n.SpanStatusCode.ERROR}),a.setAttribute("error.type",e.toString()));let r=K.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==p.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route")||N,i=`${F} ${s}`;a.setAttributes({"next.route":s,"http.route":s,"next.span_name":i}),a.updateName(i),o&&o!==a&&(o.setAttribute("http.route",s),o.updateName(i))})()}};if(G&&V)await Q(V,void 0);else{let t=K.getActiveScopeSpan();await K.withPropagatedContext(e.headers,()=>K.trace(p.BaseServerSpan.handleRequest,{spanName:`${F} ${E}`,kind:n.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},e=>Q(e,t)),void 0,!G)}}e.s(["handler",0,q,"patchFetch",0,function(){return(0,s.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:w})},"routeModule",0,g,"serverHooks",0,y,"workAsyncStorage",0,E,"workUnitAsyncStorage",0,w])},24514,e=>{"use strict";let t=new Set(["localhost","127.0.0.1","[::1]"]),r=new Set(["127.0.0.1","::1","::ffff:127.0.0.1"]);e.s(["REFUSAL_MESSAGE",0,()=>"1"===process.env.METRICFLOW_EXPOSED?"Setup and Connect are disabled because the dashboard is exposed on the network (--host). Restart without --host to use them.":"Setup is only available from localhost.","isLocalRequest",0,function(e){if("1"===process.env.METRICFLOW_EXPOSED)return!1;let s=e.headers.get("x-forwarded-for");if(s&&!s.split(",").every(e=>r.has(e.trim().replace(/^\[|\]$/g,""))))return!1;let a=(e.headers.get("host")??"").replace(/:\d+$/,"");if(!t.has(a))return!1;let n=e.headers.get("origin");try{return!n||t.has(new URL(n).hostname)}catch{return!1}}])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__027a1hx._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},59043,(e,t,r)=>{t.exports=e.x("next/dist/server/runtime-reacts.external.js",()=>require("next/dist/server/runtime-reacts.external.js"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},34199,e=>{"use strict";var t=e.i(90770);async function r(){return Response.json({items:(0,t.getTimings)()})}e.s(["GET",0,r])},73053,e=>{"use strict";var t=e.i(47909),r=e.i(74017),a=e.i(96250),n=e.i(59756),i=e.i(61916),s=e.i(74677),o=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),p=e.i(47587),c=e.i(66012),h=e.i(70101),x=e.i(26937),R=e.i(10372),v=e.i(93695),m=e.i(9580);e.i(52474);var g=e.i(220);let f=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/timings/route",pathname:"/api/timings",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/timings/route.ts",nextConfigOutput:"",userland:()=>e.r(34199),...{}}),{workAsyncStorage:w,workUnitAsyncStorage:E,serverHooks:C}=f;async function y(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),f.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/timings/route";w=w.replace(/\/index$/,"")||"/";let E=await f.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!E)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:C,deploymentId:y,params:T,nextConfig:A,parsedUrl:b,isDraftMode:q,prerenderManifest:P,routerServerContext:S,isOnDemandRevalidate:N,revalidateOnlyGenerated:O,resolvedPathname:_,clientReferenceManifest:k,serverActionsManifest:H}=E,j=(0,o.normalizeAppPath)(w),M=!!P.routes[_]&&(f.isDev||(0,m.isRouteCacheOwner)(_,f.cacheOwner,P.routes[_])),I=!!(P.dynamicRoutes[j]||M),U=async()=>((null==S?void 0:S.render404)?await S.render404(e,t,b,!1):t.end("This page could not be found"),null);if(I&&!q){let e=P.dynamicRoutes[j];if(e&&!1===e.fallback&&!M){if(A.adapterPath)return await U();throw new v.NoFallbackError}}let D=null;!I||f.isDev||q||(D="/index"===(D=_)?"/":D);let F=!0===f.isDev||!I,K=I&&!F;H&&k&&(0,s.setManifestsSingleton)({page:w,clientReferenceManifest:k,serverActionsManifest:H});let L=e.method||"GET",$=(0,i.getTracer)(),B=$.getActiveScopeSpan(),G=!!(null==S?void 0:S.isWrappedByNextServer),V=!!(0,n.getRequestMeta)(e,"minimalMode"),X=(0,n.getRequestMeta)(e,"incrementalCache")||await f.getIncrementalCache(e,A,P,V);null==X||X.resetRequestCache(),globalThis.__incrementalCache=X;let W={params:T,previewProps:P.preview,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts,useCacheTimeout:A.experimental.useCacheTimeout},cacheComponents:!!A.cacheComponents,validationLevel:A.experimental.instantInsights.validationLevel,isDraftMode:q,supportsDynamicResponse:F,incrementalCache:X,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:A.cacheLife,staticPageGenerationTimeout:A.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>f.onRequestError(e,t,a,n,S)},sharedContext:{buildId:C,deploymentId:y}},z=new l.NodeNextRequest(e),Z=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(z,(0,u.signalFromNodeResponse)(t)),Q=async({previousCacheEntry:r})=>{try{if(!V&&N&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await f.handle(J,W);e.fetchMetrics=W.renderOpts.fetchMetrics;let i=W.renderOpts.pendingWaitUntil;i&&a.waitUntil&&(a.waitUntil(i),i=void 0);let s=W.renderOpts.collectedTags;if(!I)return await (0,c.sendResponse)(z,Z,n,i),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);s&&(t[R.NEXT_CACHE_TAGS_HEADER]=s),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==W.renderOpts.collectedRevalidate&&!(W.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&W.renderOpts.collectedRevalidate,a=void 0===W.renderOpts.collectedExpire||W.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==r&&r>0?A.expireTime:void 0:W.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await f.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:K,isOnDemandRevalidate:N})},!1,S),t}},Y=async(n,s)=>{try{var o,l;let n=await f.handleResponse({req:e,nextConfig:A,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:P,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:O,responseGenerator:Q,waitUntil:a.waitUntil,isMinimalMode:V});if(!I)return;if((null==n||null==(o=n.value)?void 0:o.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",N?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),q&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let i=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);V&&I||i.delete(R.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||i.get("Cache-Control")||i.set("Cache-Control",(0,x.getCacheControlHeader)(n.cacheControl)),await (0,c.sendResponse)(z,Z,new Response(n.value.body,{headers:i,status:n.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await f.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:K,isOnDemandRevalidate:N})},!1,S),I)throw t;await (0,c.sendResponse)(z,Z,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:i.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||j,o=`${L} ${a}`;n.setAttributes({"next.route":a,"http.route":a,"next.span_name":o}),n.updateName(o),s&&s!==n&&(s.setAttribute("http.route",a),s.updateName(o))})()}};if(G&&B)await Y(B,void 0);else{let t=$.getActiveScopeSpan();await $.withPropagatedContext(e.headers,()=>$.trace(d.BaseServerSpan.handleRequest,{spanName:`${L} ${w}`,kind:i.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},e=>Y(e,t)),void 0,!G)}}e.s(["handler",0,y,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:E})},"routeModule",0,f,"serverHooks",0,C,"workAsyncStorage",0,w,"workUnitAsyncStorage",0,E])},90770,e=>{"use strict";let t=new Map;e.s(["getTimings",0,function(){return Array.from(t.entries()).map(([e,t])=>({name:e,value:t})).sort((e,t)=>t.value-e.value)},"recordTiming",0,function(e,r){t.set(e,Math.round(r))}])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__14tfjrn._.js.map
|