vinext 1.0.0-beta.1 → 1.0.0-beta.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/README.md +4 -1
- package/dist/build/client-build-config.js +1 -0
- package/dist/build/report.d.ts +8 -1
- package/dist/build/report.js +12 -2
- package/dist/check.js +15 -2
- package/dist/cli.js +3 -2
- package/dist/config/config-matchers.d.ts +13 -37
- package/dist/config/config-matchers.js +31 -121
- package/dist/config/next-config.d.ts +3 -2
- package/dist/config/next-config.js +3 -1
- package/dist/config/request-context.d.ts +14 -0
- package/dist/config/request-context.js +26 -0
- package/dist/entries/app-rsc-entry.js +27 -9
- package/dist/entries/app-rsc-manifest.js +17 -0
- package/dist/entries/pages-server-entry.js +3 -2
- package/dist/index.js +82 -58
- package/dist/init.d.ts +6 -4
- package/dist/init.js +20 -22
- package/dist/plugins/og-assets.js +1 -1
- package/dist/routing/app-route-graph.d.ts +13 -5
- package/dist/routing/app-route-graph.js +59 -13
- package/dist/routing/app-router.js +12 -6
- package/dist/routing/file-matcher.d.ts +11 -22
- package/dist/routing/file-matcher.js +21 -33
- package/dist/routing/pages-router.js +23 -29
- package/dist/routing/route-matching.d.ts +14 -1
- package/dist/routing/route-matching.js +13 -1
- package/dist/routing/route-pattern.d.ts +2 -1
- package/dist/routing/route-pattern.js +7 -4
- package/dist/routing/route-trie.d.ts +5 -1
- package/dist/routing/route-trie.js +5 -2
- package/dist/server/app-browser-entry.js +7 -6
- package/dist/server/app-browser-history-controller.d.ts +1 -1
- package/dist/server/app-browser-history-controller.js +3 -3
- package/dist/server/app-browser-navigation-controller.js +1 -1
- package/dist/server/app-browser-state.js +1 -1
- package/dist/server/app-browser-visible-commit.js +1 -1
- package/dist/server/app-fallback-renderer.d.ts +3 -0
- package/dist/server/app-fallback-renderer.js +4 -2
- package/dist/server/app-middleware.js +2 -1
- package/dist/server/app-page-boundary-render.d.ts +12 -1
- package/dist/server/app-page-boundary-render.js +84 -2
- package/dist/server/app-page-cache-finalizer.d.ts +1 -1
- package/dist/server/app-page-cache.d.ts +1 -1
- package/dist/server/app-page-dispatch.d.ts +11 -2
- package/dist/server/app-page-dispatch.js +14 -17
- package/dist/server/app-page-element-builder.d.ts +7 -2
- package/dist/server/app-page-element-builder.js +112 -27
- package/dist/server/app-page-head.d.ts +54 -2
- package/dist/server/app-page-head.js +164 -78
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +29 -0
- package/dist/server/app-page-http-access-fallback-metadata.js +106 -0
- package/dist/server/app-page-render.d.ts +2 -2
- package/dist/server/app-page-render.js +1 -1
- package/dist/server/app-page-request.d.ts +12 -0
- package/dist/server/app-page-request.js +133 -13
- package/dist/server/app-page-route-wiring.d.ts +9 -0
- package/dist/server/app-page-route-wiring.js +43 -3
- package/dist/server/app-post-middleware-context.d.ts +1 -1
- package/dist/server/app-post-middleware-context.js +1 -1
- package/dist/server/app-route-handler-dispatch.js +31 -17
- package/dist/server/app-route-handler-execution.d.ts +6 -1
- package/dist/server/app-route-handler-execution.js +42 -16
- package/dist/server/app-route-handler-policy.d.ts +2 -0
- package/dist/server/app-route-handler-policy.js +3 -3
- package/dist/server/app-route-module-loader.d.ts +3 -1
- package/dist/server/app-route-module-loader.js +1 -0
- package/dist/server/app-rsc-cache-busting.d.ts +1 -1
- package/dist/server/app-rsc-errors.d.ts +1 -1
- package/dist/server/app-rsc-errors.js +12 -2
- package/dist/server/app-rsc-handler.d.ts +10 -5
- package/dist/server/app-rsc-handler.js +52 -24
- package/dist/server/app-rsc-request-normalization.d.ts +3 -2
- package/dist/server/app-rsc-request-normalization.js +8 -2
- package/dist/server/app-rsc-response-finalizer.d.ts +2 -2
- package/dist/server/app-rsc-response-finalizer.js +5 -11
- package/dist/server/app-rsc-route-matching.d.ts +20 -0
- package/dist/server/app-rsc-route-matching.js +87 -11
- package/dist/server/app-segment-config.js +13 -3
- package/dist/server/app-server-action-execution.d.ts +3 -1
- package/dist/server/app-server-action-execution.js +9 -7
- package/dist/server/app-ssr-entry.js +2 -2
- package/dist/server/app-ssr-stream.d.ts +1 -7
- package/dist/server/app-ssr-stream.js +2 -10
- package/dist/server/config-headers.d.ts +24 -0
- package/dist/server/config-headers.js +52 -0
- package/dist/server/dev-initial-server-error.d.ts +1 -1
- package/dist/server/dev-server.js +29 -13
- package/dist/server/isr-cache.d.ts +1 -1
- package/dist/server/middleware-matcher-pattern.d.ts +22 -0
- package/dist/server/middleware-matcher-pattern.js +219 -0
- package/dist/server/middleware-matcher.d.ts +2 -7
- package/dist/server/middleware-matcher.js +13 -60
- package/dist/server/middleware-path-to-regexp.d.ts +14 -0
- package/dist/server/middleware-path-to-regexp.js +228 -0
- package/dist/server/middleware-runtime.js +4 -3
- package/dist/server/middleware.d.ts +1 -1
- package/dist/server/middleware.js +2 -1
- package/dist/server/pages-data-route.d.ts +11 -1
- package/dist/server/pages-data-route.js +16 -1
- package/dist/server/pages-get-initial-props.d.ts +15 -2
- package/dist/server/pages-get-initial-props.js +16 -6
- package/dist/server/pages-page-data.d.ts +3 -1
- package/dist/server/pages-page-data.js +16 -7
- package/dist/server/pages-page-handler.d.ts +4 -2
- package/dist/server/pages-page-handler.js +16 -17
- package/dist/server/pages-page-response.js +1 -1
- package/dist/server/pages-readiness.d.ts +3 -3
- package/dist/server/pages-request-pipeline.d.ts +1 -0
- package/dist/server/pages-request-pipeline.js +25 -11
- package/dist/server/pages-router-entry.js +6 -0
- package/dist/server/prerender-route-params.js +2 -2
- package/dist/server/prod-server.d.ts +1 -4
- package/dist/server/prod-server.js +36 -23
- package/dist/server/request-pipeline.d.ts +15 -29
- package/dist/server/request-pipeline.js +24 -59
- package/dist/server/rsc-stream-hints.js +122 -18
- package/dist/shims/app.d.ts +1 -1
- package/dist/shims/cache-request-state.d.ts +27 -1
- package/dist/shims/cache-request-state.js +60 -1
- package/dist/shims/cache-runtime.d.ts +12 -1
- package/dist/shims/cache-runtime.js +22 -7
- package/dist/shims/cache.d.ts +5 -5
- package/dist/shims/cache.js +26 -10
- package/dist/shims/document.d.ts +42 -83
- package/dist/shims/document.js +62 -53
- package/dist/shims/dynamic.d.ts +5 -25
- package/dist/shims/dynamic.js +29 -8
- package/dist/shims/error.d.ts +1 -1
- package/dist/shims/error.js +1 -1
- package/dist/shims/fetch-cache.js +12 -3
- package/dist/shims/font-google-base.d.ts +11 -4
- package/dist/shims/font-local.d.ts +10 -3
- package/dist/shims/head.d.ts +13 -2
- package/dist/shims/head.js +3 -3
- package/dist/shims/headers.d.ts +28 -31
- package/dist/shims/headers.js +109 -49
- package/dist/shims/image.d.ts +27 -37
- package/dist/shims/image.js +21 -14
- package/dist/shims/internal/cookie-serialize.d.ts +3 -1
- package/dist/shims/internal/cookie-serialize.js +3 -1
- package/dist/shims/internal/hybrid-client-route-owner.js +3 -1
- package/dist/shims/internal/utils.d.ts +3 -3
- package/dist/shims/legacy-image.d.ts +3 -37
- package/dist/shims/legacy-image.js +6 -16
- package/dist/shims/link.d.ts +15 -22
- package/dist/shims/link.js +20 -11
- package/dist/shims/navigation-context-state.d.ts +1 -1
- package/dist/shims/navigation.d.ts +7 -3
- package/dist/shims/navigation.js +24 -13
- package/dist/shims/navigation.react-server.js +1 -1
- package/dist/shims/next-shims-augmentations.d.ts +1 -0
- package/dist/shims/next-shims-public.d.ts +1 -0
- package/dist/shims/public-shim-map.json.js +103 -0
- package/dist/shims/readonly-url-search-params.d.ts +3 -3
- package/dist/shims/readonly-url-search-params.js +3 -3
- package/dist/shims/request-state-types.d.ts +1 -1
- package/dist/shims/router.d.ts +55 -21
- package/dist/shims/router.js +162 -37
- package/dist/shims/script.d.ts +6 -10
- package/dist/shims/script.js +6 -3
- package/dist/shims/server.d.ts +45 -22
- package/dist/shims/server.js +44 -5
- package/dist/shims/unified-request-context.d.ts +1 -1
- package/dist/shims/unified-request-context.js +2 -0
- package/dist/shims/url-safety.d.ts +1 -1
- package/dist/shims/url-safety.js +2 -2
- package/dist/typegen.d.ts +8 -2
- package/dist/typegen.js +76 -15
- package/dist/utils/domain-locale.d.ts +2 -2
- package/dist/utils/external-url.d.ts +5 -0
- package/dist/utils/external-url.js +7 -0
- package/dist/utils/regex-safety.d.ts +8 -0
- package/dist/utils/regex-safety.js +737 -0
- package/package.json +13 -2
package/dist/shims/dynamic.d.ts
CHANGED
|
@@ -1,28 +1,7 @@
|
|
|
1
|
-
import { ComponentType } from "react";
|
|
1
|
+
import React, { ComponentType } from "react";
|
|
2
|
+
import { DynamicOptions, DynamicOptionsLoadingProps, LoadableComponent, LoadableFn, LoadableGeneratedOptions, LoadableOptions, Loader, LoaderComponent, LoaderMap } from "@vinext/types/next/upstream/dynamic";
|
|
2
3
|
|
|
3
4
|
//#region src/shims/dynamic.d.ts
|
|
4
|
-
type DynamicLoadingProps = {
|
|
5
|
-
error?: Error | null;
|
|
6
|
-
isLoading?: boolean;
|
|
7
|
-
pastDelay?: boolean;
|
|
8
|
-
retry?: () => void;
|
|
9
|
-
timedOut?: boolean;
|
|
10
|
-
};
|
|
11
|
-
type ComponentModule<P> = {
|
|
12
|
-
default: ComponentType<P>;
|
|
13
|
-
};
|
|
14
|
-
type LoaderComponent<P> = Promise<ComponentModule<P> | ComponentType<P>>;
|
|
15
|
-
type LoaderFn<P> = () => LoaderComponent<P>;
|
|
16
|
-
type DynamicOptions<P> = {
|
|
17
|
-
loading?: ComponentType<DynamicLoadingProps>;
|
|
18
|
-
loader?: Loader<P>;
|
|
19
|
-
loadableGenerated?: {
|
|
20
|
-
modules?: readonly string[];
|
|
21
|
-
};
|
|
22
|
-
modules?: readonly string[];
|
|
23
|
-
ssr?: boolean;
|
|
24
|
-
};
|
|
25
|
-
type Loader<P> = LoaderFn<P> | LoaderComponent<P>;
|
|
26
5
|
type DynamicInput<P> = DynamicOptions<P> | Loader<P>;
|
|
27
6
|
/**
|
|
28
7
|
* Wait for all pending dynamic() preloads to resolve, then clear the queue.
|
|
@@ -30,6 +9,7 @@ type DynamicInput<P> = DynamicOptions<P> | Loader<P>;
|
|
|
30
9
|
* No-op for the App Router path which uses React.lazy + Suspense.
|
|
31
10
|
*/
|
|
32
11
|
declare function flushPreloads(): Promise<void[]>;
|
|
33
|
-
declare function dynamic<P
|
|
12
|
+
declare function dynamic<P = {}>(dynamicInput: DynamicInput<P>, options?: DynamicOptions<P>): ComponentType<P>;
|
|
13
|
+
declare function noSSR<P = {}>(LoadableInitializer: LoadableFn<P>, loadableOptions: DynamicOptions<P>): React.ComponentType<P>;
|
|
34
14
|
//#endregion
|
|
35
|
-
export { dynamic as default, flushPreloads };
|
|
15
|
+
export { type DynamicOptions, type DynamicOptionsLoadingProps, type LoadableComponent, type LoadableFn, type LoadableGeneratedOptions, type LoadableOptions, type Loader, type LoaderComponent, type LoaderMap, dynamic as default, flushPreloads, noSSR };
|
package/dist/shims/dynamic.js
CHANGED
|
@@ -68,6 +68,9 @@ function useRetryableLazyComponent(loader, initialLazyComponent) {
|
|
|
68
68
|
retryKey
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
|
+
function createElementWithProps(Component, props) {
|
|
72
|
+
return React.createElement(Component, props);
|
|
73
|
+
}
|
|
71
74
|
/**
|
|
72
75
|
* Lightweight error boundary that renders the loading component with the error
|
|
73
76
|
* when a dynamic() loader rejects. Without this, loader failures would propagate
|
|
@@ -122,9 +125,14 @@ function flushPreloads() {
|
|
|
122
125
|
return Promise.all(pending);
|
|
123
126
|
}
|
|
124
127
|
function dynamic(dynamicInput, options) {
|
|
125
|
-
const
|
|
128
|
+
const normalizedOptions = normalizeDynamicOptions(dynamicInput, options);
|
|
129
|
+
const { loader: dynamicLoader, loadableGenerated, loading: LoadingComponent, ssr = true } = normalizedOptions;
|
|
130
|
+
if (dynamicLoader && typeof dynamicLoader === "object" && !(dynamicLoader instanceof Promise)) throw new Error("next/dynamic loader maps are not supported by vinext");
|
|
126
131
|
const loader = dynamicLoader ? normalizeLoader(dynamicLoader) : () => Promise.resolve(() => null);
|
|
127
|
-
const
|
|
132
|
+
const generatedModules = loadableGenerated?.modules;
|
|
133
|
+
const optionModules = normalizedOptions.modules;
|
|
134
|
+
const configuredModules = generatedModules ?? optionModules;
|
|
135
|
+
const preloadModuleIds = typeof configuredModules === "function" ? Object.keys(configuredModules()) : configuredModules;
|
|
128
136
|
if (!ssr) {
|
|
129
137
|
if (isServer) {
|
|
130
138
|
const SSRFalse = (_props) => LoadingComponent ? React.createElement(LoadingComponent, createDynamicLoadingProps()) : null;
|
|
@@ -138,7 +146,7 @@ function dynamic(dynamicInput, options) {
|
|
|
138
146
|
React.useEffect(() => setMounted(true), []);
|
|
139
147
|
if (!mounted) return LoadingComponent ? React.createElement(LoadingComponent, createDynamicLoadingProps({ retry })) : null;
|
|
140
148
|
const fallback = LoadingComponent ? React.createElement(LoadingComponent, createDynamicLoadingProps({ retry })) : null;
|
|
141
|
-
const lazyElement =
|
|
149
|
+
const lazyElement = createElementWithProps(LazyComponent, props);
|
|
142
150
|
let content = lazyElement;
|
|
143
151
|
if (LoadingComponent) {
|
|
144
152
|
const ErrorBoundary = getDynamicErrorBoundary();
|
|
@@ -157,8 +165,7 @@ function dynamic(dynamicInput, options) {
|
|
|
157
165
|
if (typeof React.lazy !== "function") {
|
|
158
166
|
const AsyncServerDynamic = async (props) => {
|
|
159
167
|
const mod = await loader();
|
|
160
|
-
|
|
161
|
-
return React.createElement(Component, props);
|
|
168
|
+
return createElementWithProps("default" in mod ? mod.default : mod, props);
|
|
162
169
|
};
|
|
163
170
|
AsyncServerDynamic.displayName = "DynamicAsyncServer";
|
|
164
171
|
return AsyncServerDynamic;
|
|
@@ -166,7 +173,7 @@ function dynamic(dynamicInput, options) {
|
|
|
166
173
|
const LazyServer = createLazyComponent(loader);
|
|
167
174
|
const ServerDynamic = (props) => {
|
|
168
175
|
const fallback = LoadingComponent ? React.createElement(LoadingComponent, createDynamicLoadingProps()) : null;
|
|
169
|
-
const lazyElement =
|
|
176
|
+
const lazyElement = createElementWithProps(LazyServer, props);
|
|
170
177
|
let content = lazyElement;
|
|
171
178
|
if (LoadingComponent) {
|
|
172
179
|
const ErrorBoundary = getDynamicErrorBoundary();
|
|
@@ -185,7 +192,7 @@ function dynamic(dynamicInput, options) {
|
|
|
185
192
|
const ClientDynamic = (props) => {
|
|
186
193
|
const { LazyComponent, retry, retryKey } = useRetryableLazyComponent(loader, InitialLazyComponent);
|
|
187
194
|
const fallback = LoadingComponent ? React.createElement(LoadingComponent, createDynamicLoadingProps({ retry })) : null;
|
|
188
|
-
const lazyElement =
|
|
195
|
+
const lazyElement = createElementWithProps(LazyComponent, props);
|
|
189
196
|
let content = lazyElement;
|
|
190
197
|
if (LoadingComponent) {
|
|
191
198
|
const ErrorBoundary = getDynamicErrorBoundary();
|
|
@@ -200,5 +207,19 @@ function dynamic(dynamicInput, options) {
|
|
|
200
207
|
ClientDynamic.displayName = "DynamicClient";
|
|
201
208
|
return ClientDynamic;
|
|
202
209
|
}
|
|
210
|
+
function noSSR(LoadableInitializer, loadableOptions) {
|
|
211
|
+
delete loadableOptions.webpack;
|
|
212
|
+
delete loadableOptions.modules;
|
|
213
|
+
if (!isServer) return LoadableInitializer(loadableOptions);
|
|
214
|
+
const Loading = loadableOptions.loading;
|
|
215
|
+
const NoSSR = () => React.createElement(Loading, {
|
|
216
|
+
error: null,
|
|
217
|
+
isLoading: true,
|
|
218
|
+
pastDelay: false,
|
|
219
|
+
timedOut: false
|
|
220
|
+
});
|
|
221
|
+
NoSSR.displayName = "NoSSR";
|
|
222
|
+
return NoSSR;
|
|
223
|
+
}
|
|
203
224
|
//#endregion
|
|
204
|
-
export { dynamic as default, flushPreloads };
|
|
225
|
+
export { dynamic as default, flushPreloads, noSSR };
|
package/dist/shims/error.d.ts
CHANGED
package/dist/shims/error.js
CHANGED
|
@@ -119,7 +119,7 @@ var _CatchError = class extends React.Component {
|
|
|
119
119
|
if (this.state.error) {
|
|
120
120
|
const Fallback = this.props.fallback;
|
|
121
121
|
const errorInfo = {
|
|
122
|
-
error: this.state.error.thrownValue,
|
|
122
|
+
error: this.state.error.thrownValue instanceof Error ? this.state.error.thrownValue : new Error(String(this.state.error.thrownValue)),
|
|
123
123
|
reset: this.reset,
|
|
124
124
|
unstable_retry: this.unstable_retry
|
|
125
125
|
};
|
|
@@ -3,7 +3,7 @@ import { getRequestContext, isInsideUnifiedScope, runWithUnifiedStateMutation }
|
|
|
3
3
|
import { getRequestExecutionContext } from "./request-context.js";
|
|
4
4
|
import { getDataCacheHandler } from "./cache-handler.js";
|
|
5
5
|
import { markDynamicUsage } from "./headers.js";
|
|
6
|
-
import { _setRequestScopedCacheLife } from "./cache-request-state.js";
|
|
6
|
+
import { _hasPendingRevalidatedTag, _setRequestScopedCacheLife } from "./cache-request-state.js";
|
|
7
7
|
import { encodeCacheTags } from "../utils/encode-cache-tag.js";
|
|
8
8
|
//#region src/shims/fetch-cache.ts
|
|
9
9
|
/**
|
|
@@ -639,13 +639,22 @@ function createPatchedFetch() {
|
|
|
639
639
|
throw err;
|
|
640
640
|
}
|
|
641
641
|
const handler = getDataCacheHandler();
|
|
642
|
+
let mustBypassPendingRevalidation = _hasPendingRevalidatedTag([...tags, ...softTags]);
|
|
642
643
|
try {
|
|
643
|
-
|
|
644
|
+
let cached = mustBypassPendingRevalidation ? null : await handler.get(cacheKey, {
|
|
644
645
|
kind: "FETCH",
|
|
645
646
|
tags,
|
|
646
647
|
softTags,
|
|
647
648
|
revalidate: revalidateSeconds
|
|
648
649
|
});
|
|
650
|
+
if (cached?.value?.kind === "FETCH" && _hasPendingRevalidatedTag([
|
|
651
|
+
...cached.value.tags ?? [],
|
|
652
|
+
...tags,
|
|
653
|
+
...softTags
|
|
654
|
+
])) {
|
|
655
|
+
mustBypassPendingRevalidation = true;
|
|
656
|
+
cached = null;
|
|
657
|
+
}
|
|
649
658
|
if (cached?.value && cached.value.kind === "FETCH" && cached.cacheState !== "stale") {
|
|
650
659
|
await lowerFetchCacheRevalidateIfNeeded(handler, cacheKey, cached.value, tags, revalidateSeconds);
|
|
651
660
|
const cachedData = cached.value.data;
|
|
@@ -679,7 +688,7 @@ function createPatchedFetch() {
|
|
|
679
688
|
} catch (cacheErr) {
|
|
680
689
|
console.error("[vinext] fetch cache read error:", cacheErr);
|
|
681
690
|
}
|
|
682
|
-
const response = await dedupeFetch(input, fetchInit);
|
|
691
|
+
const response = await (mustBypassPendingRevalidation ? originalFetch(input, fetchInit) : dedupeFetch(input, fetchInit));
|
|
683
692
|
const cacheValue = await buildFetchCacheValue(response, tags, revalidateSeconds);
|
|
684
693
|
if (cacheValue) handler.set(cacheKey, cacheValue, {
|
|
685
694
|
fetchCache: true,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { FontStyle } from "./font-utils.js";
|
|
2
2
|
|
|
3
3
|
//#region src/shims/font-google-base.d.ts
|
|
4
|
-
type
|
|
4
|
+
type CssVariable = `--${string}`;
|
|
5
|
+
type FontOptions<T extends CssVariable | undefined = CssVariable | undefined> = {
|
|
5
6
|
weight?: string | string[];
|
|
6
7
|
style?: string | string[];
|
|
7
8
|
subsets?: string[];
|
|
@@ -9,7 +10,7 @@ type FontOptions = {
|
|
|
9
10
|
preload?: boolean;
|
|
10
11
|
fallback?: string[];
|
|
11
12
|
adjustFontFallback?: boolean | string;
|
|
12
|
-
variable?:
|
|
13
|
+
variable?: T;
|
|
13
14
|
axes?: string[];
|
|
14
15
|
};
|
|
15
16
|
type FontResult = {
|
|
@@ -24,7 +25,7 @@ type InternalGoogleFontRuntimeOptions = {
|
|
|
24
25
|
fontWeight?: number;
|
|
25
26
|
fontStyle?: "normal" | "italic";
|
|
26
27
|
};
|
|
27
|
-
type FontLoaderOptions = FontOptions & {
|
|
28
|
+
type FontLoaderOptions<T extends CssVariable | undefined = CssVariable | undefined> = FontOptions<T> & {
|
|
28
29
|
/**
|
|
29
30
|
* Internal payload injected by the vinext:google-fonts transform after
|
|
30
31
|
* metadata validation. Runtime must prefer these values over user options
|
|
@@ -76,7 +77,13 @@ declare function getSSRFontPreloads(): Array<{
|
|
|
76
77
|
href: string;
|
|
77
78
|
type: string;
|
|
78
79
|
}>;
|
|
79
|
-
type
|
|
80
|
+
type NextFont = Omit<FontResult, "variable"> & {
|
|
81
|
+
variable?: undefined;
|
|
82
|
+
};
|
|
83
|
+
type NextFontWithVariable = Omit<NextFont, "variable"> & {
|
|
84
|
+
variable: string;
|
|
85
|
+
};
|
|
86
|
+
type FontLoader = <T extends CssVariable | undefined = undefined>(options?: FontLoaderOptions<T>) => T extends undefined ? NextFont : NextFontWithVariable;
|
|
80
87
|
declare function createFontLoader(family: string): FontLoader;
|
|
81
88
|
declare const googleFonts: Record<string, FontLoader>;
|
|
82
89
|
//#endregion
|
|
@@ -6,14 +6,15 @@ type LocalFontSrc = {
|
|
|
6
6
|
weight?: string;
|
|
7
7
|
style?: string;
|
|
8
8
|
};
|
|
9
|
-
type
|
|
9
|
+
type CssVariable = `--${string}`;
|
|
10
|
+
type LocalFontOptions<T extends CssVariable | undefined = CssVariable | undefined> = {
|
|
10
11
|
src: string | LocalFontSrc | LocalFontSrc[];
|
|
11
12
|
display?: string;
|
|
12
13
|
weight?: string;
|
|
13
14
|
style?: string;
|
|
14
15
|
fallback?: string[];
|
|
15
16
|
preload?: boolean;
|
|
16
|
-
variable?:
|
|
17
|
+
variable?: T;
|
|
17
18
|
adjustFontFallback?: boolean | string;
|
|
18
19
|
declarations?: Array<{
|
|
19
20
|
prop: string;
|
|
@@ -30,6 +31,12 @@ type FontResult = {
|
|
|
30
31
|
style: FontStyle;
|
|
31
32
|
variable?: string;
|
|
32
33
|
};
|
|
34
|
+
type NextFont = Omit<FontResult, "variable"> & {
|
|
35
|
+
variable?: undefined;
|
|
36
|
+
};
|
|
37
|
+
type NextFontWithVariable = Omit<NextFont, "variable"> & {
|
|
38
|
+
variable: string;
|
|
39
|
+
};
|
|
33
40
|
/**
|
|
34
41
|
* Get collected SSR font styles (used by the renderer).
|
|
35
42
|
* Note: We don't clear the arrays because fonts are loaded at module import
|
|
@@ -45,6 +52,6 @@ declare function getSSRFontPreloads(): Array<{
|
|
|
45
52
|
href: string;
|
|
46
53
|
type: string;
|
|
47
54
|
}>;
|
|
48
|
-
declare function localFont(options: LocalFontOptions):
|
|
55
|
+
declare function localFont<T extends CssVariable | undefined = undefined>(options: LocalFontOptions<T>): T extends undefined ? NextFont : NextFontWithVariable;
|
|
49
56
|
//#endregion
|
|
50
57
|
export { localFont as default, getSSRFontPreloads, getSSRFontStyles };
|
package/dist/shims/head.d.ts
CHANGED
|
@@ -28,6 +28,17 @@ declare function resetSSRHead(): void;
|
|
|
28
28
|
* Pass an empty array (or simply don't call this) to skip the merge.
|
|
29
29
|
*/
|
|
30
30
|
declare function setDocumentInitialHead(head: React.ReactNode[]): void;
|
|
31
|
+
/**
|
|
32
|
+
* Default head tags emitted alongside every Pages Router render — charset
|
|
33
|
+
* first, then viewport. Mirrors Next.js's `defaultHead()` in
|
|
34
|
+
* `packages/next/src/shared/lib/head.tsx`, which seeds the head array used
|
|
35
|
+
* by `HeadManagerContext` before any user `<Head>` reduces over it.
|
|
36
|
+
*
|
|
37
|
+
* The canonical Next.js order is `<meta charset>` then `<meta viewport>`
|
|
38
|
+
* then user tags, all with `data-next-head=""`. See assertion in
|
|
39
|
+
* `test/e2e/next-head/index.test.ts`.
|
|
40
|
+
*/
|
|
41
|
+
declare function defaultHead(): React.ReactElement[];
|
|
31
42
|
/** Get collected head HTML. Call after render. */
|
|
32
43
|
declare function getSSRHeadHTML(): string;
|
|
33
44
|
type HeadDOMElement = Pick<HTMLElement, "innerHTML" | "setAttribute" | "textContent">;
|
|
@@ -68,6 +79,6 @@ declare function _applyHeadPropsToElement(domEl: HeadDOMElement, props: Record<s
|
|
|
68
79
|
declare function _syncClientHead(): void;
|
|
69
80
|
declare function Head({
|
|
70
81
|
children
|
|
71
|
-
}: HeadProps):
|
|
82
|
+
}: HeadProps): React.ReactElement;
|
|
72
83
|
//#endregion
|
|
73
|
-
export { _applyHeadPropsToElement, _clientHeadChildren, _registerHeadStateAccessors, _syncClientHead, Head as default, escapeAttr, escapeInlineContent, getSSRHeadHTML, isSafeAttrName, reduceHeadChildren, resetSSRHead, setDocumentInitialHead };
|
|
84
|
+
export { _applyHeadPropsToElement, _clientHeadChildren, _registerHeadStateAccessors, _syncClientHead, Head as default, defaultHead, escapeAttr, escapeInlineContent, getSSRHeadHTML, isSafeAttrName, reduceHeadChildren, resetSSRHead, setDocumentInitialHead };
|
package/dist/shims/head.js
CHANGED
|
@@ -323,7 +323,7 @@ function Head({ children }) {
|
|
|
323
323
|
if (headInstanceIdRef.current === null) headInstanceIdRef.current = Symbol("vinext-head");
|
|
324
324
|
if (typeof window === "undefined") {
|
|
325
325
|
_getSSRHeadChildren().push(children);
|
|
326
|
-
return
|
|
326
|
+
return React.createElement(React.Fragment);
|
|
327
327
|
}
|
|
328
328
|
useEffect(() => {
|
|
329
329
|
const instanceId = headInstanceIdRef.current;
|
|
@@ -334,7 +334,7 @@ function Head({ children }) {
|
|
|
334
334
|
_syncClientHead();
|
|
335
335
|
};
|
|
336
336
|
}, [children]);
|
|
337
|
-
return
|
|
337
|
+
return React.createElement(React.Fragment);
|
|
338
338
|
}
|
|
339
339
|
//#endregion
|
|
340
|
-
export { _applyHeadPropsToElement, _clientHeadChildren, _registerHeadStateAccessors, _syncClientHead, Head as default, escapeAttr, escapeInlineContent, getSSRHeadHTML, isSafeAttrName, reduceHeadChildren, resetSSRHead, setDocumentInitialHead };
|
|
340
|
+
export { _applyHeadPropsToElement, _clientHeadChildren, _registerHeadStateAccessors, _syncClientHead, Head as default, defaultHead, escapeAttr, escapeInlineContent, getSSRHeadHTML, isSafeAttrName, reduceHeadChildren, resetSSRHead, setDocumentInitialHead };
|
package/dist/shims/headers.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { RenderRequestApiKind } from "../server/cache-proof.js";
|
|
2
|
+
import { ReadonlyRequestCookies } from "@vinext/types/next/upstream/dist/server/web/spec-extension/adapters/request-cookies";
|
|
3
|
+
import { ResponseCookie } from "@vinext/types/next/upstream/dist/compiled/@edge-runtime/cookies/index";
|
|
2
4
|
|
|
3
5
|
//#region src/shims/headers.d.ts
|
|
4
6
|
type HeadersContext = {
|
|
@@ -27,6 +29,8 @@ type VinextHeadersShimState = {
|
|
|
27
29
|
phase: HeadersAccessPhase;
|
|
28
30
|
};
|
|
29
31
|
type ConnectionProbeState = {
|
|
32
|
+
active: boolean;
|
|
33
|
+
dynamicUsageTarget: VinextHeadersShimState;
|
|
30
34
|
interrupted: boolean;
|
|
31
35
|
interrupt: () => void;
|
|
32
36
|
pending: Promise<never>;
|
|
@@ -47,6 +51,16 @@ type ConnectionProbeResult<T> = {
|
|
|
47
51
|
* Called by connection(), cookies(), headers(), and noStore().
|
|
48
52
|
*/
|
|
49
53
|
declare function markDynamicUsage(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Measure dynamic usage in a child async scope without clearing the parent.
|
|
56
|
+
* Concurrent work that already belongs to the request (such as deferred
|
|
57
|
+
* metadata) keeps writing to the parent state and therefore remains visible
|
|
58
|
+
* to the final cache policy.
|
|
59
|
+
*/
|
|
60
|
+
declare function runWithIsolatedDynamicUsage<T>(fn: () => T | Promise<T>): Promise<{
|
|
61
|
+
result: T;
|
|
62
|
+
dynamicDetected: boolean;
|
|
63
|
+
}>;
|
|
50
64
|
declare function markRenderRequestApiUsage(kind: RenderRequestApiKind): void;
|
|
51
65
|
declare function throwIfStaticGenerationAccessError(): void;
|
|
52
66
|
declare function runWithConnectionProbe<T>(fn: () => T | Promise<T>): Promise<ConnectionProbeResult<T>>;
|
|
@@ -162,11 +176,8 @@ declare function headersContextFromRequest(request: Request, options?: HeadersCo
|
|
|
162
176
|
* the context is already available).
|
|
163
177
|
*/
|
|
164
178
|
declare function headers(): Promise<Headers> & Headers;
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
* Returns a ReadonlyRequestCookies-like object.
|
|
168
|
-
*/
|
|
169
|
-
declare function cookies(): Promise<RequestCookies> & RequestCookies;
|
|
179
|
+
type VinextReadonlyRequestCookies = Omit<ReadonlyRequestCookies, keyof RequestCookies> & RequestCookies;
|
|
180
|
+
declare function cookies(): Promise<VinextReadonlyRequestCookies> & VinextReadonlyRequestCookies;
|
|
170
181
|
/** Accumulated Set-Cookie headers from cookies().set() / .delete() calls */
|
|
171
182
|
/**
|
|
172
183
|
* Get and clear all pending Set-Cookie headers generated by cookies().set()/delete().
|
|
@@ -179,6 +190,12 @@ declare function getAndClearPendingCookies(): string[];
|
|
|
179
190
|
*/
|
|
180
191
|
declare function getDraftModeCookieHeader(): string | null;
|
|
181
192
|
declare function isDraftModeRequest(request: Request, draftModeSecret: string): boolean;
|
|
193
|
+
/**
|
|
194
|
+
* Read draft mode from the live request context without recording request API
|
|
195
|
+
* usage. `null` means there is no active request context, which lets framework
|
|
196
|
+
* callers fall back to an explicitly supplied request when needed.
|
|
197
|
+
*/
|
|
198
|
+
declare function getActiveDraftModeState(): boolean | null;
|
|
182
199
|
/**
|
|
183
200
|
* Read the active request's draft-mode state without recording request API usage.
|
|
184
201
|
* Internal cache implementations use this to bypass persistent reads and writes,
|
|
@@ -223,39 +240,19 @@ declare class RequestCookies {
|
|
|
223
240
|
* Set a cookie. In Route Handlers and Server Actions, this produces
|
|
224
241
|
* a Set-Cookie header on the response.
|
|
225
242
|
*/
|
|
226
|
-
set(
|
|
227
|
-
|
|
228
|
-
value: string;
|
|
229
|
-
path?: string;
|
|
230
|
-
domain?: string;
|
|
231
|
-
maxAge?: number;
|
|
232
|
-
expires?: Date;
|
|
233
|
-
httpOnly?: boolean;
|
|
234
|
-
secure?: boolean;
|
|
235
|
-
sameSite?: "Strict" | "Lax" | "None";
|
|
236
|
-
}, value?: string, options?: {
|
|
237
|
-
path?: string;
|
|
238
|
-
domain?: string;
|
|
239
|
-
maxAge?: number;
|
|
240
|
-
expires?: Date;
|
|
241
|
-
httpOnly?: boolean;
|
|
242
|
-
secure?: boolean;
|
|
243
|
-
sameSite?: "Strict" | "Lax" | "None";
|
|
244
|
-
}): this;
|
|
243
|
+
set(options: ResponseCookie): this;
|
|
244
|
+
set(key: string, value: string, cookie?: Partial<ResponseCookie>): this;
|
|
245
245
|
/**
|
|
246
246
|
* Delete a cookie by emitting an expired Set-Cookie header.
|
|
247
247
|
*/
|
|
248
|
-
delete(
|
|
249
|
-
|
|
250
|
-
path?: string;
|
|
251
|
-
domain?: string;
|
|
252
|
-
}): this;
|
|
248
|
+
delete(name: string): this;
|
|
249
|
+
delete(options: Omit<ResponseCookie, "value" | "expires">): this;
|
|
253
250
|
get size(): number;
|
|
254
|
-
[Symbol.iterator]():
|
|
251
|
+
[Symbol.iterator](): MapIterator<[string, {
|
|
255
252
|
name: string;
|
|
256
253
|
value: string;
|
|
257
254
|
}]>;
|
|
258
255
|
toString(): string;
|
|
259
256
|
}
|
|
260
257
|
//#endregion
|
|
261
|
-
export { HeadersAccessPhase, HeadersContext, type RequestCookies, VinextHeadersShimState, applyMiddlewareRequestHeaders, consumeDynamicUsage, consumeInvalidDynamicUsageError, consumeRenderRequestApiUsage, cookies, draftMode, getAndClearPendingCookies, getDraftModeCookieHeader, getHeadersAccessPhase, getHeadersContext, headers, headersContextFromRequest, isDraftModeEnabled, isDraftModeRequest, markDynamicUsage, markRenderRequestApiUsage, peekDynamicUsage, peekRenderRequestApiUsage, runWithConnectionProbe, runWithHeadersContext, setHeadersAccessPhase, setHeadersContext, suspendConnectionProbe, throwIfInsideCacheScope, throwIfStaticGenerationAccessError };
|
|
258
|
+
export { HeadersAccessPhase, HeadersContext, type RequestCookies, VinextHeadersShimState, applyMiddlewareRequestHeaders, consumeDynamicUsage, consumeInvalidDynamicUsageError, consumeRenderRequestApiUsage, cookies, draftMode, getActiveDraftModeState, getAndClearPendingCookies, getDraftModeCookieHeader, getHeadersAccessPhase, getHeadersContext, headers, headersContextFromRequest, isDraftModeEnabled, isDraftModeRequest, markDynamicUsage, markRenderRequestApiUsage, peekDynamicUsage, peekRenderRequestApiUsage, runWithConnectionProbe, runWithHeadersContext, runWithIsolatedDynamicUsage, setHeadersAccessPhase, setHeadersContext, suspendConnectionProbe, throwIfInsideCacheScope, throwIfStaticGenerationAccessError };
|