@wular/pnext 0.0.1
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 +153 -0
- package/bin/pnext +67 -0
- package/config/lint/base.js +48 -0
- package/config/ts/base.json +26 -0
- package/config/ts/react.json +13 -0
- package/package.json +70 -0
- package/reference/compat.md +63 -0
- package/reference/config.md +120 -0
- package/reference/css.md +58 -0
- package/reference/dev.md +69 -0
- package/reference/env.md +40 -0
- package/reference/metadata.md +86 -0
- package/reference/navigation.md +149 -0
- package/reference/overview.md +35 -0
- package/reference/performance.md +97 -0
- package/reference/rendering.md +127 -0
- package/reference/routing.md +167 -0
- package/reference/typegen.md +64 -0
- package/src/api/cache.ts +80 -0
- package/src/api/client-cache.ts +9 -0
- package/src/api/client-navigation.ts +279 -0
- package/src/api/dynamic.tsx +102 -0
- package/src/api/link.tsx +119 -0
- package/src/api/navigation.ts +198 -0
- package/src/api/router/events.ts +53 -0
- package/src/api/router/history.ts +70 -0
- package/src/api/router/hub.ts +194 -0
- package/src/api/router/policies.ts +107 -0
- package/src/api/router/runtime.ts +5238 -0
- package/src/api/router/types.ts +299 -0
- package/src/api/router.ts +167 -0
- package/src/api/server.ts +323 -0
- package/src/api/suspense.ts +16 -0
- package/src/cache/context.ts +61 -0
- package/src/cli/adapters/vercel-warm.ts +375 -0
- package/src/cli/adapters/vercel.ts +1310 -0
- package/src/cli/analyze-print.ts +181 -0
- package/src/cli/analyze.ts +328 -0
- package/src/cli/boot-trace.ts +29 -0
- package/src/cli/build.ts +3114 -0
- package/src/cli/dev.ts +276 -0
- package/src/cli/index.ts +196 -0
- package/src/cli/named-bin.ts +119 -0
- package/src/cli/serve-ui.ts +160 -0
- package/src/cli/start.ts +1425 -0
- package/src/client/build.ts +2136 -0
- package/src/client/chunk-fold.ts +526 -0
- package/src/client/entry.ts +1525 -0
- package/src/client/paths.ts +22 -0
- package/src/client/prebuilt.ts +621 -0
- package/src/client/profile.ts +75 -0
- package/src/client/react-compiler.ts +94 -0
- package/src/client/reference-stub.ts +145 -0
- package/src/client/reference.ts +47 -0
- package/src/compat/actions/action-client.ts +531 -0
- package/src/compat/actions/action-dispatch.ts +676 -0
- package/src/compat/actions/action-router.ts +40 -0
- package/src/compat/actions/action-shared.ts +95 -0
- package/src/compat/actions/client-plugin.ts +135 -0
- package/src/compat/actions/client-stub.ts +65 -0
- package/src/compat/actions/config.ts +164 -0
- package/src/compat/actions/detect.ts +208 -0
- package/src/compat/actions/discovery.ts +244 -0
- package/src/compat/actions/early-submit.ts +40 -0
- package/src/compat/actions/endpoint.ts +602 -0
- package/src/compat/actions/flight.ts +52 -0
- package/src/compat/actions/form-state.ts +73 -0
- package/src/compat/actions/hoist.ts +485 -0
- package/src/compat/actions/ids.ts +39 -0
- package/src/compat/actions/index.ts +41 -0
- package/src/compat/actions/instances.ts +144 -0
- package/src/compat/actions/origin.ts +109 -0
- package/src/compat/actions/protocol.ts +125 -0
- package/src/compat/actions/registry.ts +74 -0
- package/src/compat/actions/rewrite.ts +282 -0
- package/src/compat/actions/serve.ts +414 -0
- package/src/compat/actions/server-tag.ts +21 -0
- package/src/compat/actions/unrecognized-error.ts +30 -0
- package/src/compat/adapter/build-complete.ts +257 -0
- package/src/compat/bundler/bun-externals.ts +53 -0
- package/src/compat/bundler/cjs-exports.ts +542 -0
- package/src/compat/bundler/config.ts +363 -0
- package/src/compat/bundler/externals.ts +34 -0
- package/src/compat/bundler/import-meta-url.ts +60 -0
- package/src/compat/bundler/modularize-imports.ts +119 -0
- package/src/compat/bundler/new-url-asset.ts +87 -0
- package/src/compat/bundler/optimize-package-imports.ts +273 -0
- package/src/compat/bundler/polyfill.ts +88 -0
- package/src/compat/bundler/react-compiler.ts +61 -0
- package/src/compat/bundler/react-profiler.tsx +25 -0
- package/src/compat/bundler/relay-transform.ts +116 -0
- package/src/compat/bundler/require-context.ts +281 -0
- package/src/compat/bundler/resolve-extensions.ts +75 -0
- package/src/compat/bundler/source-cache.ts +61 -0
- package/src/compat/bundler/static-imports.ts +25 -0
- package/src/compat/bundler/symlink-imports.ts +119 -0
- package/src/compat/bundler/tsconfig-paths.ts +50 -0
- package/src/compat/bundler/wasm.ts +153 -0
- package/src/compat/bundler/webpack-loaders.ts +685 -0
- package/src/compat/bundler/worker.ts +278 -0
- package/src/compat/cache/build-flags.ts +81 -0
- package/src/compat/cache/build-prerender-errors.ts +163 -0
- package/src/compat/cache/custom-handler.ts +159 -0
- package/src/compat/cache/fetch-patch.ts +745 -0
- package/src/compat/cache/handler.ts +100 -0
- package/src/compat/cache/modern-handler.ts +275 -0
- package/src/compat/cache/resume-data-cache.ts +143 -0
- package/src/compat/cache/revalidate.ts +759 -0
- package/src/compat/cache/runtime-error.ts +124 -0
- package/src/compat/cache/use-cache-transform.ts +961 -0
- package/src/compat/cache/use-cache.ts +1695 -0
- package/src/compat/cache-control.ts +269 -0
- package/src/compat/client/base-path.ts +64 -0
- package/src/compat/client/css-order.ts +36 -0
- package/src/compat/client/errors/control-flow.ts +92 -0
- package/src/compat/client/errors/error-boundary.ts +222 -0
- package/src/compat/client/errors/global-error.ts +238 -0
- package/src/compat/client/errors/install.ts +217 -0
- package/src/compat/client/errors/lazy.ts +53 -0
- package/src/compat/client/errors/primitive-throw.ts +126 -0
- package/src/compat/client/errors/soft-refresh.ts +14 -0
- package/src/compat/client/link-status.ts +86 -0
- package/src/compat/client/nav-compat-runtime.ts +57 -0
- package/src/compat/client/nav-compat.ts +42 -0
- package/src/compat/client/navigation-scroll.ts +154 -0
- package/src/compat/client/optimistic-routing.ts +206 -0
- package/src/compat/client/prefetch-cache.ts +111 -0
- package/src/compat/client/route-announcer.ts +72 -0
- package/src/compat/client/segment-cache-policy.ts +159 -0
- package/src/compat/client/segment-cache.ts +1077 -0
- package/src/compat/client/segment-prefetch.ts +375 -0
- package/src/compat/client/trailing-slash.ts +24 -0
- package/src/compat/css/chunking.ts +254 -0
- package/src/compat/css/inline-css.ts +73 -0
- package/src/compat/css/lightningcss.ts +90 -0
- package/src/compat/css/modules.ts +373 -0
- package/src/compat/css/nonce.ts +30 -0
- package/src/compat/css/sass-plugin.ts +65 -0
- package/src/compat/css/sass.ts +392 -0
- package/src/compat/css/styled-jsx-runtime.ts +80 -0
- package/src/compat/css/styled-jsx.ts +49 -0
- package/src/compat/edge-runtime.ts +71 -0
- package/src/compat/export/client.ts +112 -0
- package/src/compat/export/index.ts +272 -0
- package/src/compat/export/standalone.ts +207 -0
- package/src/compat/image-optimizer/cache.ts +119 -0
- package/src/compat/image-optimizer/detect.ts +143 -0
- package/src/compat/image-optimizer/index.ts +601 -0
- package/src/compat/image-optimizer/source.ts +243 -0
- package/src/compat/index.ts +458 -0
- package/src/compat/lifecycle/after-scope.ts +86 -0
- package/src/compat/lifecycle/after.ts +173 -0
- package/src/compat/lifecycle/error-funnel.ts +306 -0
- package/src/compat/lifecycle/error-serialize.ts +87 -0
- package/src/compat/lifecycle/error-ui.ts +167 -0
- package/src/compat/lifecycle/instrumentation-client.ts +138 -0
- package/src/compat/lifecycle/instrumentation.ts +277 -0
- package/src/compat/lifecycle/node-console.ts +19 -0
- package/src/compat/lifecycle/testmode.ts +263 -0
- package/src/compat/mdx/compile.ts +219 -0
- package/src/compat/mdx/next-mdx-stub.ts +46 -0
- package/src/compat/mdx/plugin.ts +37 -0
- package/src/compat/metadata-route-artifacts.ts +458 -0
- package/src/compat/metadata.ts +295 -0
- package/src/compat/middleware/manifest.ts +210 -0
- package/src/compat/misc/action-return.ts +173 -0
- package/src/compat/next/cache.ts +211 -0
- package/src/compat/next/canonical-url.ts +35 -0
- package/src/compat/next/client-cache.ts +57 -0
- package/src/compat/next/client-navigation.ts +313 -0
- package/src/compat/next/client-only.ts +3 -0
- package/src/compat/next/client-script.tsx +215 -0
- package/src/compat/next/client-server.ts +39 -0
- package/src/compat/next/config-loader.ts +569 -0
- package/src/compat/next/config.ts +29 -0
- package/src/compat/next/constants.cjs +6 -0
- package/src/compat/next/constants.ts +6 -0
- package/src/compat/next/custom-server.ts +236 -0
- package/src/compat/next/dist/client/components/app-router-headers.ts +32 -0
- package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +38 -0
- package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -0
- package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -0
- package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -0
- package/src/compat/next/dynamic.tsx +46 -0
- package/src/compat/next/error.tsx +148 -0
- package/src/compat/next/font/cache.ts +171 -0
- package/src/compat/next/font/google.ts +2 -0
- package/src/compat/next/font/index.ts +8 -0
- package/src/compat/next/font/local.ts +5 -0
- package/src/compat/next/font/runtime-client.ts +71 -0
- package/src/compat/next/font/runtime.ts +974 -0
- package/src/compat/next/font/shared.ts +281 -0
- package/src/compat/next/form.tsx +156 -0
- package/src/compat/next/head.tsx +10 -0
- package/src/compat/next/headers.ts +247 -0
- package/src/compat/next/image/config.ts +196 -0
- package/src/compat/next/image/optimizer.ts +96 -0
- package/src/compat/next/image/patterns.ts +103 -0
- package/src/compat/next/image/shared.ts +141 -0
- package/src/compat/next/image/static-metadata.ts +283 -0
- package/src/compat/next/image/validate.ts +269 -0
- package/src/compat/next/image-client.tsx +215 -0
- package/src/compat/next/image-props.ts +575 -0
- package/src/compat/next/image-usage.ts +102 -0
- package/src/compat/next/image.tsx +56 -0
- package/src/compat/next/index.ts +1 -0
- package/src/compat/next/legacy-image.tsx +97 -0
- package/src/compat/next/link-usage.ts +29 -0
- package/src/compat/next/link-validation-transform.ts +200 -0
- package/src/compat/next/link.tsx +466 -0
- package/src/compat/next/navigation.cjs +21 -0
- package/src/compat/next/navigation.ts +188 -0
- package/src/compat/next/offline.ts +51 -0
- package/src/compat/next/og.ts +324 -0
- package/src/compat/next/optimistic-route-state.ts +188 -0
- package/src/compat/next/preferred-region.ts +39 -0
- package/src/compat/next/redirects.ts +131 -0
- package/src/compat/next/resource-hints.ts +136 -0
- package/src/compat/next/rewrites.ts +350 -0
- package/src/compat/next/root-params.ts +142 -0
- package/src/compat/next/router.cjs +49 -0
- package/src/compat/next/router.ts +143 -0
- package/src/compat/next/script.tsx +355 -0
- package/src/compat/next/server-only.ts +3 -0
- package/src/compat/next/server.ts +28 -0
- package/src/compat/next/svgr.ts +58 -0
- package/src/compat/next/telemetry.ts +77 -0
- package/src/compat/next/user-agent.ts +100 -0
- package/src/compat/next/web-vitals.ts +56 -0
- package/src/compat/otel/api.ts +95 -0
- package/src/compat/otel/client-trace-metadata.ts +71 -0
- package/src/compat/otel/fetch-span.ts +77 -0
- package/src/compat/otel/tracer.ts +944 -0
- package/src/compat/pages/client-plugin.ts +108 -0
- package/src/compat/pages/index.ts +527 -0
- package/src/compat/pages/router-state.ts +94 -0
- package/src/compat/ppr/io.ts +38 -0
- package/src/compat/ppr/missing-root-params.ts +105 -0
- package/src/compat/ppr/root-params-scan.ts +164 -0
- package/src/compat/ppr/root-params-transform.ts +75 -0
- package/src/compat/ppr/root-params.ts +129 -0
- package/src/compat/ppr/segment-config-incompat.ts +34 -0
- package/src/compat/protocol.ts +202 -0
- package/src/compat/react/client.ts +59 -0
- package/src/compat/react/compiler-runtime.ts +60 -0
- package/src/compat/react/dom-client.ts +115 -0
- package/src/compat/react/dom-react-server.ts +20 -0
- package/src/compat/react/dom-server.ts +40 -0
- package/src/compat/react/dom.ts +154 -0
- package/src/compat/react/preact.ts +522 -0
- package/src/compat/react/react-server.ts +84 -0
- package/src/compat/react/router-shim.ts +26 -0
- package/src/compat/react/server-component-use.ts +48 -0
- package/src/compat/react/server-inserted-html.ts +87 -0
- package/src/compat/react/server.ts +156 -0
- package/src/compat/react/view-transition.ts +60 -0
- package/src/compat/register/actions.ts +875 -0
- package/src/compat/register/boot.ts +141 -0
- package/src/compat/register/build-tier.ts +11 -0
- package/src/compat/register/build.ts +182 -0
- package/src/compat/register/bundler.ts +587 -0
- package/src/compat/register/cache.ts +85 -0
- package/src/compat/register/client-errors.ts +18 -0
- package/src/compat/register/config.ts +17 -0
- package/src/compat/register/css-extras.ts +120 -0
- package/src/compat/register/edge-runtime.ts +6 -0
- package/src/compat/register/errors.ts +46 -0
- package/src/compat/register/export.ts +23 -0
- package/src/compat/register/font.ts +36 -0
- package/src/compat/register/hooks.ts +34 -0
- package/src/compat/register/image.ts +133 -0
- package/src/compat/register/index.ts +111 -0
- package/src/compat/register/instrumentation-client.ts +35 -0
- package/src/compat/register/lifecycle.ts +86 -0
- package/src/compat/register/mdx.ts +48 -0
- package/src/compat/register/middleware.ts +36 -0
- package/src/compat/register/misc.ts +44 -0
- package/src/compat/register/otel.ts +288 -0
- package/src/compat/register/pages-api.ts +473 -0
- package/src/compat/register/ppr.ts +56 -0
- package/src/compat/register/protocol.ts +57 -0
- package/src/compat/register/proxy.ts +127 -0
- package/src/compat/register/render.ts +268 -0
- package/src/compat/register/routing.ts +410 -0
- package/src/compat/register/segment.ts +1903 -0
- package/src/compat/register/static-image.ts +21 -0
- package/src/compat/register/typed-routes.ts +35 -0
- package/src/compat/register/usecache.ts +131 -0
- package/src/compat/register/validation.ts +56 -0
- package/src/compat/segment/loading-boundary.ts +113 -0
- package/src/compat/segment/page-slot.ts +200 -0
- package/src/compat/segment/tree.ts +481 -0
- package/src/compat/segment/vary-key.ts +102 -0
- package/src/compat/segment/vary-params.ts +551 -0
- package/src/compat/static-params.ts +33 -0
- package/src/compat/tsconfig-defaults.ts +301 -0
- package/src/compat/typecheck/index.ts +1481 -0
- package/src/compat/typecheck/worker.ts +26 -0
- package/src/compat/typed-routes/index.ts +92 -0
- package/src/compat/typed-routes/manifest.ts +356 -0
- package/src/compat/typed-routes/typegen.ts +566 -0
- package/src/compat/validation/errors.ts +159 -0
- package/src/compat/validation/index.ts +1770 -0
- package/src/compat/validation/prerender-diagnostics.ts +1508 -0
- package/src/compat-bootstrap.ts +67 -0
- package/src/config.ts +218 -0
- package/src/css/build.ts +697 -0
- package/src/css/index.ts +2 -0
- package/src/css/postcss.ts +236 -0
- package/src/css/worker.ts +34 -0
- package/src/dev/client-actions.ts +35 -0
- package/src/dev/client-chunk-store.ts +92 -0
- package/src/dev/client-key-cache.ts +178 -0
- package/src/dev/global-css-cache.ts +212 -0
- package/src/dev/imports.ts +2430 -0
- package/src/dev/module-cache.ts +721 -0
- package/src/dev/module-generations.ts +38 -0
- package/src/dev/module-transform.ts +188 -0
- package/src/dev/node-module-bundle-cache.ts +63 -0
- package/src/dev/restart-cache.ts +10 -0
- package/src/dev/route-bundle-key-cache.ts +154 -0
- package/src/dev/route-facts-cache.ts +223 -0
- package/src/dev/server.ts +1710 -0
- package/src/dynamic/source.ts +307 -0
- package/src/dynamic/tree-shake.ts +262 -0
- package/src/env.ts +92 -0
- package/src/extensions.ts +1898 -0
- package/src/index.ts +34 -0
- package/src/internal.ts +43 -0
- package/src/islands/boundary-error.ts +8 -0
- package/src/islands/static-children.ts +37 -0
- package/src/islands/static-slots.ts +106 -0
- package/src/ppr-postpone.ts +24 -0
- package/src/ppr.ts +784 -0
- package/src/proxy.ts +752 -0
- package/src/render/hooks.ts +384 -0
- package/src/render/index.ts +1 -0
- package/src/render/island-context.ts +47 -0
- package/src/render/metadata.ts +857 -0
- package/src/render/renderer.ts +7391 -0
- package/src/render/resource-hints.ts +44 -0
- package/src/render/slots.tsx +679 -0
- package/src/request/context.ts +396 -0
- package/src/resolve/engine.ts +219 -0
- package/src/resolve/imports.ts +1104 -0
- package/src/resolve/scan-facts.ts +474 -0
- package/src/resolve/source-text.ts +86 -0
- package/src/routing/forwarded.ts +41 -0
- package/src/routing/handler.ts +271 -0
- package/src/routing/href.ts +203 -0
- package/src/routing/metadata.ts +1018 -0
- package/src/routing/request-runtime.ts +43 -0
- package/src/routing/routes.ts +2560 -0
- package/src/routing/slots.ts +432 -0
- package/src/runtime/server.ts +3453 -0
- package/src/runtime/vendor.ts +1160 -0
- package/src/style-modules.d.ts +9 -0
- package/src/typegen.ts +151 -0
- package/src/types.ts +725 -0
- package/src/utils/ansi.ts +9 -0
- package/src/utils/content-type.ts +31 -0
- package/src/utils/decode.ts +7 -0
- package/src/utils/dev-profile.ts +31 -0
- package/src/utils/error-log.ts +29 -0
- package/src/utils/fs-cache.ts +31 -0
- package/src/utils/fs.ts +119 -0
- package/src/utils/html.ts +46 -0
- package/src/utils/serialize.ts +378 -0
- package/src/utils/source.ts +35 -0
- package/src/utils/verbose.ts +39 -0
- package/tsconfig.json +10 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// useServerInsertedHTML (COMPAT - CSS-in-JS SSR).
|
|
2
|
+
//
|
|
3
|
+
// Next exposes `useServerInsertedHTML(callback)`, re-exported from `next/navigation`. CSS-in-JS
|
|
4
|
+
// libraries call it during the server render to register the collected `<style>` markup that must land
|
|
5
|
+
// in the streamed document. React's upstream impl flushes each callback's JSX at every stream boundary;
|
|
6
|
+
// pnext retains callbacks in the request work unit and invokes them for the initial head and each
|
|
7
|
+
// streamed continuation.
|
|
8
|
+
//
|
|
9
|
+
// Server: push the callback. Client: no-op - the hook exists so a shared 'use client' registry component
|
|
10
|
+
// compiles and hydrates, but there is nothing to insert on the client, since the styles are already in
|
|
11
|
+
// the SSR HTML and the library takes over locally.
|
|
12
|
+
//
|
|
13
|
+
// renderServerInsertedHTML() renders each callback's vnode to a string and concatenates it. CSS-in-JS
|
|
14
|
+
// registries clear their emitted rules per call.
|
|
15
|
+
|
|
16
|
+
import { h, Fragment } from 'preact';
|
|
17
|
+
import type { ComponentChildren, VNode } from 'preact';
|
|
18
|
+
import renderToString from 'preact-render-to-string';
|
|
19
|
+
|
|
20
|
+
type InsertCallback = () => ComponentChildren;
|
|
21
|
+
|
|
22
|
+
interface Holder {
|
|
23
|
+
__PNEXT_SERVER_INSERTED_HTML__?: InsertCallback[];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const collectorKey = Symbol.for('pnext.serverInsertedHTML');
|
|
27
|
+
let getRequestScope: (() => Record<PropertyKey, unknown> | undefined) | undefined;
|
|
28
|
+
|
|
29
|
+
export function setServerInsertedHTMLScope(
|
|
30
|
+
getter: () => Record<PropertyKey, unknown> | undefined,
|
|
31
|
+
): void {
|
|
32
|
+
getRequestScope = getter;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function collector(): { callbacks: InsertCallback[]; scoped: boolean } {
|
|
36
|
+
const scope = getRequestScope?.();
|
|
37
|
+
if (scope) {
|
|
38
|
+
return {
|
|
39
|
+
callbacks: (scope[collectorKey] ??= []) as InsertCallback[],
|
|
40
|
+
scoped: true,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const holder = globalThis as Holder;
|
|
44
|
+
holder.__PNEXT_SERVER_INSERTED_HTML__ ??= [];
|
|
45
|
+
return { callbacks: holder.__PNEXT_SERVER_INSERTED_HTML__, scoped: false };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const isServer = typeof document === 'undefined';
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Register HTML to be inserted into the server-rendered document. The callback returns JSX (typically
|
|
52
|
+
* one or more `<style>` elements) evaluated when the document is assembled. A client no-op - the SSR HTML
|
|
53
|
+
* already carries the styles and the CSS-in-JS runtime rehydrates them itself.
|
|
54
|
+
*/
|
|
55
|
+
export function useServerInsertedHTML(callback: InsertCallback): void {
|
|
56
|
+
if (!isServer) return;
|
|
57
|
+
collector().callbacks.push(callback);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Render registered callbacks to HTML. Request-scoped callbacks remain active
|
|
62
|
+
* for later stream flushes; the non-request fallback is cleared after one use.
|
|
63
|
+
*/
|
|
64
|
+
export function renderServerInsertedHTML(): string {
|
|
65
|
+
const { callbacks, scoped } = collector();
|
|
66
|
+
if (!scoped) (globalThis as Holder).__PNEXT_SERVER_INSERTED_HTML__ = [];
|
|
67
|
+
if (callbacks.length === 0) return '';
|
|
68
|
+
|
|
69
|
+
const parts: string[] = [];
|
|
70
|
+
for (const callback of callbacks) {
|
|
71
|
+
try {
|
|
72
|
+
const node = callback();
|
|
73
|
+
if (node == null || node === false) continue;
|
|
74
|
+
parts.push(renderToString(h(Fragment, null, node as VNode)));
|
|
75
|
+
} catch {
|
|
76
|
+
// A registry that throws during flush is skipped, not fatal.
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return parts.join('');
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Discard any registered callbacks without rendering (error / reset paths). */
|
|
83
|
+
export function clearServerInsertedHTML(): void {
|
|
84
|
+
const scope = getRequestScope?.();
|
|
85
|
+
if (scope) scope[collectorKey] = [];
|
|
86
|
+
else (globalThis as Holder).__PNEXT_SERVER_INSERTED_HTML__ = [];
|
|
87
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import ReactCompat from './preact';
|
|
2
|
+
import { cache as serverCache } from '../../api/cache';
|
|
3
|
+
import { currentPrerenderScope } from '../../ppr';
|
|
4
|
+
import { currentCacheSignal } from '../../cache/context';
|
|
5
|
+
|
|
6
|
+
export {
|
|
7
|
+
Children,
|
|
8
|
+
Component,
|
|
9
|
+
Fragment,
|
|
10
|
+
PureComponent,
|
|
11
|
+
StrictMode,
|
|
12
|
+
Suspense,
|
|
13
|
+
SuspenseList,
|
|
14
|
+
cloneElement,
|
|
15
|
+
createContext,
|
|
16
|
+
createElement,
|
|
17
|
+
createFactory,
|
|
18
|
+
createPortal,
|
|
19
|
+
createRef,
|
|
20
|
+
findDOMNode,
|
|
21
|
+
flushSync,
|
|
22
|
+
forwardRef,
|
|
23
|
+
hydrate,
|
|
24
|
+
isFragment,
|
|
25
|
+
isMemo,
|
|
26
|
+
isValidElement,
|
|
27
|
+
lazy,
|
|
28
|
+
memo,
|
|
29
|
+
render,
|
|
30
|
+
startTransition,
|
|
31
|
+
unmountComponentAtNode,
|
|
32
|
+
unstable_batchedUpdates,
|
|
33
|
+
useId,
|
|
34
|
+
use,
|
|
35
|
+
useActionState,
|
|
36
|
+
useOptimistic,
|
|
37
|
+
version,
|
|
38
|
+
} from './preact';
|
|
39
|
+
export { cache } from '../../api/cache';
|
|
40
|
+
import { ViewTransition, addTransitionType } from './view-transition';
|
|
41
|
+
export { ViewTransition, addTransitionType };
|
|
42
|
+
|
|
43
|
+
type EffectHook = typeof ReactCompat.useEffect;
|
|
44
|
+
type StateSetter<State> = (value: State | ((previous: State) => State)) => void;
|
|
45
|
+
type Reducer<Action> = (action: Action) => void;
|
|
46
|
+
|
|
47
|
+
const useEffect: EffectHook = () => undefined;
|
|
48
|
+
const useLayoutEffect: EffectHook = () => undefined;
|
|
49
|
+
const useInsertionEffect: EffectHook = () => undefined;
|
|
50
|
+
const useDebugValue: typeof ReactCompat.useDebugValue = () => undefined;
|
|
51
|
+
const useImperativeHandle: typeof ReactCompat.useImperativeHandle = () => undefined;
|
|
52
|
+
|
|
53
|
+
function useState<State = undefined>(
|
|
54
|
+
initialState?: State | (() => State),
|
|
55
|
+
): [State | undefined, StateSetter<State | undefined>] {
|
|
56
|
+
return [
|
|
57
|
+
typeof initialState === 'function' ? (initialState as () => State)() : initialState,
|
|
58
|
+
() => undefined,
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function useReducer<State, Action>(
|
|
63
|
+
reducer: (state: State, action: Action) => State,
|
|
64
|
+
initialArg: State,
|
|
65
|
+
init?: (value: State) => State,
|
|
66
|
+
): [State, Reducer<Action>] {
|
|
67
|
+
void reducer;
|
|
68
|
+
return [init ? init(initialArg) : initialArg, () => undefined];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function useRef<Value = undefined>(initialValue?: Value): { current: Value | undefined } {
|
|
72
|
+
return { current: initialValue };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function useMemo<Value>(factory: () => Value): Value {
|
|
76
|
+
return factory();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type -- must mirror preact's `<T extends Function>` useCallback signature
|
|
80
|
+
function useCallback<Callback extends Function>(callback: Callback): Callback {
|
|
81
|
+
return callback;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function useDeferredValue<Value>(value: Value): Value {
|
|
85
|
+
return value;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function useTransition(): [false, (callback: () => void) => void] {
|
|
89
|
+
return [false, callback => callback()];
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function useSyncExternalStore<Snapshot>(
|
|
93
|
+
_subscribe: (onStoreChange: () => void) => () => void,
|
|
94
|
+
getSnapshot: () => Snapshot,
|
|
95
|
+
getServerSnapshot?: () => Snapshot,
|
|
96
|
+
): Snapshot {
|
|
97
|
+
return getServerSnapshot ? getServerSnapshot() : getSnapshot();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function useContext<Value>(
|
|
101
|
+
context: Parameters<typeof ReactCompat.useContext<Value>>[0],
|
|
102
|
+
): Value {
|
|
103
|
+
return ReactCompat.useContext(context);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Re-export the server stubs as named exports too. Client-component libraries
|
|
107
|
+
// compiled to CJS (e.g. @next/third-parties) do `const react = require('react')`
|
|
108
|
+
// then `react.useEffect(...)`; when their bundle aliases `react` to this module
|
|
109
|
+
// under the react-server condition, esbuild's `__toCommonJS` only surfaces named
|
|
110
|
+
// exports, so hooks that live solely on the default export read back undefined.
|
|
111
|
+
export {
|
|
112
|
+
useEffect,
|
|
113
|
+
useLayoutEffect,
|
|
114
|
+
useInsertionEffect,
|
|
115
|
+
useDebugValue,
|
|
116
|
+
useImperativeHandle,
|
|
117
|
+
useState,
|
|
118
|
+
useReducer,
|
|
119
|
+
useRef,
|
|
120
|
+
useMemo,
|
|
121
|
+
useCallback,
|
|
122
|
+
useDeferredValue,
|
|
123
|
+
useTransition,
|
|
124
|
+
useSyncExternalStore,
|
|
125
|
+
useContext,
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export function cacheSignal(): AbortSignal | null {
|
|
129
|
+
const prerender = currentPrerenderScope();
|
|
130
|
+
if (prerender) return prerender.signal;
|
|
131
|
+
return currentCacheSignal();
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const ReactServer = { ...ReactCompat } as typeof ReactCompat & {
|
|
135
|
+
cache: typeof serverCache;
|
|
136
|
+
cacheSignal: typeof cacheSignal;
|
|
137
|
+
};
|
|
138
|
+
delete (ReactServer as { useState?: unknown }).useState;
|
|
139
|
+
ReactServer.cache = serverCache;
|
|
140
|
+
ReactServer.cacheSignal = cacheSignal;
|
|
141
|
+
ReactServer.useEffect = useEffect;
|
|
142
|
+
ReactServer.useLayoutEffect = useLayoutEffect;
|
|
143
|
+
ReactServer.useInsertionEffect = useInsertionEffect;
|
|
144
|
+
ReactServer.useDebugValue = useDebugValue;
|
|
145
|
+
ReactServer.useImperativeHandle = useImperativeHandle;
|
|
146
|
+
ReactServer.useReducer = useReducer;
|
|
147
|
+
ReactServer.useRef = useRef;
|
|
148
|
+
ReactServer.useMemo = useMemo;
|
|
149
|
+
ReactServer.useCallback = useCallback;
|
|
150
|
+
ReactServer.useDeferredValue = useDeferredValue;
|
|
151
|
+
ReactServer.useTransition = useTransition;
|
|
152
|
+
ReactServer.useSyncExternalStore = useSyncExternalStore;
|
|
153
|
+
ReactServer.useContext = useContext as typeof ReactCompat.useContext;
|
|
154
|
+
Object.assign(ReactServer, { ViewTransition, addTransitionType });
|
|
155
|
+
|
|
156
|
+
export default ReactServer;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// React `<ViewTransition>` + `addTransitionType` shim (COMPAT).
|
|
2
|
+
//
|
|
3
|
+
// React's experimental View Transitions API exports a `ViewTransition` component and
|
|
4
|
+
// `addTransitionType` from the `react` entry. Apps import them directly from 'react', so without these
|
|
5
|
+
// exports every render of such a page throws `type is invalid` and the route 500s.
|
|
6
|
+
//
|
|
7
|
+
// React's ViewTransition renders NO DOM of its own - it annotates its single host child so the browser's
|
|
8
|
+
// View Transition API can pair it across an update. Preact has no scheduler hook to drive
|
|
9
|
+
// `document.startViewTransition`, so this shim keeps the same DOM shape (pure passthrough) and records
|
|
10
|
+
// the declared names/types; the router applies the actual transition when the browser supports it.
|
|
11
|
+
|
|
12
|
+
import { Fragment, h, type ComponentChildren, type VNode } from 'preact';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The class/name a ViewTransition applies for a given trigger. React accepts a
|
|
16
|
+
* string (a single view-transition-class) or a record keyed by transition type.
|
|
17
|
+
*/
|
|
18
|
+
export type ViewTransitionClass = string | Record<string, string>;
|
|
19
|
+
|
|
20
|
+
export interface ViewTransitionProps {
|
|
21
|
+
/** view-transition-name for the child; 'auto' lets React derive one. */
|
|
22
|
+
name?: string;
|
|
23
|
+
/** Fallback class applied when no more specific trigger prop matches. */
|
|
24
|
+
default?: ViewTransitionClass;
|
|
25
|
+
enter?: ViewTransitionClass;
|
|
26
|
+
exit?: ViewTransitionClass;
|
|
27
|
+
update?: ViewTransitionClass;
|
|
28
|
+
share?: ViewTransitionClass;
|
|
29
|
+
onEnter?: (element: Element, types: string[]) => void;
|
|
30
|
+
onExit?: (element: Element, types: string[]) => void;
|
|
31
|
+
onUpdate?: (element: Element, types: string[]) => void;
|
|
32
|
+
onShare?: (element: Element, types: string[]) => void;
|
|
33
|
+
ref?: unknown;
|
|
34
|
+
children?: ComponentChildren;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function ViewTransition({ children }: ViewTransitionProps): VNode {
|
|
38
|
+
// Pure passthrough: React's ViewTransition adds no element to the tree, and
|
|
39
|
+
// any wrapper here would change every consuming app's DOM/CSS selectors.
|
|
40
|
+
return h(Fragment, null, children);
|
|
41
|
+
}
|
|
42
|
+
ViewTransition.displayName = 'ViewTransition';
|
|
43
|
+
|
|
44
|
+
// Transition types declared during the current update (React clears them once
|
|
45
|
+
// the transition commits). `startViewTransition({ types })` consumes them.
|
|
46
|
+
const pendingTransitionTypes: string[] = [];
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Declare a view-transition type for the in-flight transition, so
|
|
50
|
+
* `:active-view-transition-type(...)` CSS rules match while it runs.
|
|
51
|
+
*/
|
|
52
|
+
export function addTransitionType(type: string): void {
|
|
53
|
+
if (typeof type !== 'string' || pendingTransitionTypes.includes(type)) return;
|
|
54
|
+
pendingTransitionTypes.push(type);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Drain the declared types (the navigation that starts the transition owns them). */
|
|
58
|
+
export function takeTransitionTypes(): string[] {
|
|
59
|
+
return pendingTransitionTypes.splice(0, pendingTransitionTypes.length);
|
|
60
|
+
}
|