vinext 0.0.0 → 0.0.2
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/LICENSE +21 -0
- package/README.md +1 -0
- package/dist/build/static-export.d.ts +78 -0
- package/dist/build/static-export.d.ts.map +1 -0
- package/dist/build/static-export.js +553 -0
- package/dist/build/static-export.js.map +1 -0
- package/dist/check.d.ts +52 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +483 -0
- package/dist/check.js.map +1 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +565 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/entry.d.ts +2 -0
- package/dist/client/entry.d.ts.map +1 -0
- package/dist/client/entry.js +85 -0
- package/dist/client/entry.js.map +1 -0
- package/dist/cloudflare/index.d.ts +8 -0
- package/dist/cloudflare/index.d.ts.map +1 -0
- package/dist/cloudflare/index.js +8 -0
- package/dist/cloudflare/index.js.map +1 -0
- package/dist/cloudflare/kv-cache-handler.d.ts +68 -0
- package/dist/cloudflare/kv-cache-handler.d.ts.map +1 -0
- package/dist/cloudflare/kv-cache-handler.js +304 -0
- package/dist/cloudflare/kv-cache-handler.js.map +1 -0
- package/dist/cloudflare/tpr.d.ts +78 -0
- package/dist/cloudflare/tpr.d.ts.map +1 -0
- package/dist/cloudflare/tpr.js +672 -0
- package/dist/cloudflare/tpr.js.map +1 -0
- package/dist/config/config-matchers.d.ts +106 -0
- package/dist/config/config-matchers.d.ts.map +1 -0
- package/dist/config/config-matchers.js +499 -0
- package/dist/config/config-matchers.js.map +1 -0
- package/dist/config/next-config.d.ts +153 -0
- package/dist/config/next-config.d.ts.map +1 -0
- package/dist/config/next-config.js +274 -0
- package/dist/config/next-config.js.map +1 -0
- package/dist/deploy.d.ts +87 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +644 -0
- package/dist/deploy.js.map +1 -0
- package/dist/index.d.ts +156 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3296 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +55 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +201 -0
- package/dist/init.js.map +1 -0
- package/dist/routing/app-router.d.ts +96 -0
- package/dist/routing/app-router.d.ts.map +1 -0
- package/dist/routing/app-router.js +815 -0
- package/dist/routing/app-router.js.map +1 -0
- package/dist/routing/pages-router.d.ts +52 -0
- package/dist/routing/pages-router.d.ts.map +1 -0
- package/dist/routing/pages-router.js +239 -0
- package/dist/routing/pages-router.js.map +1 -0
- package/dist/server/api-handler.d.ts +18 -0
- package/dist/server/api-handler.d.ts.map +1 -0
- package/dist/server/api-handler.js +169 -0
- package/dist/server/api-handler.js.map +1 -0
- package/dist/server/app-dev-server.d.ts +42 -0
- package/dist/server/app-dev-server.d.ts.map +1 -0
- package/dist/server/app-dev-server.js +2718 -0
- package/dist/server/app-dev-server.js.map +1 -0
- package/dist/server/app-router-entry.d.ts +18 -0
- package/dist/server/app-router-entry.d.ts.map +1 -0
- package/dist/server/app-router-entry.js +34 -0
- package/dist/server/app-router-entry.js.map +1 -0
- package/dist/server/dev-server.d.ts +40 -0
- package/dist/server/dev-server.d.ts.map +1 -0
- package/dist/server/dev-server.js +758 -0
- package/dist/server/dev-server.js.map +1 -0
- package/dist/server/html.d.ts +22 -0
- package/dist/server/html.d.ts.map +1 -0
- package/dist/server/html.js +29 -0
- package/dist/server/html.js.map +1 -0
- package/dist/server/image-optimization.d.ts +56 -0
- package/dist/server/image-optimization.d.ts.map +1 -0
- package/dist/server/image-optimization.js +103 -0
- package/dist/server/image-optimization.js.map +1 -0
- package/dist/server/instrumentation.d.ts +68 -0
- package/dist/server/instrumentation.d.ts.map +1 -0
- package/dist/server/instrumentation.js +90 -0
- package/dist/server/instrumentation.js.map +1 -0
- package/dist/server/isr-cache.d.ts +61 -0
- package/dist/server/isr-cache.d.ts.map +1 -0
- package/dist/server/isr-cache.js +134 -0
- package/dist/server/isr-cache.js.map +1 -0
- package/dist/server/metadata-routes.d.ts +103 -0
- package/dist/server/metadata-routes.d.ts.map +1 -0
- package/dist/server/metadata-routes.js +270 -0
- package/dist/server/metadata-routes.js.map +1 -0
- package/dist/server/middleware.d.ts +77 -0
- package/dist/server/middleware.d.ts.map +1 -0
- package/dist/server/middleware.js +228 -0
- package/dist/server/middleware.js.map +1 -0
- package/dist/server/prod-server.d.ts +78 -0
- package/dist/server/prod-server.d.ts.map +1 -0
- package/dist/server/prod-server.js +712 -0
- package/dist/server/prod-server.js.map +1 -0
- package/dist/shims/amp.d.ts +17 -0
- package/dist/shims/amp.d.ts.map +1 -0
- package/dist/shims/amp.js +21 -0
- package/dist/shims/amp.js.map +1 -0
- package/dist/shims/app.d.ts +12 -0
- package/dist/shims/app.d.ts.map +1 -0
- package/dist/shims/app.js +2 -0
- package/dist/shims/app.js.map +1 -0
- package/dist/shims/cache-runtime.d.ts +68 -0
- package/dist/shims/cache-runtime.d.ts.map +1 -0
- package/dist/shims/cache-runtime.js +437 -0
- package/dist/shims/cache-runtime.js.map +1 -0
- package/dist/shims/cache.d.ts +243 -0
- package/dist/shims/cache.d.ts.map +1 -0
- package/dist/shims/cache.js +415 -0
- package/dist/shims/cache.js.map +1 -0
- package/dist/shims/client-only.d.ts +18 -0
- package/dist/shims/client-only.d.ts.map +1 -0
- package/dist/shims/client-only.js +18 -0
- package/dist/shims/client-only.js.map +1 -0
- package/dist/shims/config.d.ts +27 -0
- package/dist/shims/config.d.ts.map +1 -0
- package/dist/shims/config.js +30 -0
- package/dist/shims/config.js.map +1 -0
- package/dist/shims/constants.d.ts +13 -0
- package/dist/shims/constants.d.ts.map +1 -0
- package/dist/shims/constants.js +13 -0
- package/dist/shims/constants.js.map +1 -0
- package/dist/shims/document.d.ts +33 -0
- package/dist/shims/document.d.ts.map +1 -0
- package/dist/shims/document.js +32 -0
- package/dist/shims/document.js.map +1 -0
- package/dist/shims/dynamic.d.ts +33 -0
- package/dist/shims/dynamic.d.ts.map +1 -0
- package/dist/shims/dynamic.js +149 -0
- package/dist/shims/dynamic.js.map +1 -0
- package/dist/shims/error-boundary.d.ts +33 -0
- package/dist/shims/error-boundary.d.ts.map +1 -0
- package/dist/shims/error-boundary.js +88 -0
- package/dist/shims/error-boundary.js.map +1 -0
- package/dist/shims/error.d.ts +16 -0
- package/dist/shims/error.d.ts.map +1 -0
- package/dist/shims/error.js +45 -0
- package/dist/shims/error.js.map +1 -0
- package/dist/shims/fetch-cache.d.ts +61 -0
- package/dist/shims/fetch-cache.d.ts.map +1 -0
- package/dist/shims/fetch-cache.js +307 -0
- package/dist/shims/fetch-cache.js.map +1 -0
- package/dist/shims/font-google.d.ts +122 -0
- package/dist/shims/font-google.d.ts.map +1 -0
- package/dist/shims/font-google.js +387 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +61 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +303 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/form.d.ts +30 -0
- package/dist/shims/form.d.ts.map +1 -0
- package/dist/shims/form.js +78 -0
- package/dist/shims/form.js.map +1 -0
- package/dist/shims/head-state.d.ts +11 -0
- package/dist/shims/head-state.d.ts.map +1 -0
- package/dist/shims/head-state.js +47 -0
- package/dist/shims/head-state.js.map +1 -0
- package/dist/shims/head.d.ts +28 -0
- package/dist/shims/head.d.ts.map +1 -0
- package/dist/shims/head.js +148 -0
- package/dist/shims/head.js.map +1 -0
- package/dist/shims/headers.d.ts +150 -0
- package/dist/shims/headers.d.ts.map +1 -0
- package/dist/shims/headers.js +412 -0
- package/dist/shims/headers.js.map +1 -0
- package/dist/shims/image-config.d.ts +30 -0
- package/dist/shims/image-config.d.ts.map +1 -0
- package/dist/shims/image-config.js +91 -0
- package/dist/shims/image-config.js.map +1 -0
- package/dist/shims/image.d.ts +63 -0
- package/dist/shims/image.d.ts.map +1 -0
- package/dist/shims/image.js +284 -0
- package/dist/shims/image.js.map +1 -0
- package/dist/shims/internal/api-utils.d.ts +12 -0
- package/dist/shims/internal/api-utils.d.ts.map +1 -0
- package/dist/shims/internal/api-utils.js +7 -0
- package/dist/shims/internal/api-utils.js.map +1 -0
- package/dist/shims/internal/app-router-context.d.ts +21 -0
- package/dist/shims/internal/app-router-context.d.ts.map +1 -0
- package/dist/shims/internal/app-router-context.js +15 -0
- package/dist/shims/internal/app-router-context.js.map +1 -0
- package/dist/shims/internal/cookies.d.ts +9 -0
- package/dist/shims/internal/cookies.d.ts.map +1 -0
- package/dist/shims/internal/cookies.js +9 -0
- package/dist/shims/internal/cookies.js.map +1 -0
- package/dist/shims/internal/router-context.d.ts +2 -0
- package/dist/shims/internal/router-context.d.ts.map +1 -0
- package/dist/shims/internal/router-context.js +9 -0
- package/dist/shims/internal/router-context.js.map +1 -0
- package/dist/shims/internal/utils.d.ts +48 -0
- package/dist/shims/internal/utils.d.ts.map +1 -0
- package/dist/shims/internal/utils.js +35 -0
- package/dist/shims/internal/utils.js.map +1 -0
- package/dist/shims/internal/work-unit-async-storage.d.ts +12 -0
- package/dist/shims/internal/work-unit-async-storage.d.ts.map +1 -0
- package/dist/shims/internal/work-unit-async-storage.js +13 -0
- package/dist/shims/internal/work-unit-async-storage.js.map +1 -0
- package/dist/shims/layout-segment-context.d.ts +21 -0
- package/dist/shims/layout-segment-context.d.ts.map +1 -0
- package/dist/shims/layout-segment-context.js +27 -0
- package/dist/shims/layout-segment-context.js.map +1 -0
- package/dist/shims/legacy-image.d.ts +52 -0
- package/dist/shims/legacy-image.d.ts.map +1 -0
- package/dist/shims/legacy-image.js +46 -0
- package/dist/shims/legacy-image.js.map +1 -0
- package/dist/shims/link.d.ts +48 -0
- package/dist/shims/link.d.ts.map +1 -0
- package/dist/shims/link.js +395 -0
- package/dist/shims/link.js.map +1 -0
- package/dist/shims/metadata.d.ts +184 -0
- package/dist/shims/metadata.d.ts.map +1 -0
- package/dist/shims/metadata.js +472 -0
- package/dist/shims/metadata.js.map +1 -0
- package/dist/shims/navigation-state.d.ts +14 -0
- package/dist/shims/navigation-state.d.ts.map +1 -0
- package/dist/shims/navigation-state.js +77 -0
- package/dist/shims/navigation-state.js.map +1 -0
- package/dist/shims/navigation.d.ts +201 -0
- package/dist/shims/navigation.d.ts.map +1 -0
- package/dist/shims/navigation.js +672 -0
- package/dist/shims/navigation.js.map +1 -0
- package/dist/shims/og.d.ts +20 -0
- package/dist/shims/og.d.ts.map +1 -0
- package/dist/shims/og.js +19 -0
- package/dist/shims/og.js.map +1 -0
- package/dist/shims/router-state.d.ts +11 -0
- package/dist/shims/router-state.d.ts.map +1 -0
- package/dist/shims/router-state.js +56 -0
- package/dist/shims/router-state.js.map +1 -0
- package/dist/shims/router.d.ts +103 -0
- package/dist/shims/router.d.ts.map +1 -0
- package/dist/shims/router.js +536 -0
- package/dist/shims/router.js.map +1 -0
- package/dist/shims/script.d.ts +58 -0
- package/dist/shims/script.d.ts.map +1 -0
- package/dist/shims/script.js +163 -0
- package/dist/shims/script.js.map +1 -0
- package/dist/shims/server-only.d.ts +19 -0
- package/dist/shims/server-only.d.ts.map +1 -0
- package/dist/shims/server-only.js +19 -0
- package/dist/shims/server-only.js.map +1 -0
- package/dist/shims/server.d.ts +178 -0
- package/dist/shims/server.d.ts.map +1 -0
- package/dist/shims/server.js +377 -0
- package/dist/shims/server.js.map +1 -0
- package/dist/shims/web-vitals.d.ts +24 -0
- package/dist/shims/web-vitals.d.ts.map +1 -0
- package/dist/shims/web-vitals.js +17 -0
- package/dist/shims/web-vitals.js.map +1 -0
- package/dist/utils/hash.d.ts +6 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +20 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/project.d.ts +36 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +112 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/query.d.ts +10 -0
- package/dist/utils/query.d.ts.map +1 -0
- package/dist/utils/query.js +27 -0
- package/dist/utils/query.js.map +1 -0
- package/package.json +65 -7
- package/index.js +0 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-only navigation state backed by AsyncLocalStorage.
|
|
3
|
+
*
|
|
4
|
+
* This module provides request-scoped isolation for navigation context
|
|
5
|
+
* and useServerInsertedHTML callbacks. Without ALS, concurrent requests
|
|
6
|
+
* on Cloudflare Workers would share module-level state and leak data
|
|
7
|
+
* (pathnames, params, CSS-in-JS styles) between requests.
|
|
8
|
+
*
|
|
9
|
+
* This module is server-only — it imports node:async_hooks and must NOT
|
|
10
|
+
* be bundled for the browser. The dual-environment navigation.ts shim
|
|
11
|
+
* uses a registration pattern so it works in both environments.
|
|
12
|
+
*/
|
|
13
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
14
|
+
import { _registerStateAccessors, } from "./navigation.js";
|
|
15
|
+
const _ALS_KEY = Symbol.for("vinext.navigation.als");
|
|
16
|
+
const _FALLBACK_KEY = Symbol.for("vinext.navigation.fallback");
|
|
17
|
+
const _g = globalThis;
|
|
18
|
+
const _als = (_g[_ALS_KEY] ??= new AsyncLocalStorage());
|
|
19
|
+
const _fallbackState = (_g[_FALLBACK_KEY] ??= {
|
|
20
|
+
serverContext: null,
|
|
21
|
+
serverInsertedHTMLCallbacks: [],
|
|
22
|
+
});
|
|
23
|
+
function _enterWith(state) {
|
|
24
|
+
const enterWith = _als.enterWith;
|
|
25
|
+
if (typeof enterWith === "function") {
|
|
26
|
+
try {
|
|
27
|
+
enterWith.call(_als, state);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Fall through to best-effort fallback.
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
_fallbackState.serverContext = state.serverContext;
|
|
35
|
+
_fallbackState.serverInsertedHTMLCallbacks = state.serverInsertedHTMLCallbacks;
|
|
36
|
+
}
|
|
37
|
+
function _getState() {
|
|
38
|
+
return _als.getStore() ?? _fallbackState;
|
|
39
|
+
}
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Register ALS-backed accessors into navigation.ts
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
_registerStateAccessors({
|
|
44
|
+
getServerContext() {
|
|
45
|
+
return _getState().serverContext;
|
|
46
|
+
},
|
|
47
|
+
setServerContext(ctx) {
|
|
48
|
+
if (ctx !== null) {
|
|
49
|
+
const existing = _als.getStore();
|
|
50
|
+
_enterWith({
|
|
51
|
+
serverContext: ctx,
|
|
52
|
+
serverInsertedHTMLCallbacks: existing?.serverInsertedHTMLCallbacks
|
|
53
|
+
?? _fallbackState.serverInsertedHTMLCallbacks
|
|
54
|
+
?? [],
|
|
55
|
+
});
|
|
56
|
+
_fallbackState.serverContext = ctx;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Cleanup: clear context in both ALS store and fallback to prevent leaks.
|
|
60
|
+
const state = _als.getStore();
|
|
61
|
+
if (state) {
|
|
62
|
+
state.serverContext = null;
|
|
63
|
+
}
|
|
64
|
+
_fallbackState.serverContext = null;
|
|
65
|
+
},
|
|
66
|
+
getInsertedHTMLCallbacks() {
|
|
67
|
+
return _getState().serverInsertedHTMLCallbacks;
|
|
68
|
+
},
|
|
69
|
+
clearInsertedHTMLCallbacks() {
|
|
70
|
+
const state = _als.getStore();
|
|
71
|
+
if (state) {
|
|
72
|
+
state.serverInsertedHTMLCallbacks = [];
|
|
73
|
+
}
|
|
74
|
+
_fallbackState.serverInsertedHTMLCallbacks = [];
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=navigation-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation-state.js","sourceRoot":"","sources":["../../src/shims/navigation-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,uBAAuB,GAExB,MAAM,iBAAiB,CAAC;AAWzB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AACrD,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC/D,MAAM,EAAE,GAAG,UAAqD,CAAC;AACjE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,IAAI,iBAAiB,EAAmB,CAAuC,CAAC;AAE/G,MAAM,cAAc,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK;IAC5C,aAAa,EAAE,IAAI;IACnB,2BAA2B,EAAE,EAAE;CACN,CAAoB,CAAC;AAEhD,SAAS,UAAU,CAAC,KAAsB;IACxC,MAAM,SAAS,GAAI,IAAY,CAAC,SAAS,CAAC;IAC1C,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;IACD,cAAc,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IACnD,cAAc,CAAC,2BAA2B,GAAG,KAAK,CAAC,2BAA2B,CAAC;AACjF,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,cAAc,CAAC;AAC3C,CAAC;AAED,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E;AAE9E,uBAAuB,CAAC;IACtB,gBAAgB;QACd,OAAO,SAAS,EAAE,CAAC,aAAa,CAAC;IACnC,CAAC;IAED,gBAAgB,CAAC,GAA6B;QAC5C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,UAAU,CAAC;gBACT,aAAa,EAAE,GAAG;gBAClB,2BAA2B,EAAE,QAAQ,EAAE,2BAA2B;uBAC7D,cAAc,CAAC,2BAA2B;uBAC1C,EAAE;aACR,CAAC,CAAC;YACH,cAAc,CAAC,aAAa,GAAG,GAAG,CAAC;YACnC,OAAO;QACT,CAAC;QACD,0EAA0E;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,cAAc,CAAC,aAAa,GAAG,IAAI,CAAC;IACtC,CAAC;IAED,wBAAwB;QACtB,OAAO,SAAS,EAAE,CAAC,2BAA2B,CAAC;IACjD,CAAC;IAED,0BAA0B;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC;QACzC,CAAC;QACD,cAAc,CAAC,2BAA2B,GAAG,EAAE,CAAC;IAClD,CAAC;CACF,CAAC,CAAC","sourcesContent":["/**\n * Server-only navigation state backed by AsyncLocalStorage.\n *\n * This module provides request-scoped isolation for navigation context\n * and useServerInsertedHTML callbacks. Without ALS, concurrent requests\n * on Cloudflare Workers would share module-level state and leak data\n * (pathnames, params, CSS-in-JS styles) between requests.\n *\n * This module is server-only — it imports node:async_hooks and must NOT\n * be bundled for the browser. The dual-environment navigation.ts shim\n * uses a registration pattern so it works in both environments.\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport {\n _registerStateAccessors,\n type NavigationContext,\n} from \"./navigation.js\";\n\n// ---------------------------------------------------------------------------\n// ALS setup — same pattern as headers.ts\n// ---------------------------------------------------------------------------\n\ninterface NavigationState {\n serverContext: NavigationContext | null;\n serverInsertedHTMLCallbacks: Array<() => unknown>;\n}\n\nconst _ALS_KEY = Symbol.for(\"vinext.navigation.als\");\nconst _FALLBACK_KEY = Symbol.for(\"vinext.navigation.fallback\");\nconst _g = globalThis as unknown as Record<PropertyKey, unknown>;\nconst _als = (_g[_ALS_KEY] ??= new AsyncLocalStorage<NavigationState>()) as AsyncLocalStorage<NavigationState>;\n\nconst _fallbackState = (_g[_FALLBACK_KEY] ??= {\n serverContext: null,\n serverInsertedHTMLCallbacks: [],\n} satisfies NavigationState) as NavigationState;\n\nfunction _enterWith(state: NavigationState): void {\n const enterWith = (_als as any).enterWith;\n if (typeof enterWith === \"function\") {\n try {\n enterWith.call(_als, state);\n return;\n } catch {\n // Fall through to best-effort fallback.\n }\n }\n _fallbackState.serverContext = state.serverContext;\n _fallbackState.serverInsertedHTMLCallbacks = state.serverInsertedHTMLCallbacks;\n}\n\nfunction _getState(): NavigationState {\n return _als.getStore() ?? _fallbackState;\n}\n\n// ---------------------------------------------------------------------------\n// Register ALS-backed accessors into navigation.ts\n// ---------------------------------------------------------------------------\n\n_registerStateAccessors({\n getServerContext(): NavigationContext | null {\n return _getState().serverContext;\n },\n\n setServerContext(ctx: NavigationContext | null): void {\n if (ctx !== null) {\n const existing = _als.getStore();\n _enterWith({\n serverContext: ctx,\n serverInsertedHTMLCallbacks: existing?.serverInsertedHTMLCallbacks\n ?? _fallbackState.serverInsertedHTMLCallbacks\n ?? [],\n });\n _fallbackState.serverContext = ctx;\n return;\n }\n // Cleanup: clear context in both ALS store and fallback to prevent leaks.\n const state = _als.getStore();\n if (state) {\n state.serverContext = null;\n }\n _fallbackState.serverContext = null;\n },\n\n getInsertedHTMLCallbacks(): Array<() => unknown> {\n return _getState().serverInsertedHTMLCallbacks;\n },\n\n clearInsertedHTMLCallbacks(): void {\n const state = _als.getStore();\n if (state) {\n state.serverInsertedHTMLCallbacks = [];\n }\n _fallbackState.serverInsertedHTMLCallbacks = [];\n },\n});\n"]}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* next/navigation shim
|
|
3
|
+
*
|
|
4
|
+
* App Router navigation hooks. These work on both server (RSC) and client.
|
|
5
|
+
* Server-side: reads from a request context set by the RSC handler.
|
|
6
|
+
* Client-side: reads from browser Location API and provides navigation.
|
|
7
|
+
*/
|
|
8
|
+
import * as React from "react";
|
|
9
|
+
/**
|
|
10
|
+
* Get or create the layout segment context.
|
|
11
|
+
* Returns null in the RSC environment (createContext unavailable).
|
|
12
|
+
*/
|
|
13
|
+
export declare function getLayoutSegmentContext(): React.Context<number> | null;
|
|
14
|
+
export interface NavigationContext {
|
|
15
|
+
pathname: string;
|
|
16
|
+
searchParams: URLSearchParams;
|
|
17
|
+
params: Record<string, string | string[]>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Register ALS-backed state accessors. Called by navigation-state.ts on import.
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export declare function _registerStateAccessors(accessors: {
|
|
24
|
+
getServerContext: () => NavigationContext | null;
|
|
25
|
+
setServerContext: (ctx: NavigationContext | null) => void;
|
|
26
|
+
getInsertedHTMLCallbacks: () => Array<() => unknown>;
|
|
27
|
+
clearInsertedHTMLCallbacks: () => void;
|
|
28
|
+
}): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get the navigation context for the current SSR/RSC render.
|
|
31
|
+
* Reads from AsyncLocalStorage when available (concurrent-safe),
|
|
32
|
+
* otherwise falls back to module-level state.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getNavigationContext(): NavigationContext | null;
|
|
35
|
+
/**
|
|
36
|
+
* Set the navigation context for the current SSR/RSC render.
|
|
37
|
+
* Called by the framework entry before rendering each request.
|
|
38
|
+
*/
|
|
39
|
+
export declare function setNavigationContext(ctx: NavigationContext | null): void;
|
|
40
|
+
/** TTL for prefetch cache entries in ms (matches Next.js static prefetch TTL). */
|
|
41
|
+
export declare const PREFETCH_CACHE_TTL = 30000;
|
|
42
|
+
export interface PrefetchCacheEntry {
|
|
43
|
+
response: Response;
|
|
44
|
+
timestamp: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Convert a pathname (with optional query/hash) to its .rsc URL.
|
|
48
|
+
* Strips trailing slashes before appending `.rsc` so that cache keys
|
|
49
|
+
* are consistent regardless of the `trailingSlash` config setting.
|
|
50
|
+
*/
|
|
51
|
+
export declare function toRscUrl(href: string): string;
|
|
52
|
+
/** Get or create the shared in-memory RSC prefetch cache on window. */
|
|
53
|
+
export declare function getPrefetchCache(): Map<string, PrefetchCacheEntry>;
|
|
54
|
+
/**
|
|
55
|
+
* Get or create the shared set of already-prefetched RSC URLs on window.
|
|
56
|
+
* Keyed by rscUrl so that the browser entry can clear entries when consumed.
|
|
57
|
+
*/
|
|
58
|
+
export declare function getPrefetchedUrls(): Set<string>;
|
|
59
|
+
/**
|
|
60
|
+
* Store a prefetched RSC response in the cache.
|
|
61
|
+
* Enforces a maximum cache size to prevent unbounded memory growth on
|
|
62
|
+
* link-heavy pages.
|
|
63
|
+
*/
|
|
64
|
+
export declare function storePrefetchResponse(rscUrl: string, response: Response): void;
|
|
65
|
+
export declare function setClientParams(params: Record<string, string | string[]>): void;
|
|
66
|
+
/** Get the current client params (for testing referential stability). */
|
|
67
|
+
export declare function getClientParams(): Record<string, string | string[]>;
|
|
68
|
+
/**
|
|
69
|
+
* Returns the current pathname.
|
|
70
|
+
* Server: from request context. Client: from window.location.
|
|
71
|
+
*/
|
|
72
|
+
export declare function usePathname(): string;
|
|
73
|
+
/**
|
|
74
|
+
* Returns the current search params as a read-only URLSearchParams.
|
|
75
|
+
*/
|
|
76
|
+
export declare function useSearchParams(): URLSearchParams;
|
|
77
|
+
/**
|
|
78
|
+
* Returns the dynamic params for the current route.
|
|
79
|
+
*/
|
|
80
|
+
export declare function useParams<T extends Record<string, string | string[]> = Record<string, string | string[]>>(): T;
|
|
81
|
+
/**
|
|
82
|
+
* App Router's useRouter — returns push/replace/back/forward/refresh.
|
|
83
|
+
* Different from Pages Router's useRouter (next/router).
|
|
84
|
+
*/
|
|
85
|
+
export declare function useRouter(): {
|
|
86
|
+
push(href: string, options?: {
|
|
87
|
+
scroll?: boolean;
|
|
88
|
+
}): void;
|
|
89
|
+
replace(href: string, options?: {
|
|
90
|
+
scroll?: boolean;
|
|
91
|
+
}): void;
|
|
92
|
+
back(): void;
|
|
93
|
+
forward(): void;
|
|
94
|
+
refresh(): void;
|
|
95
|
+
prefetch(href: string): void;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Returns the active child segment one level below the layout where it's called.
|
|
99
|
+
*
|
|
100
|
+
* In Next.js, this is layout-aware: it returns the segment relative to the
|
|
101
|
+
* nearest parent layout. In our implementation, we approximate by returning
|
|
102
|
+
* the first segment after a specified parallel route key, or the first segment
|
|
103
|
+
* of the pathname. Returns null if at the leaf (no child segments).
|
|
104
|
+
*
|
|
105
|
+
* @param parallelRoutesKey - Which parallel route to read (default: "children")
|
|
106
|
+
*/
|
|
107
|
+
export declare function useSelectedLayoutSegment(parallelRoutesKey?: string): string | null;
|
|
108
|
+
/**
|
|
109
|
+
* Returns all active segments below the layout where it's called.
|
|
110
|
+
*
|
|
111
|
+
* In Next.js, this returns the full array of segments from the current
|
|
112
|
+
* layout down to the leaf page. Each layout in the tree wraps its children
|
|
113
|
+
* with a LayoutSegmentProvider that records the URL segment depth at that
|
|
114
|
+
* level. This hook reads that depth from context and slices the pathname
|
|
115
|
+
* segments accordingly.
|
|
116
|
+
*
|
|
117
|
+
* @param parallelRoutesKey - Which parallel route to read (default: "children")
|
|
118
|
+
*/
|
|
119
|
+
export declare function useSelectedLayoutSegments(_parallelRoutesKey?: string): string[];
|
|
120
|
+
/**
|
|
121
|
+
* ReadonlyURLSearchParams — type alias matching Next.js.
|
|
122
|
+
* In Next.js this prevents mutation, but since URLSearchParams is the underlying
|
|
123
|
+
* type in our implementation, we export it as-is for type compatibility.
|
|
124
|
+
*/
|
|
125
|
+
export type ReadonlyURLSearchParams = URLSearchParams;
|
|
126
|
+
/**
|
|
127
|
+
* useServerInsertedHTML — inject HTML during SSR from client components.
|
|
128
|
+
*
|
|
129
|
+
* Used by CSS-in-JS libraries (styled-components, emotion, StyleX) to inject
|
|
130
|
+
* <style> tags during SSR so styles appear in the initial HTML (no FOUC).
|
|
131
|
+
*
|
|
132
|
+
* The callback is called once after each SSR render pass. The returned JSX/HTML
|
|
133
|
+
* is serialized and injected into the HTML stream.
|
|
134
|
+
*
|
|
135
|
+
* Usage (in a "use client" component wrapping children):
|
|
136
|
+
* useServerInsertedHTML(() => {
|
|
137
|
+
* const styles = sheet.getStyleElement();
|
|
138
|
+
* sheet.instance.clearTag();
|
|
139
|
+
* return <>{styles}</>;
|
|
140
|
+
* });
|
|
141
|
+
*/
|
|
142
|
+
export declare function useServerInsertedHTML(callback: () => unknown): void;
|
|
143
|
+
/**
|
|
144
|
+
* Flush all collected useServerInsertedHTML callbacks.
|
|
145
|
+
* Returns an array of results (React elements or strings).
|
|
146
|
+
* Clears the callback list so the next render starts fresh.
|
|
147
|
+
*
|
|
148
|
+
* Called by the SSR entry after renderToReadableStream completes.
|
|
149
|
+
*/
|
|
150
|
+
export declare function flushServerInsertedHTML(): unknown[];
|
|
151
|
+
/**
|
|
152
|
+
* Clear all collected useServerInsertedHTML callbacks without flushing.
|
|
153
|
+
* Used for cleanup between requests.
|
|
154
|
+
*/
|
|
155
|
+
export declare function clearServerInsertedHTML(): void;
|
|
156
|
+
/**
|
|
157
|
+
* HTTP Access Fallback error code — shared prefix for notFound/forbidden/unauthorized.
|
|
158
|
+
* Matches Next.js 16's unified error handling approach.
|
|
159
|
+
*/
|
|
160
|
+
export declare const HTTP_ERROR_FALLBACK_ERROR_CODE = "NEXT_HTTP_ERROR_FALLBACK";
|
|
161
|
+
/**
|
|
162
|
+
* Check if an error is an HTTP Access Fallback error (notFound, forbidden, unauthorized).
|
|
163
|
+
*/
|
|
164
|
+
export declare function isHTTPAccessFallbackError(error: unknown): boolean;
|
|
165
|
+
/**
|
|
166
|
+
* Extract the HTTP status code from an HTTP Access Fallback error.
|
|
167
|
+
* Returns 404 for legacy NEXT_NOT_FOUND errors.
|
|
168
|
+
*/
|
|
169
|
+
export declare function getAccessFallbackHTTPStatus(error: unknown): number;
|
|
170
|
+
/**
|
|
171
|
+
* Enum matching Next.js RedirectType for type-safe redirect calls.
|
|
172
|
+
*/
|
|
173
|
+
export declare enum RedirectType {
|
|
174
|
+
push = "push",
|
|
175
|
+
replace = "replace"
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Throw a redirect. Caught by the framework to send a redirect response.
|
|
179
|
+
*/
|
|
180
|
+
export declare function redirect(url: string, type?: "replace" | "push" | RedirectType): never;
|
|
181
|
+
/**
|
|
182
|
+
* Trigger a permanent redirect (308).
|
|
183
|
+
*/
|
|
184
|
+
export declare function permanentRedirect(url: string): never;
|
|
185
|
+
/**
|
|
186
|
+
* Trigger a not-found response (404). Caught by the framework.
|
|
187
|
+
*/
|
|
188
|
+
export declare function notFound(): never;
|
|
189
|
+
/**
|
|
190
|
+
* Trigger a forbidden response (403). Caught by the framework.
|
|
191
|
+
* In Next.js, this is gated behind experimental.authInterrupts — we
|
|
192
|
+
* support it unconditionally for maximum compatibility.
|
|
193
|
+
*/
|
|
194
|
+
export declare function forbidden(): never;
|
|
195
|
+
/**
|
|
196
|
+
* Trigger an unauthorized response (401). Caught by the framework.
|
|
197
|
+
* In Next.js, this is gated behind experimental.authInterrupts — we
|
|
198
|
+
* support it unconditionally for maximum compatibility.
|
|
199
|
+
*/
|
|
200
|
+
export declare function unauthorized(): never;
|
|
201
|
+
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/shims/navigation.ts"],"names":[],"mappings":"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"}
|