vinext 0.0.45 → 0.0.47
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/README.md +7 -5
- package/dist/build/prerender.d.ts +2 -1
- package/dist/build/prerender.js +80 -17
- package/dist/build/prerender.js.map +1 -1
- package/dist/build/report.d.ts +1 -1
- package/dist/build/route-classification-injector.d.ts +35 -0
- package/dist/build/route-classification-injector.js +61 -0
- package/dist/build/route-classification-injector.js.map +1 -0
- package/dist/build/route-classification-manifest.d.ts +1 -1
- package/dist/build/standalone.js +4 -3
- package/dist/build/standalone.js.map +1 -1
- package/dist/build/static-export.d.ts +1 -1
- package/dist/check.js +30 -18
- package/dist/check.js.map +1 -1
- package/dist/cli-args.d.ts +31 -0
- package/dist/cli-args.js +104 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli.js +6 -19
- package/dist/cli.js.map +1 -1
- package/dist/cloudflare/kv-cache-handler.js +29 -9
- package/dist/cloudflare/kv-cache-handler.js.map +1 -1
- package/dist/config/config-matchers.js +1 -0
- package/dist/config/config-matchers.js.map +1 -1
- package/dist/config/next-config.d.ts +42 -4
- package/dist/config/next-config.js +27 -0
- package/dist/config/next-config.js.map +1 -1
- package/dist/deploy.js +18 -23
- package/dist/deploy.js.map +1 -1
- package/dist/entries/app-rsc-entry.d.ts +4 -3
- package/dist/entries/app-rsc-entry.js +435 -2317
- package/dist/entries/app-rsc-entry.js.map +1 -1
- package/dist/entries/app-rsc-manifest.d.ts +24 -0
- package/dist/entries/app-rsc-manifest.js +155 -0
- package/dist/entries/app-rsc-manifest.js.map +1 -0
- package/dist/entries/pages-server-entry.js +18 -105
- package/dist/entries/pages-server-entry.js.map +1 -1
- package/dist/index.js +82 -85
- package/dist/index.js.map +1 -1
- package/dist/plugins/fonts.js +54 -32
- package/dist/plugins/fonts.js.map +1 -1
- package/dist/plugins/rsc-client-shim-excludes.d.ts +6 -0
- package/dist/plugins/rsc-client-shim-excludes.js +28 -0
- package/dist/plugins/rsc-client-shim-excludes.js.map +1 -0
- package/dist/routing/app-route-graph.d.ts +109 -0
- package/dist/routing/app-route-graph.js +819 -0
- package/dist/routing/app-route-graph.js.map +1 -0
- package/dist/routing/app-router.d.ts +2 -79
- package/dist/routing/app-router.js +7 -621
- package/dist/routing/app-router.js.map +1 -1
- package/dist/routing/route-pattern.d.ts +9 -0
- package/dist/routing/route-pattern.js +90 -0
- package/dist/routing/route-pattern.js.map +1 -0
- package/dist/routing/route-trie.js +10 -11
- package/dist/routing/route-trie.js.map +1 -1
- package/dist/server/app-browser-entry.js +94 -232
- package/dist/server/app-browser-entry.js.map +1 -1
- package/dist/server/app-browser-error.d.ts +3 -4
- package/dist/server/app-browser-error.js +8 -4
- package/dist/server/app-browser-error.js.map +1 -1
- package/dist/server/app-browser-navigation-controller.d.ts +73 -0
- package/dist/server/app-browser-navigation-controller.js +282 -0
- package/dist/server/app-browser-navigation-controller.js.map +1 -0
- package/dist/server/app-browser-state.d.ts +1 -1
- package/dist/server/app-browser-state.js.map +1 -1
- package/dist/server/app-elements.js +1 -5
- package/dist/server/app-elements.js.map +1 -1
- package/dist/server/app-fallback-renderer.d.ts +57 -0
- package/dist/server/app-fallback-renderer.js +79 -0
- package/dist/server/app-fallback-renderer.js.map +1 -0
- package/dist/server/app-hook-warning-suppression.d.ts +7 -0
- package/dist/server/app-hook-warning-suppression.js +12 -0
- package/dist/server/app-hook-warning-suppression.js.map +1 -0
- package/dist/server/app-middleware.d.ts +32 -0
- package/dist/server/app-middleware.js +147 -0
- package/dist/server/app-middleware.js.map +1 -0
- package/dist/server/app-mounted-slots-header.d.ts +17 -0
- package/dist/server/app-mounted-slots-header.js +21 -0
- package/dist/server/app-mounted-slots-header.js.map +1 -0
- package/dist/server/app-page-boundary-render.d.ts +4 -2
- package/dist/server/app-page-boundary-render.js +50 -30
- package/dist/server/app-page-boundary-render.js.map +1 -1
- package/dist/server/app-page-boundary.d.ts +12 -1
- package/dist/server/app-page-boundary.js +27 -12
- package/dist/server/app-page-boundary.js.map +1 -1
- package/dist/server/app-page-cache.d.ts +22 -5
- package/dist/server/app-page-cache.js +90 -11
- package/dist/server/app-page-cache.js.map +1 -1
- package/dist/server/app-page-dispatch.d.ts +123 -0
- package/dist/server/app-page-dispatch.js +348 -0
- package/dist/server/app-page-dispatch.js.map +1 -0
- package/dist/server/app-page-element-builder.d.ts +61 -0
- package/dist/server/app-page-element-builder.js +139 -0
- package/dist/server/app-page-element-builder.js.map +1 -0
- package/dist/server/app-page-execution.d.ts +4 -3
- package/dist/server/app-page-execution.js +5 -8
- package/dist/server/app-page-execution.js.map +1 -1
- package/dist/server/app-page-head.d.ts +55 -0
- package/dist/server/app-page-head.js +196 -0
- package/dist/server/app-page-head.js.map +1 -0
- package/dist/server/app-page-method.d.ts +16 -0
- package/dist/server/app-page-method.js +30 -0
- package/dist/server/app-page-method.js.map +1 -0
- package/dist/server/app-page-params.d.ts +8 -0
- package/dist/server/app-page-params.js +28 -0
- package/dist/server/app-page-params.js.map +1 -0
- package/dist/server/app-page-render.d.ts +7 -2
- package/dist/server/app-page-render.js +131 -32
- package/dist/server/app-page-render.js.map +1 -1
- package/dist/server/app-page-request.d.ts +23 -8
- package/dist/server/app-page-request.js +51 -6
- package/dist/server/app-page-request.js.map +1 -1
- package/dist/server/app-page-response.d.ts +1 -0
- package/dist/server/app-page-response.js +3 -7
- package/dist/server/app-page-response.js.map +1 -1
- package/dist/server/app-page-route-wiring.d.ts +29 -5
- package/dist/server/app-page-route-wiring.js +30 -8
- package/dist/server/app-page-route-wiring.js.map +1 -1
- package/dist/server/app-page-stream.d.ts +10 -0
- package/dist/server/app-page-stream.js +5 -1
- package/dist/server/app-page-stream.js.map +1 -1
- package/dist/server/app-post-middleware-context.d.ts +16 -0
- package/dist/server/app-post-middleware-context.js +28 -0
- package/dist/server/app-post-middleware-context.js.map +1 -0
- package/dist/server/app-prerender-endpoints.d.ts +19 -0
- package/dist/server/app-prerender-endpoints.js +96 -0
- package/dist/server/app-prerender-endpoints.js.map +1 -0
- package/dist/server/app-prerender-static-params.d.ts +16 -0
- package/dist/server/app-prerender-static-params.js +14 -0
- package/dist/server/app-prerender-static-params.js.map +1 -0
- package/dist/server/app-request-context.d.ts +22 -0
- package/dist/server/app-request-context.js +30 -0
- package/dist/server/app-request-context.js.map +1 -0
- package/dist/server/app-route-handler-cache.d.ts +4 -0
- package/dist/server/app-route-handler-cache.js +11 -3
- package/dist/server/app-route-handler-cache.js.map +1 -1
- package/dist/server/app-route-handler-dispatch.d.ts +43 -0
- package/dist/server/app-route-handler-dispatch.js +149 -0
- package/dist/server/app-route-handler-dispatch.js.map +1 -0
- package/dist/server/app-route-handler-execution.d.ts +8 -3
- package/dist/server/app-route-handler-execution.js +25 -4
- package/dist/server/app-route-handler-execution.js.map +1 -1
- package/dist/server/app-route-handler-response.d.ts +6 -3
- package/dist/server/app-route-handler-response.js +52 -11
- package/dist/server/app-route-handler-response.js.map +1 -1
- package/dist/server/app-route-handler-runtime.d.ts +4 -1
- package/dist/server/app-route-handler-runtime.js +107 -1
- package/dist/server/app-route-handler-runtime.js.map +1 -1
- package/dist/server/app-router-entry.js.map +1 -1
- package/dist/server/app-rsc-error-handler.d.ts +21 -0
- package/dist/server/app-rsc-error-handler.js +30 -0
- package/dist/server/app-rsc-error-handler.js.map +1 -0
- package/dist/server/app-rsc-errors.d.ts +27 -0
- package/dist/server/app-rsc-errors.js +42 -0
- package/dist/server/app-rsc-errors.js.map +1 -0
- package/dist/server/app-rsc-handler.d.ts +117 -0
- package/dist/server/app-rsc-handler.js +260 -0
- package/dist/server/app-rsc-handler.js.map +1 -0
- package/dist/server/app-rsc-request-normalization.d.ts +40 -0
- package/dist/server/app-rsc-request-normalization.js +63 -0
- package/dist/server/app-rsc-request-normalization.js.map +1 -0
- package/dist/server/app-rsc-response-finalizer.d.ts +30 -0
- package/dist/server/app-rsc-response-finalizer.js +38 -0
- package/dist/server/app-rsc-response-finalizer.js.map +1 -0
- package/dist/server/app-rsc-route-matching.d.ts +40 -0
- package/dist/server/app-rsc-route-matching.js +66 -0
- package/dist/server/app-rsc-route-matching.js.map +1 -0
- package/dist/server/app-segment-config.d.ts +33 -0
- package/dist/server/app-segment-config.js +86 -0
- package/dist/server/app-segment-config.js.map +1 -0
- package/dist/server/app-server-action-execution.d.ts +88 -1
- package/dist/server/app-server-action-execution.js +257 -5
- package/dist/server/app-server-action-execution.js.map +1 -1
- package/dist/server/app-ssr-entry.d.ts +7 -0
- package/dist/server/app-ssr-entry.js +30 -9
- package/dist/server/app-ssr-entry.js.map +1 -1
- package/dist/server/app-ssr-stream.d.ts +4 -2
- package/dist/server/app-ssr-stream.js +29 -2
- package/dist/server/app-ssr-stream.js.map +1 -1
- package/dist/server/app-static-generation.d.ts +15 -0
- package/dist/server/app-static-generation.js +20 -0
- package/dist/server/app-static-generation.js.map +1 -0
- package/dist/server/cache-control.d.ts +24 -0
- package/dist/server/cache-control.js +33 -0
- package/dist/server/cache-control.js.map +1 -0
- package/dist/server/dev-error-overlay-store.d.ts +23 -0
- package/dist/server/dev-error-overlay-store.js +67 -0
- package/dist/server/dev-error-overlay-store.js.map +1 -0
- package/dist/server/dev-error-overlay.d.ts +15 -0
- package/dist/server/dev-error-overlay.js +548 -0
- package/dist/server/dev-error-overlay.js.map +1 -0
- package/dist/server/dev-route-files.d.ts +7 -0
- package/dist/server/dev-route-files.js +73 -0
- package/dist/server/dev-route-files.js.map +1 -0
- package/dist/server/dev-server.js +4 -0
- package/dist/server/dev-server.js.map +1 -1
- package/dist/server/file-based-metadata.d.ts +17 -0
- package/dist/server/file-based-metadata.js +356 -0
- package/dist/server/file-based-metadata.js.map +1 -0
- package/dist/server/implicit-tags.d.ts +6 -0
- package/dist/server/implicit-tags.js +42 -0
- package/dist/server/implicit-tags.js.map +1 -0
- package/dist/server/instrumentation-runtime.d.ts +44 -0
- package/dist/server/instrumentation-runtime.js +29 -0
- package/dist/server/instrumentation-runtime.js.map +1 -0
- package/dist/server/instrumentation.js.map +1 -1
- package/dist/server/isr-cache.d.ts +16 -3
- package/dist/server/isr-cache.js +56 -8
- package/dist/server/isr-cache.js.map +1 -1
- package/dist/server/metadata-route-build-data.d.ts +25 -0
- package/dist/server/metadata-route-build-data.js +150 -0
- package/dist/server/metadata-route-build-data.js.map +1 -0
- package/dist/server/metadata-route-response.d.ts +17 -0
- package/dist/server/metadata-route-response.js +187 -0
- package/dist/server/metadata-route-response.js.map +1 -0
- package/dist/server/metadata-routes.d.ts +42 -4
- package/dist/server/metadata-routes.js +127 -11
- package/dist/server/metadata-routes.js.map +1 -1
- package/dist/server/middleware-matcher.d.ts +15 -0
- package/dist/server/middleware-matcher.js +102 -0
- package/dist/server/middleware-matcher.js.map +1 -0
- package/dist/server/middleware-request-headers.js +2 -1
- package/dist/server/middleware-request-headers.js.map +1 -1
- package/dist/server/middleware-runtime.d.ts +39 -0
- package/dist/server/middleware-runtime.js +159 -0
- package/dist/server/middleware-runtime.js.map +1 -0
- package/dist/server/middleware.d.ts +4 -36
- package/dist/server/middleware.js +18 -228
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/pages-page-data.d.ts +7 -2
- package/dist/server/pages-page-data.js +10 -5
- package/dist/server/pages-page-data.js.map +1 -1
- package/dist/server/pages-page-response.d.ts +2 -1
- package/dist/server/pages-page-response.js +5 -3
- package/dist/server/pages-page-response.js.map +1 -1
- package/dist/server/prerender-work-unit-setup.d.ts +7 -0
- package/dist/server/prerender-work-unit-setup.js +30 -0
- package/dist/server/prerender-work-unit-setup.js.map +1 -0
- package/dist/server/prod-server.js +10 -14
- package/dist/server/prod-server.js.map +1 -1
- package/dist/server/request-pipeline.d.ts +46 -5
- package/dist/server/request-pipeline.js +84 -5
- package/dist/server/request-pipeline.js.map +1 -1
- package/dist/server/rsc-stream-hints.d.ts +7 -0
- package/dist/server/rsc-stream-hints.js +38 -0
- package/dist/server/rsc-stream-hints.js.map +1 -0
- package/dist/server/seed-cache.js +19 -8
- package/dist/server/seed-cache.js.map +1 -1
- package/dist/server/server-action-not-found.d.ts +9 -0
- package/dist/server/server-action-not-found.js +40 -0
- package/dist/server/server-action-not-found.js.map +1 -0
- package/dist/shims/cache-runtime.js +28 -11
- package/dist/shims/cache-runtime.js.map +1 -1
- package/dist/shims/cache.d.ts +39 -4
- package/dist/shims/cache.js +93 -16
- package/dist/shims/cache.js.map +1 -1
- package/dist/shims/error-boundary.d.ts +66 -5
- package/dist/shims/error-boundary.js +106 -4
- package/dist/shims/error-boundary.js.map +1 -1
- package/dist/shims/fetch-cache.d.ts +4 -1
- package/dist/shims/fetch-cache.js +55 -13
- package/dist/shims/fetch-cache.js.map +1 -1
- package/dist/shims/font-google-base.d.ts +5 -4
- package/dist/shims/font-google-base.js +61 -13
- package/dist/shims/font-google-base.js.map +1 -1
- package/dist/shims/headers.d.ts +14 -2
- package/dist/shims/headers.js +127 -17
- package/dist/shims/headers.js.map +1 -1
- package/dist/shims/image.js +116 -10
- package/dist/shims/image.js.map +1 -1
- package/dist/shims/internal/make-hanging-promise.d.ts +16 -0
- package/dist/shims/internal/make-hanging-promise.js +46 -0
- package/dist/shims/internal/make-hanging-promise.js.map +1 -0
- package/dist/shims/internal/work-unit-async-storage.d.ts +26 -3
- package/dist/shims/internal/work-unit-async-storage.js +6 -3
- package/dist/shims/internal/work-unit-async-storage.js.map +1 -1
- package/dist/shims/metadata.d.ts +38 -26
- package/dist/shims/metadata.js +75 -45
- package/dist/shims/metadata.js.map +1 -1
- package/dist/shims/navigation.d.ts +10 -1
- package/dist/shims/navigation.js +18 -1
- package/dist/shims/navigation.js.map +1 -1
- package/dist/shims/navigation.react-server.d.ts +2 -2
- package/dist/shims/navigation.react-server.js +2 -2
- package/dist/shims/navigation.react-server.js.map +1 -1
- package/dist/shims/offline.d.ts +5 -0
- package/dist/shims/offline.js +17 -0
- package/dist/shims/offline.js.map +1 -0
- package/dist/shims/request-state-types.d.ts +3 -2
- package/dist/shims/root-params.d.ts +11 -0
- package/dist/shims/root-params.js +24 -0
- package/dist/shims/root-params.js.map +1 -0
- package/dist/shims/router.js +1 -1
- package/dist/shims/server.d.ts +3 -1
- package/dist/shims/server.js +83 -5
- package/dist/shims/server.js.map +1 -1
- package/dist/shims/thenable-params.d.ts +5 -0
- package/dist/shims/thenable-params.js +37 -0
- package/dist/shims/thenable-params.js.map +1 -0
- package/dist/shims/unified-request-context.d.ts +3 -2
- package/dist/shims/unified-request-context.js +3 -0
- package/dist/shims/unified-request-context.js.map +1 -1
- package/dist/shims/use-merged-ref.d.ts +7 -0
- package/dist/shims/use-merged-ref.js +40 -0
- package/dist/shims/use-merged-ref.js.map +1 -0
- package/dist/utils/cache-control-metadata.d.ts +6 -0
- package/dist/utils/cache-control-metadata.js +16 -0
- package/dist/utils/cache-control-metadata.js.map +1 -0
- package/package.json +6 -1
- package/dist/server/middleware-codegen.d.ts +0 -54
- package/dist/server/middleware-codegen.js +0 -414
- package/dist/server/middleware-codegen.js.map +0 -1
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
import { dismissOverlay, expandOverlay, getOverlaySnapshot, minimizeOverlay, reportToOverlay, setOverlayIndex, subscribeOverlay } from "./dev-error-overlay-store.js";
|
|
2
|
+
import { useEffect, useSyncExternalStore } from "react";
|
|
3
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { createRoot } from "react-dom/client";
|
|
5
|
+
//#region src/server/dev-error-overlay.tsx
|
|
6
|
+
const MOUNT_NODE_ID = "__vinext_dev_error_overlay_root";
|
|
7
|
+
let reactRoot = null;
|
|
8
|
+
let installed = false;
|
|
9
|
+
const reportedErrors = /* @__PURE__ */ new WeakSet();
|
|
10
|
+
function rememberReported(error) {
|
|
11
|
+
if (error && typeof error === "object") reportedErrors.add(error);
|
|
12
|
+
}
|
|
13
|
+
function alreadyReported(error) {
|
|
14
|
+
return !!error && typeof error === "object" && reportedErrors.has(error);
|
|
15
|
+
}
|
|
16
|
+
function installDevErrorOverlay() {
|
|
17
|
+
if (installed || typeof window === "undefined") return;
|
|
18
|
+
installed = true;
|
|
19
|
+
window.addEventListener("error", (event) => {
|
|
20
|
+
const err = event.error;
|
|
21
|
+
if (err instanceof Error) {
|
|
22
|
+
if (alreadyReported(err)) return;
|
|
23
|
+
reportDevError(err, { source: "window-error" });
|
|
24
|
+
} else if (event.message) reportDevError(new Error(event.message), { source: "window-error" });
|
|
25
|
+
});
|
|
26
|
+
window.addEventListener("unhandledrejection", (event) => {
|
|
27
|
+
const reason = event.reason;
|
|
28
|
+
if (reason instanceof Error) {
|
|
29
|
+
if (alreadyReported(reason)) return;
|
|
30
|
+
reportDevError(reason, { source: "unhandledrejection" });
|
|
31
|
+
} else reportDevError(new Error(String(reason)), { source: "unhandledrejection" });
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function reportDevError(error, options) {
|
|
35
|
+
if (typeof window === "undefined") return;
|
|
36
|
+
rememberReported(error);
|
|
37
|
+
const message = error instanceof Error ? error.message : typeof error === "string" ? error : safeStringify(error);
|
|
38
|
+
const stack = error instanceof Error ? error.stack : void 0;
|
|
39
|
+
ensureMounted();
|
|
40
|
+
reportToOverlay({
|
|
41
|
+
source: options.source,
|
|
42
|
+
message,
|
|
43
|
+
stack,
|
|
44
|
+
componentStack: options.componentStack
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function devOnCaughtError(error, errorInfo) {
|
|
48
|
+
console.error(error);
|
|
49
|
+
if (errorInfo?.componentStack) console.error("The above error occurred in a React component:\n" + errorInfo.componentStack);
|
|
50
|
+
reportDevError(error, {
|
|
51
|
+
source: "caught",
|
|
52
|
+
componentStack: errorInfo?.componentStack
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function devOnUncaughtError(error, errorInfo) {
|
|
56
|
+
console.error(error);
|
|
57
|
+
if (errorInfo?.componentStack) console.error("The above error occurred in a React component:\n" + errorInfo.componentStack);
|
|
58
|
+
reportDevError(error, {
|
|
59
|
+
source: "uncaught",
|
|
60
|
+
componentStack: errorInfo?.componentStack
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function safeStringify(value) {
|
|
64
|
+
try {
|
|
65
|
+
return JSON.stringify(value);
|
|
66
|
+
} catch {
|
|
67
|
+
return Object.prototype.toString.call(value);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function ensureMounted() {
|
|
71
|
+
if (reactRoot) return;
|
|
72
|
+
const node = document.createElement("div");
|
|
73
|
+
node.id = MOUNT_NODE_ID;
|
|
74
|
+
(document.body ?? document.documentElement).appendChild(node);
|
|
75
|
+
reactRoot = createRoot(node);
|
|
76
|
+
reactRoot.render(/* @__PURE__ */ jsx(DevErrorOverlayApp, {}));
|
|
77
|
+
}
|
|
78
|
+
const SOURCE_LABEL = {
|
|
79
|
+
uncaught: "Unhandled Runtime Error",
|
|
80
|
+
caught: "Runtime Error",
|
|
81
|
+
"window-error": "Unhandled Script Error",
|
|
82
|
+
unhandledrejection: "Unhandled Promise Rejection"
|
|
83
|
+
};
|
|
84
|
+
function DevErrorOverlayApp() {
|
|
85
|
+
const state = useSyncExternalStore(subscribeOverlay, getOverlaySnapshot, getOverlaySnapshot);
|
|
86
|
+
if (state.errors.length === 0) return null;
|
|
87
|
+
const current = state.errors[state.index] ?? state.errors[0];
|
|
88
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("style", { children: overlayStylesheet }), state.minimized ? /* @__PURE__ */ jsx(DevErrorIndicator, {
|
|
89
|
+
count: state.errors.length,
|
|
90
|
+
source: current.source,
|
|
91
|
+
onExpand: expandOverlay
|
|
92
|
+
}) : /* @__PURE__ */ jsx(DevErrorOverlay, {
|
|
93
|
+
error: current,
|
|
94
|
+
index: state.index,
|
|
95
|
+
total: state.errors.length,
|
|
96
|
+
onPrev: () => setOverlayIndex(state.index - 1),
|
|
97
|
+
onNext: () => setOverlayIndex(state.index + 1),
|
|
98
|
+
onMinimize: minimizeOverlay,
|
|
99
|
+
onDismiss: dismissOverlay
|
|
100
|
+
})] });
|
|
101
|
+
}
|
|
102
|
+
function DevErrorIndicator({ count, source, onExpand }) {
|
|
103
|
+
return /* @__PURE__ */ jsx("div", {
|
|
104
|
+
style: indicatorContainerStyle,
|
|
105
|
+
children: /* @__PURE__ */ jsxs("button", {
|
|
106
|
+
type: "button",
|
|
107
|
+
"data-testid": "vinext-dev-error-indicator",
|
|
108
|
+
"aria-label": `${count} runtime error${count === 1 ? "" : "s"} — click to expand`,
|
|
109
|
+
title: SOURCE_LABEL[source],
|
|
110
|
+
onClick: onExpand,
|
|
111
|
+
className: "vinext-overlay-indicator",
|
|
112
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
113
|
+
"aria-hidden": "true",
|
|
114
|
+
style: indicatorIconStyle,
|
|
115
|
+
children: "⚠"
|
|
116
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
117
|
+
"data-testid": "vinext-dev-error-indicator-count",
|
|
118
|
+
style: indicatorCountStyle,
|
|
119
|
+
children: count
|
|
120
|
+
})]
|
|
121
|
+
})
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function DevErrorOverlay({ error, index, total, onPrev, onNext, onMinimize, onDismiss }) {
|
|
125
|
+
const frames = error.stack ? parseStack(error.stack) : [];
|
|
126
|
+
useEffect(() => {
|
|
127
|
+
const onKey = (e) => {
|
|
128
|
+
if (e.key === "Escape") onMinimize();
|
|
129
|
+
else if (e.key === "ArrowLeft" && total > 1) onPrev();
|
|
130
|
+
else if (e.key === "ArrowRight" && total > 1) onNext();
|
|
131
|
+
};
|
|
132
|
+
window.addEventListener("keydown", onKey);
|
|
133
|
+
return () => window.removeEventListener("keydown", onKey);
|
|
134
|
+
}, [
|
|
135
|
+
onMinimize,
|
|
136
|
+
onPrev,
|
|
137
|
+
onNext,
|
|
138
|
+
total
|
|
139
|
+
]);
|
|
140
|
+
return /* @__PURE__ */ jsx("div", {
|
|
141
|
+
style: backdropStyle,
|
|
142
|
+
"data-testid": "vinext-dev-error-backdrop",
|
|
143
|
+
onClick: onMinimize,
|
|
144
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
145
|
+
role: "dialog",
|
|
146
|
+
"aria-modal": "true",
|
|
147
|
+
"aria-label": SOURCE_LABEL[error.source],
|
|
148
|
+
"data-testid": "vinext-dev-error-overlay",
|
|
149
|
+
style: dialogStyle,
|
|
150
|
+
onClick: (e) => e.stopPropagation(),
|
|
151
|
+
children: [
|
|
152
|
+
/* @__PURE__ */ jsx("div", { style: accentBarStyle }),
|
|
153
|
+
/* @__PURE__ */ jsxs("header", {
|
|
154
|
+
style: headerStyle,
|
|
155
|
+
children: [
|
|
156
|
+
/* @__PURE__ */ jsxs("div", {
|
|
157
|
+
style: headerLeftStyle,
|
|
158
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
159
|
+
"data-testid": "vinext-dev-error-title",
|
|
160
|
+
style: badgeStyle,
|
|
161
|
+
children: SOURCE_LABEL[error.source]
|
|
162
|
+
}), total > 1 ? /* @__PURE__ */ jsxs("div", {
|
|
163
|
+
"data-testid": "vinext-dev-error-pagination",
|
|
164
|
+
style: paginationStyle,
|
|
165
|
+
children: [
|
|
166
|
+
/* @__PURE__ */ jsx("button", {
|
|
167
|
+
type: "button",
|
|
168
|
+
"data-testid": "vinext-dev-error-prev",
|
|
169
|
+
onClick: onPrev,
|
|
170
|
+
disabled: index === 0,
|
|
171
|
+
className: "vinext-overlay-nav",
|
|
172
|
+
"aria-label": "Previous error",
|
|
173
|
+
children: "‹"
|
|
174
|
+
}),
|
|
175
|
+
/* @__PURE__ */ jsxs("span", {
|
|
176
|
+
"data-testid": "vinext-dev-error-counter",
|
|
177
|
+
style: counterStyle,
|
|
178
|
+
children: [
|
|
179
|
+
index + 1,
|
|
180
|
+
" of ",
|
|
181
|
+
total
|
|
182
|
+
]
|
|
183
|
+
}),
|
|
184
|
+
/* @__PURE__ */ jsx("button", {
|
|
185
|
+
type: "button",
|
|
186
|
+
"data-testid": "vinext-dev-error-next",
|
|
187
|
+
onClick: onNext,
|
|
188
|
+
disabled: index === total - 1,
|
|
189
|
+
className: "vinext-overlay-nav",
|
|
190
|
+
"aria-label": "Next error",
|
|
191
|
+
children: "›"
|
|
192
|
+
})
|
|
193
|
+
]
|
|
194
|
+
}) : null]
|
|
195
|
+
}),
|
|
196
|
+
/* @__PURE__ */ jsx("button", {
|
|
197
|
+
type: "button",
|
|
198
|
+
"data-testid": "vinext-dev-error-minimize",
|
|
199
|
+
onClick: onMinimize,
|
|
200
|
+
className: "vinext-overlay-minimize",
|
|
201
|
+
"aria-label": "Minimize",
|
|
202
|
+
title: "Minimize (Esc)",
|
|
203
|
+
children: "–"
|
|
204
|
+
}),
|
|
205
|
+
/* @__PURE__ */ jsx("button", {
|
|
206
|
+
type: "button",
|
|
207
|
+
"data-testid": "vinext-dev-error-close",
|
|
208
|
+
onClick: onDismiss,
|
|
209
|
+
className: "vinext-overlay-close",
|
|
210
|
+
"aria-label": "Dismiss",
|
|
211
|
+
title: "Dismiss all errors",
|
|
212
|
+
children: "×"
|
|
213
|
+
})
|
|
214
|
+
]
|
|
215
|
+
}),
|
|
216
|
+
/* @__PURE__ */ jsxs("div", {
|
|
217
|
+
style: bodyStyle,
|
|
218
|
+
children: [
|
|
219
|
+
/* @__PURE__ */ jsx("h2", {
|
|
220
|
+
"data-testid": "vinext-dev-error-message",
|
|
221
|
+
style: messageStyle,
|
|
222
|
+
children: error.message
|
|
223
|
+
}),
|
|
224
|
+
frames.length > 0 ? /* @__PURE__ */ jsx("ol", {
|
|
225
|
+
"data-testid": "vinext-dev-error-stack",
|
|
226
|
+
style: stackListStyle,
|
|
227
|
+
children: frames.map((frame) => /* @__PURE__ */ jsxs("li", {
|
|
228
|
+
className: "vinext-overlay-frame",
|
|
229
|
+
style: stackItemStyle,
|
|
230
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
231
|
+
style: frameFnStyle,
|
|
232
|
+
children: frame.fn
|
|
233
|
+
}), frame.file ? /* @__PURE__ */ jsxs("span", {
|
|
234
|
+
style: frameLocStyle,
|
|
235
|
+
children: [
|
|
236
|
+
frame.file,
|
|
237
|
+
frame.line ? `:${frame.line}` : "",
|
|
238
|
+
frame.col ? `:${frame.col}` : ""
|
|
239
|
+
]
|
|
240
|
+
}) : null]
|
|
241
|
+
}, frame.key))
|
|
242
|
+
}) : null,
|
|
243
|
+
error.componentStack ? /* @__PURE__ */ jsxs("details", {
|
|
244
|
+
style: detailsStyle,
|
|
245
|
+
children: [/* @__PURE__ */ jsx("summary", {
|
|
246
|
+
style: summaryStyle,
|
|
247
|
+
children: "Component stack"
|
|
248
|
+
}), /* @__PURE__ */ jsx("pre", {
|
|
249
|
+
"data-testid": "vinext-dev-error-component-stack",
|
|
250
|
+
style: componentStackStyle,
|
|
251
|
+
children: error.componentStack
|
|
252
|
+
})]
|
|
253
|
+
}) : null
|
|
254
|
+
]
|
|
255
|
+
})
|
|
256
|
+
]
|
|
257
|
+
})
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
const V8_PAREN_FRAME = /^(.*?)\s*\((.+):(\d+):(\d+)\)$/;
|
|
261
|
+
const V8_BARE_FRAME = /^(.+):(\d+):(\d+)$/;
|
|
262
|
+
const MOZ_FRAME = /^(.*?)@(.+):(\d+):(\d+)$/;
|
|
263
|
+
function parseStack(stack) {
|
|
264
|
+
const frames = [];
|
|
265
|
+
const seen = /* @__PURE__ */ new Map();
|
|
266
|
+
const pushFrame = (fn, file, line, col) => {
|
|
267
|
+
const base = `${fn}@${file ?? ""}:${line ?? ""}:${col ?? ""}`;
|
|
268
|
+
const count = (seen.get(base) ?? 0) + 1;
|
|
269
|
+
seen.set(base, count);
|
|
270
|
+
const key = count === 1 ? base : `${base}#${count}`;
|
|
271
|
+
frames.push({
|
|
272
|
+
key,
|
|
273
|
+
fn,
|
|
274
|
+
file,
|
|
275
|
+
line,
|
|
276
|
+
col
|
|
277
|
+
});
|
|
278
|
+
};
|
|
279
|
+
for (const raw of stack.split("\n")) {
|
|
280
|
+
const line = raw.trim();
|
|
281
|
+
if (!line) continue;
|
|
282
|
+
if (line.startsWith("at ")) {
|
|
283
|
+
const body = line.slice(3);
|
|
284
|
+
const parenMatch = body.match(V8_PAREN_FRAME);
|
|
285
|
+
if (parenMatch) {
|
|
286
|
+
pushFrame(parenMatch[1] || "<anonymous>", parenMatch[2], parenMatch[3], parenMatch[4]);
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
const bareMatch = body.match(V8_BARE_FRAME);
|
|
290
|
+
if (bareMatch) {
|
|
291
|
+
pushFrame("<anonymous>", bareMatch[1], bareMatch[2], bareMatch[3]);
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
pushFrame(body);
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
const mozMatch = line.match(MOZ_FRAME);
|
|
298
|
+
if (mozMatch) {
|
|
299
|
+
pushFrame(mozMatch[1] || "<anonymous>", mozMatch[2], mozMatch[3], mozMatch[4]);
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
pushFrame(line);
|
|
303
|
+
}
|
|
304
|
+
return frames;
|
|
305
|
+
}
|
|
306
|
+
const FONT_STACK = "ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
|
|
307
|
+
const MONO_STACK = "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
|
|
308
|
+
const overlayStylesheet = `
|
|
309
|
+
@keyframes vinextOverlayBackdropIn {
|
|
310
|
+
from { opacity: 0; }
|
|
311
|
+
to { opacity: 1; }
|
|
312
|
+
}
|
|
313
|
+
@keyframes vinextOverlayDialogIn {
|
|
314
|
+
from { opacity: 0; transform: translateY(8px) scale(0.98); }
|
|
315
|
+
to { opacity: 1; transform: translateY(0) scale(1); }
|
|
316
|
+
}
|
|
317
|
+
@keyframes vinextOverlayIndicatorIn {
|
|
318
|
+
from { opacity: 0; transform: translateY(8px); }
|
|
319
|
+
to { opacity: 1; transform: translateY(0); }
|
|
320
|
+
}
|
|
321
|
+
.vinext-overlay-nav {
|
|
322
|
+
background: transparent;
|
|
323
|
+
border: none;
|
|
324
|
+
color: inherit;
|
|
325
|
+
cursor: pointer;
|
|
326
|
+
padding: 2px 8px;
|
|
327
|
+
font-size: 14px;
|
|
328
|
+
line-height: 1;
|
|
329
|
+
border-radius: 6px;
|
|
330
|
+
transition: background 0.12s ease;
|
|
331
|
+
}
|
|
332
|
+
.vinext-overlay-nav:hover:not(:disabled) {
|
|
333
|
+
background: rgba(255, 255, 255, 0.08);
|
|
334
|
+
}
|
|
335
|
+
.vinext-overlay-nav:disabled {
|
|
336
|
+
opacity: 0.35;
|
|
337
|
+
cursor: not-allowed;
|
|
338
|
+
}
|
|
339
|
+
.vinext-overlay-minimize,
|
|
340
|
+
.vinext-overlay-close {
|
|
341
|
+
background: transparent;
|
|
342
|
+
border: none;
|
|
343
|
+
color: #a1a1aa;
|
|
344
|
+
cursor: pointer;
|
|
345
|
+
font-size: 16px;
|
|
346
|
+
line-height: 1;
|
|
347
|
+
padding: 4px 8px;
|
|
348
|
+
border-radius: 6px;
|
|
349
|
+
transition: background 0.12s ease, color 0.12s ease;
|
|
350
|
+
}
|
|
351
|
+
.vinext-overlay-minimize:hover,
|
|
352
|
+
.vinext-overlay-close:hover {
|
|
353
|
+
background: rgba(255, 255, 255, 0.08);
|
|
354
|
+
color: #fafafa;
|
|
355
|
+
}
|
|
356
|
+
.vinext-overlay-close { font-size: 20px; }
|
|
357
|
+
.vinext-overlay-frame {
|
|
358
|
+
padding: 8px 12px;
|
|
359
|
+
border-radius: 6px;
|
|
360
|
+
transition: background 0.12s ease;
|
|
361
|
+
}
|
|
362
|
+
.vinext-overlay-frame:hover {
|
|
363
|
+
background: rgba(255, 255, 255, 0.04);
|
|
364
|
+
}
|
|
365
|
+
.vinext-overlay-indicator {
|
|
366
|
+
display: inline-flex;
|
|
367
|
+
align-items: center;
|
|
368
|
+
gap: 8px;
|
|
369
|
+
padding: 8px 14px;
|
|
370
|
+
border-radius: 999px;
|
|
371
|
+
background: #18181b;
|
|
372
|
+
color: #fafafa;
|
|
373
|
+
border: 1px solid rgba(239, 68, 68, 0.45);
|
|
374
|
+
font: 600 13px ${FONT_STACK};
|
|
375
|
+
cursor: pointer;
|
|
376
|
+
transition: background 0.12s ease, border-color 0.12s ease, transform 0.12s ease;
|
|
377
|
+
animation: vinextOverlayIndicatorIn 0.18s ease-out;
|
|
378
|
+
}
|
|
379
|
+
.vinext-overlay-indicator:hover {
|
|
380
|
+
background: #1f1f23;
|
|
381
|
+
border-color: rgba(239, 68, 68, 0.7);
|
|
382
|
+
transform: translateY(-1px);
|
|
383
|
+
}
|
|
384
|
+
`;
|
|
385
|
+
const backdropStyle = {
|
|
386
|
+
position: "fixed",
|
|
387
|
+
inset: 0,
|
|
388
|
+
background: "rgba(10, 10, 12, 0.55)",
|
|
389
|
+
backdropFilter: "blur(3px)",
|
|
390
|
+
WebkitBackdropFilter: "blur(3px)",
|
|
391
|
+
display: "flex",
|
|
392
|
+
alignItems: "center",
|
|
393
|
+
justifyContent: "center",
|
|
394
|
+
padding: 24,
|
|
395
|
+
zIndex: 2147483646,
|
|
396
|
+
animation: "vinextOverlayBackdropIn 0.15s ease-out"
|
|
397
|
+
};
|
|
398
|
+
const dialogStyle = {
|
|
399
|
+
position: "relative",
|
|
400
|
+
pointerEvents: "auto",
|
|
401
|
+
width: "min(640px, 100%)",
|
|
402
|
+
maxHeight: "min(80vh, 720px)",
|
|
403
|
+
display: "flex",
|
|
404
|
+
flexDirection: "column",
|
|
405
|
+
background: "#0a0a0a",
|
|
406
|
+
color: "#fafafa",
|
|
407
|
+
border: "1px solid rgba(255, 255, 255, 0.08)",
|
|
408
|
+
borderRadius: 12,
|
|
409
|
+
fontFamily: FONT_STACK,
|
|
410
|
+
fontSize: 14,
|
|
411
|
+
lineHeight: 1.5,
|
|
412
|
+
overflow: "hidden",
|
|
413
|
+
animation: "vinextOverlayDialogIn 0.18s ease-out"
|
|
414
|
+
};
|
|
415
|
+
const indicatorContainerStyle = {
|
|
416
|
+
position: "fixed",
|
|
417
|
+
bottom: 16,
|
|
418
|
+
left: 16,
|
|
419
|
+
zIndex: 2147483646
|
|
420
|
+
};
|
|
421
|
+
const indicatorIconStyle = {
|
|
422
|
+
display: "inline-flex",
|
|
423
|
+
alignItems: "center",
|
|
424
|
+
justifyContent: "center",
|
|
425
|
+
color: "#ef4444",
|
|
426
|
+
fontSize: 14
|
|
427
|
+
};
|
|
428
|
+
const indicatorCountStyle = {
|
|
429
|
+
display: "inline-flex",
|
|
430
|
+
alignItems: "center",
|
|
431
|
+
justifyContent: "center",
|
|
432
|
+
minWidth: 18,
|
|
433
|
+
padding: "0 6px",
|
|
434
|
+
height: 18,
|
|
435
|
+
borderRadius: 999,
|
|
436
|
+
background: "rgba(239, 68, 68, 0.18)",
|
|
437
|
+
color: "#fca5a5",
|
|
438
|
+
fontSize: 11,
|
|
439
|
+
fontWeight: 600,
|
|
440
|
+
fontVariantNumeric: "tabular-nums"
|
|
441
|
+
};
|
|
442
|
+
const accentBarStyle = {
|
|
443
|
+
height: 3,
|
|
444
|
+
background: "linear-gradient(90deg, #ef4444 0%, #f97316 100%)"
|
|
445
|
+
};
|
|
446
|
+
const headerStyle = {
|
|
447
|
+
display: "flex",
|
|
448
|
+
alignItems: "center",
|
|
449
|
+
justifyContent: "space-between",
|
|
450
|
+
gap: 12,
|
|
451
|
+
padding: "14px 16px",
|
|
452
|
+
borderBottom: "1px solid rgba(255, 255, 255, 0.06)"
|
|
453
|
+
};
|
|
454
|
+
const headerLeftStyle = {
|
|
455
|
+
display: "flex",
|
|
456
|
+
alignItems: "center",
|
|
457
|
+
gap: 10,
|
|
458
|
+
minWidth: 0
|
|
459
|
+
};
|
|
460
|
+
const badgeStyle = {
|
|
461
|
+
display: "inline-flex",
|
|
462
|
+
alignItems: "center",
|
|
463
|
+
background: "rgba(239, 68, 68, 0.12)",
|
|
464
|
+
color: "#fca5a5",
|
|
465
|
+
border: "1px solid rgba(239, 68, 68, 0.25)",
|
|
466
|
+
padding: "3px 10px",
|
|
467
|
+
borderRadius: 999,
|
|
468
|
+
fontSize: 11,
|
|
469
|
+
fontWeight: 600,
|
|
470
|
+
letterSpacing: .2,
|
|
471
|
+
textTransform: "uppercase",
|
|
472
|
+
whiteSpace: "nowrap"
|
|
473
|
+
};
|
|
474
|
+
const paginationStyle = {
|
|
475
|
+
display: "flex",
|
|
476
|
+
alignItems: "center",
|
|
477
|
+
gap: 2,
|
|
478
|
+
color: "#a1a1aa",
|
|
479
|
+
fontSize: 12
|
|
480
|
+
};
|
|
481
|
+
const counterStyle = {
|
|
482
|
+
padding: "0 4px",
|
|
483
|
+
fontVariantNumeric: "tabular-nums"
|
|
484
|
+
};
|
|
485
|
+
const bodyStyle = {
|
|
486
|
+
padding: "16px 20px 20px",
|
|
487
|
+
overflow: "auto",
|
|
488
|
+
flex: 1
|
|
489
|
+
};
|
|
490
|
+
const messageStyle = {
|
|
491
|
+
margin: "0 0 16px 0",
|
|
492
|
+
fontFamily: MONO_STACK,
|
|
493
|
+
fontSize: 16,
|
|
494
|
+
fontWeight: 500,
|
|
495
|
+
lineHeight: 1.45,
|
|
496
|
+
color: "#fafafa",
|
|
497
|
+
whiteSpace: "pre-wrap",
|
|
498
|
+
wordBreak: "break-word"
|
|
499
|
+
};
|
|
500
|
+
const stackListStyle = {
|
|
501
|
+
listStyle: "none",
|
|
502
|
+
margin: 0,
|
|
503
|
+
padding: 0,
|
|
504
|
+
display: "flex",
|
|
505
|
+
flexDirection: "column",
|
|
506
|
+
gap: 2,
|
|
507
|
+
fontFamily: MONO_STACK,
|
|
508
|
+
fontSize: 12
|
|
509
|
+
};
|
|
510
|
+
const stackItemStyle = {
|
|
511
|
+
display: "flex",
|
|
512
|
+
flexDirection: "column",
|
|
513
|
+
gap: 2,
|
|
514
|
+
cursor: "default"
|
|
515
|
+
};
|
|
516
|
+
const frameFnStyle = {
|
|
517
|
+
color: "#fafafa",
|
|
518
|
+
fontWeight: 500
|
|
519
|
+
};
|
|
520
|
+
const frameLocStyle = {
|
|
521
|
+
color: "#71717a",
|
|
522
|
+
fontSize: 11
|
|
523
|
+
};
|
|
524
|
+
const detailsStyle = {
|
|
525
|
+
marginTop: 16,
|
|
526
|
+
paddingTop: 12,
|
|
527
|
+
borderTop: "1px solid rgba(255, 255, 255, 0.06)",
|
|
528
|
+
color: "#a1a1aa",
|
|
529
|
+
fontSize: 12
|
|
530
|
+
};
|
|
531
|
+
const summaryStyle = {
|
|
532
|
+
cursor: "pointer",
|
|
533
|
+
userSelect: "none",
|
|
534
|
+
padding: "4px 0",
|
|
535
|
+
color: "#a1a1aa",
|
|
536
|
+
fontWeight: 500
|
|
537
|
+
};
|
|
538
|
+
const componentStackStyle = {
|
|
539
|
+
margin: "8px 0 0 0",
|
|
540
|
+
fontFamily: MONO_STACK,
|
|
541
|
+
whiteSpace: "pre-wrap",
|
|
542
|
+
wordBreak: "break-word",
|
|
543
|
+
color: "#a1a1aa"
|
|
544
|
+
};
|
|
545
|
+
//#endregion
|
|
546
|
+
export { devOnCaughtError, devOnUncaughtError, dismissOverlay, installDevErrorOverlay };
|
|
547
|
+
|
|
548
|
+
//# sourceMappingURL=dev-error-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-error-overlay.js","names":[],"sources":["../../src/server/dev-error-overlay.tsx"],"sourcesContent":["// Dev-only runtime error overlay. Surfaces three error sources that\n// otherwise only reach the console:\n// 1. React render errors caught by an error.tsx boundary (onCaughtError)\n// 2. React render errors with no boundary above them (onUncaughtError)\n// 3. Plain script errors / unhandled promise rejections (window listeners)\n//\n// Rendered via a separate React root mounted on a detached <div> appended to\n// the body. That isolation means the overlay survives an unmount of the main\n// hydrateRoot(document, ...) tree — necessary because most of the errors we\n// want to surface are exactly the ones that take that tree down.\n\nimport { useEffect, useSyncExternalStore } from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\n\nimport {\n type OverlayState,\n type ReportedError,\n type Source,\n dismissOverlay,\n expandOverlay,\n getOverlaySnapshot,\n minimizeOverlay,\n reportToOverlay,\n setOverlayIndex,\n subscribeOverlay,\n} from \"./dev-error-overlay-store.js\";\n\n// Re-export so callers (e.g. the HMR rsc:update handler) can clear the\n// overlay when a new payload lands.\nexport { dismissOverlay } from \"./dev-error-overlay-store.js\";\n\nconst MOUNT_NODE_ID = \"__vinext_dev_error_overlay_root\";\n\nlet reactRoot: Root | null = null;\nlet installed = false;\n\n// Errors React already routed through onCaughtError/onUncaughtError shouldn't\n// also surface from the window listeners — otherwise the same throw appears\n// twice in the dialog (\"Runtime Error\" + \"Unhandled Script Error\"). We track\n// instances we've reported and skip them in the global handlers.\nconst reportedErrors = new WeakSet<object>();\n\nfunction rememberReported(error: unknown): void {\n if (error && typeof error === \"object\") reportedErrors.add(error);\n}\n\nfunction alreadyReported(error: unknown): boolean {\n return !!error && typeof error === \"object\" && reportedErrors.has(error);\n}\n\nexport function installDevErrorOverlay(): void {\n if (installed || typeof window === \"undefined\") return;\n installed = true;\n\n window.addEventListener(\"error\", (event: ErrorEvent) => {\n const err = event.error;\n if (err instanceof Error) {\n if (alreadyReported(err)) return;\n reportDevError(err, { source: \"window-error\" });\n } else if (event.message) {\n reportDevError(new Error(event.message), { source: \"window-error\" });\n }\n });\n\n window.addEventListener(\"unhandledrejection\", (event: PromiseRejectionEvent) => {\n const reason = event.reason;\n if (reason instanceof Error) {\n if (alreadyReported(reason)) return;\n reportDevError(reason, { source: \"unhandledrejection\" });\n } else {\n reportDevError(new Error(String(reason)), { source: \"unhandledrejection\" });\n }\n });\n}\n\nfunction reportDevError(\n error: unknown,\n options: { source: Source; componentStack?: string },\n): void {\n if (typeof window === \"undefined\") return;\n\n rememberReported(error);\n\n const message =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : safeStringify(error);\n const stack = error instanceof Error ? error.stack : undefined;\n\n ensureMounted();\n reportToOverlay({\n source: options.source,\n message,\n stack,\n componentStack: options.componentStack,\n });\n}\n\n// React's onCaughtError fires for boundary-caught errors. We log to the console\n// (preserving the default behavior) and surface in the overlay. Sentinel errors\n// (NEXT_NOT_FOUND, NEXT_REDIRECT, etc.) are re-thrown in getDerivedStateFromError\n// before they reach onCaughtError, so they don't appear here in practice.\nexport function devOnCaughtError(\n error: unknown,\n errorInfo: { componentStack?: string; errorBoundary?: unknown },\n): void {\n console.error(error);\n if (errorInfo?.componentStack) {\n console.error(\"The above error occurred in a React component:\\n\" + errorInfo.componentStack);\n }\n reportDevError(error, { source: \"caught\", componentStack: errorInfo?.componentStack });\n}\n\n// Dev variant of onUncaughtError. Surfaces the error in the overlay and stops\n// — we deliberately do NOT perform the prod recovery navigation\n// (window.location.assign) because in dev the overlay is the user-facing\n// recovery; a hard navigation would blow it away along with the rest of the\n// page. HMR or a manual refresh resumes the session once the bug is fixed.\nexport function devOnUncaughtError(\n error: unknown,\n errorInfo: { componentStack?: string; errorBoundary?: unknown },\n): void {\n console.error(error);\n if (errorInfo?.componentStack) {\n console.error(\"The above error occurred in a React component:\\n\" + errorInfo.componentStack);\n }\n reportDevError(error, { source: \"uncaught\", componentStack: errorInfo?.componentStack });\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n return Object.prototype.toString.call(value);\n }\n}\n\nfunction ensureMounted(): void {\n if (reactRoot) return;\n const node = document.createElement(\"div\");\n node.id = MOUNT_NODE_ID;\n // Fall back to documentElement in case body hasn't been parsed yet (e.g.\n // an extremely early hydration error firing before the body element is\n // attached). Either parent keeps the overlay outside the React-managed\n // hydrateRoot tree, which is what matters.\n (document.body ?? document.documentElement).appendChild(node);\n reactRoot = createRoot(node);\n reactRoot.render(<DevErrorOverlayApp />);\n}\n\n// ---------------------------------------------------------------------------\n// React component tree\n// ---------------------------------------------------------------------------\n\nconst SOURCE_LABEL: Record<Source, string> = {\n uncaught: \"Unhandled Runtime Error\",\n caught: \"Runtime Error\",\n \"window-error\": \"Unhandled Script Error\",\n unhandledrejection: \"Unhandled Promise Rejection\",\n};\n\nfunction DevErrorOverlayApp(): React.ReactNode {\n const state = useSyncExternalStore<OverlayState>(\n subscribeOverlay,\n getOverlaySnapshot,\n getOverlaySnapshot,\n );\n if (state.errors.length === 0) return null;\n const current = state.errors[state.index] ?? state.errors[0]!;\n\n // Render the stylesheet once at the root so it's not re-injected when\n // toggling between minimized and expanded states.\n return (\n <>\n <style>{overlayStylesheet}</style>\n {state.minimized ? (\n <DevErrorIndicator\n count={state.errors.length}\n source={current.source}\n onExpand={expandOverlay}\n />\n ) : (\n <DevErrorOverlay\n error={current}\n index={state.index}\n total={state.errors.length}\n // setOverlayIndex bounds-checks internally and the prev/next\n // buttons are disabled at the edges, so no clamp needed here.\n onPrev={() => setOverlayIndex(state.index - 1)}\n onNext={() => setOverlayIndex(state.index + 1)}\n onMinimize={minimizeOverlay}\n onDismiss={dismissOverlay}\n />\n )}\n </>\n );\n}\n\nfunction DevErrorIndicator({\n count,\n source,\n onExpand,\n}: {\n count: number;\n source: Source;\n onExpand: () => void;\n}): React.ReactNode {\n return (\n <div style={indicatorContainerStyle}>\n <button\n type=\"button\"\n data-testid=\"vinext-dev-error-indicator\"\n aria-label={`${count} runtime error${count === 1 ? \"\" : \"s\"} — click to expand`}\n title={SOURCE_LABEL[source]}\n onClick={onExpand}\n className=\"vinext-overlay-indicator\"\n >\n <span aria-hidden=\"true\" style={indicatorIconStyle}>\n ⚠\n </span>\n <span data-testid=\"vinext-dev-error-indicator-count\" style={indicatorCountStyle}>\n {count}\n </span>\n </button>\n </div>\n );\n}\n\nfunction DevErrorOverlay({\n error,\n index,\n total,\n onPrev,\n onNext,\n onMinimize,\n onDismiss,\n}: {\n error: ReportedError;\n index: number;\n total: number;\n onPrev: () => void;\n onNext: () => void;\n onMinimize: () => void;\n onDismiss: () => void;\n}): React.ReactNode {\n const frames = error.stack ? parseStack(error.stack) : [];\n\n // Esc minimizes, ←/→ navigate between errors. Esc no longer dismisses\n // outright — once a developer wants the overlay gone they can hit the ×\n // button. Listener is attached on the window so it works regardless of\n // focus location inside the overlay.\n useEffect(() => {\n const onKey = (e: KeyboardEvent): void => {\n if (e.key === \"Escape\") {\n onMinimize();\n } else if (e.key === \"ArrowLeft\" && total > 1) {\n onPrev();\n } else if (e.key === \"ArrowRight\" && total > 1) {\n onNext();\n }\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [onMinimize, onPrev, onNext, total]);\n\n return (\n <div style={backdropStyle} data-testid=\"vinext-dev-error-backdrop\" onClick={onMinimize}>\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={SOURCE_LABEL[error.source]}\n data-testid=\"vinext-dev-error-overlay\"\n style={dialogStyle}\n onClick={(e) => e.stopPropagation()}\n >\n <div style={accentBarStyle} />\n\n <header style={headerStyle}>\n <div style={headerLeftStyle}>\n <span data-testid=\"vinext-dev-error-title\" style={badgeStyle}>\n {SOURCE_LABEL[error.source]}\n </span>\n {total > 1 ? (\n <div data-testid=\"vinext-dev-error-pagination\" style={paginationStyle}>\n <button\n type=\"button\"\n data-testid=\"vinext-dev-error-prev\"\n onClick={onPrev}\n disabled={index === 0}\n className=\"vinext-overlay-nav\"\n aria-label=\"Previous error\"\n >\n ‹\n </button>\n <span data-testid=\"vinext-dev-error-counter\" style={counterStyle}>\n {index + 1} of {total}\n </span>\n <button\n type=\"button\"\n data-testid=\"vinext-dev-error-next\"\n onClick={onNext}\n disabled={index === total - 1}\n className=\"vinext-overlay-nav\"\n aria-label=\"Next error\"\n >\n ›\n </button>\n </div>\n ) : null}\n </div>\n <button\n type=\"button\"\n data-testid=\"vinext-dev-error-minimize\"\n onClick={onMinimize}\n className=\"vinext-overlay-minimize\"\n aria-label=\"Minimize\"\n title=\"Minimize (Esc)\"\n >\n –\n </button>\n <button\n type=\"button\"\n data-testid=\"vinext-dev-error-close\"\n onClick={onDismiss}\n className=\"vinext-overlay-close\"\n aria-label=\"Dismiss\"\n title=\"Dismiss all errors\"\n >\n ×\n </button>\n </header>\n\n <div style={bodyStyle}>\n <h2 data-testid=\"vinext-dev-error-message\" style={messageStyle}>\n {error.message}\n </h2>\n\n {frames.length > 0 ? (\n <ol data-testid=\"vinext-dev-error-stack\" style={stackListStyle}>\n {frames.map((frame) => (\n <li key={frame.key} className=\"vinext-overlay-frame\" style={stackItemStyle}>\n <span style={frameFnStyle}>{frame.fn}</span>\n {frame.file ? (\n <span style={frameLocStyle}>\n {frame.file}\n {frame.line ? `:${frame.line}` : \"\"}\n {frame.col ? `:${frame.col}` : \"\"}\n </span>\n ) : null}\n </li>\n ))}\n </ol>\n ) : null}\n\n {error.componentStack ? (\n <details style={detailsStyle}>\n <summary style={summaryStyle}>Component stack</summary>\n <pre data-testid=\"vinext-dev-error-component-stack\" style={componentStackStyle}>\n {error.componentStack}\n </pre>\n </details>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Stack parsing — handles V8 (\" at fn (file:line:col)\") and SpiderMonkey/\n// JavaScriptCore (\"fn@file:line:col\") formats. Lines that don't match either\n// shape are kept verbatim as a function-name-only frame so the overlay still\n// renders something useful in unfamiliar runtimes.\n// ---------------------------------------------------------------------------\n\ntype Frame = { key: string; fn: string; file?: string; line?: string; col?: string };\n\nconst V8_PAREN_FRAME = /^(.*?)\\s*\\((.+):(\\d+):(\\d+)\\)$/;\nconst V8_BARE_FRAME = /^(.+):(\\d+):(\\d+)$/;\nconst MOZ_FRAME = /^(.*?)@(.+):(\\d+):(\\d+)$/;\n\nfunction parseStack(stack: string): Frame[] {\n const frames: Frame[] = [];\n // Suffix repeat occurrences with #2, #3 so React keys stay unique even when\n // the same frame appears multiple times in a recursive stack.\n const seen = new Map<string, number>();\n const pushFrame = (fn: string, file?: string, line?: string, col?: string): void => {\n const base = `${fn}@${file ?? \"\"}:${line ?? \"\"}:${col ?? \"\"}`;\n const count = (seen.get(base) ?? 0) + 1;\n seen.set(base, count);\n const key = count === 1 ? base : `${base}#${count}`;\n frames.push({ key, fn, file, line, col });\n };\n for (const raw of stack.split(\"\\n\")) {\n const line = raw.trim();\n if (!line) continue;\n\n // V8 / Chromium: \" at fn (file:line:col)\" or \" at file:line:col\"\n if (line.startsWith(\"at \")) {\n const body = line.slice(3);\n const parenMatch = body.match(V8_PAREN_FRAME);\n if (parenMatch) {\n pushFrame(parenMatch[1] || \"<anonymous>\", parenMatch[2], parenMatch[3], parenMatch[4]);\n continue;\n }\n const bareMatch = body.match(V8_BARE_FRAME);\n if (bareMatch) {\n pushFrame(\"<anonymous>\", bareMatch[1], bareMatch[2], bareMatch[3]);\n continue;\n }\n pushFrame(body);\n continue;\n }\n\n // SpiderMonkey (Firefox) / JavaScriptCore (Safari): \"fn@file:line:col\".\n // The first line of a Firefox stack is the error message itself; skip it\n // by requiring the @-form match.\n const mozMatch = line.match(MOZ_FRAME);\n if (mozMatch) {\n pushFrame(mozMatch[1] || \"<anonymous>\", mozMatch[2], mozMatch[3], mozMatch[4]);\n continue;\n }\n\n // Unknown shape — preserve the line as a function-name-only frame so the\n // overlay shows something rather than dropping the line silently.\n pushFrame(line);\n }\n return frames;\n}\n\n// ---------------------------------------------------------------------------\n// Inline styles + a tiny stylesheet for hover/focus + entrance animation.\n// Keeping it all in this file means the overlay has no external CSS\n// dependency and works the same way in any host app.\n// ---------------------------------------------------------------------------\n\nconst FONT_STACK =\n \"ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\";\nconst MONO_STACK = \"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\";\n\nconst overlayStylesheet = `\n@keyframes vinextOverlayBackdropIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes vinextOverlayDialogIn {\n from { opacity: 0; transform: translateY(8px) scale(0.98); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n}\n@keyframes vinextOverlayIndicatorIn {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n.vinext-overlay-nav {\n background: transparent;\n border: none;\n color: inherit;\n cursor: pointer;\n padding: 2px 8px;\n font-size: 14px;\n line-height: 1;\n border-radius: 6px;\n transition: background 0.12s ease;\n}\n.vinext-overlay-nav:hover:not(:disabled) {\n background: rgba(255, 255, 255, 0.08);\n}\n.vinext-overlay-nav:disabled {\n opacity: 0.35;\n cursor: not-allowed;\n}\n.vinext-overlay-minimize,\n.vinext-overlay-close {\n background: transparent;\n border: none;\n color: #a1a1aa;\n cursor: pointer;\n font-size: 16px;\n line-height: 1;\n padding: 4px 8px;\n border-radius: 6px;\n transition: background 0.12s ease, color 0.12s ease;\n}\n.vinext-overlay-minimize:hover,\n.vinext-overlay-close:hover {\n background: rgba(255, 255, 255, 0.08);\n color: #fafafa;\n}\n.vinext-overlay-close { font-size: 20px; }\n.vinext-overlay-frame {\n padding: 8px 12px;\n border-radius: 6px;\n transition: background 0.12s ease;\n}\n.vinext-overlay-frame:hover {\n background: rgba(255, 255, 255, 0.04);\n}\n.vinext-overlay-indicator {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n border-radius: 999px;\n background: #18181b;\n color: #fafafa;\n border: 1px solid rgba(239, 68, 68, 0.45);\n font: 600 13px ${FONT_STACK};\n cursor: pointer;\n transition: background 0.12s ease, border-color 0.12s ease, transform 0.12s ease;\n animation: vinextOverlayIndicatorIn 0.18s ease-out;\n}\n.vinext-overlay-indicator:hover {\n background: #1f1f23;\n border-color: rgba(239, 68, 68, 0.7);\n transform: translateY(-1px);\n}\n`;\n\nconst backdropStyle: React.CSSProperties = {\n // The backdrop captures click-outside-to-minimize as a proper modal would —\n // a click on it dismisses the overlay rather than reaching the page\n // underneath. The dialog re-enables pointer events for itself via\n // dialogStyle.\n position: \"fixed\",\n inset: 0,\n background: \"rgba(10, 10, 12, 0.55)\",\n backdropFilter: \"blur(3px)\",\n WebkitBackdropFilter: \"blur(3px)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 24,\n zIndex: 2147483646,\n animation: \"vinextOverlayBackdropIn 0.15s ease-out\",\n};\n\nconst dialogStyle: React.CSSProperties = {\n position: \"relative\",\n pointerEvents: \"auto\",\n width: \"min(640px, 100%)\",\n maxHeight: \"min(80vh, 720px)\",\n display: \"flex\",\n flexDirection: \"column\",\n background: \"#0a0a0a\",\n color: \"#fafafa\",\n border: \"1px solid rgba(255, 255, 255, 0.08)\",\n borderRadius: 12,\n fontFamily: FONT_STACK,\n fontSize: 14,\n lineHeight: 1.5,\n overflow: \"hidden\",\n animation: \"vinextOverlayDialogIn 0.18s ease-out\",\n};\n\nconst indicatorContainerStyle: React.CSSProperties = {\n position: \"fixed\",\n bottom: 16,\n left: 16,\n zIndex: 2147483646,\n};\n\nconst indicatorIconStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"#ef4444\",\n fontSize: 14,\n};\n\nconst indicatorCountStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minWidth: 18,\n padding: \"0 6px\",\n height: 18,\n borderRadius: 999,\n background: \"rgba(239, 68, 68, 0.18)\",\n color: \"#fca5a5\",\n fontSize: 11,\n fontWeight: 600,\n fontVariantNumeric: \"tabular-nums\",\n};\n\nconst accentBarStyle: React.CSSProperties = {\n height: 3,\n background: \"linear-gradient(90deg, #ef4444 0%, #f97316 100%)\",\n};\n\nconst headerStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n padding: \"14px 16px\",\n borderBottom: \"1px solid rgba(255, 255, 255, 0.06)\",\n};\n\nconst headerLeftStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n minWidth: 0,\n};\n\nconst badgeStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n background: \"rgba(239, 68, 68, 0.12)\",\n color: \"#fca5a5\",\n border: \"1px solid rgba(239, 68, 68, 0.25)\",\n padding: \"3px 10px\",\n borderRadius: 999,\n fontSize: 11,\n fontWeight: 600,\n letterSpacing: 0.2,\n textTransform: \"uppercase\",\n whiteSpace: \"nowrap\",\n};\n\nconst paginationStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 2,\n color: \"#a1a1aa\",\n fontSize: 12,\n};\n\nconst counterStyle: React.CSSProperties = {\n padding: \"0 4px\",\n fontVariantNumeric: \"tabular-nums\",\n};\n\nconst bodyStyle: React.CSSProperties = {\n padding: \"16px 20px 20px\",\n overflow: \"auto\",\n flex: 1,\n};\n\nconst messageStyle: React.CSSProperties = {\n margin: \"0 0 16px 0\",\n fontFamily: MONO_STACK,\n fontSize: 16,\n fontWeight: 500,\n lineHeight: 1.45,\n color: \"#fafafa\",\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n};\n\nconst stackListStyle: React.CSSProperties = {\n listStyle: \"none\",\n margin: 0,\n padding: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n fontFamily: MONO_STACK,\n fontSize: 12,\n};\n\nconst stackItemStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n cursor: \"default\",\n};\n\nconst frameFnStyle: React.CSSProperties = {\n color: \"#fafafa\",\n fontWeight: 500,\n};\n\nconst frameLocStyle: React.CSSProperties = {\n color: \"#71717a\",\n fontSize: 11,\n};\n\nconst detailsStyle: React.CSSProperties = {\n marginTop: 16,\n paddingTop: 12,\n borderTop: \"1px solid rgba(255, 255, 255, 0.06)\",\n color: \"#a1a1aa\",\n fontSize: 12,\n};\n\nconst summaryStyle: React.CSSProperties = {\n cursor: \"pointer\",\n userSelect: \"none\",\n padding: \"4px 0\",\n color: \"#a1a1aa\",\n fontWeight: 500,\n};\n\nconst componentStackStyle: React.CSSProperties = {\n margin: \"8px 0 0 0\",\n fontFamily: MONO_STACK,\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n color: \"#a1a1aa\",\n};\n"],"mappings":";;;;;AA+BA,MAAM,gBAAgB;AAEtB,IAAI,YAAyB;AAC7B,IAAI,YAAY;AAMhB,MAAM,iCAAiB,IAAI,SAAiB;AAE5C,SAAS,iBAAiB,OAAsB;AAC9C,KAAI,SAAS,OAAO,UAAU,SAAU,gBAAe,IAAI,MAAM;;AAGnE,SAAS,gBAAgB,OAAyB;AAChD,QAAO,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,eAAe,IAAI,MAAM;;AAG1E,SAAgB,yBAA+B;AAC7C,KAAI,aAAa,OAAO,WAAW,YAAa;AAChD,aAAY;AAEZ,QAAO,iBAAiB,UAAU,UAAsB;EACtD,MAAM,MAAM,MAAM;AAClB,MAAI,eAAe,OAAO;AACxB,OAAI,gBAAgB,IAAI,CAAE;AAC1B,kBAAe,KAAK,EAAE,QAAQ,gBAAgB,CAAC;aACtC,MAAM,QACf,gBAAe,IAAI,MAAM,MAAM,QAAQ,EAAE,EAAE,QAAQ,gBAAgB,CAAC;GAEtE;AAEF,QAAO,iBAAiB,uBAAuB,UAAiC;EAC9E,MAAM,SAAS,MAAM;AACrB,MAAI,kBAAkB,OAAO;AAC3B,OAAI,gBAAgB,OAAO,CAAE;AAC7B,kBAAe,QAAQ,EAAE,QAAQ,sBAAsB,CAAC;QAExD,gBAAe,IAAI,MAAM,OAAO,OAAO,CAAC,EAAE,EAAE,QAAQ,sBAAsB,CAAC;GAE7E;;AAGJ,SAAS,eACP,OACA,SACM;AACN,KAAI,OAAO,WAAW,YAAa;AAEnC,kBAAiB,MAAM;CAEvB,MAAM,UACJ,iBAAiB,QACb,MAAM,UACN,OAAO,UAAU,WACf,QACA,cAAc,MAAM;CAC5B,MAAM,QAAQ,iBAAiB,QAAQ,MAAM,QAAQ,KAAA;AAErD,gBAAe;AACf,iBAAgB;EACd,QAAQ,QAAQ;EAChB;EACA;EACA,gBAAgB,QAAQ;EACzB,CAAC;;AAOJ,SAAgB,iBACd,OACA,WACM;AACN,SAAQ,MAAM,MAAM;AACpB,KAAI,WAAW,eACb,SAAQ,MAAM,qDAAqD,UAAU,eAAe;AAE9F,gBAAe,OAAO;EAAE,QAAQ;EAAU,gBAAgB,WAAW;EAAgB,CAAC;;AAQxF,SAAgB,mBACd,OACA,WACM;AACN,SAAQ,MAAM,MAAM;AACpB,KAAI,WAAW,eACb,SAAQ,MAAM,qDAAqD,UAAU,eAAe;AAE9F,gBAAe,OAAO;EAAE,QAAQ;EAAY,gBAAgB,WAAW;EAAgB,CAAC;;AAG1F,SAAS,cAAc,OAAwB;AAC7C,KAAI;AACF,SAAO,KAAK,UAAU,MAAM;SACtB;AACN,SAAO,OAAO,UAAU,SAAS,KAAK,MAAM;;;AAIhD,SAAS,gBAAsB;AAC7B,KAAI,UAAW;CACf,MAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,MAAK,KAAK;AAKV,EAAC,SAAS,QAAQ,SAAS,iBAAiB,YAAY,KAAK;AAC7D,aAAY,WAAW,KAAK;AAC5B,WAAU,OAAO,oBAAC,oBAAD,EAAsB,CAAA,CAAC;;AAO1C,MAAM,eAAuC;CAC3C,UAAU;CACV,QAAQ;CACR,gBAAgB;CAChB,oBAAoB;CACrB;AAED,SAAS,qBAAsC;CAC7C,MAAM,QAAQ,qBACZ,kBACA,oBACA,mBACD;AACD,KAAI,MAAM,OAAO,WAAW,EAAG,QAAO;CACtC,MAAM,UAAU,MAAM,OAAO,MAAM,UAAU,MAAM,OAAO;AAI1D,QACE,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,SAAD,EAAA,UAAQ,mBAA0B,CAAA,EACjC,MAAM,YACL,oBAAC,mBAAD;EACE,OAAO,MAAM,OAAO;EACpB,QAAQ,QAAQ;EAChB,UAAU;EACV,CAAA,GAEF,oBAAC,iBAAD;EACE,OAAO;EACP,OAAO,MAAM;EACb,OAAO,MAAM,OAAO;EAGpB,cAAc,gBAAgB,MAAM,QAAQ,EAAE;EAC9C,cAAc,gBAAgB,MAAM,QAAQ,EAAE;EAC9C,YAAY;EACZ,WAAW;EACX,CAAA,CAEH,EAAA,CAAA;;AAIP,SAAS,kBAAkB,EACzB,OACA,QACA,YAKkB;AAClB,QACE,oBAAC,OAAD;EAAK,OAAO;YACV,qBAAC,UAAD;GACE,MAAK;GACL,eAAY;GACZ,cAAY,GAAG,MAAM,gBAAgB,UAAU,IAAI,KAAK,IAAI;GAC5D,OAAO,aAAa;GACpB,SAAS;GACT,WAAU;aANZ,CAQE,oBAAC,QAAD;IAAM,eAAY;IAAO,OAAO;cAAoB;IAE7C,CAAA,EACP,oBAAC,QAAD;IAAM,eAAY;IAAmC,OAAO;cACzD;IACI,CAAA,CACA;;EACL,CAAA;;AAIV,SAAS,gBAAgB,EACvB,OACA,OACA,OACA,QACA,QACA,YACA,aASkB;CAClB,MAAM,SAAS,MAAM,QAAQ,WAAW,MAAM,MAAM,GAAG,EAAE;AAMzD,iBAAgB;EACd,MAAM,SAAS,MAA2B;AACxC,OAAI,EAAE,QAAQ,SACZ,aAAY;YACH,EAAE,QAAQ,eAAe,QAAQ,EAC1C,SAAQ;YACC,EAAE,QAAQ,gBAAgB,QAAQ,EAC3C,SAAQ;;AAGZ,SAAO,iBAAiB,WAAW,MAAM;AACzC,eAAa,OAAO,oBAAoB,WAAW,MAAM;IACxD;EAAC;EAAY;EAAQ;EAAQ;EAAM,CAAC;AAEvC,QACE,oBAAC,OAAD;EAAK,OAAO;EAAe,eAAY;EAA4B,SAAS;YAC1E,qBAAC,OAAD;GACE,MAAK;GACL,cAAW;GACX,cAAY,aAAa,MAAM;GAC/B,eAAY;GACZ,OAAO;GACP,UAAU,MAAM,EAAE,iBAAiB;aANrC;IAQE,oBAAC,OAAD,EAAK,OAAO,gBAAkB,CAAA;IAE9B,qBAAC,UAAD;KAAQ,OAAO;eAAf;MACE,qBAAC,OAAD;OAAK,OAAO;iBAAZ,CACE,oBAAC,QAAD;QAAM,eAAY;QAAyB,OAAO;kBAC/C,aAAa,MAAM;QACf,CAAA,EACN,QAAQ,IACP,qBAAC,OAAD;QAAK,eAAY;QAA8B,OAAO;kBAAtD;SACE,oBAAC,UAAD;UACE,MAAK;UACL,eAAY;UACZ,SAAS;UACT,UAAU,UAAU;UACpB,WAAU;UACV,cAAW;oBACZ;UAEQ,CAAA;SACT,qBAAC,QAAD;UAAM,eAAY;UAA2B,OAAO;oBAApD;WACG,QAAQ;WAAE;WAAK;WACX;;SACP,oBAAC,UAAD;UACE,MAAK;UACL,eAAY;UACZ,SAAS;UACT,UAAU,UAAU,QAAQ;UAC5B,WAAU;UACV,cAAW;oBACZ;UAEQ,CAAA;SACL;YACJ,KACA;;MACN,oBAAC,UAAD;OACE,MAAK;OACL,eAAY;OACZ,SAAS;OACT,WAAU;OACV,cAAW;OACX,OAAM;iBACP;OAEQ,CAAA;MACT,oBAAC,UAAD;OACE,MAAK;OACL,eAAY;OACZ,SAAS;OACT,WAAU;OACV,cAAW;OACX,OAAM;iBACP;OAEQ,CAAA;MACF;;IAET,qBAAC,OAAD;KAAK,OAAO;eAAZ;MACE,oBAAC,MAAD;OAAI,eAAY;OAA2B,OAAO;iBAC/C,MAAM;OACJ,CAAA;MAEJ,OAAO,SAAS,IACf,oBAAC,MAAD;OAAI,eAAY;OAAyB,OAAO;iBAC7C,OAAO,KAAK,UACX,qBAAC,MAAD;QAAoB,WAAU;QAAuB,OAAO;kBAA5D,CACE,oBAAC,QAAD;SAAM,OAAO;mBAAe,MAAM;SAAU,CAAA,EAC3C,MAAM,OACL,qBAAC,QAAD;SAAM,OAAO;mBAAb;UACG,MAAM;UACN,MAAM,OAAO,IAAI,MAAM,SAAS;UAChC,MAAM,MAAM,IAAI,MAAM,QAAQ;UAC1B;aACL,KACD;UATI,MAAM,IASV,CACL;OACC,CAAA,GACH;MAEH,MAAM,iBACL,qBAAC,WAAD;OAAS,OAAO;iBAAhB,CACE,oBAAC,WAAD;QAAS,OAAO;kBAAc;QAAyB,CAAA,EACvD,oBAAC,OAAD;QAAK,eAAY;QAAmC,OAAO;kBACxD,MAAM;QACH,CAAA,CACE;WACR;MACA;;IACF;;EACF,CAAA;;AAaV,MAAM,iBAAiB;AACvB,MAAM,gBAAgB;AACtB,MAAM,YAAY;AAElB,SAAS,WAAW,OAAwB;CAC1C,MAAM,SAAkB,EAAE;CAG1B,MAAM,uBAAO,IAAI,KAAqB;CACtC,MAAM,aAAa,IAAY,MAAe,MAAe,QAAuB;EAClF,MAAM,OAAO,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,QAAQ,GAAG,GAAG,OAAO;EACzD,MAAM,SAAS,KAAK,IAAI,KAAK,IAAI,KAAK;AACtC,OAAK,IAAI,MAAM,MAAM;EACrB,MAAM,MAAM,UAAU,IAAI,OAAO,GAAG,KAAK,GAAG;AAC5C,SAAO,KAAK;GAAE;GAAK;GAAI;GAAM;GAAM;GAAK,CAAC;;AAE3C,MAAK,MAAM,OAAO,MAAM,MAAM,KAAK,EAAE;EACnC,MAAM,OAAO,IAAI,MAAM;AACvB,MAAI,CAAC,KAAM;AAGX,MAAI,KAAK,WAAW,MAAM,EAAE;GAC1B,MAAM,OAAO,KAAK,MAAM,EAAE;GAC1B,MAAM,aAAa,KAAK,MAAM,eAAe;AAC7C,OAAI,YAAY;AACd,cAAU,WAAW,MAAM,eAAe,WAAW,IAAI,WAAW,IAAI,WAAW,GAAG;AACtF;;GAEF,MAAM,YAAY,KAAK,MAAM,cAAc;AAC3C,OAAI,WAAW;AACb,cAAU,eAAe,UAAU,IAAI,UAAU,IAAI,UAAU,GAAG;AAClE;;AAEF,aAAU,KAAK;AACf;;EAMF,MAAM,WAAW,KAAK,MAAM,UAAU;AACtC,MAAI,UAAU;AACZ,aAAU,SAAS,MAAM,eAAe,SAAS,IAAI,SAAS,IAAI,SAAS,GAAG;AAC9E;;AAKF,YAAU,KAAK;;AAEjB,QAAO;;AAST,MAAM,aACJ;AACF,MAAM,aAAa;AAEnB,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAkEP,WAAW;;;;;;;;;;;AAY9B,MAAM,gBAAqC;CAKzC,UAAU;CACV,OAAO;CACP,YAAY;CACZ,gBAAgB;CAChB,sBAAsB;CACtB,SAAS;CACT,YAAY;CACZ,gBAAgB;CAChB,SAAS;CACT,QAAQ;CACR,WAAW;CACZ;AAED,MAAM,cAAmC;CACvC,UAAU;CACV,eAAe;CACf,OAAO;CACP,WAAW;CACX,SAAS;CACT,eAAe;CACf,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,cAAc;CACd,YAAY;CACZ,UAAU;CACV,YAAY;CACZ,UAAU;CACV,WAAW;CACZ;AAED,MAAM,0BAA+C;CACnD,UAAU;CACV,QAAQ;CACR,MAAM;CACN,QAAQ;CACT;AAED,MAAM,qBAA0C;CAC9C,SAAS;CACT,YAAY;CACZ,gBAAgB;CAChB,OAAO;CACP,UAAU;CACX;AAED,MAAM,sBAA2C;CAC/C,SAAS;CACT,YAAY;CACZ,gBAAgB;CAChB,UAAU;CACV,SAAS;CACT,QAAQ;CACR,cAAc;CACd,YAAY;CACZ,OAAO;CACP,UAAU;CACV,YAAY;CACZ,oBAAoB;CACrB;AAED,MAAM,iBAAsC;CAC1C,QAAQ;CACR,YAAY;CACb;AAED,MAAM,cAAmC;CACvC,SAAS;CACT,YAAY;CACZ,gBAAgB;CAChB,KAAK;CACL,SAAS;CACT,cAAc;CACf;AAED,MAAM,kBAAuC;CAC3C,SAAS;CACT,YAAY;CACZ,KAAK;CACL,UAAU;CACX;AAED,MAAM,aAAkC;CACtC,SAAS;CACT,YAAY;CACZ,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,SAAS;CACT,cAAc;CACd,UAAU;CACV,YAAY;CACZ,eAAe;CACf,eAAe;CACf,YAAY;CACb;AAED,MAAM,kBAAuC;CAC3C,SAAS;CACT,YAAY;CACZ,KAAK;CACL,OAAO;CACP,UAAU;CACX;AAED,MAAM,eAAoC;CACxC,SAAS;CACT,oBAAoB;CACrB;AAED,MAAM,YAAiC;CACrC,SAAS;CACT,UAAU;CACV,MAAM;CACP;AAED,MAAM,eAAoC;CACxC,QAAQ;CACR,YAAY;CACZ,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,OAAO;CACP,YAAY;CACZ,WAAW;CACZ;AAED,MAAM,iBAAsC;CAC1C,WAAW;CACX,QAAQ;CACR,SAAS;CACT,SAAS;CACT,eAAe;CACf,KAAK;CACL,YAAY;CACZ,UAAU;CACX;AAED,MAAM,iBAAsC;CAC1C,SAAS;CACT,eAAe;CACf,KAAK;CACL,QAAQ;CACT;AAED,MAAM,eAAoC;CACxC,OAAO;CACP,YAAY;CACb;AAED,MAAM,gBAAqC;CACzC,OAAO;CACP,UAAU;CACX;AAED,MAAM,eAAoC;CACxC,WAAW;CACX,YAAY;CACZ,WAAW;CACX,OAAO;CACP,UAAU;CACX;AAED,MAAM,eAAoC;CACxC,QAAQ;CACR,YAAY;CACZ,SAAS;CACT,OAAO;CACP,YAAY;CACb;AAED,MAAM,sBAA2C;CAC/C,QAAQ;CACR,YAAY;CACZ,YAAY;CACZ,WAAW;CACX,OAAO;CACR"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ValidFileMatcher } from "../routing/file-matcher.js";
|
|
2
|
+
|
|
3
|
+
//#region src/server/dev-route-files.d.ts
|
|
4
|
+
declare function shouldInvalidateAppRouteFile(appDir: string, filePath: string, matcher: ValidFileMatcher): boolean;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { shouldInvalidateAppRouteFile };
|
|
7
|
+
//# sourceMappingURL=dev-route-files.d.ts.map
|