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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-ssr-stream.js","names":[],"sources":["../../src/server/app-ssr-stream.ts"],"sourcesContent":["import { createInlineScriptTag, safeJsonStringify } from \"./html.js\";\n\ntype RscEmbedTransform = {\n flush(): string;\n finalize(): Promise<string>;\n};\n\n/**\n * Fix invalid preload \"as\" values in RSC Flight hint lines before they reach\n * the client. React Flight emits HL hints with as=\"stylesheet\" for CSS, but\n * the HTML spec requires as=\"style\" for <link rel=\"preload\">.\n */\nexport function fixFlightHints(text: string): string {\n return text.replace(/(\\d*:HL\\[.*?),\"stylesheet\"(\\]|,)/g, '$1,\"style\"$2');\n}\n\n/**\n * Create a helper that progressively embeds RSC chunks as inline <script> tags.\n * The browser entry turns the embedded text chunks back into Uint8Array data.\n */\nexport function createRscEmbedTransform(\n embedStream: ReadableStream<Uint8Array>,\n scriptNonce?: string,\n): RscEmbedTransform {\n const reader = embedStream.getReader();\n const decoder = new TextDecoder();\n let pendingChunks: string[] = [];\n let reading = false;\n\n async function pumpReader(): Promise<void> {\n if (reading) return;\n reading = true;\n try {\n while (true) {\n const result = await reader.read();\n if (result.done) break;\n const text = decoder.decode(result.value, { stream: true });\n // The RSC entry already fixes HL hints at the source. Keep this second\n // pass as defense in depth for any embed stream that bypasses that\n // wrapper; the rewrite is idempotent, so double-application is safe.\n pendingChunks.push(fixFlightHints(text));\n }\n } catch (error) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[vinext] RSC embed stream read error:\", error);\n }\n } finally {\n reading = false;\n }\n }\n\n const pumpPromise = pumpReader();\n\n return {\n flush(): string {\n if (pendingChunks.length === 0) return \"\";\n\n const chunks = pendingChunks;\n pendingChunks = [];\n\n let scripts = \"\";\n for (const chunk of chunks) {\n scripts += createInlineScriptTag(\n \"self.__VINEXT_RSC_CHUNKS__=self.__VINEXT_RSC_CHUNKS__||[];self.__VINEXT_RSC_CHUNKS__.push(\" +\n safeJsonStringify(chunk) +\n \")\",\n scriptNonce,\n );\n }\n return scripts;\n },\n\n async finalize(): Promise<string> {\n await pumpPromise;\n let scripts = this.flush();\n scripts += createInlineScriptTag(\"self.__VINEXT_RSC_DONE__=true\", scriptNonce);\n return scripts;\n },\n };\n}\n\n/**\n * Fix invalid preload \"as\" values in server-rendered HTML.\n * React Fizz emits <link rel=\"preload\" as=\"stylesheet\"> for CSS, but the\n * HTML spec requires as=\"style\" for <link rel=\"preload\">.\n */\nexport function fixPreloadAs(html: string): string {\n return html.replace(/<link(?=[^>]*\\srel=\"preload\")[^>]*>/g, (tag) =>\n tag.replace(' as=\"stylesheet\"', ' as=\"style\"'),\n );\n}\n\n/**\n * Create the tick-buffered HTML transform that injects RSC scripts between\n * React Fizz flush cycles without corrupting split HTML chunks.\n */\nexport function createTickBufferedTransform(\n rscEmbed: RscEmbedTransform,\n injectHTML = \"\",\n): TransformStream<Uint8Array, Uint8Array> {\n const decoder = new TextDecoder();\n const encoder = new TextEncoder();\n let injected = false;\n let buffered: string[] = [];\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const flushBuffered = (controller: TransformStreamDefaultController<Uint8Array>): void => {\n for (const chunk of buffered) {\n if (!injected) {\n const headEnd = chunk.indexOf(\"</head>\");\n if (headEnd !== -1) {\n const before = chunk.slice(0, headEnd);\n const after = chunk.slice(headEnd);\n controller.enqueue(encoder.encode(before +
|
|
1
|
+
{"version":3,"file":"app-ssr-stream.js","names":[],"sources":["../../src/server/app-ssr-stream.ts"],"sourcesContent":["import { createInlineScriptTag, safeJsonStringify } from \"./html.js\";\n\ntype RscEmbedTransform = {\n flush(): string;\n finalize(): Promise<string>;\n /** Resolves when all raw bytes from the embed stream have been read. */\n getRawBuffer(): Promise<ArrayBuffer>;\n};\n\ntype HtmlInsertion = string | (() => string);\n\n/**\n * Fix invalid preload \"as\" values in RSC Flight hint lines before they reach\n * the client. React Flight emits HL hints with as=\"stylesheet\" for CSS, but\n * the HTML spec requires as=\"style\" for <link rel=\"preload\">.\n */\nexport function fixFlightHints(text: string): string {\n return text.replace(/(\\d*:HL\\[.*?),\"stylesheet\"(\\]|,)/g, '$1,\"style\"$2');\n}\n\n/**\n * Create a helper that progressively embeds RSC chunks as inline <script> tags.\n * The browser entry turns the embedded text chunks back into Uint8Array data.\n */\nexport function createRscEmbedTransform(\n embedStream: ReadableStream<Uint8Array>,\n scriptNonce?: string,\n): RscEmbedTransform {\n const reader = embedStream.getReader();\n const decoder = new TextDecoder();\n let pendingChunks: string[] = [];\n const rawChunks: Uint8Array[] = [];\n let reading = false;\n\n async function pumpReader(): Promise<void> {\n if (reading) return;\n reading = true;\n try {\n while (true) {\n const result = await reader.read();\n if (result.done) break;\n // Accumulate raw bytes BEFORE fixFlightHints so the cache stores\n // unmodified RSC data. The embed script path below applies fixes.\n rawChunks.push(result.value);\n const text = decoder.decode(result.value, { stream: true });\n // The RSC entry already fixes HL hints at the source. Keep this second\n // pass as defense in depth for any embed stream that bypasses that\n // wrapper; the rewrite is idempotent, so double-application is safe.\n pendingChunks.push(fixFlightHints(text));\n }\n } catch (error) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[vinext] RSC embed stream read error:\", error);\n }\n throw error;\n } finally {\n reading = false;\n }\n }\n\n const pumpPromise = pumpReader();\n\n return {\n flush(): string {\n if (pendingChunks.length === 0) return \"\";\n\n const chunks = pendingChunks;\n pendingChunks = [];\n\n let scripts = \"\";\n for (const chunk of chunks) {\n scripts += createInlineScriptTag(\n \"self.__VINEXT_RSC_CHUNKS__=self.__VINEXT_RSC_CHUNKS__||[];self.__VINEXT_RSC_CHUNKS__.push(\" +\n safeJsonStringify(chunk) +\n \")\",\n scriptNonce,\n );\n }\n return scripts;\n },\n\n async finalize(): Promise<string> {\n await pumpPromise;\n let scripts = this.flush();\n scripts += createInlineScriptTag(\"self.__VINEXT_RSC_DONE__=true\", scriptNonce);\n return scripts;\n },\n\n async getRawBuffer(): Promise<ArrayBuffer> {\n await pumpPromise;\n let totalLength = 0;\n for (const chunk of rawChunks) {\n totalLength += chunk.byteLength;\n }\n const buffer = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of rawChunks) {\n buffer.set(chunk, offset);\n offset += chunk.byteLength;\n }\n rawChunks.length = 0;\n return buffer.buffer;\n },\n };\n}\n\n/**\n * Fix invalid preload \"as\" values in server-rendered HTML.\n * React Fizz emits <link rel=\"preload\" as=\"stylesheet\"> for CSS, but the\n * HTML spec requires as=\"style\" for <link rel=\"preload\">.\n */\nexport function fixPreloadAs(html: string): string {\n return html.replace(/<link(?=[^>]*\\srel=\"preload\")[^>]*>/g, (tag) =>\n tag.replace(' as=\"stylesheet\"', ' as=\"style\"'),\n );\n}\n\n/**\n * Create the tick-buffered HTML transform that injects RSC scripts between\n * React Fizz flush cycles without corrupting split HTML chunks.\n */\nexport function createTickBufferedTransform(\n rscEmbed: RscEmbedTransform,\n injectHTML: HtmlInsertion = \"\",\n): TransformStream<Uint8Array, Uint8Array> {\n const decoder = new TextDecoder();\n const encoder = new TextEncoder();\n const insertsPerFlush = typeof injectHTML === \"function\";\n let injected = false;\n let buffered: string[] = [];\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n const readInsertion = (): string =>\n typeof injectHTML === \"function\" ? injectHTML() : injectHTML;\n const emitInsertion = (controller: TransformStreamDefaultController<Uint8Array>): void => {\n const insertion = readInsertion();\n if (insertion) {\n controller.enqueue(encoder.encode(insertion));\n }\n };\n\n const flushBuffered = (controller: TransformStreamDefaultController<Uint8Array>): void => {\n if (buffered.length === 0) return;\n\n if (injected && insertsPerFlush) {\n // Emit newly collected server-inserted HTML before the next Fizz HTML\n // batch so CSS-in-JS styles precede the elements they style.\n emitInsertion(controller);\n }\n\n for (const chunk of buffered) {\n if (!injected) {\n const headEnd = chunk.indexOf(\"</head>\");\n if (headEnd !== -1) {\n const before = chunk.slice(0, headEnd);\n const after = chunk.slice(headEnd);\n controller.enqueue(encoder.encode(before + readInsertion() + after));\n injected = true;\n continue;\n }\n }\n controller.enqueue(encoder.encode(chunk));\n }\n buffered = [];\n };\n\n return new TransformStream<Uint8Array, Uint8Array>({\n transform(chunk, controller) {\n buffered.push(fixPreloadAs(decoder.decode(chunk, { stream: true })));\n\n if (timeoutId !== null) return;\n\n timeoutId = setTimeout(() => {\n try {\n flushBuffered(controller);\n\n const rscScripts = rscEmbed.flush();\n if (rscScripts) {\n controller.enqueue(encoder.encode(rscScripts));\n }\n } catch {\n // Stream was cancelled between when the timeout was registered and\n // when it fired (e.g. client disconnected, health-check cancelled\n // the response body). Ignore — the stream is already closed.\n }\n\n timeoutId = null;\n }, 0);\n },\n\n async flush(controller) {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n flushBuffered(controller);\n\n if (!injected) {\n emitInsertion(controller);\n injected = true;\n } else if (insertsPerFlush) {\n emitInsertion(controller);\n }\n\n const finalScripts = await rscEmbed.finalize();\n if (finalScripts) {\n controller.enqueue(encoder.encode(finalScripts));\n }\n },\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { HeadersContext } from "../shims/headers.js";
|
|
2
|
+
|
|
3
|
+
//#region src/server/app-static-generation.d.ts
|
|
4
|
+
type AppStaticGenerationRouteKind = "page" | "route";
|
|
5
|
+
type CreateStaticGenerationHeadersContextOptions = {
|
|
6
|
+
dynamicConfig?: string;
|
|
7
|
+
routeKind: AppStaticGenerationRouteKind;
|
|
8
|
+
routePattern?: string;
|
|
9
|
+
};
|
|
10
|
+
declare function getAppPageStaticGenerationErrorMessage(): string;
|
|
11
|
+
declare function getAppRouteStaticGenerationErrorMessage(routePattern?: string, expression?: string): string;
|
|
12
|
+
declare function createStaticGenerationHeadersContext(options: CreateStaticGenerationHeadersContextOptions): HeadersContext;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { createStaticGenerationHeadersContext, getAppPageStaticGenerationErrorMessage, getAppRouteStaticGenerationErrorMessage };
|
|
15
|
+
//# sourceMappingURL=app-static-generation.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/server/app-static-generation.ts
|
|
2
|
+
function getAppPageStaticGenerationErrorMessage() {
|
|
3
|
+
return "Page with `dynamic = \"error\"` used a dynamic API. This page was expected to be fully static, but headers(), cookies(), or searchParams was accessed. Remove the dynamic API usage or change the dynamic config to \"auto\" or \"force-dynamic\".";
|
|
4
|
+
}
|
|
5
|
+
function getAppRouteStaticGenerationErrorMessage(routePattern, expression) {
|
|
6
|
+
return `Route ${routePattern ?? "unknown route"} with \`dynamic = "error"\` couldn't be rendered statically because it used ${expression ?? "a dynamic request API"}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`;
|
|
7
|
+
}
|
|
8
|
+
function createStaticGenerationHeadersContext(options) {
|
|
9
|
+
const context = {
|
|
10
|
+
headers: new Headers(),
|
|
11
|
+
cookies: /* @__PURE__ */ new Map()
|
|
12
|
+
};
|
|
13
|
+
if (options.dynamicConfig === "force-static") context.forceStatic = true;
|
|
14
|
+
if (options.dynamicConfig === "error") context.accessError = new Error(options.routeKind === "route" ? getAppRouteStaticGenerationErrorMessage(options.routePattern) : getAppPageStaticGenerationErrorMessage());
|
|
15
|
+
return context;
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { createStaticGenerationHeadersContext, getAppPageStaticGenerationErrorMessage, getAppRouteStaticGenerationErrorMessage };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=app-static-generation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-static-generation.js","names":[],"sources":["../../src/server/app-static-generation.ts"],"sourcesContent":["import type { HeadersContext } from \"vinext/shims/headers\";\n\ntype AppStaticGenerationRouteKind = \"page\" | \"route\";\n\ntype CreateStaticGenerationHeadersContextOptions = {\n dynamicConfig?: string;\n routeKind: AppStaticGenerationRouteKind;\n routePattern?: string;\n};\n\nexport function getAppPageStaticGenerationErrorMessage(): string {\n return (\n 'Page with `dynamic = \"error\"` used a dynamic API. ' +\n \"This page was expected to be fully static, but headers(), cookies(), \" +\n \"or searchParams was accessed. Remove the dynamic API usage or change \" +\n 'the dynamic config to \"auto\" or \"force-dynamic\".'\n );\n}\n\nexport function getAppRouteStaticGenerationErrorMessage(\n routePattern?: string,\n expression?: string,\n): string {\n const route = routePattern ?? \"unknown route\";\n const dynamicExpression = expression ?? \"a dynamic request API\";\n return (\n `Route ${route} with \\`dynamic = \"error\"\\` couldn't be rendered statically ` +\n `because it used ${dynamicExpression}. ` +\n \"See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering\"\n );\n}\n\nexport function createStaticGenerationHeadersContext(\n options: CreateStaticGenerationHeadersContextOptions,\n): HeadersContext {\n const context: HeadersContext = {\n headers: new Headers(),\n cookies: new Map(),\n };\n\n if (options.dynamicConfig === \"force-static\") {\n context.forceStatic = true;\n }\n\n if (options.dynamicConfig === \"error\") {\n context.accessError = new Error(\n options.routeKind === \"route\"\n ? getAppRouteStaticGenerationErrorMessage(options.routePattern)\n : getAppPageStaticGenerationErrorMessage(),\n );\n }\n\n return context;\n}\n"],"mappings":";AAUA,SAAgB,yCAAiD;AAC/D,QACE;;AAOJ,SAAgB,wCACd,cACA,YACQ;AAGR,QACE,SAHY,gBAAgB,gBAGb,8EAFS,cAAc,wBAGD;;AAKzC,SAAgB,qCACd,SACgB;CAChB,MAAM,UAA0B;EAC9B,SAAS,IAAI,SAAS;EACtB,yBAAS,IAAI,KAAK;EACnB;AAED,KAAI,QAAQ,kBAAkB,eAC5B,SAAQ,cAAc;AAGxB,KAAI,QAAQ,kBAAkB,QAC5B,SAAQ,cAAc,IAAI,MACxB,QAAQ,cAAc,UAClB,wCAAwC,QAAQ,aAAa,GAC7D,wCAAwC,CAC7C;AAGH,QAAO"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/server/cache-control.d.ts
|
|
2
|
+
declare const NEVER_CACHE_CONTROL = "private, no-cache, no-store, max-age=0, must-revalidate";
|
|
3
|
+
declare const STATIC_CACHE_CONTROL = "s-maxage=31536000, stale-while-revalidate";
|
|
4
|
+
declare const NO_STORE_CACHE_CONTROL = "no-store, must-revalidate";
|
|
5
|
+
/**
|
|
6
|
+
* Matches Next.js's `getCacheControlHeader` stale window semantics while
|
|
7
|
+
* preserving vinext's legacy unbounded SWR header when no expire ceiling is
|
|
8
|
+
* available yet.
|
|
9
|
+
*
|
|
10
|
+
* Next.js source:
|
|
11
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/server/lib/cache-control.ts
|
|
12
|
+
*/
|
|
13
|
+
declare function buildRevalidateCacheControl(revalidateSeconds: number, expireSeconds?: number): string;
|
|
14
|
+
/**
|
|
15
|
+
* Builds Cache-Control for ISR cache reads. HIT responses and STALE responses
|
|
16
|
+
* with stored expire metadata use the same route policy because Next.js derives
|
|
17
|
+
* this header from cache-control metadata, not from the cache hit/stale state.
|
|
18
|
+
* STALE entries without expire metadata keep vinext's legacy `s-maxage=0`
|
|
19
|
+
* fallback so older cache entries are not treated as newly fresh downstream.
|
|
20
|
+
*/
|
|
21
|
+
declare function buildCachedRevalidateCacheControl(cacheState: "HIT" | "STALE", revalidateSeconds: number, expireSeconds?: number): string;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { NEVER_CACHE_CONTROL, NO_STORE_CACHE_CONTROL, STATIC_CACHE_CONTROL, buildCachedRevalidateCacheControl, buildRevalidateCacheControl };
|
|
24
|
+
//# sourceMappingURL=cache-control.d.ts.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
//#region src/server/cache-control.ts
|
|
2
|
+
const NEVER_CACHE_CONTROL = "private, no-cache, no-store, max-age=0, must-revalidate";
|
|
3
|
+
const STATIC_CACHE_CONTROL = "s-maxage=31536000, stale-while-revalidate";
|
|
4
|
+
const STALE_REVALIDATE_CACHE_CONTROL = "s-maxage=0, stale-while-revalidate";
|
|
5
|
+
const NO_STORE_CACHE_CONTROL = "no-store, must-revalidate";
|
|
6
|
+
/**
|
|
7
|
+
* Matches Next.js's `getCacheControlHeader` stale window semantics while
|
|
8
|
+
* preserving vinext's legacy unbounded SWR header when no expire ceiling is
|
|
9
|
+
* available yet.
|
|
10
|
+
*
|
|
11
|
+
* Next.js source:
|
|
12
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/server/lib/cache-control.ts
|
|
13
|
+
*/
|
|
14
|
+
function buildRevalidateCacheControl(revalidateSeconds, expireSeconds) {
|
|
15
|
+
if (expireSeconds === void 0) return `s-maxage=${revalidateSeconds}, stale-while-revalidate`;
|
|
16
|
+
if (revalidateSeconds >= expireSeconds) return `s-maxage=${revalidateSeconds}`;
|
|
17
|
+
return `s-maxage=${revalidateSeconds}, stale-while-revalidate=${expireSeconds - revalidateSeconds}`;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Builds Cache-Control for ISR cache reads. HIT responses and STALE responses
|
|
21
|
+
* with stored expire metadata use the same route policy because Next.js derives
|
|
22
|
+
* this header from cache-control metadata, not from the cache hit/stale state.
|
|
23
|
+
* STALE entries without expire metadata keep vinext's legacy `s-maxage=0`
|
|
24
|
+
* fallback so older cache entries are not treated as newly fresh downstream.
|
|
25
|
+
*/
|
|
26
|
+
function buildCachedRevalidateCacheControl(cacheState, revalidateSeconds, expireSeconds) {
|
|
27
|
+
if (cacheState === "STALE" && expireSeconds === void 0) return STALE_REVALIDATE_CACHE_CONTROL;
|
|
28
|
+
return buildRevalidateCacheControl(revalidateSeconds, expireSeconds);
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { NEVER_CACHE_CONTROL, NO_STORE_CACHE_CONTROL, STATIC_CACHE_CONTROL, buildCachedRevalidateCacheControl, buildRevalidateCacheControl };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=cache-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-control.js","names":[],"sources":["../../src/server/cache-control.ts"],"sourcesContent":["export const NEVER_CACHE_CONTROL = \"private, no-cache, no-store, max-age=0, must-revalidate\";\n\nexport const STATIC_CACHE_CONTROL = \"s-maxage=31536000, stale-while-revalidate\";\n\nconst STALE_REVALIDATE_CACHE_CONTROL = \"s-maxage=0, stale-while-revalidate\";\n\nexport const NO_STORE_CACHE_CONTROL = \"no-store, must-revalidate\";\n\n/**\n * Matches Next.js's `getCacheControlHeader` stale window semantics while\n * preserving vinext's legacy unbounded SWR header when no expire ceiling is\n * available yet.\n *\n * Next.js source:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/server/lib/cache-control.ts\n */\nexport function buildRevalidateCacheControl(\n revalidateSeconds: number,\n expireSeconds?: number,\n): string {\n if (expireSeconds === undefined) {\n return `s-maxage=${revalidateSeconds}, stale-while-revalidate`;\n }\n\n // `expire <= revalidate` is a zero-width stale window: downstream caches\n // should refetch after s-maxage instead of serving stale.\n if (revalidateSeconds >= expireSeconds) {\n return `s-maxage=${revalidateSeconds}`;\n }\n\n return `s-maxage=${revalidateSeconds}, stale-while-revalidate=${\n expireSeconds - revalidateSeconds\n }`;\n}\n\n/**\n * Builds Cache-Control for ISR cache reads. HIT responses and STALE responses\n * with stored expire metadata use the same route policy because Next.js derives\n * this header from cache-control metadata, not from the cache hit/stale state.\n * STALE entries without expire metadata keep vinext's legacy `s-maxage=0`\n * fallback so older cache entries are not treated as newly fresh downstream.\n */\nexport function buildCachedRevalidateCacheControl(\n cacheState: \"HIT\" | \"STALE\",\n revalidateSeconds: number,\n expireSeconds?: number,\n): string {\n // When expire is known, match Next.js and emit the route policy even for\n // vinext-served STALE entries. The hard-expire gate has already decided the\n // stale payload is still usable, and downstream caches should see the same\n // finite SWR window Next.js would emit from cacheControl metadata.\n if (cacheState === \"STALE\" && expireSeconds === undefined) {\n return STALE_REVALIDATE_CACHE_CONTROL;\n }\n\n return buildRevalidateCacheControl(revalidateSeconds, expireSeconds);\n}\n"],"mappings":";AAAA,MAAa,sBAAsB;AAEnC,MAAa,uBAAuB;AAEpC,MAAM,iCAAiC;AAEvC,MAAa,yBAAyB;;;;;;;;;AAUtC,SAAgB,4BACd,mBACA,eACQ;AACR,KAAI,kBAAkB,KAAA,EACpB,QAAO,YAAY,kBAAkB;AAKvC,KAAI,qBAAqB,cACvB,QAAO,YAAY;AAGrB,QAAO,YAAY,kBAAkB,2BACnC,gBAAgB;;;;;;;;;AAWpB,SAAgB,kCACd,YACA,mBACA,eACQ;AAKR,KAAI,eAAe,WAAW,kBAAkB,KAAA,EAC9C,QAAO;AAGT,QAAO,4BAA4B,mBAAmB,cAAc"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/server/dev-error-overlay-store.d.ts
|
|
2
|
+
type Source = "uncaught" | "caught" | "window-error" | "unhandledrejection";
|
|
3
|
+
type ReportedError = {
|
|
4
|
+
source: Source;
|
|
5
|
+
message: string;
|
|
6
|
+
stack: string | undefined;
|
|
7
|
+
componentStack: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
type OverlayState = {
|
|
10
|
+
errors: ReportedError[];
|
|
11
|
+
index: number;
|
|
12
|
+
minimized: boolean;
|
|
13
|
+
};
|
|
14
|
+
declare function subscribeOverlay(fn: () => void): () => void;
|
|
15
|
+
declare function getOverlaySnapshot(): OverlayState;
|
|
16
|
+
declare function reportToOverlay(error: ReportedError): void;
|
|
17
|
+
declare function dismissOverlay(): void;
|
|
18
|
+
declare function setOverlayIndex(index: number): void;
|
|
19
|
+
declare function minimizeOverlay(): void;
|
|
20
|
+
declare function expandOverlay(): void;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { OverlayState, ReportedError, Source, dismissOverlay, expandOverlay, getOverlaySnapshot, minimizeOverlay, reportToOverlay, setOverlayIndex, subscribeOverlay };
|
|
23
|
+
//# sourceMappingURL=dev-error-overlay-store.d.ts.map
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
//#region src/server/dev-error-overlay-store.ts
|
|
2
|
+
const MAX_DEV_OVERLAY_ERRORS = 50;
|
|
3
|
+
let snapshot = {
|
|
4
|
+
errors: [],
|
|
5
|
+
index: 0,
|
|
6
|
+
minimized: false
|
|
7
|
+
};
|
|
8
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
9
|
+
function emit() {
|
|
10
|
+
for (const fn of listeners) fn();
|
|
11
|
+
}
|
|
12
|
+
function subscribeOverlay(fn) {
|
|
13
|
+
listeners.add(fn);
|
|
14
|
+
return () => {
|
|
15
|
+
listeners.delete(fn);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function getOverlaySnapshot() {
|
|
19
|
+
return snapshot;
|
|
20
|
+
}
|
|
21
|
+
function reportToOverlay(error) {
|
|
22
|
+
const next = [...snapshot.errors, error];
|
|
23
|
+
const dropped = next.length > MAX_DEV_OVERLAY_ERRORS ? next.length - MAX_DEV_OVERLAY_ERRORS : 0;
|
|
24
|
+
const errors = dropped > 0 ? next.slice(dropped) : next;
|
|
25
|
+
snapshot = {
|
|
26
|
+
errors,
|
|
27
|
+
index: errors.length - 1,
|
|
28
|
+
minimized: false
|
|
29
|
+
};
|
|
30
|
+
emit();
|
|
31
|
+
}
|
|
32
|
+
function dismissOverlay() {
|
|
33
|
+
snapshot = {
|
|
34
|
+
errors: [],
|
|
35
|
+
index: 0,
|
|
36
|
+
minimized: false
|
|
37
|
+
};
|
|
38
|
+
emit();
|
|
39
|
+
}
|
|
40
|
+
function setOverlayIndex(index) {
|
|
41
|
+
if (index < 0 || index >= snapshot.errors.length) return;
|
|
42
|
+
snapshot = {
|
|
43
|
+
...snapshot,
|
|
44
|
+
index
|
|
45
|
+
};
|
|
46
|
+
emit();
|
|
47
|
+
}
|
|
48
|
+
function minimizeOverlay() {
|
|
49
|
+
if (snapshot.minimized) return;
|
|
50
|
+
snapshot = {
|
|
51
|
+
...snapshot,
|
|
52
|
+
minimized: true
|
|
53
|
+
};
|
|
54
|
+
emit();
|
|
55
|
+
}
|
|
56
|
+
function expandOverlay() {
|
|
57
|
+
if (!snapshot.minimized) return;
|
|
58
|
+
snapshot = {
|
|
59
|
+
...snapshot,
|
|
60
|
+
minimized: false
|
|
61
|
+
};
|
|
62
|
+
emit();
|
|
63
|
+
}
|
|
64
|
+
//#endregion
|
|
65
|
+
export { dismissOverlay, expandOverlay, getOverlaySnapshot, minimizeOverlay, reportToOverlay, setOverlayIndex, subscribeOverlay };
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=dev-error-overlay-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-error-overlay-store.js","names":[],"sources":["../../src/server/dev-error-overlay-store.ts"],"sourcesContent":["// Module-level store for the dev error overlay. Lives in its own file so the\n// overlay React component (dev-error-overlay.tsx) can subscribe via\n// useSyncExternalStore without circular imports.\n\nexport type Source = \"uncaught\" | \"caught\" | \"window-error\" | \"unhandledrejection\";\n\nexport type ReportedError = {\n source: Source;\n message: string;\n stack: string | undefined;\n componentStack: string | undefined;\n};\n\nexport type OverlayState = {\n errors: ReportedError[];\n index: number;\n minimized: boolean;\n};\n\n// Cap the buffer so a hot-reloading loop or an effect that throws on every\n// render can't grow the array (and its retained stack strings) without\n// bound. FIFO eviction keeps the most recent failures.\nconst MAX_DEV_OVERLAY_ERRORS = 50;\n\nlet snapshot: OverlayState = { errors: [], index: 0, minimized: false };\nconst listeners = new Set<() => void>();\n\nfunction emit(): void {\n for (const fn of listeners) fn();\n}\n\nexport function subscribeOverlay(fn: () => void): () => void {\n listeners.add(fn);\n return () => {\n listeners.delete(fn);\n };\n}\n\nexport function getOverlaySnapshot(): OverlayState {\n return snapshot;\n}\n\nexport function reportToOverlay(error: ReportedError): void {\n // Any new error pops the dialog open, regardless of source or current\n // state. The developer can minimize once they've taken stock; subsequent\n // failures will re-expand.\n const next = [...snapshot.errors, error];\n const dropped = next.length > MAX_DEV_OVERLAY_ERRORS ? next.length - MAX_DEV_OVERLAY_ERRORS : 0;\n const errors = dropped > 0 ? next.slice(dropped) : next;\n snapshot = {\n errors,\n index: errors.length - 1,\n minimized: false,\n };\n emit();\n}\n\nexport function dismissOverlay(): void {\n snapshot = { errors: [], index: 0, minimized: false };\n emit();\n}\n\nexport function setOverlayIndex(index: number): void {\n if (index < 0 || index >= snapshot.errors.length) return;\n snapshot = { ...snapshot, index };\n emit();\n}\n\nexport function minimizeOverlay(): void {\n if (snapshot.minimized) return;\n snapshot = { ...snapshot, minimized: true };\n emit();\n}\n\nexport function expandOverlay(): void {\n if (!snapshot.minimized) return;\n snapshot = { ...snapshot, minimized: false };\n emit();\n}\n"],"mappings":";AAsBA,MAAM,yBAAyB;AAE/B,IAAI,WAAyB;CAAE,QAAQ,EAAE;CAAE,OAAO;CAAG,WAAW;CAAO;AACvE,MAAM,4BAAY,IAAI,KAAiB;AAEvC,SAAS,OAAa;AACpB,MAAK,MAAM,MAAM,UAAW,KAAI;;AAGlC,SAAgB,iBAAiB,IAA4B;AAC3D,WAAU,IAAI,GAAG;AACjB,cAAa;AACX,YAAU,OAAO,GAAG;;;AAIxB,SAAgB,qBAAmC;AACjD,QAAO;;AAGT,SAAgB,gBAAgB,OAA4B;CAI1D,MAAM,OAAO,CAAC,GAAG,SAAS,QAAQ,MAAM;CACxC,MAAM,UAAU,KAAK,SAAS,yBAAyB,KAAK,SAAS,yBAAyB;CAC9F,MAAM,SAAS,UAAU,IAAI,KAAK,MAAM,QAAQ,GAAG;AACnD,YAAW;EACT;EACA,OAAO,OAAO,SAAS;EACvB,WAAW;EACZ;AACD,OAAM;;AAGR,SAAgB,iBAAuB;AACrC,YAAW;EAAE,QAAQ,EAAE;EAAE,OAAO;EAAG,WAAW;EAAO;AACrD,OAAM;;AAGR,SAAgB,gBAAgB,OAAqB;AACnD,KAAI,QAAQ,KAAK,SAAS,SAAS,OAAO,OAAQ;AAClD,YAAW;EAAE,GAAG;EAAU;EAAO;AACjC,OAAM;;AAGR,SAAgB,kBAAwB;AACtC,KAAI,SAAS,UAAW;AACxB,YAAW;EAAE,GAAG;EAAU,WAAW;EAAM;AAC3C,OAAM;;AAGR,SAAgB,gBAAsB;AACpC,KAAI,CAAC,SAAS,UAAW;AACzB,YAAW;EAAE,GAAG;EAAU,WAAW;EAAO;AAC5C,OAAM"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { dismissOverlay } from "./dev-error-overlay-store.js";
|
|
2
|
+
|
|
3
|
+
//#region src/server/dev-error-overlay.d.ts
|
|
4
|
+
declare function installDevErrorOverlay(): void;
|
|
5
|
+
declare function devOnCaughtError(error: unknown, errorInfo: {
|
|
6
|
+
componentStack?: string;
|
|
7
|
+
errorBoundary?: unknown;
|
|
8
|
+
}): void;
|
|
9
|
+
declare function devOnUncaughtError(error: unknown, errorInfo: {
|
|
10
|
+
componentStack?: string;
|
|
11
|
+
errorBoundary?: unknown;
|
|
12
|
+
}): void;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { devOnCaughtError, devOnUncaughtError, dismissOverlay, installDevErrorOverlay };
|
|
15
|
+
//# sourceMappingURL=dev-error-overlay.d.ts.map
|