Upgrading next 13 to 14
Unknown13.5.11 → 14.2.35Security15New1Fixed11
SecurityPoints to the Next.js Security Update for details about this security patch.Next.js Security Update ↗
UnknownUpgrade verdict
355 of 366 releases publish no notes, so breaking changes can't be ruled out.
In plain terms
- Some releases in this range publish no notes, so DepDelta can't rule out breaking changes.
- DepDelta found no commit log for them either.
Must act Top 3 of 15 that need code or config changes
next publishes an official migration guide for version 14. It covers more than the release notes do.
Upgrading to Next.js 14 ↗Node.js requirement changed in 14.0.0: >=16.14.0 → >=18.17.0.
Adds graceful-fs ^4.2.11.
Drops watchpack.
Installs 23 packages in all (was 24).
What you must change
Security15
Points to the Next.js Security Update for details about this security patch.
Next has a Denial of Service with Server Components - Incomplete Fix Follow-Up
High · CVSS 7.5Next Vulnerable to Denial of Service with Server Components
High · CVSS 7.5Next.js Improper Middleware Redirect Handling Leads to SSRF
Moderate · CVSS 6.5Next.js Content Injection Vulnerability for Image Optimization
Moderate · CVSS 4.3Next.js Affected by Cache Key Confusion for Image Optimization API Routes
Moderate · CVSS 6.2Information exposure in Next.js dev server due to lack of origin verification
LowNext.js may leak x-middleware-subrequest-id to external hosts
LowContains a security patch for CVE-2025-29927.
Critical · CVSS 9.1Next.js Race Condition to Cache Poisoning
Low · CVSS 3.7Next.js Allows a Denial of Service (DoS) with Server Actions
Moderate · CVSS 5.3Next.js authorization bypass vulnerability
High · CVSS 7.5Next.js Cache Poisoning
High · CVSS 7.5Denial of Service condition in Next.js image optimization
Moderate · CVSS 5.9Next.js Server-Side Request Forgery in Server Actions
High · CVSS 7.5API changes
Generated by DepDelta from published .d.ts files. Not mixed with prose notes.
- removed:
export { revalidatePath } from 'next/dist/server/web/spec-extension/revalidate-path' - removed:
export { revalidateTag } from 'next/dist/server/web/spec-extension/revalidate-tag' - added:
export { revalidatePath } from 'next/dist/server/web/spec-extension/revalidate' - added:
export { revalidateTag } from 'next/dist/server/web/spec-extension/revalidate' - added:
export { unstable_noStore } from 'next/dist/server/web/spec-extension/unstable-no-store'
- removed:
property Window.__NEXT_PRELOADREADY?: (ids?: (string | number)[]) => Promise<void> - removed:
property Window.__PRERENDER_MANIFEST?: string - added:
property Window.__INTERCEPTION_ROUTE_REWRITE_MANIFEST?: string - added:
property Window.__NEXT_FONT_MANIFEST?: any - added:
property Window.__REACT_LOADABLE_MANIFEST?: any - added:
property Window.__RSC_MANIFEST?: any - added:
property Window.__RSC_SERVER_MANIFEST?: any - added:
property Window.__SUBRESOURCE_INTEGRITY_MANIFEST?: string - added:
var __next_log_error__: undefined | ((err: unknown) => void)
- added:
export * from '../pages/_app' - added:
export { default } from '../pages/_app'
- added:
export * from '../shared/lib/app-dynamic' - added:
export { default } from '../shared/lib/app-dynamic'
- added:
export * from '../shared/lib/constants'
- added:
export * from '../pages/_document' - added:
export { default } from '../pages/_document'
- added:
export * from '../shared/lib/dynamic' - added:
export { default } from '../shared/lib/dynamic'
- added:
export * from '../shared/lib/head' - added:
export { default } from '../shared/lib/head'
- added:
export * from '../client/components/headers'
- added:
export * from '../shared/lib/image-external' - added:
export { default } from '../shared/lib/image-external'
- added:
export * from '../client/link' - added:
export { default } from '../client/link'
- added:
export * from '../client/components/navigation'
- added:
export * from '../client/components/navigation.react-server'
- added:
export * from '../server/og/image-response'
- added:
export * from '../client/router' - added:
export { default } from '../client/router'
- added:
export * from '../client/script' - added:
export { default } from '../client/script'
- added:
export * from '../server/web/exports/index'
- removed:
property MiddlewareConfig.matchers?: MiddlewareMatcher[] - changed:
function getPageStaticInfo(params: { pageFilePath: string; nextConfig: Partial<NextConfig>; isDev?: boolean; page?: string; pageType: 'pages' | 'app' | 'root' }): Promise<PageStaticInfo> → function getPageStaticInfo(params: { pageFilePath: string; nextConfig: Partial<NextConfig>; isDev?: boolean; page?: string; pageType: PAGE_TYPES }): Promise<PageStaticInfo> - changed:
function getRSCModuleInformation(source: string, isServerLayer: boolean): RSCMeta → function getRSCModuleInformation(source: string, isReactServerLayer: boolean): RSCMeta - changed:
property PageStaticInfo.middleware?: MiddlewareConfig → property PageStaticInfo.middleware?: MiddlewareConfigParsed - added:
interface MiddlewareConfigParsed extends Omit<MiddlewareConfig, 'matcher'> - added:
property MiddlewareConfig.matcher?: string | string[] | MiddlewareMatcher[] - added:
property MiddlewareConfigParsed.matchers?: MiddlewareMatcher[]
- added:
property NextBabelLoaderOptions.srcDir: string
- changed:
const NextBuildContext: Partial<{ compilerIdx?: number; pluginState: Record<string, any>; dir: string; buildId: string; config: NextConfigComplete; appDir: string; pagesDir: string; r… → const NextBuildContext: Partial<{ compilerIdx?: number; pluginState: Record<string, any>; dir: string; buildId: string; encryptionKey: string; config: NextConfigComplete; appDir: stri… - added:
index MappedPages[page: string]: string - added:
interface MappedPages
- changed:
function collectBuildTraces({ dir, config, distDir, pageKeys, pageInfos, staticPages, nextBuildSpan, hasSsrAmpPages, buildTraceContext, outputFileTracingRoot }: { dir: string; distDir: string; pageKeys: { app?: string[]; pages: string[] }; staticPages: string[]; hasSsrAmpPages: boolean; outputFileTracingRoot: string; pageInfos: [string, PageInfo][]; nextBuildSpan?: Span; config: NextConfigComplet… → function collectBuildTraces({ dir, config, distDir, pageInfos, staticPages, nextBuildSpan, hasSsrAmpPages, buildTraceContext, outputFileTracingRoot }: { dir: string; distDir: string; staticPages: string[]; hasSsrAmpPages: boolean; outputFileTracingRoot: string; pageInfos: PageInfos | SerializedPageInfos; nextBuildSpan?: Span; config: NextConfigComplete; buildTraceContext?: BuildTraceContext }): P…
- changed:
function runCompiler(config: webpack.Configuration, { runWebpackSpan, inputFileSystem }: { runWebpackSpan: Span; inputFileSystem?: any }): Promise<[result: CompilerResult, inputFileSystem?: any]> → function runCompiler(config: webpack.Configuration, { runWebpackSpan, inputFileSystem }: { runWebpackSpan: Span; inputFileSystem?: webpack.Compiler['inputFileSystem'] }): Promise<[result: CompilerResult, inputFileSystem?: webpack.Compiler['inputFileSystem']]>
- added:
function createAppRouterApiAliases(isServerOnlyLayer: boolean): Record<string, string> - added:
function createNextApiEsmAliases(): Record<string, string> - added:
function createRSCAliases(bundledReactChannel: string, { layer, isEdgeServer, reactProductionProfiling }: { layer: WebpackLayerName; isEdgeServer: boolean; reactProductionProfiling: boolean }): CompilerAliases - added:
function createServerOnlyClientOnlyAliases(isServer: boolean): CompilerAliases - added:
function createWebpackAliases({ distDir, isClient, isEdgeServer, isNodeServer, dev, config, pagesDir, appDir, dir, reactProductionProfiling, hasRewrites }: { distDir: string; isClient: boolean; isEdgeServer: boolean; isNodeServer: boolean; dev: boolean; config: NextConfigComplete; pagesDir: string | undefined; appDir: string | undefined; dir: string; reactProductionProfiling: boolean; hasRewrites… - added:
function getOptimizedModuleAliases(): CompilerAliases
- changed:
function createPagesMapping({ isDev, pageExtensions, pagePaths, pagesType, pagesDir }: { isDev: boolean; pageExtensions: string[]; pagePaths: string[]; pagesType: 'pages' | 'root' | 'app'; pagesDir: string | undefined }): { [page: string]: string } → function createPagesMapping({ isDev, pageExtensions, pagePaths, pagesType, pagesDir }: { isDev: boolean; pageExtensions: PageExtensions; pagePaths: string[]; pagesType: PAGE_TYPES; pagesDir: string | undefined }): MappedPages - changed:
function getEdgeServerEntry(opts: { rootDir: string; absolutePagePath: string; buildId: string; bundlePath: string; config: NextConfigComplete; isDev: boolean; isServerComponent: boolean; page: string; pages: { [page: string]: string }; middleware?: Partial<MiddlewareConfig>; pagesType: 'app' | 'pages' | 'root'; appDirLoader?: string; hasInstrumentationHook?: boolean; preferredRegion: string | st… → function getEdgeServerEntry(opts: { rootDir: string; absolutePagePath: string; buildId: string; bundlePath: string; config: NextConfigComplete; isDev: boolean; isServerComponent: boolean; page: string; pages: MappedPages; middleware?: Partial<MiddlewareConfigParsed>; pagesType: PAGE_TYPES; appDirLoader?: string; hasInstrumentationHook?: boolean; preferredRegion: string | string[] | undefined; mid… - changed:
function getPageFromPath(pagePath: string, pageExtensions: string[]): string → function getPageFromPath(pagePath: string, pageExtensions: PageExtensions): string - changed:
function getStaticInfoIncludingLayouts({ isInsideAppDir, pageExtensions, pageFilePath, appDir, config, isDev, page }: { isInsideAppDir: boolean; pageExtensions: string[]; pageFilePath: string; appDir: string | undefined; config: NextConfigComplete; isDev: boolean | undefined; page: string }): Promise<PageStaticInfo> → function getStaticInfoIncludingLayouts({ isInsideAppDir, pageExtensions, pageFilePath, appDir, config, isDev, page }: { isInsideAppDir: boolean; pageExtensions: PageExtensions; pageFilePath: string; appDir: string | undefined; config: NextConfigComplete; isDev: boolean | undefined; page: string }): Promise<PageStaticInfo> - changed:
function runDependingOnPageType<T>(params: { onClient: () => T; onEdgeServer: () => T; onServer: () => T; page: string; pageRuntime: ServerRuntime; pageType?: 'app' | 'pages' | 'root' }): void → function runDependingOnPageType<T>(params: { onClient: () => T; onEdgeServer: () => T; onServer: () => T; page: string; pageRuntime: ServerRuntime; pageType?: PAGE_TYPES }): void - changed:
function sortByPageExts(pageExtensions: string[]): (a: string, b: string) => number → function sortByPageExts(pageExtensions: PageExtensions): (a: string, b: string) => number - changed:
property CreateEntrypointsParams.appPaths?: Record<string, string> → property CreateEntrypointsParams.appPaths?: MappedPages - changed:
property CreateEntrypointsParams.pageExtensions: string[] → property CreateEntrypointsParams.pageExtensions: PageExtensions - changed:
property CreateEntrypointsParams.pages: { [page: string]: string } → property CreateEntrypointsParams.pages: MappedPages - changed:
property CreateEntrypointsParams.rootPaths?: Record<string, string> → property CreateEntrypointsParams.rootPaths?: MappedPages - added:
function getInstrumentationEntry(opts: { absolutePagePath: string; isEdgeServer: boolean; isDev: boolean }): { import: string; filename: string; layer: 'instrument' }
- changed:
function isResourceInPackages(resource: string, packageNames?: string[], packageDirMapping?: Map<string, string>): boolean | undefined → function isResourceInPackages(resource: string, packageNames?: string[], packageDirMapping?: Map<string, string>): boolean - changed:
function makeExternalHandler({ config, optOutBundlingPackageRegex, dir, hasAppDir }: { config: NextConfigComplete; optOutBundlingPackageRegex: RegExp; dir: string; hasAppDir: boolean }): (context: string, request: string, dependencyType: string, layer: WebpackLayerName | null, getResolve: (options: any) => (resolveContext: string, resolveRequest: string) => Promise<[string | null, boolean]>) => P… → function makeExternalHandler({ config, optOutBundlingPackages, optOutBundlingPackageRegex, dir }: { config: NextConfigComplete; optOutBundlingPackages: string[]; optOutBundlingPackageRegex: RegExp; dir: string }): (context: string, request: string, dependencyType: string, layer: WebpackLayerName | null, getResolve: (options: any) => (resolveContext: string, resolveRequest: string) => Promise<[str… - changed:
function resolveExternal(dir: string, esmExternalsConfig: NextConfigComplete['experimental']['esmExternals'], context: string, request: string, isEsmRequested: boolean, hasAppDir: boolean, getResolve: (options: any) => (resolveContext: string, resolveRequest: string) => Promise<[string | null, boolean]>, isLocalCallback?: (res: string) => any, baseResolveCheck?: boolean, esmResolveOptions?: any,… → function resolveExternal(dir: string, esmExternalsConfig: NextConfigComplete['experimental']['esmExternals'], context: string, request: string, isEsmRequested: boolean, _optOutBundlingPackages: string[], getResolve: (options: ResolveOptions) => (resolveContext: string, resolveRequest: string) => Promise<[string | null, boolean]>, isLocalCallback?: (res: string) => any, baseResolveCheck?: boolean,…
- removed:
function buildCustomRoute(type: 'header', route: Header): ManifestHeaderRoute - removed:
function buildCustomRoute(type: 'redirect', route: Redirect, restrictedRedirectPaths: string[]): ManifestRedirectRoute - removed:
function buildCustomRoute(type: 'rewrite', route: Rewrite): ManifestRewriteRoute - changed:
default function build(dir: string, reactProductionProfiling: boolean | undefined, debugOutput: boolean | undefined, runLint: boolean | undefined, noMangling: boolean | undefined, appDirOnly: boolean | undefined, turboNextBuild: boolean | undefined, turboNextBuildRoot: null | undefined, buildMode: 'default' | 'experimental-compile' | 'experimental-generate'): Promise<void> → default function build(dir: string, reactProductionProfiling: boolean | undefined, debugOutput: boolean | undefined, runLint: boolean | undefined, noMangling: boolean | undefined, appDirOnly: boolean | undefined, turboNextBuild: boolean | undefined, experimentalBuildMode: 'default' | 'compile' | 'generate'): Promise<void> - changed:
interface DynamicSsgRoute extends ExperimentalBypassForInfo, DataRouteRouteInfo → interface DynamicSsgRoute extends ExperimentalBypassForInfo, DataRouteRouteInfo, ExperimentalPPRInfo - changed:
interface SsgRoute extends ExperimentalBypassForInfo, DataRouteRouteInfo → interface SsgRoute extends ExperimentalBypassForInfo, DataRouteRouteInfo, ExperimentalPPRInfo - added:
property DynamicSsgRoute.prefetchDataRouteRegex: string | null | undefined
- changed:
function loadEntrypoint(entrypoint: 'app-page' | 'app-route' | 'edge-app-route' | 'middleware' | 'pages' | 'pages-api', replacements: Record<`VAR_${string}`, string>, injections?: Record<string, string>): Promise<string> → function loadEntrypoint(entrypoint: 'app-page' | 'app-route' | 'edge-app-route' | 'edge-ssr' | 'edge-ssr-app' | 'middleware' | 'pages' | 'pages-api', replacements: Record<`VAR_${string}`, string>, injections?: Record<string, string>, imports?: Record<string, string | null>): Promise<string>
- changed:
default function loadJsConfig(dir: string, config: NextConfigComplete): Promise<{ useTypeScript: boolean; jsConfig: { compilerOptions: Record<string, any> } | undefined; resolvedBaseUrl: string | undefined }> → default function loadJsConfig(dir: string, config: NextConfigComplete): Promise<{ useTypeScript: boolean; jsConfig: JsConfig; resolvedBaseUrl: ResolvedBaseUrl }> - added:
type JsConfig = { compilerOptions: Record<string, any> } | undefined - added:
type ResolvedBaseUrl = { baseUrl: string; isImplicit: boolean } | undefined
- removed:
function renderToStaticMarkup(): void - removed:
function renderToString(): void
- added:
function normalizeCatchAllRoutes(appPaths: Record<string, string[]>, normalizer?: AppPathnameNormalizer): void
- changed:
function reportTrigger(trigger: string): void → function reportTrigger(trigger: string, url?: string): void
- changed:
const prefixes: { readonly wait: string; readonly error: string; readonly warn: string; readonly ready: string; readonly info: string; readonly event: string; readonly trace:… → const prefixes: { readonly wait: string; readonly error: string; readonly warn: string; readonly ready: '▲'; readonly info: string; readonly event: string; readonly trace: str…
- added:
function formatTrigger(trigger: string): string
- added:
type PageExtensions = string[]
- added:
const createProgress: (total: number, label: string) => () => void
- changed:
default function createSpinner(text: string, options?: ora.Options, logFn?: (...data: any[]) => void): ora.Ora | undefined → default function createSpinner(text: string, options?: ora.Options, logFn?: (...data: any[]) => void): (ora.Ora & { setText: (text: string) => void }) | undefined
- added:
function __nextjs_pure<T>(expr: T): T
- removed:
const teardownCrashReporter: () => void - removed:
enum ServerClientChangeType - removed:
interface ServerClientChange - removed:
interface Update - removed:
member ServerClientChangeType.Both = 'Both' - removed:
member ServerClientChangeType.Client = 'Client' - removed:
member ServerClientChangeType.Server = 'Server' - removed:
method Endpoint.changed(): Promise<AsyncIterableIterator<TurbopackResult<ServerClientChange>>> - removed:
property Binding.teardownCrashReporter?: any - removed:
property Issue.category: string - removed:
property ProjectOptions.serverAddr: string - removed:
property ServerClientChange.type: ServerClientChangeType - removed:
property Update.update: unknown - changed:
function createDefineEnv({ allowedRevalidateHeaderKeys, clientRouterFilters, config, dev, distDir, fetchCacheKeyPrefix, hasRewrites, middlewareMatchers, previewModeId }: Omit<DefineEnvPluginOptions, 'isClient' | 'isNodeOrEdgeCompilation' | 'isEdgeServer' | 'isNodeServer'>): DefineEnv → function createDefineEnv({ isTurbopack, clientRouterFilters, config, dev, distDir, fetchCacheKeyPrefix, hasRewrites, middlewareMatchers }: Omit<DefineEnvPluginOptions, 'isClient' | 'isNodeOrEdgeCompilation' | 'isEdgeServer' | 'isNodeServer'>): DefineEnv - changed:
function loadBindings(): Promise<Binding> → function loadBindings(useWasmBinary?: boolean): Promise<Binding> - changed:
method Project.updateInfoSubscribe(): AsyncIterableIterator<TurbopackResult<UpdateInfo>> → method Project.updateInfoSubscribe(aggregationMs: number): AsyncIterableIterator<TurbopackResult<UpdateMessage>> - changed:
property Issue.description: string → property Issue.description?: StyledString - changed:
property Issue.detail: string → property Issue.detail?: StyledString - changed:
property Issue.source?: { source: { ident: string; content?: string }; start: { line: number; column: number }; end: { line: number; column: number } } → property Issue.source?: { source: { ident: string; content?: string }; range?: { start: { line: number; column: number }; end: { line: number; column: number } } } - changed:
property Issue.title: string → property Issue.title: StyledString - changed:
type Route = { type: 'conflict' } | { type: 'app-page'; htmlEndpoint: Endpoint; rscEndpoint: Endpoint } | { type: 'app-route'; endpoint: Endpoint } | { type: 'page'; htmlEn… → type Route = { type: 'conflict' } | { type: 'app-page'; pages: { originalName: string; htmlEndpoint: Endpoint; rscEndpoint: Endpoint }[] } | { type: 'app-route'; originalNa… - changed:
type WrittenEndpoint = { type: 'nodejs'; entryPath: string; serverPaths: ServerPath[]; config: EndpointConfig } | { type: 'edge'; files: string[]; serverPaths: ServerPath[]; globalVa… → type WrittenEndpoint = { type: 'nodejs'; entryPath: string; clientPaths: string[]; serverPaths: ServerPath[]; config: EndpointConfig } | { type: 'edge'; clientPaths: string[]; server… - added:
interface Instrumentation - added:
interface TurbopackStackFrame - added:
method Endpoint.clientChanged(): Promise<AsyncIterableIterator<TurbopackResult>> - added:
method Endpoint.serverChanged(includeIssues: boolean): Promise<AsyncIterableIterator<TurbopackResult>> - added:
method Project.getSourceForAsset(filePath: string): Promise<string | null> - added:
method Project.traceSource(stackFrame: TurbopackStackFrame): Promise<TurbopackStackFrame | null> - added:
property Binding.css: { lightning: { transform(transformOptions: any): Promise<any>; transformStyleAttr(attrOptions: any): Promise<any> } } - added:
property Entrypoints.instrumentation?: Instrumentation - added:
property Instrumentation.edge: Endpoint - added:
property Instrumentation.nodeJs: Endpoint - added:
property Issue.stage: string - added:
property ProjectOptions.buildId: string - added:
property ProjectOptions.dev: boolean - added:
property ProjectOptions.encryptionKey: string - added:
property ProjectOptions.previewProps: __ApiPreviewProps - added:
property TurbopackStackFrame.column?: number | null - added:
property TurbopackStackFrame.file: string - added:
property TurbopackStackFrame.isInternal?: boolean - added:
property TurbopackStackFrame.isServer: boolean - added:
property TurbopackStackFrame.line?: number - added:
property TurbopackStackFrame.methodName?: string - added:
type StyledString = { type: 'text'; value: string } | { type: 'code'; value: string } | { type: 'strong'; value: string } | { type: 'stack'; value: StyledString[] } | { type: 'lin… - added:
type Update = IssuesUpdate | PartialUpdate - added:
type UpdateMessage = { updateType: 'start' } | { updateType: 'end'; value: UpdateInfo }
- removed:
property JestTransformerConfig.hasServerComponents?: boolean - changed:
property JestTransformerConfig.resolvedBaseUrl?: string → property JestTransformerConfig.resolvedBaseUrl?: ResolvedBaseUrl - added:
property JestTransformerConfig.serverComponents?: boolean
- removed:
type BundleType = 'client' | 'server' | 'default' - changed:
function getJestSWCOptions({ isServer, filename, esm, modularizeImports, swcPlugins, compilerOptions, jsConfig, resolvedBaseUrl, pagesDir, hasServerComponents }: { isServer: boolean; filename: string; esm: boolean; modularizeImports?: NextConfig['modularizeImports']; swcPlugins: ExperimentalConfig['swcPlugins']; compilerOptions: NextConfig['compiler']; jsConfig: any; resolvedBaseUrl?: string; pag… → function getJestSWCOptions({ isServer, filename, esm, modularizeImports, swcPlugins, compilerOptions, jsConfig, resolvedBaseUrl, pagesDir }: { isServer: boolean; filename: string; esm: boolean; modularizeImports?: NextConfig['modularizeImports']; swcPlugins: ExperimentalConfig['swcPlugins']; compilerOptions: NextConfig['compiler']; jsConfig: any; resolvedBaseUrl?: ResolvedBaseUrl; pagesDir?: stri… - changed:
function getLoaderSWCOptions({ filename, development, isServer, pagesDir, appDir, isPageFile, hasReactRefresh, modularizeImports, optimizeServerReact, optimizePackageImports, swcPlugins, compilerOptions, jsConfig, supportedBrowsers, swcCacheDir, relativeFilePathFromRoot, hasServerComponents, isServerLayer, isServerActionsEnabled, bundleTarget }: { filename: string; development: boolean; isServer:… → function getLoaderSWCOptions({ filename, development, isServer, pagesDir, appDir, isPageFile, hasReactRefresh, modularizeImports, optimizeServerReact, optimizePackageImports, swcPlugins, compilerOptions, jsConfig, supportedBrowsers, swcCacheDir, relativeFilePathFromRoot, serverComponents, bundleLayer, esm }: { filename: string; development: boolean; isServer: boolean; pagesDir?: string; appDir?:…
- removed:
export { headerHooks } - removed:
export { staticGenerationBailout } - added:
function patchFetch(): void
- added:
const ComponentMod: any - added:
default function nHandler(opts: { page: string; request: RequestData }): Promise<import('../../server/web/types').FetchEventResult>
- added:
const ComponentMod: any - added:
default function nHandler(opts: { page: string; request: RequestData }): Promise<import('../../server/web/types').FetchEventResult>
- added:
function envProxy(envVars: EnvVars): RestoreOriginalFunction
- added:
function turborepoTraceAccess<T>(f: () => T | Promise<T>, parent: TurborepoAccessTraceResult): Promise<T> | T - added:
function writeTurborepoAccessTraceResult({ distDir, traces }: { distDir: string; traces: Array<TurborepoAccessTraceResult> }): Promise<void>
- added:
export { SerializableTurborepoAccessTraceResult } from './types' - added:
export { TurborepoAccessTraceResult } from './result' - added:
export { turborepoTraceAccess } from './helpers' - added:
export { writeTurborepoAccessTraceResult } from './helpers'
- added:
class TurborepoAccessTraceResult - added:
constructor TurborepoAccessTraceResult(envVars?: EnvVars, addresses?: Addresses, fsPaths?: FS) - added:
method TurborepoAccessTraceResult.merge(other: TurborepoAccessTraceResult): this - added:
method TurborepoAccessTraceResult.serialize(): SerializableTurborepoAccessTraceResult - added:
method TurborepoAccessTraceResult.toPublicTrace(): PublicTurborepoAccessTraceResult - added:
static method TurborepoAccessTraceResult.fromSerialized(serialized: SerializableTurborepoAccessTraceResult): TurborepoAccessTraceResult
- added:
function tcpProxy(addresses: Addresses): RestoreOriginalFunction
- added:
interface Address - added:
property Address.addr: string - added:
property Address.port: string - added:
type Addresses = Array<Address> - added:
type EnvVars = Set<string | Symbol> - added:
type FS = Set<string> - added:
type PublicTurborepoAccessTraceResult = Readonly<{ filePaths: Array<string>; network: boolean; envVarKeys: Array<string> }> - added:
type RestoreOriginalFunction = () => void - added:
type SerializableTurborepoAccessTraceResult = Readonly<{ fs: Array<string>; addresses: Addresses; envVars: Array<string> }>
- removed:
const collectGenerateParams: (segment: any, parentSegments?: string[], generateParams?: GenerateParams) => Promise<GenerateParams> - removed:
function isWebpackServerLayer(layer: WebpackLayerName | null | undefined): boolean - removed:
property PageInfo.isSsg: boolean - removed:
property PageInfo.static: boolean - removed:
type GenerateParams = Array<{ config?: AppConfig; isDynamicSegment?: boolean; segmentPath: string; getStaticPaths?: GetStaticPaths; generateStaticParams?: any; isLayout?: boolean }> - changed:
function buildAppStaticPaths({ page, distDir, configFileName, generateParams, isrFlushToDisk, incrementalCacheHandlerPath, requestHeaders, maxMemoryCacheSize, fetchCacheKeyPrefix, staticGenerationAsyncStorage, serverHooks }: { page: string; configFileName: string; generateParams: GenerateParams; incrementalCacheHandlerPath?: string; distDir: string; isrFlushToDisk?: boolean; fetchCacheKeyPrefix?:… → function buildAppStaticPaths({ dir, page, distDir, configFileName, generateParams, isrFlushToDisk, cacheHandler, requestHeaders, maxMemoryCacheSize, fetchCacheKeyPrefix, ppr, ComponentMod }: { dir: string; page: string; configFileName: string; generateParams: GenerateParamsResults; distDir: string; isrFlushToDisk?: boolean; fetchCacheKeyPrefix?: string; cacheHandler?: string; maxMemoryCacheSize?:… - changed:
function buildStaticPaths({ page, getStaticPaths, staticPathsResult, configFileName, locales, defaultLocale, appDir }: { page: string; getStaticPaths?: GetStaticPaths; staticPathsResult?: UnwrapPromise<ReturnType<GetStaticPaths>>; configFileName: string; locales?: string[]; defaultLocale?: string; appDir?: boolean }): Promise<Omit<UnwrapPromise<ReturnType<GetStaticPaths>>, 'paths'> & { paths: str… → function buildStaticPaths({ page, getStaticPaths, staticPathsResult, configFileName, locales, defaultLocale, appDir }: { page: string; getStaticPaths?: GetStaticPaths; staticPathsResult?: GetStaticPathsResult; configFileName: string; locales?: string[]; defaultLocale?: string; appDir?: boolean }): Promise<Omit<GetStaticPathsResult, 'paths'> & { paths: string[]; encodedPaths: string[] }> - changed:
function getDefinedNamedExports(page: string, distDir: string, runtimeEnvConfig: any): Promise<ReadonlyArray<string>> → function getDefinedNamedExports({ page, distDir, runtimeEnvConfig }: { page: string; distDir: string; runtimeEnvConfig: any }): Promise<ReadonlyArray<string>> - changed:
function hasCustomGetInitialProps(page: string, distDir: string, runtimeEnvConfig: any, checkingApp: boolean): Promise<boolean> → function hasCustomGetInitialProps({ page, distDir, runtimeEnvConfig, checkingApp }: { page: string; distDir: string; runtimeEnvConfig: any; checkingApp: boolean }): Promise<boolean> - changed:
function isPageStatic({ page, distDir, configFileName, runtimeEnvConfig, httpAgentOptions, locales, defaultLocale, parentId, pageRuntime, edgeInfo, pageType, originalAppPath, isrFlushToDisk, maxMemoryCacheSize, incrementalCacheHandlerPath }: { page: string; distDir: string; configFileName: string; runtimeEnvConfig: any; httpAgentOptions: NextConfigComplete['httpAgentOptions']; locales?: string[];… → function isPageStatic({ dir, page, distDir, configFileName, runtimeEnvConfig, httpAgentOptions, locales, defaultLocale, parentId, pageRuntime, edgeInfo, pageType, originalAppPath, isrFlushToDisk, maxMemoryCacheSize, cacheHandler, ppr }: { dir: string; page: string; distDir: string; configFileName: string; runtimeEnvConfig: any; httpAgentOptions: NextConfigComplete['httpAgentOptions']; locales?: s… - changed:
function printTreeView(lists: { pages: ReadonlyArray<string>; app?: ReadonlyArray<string> }, pageInfos: Map<string, PageInfo>, { distPath, buildId, pagesDir, pageExtensions, buildManifest, appBuildManifest, middlewareManifest, useStaticPages404, gzipSize }: { distPath: string; buildId: string; pagesDir?: string; pageExtensions: string[]; buildManifest: BuildManifest; appBuildManifest?: AppBuildMa… → function printTreeView(lists: { pages: ReadonlyArray<string>; app: ReadonlyArray<string> | undefined }, pageInfos: Map<string, PageInfo>, { distPath, buildId, pagesDir, pageExtensions, buildManifest, appBuildManifest, middlewareManifest, useStaticPages404, gzipSize }: { distPath: string; buildId: string; pagesDir?: string; pageExtensions: PageExtensions; buildManifest: BuildManifest; appBuildMani… - changed:
type AppConfig = { revalidate?: number | false; dynamicParams?: true | false; dynamic?: 'auto' | 'error' | 'force-static' | 'force-dynamic'; fetchCache?: 'force-cache' | 'only-… → type AppConfig = { revalidate?: number | false; dynamicParams?: true | false; dynamic?: AppConfigDynamic; fetchCache?: 'force-cache' | 'only-cache'; preferredRegion?: string } - added:
function collectGenerateParams(tree: LoaderTree): Promise<GenerateParamsResults> - added:
function deserializePageInfos(input: SerializedPageInfos): PageInfos - added:
function isWebpackClientOnlyLayer(layer: WebpackLayerName | null | undefined): boolean - added:
function isWebpackServerOnlyLayer(layer: WebpackLayerName | null | undefined): boolean - added:
function serializePageInfos(input: PageInfos): SerializedPageInfos - added:
property PageInfo.hasEmptyPrelude?: boolean - added:
property PageInfo.hasPostponed?: boolean - added:
property PageInfo.isDynamicAppRoute?: boolean - added:
property PageInfo.isPPR: boolean - added:
property PageInfo.isSSG: boolean - added:
property PageInfo.isStatic: boolean - added:
type AppConfigDynamic = 'auto' | 'error' | 'force-static' | 'force-dynamic' - added:
type GenerateParamsResults = GenerateParamsResult[] - added:
type PageInfos = Map<string, PageInfo> - added:
type SerializedPageInfos = [string, PageInfo][]
- changed:
function webpackBuildImpl(compilerName?: keyof typeof COMPILER_INDEXES): Promise<{ duration: number; pluginState: any; buildTraceContext?: BuildTraceContext }> → function webpackBuildImpl(compilerName: keyof typeof COMPILER_INDEXES | null): Promise<{ duration: number; pluginState: any; buildTraceContext?: BuildTraceContext; telemetryState?: TelemetryPluginState }> - changed:
function workerMain(workerData: { compilerName: keyof typeof COMPILER_INDEXES; buildContext: typeof NextBuildContext }): Promise<{ duration: number; pluginState: any; buildTraceContext?: BuildTraceContext | undefined }> → function workerMain(workerData: { compilerName: keyof typeof COMPILER_INDEXES; buildContext: typeof NextBuildContext; traceState: TraceState }): Promise<Awaited<ReturnType<typeof webpackBuildImpl>> & { debugTraceEvents: TraceEvent[] }>
- changed:
function webpackBuild(compilerNames?: typeof ORDERED_COMPILER_NAMES): Promise<any> → function webpackBuild(withWorker: boolean, compilerNames: typeof ORDERED_COMPILER_NAMES | null): ReturnType<typeof webpackBuildWithWorker>
- changed:
default function getBaseWebpackConfig(dir: string, { buildId, config, compilerType, dev, entrypoints, isDevFallback, pagesDir, reactProductionProfiling, rewrites, originalRewrites, originalRedirects, runWebpackSpan, appDir, middlewareMatchers, noMangling, jsConfig, resolvedBaseUrl, supportedBrowsers, clientRouterFilters, previewModeId, fetchCacheKeyPrefix, allowedRevalidateHeaderKeys }: { buildId: string… → default function getBaseWebpackConfig(dir: string, { buildId, encryptionKey, config, compilerType, dev, entrypoints, isDevFallback, pagesDir, reactProductionProfiling, rewrites, originalRewrites, originalRedirects, runWebpackSpan, appDir, middlewareMatchers, noMangling, jsConfig, resolvedBaseUrl, supportedBrowsers, clientRouterFilters, fetchCacheKeyPrefix, edgePreviewProps }: { buildId: string; encryptio… - changed:
function loadProjectInfo({ dir, config, dev }: { dir: string; config: NextConfigComplete; dev: boolean }): Promise<{ jsConfig: { compilerOptions: Record<string, any> } | undefined; resolvedBaseUrl: string | undefined; supportedBrowsers: string[] | undefined }> → function loadProjectInfo({ dir, config, dev }: { dir: string; config: NextConfigComplete; dev: boolean }): Promise<{ jsConfig: JsConfig; resolvedBaseUrl: ResolvedBaseUrl; supportedBrowsers: string[] | undefined }> - added:
const NEXT_PROJECT_ROOT: string - added:
const NEXT_PROJECT_ROOT_DIST: string - added:
const babelIncludeRegexes: RegExp[] - added:
function hasExternalOtelApiPackage(): boolean
- added:
const edgeConditionNames: string[] - added:
function getMainField(compilerType: CompilerNameValues, preferEsm: boolean): string[]
- added:
function dashesCamelCase(str: string): string - added:
function normalizeSourceMapForRuntime(map: any, loaderContext: any): string
- added:
function getExportCode(exports: CssExport[], replacements: ApiReplacement[], options: any): string - added:
function getImportCode(imports: CssImport[], options: any): string - added:
function getModuleCode(result: { map: any; css: any }, api: ApiParam[], replacements: ApiReplacement[], options: any, loaderContext: LoaderContext<any>): string - added:
interface ApiParam - added:
interface ApiReplacement - added:
interface CssExport - added:
interface CssImport - added:
property ApiParam.dedupe?: boolean - added:
property ApiParam.importName?: string - added:
property ApiParam.index?: number - added:
property ApiParam.layer?: string - added:
property ApiParam.media?: string - added:
property ApiParam.supports?: string - added:
property ApiParam.url?: string - added:
property ApiReplacement.hash?: string - added:
property ApiReplacement.importName: string - added:
property ApiReplacement.localName?: string - added:
property ApiReplacement.needQuotes?: boolean - added:
property ApiReplacement.replacementName: string - added:
property CssExport.name: string - added:
property CssExport.value: string - added:
property CssImport.icss?: boolean - added:
property CssImport.importName: string - added:
property CssImport.index?: number - added:
property CssImport.type?: 'url' | string - added:
property CssImport.url: string
- added:
default LightningCssLoader - added:
export { LightningCssMinifyPlugin } from './minify'
- added:
enum ECacheKey - added:
member ECacheKey.loader = 'loader' - added:
member ECacheKey.minify = 'minify'
- added:
const raw = true - added:
function LightningCssLoader(this: LoaderContext<any>, source: string, prevMap?: Record<string, any>): Promise<void>
- added:
class LightningCssMinifyPlugin - added:
constructor LightningCssMinifyPlugin(opts?: any) - added:
method LightningCssMinifyPlugin.apply(compiler: Compiler): void
- added:
const getTargets: (opts: { targets?: string[]; key: any }) => any
- changed:
function createStaticMetadataFromRoute(resolvedDir: string, { segment, metadataResolver, isRootLayoutOrRootPage, pageExtensions, basePath }: { segment: string; metadataResolver: MetadataResolver; isRootLayoutOrRootPage: boolean; pageExtensions: string[]; basePath: string }): Promise<CollectingMetadata | null> → function createStaticMetadataFromRoute(resolvedDir: string, { segment, metadataResolver, isRootLayoutOrRootPage, pageExtensions, basePath }: { segment: string; metadataResolver: MetadataResolver; isRootLayoutOrRootPage: boolean; pageExtensions: PageExtensions; basePath: string }): Promise<CollectingMetadata | null>
- changed:
type EdgeSSRLoaderQuery = { absolute500Path: string; absoluteAppPath: string; absoluteDocumentPath: string; absoluteErrorPath: string; absolutePagePath: string; buildId: string; dev: bo… → type EdgeSSRLoaderQuery = { absolute500Path: string; absoluteAppPath: string; absoluteDocumentPath: string; absoluteErrorPath: string; absolutePagePath: string; dev: boolean; isServerCo…
- changed:
function getRender({ dev, page, appMod, pageMod, errorMod, error500Mod, pagesType, Document, buildManifest, prerenderManifest, reactLoadableManifest, renderToHTML, clientReferenceManifest, subresourceIntegrityManifest, serverActionsManifest, serverActionsBodySizeLimit, config, buildId, nextFontManifest, incrementalCacheHandler }: { pagesType: 'app' | 'pages' | 'root'; dev: boolean; page: string;… → function getRender({ dev, page, appMod, pageMod, errorMod, error500Mod, pagesType, Document, buildManifest, reactLoadableManifest, interceptionRouteRewrites, renderToHTML, clientReferenceManifest, subresourceIntegrityManifest, serverActionsManifest, serverActions, config, buildId, nextFontManifest, incrementalCacheHandler }: { pagesType: PAGE_TYPES; dev: boolean; page: string; appMod: any; pageMo…
- added:
default function nextErrorBrowserBinaryLoader(this: webpack.LoaderContext<any>): void
- changed:
default function transformSource(this: any): string → default function transformSource(this: webpack.LoaderContext<NextFlightClientEntryLoaderOptions>): string - changed:
type ClientComponentImports = string[] → type ClientComponentImports = Record<string, Set<string>> - changed:
type NextFlightClientEntryLoaderOptions = { modules: ClientComponentImports; server: boolean | 'true' | 'false' } → type NextFlightClientEntryLoaderOptions = { modules: string[] | string; server: boolean | 'true' | 'false' } - added:
type FlightClientEntryModuleItem = { request: string; ids: string[] }
- removed:
function createActionProxy(id: string, bound: null | any[], action: any, originalAction?: any): void
- added:
function getAssumedSourceType(mod: webpack.Module, sourceType: SourceType): SourceType
- added:
function registerServerReference(id: string, action: any): any
- changed:
function nextMetadataImageLoader(this: any, content: Buffer): Promise<string> → function nextMetadataImageLoader(this: webpack.LoaderContext<Options>, content: Buffer): Promise<string>
- removed:
property SWCLoaderOptions.bundleTarget: BundleType - removed:
property SWCLoaderOptions.hasServerComponents?: boolean - removed:
property SWCLoaderOptions.isServerLayer: boolean - added:
property SWCLoaderOptions.bundleLayer?: WebpackLayerName - added:
property SWCLoaderOptions.esm?: boolean - added:
property SWCLoaderOptions.serverComponents?: boolean - added:
property SWCLoaderOptions.transpilePackages?: string[]
- removed:
const NoopLoader: webpack.LoaderDefinitionFunction - removed:
default NoopLoader
- removed:
function getActions(mod: { resource: string; buildInfo?: any }): undefined | string[] - added:
function getActionsFromBuildInfo(mod: { resource: string; buildInfo?: any }): undefined | string[] - added:
function getLoaderModuleNamedExports(resourcePath: string, context: webpack.LoaderContext<any>): Promise<string[]> - added:
function isActionServerLayerEntryModule(mod: { resource: string; buildInfo?: any }): boolean
- added:
class CssChunkingPlugin - added:
constructor CssChunkingPlugin(strict: boolean) - added:
method CssChunkingPlugin.apply(compiler: Compiler): void
- removed:
property DefineEnvPluginOptions.allowedRevalidateHeaderKeys: string[] | undefined - removed:
property DefineEnvPluginOptions.previewModeId: string | undefined - changed:
function getDefineEnv({ allowedRevalidateHeaderKeys, clientRouterFilters, config, dev, distDir, fetchCacheKeyPrefix, hasRewrites, isClient, isEdgeServer, isNodeOrEdgeCompilation, isNodeServer, middlewareMatchers, previewModeId }: DefineEnvPluginOptions): { 'process.env.__NEXT_EXPERIMENTAL_REACT'?: string | undefined; 'process.env.TURBOPACK': string; 'global.GENTLY'?: string | undefined; 'process.… → function getDefineEnv({ isTurbopack, clientRouterFilters, config, dev, distDir, fetchCacheKeyPrefix, hasRewrites, isClient, isEdgeServer, isNodeOrEdgeCompilation, isNodeServer, middlewareMatchers }: DefineEnvPluginOptions): SerializedDefineEnv - changed:
property DefineEnvPluginOptions.clientRouterFilters?: { staticFilter: ReturnType<import('../../../shared/lib/bloom-filter').BloomFilter['export']>; dynamicFilter: ReturnType<import('../../../shared/lib/bloom-filter').BloomFilter['export']> } → property DefineEnvPluginOptions.clientRouterFilters?: { staticFilter: BloomFilter; dynamicFilter: BloomFilter } - added:
property DefineEnvPluginOptions.isTurbopack: boolean
- removed:
property FlightClientEntryPlugin.serverActionsBodySizeLimit?: SizeLimit - removed:
property FlightClientEntryPlugin.useServerActions: boolean - changed:
method FlightClientEntryPlugin.collectClientActionsFromDependencies({ compilation, dependencies }: { compilation: any; dependencies: ReturnType<typeof webpack.EntryPlugin.createDependency>[] }): Map<string, string[]> → method FlightClientEntryPlugin.collectClientActionsFromDependencies({ compilation, dependencies }: { compilation: webpack.Compilation; dependencies: ReturnType<typeof webpack.EntryPlugin.createDependency>[] }): Map<string, string[]> - changed:
method FlightClientEntryPlugin.collectComponentInfoFromServerEntryDependency({ entryRequest, compilation, resolvedModule }: { entryRequest: string; compilation: any; resolvedModule: any }): { cssImports: CssImports; clientComponentImports: ClientComponentImports; actionImports: [string, string[]][] } → method FlightClientEntryPlugin.collectComponentInfoFromServerEntryDependency({ entryRequest, compilation, resolvedModule }: { entryRequest: string; compilation: webpack.Compilation; resolvedModule: any }): { cssImports: CssImports; clientComponentImports: ClientComponentImports; actionImports: [string, string[]][] } - changed:
method FlightClientEntryPlugin.createActionAssets(compilation: webpack.Compilation, assets: webpack.Compilation['assets']): void → method FlightClientEntryPlugin.createActionAssets(compilation: webpack.Compilation, assets: webpack.Compilation['assets']): Promise<void> - changed:
method FlightClientEntryPlugin.createClientEntries(compiler: webpack.Compiler, compilation: any): Promise<void> → method FlightClientEntryPlugin.createClientEntries(compiler: webpack.Compiler, compilation: webpack.Compilation): Promise<void> - changed:
type ActionManifest = { [key in 'node' | 'edge']: { [actionId: string]: { workers: { [name: string]: string | number }; layer: { [name: string]: string } } } } → type ActionManifest = { encryptionKey: string; node: Actions; edge: Actions } - added:
property FlightClientEntryPlugin.encryptionKey: string
- removed:
property ClientReferenceManifestPlugin.ASYNC_CLIENT_MODULES: Set<string> - changed:
type ClientReferenceManifest = { moduleLoading: { prefix: string; crossOrigin: string | null }; clientModules: ManifestNode; ssrModuleMapping: { [moduleId: string]: ManifestNode }; edgeSSRMo… → type ClientReferenceManifest = { readonly moduleLoading: { prefix: string; crossOrigin: string | null }; clientModules: ManifestNode; ssrModuleMapping: { [moduleId: string]: ManifestNode };…
- changed:
constructor JsConfigPathsPlugin(paths: Paths, resolvedBaseUrl: string) → constructor JsConfigPathsPlugin(paths: Paths, resolvedBaseUrl: ResolvedBaseUrl) - changed:
property JsConfigPathsPlugin.resolvedBaseUrl: string → property JsConfigPathsPlugin.resolvedBaseUrl: ResolvedBaseUrl
- changed:
constructor MiddlewarePlugin({ dev, sriEnabled }: { dev: boolean; sriEnabled: boolean }) → constructor MiddlewarePlugin({ dev, sriEnabled, rewrites, edgeEnvironments }: Options) - changed:
property MiddlewareManifest.version: 2 → property MiddlewareManifest.version: 3 - added:
property EdgeFunctionDefinition.env: Record<string, string>
- changed:
constructor TraceEntryPointsPlugin({ rootDir, appDir, pagesDir, appDirEnabled, traceIgnores, esmExternals, outputFileTracingRoot, turbotrace }: { rootDir: string; appDir: string | undefined; pagesDir: string | undefined; appDirEnabled?: boolean; traceIgnores?: string[]; outputFileTracingRoot?: string; esmExternals?: NextConfigComplete['experimental']['esmExternals']; turbotrace?: NextConfigComple… → constructor TraceEntryPointsPlugin({ rootDir, appDir, pagesDir, optOutBundlingPackages, appDirEnabled, traceIgnores, esmExternals, outputFileTracingRoot, turbotrace }: { rootDir: string; appDir: string | undefined; pagesDir: string | undefined; optOutBundlingPackages: string[]; appDirEnabled?: boolean; traceIgnores?: string[]; outputFileTracingRoot?: string; esmExternals?: NextConfigComplete['exp…
- removed:
property NextJsRequireCacheHotReloader.hasServerComponents: boolean - changed:
constructor NextJsRequireCacheHotReloader(opts: { hasServerComponents: boolean }) → constructor NextJsRequireCacheHotReloader(opts: { serverComponents: boolean }) - added:
property NextJsRequireCacheHotReloader.serverComponents: boolean
- added:
class OptionalPeerDependencyResolverPlugin - added:
method OptionalPeerDependencyResolverPlugin.apply(resolver: Resolver): void
- changed:
constructor ProfilingPlugin({ runWebpackSpan }: { runWebpackSpan: Span }) → constructor ProfilingPlugin({ runWebpackSpan, rootDir }: { runWebpackSpan: Span; rootDir: string }) - added:
property ProfilingPlugin.rootDir: string
- changed:
constructor ReactLoadablePlugin(opts: { filename: string; pagesDir?: string; runtimeAsset?: string; dev: boolean }) → constructor ReactLoadablePlugin(opts: { filename: string; pagesDir?: string; appDir?: string; runtimeAsset?: string; dev: boolean })
- added:
type TelemetryPluginState = { usages: ReturnType<TelemetryPlugin['usages']>; packagesUsedInServerSideProps: ReturnType<TelemetryPlugin['packagesUsedInServerSideProps']> }
- added:
function getDynamicCodeEvaluationError(message: string, module: webpack.NormalModule, compilation: webpack.Compilation, compiler: webpack.Compiler): SimpleWebpackError
- changed:
function traverseModules(compilation: webpack.Compilation, callback: (mod: any, chunk: webpack.Chunk, chunkGroup: (typeof compilation.chunkGroups)[0], modId: string | number) => any, filterChunkGroup?: (chunkGroup: webpack.ChunkGroup) => boolean): void → function traverseModules(compilation: Compilation, callback: (mod: any, chunk: Chunk, chunkGroup: (typeof compilation.chunkGroups)[0], modId: string | null) => any, filterChunkGroup?: (chunkGroup: ChunkGroup) => boolean): void - added:
function formatBarrelOptimizedResource(resource: string, matchResource: string): string - added:
function getModuleReferencesInOrder(module: Module, moduleGraph: ModuleGraph): ModuleGraphConnection[]
- removed:
export * from './utils' - added:
export { getDefinedNamedExports } from './utils' - added:
export { hasCustomGetInitialProps } from './utils' - added:
export { isPageStatic } from './utils'
- changed:
const nextBuild: CliCommand → const nextBuild: (options: NextBuildOptions, directory?: string) => Promise<void>
- removed:
const validArgs: arg.Spec
- changed:
const nextDev: CliCommand → const nextDev: (options: NextDevOptions, portSource: PortSource, directory?: string) => Promise<void>
- removed:
const validArgs: arg.Spec
- changed:
const nextExport: CliCommand → const nextExport: () => never
- removed:
const validArgs: arg.Spec
- changed:
const nextInfo: CliCommand → const nextInfo: (options: NextInfoOptions) => Promise<void>
- removed:
const validArgs: arg.Spec
- changed:
const nextLint: CliCommand → const nextLint: (options: NextLintOptions, directory?: string) => Promise<void>
- removed:
const validArgs: arg.Spec
- changed:
const nextStart: CliCommand → const nextStart: (options: NextStartOptions, directory?: string) => Promise<void>
- removed:
const validArgs: arg.Spec
- changed:
const nextTelemetry: CliCommand → const nextTelemetry: (options: NextTelemetryOptions, arg: string) => void
- removed:
const validArgs: arg.Spec
- added:
const actionAsyncStorage: ActionAsyncStorage
- removed:
const actionAsyncStorage: ActionAsyncStorage - added:
export { actionAsyncStorage }
- changed:
default function AppRouter(props: AppRouterProps & { globalErrorComponent: ErrorComponent }): React.JSX.Element → default function AppRouter(props: AppRouterProps & { globalErrorComponent: ErrorComponent }): import('react/jsx-runtime').JSX.Element - added:
function createEmptyCacheNode(): CacheNode
- removed:
const NEXT_ROUTER_PREFETCH: 'Next-Router-Prefetch' - removed:
const RSC: 'RSC' - removed:
const RSC_VARY_HEADER: 'RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url' - added:
const NEXT_DID_POSTPONE_HEADER: 'x-nextjs-postponed' - added:
const NEXT_ROUTER_PREFETCH_HEADER: 'Next-Router-Prefetch' - added:
const RSC_HEADER: 'RSC'
- changed:
function bailoutToClientRendering(): boolean | never → function bailoutToClientRendering(reason: string): void | never
- removed:
function clientHookInServerComponentError(hookName: string): void | never
- added:
function ClientPageRoot({ Component, props }: { Component: React.ComponentType<any>; props: { [props: string]: any } }): import('react/jsx-runtime').JSX.Element
- changed:
default function DefaultLayout({ children }: { children: React.ReactNode }): React.JSX.Element → default function DefaultLayout({ children }: { children: React.ReactNode }): import('react/jsx-runtime').JSX.Element
- changed:
function DevRootNotFoundBoundary({ children }: { children: React.ReactNode }): React.JSX.Element → function DevRootNotFoundBoundary({ children }: { children: React.ReactNode }): import('react/jsx-runtime').JSX.Element
- changed:
function ErrorBoundary({ errorComponent, errorStyles, children }: ErrorBoundaryProps & { children: React.ReactNode }): JSX.Element → function ErrorBoundary({ errorComponent, errorStyles, errorScripts, children }: ErrorBoundaryProps & { children: React.ReactNode }): JSX.Element - changed:
function GlobalError({ error }: { error: any }): React.JSX.Element → function GlobalError({ error }: { error: any }): import('react/jsx-runtime').JSX.Element - changed:
method ErrorBoundaryHandler.render(): string | number | boolean | React.ReactFragment | React.PromiseLikeOfReactNode | React.JSX.Element | null | undefined → method ErrorBoundaryHandler.render(): React.ReactNode - changed:
property ErrorBoundaryProps.errorComponent: ErrorComponent → property ErrorBoundaryProps.errorComponent: ErrorComponent | undefined - added:
property ErrorBoundaryProps.errorScripts?: React.ReactNode | undefined
- removed:
function getRedirectStatusCodeFromError<U extends string>(error: RedirectError<U>): number
- removed:
const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE' - changed:
constructor DynamicServerError(type: string) → constructor DynamicServerError(description: string) - added:
function isDynamicServerError(err: unknown): err is DynamicServerError - added:
readonly property DynamicServerError.description: string
- removed:
function createInfinitePromise(): Promise<void>
- added:
function isHydrationError(error: unknown): boolean
- changed:
default function OuterLayoutRouter({ parallelRouterKey, segmentPath, childProp, error, errorStyles, templateStyles, loading, loadingStyles, hasLoading, template, notFound, notFoundStyles, styles }: { parallelRouterKey: string; segmentPath: FlightSegmentPath; childProp: ChildProp; error: ErrorComponent; errorStyles: React.ReactNode | undefined; templateStyles: React.ReactNode | undefined; template: React.… → default function OuterLayoutRouter({ parallelRouterKey, segmentPath, error, errorStyles, errorScripts, templateStyles, templateScripts, template, notFound, notFoundStyles }: { parallelRouterKey: string; segmentPath: FlightSegmentPath; error: ErrorComponent | undefined; errorStyles: React.ReactNode | undefined; errorScripts: React.ReactNode | undefined; templateStyles: React.ReactNode | undefined; templat…
- removed:
class ReadonlyURLSearchParams - removed:
constructor ReadonlyURLSearchParams(urlSearchParams: URLSearchParams) - removed:
export { RedirectType } from './redirect' - removed:
export { ServerInsertedHTMLContext } from '../../shared/lib/server-inserted-html.shared-runtime' - removed:
export { notFound } from './not-found' - removed:
export { permanentRedirect } from './redirect' - removed:
export { redirect } from './redirect' - removed:
export { useServerInsertedHTML } from '../../shared/lib/server-inserted-html.shared-runtime' - removed:
method ReadonlyURLSearchParams.append(): void - removed:
method ReadonlyURLSearchParams.delete(): void - removed:
method ReadonlyURLSearchParams.set(): void - removed:
method ReadonlyURLSearchParams.sort(): void - removed:
method ReadonlyURLSearchParams[Symbol.iterator](): IterableIterator<[string, string]> - removed:
property ReadonlyURLSearchParams.entries: URLSearchParams['entries'] - removed:
property ReadonlyURLSearchParams.forEach: URLSearchParams['forEach'] - removed:
property ReadonlyURLSearchParams.get: URLSearchParams['get'] - removed:
property ReadonlyURLSearchParams.getAll: URLSearchParams['getAll'] - removed:
property ReadonlyURLSearchParams.has: URLSearchParams['has'] - removed:
property ReadonlyURLSearchParams.keys: URLSearchParams['keys'] - removed:
property ReadonlyURLSearchParams.size: any | URLSearchParams['size'] - removed:
property ReadonlyURLSearchParams.toString: URLSearchParams['toString'] - removed:
property ReadonlyURLSearchParams.values: URLSearchParams['values'] - removed:
property ReadonlyURLSearchParams[INTERNAL_URLSEARCHPARAMS_INSTANCE]: URLSearchParams - changed:
function useRouter(): import('../../shared/lib/app-router-context.shared-runtime').AppRouterInstance → function useRouter(): AppRouterInstance - added:
export { ReadonlyURLSearchParams } from './navigation.react-server' - added:
export { RedirectType } from './navigation.react-server' - added:
export { ServerInsertedHTMLContext } - added:
export { notFound } from './navigation.react-server' - added:
export { permanentRedirect } from './navigation.react-server' - added:
export { redirect } from './navigation.react-server' - added:
export { useServerInsertedHTML }
- added:
class ReadonlyURLSearchParams extends URLSearchParams - added:
export { RedirectType } from './redirect' - added:
export { notFound } from './not-found' - added:
export { permanentRedirect } from './redirect' - added:
export { redirect } from './redirect' - added:
method ReadonlyURLSearchParams.append(): void - added:
method ReadonlyURLSearchParams.delete(): void - added:
method ReadonlyURLSearchParams.set(): void - added:
method ReadonlyURLSearchParams.sort(): void
- changed:
function isNotFoundError(error: any): error is NotFoundError → function isNotFoundError(error: unknown): error is NotFoundError
- changed:
function NotFoundBoundary({ notFound, notFoundStyles, asNotFound, children }: NotFoundBoundaryProps): React.JSX.Element → function NotFoundBoundary({ notFound, notFoundStyles, asNotFound, children }: NotFoundBoundaryProps): import('react/jsx-runtime').JSX.Element
- changed:
default function NotFound(): React.JSX.Element → default function NotFound(): import('react/jsx-runtime').JSX.Element
- removed:
default function NoopParallelRouteDefault(): void - added:
const PARALLEL_ROUTE_DEFAULT_PATH = 'next/dist/client/components/parallel-route-default.js' - added:
default function ParallelRouteDefault(): void
- changed:
method PromiseQueue.bump(promiseFn: ThenableRecord<any> | Promise<any>): void → method PromiseQueue.bump(promiseFn: Promise<any>): void
- added:
default class ReactDevOverlay extends React.PureComponent<{ state: OverlayState; children: React.ReactNode; onReactError: (error: Error) => void }, ReactDevOverlayState> - added:
method ReactDevOverlay.componentDidCatch(componentErr: Error): void - added:
method ReactDevOverlay.render(): import('react/jsx-runtime').JSX.Element - added:
property ReactDevOverlay.state: { reactError: null } - added:
static method ReactDevOverlay.getDerivedStateFromError(error: Error): ReactDevOverlayState
- added:
default function HotReload({ assetPrefix, children }: { assetPrefix: string; children?: ReactNode }): import('react/jsx-runtime').JSX.Element
- removed:
default function HotReload({ assetPrefix, children }: { assetPrefix: string; children?: ReactNode }): React.JSX.Element
- removed:
class ReactDevOverlay extends React.PureComponent<{ state: OverlayState; children: React.ReactNode; onReactError: (error: Error) => void }, ReactDevOverlayState> - removed:
default ReactDevOverlay - removed:
method ReactDevOverlay.componentDidCatch(componentErr: Error): void - removed:
method ReactDevOverlay.render(): React.JSX.Element - removed:
property ReactDevOverlay.state: { reactError: null } - removed:
static method ReactDevOverlay.getDerivedStateFromError(error: Error): ReactDevOverlayState
- changed:
type DialogProps = { children?: React.ReactNode; type: 'error' | 'warning'; 'aria-labelledby': string; 'aria-describedby': string; onClose?: (e: MouseEvent | TouchEvent) => void } → type DialogProps = { children?: React.ReactNode; type: 'error' | 'warning'; 'aria-labelledby': string; 'aria-describedby': string; onClose?: () => void }
- changed:
function EditorLink({ file, isSourceFile, location }: EditorLinkProps): React.JSX.Element → function EditorLink({ file, isSourceFile, location }: EditorLinkProps): import('react/jsx-runtime').JSX.Element
- changed:
type ToastProps = { children?: React.ReactNode; onClick?: (ev: React.MouseEvent<HTMLDivElement, MouseEvent>) => void; className?: string } → type ToastProps = { children?: React.ReactNode; onClick?: () => void; className?: string }
- changed:
function VersionStalenessInfo(props: VersionInfo): React.JSX.Element | null → function VersionStalenessInfo(props: VersionInfo): import('react/jsx-runtime').JSX.Element | null - added:
function getStaleness({ installed, staleness, expected }: VersionInfo): { text: string; indicatorClass: string; title: string }
- removed:
function getWordsAndWhitespaces(text: string): string[]
- changed:
const HotlinkedText: React.FC<{ text: string }> → const HotlinkedText: React.FC<{ text: string; matcher?: (text: string) => boolean }>
- removed:
const Errors: React.FC<ErrorsProps> - changed:
type ErrorsProps = { errors: SupportedErrorEvent[]; initialDisplayState: DisplayState; versionInfo?: VersionInfo } → type ErrorsProps = { isAppDir: boolean; errors: SupportedErrorEvent[]; initialDisplayState: DisplayState; versionInfo?: VersionInfo } - added:
function Errors({ isAppDir, errors, initialDisplayState, versionInfo }: ErrorsProps): import('react/jsx-runtime').JSX.Element | null
- removed:
const RootLayoutError: React.FC<RootLayoutErrorProps> - removed:
const styles: string - removed:
type RootLayoutErrorProps = { missingTags: string[] }
- changed:
function ComponentStackFrameRow({ componentStackFrame: { component, file, lineNumber, column } }: { componentStackFrame: ComponentStackFrame }): React.JSX.Element → function ComponentStackFrameRow({ componentStackFrame }: { componentStackFrame: ComponentStackFrame }): import('react/jsx-runtime').JSX.Element
- removed:
function FrameworkIcon({ framework }: { framework: NonNullable<StackFramesGroup['framework']> }): React.JSX.Element
- changed:
function GroupedStackFrames({ groupedStackFrames, all }: { groupedStackFrames: StackFramesGroup[]; all: boolean }): React.JSX.Element → function GroupedStackFrames({ groupedStackFrames, show }: { groupedStackFrames: StackFramesGroup[]; show: boolean }): import('react/jsx-runtime').JSX.Element | undefined
- added:
function PseudoHtmlDiff({ componentStackFrames, firstContent, secondContent, hydrationMismatchType, ...props }: { componentStackFrames: ComponentStackFrame[]; firstContent: string; secondContent: string; hydrationMismatchType: 'tag' | 'text' | 'text-in-tag' } & React.HTMLAttributes<HTMLPreElement>): import('react/jsx-runtime').JSX.Element
- removed:
const RuntimeError: React.FC<RuntimeErrorProps> - added:
function RuntimeError({ error }: RuntimeErrorProps): import('react/jsx-runtime').JSX.Element
- added:
const RootLayoutMissingTagsError: React.FC<RootLayoutMissingTagsErrorProps>
- removed:
const ACTION_BEFORE_REFRESH = 'before-fast-refresh' - removed:
const ACTION_BUILD_ERROR = 'build-error' - removed:
const ACTION_BUILD_OK = 'build-ok' - removed:
const ACTION_REFRESH = 'fast-refresh' - removed:
const ACTION_UNHANDLED_ERROR = 'unhandled-error' - removed:
const ACTION_UNHANDLED_REJECTION = 'unhandled-rejection' - removed:
const ACTION_VERSION_INFO = 'version-info' - removed:
const INITIAL_OVERLAY_STATE: OverlayState - removed:
const errorOverlayReducer: React.Reducer<Readonly<OverlayState>, Readonly<BuildOkAction | BuildErrorAction | BeforeFastRefreshAction | FastRefreshAction | UnhandledErrorAction | Unhandle… - removed:
interface OverlayState - removed:
interface UnhandledErrorAction - removed:
interface UnhandledRejectionAction - removed:
property OverlayState.buildError: string | null - removed:
property OverlayState.errors: SupportedErrorEvent[] - removed:
property OverlayState.nextId: number - removed:
property OverlayState.notFound: boolean - removed:
property OverlayState.refreshState: FastRefreshState - removed:
property OverlayState.rootLayoutMissingTagsError?: { missingTags: string[] } - removed:
property OverlayState.versionInfo: VersionInfo - removed:
property UnhandledErrorAction.componentStackFrames?: ComponentStackFrame[] - removed:
property UnhandledErrorAction.frames: StackFrame[] - removed:
property UnhandledErrorAction.reason: Error - removed:
property UnhandledErrorAction.type: typeof ACTION_UNHANDLED_ERROR - removed:
property UnhandledRejectionAction.frames: StackFrame[] - removed:
property UnhandledRejectionAction.reason: Error - removed:
property UnhandledRejectionAction.type: typeof ACTION_UNHANDLED_REJECTION - removed:
type FastRefreshState = { type: 'idle' } | { type: 'pending'; errors: SupportedErrorEvent[] }
- added:
default function formatWebpackMessages(json: any, verbose?: boolean): any
- changed:
function getSocketUrl(assetPrefix: string): string → function getSocketUrl(assetPrefix: string | undefined): string
- changed:
function getErrorByType(ev: SupportedErrorEvent): Promise<ReadyRuntimeError> → function getErrorByType(ev: SupportedErrorEvent, isAppDir: boolean): Promise<ReadyRuntimeError>
- changed:
function getRawSourceMap(fileContents: string): RawSourceMap | null → function getRawSourceMap(fileContents: string): unknown | null
- changed:
type StackFramesGroup = { framework?: 'next' | 'react'; stackFrames: OriginalStackFrame[] } → type StackFramesGroup = { framework?: SourcePackage | null; stackFrames: OriginalStackFrame[] }
- removed:
let hydrationErrorComponentStack: string | undefined - removed:
let hydrationErrorWarning: string | undefined - added:
const getHydrationWarningType: (msg: NullableText) => 'tag' | 'text' | 'text-in-tag' - added:
const hydrationErrorState: HydrationErrorState - added:
type HydrationErrorState = { warning?: [string, string, string]; componentStack?: string; serverContent?: string; clientContent?: string }
- removed:
function decorateServerError(error: Error, type: ErrorType): void - removed:
function getErrorSource(error: Error): 'server' | 'edge-server' | null - changed:
function getServerError(error: Error, type: ErrorType): Error → function getServerError(error: Error, type: ErrorSourceType): Error
- changed:
type ComponentStackFrame = { component: string; file?: string; lineNumber?: number; column?: number } → type ComponentStackFrame = { canOpenInEditor: boolean; component: string; file?: string; lineNumber?: number; column?: number }
- added:
const RuntimeErrorHandler: { hadRuntimeError: boolean }
- removed:
function getOriginalStackFrame(source: StackFrame, type: 'server' | 'edge-server' | null, errorMessage: string): Promise<OriginalStackFrame> - removed:
type OriginalStackFrame = { error: true; reason: string; external: false; expanded: false; sourceStackFrame: StackFrame; originalStackFrame: null; originalCodeFrame: null; sourcePackage… - changed:
function getOriginalStackFrames(frames: StackFrame[], type: 'server' | 'edge-server' | null, errorMessage: string): Promise<OriginalStackFrame[]> → function getOriginalStackFrames(frames: StackFrame[], type: 'server' | 'edge-server' | null, isAppDir: boolean, errorMessage: string): Promise<OriginalStackFrame[]> - added:
interface OriginalStackFrame extends OriginalStackFrameResponse - added:
property OriginalStackFrame.error: boolean - added:
property OriginalStackFrame.expanded: boolean - added:
property OriginalStackFrame.external: boolean - added:
property OriginalStackFrame.reason: string | null - added:
property OriginalStackFrame.sourceStackFrame: StackFrame
- removed:
const RuntimeErrorHandler: { hadRuntimeError: boolean }
- changed:
function useTurbopack(sendMessage: ReturnType<typeof useSendMessage>): (msg: HMR_ACTION_TYPES) => boolean → function useTurbopack(sendMessage: ReturnType<typeof useSendMessage>, onUpdateError: (err: unknown) => void): (msg: TurbopackMsgToBrowser) => void
- changed:
const CloseIcon: () => React.JSX.Element → const CloseIcon: () => import('react/jsx-runtime').JSX.Element
- added:
function CollapseIcon({ collapsed }?: { collapsed?: boolean }): import('react/jsx-runtime').JSX.Element
- added:
function FrameworkIcon({ framework }: { framework: NonNullable<StackFramesGroup['framework']> }): import('react/jsx-runtime').JSX.Element
- changed:
function Base(): React.JSX.Element → function Base(): import('react/jsx-runtime').JSX.Element
- changed:
function ComponentStyles(): React.JSX.Element → function ComponentStyles(): import('react/jsx-runtime').JSX.Element
- changed:
function CssReset(): React.JSX.Element → function CssReset(): import('react/jsx-runtime').JSX.Element
- added:
class ErrorBoundary extends React.PureComponent<ErrorBoundaryProps, ErrorBoundaryState> - added:
method ErrorBoundary.componentDidCatch(error: Error, errorInfo?: { componentStack?: string | null }): void - added:
method ErrorBoundary.render(): React.ReactNode - added:
property ErrorBoundary.state: { error: null } - added:
static method ErrorBoundary.getDerivedStateFromError(error: Error): { error: Error }
- added:
default function ReactDevOverlay({ children, preventDisplay, globalOverlay }: ReactDevOverlayProps): import('react/jsx-runtime').JSX.Element
- added:
function emit(ev: BusEvent): void - added:
function off(fn: BusEventHandler): boolean - added:
function on(fn: BusEventHandler): boolean - added:
type BusEventHandler = (ev: BusEvent) => void
- added:
export { default as ReactDevOverlay } from './ReactDevOverlay' - added:
export { getErrorByType } from '../internal/helpers/getErrorByType' - added:
export { getServerError } from '../internal/helpers/nodeStackFrames' - added:
function onBeforeRefresh(): void - added:
function onBuildError(message: string): void - added:
function onBuildOk(): void - added:
function onRefresh(): void - added:
function onVersionInfo(versionInfo: VersionInfo): void - added:
function register(): void - added:
function unregister(): void
- added:
declare global - added:
default function connect(mode: 'webpack' | 'turbopack'): { subscribeToHmrEvent(handler: any): void; onUnrecoverableError(): void; addTurbopackMessageListener(cb: (msg: TurbopackMsgToBrowser) => void): void; sendTurbopackMessage(msg: string): void; handleUpdateError(err: unknown): void } - added:
function performFullReload(err: any): void
- added:
function addMessageListener(callback: ActionCallback): void - added:
function connectHMR(options: { path: string; assetPrefix: string }): void - added:
function sendMessage(data: string): void
- added:
export { getServerError } from '../internal/helpers/nodeStackFrames' - added:
export { parseStack } from '../internal/helpers/parseStack' - added:
function createOriginalStackFrame({ source, moduleId, modulePath, rootDirectory, frame, errorMessage, compilation }: { source: any; moduleId?: string; modulePath?: string; rootDirectory: string; frame: StackFrame; errorMessage?: string; compilation?: webpack.Compilation }): Promise<OriginalStackFrameResponse | null> - added:
function getOverlayMiddleware(options: { rootDirectory: string; stats(): webpack.Stats | null; serverStats(): webpack.Stats | null; edgeServerStats(): webpack.Stats | null }): (req: IncomingMessage, res: ServerResponse, next: Function) => Promise<any> - added:
function getSourceById(isFile: boolean, id: string, compilation?: webpack.Compilation): Promise<Source>
- added:
function batchedTraceSource(project: Project, frame: TurbopackStackFrame): Promise<{ frame: StackFrame; source: string | null } | undefined> - added:
function createOriginalStackFrame(project: Project, frame: TurbopackStackFrame): Promise<OriginalStackFrameResponse | null> - added:
function getOverlayMiddleware(project: Project): (req: IncomingMessage, res: ServerResponse) => Promise<void | ServerResponse<IncomingMessage>>
- added:
function badRequest(res: ServerResponse): void - added:
function findSourcePackage({ file, methodName }: Partial<{ file: string | null; methodName: string | null }>): SourcePackage | undefined - added:
function getOriginalCodeFrame(frame: StackFrame, source: string | null): string | null | undefined - added:
function internalServerError(res: ServerResponse, e?: any): void - added:
function json(res: ServerResponse, data: any): void - added:
function noContent(res: ServerResponse): void - added:
interface OriginalStackFrameResponse - added:
property OriginalStackFrameResponse.originalCodeFrame?: string | null - added:
property OriginalStackFrameResponse.originalStackFrame?: StackFrame | null - added:
property OriginalStackFrameResponse.sourcePackage?: SourcePackage | null - added:
type SourcePackage = 'react' | 'next'
- added:
const ACTION_BEFORE_REFRESH = 'before-fast-refresh' - added:
const ACTION_BUILD_ERROR = 'build-error' - added:
const ACTION_BUILD_OK = 'build-ok' - added:
const ACTION_REFRESH = 'fast-refresh' - added:
const ACTION_UNHANDLED_ERROR = 'unhandled-error' - added:
const ACTION_UNHANDLED_REJECTION = 'unhandled-rejection' - added:
const ACTION_VERSION_INFO = 'version-info' - added:
const INITIAL_OVERLAY_STATE: OverlayState - added:
const REACT_REFRESH_FULL_RELOAD_FROM_ERROR = '[Fast Refresh] performing full reload because your application had an unrecoverable error' - added:
function useErrorOverlayReducer(): [OverlayState, import('react').Dispatch<BusEvent>] - added:
interface OverlayState - added:
interface UnhandledErrorAction - added:
interface UnhandledRejectionAction - added:
property OverlayState.buildError: string | null - added:
property OverlayState.errors: SupportedErrorEvent[] - added:
property OverlayState.nextId: number - added:
property OverlayState.notFound: boolean - added:
property OverlayState.refreshState: FastRefreshState - added:
property OverlayState.rootLayoutMissingTags: typeof window.__next_root_layout_missing_tags - added:
property OverlayState.versionInfo: VersionInfo - added:
property UnhandledErrorAction.componentStackFrames?: ComponentStackFrame[] - added:
property UnhandledErrorAction.frames: StackFrame[] - added:
property UnhandledErrorAction.reason: Error - added:
property UnhandledErrorAction.type: typeof ACTION_UNHANDLED_ERROR - added:
property UnhandledErrorAction.warning?: [string, string, string] - added:
property UnhandledRejectionAction.frames: StackFrame[] - added:
property UnhandledRejectionAction.reason: Error - added:
property UnhandledRejectionAction.type: typeof ACTION_UNHANDLED_REJECTION - added:
type BusEvent = BuildOkAction | BuildErrorAction | BeforeFastRefreshAction | FastRefreshAction | UnhandledErrorAction | UnhandledRejectionAction | VersionInfoAction
- changed:
function getRedirectError(url: string, type: RedirectType, permanent?: boolean): RedirectError<typeof url> → function getRedirectError(url: string, type: RedirectType, statusCode?: RedirectStatusCode): RedirectError<typeof url> - changed:
function isRedirectError<U extends string>(error: any): error is RedirectError<U> → function isRedirectError<U extends string>(error: unknown): error is RedirectError<U> - changed:
type RedirectError<U extends string> = Error & { digest: `${typeof REDIRECT_ERROR_CODE};${RedirectType};${U};${boolean}`; mutableCookies: ResponseCookies } → type RedirectError<U extends string> = Error & { digest: `${typeof REDIRECT_ERROR_CODE};${RedirectType};${U};${RedirectStatusCode};`; mutableCookies: ResponseCookies } - added:
function getRedirectStatusCodeFromError<U extends string>(error: RedirectError<U>): number
- changed:
function RedirectBoundary({ children }: { children: React.ReactNode }): React.JSX.Element → function RedirectBoundary({ children }: { children: React.ReactNode }): import('react/jsx-runtime').JSX.Element - changed:
method RedirectErrorBoundary.render(): string | number | boolean | React.ReactFragment | React.PromiseLikeOfReactNode | React.JSX.Element | null | undefined → method RedirectErrorBoundary.render(): React.ReactNode
- added:
enum RedirectStatusCode - added:
member RedirectStatusCode.PermanentRedirect = 308 - added:
member RedirectStatusCode.SeeOther = 303 - added:
member RedirectStatusCode.TemporaryRedirect = 307
- added:
const requestAsyncStorage: RequestAsyncStorage
- removed:
const requestAsyncStorage: RequestAsyncStorage - added:
export { requestAsyncStorage } - added:
function getExpectedRequestStore(callingExpression: string): RequestStore - added:
readonly property RequestStore.assetPrefix: string - added:
readonly property RequestStore.reactLoadableManifest: DeepReadonly<Record<string, { files: string[] }>>
- changed:
function applyFlightData(existingCache: CacheNode, cache: CacheNode, flightDataPath: FlightDataPath, wasPrefetched?: boolean): boolean → function applyFlightData(existingCache: CacheNode, cache: CacheNode, flightDataPath: FlightDataPath, prefetchEntry?: PrefetchCacheEntry): boolean
- changed:
function applyRouterStatePatchToTree(flightSegmentPath: FlightSegmentPath, flightRouterState: FlightRouterState, treePatch: FlightRouterState): FlightRouterState | null → function applyRouterStatePatchToTree(flightSegmentPath: FlightSegmentPath, flightRouterState: FlightRouterState, treePatch: FlightRouterState, path: string): FlightRouterState | null
- added:
function clearCacheNodeDataForSegmentPath(newCache: CacheNode, existingCache: CacheNode, flightSegmentPath: FlightSegmentPath): void
- removed:
property InitialRouterStateParameters.children: ReactNode - removed:
property InitialRouterStateParameters.initialCanonicalUrl: string - removed:
property InitialRouterStateParameters.isServer: boolean - changed:
function createInitialRouterState({ buildId, initialTree, children, initialCanonicalUrl, initialParallelRoutes, isServer, location, initialHead }: InitialRouterStateParameters): { buildId: string; tree: FlightRouterState; cache: { status: CacheStates.READY; data: null; head?: ReactNode; subTreeData: ReactNode; parallelRoutes: Map<string, import('../../../shared/lib/app-router-context.shared-runti… → function createInitialRouterState({ buildId, initialTree, initialSeedData, urlParts, initialParallelRoutes, location, initialHead, couldBeIntercepted }: InitialRouterStateParameters): { buildId: string; tree: FlightRouterState; cache: import('../../../shared/lib/app-router-context.shared-runtime').ReadyCacheNode; prefetchCache: Map<string, PrefetchCacheEntry>; pushRef: { pendingPush: boolean; mpa… - added:
property InitialRouterStateParameters.couldBeIntercepted?: boolean - added:
property InitialRouterStateParameters.initialSeedData: CacheNodeSeedData - added:
property InitialRouterStateParameters.urlParts: string[]
- removed:
function createOptimisticTree(segments: string[], flightRouterState: FlightRouterState | null, parentRefetch: boolean): FlightRouterState
- removed:
function createRecordFromThenable<T>(promise: PromiseLike<T>): ThenableRecord<T>
- changed:
type FetchServerResponseResult = [flightData: FlightData, canonicalUrlOverride: URL | undefined] → type FetchServerResponseResult = [flightData: FlightData, canonicalUrlOverride: URL | undefined, postponed?: boolean, intercepted?: boolean]
- removed:
function fillCacheWithDataProperty(newCache: CacheNode, existingCache: CacheNode, flightSegmentPath: FlightSegmentPath, fetchResponse: () => ThenableRecord<FetchServerResponseResult>, bailOnParallelRoutes?: boolean): { bailOptimistic: boolean } | undefined
- changed:
function fillCacheWithNewSubTreeData(newCache: CacheNode, existingCache: CacheNode, flightDataPath: FlightDataPath, wasPrefetched?: boolean): void → function fillCacheWithNewSubTreeData(newCache: CacheNode, existingCache: CacheNode, flightDataPath: FlightDataPath, prefetchEntry?: PrefetchCacheEntry): void
- changed:
function fillLazyItemsTillLeafWithHead(newCache: CacheNode, existingCache: CacheNode | undefined, routerState: FlightRouterState, head: React.ReactNode, wasPrefetched?: boolean): void → function fillLazyItemsTillLeafWithHead(newCache: CacheNode, existingCache: CacheNode | undefined, routerState: FlightRouterState, cacheNodeSeedData: CacheNodeSeedData | null, head: React.ReactNode, prefetchEntry?: PrefetchCacheEntry): void
- removed:
enum PrefetchCacheEntryStatus - removed:
function getPrefetchEntryCacheStatus({ kind, prefetchTime, lastUsedTime }: PrefetchCacheEntry): PrefetchCacheEntryStatus - removed:
member PrefetchCacheEntryStatus.expired = 'expired' - removed:
member PrefetchCacheEntryStatus.fresh = 'fresh' - removed:
member PrefetchCacheEntryStatus.reusable = 'reusable' - removed:
member PrefetchCacheEntryStatus.stale = 'stale'
- added:
function handleSegmentMismatch(state: ReadonlyReducerState, action: ReducerActions, treePatch: FlightRouterState): import('./router-reducer-types').ReducerState
- added:
function abortTask(task: Task, error: any): void - added:
function listenForDynamicRequest(task: Task, responsePromise: Promise<FetchServerResponseResult>): void - added:
function updateCacheNodeOnNavigation(oldCacheNode: CacheNode, oldRouterState: FlightRouterState, newRouterState: FlightRouterState, prefetchData: CacheNodeSeedData, prefetchHead: React.ReactNode): Task | null - added:
function updateCacheNodeOnPopstateRestoration(oldCacheNode: CacheNode, routerState: FlightRouterState): { lazyData: null; rsc: import('react').ReactNode; head: import('react').ReactNode; prefetchHead: import('react').ReactNode; prefetchRsc: import('react').ReactNode; loading: import('../../../shared/lib/app-router-context.shared-runtime').LoadingModuleData; parallelRoutes: Map<string, ChildSegmen…
- added:
function createPrefetchCacheEntryForInitialLoad({ nextUrl, tree, prefetchCache, url, kind, data }: Pick<ReadonlyReducerState, 'nextUrl' | 'tree' | 'prefetchCache'> & { url: URL; kind: PrefetchKind; data: FetchServerResponseResult }): { treeAtTimeOfPrefetch: import('../../../server/app-render/types').FlightRouterState; data: Promise<FetchServerResponseResult>; kind: PrefetchKind; prefetchTime: num… - added:
function getOrCreatePrefetchCacheEntry({ url, nextUrl, tree, buildId, prefetchCache, kind }: Pick<ReadonlyReducerState, 'nextUrl' | 'prefetchCache' | 'tree' | 'buildId'> & { url: URL; kind?: PrefetchKind }): PrefetchCacheEntry - added:
function prunePrefetchCache(prefetchCache: ReadonlyReducerState['prefetchCache']): void
- removed:
function readRecordValue<T>(thenable: ThenableRecord<T>): T
- changed:
function findHeadInCache(cache: CacheNode, parallelRoutes: FlightRouterState[1]): React.ReactNode → function findHeadInCache(cache: CacheNode, parallelRoutes: FlightRouterState[1]): [CacheNode, string] | null
- added:
function hasInterceptionRouteInCurrentTree([segment, parallelRoutes]: FlightRouterState): boolean
- removed:
function navigateReducer(state: ReadonlyReducerState, action: NavigateAction): ReducerState - changed:
function handleExternalUrl(state: ReadonlyReducerState, mutable: Mutable, url: string, pendingPush: boolean): import('../router-reducer-types').AppRouterState → function handleExternalUrl(state: ReadonlyReducerState, mutable: Mutable, url: string, pendingPush: boolean): ReducerState - added:
const navigateReducer: typeof navigateReducer_PPR
- removed:
function prunePrefetchCache(prefetchCache: ReducerState['prefetchCache']): void
- added:
function addRefreshMarkerToActiveParallelSegments(tree: FlightRouterState, path: string): void - added:
function refreshInactiveParallelSegments(options: RefreshInactiveParallelSegments): Promise<void>
- removed:
property FastRefreshAction.cache: CacheNode - removed:
property FastRefreshAction.mutable: Mutable - removed:
property Mutable.globalMutable: { pendingNavigatePath?: string; pendingMpaPath?: string; refresh: () => void } - removed:
property Mutable.previousTree?: FlightRouterState - removed:
property NavigateAction.cache: CacheNode - removed:
property NavigateAction.forceOptimisticNavigation: boolean - removed:
property NavigateAction.mutable: Mutable - removed:
property RefreshAction.cache: CacheNode - removed:
property RefreshAction.mutable: Mutable - removed:
property ServerActionAction.cache: CacheNode - removed:
property ServerActionAction.mutable: ServerActionMutable - removed:
property ServerActionMutable.actionResultResolved?: boolean - removed:
property ServerPatchAction.cache: CacheNode - removed:
property ServerPatchAction.flightData: FlightData - removed:
property ServerPatchAction.mutable: Mutable - removed:
property ServerPatchAction.overrideCanonicalUrl: URL | undefined - removed:
type ThenableRecord<T> = PendingThenable<T> | RejectedThenable<T> | FulfilledThenable<T> - changed:
property RestoreAction.tree: FlightRouterState → property RestoreAction.tree: FlightRouterState | undefined - changed:
property ServerActionMutable.inFlightServerAction?: ThenableRecord<any> | null → property ServerActionMutable.inFlightServerAction?: Promise<any> | null - changed:
type PrefetchCacheEntry = { treeAtTimeOfPrefetch: FlightRouterState; data: ThenableRecord<FetchServerResponseResult> | null; kind: PrefetchKind; prefetchTime: number; lastUsedTime: numb… → type PrefetchCacheEntry = { treeAtTimeOfPrefetch: FlightRouterState; data: Promise<FetchServerResponseResult>; kind: PrefetchKind; prefetchTime: number; lastUsedTime: number | null; key… - changed:
type ReducerState = AppRouterState → type ReducerState = Promise<AppRouterState> | AppRouterState - changed:
type RouterChangeByServerResponse = (previousTree: FlightRouterState, flightData: FlightData, overrideCanonicalUrl: URL | undefined) => void → type RouterChangeByServerResponse = ({ previousTree, serverResponse }: { previousTree: FlightRouterState; serverResponse: FetchServerResponseResult }) => void - changed:
type RouterNavigate = (href: string, navigateType: 'push' | 'replace', forceOptimisticNavigation: boolean, shouldScroll: boolean) => void → type RouterNavigate = (href: string, navigateType: 'push' | 'replace', shouldScroll: boolean) => void - added:
enum PrefetchCacheEntryStatus - added:
function isThenable(value: any): value is Promise<AppRouterState> - added:
interface PushRef - added:
member PrefetchCacheEntryStatus.expired = 'expired' - added:
member PrefetchCacheEntryStatus.fresh = 'fresh' - added:
member PrefetchCacheEntryStatus.reusable = 'reusable' - added:
member PrefetchCacheEntryStatus.stale = 'stale' - added:
property Mutable.preserveCustomHistoryState?: boolean - added:
property PushRef.mpaNavigation: boolean - added:
property PushRef.pendingPush: boolean - added:
property PushRef.preserveCustomHistoryState: boolean - added:
property ServerPatchAction.serverResponse: FetchServerResponseResult
- added:
function createDynamicallyTrackedSearchParams(searchParams: ParsedUrlQuery): ParsedUrlQuery - added:
function createUntrackedSearchParams(searchParams: ParsedUrlQuery): ParsedUrlQuery
- removed:
function createSearchParamsBailoutProxy(): {}
- added:
const staticGenerationAsyncStorage: StaticGenerationAsyncStorage
- removed:
const staticGenerationAsyncStorage: StaticGenerationAsyncStorage - removed:
property StaticGenerationStore.staticPrefetchBailout?: boolean - changed:
property StaticGenerationStore.pendingRevalidates?: Promise<any>[] → property StaticGenerationStore.pendingRevalidates?: Record<string, Promise<any>> - changed:
property StaticGenerationStore.revalidate?: false | number → property StaticGenerationStore.revalidate?: Revalidate - added:
export { staticGenerationAsyncStorage } - added:
property StaticGenerationStore.isUnstableNoStore?: boolean - added:
property StaticGenerationStore.prerenderState: null | PrerenderState - added:
property StaticGenerationStore.requestEndedState?: { ended?: boolean } - added:
readonly property StaticGenerationStore.isUnstableCacheCallback?: boolean
- removed:
const staticGenerationBailout: StaticGenerationBailout - removed:
type StaticGenerationBailout = (reason: string, opts?: BailoutOpts) => boolean | never - added:
class StaticGenBailoutError extends Error - added:
function isStaticGenBailoutError(error: unknown): error is StaticGenBailoutError - added:
readonly property StaticGenBailoutError.code = 'NEXT_STATIC_GEN_BAILOUT'
- removed:
default function StaticGenerationSearchParamsBailoutProvider({ Component, propsForComponent, isStaticGeneration }: { Component: React.ComponentType<any>; propsForComponent: any; isStaticGeneration: boolean }): React.JSX.Element
- added:
const unresolvedThenable: { then: () => void }
- added:
function useUnwrapState(state: ReducerState): AppRouterState - added:
interface ReduxDevToolsInstance - added:
method ReduxDevToolsInstance.init(initialState: any): void - added:
method ReduxDevToolsInstance.send(action: any, state: any): void - added:
type ReduxDevtoolsSyncFn = (state: AppRouterState) => void
- removed:
default function formatWebpackMessages(json: any, verbose?: boolean): any
- removed:
declare global - removed:
default function connect(mode: 'webpack' | 'turbopack'): { subscribeToHmrEvent(handler: any): void; onUnrecoverableError(): void }
- removed:
function addMessageListener(callback: ActionCallback): void - removed:
function connectHMR(options: { path: string; assetPrefix: string }): void - removed:
function sendMessage(data: string): void - added:
export { addMessageListener } from '../../components/react-dev-overlay/pages/websocket'
- changed:
const _default: (mode: 'webpack' | 'turbopack') => { subscribeToHmrEvent(handler: any): void; onUnrecoverableError(): void } → const _default: (mode: 'webpack' | 'turbopack') => { subscribeToHmrEvent(handler: any): void; onUnrecoverableError(): void; addTurbopackMessageListener(cb: (msg: import('../..…
- added:
function prepareFlightRouterStateForRequest(flightRouterState: FlightRouterState, isHmrRefresh?: boolean): string
- changed:
default function Image({ src, sizes, unoptimized, priority, loading, lazyRoot, lazyBoundary, className, quality, width, height, style, objectFit, objectPosition, onLoadingComplete, placeholder, blurDataURL, ...all }: ImageProps): React.JSX.Element → default function Image({ src, sizes, unoptimized, priority, loading, lazyRoot, lazyBoundary, className, quality, width, height, style, objectFit, objectPosition, onLoadingComplete, placeholder, blurDataURL, ...all }: ImageProps): import('react/jsx-runtime').JSX.Element
- changed:
default function onRecoverableError(err: any): void → default function onRecoverableError(err: unknown): void
- changed:
const RouteAnnouncer: () => React.JSX.Element → const RouteAnnouncer: () => import('react/jsx-runtime').JSX.Element
- changed:
interface CookieListItem extends Pick<CookieSerializeOptions, 'domain' | 'path' | 'secure' | 'sameSite'> → interface CookieListItem extends Pick<CookieSerializeOptions, 'domain' | 'path' | 'secure' | 'sameSite' | 'partitioned'>
- removed:
const TextDecoder: typeof TextDecoder - removed:
const TextEncoder: typeof TextEncoder - removed:
const atob: (encoded: string) => string - removed:
const btoa: (str: string) => string
- removed:
export { TextDecoder } from './encoding' - removed:
export { TextEncoder } from './encoding' - removed:
export { atob } from './encoding' - removed:
export { btoa } from './encoding' - added:
const TextDecoder: typeof TextDecoder - added:
const TextEncoder: typeof TextEncoder - added:
const atob: typeof atob - added:
const btoa: typeof btoa - added:
const performance: typeof performance
- changed:
const setInterval: typeof Number → const setInterval: (callback: () => void, ms?: number) => number - changed:
const setTimeout: typeof Number → const setTimeout: (callback: () => void, ms?: number) => number
- changed:
function getFallbackFontOverrideMetrics(fontFamily: string): { fallbackFont: any; ascentOverride: string; descentOverride: string; lineGapOverride: string; sizeAdjust: string } | undefined → function getFallbackFontOverrideMetrics(fontFamily: string): { fallbackFont: string; ascentOverride: string; descentOverride: string; lineGapOverride: string; sizeAdjust: string } | undefined
- changed:
function Alike<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin'> }): T extends undefined ? NextFont : NextFontWithVariable → function Alike<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - changed:
function Alike_Angular<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin'> }): T extends undefined ? NextFont : NextFontWithVariable → function Alike_Angular<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - changed:
function Asset<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin'> }): T extends undefined ? NextFont : NextFontWithVariable → function Asset<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic-ext' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - changed:
function BioRhyme<T extends CssVariable | undefined = undefined>(options: { weight: '200' | '300' | '400' | '700' | '800' | Array<'200' | '300' | '400' | '700' | '800'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVa… → function BioRhyme<T extends CssVariable | undefined = undefined>(options?: { weight?: '200' | '300' | '400' | '500' | '600' | '700' | '800' | 'variable' | Array<'200' | '300' | '400' | '500' | '600' | '700' | '800'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'>; axe… - changed:
function Borel<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable → function Borel<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols' | 'vietnamese'> }): T extends undefined ? NextFont : NextFontWithVariable - changed:
function Bricolage_Grotesque<T extends CssVariable | undefined = undefined>(options?: { weight?: '200' | '300' | '400' | '500' | '600' | '700' | '800' | 'variable' | Array<'200' | '300' | '400' | '500' | '600' | '700' | '800'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic-ext' |… → function Bricolage_Grotesque<T extends CssVariable | undefined = undefined>(options?: { weight?: '200' | '300' | '400' | '500' | '600' | '700' | '800' | 'variable' | Array<'200' | '300' | '400' | '500' | '600' | '700' | '800'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin… - changed:
function David_Libre<T extends CssVariable | undefined = undefined>(options: { weight: '400' | '500' | '700' | Array<'400' | '500' | '700'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'hebrew' | 'latin' | 'latin-ext' | 'vietnamese'> }): T extends undefined ? NextFont : NextFontWithVaria… → function David_Libre<T extends CssVariable | undefined = undefined>(options: { weight: '400' | '500' | '700' | Array<'400' | '500' | '700'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'hebrew' | 'latin' | 'latin-ext' | 'math' | 'symbols' | 'vietnamese'> }): T extends undefined ? NextFon… - changed:
function Gelasio<T extends CssVariable | undefined = undefined>(options: { weight: '400' | '500' | '600' | '700' | Array<'400' | '500' | '600' | '700'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'vietnamese'> }): T extends undefined ? NextF… → function Gelasio<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | '500' | '600' | '700' | 'variable' | Array<'400' | '500' | '600' | '700'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'vietnamese'> }): T extends un… - changed:
function Inter<T extends CssVariable | undefined = undefined>(options?: { weight?: '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | 'variable' | Array<'100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Arra… → function Inter<T extends CssVariable | undefined = undefined>(options?: { weight?: '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | 'variable' | Array<'100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: b… - changed:
function Lora<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | '500' | '600' | '700' | 'variable' | Array<'400' | '500' | '600' | '700'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'latin' | 'latin-ext' | 'vi… → function Lora<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | '500' | '600' | '700' | 'variable' | Array<'400' | '500' | '600' | '700'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'latin' | 'latin-ext' | 'ma… - changed:
function Narnoor<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'gunjala-gondi' | 'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable → function Narnoor<T extends CssVariable | undefined = undefined>(options: { weight: '400' | '500' | '600' | '700' | '800' | Array<'400' | '500' | '600' | '700' | '800'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'gunjala-gondi' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends… - changed:
function Noto_Naskh_Arabic<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | '500' | '600' | '700' | 'variable' | Array<'400' | '500' | '600' | '700'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'arabic' | 'latin' | 'latin-ext'> }): T extends undefined ? NextFo… → function Noto_Naskh_Arabic<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | '500' | '600' | '700' | 'variable' | Array<'400' | '500' | '600' | '700'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'arabic' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T exten… - changed:
function Noto_Sans<T extends CssVariable | undefined = undefined>(options: { weight: '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | Array<'100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; sub… → function Noto_Sans<T extends CssVariable | undefined = undefined>(options?: { weight?: '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | 'variable' | Array<'100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback… - changed:
function Noto_Sans_Brahmi<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'brahmi' | 'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable → function Noto_Sans_Brahmi<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'brahmi' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - changed:
function Noto_Sans_Caucasian_Albanian<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'caucasian-albanian'> }): T extends undefined ? NextFont : NextFontWithVariable → function Noto_Sans_Caucasian_Albanian<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'caucasian-albanian' | 'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - changed:
function Noto_Sans_Chorasmian<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'chorasmian' | 'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable → function Noto_Sans_Chorasmian<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'chorasmian' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - changed:
function Noto_Sans_Cypriot<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cypriot'> }): T extends undefined ? NextFont : NextFontWithVariable → function Noto_Sans_Cypriot<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cypriot' | 'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - changed:
function Noto_Sans_Elymaic<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'elymaic'> }): T extends undefined ? NextFont : NextFontWithVariable → function Noto_Sans_Elymaic<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'elymaic' | 'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - changed:
function Noto_Sans_Glagolitic<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic-ext' | 'glagolitic' | 'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable → function Noto_Sans_Glagolitic<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic-ext' | 'glagolitic' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithV… - changed:
function Noto_Sans_Meroitic<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'meroitic'> }): T extends undefined ? NextFont : NextFontWithVariable → function Noto_Sans_Meroitic<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'meroitic' | 'meroitic-cursive' | 'meroitic-hieroglyphs'> }): T extends undefined ? NextFont : NextFontW… - changed:
function Noto_Sans_Mongolian<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'mongolian'> }): T extends undefined ? NextFont : NextFontWithVariable → function Noto_Sans_Mongolian<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'mongolian' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - changed:
function Noto_Sans_Symbols_2<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'braille' | 'latin' | 'latin-ext' | 'mayan-numerals' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable → function Noto_Sans_Symbols_2<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'braille' | 'latin' | 'latin-ext' | 'math' | 'mayan-numerals' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVar… - changed:
function Philosopher<T extends CssVariable | undefined = undefined>(options: { weight: '400' | '700' | Array<'400' | '700'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'latin' | 'vietnamese'> }): T extends undefined ? NextFont : NextFo… → function Philosopher<T extends CssVariable | undefined = undefined>(options: { weight: '400' | '700' | Array<'400' | '700'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'latin' | 'latin-ext' | 'vietnamese'> }): T extends undefined ? Nex… - changed:
function Roboto_Condensed<T extends CssVariable | undefined = undefined>(options: { weight: '300' | '400' | '700' | Array<'300' | '400' | '700'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'greek' | 'greek-ext' | 'latin' | 'latin-ext'… → function Roboto_Condensed<T extends CssVariable | undefined = undefined>(options?: { weight?: '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | 'variable' | Array<'100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontF… - changed:
function Ruslan_Display<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable → function Ruslan_Display<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - changed:
function Shanti<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin'> }): T extends undefined ? NextFont : NextFontWithVariable → function Shanti<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - changed:
function Wavefont<T extends CssVariable | undefined = undefined>(options?: { weight?: '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | 'variable' | Array<'100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: A… → function Wavefont<T extends CssVariable | undefined = undefined>(options?: { weight?: '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | '1000' | 'variable' | Array<'100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | '1000'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; fallback?: string[]; adjustFontFallback?: boolean; axes?: ('RON… - changed:
function Yanone_Kaffeesatz<T extends CssVariable | undefined = undefined>(options?: { weight?: '200' | '300' | '400' | '500' | '600' | '700' | 'variable' | Array<'200' | '300' | '400' | '500' | '600' | '700'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'latin' | 'latin-ext'… → function Yanone_Kaffeesatz<T extends CssVariable | undefined = undefined>(options?: { weight?: '200' | '300' | '400' | '500' | '600' | '700' | 'variable' | Array<'200' | '300' | '400' | '500' | '600' | '700'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'lat… - added:
function Afacad<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | '500' | '600' | '700' | 'variable' | Array<'400' | '500' | '600' | '700'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic-ext' | 'latin' | 'latin-ext' | 'math' | 'symb… - added:
function Agbalumo<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic-ext' | 'latin' | 'latin-ext' | 'vietnamese'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Annapurna_SIL<T extends CssVariable | undefined = undefined>(options: { weight: '400' | '700' | Array<'400' | '700'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'devanagari' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Anta<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Hedvig_Letters_Sans<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Hedvig_Letters_Serif<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | 'variable' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols'>; axes?: 'opsz'[] }): T extends undefined ? NextFont : NextFontWithV… - added:
function Honk<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | 'variable' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols' | 'vietnamese'>; axes?: ('MORF' | 'SHLN')[] }): T extends undefined ? NextFont : Nex… - added:
function Jacquard_12_Charted<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Jacquard_24<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Jacquarda_Bastarda_9<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Jacquarda_Bastarda_9_Charted<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Jersey_10<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Jersey_10_Charted<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Jersey_15<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Jersey_15_Charted<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Jersey_20<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Jersey_20_Charted<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Jersey_25<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Kalnia<T extends CssVariable | undefined = undefined>(options?: { weight?: '100' | '200' | '300' | '400' | '500' | '600' | '700' | 'variable' | Array<'100' | '200' | '300' | '400' | '500' | '600' | '700'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math… - added:
function Kay_Pho_Du<T extends CssVariable | undefined = undefined>(options: { weight: '400' | '500' | '600' | '700' | Array<'400' | '500' | '600' | '700'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'kayah-li' | 'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVar… - added:
function Kode_Mono<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | '500' | '600' | '700' | 'variable' | Array<'400' | '500' | '600' | '700'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVa… - added:
function Linefont<T extends CssVariable | undefined = undefined>(options?: { weight?: '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | '1000' | 'variable' | Array<'100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | '1000'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; fallback?: string[]; adjustFontFallback?: boolean; axes?: 'wdth… - added:
function Madimi_One<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Micro_5<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Micro_5_Charted<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Namdhinggo<T extends CssVariable | undefined = undefined>(options: { weight: '400' | '500' | '600' | '700' | '800' | Array<'400' | '500' | '600' | '700' | '800'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'limbu'> }): T extends undefined ? NextFont : Ne… - added:
function Noto_Sans_Kawi<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | '500' | '600' | '700' | 'variable' | Array<'400' | '500' | '600' | '700'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'kawi' | 'latin' | 'latin-ext'> }): T extends undefined ? NextFont :… - added:
function Noto_Serif_Old_Uyghur<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'old-uyghur'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Noto_Znamenny_Musical_Notation<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols' | 'znamenny'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Ojuju<T extends CssVariable | undefined = undefined>(options?: { weight?: '200' | '300' | '400' | '500' | '600' | '700' | '800' | 'variable' | Array<'200' | '300' | '400' | '500' | '600' | '700' | '800'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math'… - added:
function Platypi<T extends CssVariable | undefined = undefined>(options?: { weight?: '300' | '400' | '500' | '600' | '700' | '800' | 'variable' | Array<'300' | '400' | '500' | '600' | '700' | '800'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'… - added:
function Playpen_Sans<T extends CssVariable | undefined = undefined>(options?: { weight?: '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | 'variable' | Array<'100' | '200' | '300' | '400' | '500' | '600' | '700' | '800'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'emoji'… - added:
function Protest_Guerrilla<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols' | 'vietnamese'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Protest_Revolution<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols' | 'vietnamese'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Protest_Riot<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols' | 'vietnamese'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Protest_Strike<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols' | 'vietnamese'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Reddit_Mono<T extends CssVariable | undefined = undefined>(options?: { weight?: '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | 'variable' | Array<'200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin'… - added:
function Rethink_Sans<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | '500' | '600' | '700' | '800' | 'variable' | Array<'400' | '500' | '600' | '700' | '800'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T exte… - added:
function Rubik_Broken_Fax<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'hebrew' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFont… - added:
function Rubik_Doodle_Shadow<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'hebrew' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextF… - added:
function Rubik_Doodle_Triangles<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'hebrew' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : Ne… - added:
function Rubik_Glitch_Pop<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'hebrew' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFont… - added:
function Rubik_Lines<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'hebrew' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithV… - added:
function Rubik_Maps<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'hebrew' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVa… - added:
function Rubik_Scribble<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'hebrew' | 'latin' | 'latin-ext' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWi… - added:
function Sankofa_Display<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'vietnamese'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Sedan<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Sixtyfour<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | 'variable' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols'>; axes?: ('BLED' | 'SCAN')[] }): T extends undefined ? NextFont : NextFontWithV… - added:
function Sometype_Mono<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | '500' | '600' | '700' | 'variable' | Array<'400' | '500' | '600' | '700'>; style?: 'normal' | 'italic' | Array<'normal' | 'italic'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext'> }): T extends undefined ?… - added:
function Tac_One<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'latin-ext' | 'math' | 'symbols' | 'vietnamese'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Workbench<T extends CssVariable | undefined = undefined>(options?: { weight?: '400' | 'variable' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'math' | 'symbols'>; axes?: ('BLED' | 'SCAN')[] }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Yarndings_12<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Yarndings_12_Charted<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Yarndings_20<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Yarndings_20_Charted<T extends CssVariable | undefined = undefined>(options: { weight: '400' | Array<'400'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'latin' | 'math' | 'symbols'> }): T extends undefined ? NextFont : NextFontWithVariable - added:
function Zain<T extends CssVariable | undefined = undefined>(options: { weight: '200' | '300' | '400' | '700' | '800' | '900' | Array<'200' | '300' | '400' | '700' | '800' | '900'>; style?: 'normal' | Array<'normal'>; display?: Display; variable?: T; preload?: boolean; fallback?: string[]; adjustFontFallback?: boolean; subsets?: Array<'arabic' | 'latin'> }): T extends undefined ? NextFont : NextF…
- added:
function retry<T>(fn: asyncRetry.RetryFunction<T>, retries: number): Promise<any>
- added:
const FigmaImageResponse: ({ url, template, fonts, imageResponseOptions, Response }: InternalFigmaImageResponseProps) => Promise<import('../index.edge').ImageResponse>
- added:
const experimental_FigmaImageResponse: (props: FigmaImageResponseProps) => Promise<ImageResponse> - added:
type EdgeImageResponse = typeof ImageResponse
- added:
const experimental_FigmaImageResponse: (props: FigmaImageResponseProps) => Promise<import('./index.edge').ImageResponse> - added:
type NodeImageResponse = typeof ImageResponse
- changed:
default function render(satori: any, resvg: any, opts: any, defaultFonts: any, element: any): Promise<any> → default function render(satori: any, resvg: any, opts: any, defaultFonts: any, element: any): Promise<Uint8Array>
- changed:
property Font.style?: Style$1 → property Font.style?: FontStyle
- added:
interface FigmaComplexTemplate - added:
interface FigmaImageResponseProps - added:
property FigmaComplexTemplate.props?: { centerHorizontally?: boolean } & React.CSSProperties - added:
property FigmaComplexTemplate.value: string - added:
property FigmaImageResponseProps.fonts?: FontOptions[] - added:
property FigmaImageResponseProps.imageResponseOptions?: Omit<ImageResponseOptions, 'width' | 'height'> - added:
property FigmaImageResponseProps.template: Record<string, FigmaComplexTemplate | string> - added:
property FigmaImageResponseProps.url: string
- added:
property NextBabelLoaderOptions.srcDir: string
- added:
function getTestReqInfo<R>(req?: R, reader?: TestRequestReader<R>): TestReqInfo | undefined - added:
function withRequest<R, T>(req: R, reader: TestRequestReader<R>, fn: () => T): T - added:
interface TestReqInfo - added:
interface TestRequestReader<R> - added:
method TestRequestReader.header(req: R, name: string): string | null - added:
method TestRequestReader.url(req: R): string - added:
property TestReqInfo.proxyPort: number - added:
property TestReqInfo.testData: string - added:
property TestReqInfo.url: string
- added:
const reader: TestRequestReader<Request> - added:
function handleFetch(originalFetch: Fetch, request: Request): Promise<Response> - added:
function interceptFetch(originalFetch: Fetch): () => void
- added:
function interceptHttpGet(originalFetch: Fetch): () => void
- added:
function interceptTestApis(): () => void - added:
function wrapRequestHandler<T>(handler: (req: Request, fn: () => T) => T): (req: Request, fn: () => T) => T
- changed:
function createIncrementalCache(incrementalCacheHandlerPath: string | undefined, isrMemoryCacheSize: number | undefined, fetchCacheKeyPrefix: string | undefined, distDir: string): IncrementalCache → function createIncrementalCache({ cacheHandler, cacheMaxMemorySize, fetchCacheKeyPrefix, distDir, dir, enabledDirectories, experimental, flushToDisk }: { cacheHandler?: string; cacheMaxMemorySize?: number; fetchCacheKeyPrefix?: string; distDir: string; dir: string; enabledDirectories: NextEnabledDirectories; experimental: { ppr: boolean }; flushToDisk?: boolean }): Promise<IncrementalCache>
- changed:
const isDynamicUsageError: (err: any) => boolean → const isDynamicUsageError: (err: unknown) => boolean
- added:
const isNavigationSignalError: (err: unknown) => boolean
- removed:
function generatePrefetchRsc(req: MockedRequest, path: string, res: MockedResponse, pathname: string, htmlFilepath: string, renderOpts: RenderOpts, fileWriter: FileWriter): Promise<void> - changed:
function exportAppPage(req: MockedRequest, res: MockedResponse, page: string, path: string, pathname: string, query: NextParsedUrlQuery, renderOpts: RenderOpts, htmlFilepath: string, debugOutput: boolean, isDynamicError: boolean, isAppPrefetch: boolean, fileWriter: FileWriter): Promise<ExportRouteResult> → function exportAppPage(req: MockedRequest, res: MockedResponse, page: string, path: string, pathname: string, query: NextParsedUrlQuery, renderOpts: RenderOpts, htmlFilepath: string, debugOutput: boolean, isDynamicError: boolean, fileWriter: FileWriter): Promise<ExportRouteResult> - added:
member ExportedAppPageFiles.PREFETCH_FLIGHT = 'PREFETCH_FLIGHT'
- added:
type RouteMetadata = { status: number | undefined; headers: OutgoingHttpHeaders | undefined; postponed: string | undefined }
- removed:
property ExportAppOptions.hasAppDir: boolean - removed:
property ExportAppOptions.isInvokedFromCli: boolean - removed:
property ExportPageInput.incrementalCacheHandlerPath?: string - removed:
property ExportPageInput.isrMemoryCacheSize?: NextConfigComplete['experimental']['isrMemoryCacheSize'] - changed:
type ExportAppResult = { byPath: Map<string, { revalidate?: Revalidate; metadata?: { status?: number; headers?: OutgoingHttpHeaders } }>; byPage: Map<string, { durationsByPath: Map<s… → type ExportAppResult = { byPath: Map<string, { revalidate?: Revalidate; metadata?: { status?: number; headers?: OutgoingHttpHeaders }; hasEmptyPrelude?: boolean; hasPostponed?: boole… - changed:
type ExportPageResult = ExportRouteResult & { files: ExportedPageFile[]; duration: number } → type ExportPageResult = ExportRouteResult & { files: ExportedPageFile[]; duration: number; turborepoAccessTraceResult?: SerializableTurborepoAccessTraceResult } - changed:
type ExportRouteResult = { ampValidations?: AmpValidation[]; revalidate: Revalidate; metadata?: { status?: number; headers?: OutgoingHttpHeaders }; ssgNotFound?: boolean } | { error: b… → type ExportRouteResult = { ampValidations?: AmpValidation[]; revalidate: Revalidate; metadata?: { status?: number; headers?: OutgoingHttpHeaders }; ssgNotFound?: boolean; hasEmptyPrelu… - changed:
type FileWriter = (type: string, path: string, content: any, encodingOptions?: WriteFileOptions) => Promise<void> → type FileWriter = (type: string, path: string, content: string | NodeJS.ArrayBufferView | Iterable<string | NodeJS.ArrayBufferView> | AsyncIterable<string | NodeJS.ArrayBufferVi… - added:
property ExportAppOptions.enabledDirectories: NextEnabledDirectories - added:
property ExportPageInput.cacheHandler?: string - added:
property ExportPageInput.cacheMaxMemorySize?: NextConfigComplete['cacheMaxMemorySize'] - added:
property ExportPageInput.dir: string - added:
property ExportPageInput.enabledDirectories: NextEnabledDirectories
- added:
function hasCustomExportOutput(config: NextConfigComplete): boolean
- added:
function buildCustomRoute(type: 'header', route: Header): ManifestHeaderRoute - added:
function buildCustomRoute(type: 'redirect', route: Redirect, restrictedRedirectPaths: string[]): ManifestRedirectRoute - added:
function buildCustomRoute(type: 'rewrite', route: Rewrite): ManifestRewriteRoute
- changed:
function isClientReference(reference: any): boolean → function isClientReference(mod: any): boolean
- removed:
const commandArgs: { [command: string]: () => Parameters<typeof getValidatedArgs>[0] } - removed:
type CliCommand = (args: ReturnType<typeof getValidatedArgs>) => void
- removed:
const commands: { [command: string]: () => Promise<CliCommand> } - removed:
type CliCommand = (args: ReturnType<typeof getValidatedArgs>) => void
- removed:
const ESLINT_PROMPT_VALUES: ({ title: string; recommended: boolean; config: { extends: string } } | { title: string; config: { extends: string }; recommended?: undefined } | { title: stri… - changed:
const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-action-proxy' → const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference' - changed:
const WEBPACK_LAYERS: { GROUP: { server: ('rsc' | 'action-browser' | 'app-metadata-route' | 'app-route-handler')[]; nonClientServerTarget: ('middleware' | 'api')[]; app: ('rsc' | 's… → const WEBPACK_LAYERS: { GROUP: { serverOnly: ('rsc' | 'action-browser' | 'instrument' | 'app-metadata-route' | 'app-route-handler')[]; clientOnly: ('ssr' | 'app-pages-browser')[]; n… - added:
const ACTION_SUFFIX = '.action' - added:
const NEXT_BODY_SUFFIX = '.body' - added:
const NEXT_CACHE_TAG_MAX_ITEMS = 128 - added:
const NEXT_DATA_SUFFIX = '.json' - added:
const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI' - added:
const NEXT_META_SUFFIX = '.meta' - added:
const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption' - added:
const RSC_PREFETCH_SUFFIX = '.prefetch.rsc' - added:
const RSC_SUFFIX = '.rsc'
- added:
class DetachedPromise<T = any> - added:
constructor DetachedPromise() - added:
readonly property DetachedPromise.promise: Promise<T> - added:
readonly property DetachedPromise.reject: (reason: any) => void - added:
readonly property DetachedPromise.resolve: (value: T | PromiseLike<T>) => void
- added:
const getESLintPromptValues: (cwd: string) => Promise<({ title: string; recommended: boolean; config: { extends: string | string[] } } | { title: string; config: { extends: string } } | {… - added:
const getESLintStrictValue: (cwd: string) => Promise<{ title: string; recommended: boolean; config: { extends: string | string[] } }>
- removed:
function flatReaddir(dir: string, includes: RegExp[]): Promise<string[]>
- added:
const formatCliHelpOutput: (cmd: Command, helper: Help) => string
- added:
const formatDynamicImportPath: (dir: string, filePath: string) => string
- added:
function getStackWithoutErrorMessage(error: Error): string
- added:
function rename(source: string, target: string, windowsRetryTimeout?: number | false): Promise<void>
- added:
function writeFileAtomic(filePath: string, content: string): Promise<void>
- changed:
function generateInterceptionRoutesRewrites(appPaths: string[]): Rewrite[] → function generateInterceptionRoutesRewrites(appPaths: string[], basePath?: string): Rewrite[] - added:
function isInterceptionRouteRewrite(route: Rewrite): boolean
- added:
function getFilesInDir(path: string): Promise<string[]>
- removed:
function getValidatedArgs(validArgs: arg.Spec, argv?: string[]): arg.Result<arg.Spec>
- added:
property NextError.digest?: number
- added:
function getGcEvents(): PerformanceEntry[] - added:
function startObservingGc(): void - added:
function stopObservingGc(): void
- added:
function disableMemoryDebuggingMode(): void
- added:
function enableMemoryDebuggingMode(): void
- added:
function getAllMemoryUsageSpans(): MemoryUsage[] - added:
function startPeriodicMemoryUsageTracing(): void - added:
function stopPeriodicMemoryUsageTracing(): void - added:
function traceMemoryUsage(description: string, parentSpan?: Span | undefined): void
- removed:
const ViewPortKeys: { [k in keyof Viewport]: string } - added:
const ViewportMetaKeys: { [k in keyof ViewportLayout]: string }
- added:
function createDefaultViewport(): ResolvedViewport
- changed:
function AlternatesMetadata({ alternates }: { alternates: ResolvedMetadata['alternates'] }): NonNullable<React.JSX.Element | (React.JSX.Element | null | undefined)[]>[] | null → function AlternatesMetadata({ alternates }: { alternates: ResolvedMetadata['alternates'] }): NonNullable<import('react/jsx-runtime').JSX.Element | (import('react/jsx-runtime').JSX.Element | null | undefined)[]>[] | null
- removed:
function BasicMetadata({ metadata }: { metadata: ResolvedMetadata }): NonNullable<React.JSX.Element | (React.JSX.Element | null)[]>[] - changed:
function AppleWebAppMeta({ appleWebApp }: { appleWebApp: ResolvedMetadata['appleWebApp'] }): NonNullable<React.ReactElement<any, string | React.JSXElementConstructor<any>> | React.JSX.Element[]>[] | null → function AppleWebAppMeta({ appleWebApp }: { appleWebApp: ResolvedMetadata['appleWebApp'] }): NonNullable<React.ReactElement<any, string | React.JSXElementConstructor<any>> | import('react/jsx-runtime').JSX.Element[]>[] | null - changed:
function FormatDetectionMeta({ formatDetection }: { formatDetection: ResolvedMetadata['formatDetection'] }): React.JSX.Element | null → function FormatDetectionMeta({ formatDetection }: { formatDetection: ResolvedMetadata['formatDetection'] }): import('react/jsx-runtime').JSX.Element | null - changed:
function ItunesMeta({ itunes }: { itunes: ResolvedMetadata['itunes'] }): React.JSX.Element | null → function ItunesMeta({ itunes }: { itunes: ResolvedMetadata['itunes'] }): import('react/jsx-runtime').JSX.Element | null - added:
function BasicMeta({ metadata }: { metadata: ResolvedMetadata }): NonNullable<import('react/jsx-runtime').JSX.Element | (import('react/jsx-runtime').JSX.Element | null)[]>[] - added:
function FacebookMeta({ facebook }: { facebook: ResolvedMetadata['facebook'] }): import('react/jsx-runtime').JSX.Element[] | null - added:
function ViewportMeta({ viewport }: { viewport: ResolvedViewport }): React.ReactElement<any, string | React.JSXElementConstructor<any>>[]
- changed:
function IconsMetadata({ icons }: { icons: ResolvedMetadata['icons'] }): React.JSX.Element[][] | null → function IconsMetadata({ icons }: { icons: ResolvedMetadata['icons'] }): import('react/jsx-runtime').JSX.Element[][] | null
- changed:
function isMetadataRouteFile(appDirRelativePath: string, pageExtensions: string[], withExtension: boolean): boolean → function isMetadataRouteFile(appDirRelativePath: string, pageExtensions: PageExtensions, withExtension: boolean): boolean
- changed:
function createMetadataComponents({ tree, pathname, searchParams, getDynamicParamFromSegment, appUsingSizeAdjustment, errorType }: { tree: LoaderTree; pathname: string; searchParams: { [key: string]: any }; getDynamicParamFromSegment: GetDynamicParamFromSegment; appUsingSizeAdjustment: boolean; errorType?: 'not-found' | 'redirect' }): [React.ComponentType, React.ComponentType] → function createMetadataComponents({ tree, query, metadataContext, getDynamicParamFromSegment, appUsingSizeAdjustment, errorType, createDynamicallyTrackedSearchParams }: { tree: LoaderTree; query: ParsedUrlQuery; metadataContext: MetadataContext; getDynamicParamFromSegment: GetDynamicParamFromSegment; appUsingSizeAdjustment: boolean; errorType?: 'not-found' | 'redirect'; createDynamicallyTrackedSe… - added:
function createMetadataContext(urlPathname: string, renderOpts: AppRenderContext['renderOpts']): MetadataContext
- changed:
function resolveMetadataItems({ tree, parentParams, metadataItems, errorMetadataItem, treePrefix, getDynamicParamFromSegment, searchParams, errorConvention }: { tree: LoaderTree; parentParams: { [key: string]: any }; metadataItems: MetadataItems; errorMetadataItem: MetadataItems[number]; treePrefix?: string[]; getDynamicParamFromSegment: GetDynamicParamFromSegment; searchParams: { [key: string]:… → function resolveMetadataItems({ tree, parentParams, metadataItems, errorMetadataItem, treePrefix, getDynamicParamFromSegment, searchParams, errorConvention }: { tree: LoaderTree; parentParams: { [key: string]: any }; metadataItems: MetadataItems; errorMetadataItem: MetadataItems[number]; treePrefix?: string[]; getDynamicParamFromSegment: GetDynamicParamFromSegment; searchParams: ParsedUrlQuery; e… - changed:
type MetadataItems = [Metadata | MetadataResolver | null, StaticMetadata][] → type MetadataItems = [Metadata | MetadataResolver | null, StaticMetadata, Viewport | ViewportResolver | null][] - added:
function accumulateViewport(metadataItems: MetadataItems): Promise<ResolvedViewport>
- removed:
const resolveViewport: FieldResolver<'viewport'> - changed:
const resolveThemeColor: FieldResolver<'themeColor'> → const resolveThemeColor: FieldResolver<'themeColor', Viewport> - added:
const resolveFacebook: FieldResolver<'facebook'>
- changed:
const resolveOpenGraph: FieldResolverExtraArgs<'openGraph', [ResolvedMetadata['metadataBase'], MetadataContext, string | null]> → const resolveOpenGraph: FieldResolverExtraArgs<'openGraph', [ResolvedMetadataBase, MetadataContext, string | null]> - changed:
const resolveTwitter: FieldResolverExtraArgs<'twitter', [ResolvedMetadata['metadataBase'], string | null]> → const resolveTwitter: FieldResolverExtraArgs<'twitter', [ResolvedMetadataBase, MetadataContext, string | null]> - changed:
function resolveImages(images: OpenGraph['images'], metadataBase: ResolvedMetadata['metadataBase']): NonNullable<ResolvedMetadata['openGraph']>['images'] → function resolveImages(images: OpenGraph['images'], metadataBase: ResolvedMetadataBase, isStandaloneMode: boolean): NonNullable<ResolvedMetadata['openGraph']>['images'] - changed:
function resolveImages(images: Twitter['images'], metadataBase: ResolvedMetadata['metadataBase']): NonNullable<ResolvedMetadata['twitter']>['images'] → function resolveImages(images: Twitter['images'], metadataBase: ResolvedMetadataBase, isStandaloneMode: boolean): NonNullable<ResolvedMetadata['twitter']>['images']
- changed:
function getSocialImageFallbackMetadataBase(metadataBase: URL | null): URL | null → function getSocialImageFallbackMetadataBase(metadataBase: URL | null): { fallbackMetadataBase: URL; isMetadataBaseMissing: boolean } - changed:
function resolveAbsoluteUrlWithPathname(url: string | URL, metadataBase: URL | null, pathname: string): string → function resolveAbsoluteUrlWithPathname(url: string | URL, metadataBase: URL | null, { trailingSlash, pathname }: MetadataContext): string
- added:
type Languages<T> = { [s in HrefLang]?: T }
- removed:
type Viewport = { width?: string | number; height?: string | number; initialScale?: number; minimumScale?: number; maximumScale?: number; userScalable?: boolean; viewportFit?:… - added:
type Facebook = FacebookAppId | FacebookAdmins - added:
type FacebookAdmins = { appId?: never; admins: string | string[] } - added:
type FacebookAppId = { appId: string; admins?: never } - added:
type ResolvedFacebook = { appId?: string; admins?: string[] } - added:
type ViewportLayout = { width?: string | number; height?: string | number; initialScale?: number; minimumScale?: number; maximumScale?: number; userScalable?: boolean; viewportFit?:…
- added:
type StaticMetadata = { icon: any[] | undefined; apple: any[] | undefined; openGraph: any[] | undefined; twitter: any[] | undefined; manifest: string | undefined } | null
- changed:
property Metadata.viewport?: null | string | Viewport → property Metadata.viewport?: null | string | ViewportLayout - added:
interface ResolvedViewport extends ViewportLayout - added:
interface Viewport extends ViewportLayout - added:
property Metadata.facebook?: null | Facebook - added:
property ResolvedMetadata.facebook: null | ResolvedFacebook - added:
property ResolvedViewport.colorScheme: null | ColorSchemeEnum - added:
property ResolvedViewport.themeColor: null | ThemeColorDescriptor[] - added:
property Viewport.colorScheme?: null | ColorSchemeEnum - added:
property Viewport.themeColor?: null | string | ThemeColorDescriptor | ThemeColorDescriptor[] - added:
type ResolvingViewport = Promise<Viewport>
- changed:
type FieldResolver<Key extends keyof Metadata> = (T: Metadata[Key]) => ResolvedMetadata[Key] → type FieldResolver<Key extends keyof Data & keyof ResolvedData, Data = Metadata, ResolvedData = ResolvedMetadata> = (T: Data[Key]) => ResolvedData[Key] - changed:
type FieldResolverExtraArgs<Key extends keyof Metadata, ExtraArgs extends unknown[] = any[]> = (T: Metadata[Key], ...args: ExtraArgs) => ResolvedMetadata[Key] → type FieldResolverExtraArgs<Key extends keyof Data & keyof ResolvedData, ExtraArgs extends unknown[] = any[], Data = Metadata, ResolvedData = ResolvedMetadata> = (T: Data[Key], ...args: ExtraArgs) => ResolvedData[Key] - changed:
type MetadataContext = { pathname: string } → type MetadataContext = { pathname: string; trailingSlash: boolean; isStandaloneMode: boolean }
- added:
const enum PAGE_TYPES - added:
member PAGE_TYPES.APP = 'app' - added:
member PAGE_TYPES.PAGES = 'pages' - added:
member PAGE_TYPES.ROOT = 'root'
- added:
const scheduleImmediate: <T = void>(cb: ScheduledFn<T>) => void - added:
const scheduleOnNextTick: <T = void>(cb: ScheduledFn<T>) => void - added:
function atLeastOneTask(): Promise<void> - added:
type ScheduledFn<T = void> = () => T | PromiseLike<T> - added:
type SchedulerFn<T = void> = (cb: ScheduledFn<T>) => void
- added:
function satisfies(): boolean
- changed:
function validateTurboNextConfig({ dir, isDev }: { allowRetry?: boolean; dir: string; port: number; hostname?: string; isDev?: boolean }): Promise<NextConfig> → function validateTurboNextConfig({ dir, isDev }: { dir: string; isDev?: boolean }): Promise<NextConfig>
- changed:
function writeAppTypeDeclarations({ baseDir, imageImportsEnabled, hasPagesDir, isAppDirEnabled }: { baseDir: string; imageImportsEnabled: boolean; hasPagesDir: boolean; isAppDirEnabled: boolean }): Promise<void> → function writeAppTypeDeclarations({ baseDir, imageImportsEnabled, hasPagesDir, hasAppDir }: { baseDir: string; imageImportsEnabled: boolean; hasPagesDir: boolean; hasAppDir: boolean }): Promise<void>
- changed:
function writeConfigurationDefaults(ts: typeof import('typescript'), tsConfigPath: string, isFirstTimeSetup: boolean, isAppDirEnabled: boolean, distDir: string, hasPagesDir: boolean): Promise<void> → function writeConfigurationDefaults(ts: typeof import('typescript'), tsConfigPath: string, isFirstTimeSetup: boolean, hasAppDir: boolean, distDir: string, hasPagesDir: boolean): Promise<void>
- added:
function getPathname(url: string): string - added:
function isFullStringUrl(url: string): boolean - added:
function parseUrl(url: string): URL | undefined
- added:
function verifyRootLayout({ dir, appDir, tsconfigPath, pagePath, pageExtensions }: { dir: string; appDir: string; tsconfigPath: string; pagePath: string; pageExtensions: PageExtensions }): Promise<[boolean, string | undefined]>
- removed:
function verifyRootLayout({ dir, appDir, tsconfigPath, pagePath, pageExtensions }: { dir: string; appDir: string; tsconfigPath: string; pagePath: string; pageExtensions: string[] }): Promise<[boolean, string | undefined]>
- changed:
constructor Worker(workerPath: string, options: FarmOptions & { timeout?: number; onRestart?: (method: string, args: any[], attempts: number) => void; exposedMethods: ReadonlyArray<string>; enableWorkerThreads?: boolean }) → constructor Worker(workerPath: string, options: FarmOptions & { timeout?: number; onRestart?: (method: string, args: any[], attempts: number) => void; logger?: Pick<typeof console, 'error' | 'info' | 'warn'>; exposedMethods: ReadonlyArray<string>; enableWorkerThreads?: boolean })
- changed:
method App.render(): React.JSX.Element → method App.render(): import('react/jsx-runtime').JSX.Element
- changed:
function Html(props: React.DetailedHTMLProps<React.HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement>): React.JSX.Element → function Html(props: React.DetailedHTMLProps<React.HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement>): import('react/jsx-runtime').JSX.Element - changed:
function Main(): React.JSX.Element → function Main(): import('react/jsx-runtime').JSX.Element - changed:
method Document.render(): React.JSX.Element → method Document.render(): import('react/jsx-runtime').JSX.Element - changed:
method Head.getBeforeInteractiveInlineScripts(): React.JSX.Element[] → method Head.getBeforeInteractiveInlineScripts(): import('react/jsx-runtime').JSX.Element[] - changed:
method Head.getDynamicChunks(files: DocumentFiles): (React.JSX.Element | null)[] → method Head.getDynamicChunks(files: DocumentFiles): (import('react/jsx-runtime').JSX.Element | null)[] - changed:
method Head.getPolyfillScripts(): React.JSX.Element[] → method Head.getPolyfillScripts(): import('react/jsx-runtime').JSX.Element[] - changed:
method Head.getPreNextScripts(): React.JSX.Element → method Head.getPreNextScripts(): import('react/jsx-runtime').JSX.Element - changed:
method Head.getPreloadDynamicChunks(): (React.JSX.Element | null)[] → method Head.getPreloadDynamicChunks(): (import('react/jsx-runtime').JSX.Element | null)[] - changed:
method Head.getScripts(files: DocumentFiles): React.JSX.Element[] → method Head.getScripts(files: DocumentFiles): import('react/jsx-runtime').JSX.Element[] - changed:
method Head.render(): React.JSX.Element → method Head.render(): import('react/jsx-runtime').JSX.Element - changed:
method NextScript.getDynamicChunks(files: DocumentFiles): (React.JSX.Element | null)[] → method NextScript.getDynamicChunks(files: DocumentFiles): (import('react/jsx-runtime').JSX.Element | null)[] - changed:
method NextScript.getPolyfillScripts(): React.JSX.Element[] → method NextScript.getPolyfillScripts(): import('react/jsx-runtime').JSX.Element[] - changed:
method NextScript.getPreNextScripts(): React.JSX.Element → method NextScript.getPreNextScripts(): import('react/jsx-runtime').JSX.Element - changed:
method NextScript.getScripts(files: DocumentFiles): React.JSX.Element[] → method NextScript.getScripts(files: DocumentFiles): import('react/jsx-runtime').JSX.Element[] - changed:
method NextScript.render(): React.JSX.Element | null → method NextScript.render(): import('react/jsx-runtime').JSX.Element | null
- changed:
method Error.render(): React.JSX.Element → method Error.render(): import('react/jsx-runtime').JSX.Element
- added:
function wrapApiHandler<T extends (...args: any[]) => any>(page: string, handler: T): T
- changed:
function tryGetPreviewData(req: IncomingMessage | BaseNextRequest | Request, res: ServerResponse | BaseNextResponse, options: __ApiPreviewProps): PreviewData → function tryGetPreviewData(req: IncomingMessage | BaseNextRequest | Request, res: ServerResponse | BaseNextResponse, options: __ApiPreviewProps, multiZoneDraftMode: boolean): PreviewData
- changed:
function handleAction({ req, res, ComponentMod, page, serverActionsManifest, generateFlight, staticGenerationStore, requestStore, serverActionsBodySizeLimit, ctx }: { req: IncomingMessage; res: ServerResponse; ComponentMod: any; page: string; serverActionsManifest: any; generateFlight: GenerateFlight; staticGenerationStore: StaticGenerationStore; requestStore: RequestStore; serverActionsBodySizeL… → function handleAction({ req, res, ComponentMod, serverModuleMap, generateFlight, staticGenerationStore, requestStore, serverActions, ctx }: { req: IncomingMessage; res: ServerResponse; ComponentMod: AppPageModule; serverModuleMap: ServerModuleMap; generateFlight: GenerateFlight; staticGenerationStore: StaticGenerationStore; requestStore: RequestStore; serverActions?: { bodySizeLimit?: SizeLimit;…
- added:
function createServerModuleMap({ serverActionsManifest, pageName }: { serverActionsManifest: ActionManifest; pageName: string }): {} - added:
function selectWorkerForForwarding(actionId: string, pageName: string, serverActionsManifest: ActionManifest): string | undefined
- changed:
type AppPageRender = (req: IncomingMessage, res: ServerResponse, pagePath: string, query: NextParsedUrlQuery, renderOpts: RenderOpts) => Promise<RenderResult> → type AppPageRender = (req: IncomingMessage, res: ServerResponse, pagePath: string, query: NextParsedUrlQuery, renderOpts: RenderOpts) => Promise<RenderResult<AppPageRenderResultMet… - changed:
type AppRenderContext = AppRenderBaseContext & { getDynamicParamFromSegment: GetDynamicParamFromSegment; query: NextParsedUrlQuery; isPrefetch: boolean; providedSearchParams: NextPars… → type AppRenderContext = AppRenderBaseContext & { getDynamicParamFromSegment: GetDynamicParamFromSegment; query: NextParsedUrlQuery; isPrefetch: boolean; requestTimestamp: number; appU… - added:
type BinaryStreamOf<T> = ReadableStream<Uint8Array>
- removed:
function createComponentAndStyles({ filePath, getComponent, injectedCSS, ctx }: { filePath: string; getComponent: () => any; injectedCSS: Set<string>; ctx: AppRenderContext }): Promise<any>
- added:
function createComponentStylesAndScripts({ filePath, getComponent, injectedCSS, injectedJS, ctx }: { filePath: string; getComponent: () => any; injectedCSS: Set<string>; injectedJS: Set<string>; ctx: AppRenderContext }): Promise<[React.ComponentType<any>, React.ReactNode, React.ReactNode]>
- changed:
function createComponentTree({ createSegmentPath, loaderTree: tree, parentParams, firstItem, rootLayoutIncluded, injectedCSS, injectedFontPreloadTags, asNotFound, metadataOutlet, ctx }: { createSegmentPath: CreateSegmentPath; loaderTree: LoaderTree; parentParams: { [key: string]: any }; rootLayoutIncluded: boolean; firstItem?: boolean; injectedCSS: Set<string>; injectedFontPreloadTags: Set<string… → function createComponentTree(props: { createSegmentPath: CreateSegmentPath; loaderTree: LoaderTree; parentParams: Params; rootLayoutIncluded: boolean; firstItem?: boolean; injectedCSS: Set<string>; injectedJS: Set<string>; injectedFontPreloadTags: Set<string>; asNotFound?: boolean; metadataOutlet?: React.ReactNode; ctx: AppRenderContext; missingSlots?: Set<string> }): Promise<CacheNodeSeedData>
- changed:
function createErrorHandler({ _source, dev, isNextExport, errorLogger, capturedErrors, allCapturedErrors }: { _source: string; dev?: boolean; isNextExport?: boolean; errorLogger?: (err: any) => Promise<void>; capturedErrors: Error[]; allCapturedErrors?: Error[] }): ErrorHandler → function createErrorHandler({ source, dev, isNextExport, errorLogger, digestErrorsMap, allCapturedErrors, silenceLogger }: { source: (typeof ErrorHandlerSource)[keyof typeof ErrorHandlerSource]; dev?: boolean; isNextExport?: boolean; errorLogger?: (err: any) => Promise<void>; digestErrorsMap: Map<string, Error>; allCapturedErrors?: Error[]; silenceLogger?: boolean }): ErrorHandler - changed:
type ErrorHandler = (err: any) => string → type ErrorHandler = (err: unknown, errorInfo: unknown) => string | undefined - added:
const ErrorHandlerSource: { readonly serverComponents: 'serverComponents'; readonly flightData: 'flightData'; readonly html: 'html' } - added:
declare global
- changed:
function addSearchParamsIfPageSegment(segment: Segment, searchParams: any): string | [string, string, 'd' | 'c' | 'oc'] → function addSearchParamsIfPageSegment(segment: Segment, searchParams: any): string | [string, string, 'd' | 'c' | 'ci' | 'oc' | 'di']
- removed:
function createServerComponentRenderer<Props>(ComponentToRender: (props: Props) => any, ComponentMod: AppPageModule, { inlinedDataTransformStream, clientReferenceManifest, serverContexts, formState }: { inlinedDataTransformStream: TransformStream<Uint8Array, Uint8Array>; clientReferenceManifest: NonNullable<RenderOpts['clientReferenceManifest']>; serverContexts: Array<[ServerContextName: string,…
- added:
const isCsrfOriginAllowed: (originDomain: string, allowedOrigins?: string[]) => boolean
- added:
function Postpone({ reason, prerenderState, pathname }: PostponeProps): never - added:
function createPostponedAbortSignal(reason: string): AbortSignal - added:
function createPrerenderState(isDebugSkeleton: boolean | undefined): PrerenderState - added:
function formatDynamicAPIAccesses(prerenderState: PrerenderState): string[] - added:
function markCurrentScopeAsDynamic(store: StaticGenerationStore, expression: string): void - added:
function trackDynamicDataAccessed(store: StaticGenerationStore, expression: string): void - added:
function trackDynamicFetch(store: StaticGenerationStore, expression: string): void - added:
function usedDynamicAPIs(prerenderState: PrerenderState): boolean - added:
type PrerenderState = { readonly isDebugSkeleton: boolean | undefined; readonly dynamicAccesses: DynamicAccess[] }
- added:
function decryptActionBoundArgs(actionId: string, encrypted: Promise<string>): Promise<any> - added:
function encryptActionBoundArgs(actionId: string, args: any[]): Promise<string>
- added:
function arrayBufferToString(buffer: ArrayBuffer): string - added:
function decrypt(key: CryptoKey, iv: Uint8Array, data: Uint8Array): Promise<ArrayBuffer> - added:
function encrypt(key: CryptoKey, iv: Uint8Array, data: Uint8Array): Promise<ArrayBuffer> - added:
function generateEncryptionKeyBase64(dev?: boolean): Promise<string> - added:
function getActionEncryptionKey(): Promise<CryptoKey> - added:
function getClientReferenceManifestSingleton(): { readonly moduleLoading: { readonly prefix: string; readonly crossOrigin: string | null }; readonly clientModules: { readonly [x: string]: { readonly id: string | number; readonly name: string; readonly chunks: readonly string[]; readonly async?: boolean | undefined } }; readonly ssrModuleMapping: { readonly [x: string]: { readonly [x: string]: { r… - added:
function getServerModuleMap(): { [id: string]: { id: string; chunks: string[]; name: string } } - added:
function setReferenceManifestsSingleton({ clientReferenceManifest, serverActionsManifest, serverModuleMap }: { clientReferenceManifest: DeepReadonly<ClientReferenceManifest>; serverActionsManifest: DeepReadonly<ActionManifest>; serverModuleMap: { [id: string]: { id: string; chunks: string[]; name: string } } }): void - added:
function stringToUint8Array(binary: string): Uint8Array
- removed:
const NotFoundBoundary: typeof import('../../client/components/not-found-boundary').NotFoundBoundary - removed:
export { StaticGenerationSearchParamsBailoutProvider } - removed:
export { createSearchParamsBailoutProxy } - removed:
export { staticGenerationBailout } - added:
export { ClientPageRoot } - added:
export { NotFoundBoundary } - added:
export { Postpone } - added:
export { createDynamicallyTrackedSearchParams } - added:
export { createUntrackedSearchParams } - added:
export { taintObjectReference } - added:
function patchFetch(): void
- changed:
constructor FlightRenderResult(response: string | ReadableStream<Uint8Array>) → constructor FlightRenderResult(response: string | ReadableStream<Uint8Array>, options?: RenderResultOptions)
- removed:
interface FlightResponseRef - removed:
property FlightResponseRef.current: Promise<JSX.Element> | null
- removed:
function getCssInlinedLinkTags(clientReferenceManifest: ClientReferenceManifest, filePath: string, injectedCSS: Set<string>, collectNewCSSImports?: boolean): string[] - added:
function getLinkAndScriptTags(clientReferenceManifest: DeepReadonly<ClientReferenceManifest>, filePath: string, injectedCSS: Set<string>, injectedScripts: Set<string>, collectNewImports?: boolean): { styles: string[]; scripts: string[] }
- changed:
function getLayerAssets({ ctx, layoutOrPagePath, injectedCSS: injectedCSSWithCurrentLayout, injectedFontPreloadTags: injectedFontPreloadTagsWithCurrentLayout }: { layoutOrPagePath: string | undefined; injectedCSS: Set<string>; injectedFontPreloadTags: Set<string>; ctx: AppRenderContext }): React.ReactNode → function getLayerAssets({ ctx, layoutOrPagePath, injectedCSS: injectedCSSWithCurrentLayout, injectedJS: injectedJSWithCurrentLayout, injectedFontPreloadTags: injectedFontPreloadTagsWithCurrentLayout }: { layoutOrPagePath: string | undefined; injectedCSS: Set<string>; injectedJS: Set<string>; injectedFontPreloadTags: Set<string>; ctx: AppRenderContext }): React.ReactNode
- changed:
function getPreloadableFonts(nextFontManifest: NextFontManifest | undefined, filePath: string | undefined, injectedFontPreloadTags: Set<string>): string[] | null → function getPreloadableFonts(nextFontManifest: DeepReadonly<NextFontManifest> | undefined, filePath: string | undefined, injectedFontPreloadTags: Set<string>): string[] | null
- changed:
function makeGetServerInsertedHTML({ polyfills, renderServerInsertedHTML }: { polyfills: JSX.IntrinsicElements['script'][]; renderServerInsertedHTML: () => React.ReactNode }): (serverCapturedErrors: Error[]) => Promise<string> → function makeGetServerInsertedHTML({ polyfills, renderServerInsertedHTML, serverCapturedErrors, basePath }: { polyfills: JSX.IntrinsicElements['script'][]; renderServerInsertedHTML: () => React.ReactNode; serverCapturedErrors: Error[]; basePath: string }): () => Promise<string>
- removed:
function preloadComponent(Component: any, props: any): any
- changed:
function getRequiredScripts(buildManifest: BuildManifest, assetPrefix: string, crossOrigin: string | undefined, SRIManifest: undefined | Record<string, string>, qs: string, nonce: string | undefined): [() => void, { src: string; integrity?: string; crossOrigin?: string | undefined }] → function getRequiredScripts(buildManifest: BuildManifest, assetPrefix: string, crossOrigin: undefined | '' | 'anonymous' | 'use-credentials', SRIManifest: undefined | Record<string, string>, qs: string, nonce: string | undefined): [() => void, { src: string; integrity?: string; crossOrigin?: string | undefined }]
- added:
export { Postpone } from '../dynamic-rendering'
- added:
const taintObjectReference: (message: string | undefined, object: Reference) => void - added:
const taintUniqueValue: (message: string | undefined, lifetime: Reference, value: TaintableUniqueValue) => void
- changed:
function createServerInsertedHTML(): { ServerInsertedHTMLProvider({ children }: { children: JSX.Element }): React.JSX.Element; renderServerInsertedHTML(): React.JSX.Element[] } → function createServerInsertedHTML(): { ServerInsertedHTMLProvider({ children }: { children: JSX.Element }): import('react/jsx-runtime').JSX.Element; renderServerInsertedHTML(): import('react/jsx-runtime').JSX.Element[] }
- added:
class ServerRenderer implements Renderer - added:
class VoidRenderer implements Renderer - added:
const DYNAMIC_DATA: 1 - added:
const DYNAMIC_HTML: 2 - added:
constructor ServerRenderer(options: RenderToReadableStreamOptions) - added:
function createStaticRenderer({ ppr, isStaticGeneration, postponed, streamOptions: { signal, onError, onPostpone, onHeaders, maxHeadersLength, nonce, bootstrapScripts, formState } }: Options): Renderer - added:
function getDynamicDataPostponedState(): DynamicDataPostponedState - added:
function getDynamicHTMLPostponedState(data: object): DynamicHTMLPostponedState - added:
interface Renderer - added:
method Renderer.render(children: JSX.Element): Promise<RenderResult> - added:
method ServerRenderer.render(children: JSX.Element): Promise<RenderResult> - added:
method VoidRenderer.render(_children: JSX.Element): Promise<RenderResult> - added:
type PostponedState = DynamicDataPostponedState | DynamicHTMLPostponedState
- added:
function stripFlightHeaders(headers: IncomingHttpHeaders): void
- removed:
property RenderOptsPartial.serverActionsBodySizeLimit?: SizeLimit - removed:
property RenderOptsPartial.supportsDynamicHTML: boolean - removed:
type ChildProp = { current: React.ReactNode | null; segment: Segment } - changed:
property RenderOptsPartial.clientReferenceManifest?: ClientReferenceManifest → property RenderOptsPartial.clientReferenceManifest?: DeepReadonly<ClientReferenceManifest> - changed:
property RenderOptsPartial.nextFontManifest?: NextFontManifest → property RenderOptsPartial.nextFontManifest?: DeepReadonly<NextFontManifest> - changed:
type DynamicParamTypes = 'catchall' | 'optional-catchall' | 'dynamic' → type DynamicParamTypes = 'catchall' | 'catchall-intercepted' | 'optional-catchall' | 'dynamic' | 'dynamic-intercepted' - changed:
type FlightDataPath = any[] | [...FlightSegmentPath[], Segment, FlightRouterState, React.ReactNode | null, React.ReactNode | null] → type FlightDataPath = any[] | [...FlightSegmentPath[], Segment, FlightRouterState, CacheNodeSeedData, React.ReactNode | null] - changed:
type FlightRouterState = [segment: Segment, parallelRoutes: { [parallelRouterKey: string]: FlightRouterState }, url?: string | null, refresh?: 'refetch' | null, isRootLayout?: boolean] → type FlightRouterState = [segment: Segment, parallelRoutes: { [parallelRouterKey: string]: FlightRouterState }, url?: string | null, refresh?: 'refetch' | 'refresh' | null, isRootLayou… - added:
property RenderOptsPartial.builtInWaitUntil?: WaitUntil - added:
property RenderOptsPartial.enableTainting?: boolean - added:
property RenderOptsPartial.experimental: { ppr: boolean; missingSuspenseWithCSRBailout: boolean; swrDelta: SwrDelta | undefined } - added:
property RenderOptsPartial.isDebugPPRSkeleton?: boolean - added:
property RenderOptsPartial.isStaticGeneration?: boolean - added:
property RenderOptsPartial.postponed?: string - added:
property RenderOptsPartial.serverActions?: { bodySizeLimit?: SizeLimit; allowedOrigins?: string[] } - added:
property RenderOptsPartial.supportsDynamicResponse: boolean - added:
property RenderOptsPartial.trailingSlash: boolean - added:
type CacheNodeSeedData = [segment: Segment, parallelRoutes: { [parallelRouterKey: string]: CacheNodeSeedData | null }, node: React.ReactNode | null, loading: LoadingModuleData]
- removed:
function useFlightResponse(writable: WritableStream<Uint8Array>, flightStream: ReadableStream<Uint8Array>, clientReferenceManifest: ClientReferenceManifest, flightResponseRef: FlightResponseRef, formState: null | any, nonce?: string): Promise<JSX.Element> - added:
function createInlinedDataReadableStream(flightStream: ReadableStream<Uint8Array>, nonce: string | undefined, formState: unknown | null): ReadableStream<Uint8Array> - added:
function flightRenderComplete(flightStream: ReadableStream<Uint8Array>): Promise<void> - added:
function useFlightStream<T>(flightStream: BinaryStreamOf<T>, clientReferenceManifest: DeepReadonly<ClientReferenceManifest>, nonce?: string): Promise<T>
- changed:
function walkTreeWithFlightRouterState({ createSegmentPath, loaderTreeToFilter, parentParams, isFirst, flightRouterState, parentRendered, rscPayloadHead, injectedCSS, injectedFontPreloadTags, rootLayoutIncluded, asNotFound, metadataOutlet, ctx }: { createSegmentPath: CreateSegmentPath; loaderTreeToFilter: LoaderTree; parentParams: { [key: string]: string | string[] }; isFirst: boolean; flightRout… → function walkTreeWithFlightRouterState({ createSegmentPath, loaderTreeToFilter, parentParams, isFirst, flightRouterState, parentRendered, rscPayloadHead, injectedCSS, injectedJS, injectedFontPreloadTags, rootLayoutIncluded, asNotFound, metadataOutlet, ctx }: { createSegmentPath: CreateSegmentPath; loaderTreeToFilter: LoaderTree; parentParams: { [key: string]: string | string[] }; isFirst: boolean…
- changed:
type StaticGenerationContext = { urlPathname: string; renderOpts: { originalPathname?: string; incrementalCache?: IncrementalCache; supportsDynamicHTML: boolean; isRevalidate?: boolean; isOn… → type StaticGenerationContext = { urlPathname: string; requestEndedState?: { ended?: boolean }; renderOpts: { incrementalCache?: IncrementalCache; isOnDemandRevalidate?: boolean; fetchCache?:…
- removed:
abstract method BaseNextRequest.parseBody(limit: string | number): Promise<any> - changed:
type FetchMetrics = Array<{ url: string; idx: number; end: number; start: number; method: string; status: number; cacheReason: string; cacheStatus: 'hit' | 'miss' | 'skip' }> → type FetchMetrics = Array<FetchMetric> - added:
abstract property BaseNextRequest.fetchMetrics?: FetchMetric[] - added:
type FetchMetric = { url: string; idx: number; end: number; start: number; method: string; status: number; cacheReason: string; cacheStatus: 'hit' | 'miss' | 'skip' }
- removed:
method NodeNextRequest.parseBody(limit: SizeLimit): Promise<any> - added:
property NodeNextRequest.fetchMetrics?: FetchMetric[]
- changed:
constructor WebNextRequest(request: Request) → constructor WebNextRequest(request: NextRequestHint)
- removed:
protected abstract method Server.getHasAppDir(dev: boolean): boolean - removed:
protected method Server.handleCatchallMiddlewareRequest(_req: BaseNextRequest, _res: BaseNextResponse, _parsedUrl: NextUrlWithParsedQuery): Promise<{ finished: boolean }> - removed:
protected method Server.handleCatchallRenderRequest(_req: BaseNextRequest, _res: BaseNextResponse, _parsedUrl: NextUrlWithParsedQuery): Promise<{ finished: boolean }> - removed:
protected method Server.handleNextDataRequest(req: BaseNextRequest, res: BaseNextResponse, parsedUrl: NextUrlWithParsedQuery): Promise<{ finished: boolean }> - removed:
protected method Server.handleNextImageRequest(_req: BaseNextRequest, _res: BaseNextResponse, _parsedUrl: NextUrlWithParsedQuery): Promise<{ finished: boolean }> - removed:
protected method Server.stripInternalHeaders(req: BaseNextRequest): void - removed:
protected readonly property Server.hasAppDir: boolean - changed:
call BaseRequestHandler(req: BaseNextRequest, res: BaseNextResponse, parsedUrl?: NextUrlWithParsedQuery | undefined): Promise<void> → call BaseRequestHandler(req: BaseNextRequest, res: BaseNextResponse, parsedUrl?: NextUrlWithParsedQuery | undefined): Promise<void> | void - changed:
protected abstract method Server.findPageComponents(params: { page: string; query: NextParsedUrlQuery; params: Params; isAppPath: boolean; sriEnabled?: boolean; appPaths?: ReadonlyArray<string> | null; shouldEnsure?: boolean }): Promise<FindComponentsResult | null> → protected abstract method Server.findPageComponents(params: { page: string; query: NextParsedUrlQuery; params: Params; isAppPath: boolean; sriEnabled?: boolean; appPaths?: ReadonlyArray<string> | null; shouldEnsure?: boolean; url?: string }): Promise<FindComponentsResult | null> - changed:
protected abstract method Server.getFallbackErrorComponents(): Promise<LoadComponentsReturnType | null> → protected abstract method Server.getFallbackErrorComponents(url?: string): Promise<LoadComponentsReturnType | null> - changed:
protected abstract method Server.getFontManifest(): FontManifest | undefined → protected abstract method Server.getFontManifest(): DeepReadonly<FontManifest> | undefined - changed:
protected abstract method Server.getIncrementalCache(options: { requestHeaders: Record<string, undefined | string | string[]>; requestProtocol: 'http' | 'https' }): import('./lib/incremental-cache').IncrementalCache → protected abstract method Server.getIncrementalCache(options: { requestHeaders: Record<string, undefined | string | string[]>; requestProtocol: 'http' | 'https' }): Promise<import('./lib/incremental-cache').IncrementalCache> - changed:
protected abstract method Server.getNextFontManifest(): NextFontManifest | undefined → protected abstract method Server.getNextFontManifest(): DeepReadonly<NextFontManifest> | undefined - changed:
protected abstract method Server.getPrerenderManifest(): PrerenderManifest → protected abstract method Server.getPrerenderManifest(): DeepReadonly<PrerenderManifest> - changed:
protected abstract method Server.sendRenderResult(req: BaseNextRequest, res: BaseNextResponse, options: { result: RenderResult; type: 'html' | 'json' | 'rsc'; generateEtags: boolean; poweredByHeader: boolean; options?: PayloadOptions }): Promise<void> → protected abstract method Server.sendRenderResult(req: BaseNextRequest, res: BaseNextResponse, options: { result: RenderResult; type: 'html' | 'json' | 'rsc'; generateEtags: boolean; poweredByHeader: boolean; revalidate?: Revalidate; swrDelta?: SwrDelta }): Promise<void> - changed:
protected property Server.nextFontManifest?: NextFontManifest → protected property Server.nextFontManifest?: DeepReadonly<NextFontManifest> - changed:
protected readonly property Server.clientReferenceManifest?: ClientReferenceManifest → protected readonly property Server.clientReferenceManifest?: DeepReadonly<ClientReferenceManifest> - added:
function isRSCRequestCheck(req: IncomingMessage | BaseNextRequest): boolean - added:
protected abstract method Server.getEnabledDirectories(dev: boolean): NextEnabledDirectories - added:
protected abstract method Server.getinterceptionRoutePatterns(): RegExp[] - added:
protected method Server.getWaitUntil(): WaitUntil | undefined - added:
protected method Server.pathCouldBeIntercepted(resolvedPathname: string): boolean - added:
protected method Server.setVaryHeader(req: BaseNextRequest, res: BaseNextResponse, isAppPath: boolean, resolvedPathname: string): void - added:
protected property Server.handleCatchallMiddlewareRequest: RouteHandler - added:
protected property Server.handleCatchallRenderRequest: RouteHandler - added:
protected property Server.handleNextImageRequest: RouteHandler - added:
protected property Server.interceptionRoutePatterns: RegExp[] - added:
protected readonly property Server.enabledDirectories: NextEnabledDirectories - added:
protected readonly property Server.experimentalTestProxy?: boolean - added:
protected readonly property Server.normalizers: { readonly action: ActionPathnameNormalizer | undefined; readonly postponed: PostponedPathnameNormalizer | undefined; readonly rsc: RSCPathnameNormalizer | undefined; readonly prefetchRSC: PrefetchRSCPathnameNormalizer | undefined; readonly data: NextDataPathnameNormalizer | undefined } - added:
type NextEnabledDirectories = { readonly pages: boolean; readonly app: boolean } - added:
type RouteHandler = (req: BaseNextRequest, res: BaseNextResponse, parsedUrl: NextUrlWithParsedQuery) => PromiseLike<boolean> | boolean
- added:
function getClientComponentLoaderMetrics(options?: { reset?: boolean }): { clientComponentLoadStart: number; clientComponentLoadTimes: number; clientComponentLoadCount: number } | undefined - added:
function wrapClientComponentLoader(ComponentMod: any): any
- removed:
property ExperimentalConfig.deploymentId?: string - removed:
property ExperimentalConfig.logging?: { level?: 'verbose'; fullUrl?: boolean } - removed:
property ExperimentalConfig.serverActionsBodySizeLimit?: SizeLimit - removed:
property ExperimentalConfig.useDeploymentId?: boolean - removed:
property ExperimentalConfig.useDeploymentIdServerActions?: boolean - removed:
type TurboRule = TurboLoaderItem[] | { loaders: TurboLoaderItem[]; as: string } - changed:
property ExperimentalConfig.serverActions?: boolean → property ExperimentalConfig.serverActions?: { bodySizeLimit?: SizeLimit; allowedOrigins?: string[] } - changed:
property ExperimentalTurboOptions.rules?: Record<string, TurboRule> → property ExperimentalTurboOptions.rules?: Record<string, TurboRuleConfigItemOrShortcut> - changed:
property I18NConfig.domains?: DomainLocale[] → property I18NConfig.domains?: I18NDomains - changed:
property NextConfig.compiler?: { reactRemoveProperties?: boolean | { properties?: string[] }; relay?: { src: string; artifactDirectory?: string; language?: 'typescript' | 'javascript' | 'flow'; eagerEsModules?: boolean }; removeConsole?: boolean | { exclude?: string[] }; styledComponents?: boolean | StyledComponentsConfig; emotion?: boolean | EmotionConfig } → property NextConfig.compiler?: { reactRemoveProperties?: boolean | { properties?: string[] }; relay?: { src: string; artifactDirectory?: string; language?: 'typescript' | 'javascript' | 'flow'; eagerEsModules?: boolean }; removeConsole?: boolean | { exclude?: string[] }; styledComponents?: boolean | StyledComponentsConfig; emotion?: boolean | EmotionConfig; styledJsx?: boolean | { useLightningcss… - changed:
property NextConfig.crossOrigin?: false | 'anonymous' | 'use-credentials' → property NextConfig.crossOrigin?: 'anonymous' | 'use-credentials' - changed:
property NextConfig.env?: Record<string, string> → property NextConfig.env?: Record<string, string | undefined> - added:
property ExperimentalConfig.cssChunking?: 'strict' | 'loose' - added:
property ExperimentalConfig.linkNoTouchStart?: boolean - added:
property ExperimentalConfig.missingSuspenseWithCSRBailout?: boolean - added:
property ExperimentalConfig.multiZoneDraftMode?: boolean - added:
property ExperimentalConfig.parallelServerBuildTraces?: boolean - added:
property ExperimentalConfig.parallelServerCompiles?: boolean - added:
property ExperimentalConfig.preloadEntriesOnStart?: boolean - added:
property ExperimentalConfig.prerenderEarlyExit?: boolean - added:
property ExperimentalConfig.staleTimes?: { dynamic?: number; static?: number } - added:
property ExperimentalConfig.staticWorkerRequestDeduping?: boolean - added:
property ExperimentalConfig.swrDelta?: SwrDelta - added:
property ExperimentalConfig.taint?: boolean - added:
property ExperimentalConfig.testProxy?: boolean - added:
property ExperimentalConfig.useEarlyImport?: boolean - added:
property ExperimentalConfig.useLightningcss?: boolean - added:
property ExperimentalConfig.useWasmBinary?: boolean - added:
property ExperimentalTurboOptions.resolveExtensions?: string[] - added:
property ExperimentalTurboOptions.useSwcCss?: boolean - added:
property NextConfig.allowedDevOrigins?: string[] - added:
property NextConfig.cacheHandler?: string | undefined - added:
property NextConfig.cacheMaxMemorySize?: number - added:
property NextConfig.deploymentId?: string - added:
property NextConfig.logging?: { fetches?: { fullUrl?: boolean } } - added:
type I18NDomains = DomainLocale[] - added:
type TurboRuleConfigItem = TurboRuleConfigItemOptions | { [condition: string]: TurboRuleConfigItem } | false - added:
type TurboRuleConfigItemOptions = { loaders: TurboLoaderItem[]; as?: string } - added:
type TurboRuleConfigItemOrShortcut = TurboLoaderItem[] | TurboRuleConfigItem
- added:
function extractModulesFromTurbopackMessage(data: TurbopackUpdate | TurbopackUpdate[]): string[]
- added:
function createHotReloaderTurbopack(opts: SetupOpts, serverFields: ServerFields, distDir: string): Promise<NextJsHotReloaderInterface>
- removed:
property TurbopackConnectedAction.type: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED - removed:
property TurbopackMessageAction.type: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE - changed:
method NextJsHotReloaderInterface.ensurePage({ page, clientOnly, appPaths, definition, isApp }: { page: string; clientOnly: boolean; appPaths?: ReadonlyArray<string> | null; isApp?: boolean; definition: RouteDefinition | undefined }): Promise<void> → method NextJsHotReloaderInterface.ensurePage({ page, clientOnly, appPaths, definition, isApp, url }: { page: string; clientOnly: boolean; appPaths?: ReadonlyArray<string> | null; isApp?: boolean; definition: RouteDefinition | undefined; url?: string }): Promise<void> - changed:
method NextJsHotReloaderInterface.invalidate({ reloadAfterInvalidation }: { reloadAfterInvalidation: boolean }): void → method NextJsHotReloaderInterface.invalidate({ reloadAfterInvalidation }: { reloadAfterInvalidation: boolean }): Promise<void> | void - added:
interface CompilationError - added:
interface SyncAction - added:
member HMR_ACTIONS_SENT_TO_BROWSER.CLIENT_CHANGES = 'clientChanges' - added:
property CompilationError.details?: string - added:
property CompilationError.message: string - added:
property CompilationError.moduleName?: string - added:
property CompilationError.moduleTrace?: Array<{ moduleName?: string }> - added:
property CompilationError.stack?: string - added:
property SyncAction.action: HMR_ACTIONS_SENT_TO_BROWSER.SYNC - added:
property SyncAction.errors: ReadonlyArray<CompilationError> - added:
property SyncAction.hash: string - added:
property SyncAction.updatedModules?: ReadonlyArray<string> - added:
property SyncAction.versionInfo: VersionInfo - added:
property SyncAction.warnings: ReadonlyArray<CompilationError> - added:
property TurbopackConnectedAction.action: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED - added:
property TurbopackMessageAction.action: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE - added:
type TurbopackMsgToBrowser = { type: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE; data: any } | { type: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED }
- removed:
constructor HotReloader(dir: string, { config, pagesDir, distDir, buildId, previewProps, rewrites, appDir, telemetry }: { config: NextConfigComplete; pagesDir?: string; distDir: string; buildId: string; previewProps: __ApiPreviewProps; rewrites: CustomRoutes['rewrites']; appDir?: string; telemetry: Telemetry }) - removed:
default class HotReloader implements NextJsHotReloaderInterface - removed:
method HotReloader.buildFallbackError(): Promise<void> - removed:
method HotReloader.clearHmrServerError(): void - removed:
method HotReloader.ensurePage({ page, clientOnly, appPaths, definition, isApp }: { page: string; clientOnly: boolean; appPaths?: ReadonlyArray<string> | null; isApp?: boolean; definition?: RouteDefinition }): Promise<void> - removed:
method HotReloader.getCompilationErrors(page: string): Promise<any[]> - removed:
method HotReloader.invalidate({ reloadAfterInvalidation }?: { reloadAfterInvalidation: boolean }): void | '' | undefined - removed:
method HotReloader.onHMR(req: IncomingMessage, _socket: Duplex, head: Buffer): void - removed:
method HotReloader.run(req: IncomingMessage, res: ServerResponse, parsedUrl: UrlObject): Promise<{ finished?: true }> - removed:
method HotReloader.send(action: HMR_ACTION_TYPES): void - removed:
method HotReloader.setHmrServerError(error: Error | null): void - removed:
method HotReloader.start(): Promise<void> - removed:
method HotReloader.stop(): Promise<void> - removed:
property HotReloader.activeWebpackConfigs?: Array<UnwrapPromise<ReturnType<typeof getBaseWebpackConfig>>> - removed:
property HotReloader.edgeServerStats: webpack.Stats | null - removed:
property HotReloader.multiCompiler?: webpack.MultiCompiler - removed:
property HotReloader.serverStats: webpack.Stats | null - removed:
protected method HotReloader.refreshServerComponents(): Promise<void> - added:
constructor HotReloaderWebpack(dir: string, { config, pagesDir, distDir, buildId, encryptionKey, previewProps, rewrites, appDir, telemetry }: { config: NextConfigComplete; pagesDir?: string; distDir: string; buildId: string; encryptionKey: string; previewProps: __ApiPreviewProps; rewrites: CustomRoutes['rewrites']; appDir?: string; telemetry: Telemetry }) - added:
default class HotReloaderWebpack implements NextJsHotReloaderInterface - added:
function getVersionInfo(enabled: boolean): Promise<VersionInfo> - added:
method HotReloaderWebpack.buildFallbackError(): Promise<void> - added:
method HotReloaderWebpack.clearHmrServerError(): void - added:
method HotReloaderWebpack.ensurePage({ page, clientOnly, appPaths, definition, isApp, url }: { page: string; clientOnly: boolean; appPaths?: ReadonlyArray<string> | null; isApp?: boolean; definition?: RouteDefinition; url?: string }): Promise<void> - added:
method HotReloaderWebpack.getCompilationErrors(page: string): Promise<Error[]> - added:
method HotReloaderWebpack.invalidate({ reloadAfterInvalidation }?: { reloadAfterInvalidation: boolean }): void - added:
method HotReloaderWebpack.onHMR(req: IncomingMessage, _socket: Duplex, head: Buffer): void - added:
method HotReloaderWebpack.run(req: IncomingMessage, res: ServerResponse, parsedUrl: UrlObject): Promise<{ finished?: true }> - added:
method HotReloaderWebpack.send(action: HMR_ACTION_TYPES): void - added:
method HotReloaderWebpack.setHmrServerError(error: Error | null): void - added:
method HotReloaderWebpack.start(): Promise<void> - added:
method HotReloaderWebpack.stop(): Promise<void> - added:
property HotReloaderWebpack.activeWebpackConfigs?: Array<UnwrapPromise<ReturnType<typeof getBaseWebpackConfig>>> - added:
property HotReloaderWebpack.edgeServerStats: webpack.Stats | null - added:
property HotReloaderWebpack.multiCompiler?: webpack.MultiCompiler - added:
property HotReloaderWebpack.serverStats: webpack.Stats | null - added:
protected method HotReloaderWebpack.refreshServerComponents(): Promise<void>
- added:
const FAST_REFRESH_RUNTIME_RELOAD = 'Fast Refresh had to perform a full reload due to a runtime error.'
- changed:
protected method DevServer.ensureEdgeFunction({ page, appPaths }: { page: string; appPaths: string[] | null }): Promise<void> → protected method DevServer.ensureEdgeFunction({ page, appPaths, url }: { page: string; appPaths: string[] | null; url: string }): Promise<void> - changed:
protected method DevServer.ensureMiddleware(): Promise<void> → protected method DevServer.ensureMiddleware(url: string): Promise<void> - changed:
protected method DevServer.ensurePage(opts: { page: string; clientOnly: boolean; appPaths?: ReadonlyArray<string> | null; definition: RouteDefinition | undefined }): Promise<void> → protected method DevServer.ensurePage(opts: { page: string; clientOnly: boolean; appPaths?: ReadonlyArray<string> | null; definition: RouteDefinition | undefined; url?: string }): Promise<void> - changed:
protected method DevServer.findPageComponents({ page, query, params, isAppPath, appPaths, shouldEnsure }: { page: string; query: NextParsedUrlQuery; params: Params; isAppPath: boolean; sriEnabled?: boolean; appPaths?: ReadonlyArray<string> | null; shouldEnsure: boolean }): Promise<FindComponentsResult | null> → protected method DevServer.findPageComponents({ page, query, params, isAppPath, appPaths, shouldEnsure, url }: { page: string; query: NextParsedUrlQuery; params: Params; isAppPath: boolean; sriEnabled?: boolean; appPaths?: ReadonlyArray<string> | null; shouldEnsure: boolean; url?: string }): Promise<FindComponentsResult | null> - changed:
protected method DevServer.getFallbackErrorComponents(): Promise<LoadComponentsReturnType | null> → protected method DevServer.getFallbackErrorComponents(url?: string): Promise<LoadComponentsReturnType | null> - added:
property Options.startServerSpan: Span - added:
protected method DevServer.getinterceptionRoutePatterns(): RegExp[]
- changed:
function getEntryKey(compilerType: CompilerNameValues, pageBundleType: 'app' | 'pages' | 'root', page: string): string → function getEntryKey(compilerType: CompilerNameValues, pageBundleType: PAGE_TYPES, page: string): string - changed:
function onDemandEntryHandler({ hotReloader, maxInactiveAge, multiCompiler, nextConfig, pagesBufferLength, pagesDir, rootDir, appDir }: { hotReloader: HotReloader; maxInactiveAge: number; multiCompiler: webpack.MultiCompiler; nextConfig: NextConfigComplete; pagesBufferLength: number; pagesDir?: string; rootDir: string; appDir?: string }): { ensurePage({ page, clientOnly, appPaths, definition, isA… → function onDemandEntryHandler({ hotReloader, maxInactiveAge, multiCompiler, nextConfig, pagesBufferLength, pagesDir, rootDir, appDir }: { hotReloader: HotReloaderWebpack; maxInactiveAge: number; multiCompiler: webpack.MultiCompiler; nextConfig: NextConfigComplete; pagesBufferLength: number; pagesDir?: string; rootDir: string; appDir?: string }): { ensurePage({ page, appPaths, definition, isApp, u… - added:
function findPagePathData(rootDir: string, page: string, extensions: string[], pagesDir?: string, appDir?: string): Promise<PagePathData>
- changed:
function loadStaticPaths({ distDir, pathname, config, httpAgentOptions, locales, defaultLocale, isAppPath, page, isrFlushToDisk, fetchCacheKeyPrefix, maxMemoryCacheSize, requestHeaders, incrementalCacheHandlerPath }: { distDir: string; pathname: string; config: RuntimeConfig; httpAgentOptions: NextConfigComplete['httpAgentOptions']; locales?: string[]; defaultLocale?: string; isAppPath: boolean;… → function loadStaticPaths({ dir, distDir, pathname, config, httpAgentOptions, locales, defaultLocale, isAppPath, page, isrFlushToDisk, fetchCacheKeyPrefix, maxMemoryCacheSize, requestHeaders, cacheHandler, ppr }: { dir: string; distDir: string; pathname: string; config: RuntimeConfig; httpAgentOptions: NextConfigComplete['httpAgentOptions']; locales?: string[]; defaultLocale?: string; isAppPath: b…
- added:
class AssetMapper - added:
function formatIssue(issue: Issue): string - added:
function getTurbopackJsConfig(dir: string, nextConfig: NextConfigComplete): Promise<{ compilerOptions: Record<string, any> }> - added:
function handleEntrypoints({ entrypoints, currentEntrypoints, currentEntryIssues, manifestLoader, nextConfig, rewrites, logErrors, dev }: { entrypoints: TurbopackResult<RawEntrypoints>; currentEntrypoints: Entrypoints; currentEntryIssues: EntryIssuesMap; manifestLoader: TurbopackManifestLoader; nextConfig: NextConfigComplete; rewrites: SetupOpts['fsChecker']['rewrites']; logErrors: boolean; dev?:… - added:
function handlePagesErrorRoute({ currentEntryIssues, entrypoints, manifestLoader, rewrites, logErrors, hooks }: { currentEntryIssues: EntryIssuesMap; entrypoints: Entrypoints; manifestLoader: TurbopackManifestLoader; rewrites: SetupOpts['fsChecker']['rewrites']; logErrors: boolean; hooks?: HandleRouteTypeHooks }): Promise<void> - added:
function handleRouteType({ dev, page, pathname, route, currentEntryIssues, entrypoints, manifestLoader, readyIds, rewrites, hooks, logErrors }: { dev: boolean; page: string; pathname: string; route: PageRoute | AppRoute; currentEntryIssues: EntryIssuesMap; entrypoints: Entrypoints; manifestLoader: TurbopackManifestLoader; rewrites: SetupOpts['fsChecker']['rewrites']; logErrors: boolean; readyIds?… - added:
function hasEntrypointForKey(entrypoints: Entrypoints, key: EntryKey, assetMapper: AssetMapper | undefined): boolean - added:
function isRelevantWarning(issue: Issue): boolean - added:
function isWellKnownError(issue: Issue): boolean - added:
function msToNs(ms: number): bigint - added:
function printNonFatalIssue(issue: Issue): void - added:
function processIssues(currentEntryIssues: EntryIssuesMap, key: EntryKey, result: TurbopackResult, throwIssue: boolean, logErrors: boolean): void - added:
function processTopLevelIssues(currentTopLevelIssues: TopLevelIssuesMap, result: TurbopackResult): void - added:
function renderStyledStringToErrorAnsi(string: StyledString): string - added:
method AssetMapper.delete(key: EntryKey): void - added:
method AssetMapper.getAssetPathsByKey(key: EntryKey): string[] - added:
method AssetMapper.getKeysByAsset(path: string): EntryKey[] - added:
method AssetMapper.keys(): IterableIterator<EntryKey> - added:
method AssetMapper.setPathsForKey(key: EntryKey, assetPaths: string[]): void - added:
type ChangeSubscriptions = Map<EntryKey, Promise<AsyncIterableIterator<TurbopackResult>>> - added:
type ClientState = { clientIssues: EntryIssuesMap; hmrPayloads: Map<string, HMR_ACTION_TYPES>; turbopackUpdates: TurbopackUpdate[]; subscriptions: Map<string, AsyncIterator<any>>… - added:
type ClientStateMap = WeakMap<ws, ClientState> - added:
type EntryIssuesMap = Map<EntryKey, IssuesMap> - added:
type HandleWrittenEndpoint = (key: EntryKey, result: TurbopackResult<WrittenEndpoint>) => void - added:
type IssuesMap = Map<IssueKey, Issue> - added:
type ReadyIds = Set<string> - added:
type SendHmr = (id: string, payload: HMR_ACTION_TYPES) => void - added:
type StartBuilding = (id: string, requestUrl: string | undefined, forceRebuild: boolean) => () => void - added:
type StartChangeSubscription = (key: EntryKey, includeIssues: boolean, endpoint: Endpoint, makePayload: (change: TurbopackResult) => Promise<HMR_ACTION_TYPES> | HMR_ACTION_TYPES | void) => P… - added:
type StopChangeSubscription = (key: EntryKey) => Promise<void> - added:
type TopLevelIssuesMap = IssuesMap
- added:
function getEntryKey(type: EntryKeyType, side: EntryKeySide, page: string): EntryKey - added:
function splitEntryKey(key: EntryKey): { type: EntryKeyType; side: EntryKeySide; page: string } - added:
type EntryKey = `{"type":"${EntryKeyType}","side":"${EntryKeyType}","page":"${string}"}` - added:
type EntryKeySide = 'client' | 'server' - added:
type EntryKeyType = 'app' | 'pages' | 'root' | 'assets'
- added:
class TurbopackManifestLoader - added:
constructor TurbopackManifestLoader({ distDir, buildId, encryptionKey }: { buildId: string; distDir: string; encryptionKey: string }) - added:
method TurbopackManifestLoader.delete(key: EntryKey): void - added:
method TurbopackManifestLoader.deleteMiddlewareManifest(key: EntryKey): boolean - added:
method TurbopackManifestLoader.getMiddlewareManifest(key: EntryKey): TurbopackMiddlewareManifest | undefined - added:
method TurbopackManifestLoader.loadActionManifest(pageName: string): Promise<void> - added:
method TurbopackManifestLoader.loadAppBuildManifest(pageName: string): Promise<void> - added:
method TurbopackManifestLoader.loadAppPathsManifest(pageName: string): Promise<void> - added:
method TurbopackManifestLoader.loadBuildManifest(pageName: string, type?: 'app' | 'pages'): Promise<void> - added:
method TurbopackManifestLoader.loadFontManifest(pageName: string, type?: 'app' | 'pages'): Promise<void> - added:
method TurbopackManifestLoader.loadLoadableManifest(pageName: string, type?: 'app' | 'pages'): Promise<void> - added:
method TurbopackManifestLoader.loadMiddlewareManifest(pageName: string, type: 'pages' | 'app' | 'middleware' | 'instrumentation'): Promise<void> - added:
method TurbopackManifestLoader.loadPagesManifest(pageName: string): Promise<void> - added:
method TurbopackManifestLoader.writeManifests({ rewrites, pageEntrypoints }: { rewrites: SetupOpts['fsChecker']['rewrites']; pageEntrypoints: PageEntrypoints }): Promise<void>
- added:
interface GlobalEntrypoints - added:
property GlobalEntrypoints.app: Endpoint | undefined - added:
property GlobalEntrypoints.document: Endpoint | undefined - added:
property GlobalEntrypoints.error: Endpoint | undefined - added:
property GlobalEntrypoints.instrumentation: Instrumentation | undefined - added:
property GlobalEntrypoints.middleware: Middleware | undefined - added:
type AppEntrypoints = Map<string, AppRoute> - added:
type AppRoute = { type: 'app-page'; htmlEndpoint: Endpoint; rscEndpoint: Endpoint } | { type: 'app-route'; endpoint: Endpoint } - added:
type Entrypoints = { global: GlobalEntrypoints; page: PageEntrypoints; app: AppEntrypoints } - added:
type PageEntrypoints = Map<string, PageRoute> - added:
type PageRoute = { type: 'page'; htmlEndpoint: Endpoint; dataEndpoint: Endpoint } | { type: 'page-api'; endpoint: Endpoint }
- removed:
function getFontDefinitionFromManifest(url: string, manifest: FontManifest): string
- changed:
constructor AbsoluteFilenameNormalizer(dir: string, extensions: ReadonlyArray<string>, pagesType: 'pages' | 'app' | 'root') → constructor AbsoluteFilenameNormalizer(dir: string, extensions: ReadonlyArray<string>, pagesType: PAGE_TYPES)
- added:
class ActionPathnameNormalizer extends SuffixPathnameNormalizer implements PathnameNormalizer - added:
constructor ActionPathnameNormalizer()
- added:
class BasePathPathnameNormalizer extends PrefixPathnameNormalizer implements PathnameNormalizer - added:
constructor BasePathPathnameNormalizer(basePath: string)
- added:
class NextDataPathnameNormalizer implements PathnameNormalizer - added:
constructor NextDataPathnameNormalizer(buildID: string) - added:
method NextDataPathnameNormalizer.match(pathname: string): boolean - added:
method NextDataPathnameNormalizer.normalize(pathname: string, matched?: boolean): string
- added:
interface PathnameNormalizer extends Normalizer - added:
method PathnameNormalizer.match(pathname: string): boolean - added:
method PathnameNormalizer.normalize(pathname: string, matched?: boolean): string
- added:
class PostponedPathnameNormalizer extends PrefixPathnameNormalizer implements PathnameNormalizer - added:
constructor PostponedPathnameNormalizer() - added:
method PostponedPathnameNormalizer.normalize(pathname: string, matched?: boolean): string
- added:
class PrefetchRSCPathnameNormalizer extends SuffixPathnameNormalizer implements PathnameNormalizer - added:
constructor PrefetchRSCPathnameNormalizer()
- added:
class PrefixPathnameNormalizer implements Normalizer - added:
constructor PrefixPathnameNormalizer(prefix: string) - added:
method PrefixPathnameNormalizer.match(pathname: string): boolean - added:
method PrefixPathnameNormalizer.normalize(pathname: string, matched?: boolean): string
- added:
class RSCPathnameNormalizer extends SuffixPathnameNormalizer implements PathnameNormalizer - added:
constructor RSCPathnameNormalizer()
- added:
class SuffixPathnameNormalizer implements Normalizer - added:
constructor SuffixPathnameNormalizer(suffix: string) - added:
method SuffixPathnameNormalizer.match(pathname: string): boolean - added:
method SuffixPathnameNormalizer.normalize(pathname: string, matched?: boolean): string
- changed:
method RouteEnsurer.ensure(match: RouteMatch): Promise<void> → method RouteEnsurer.ensure(match: RouteMatch, pathname: string): Promise<void>
- changed:
function cleanURL(urlString: string): string → function cleanURL(url: string | URL): URL
- removed:
function getNonStaticMethods(handlers: AppRouteHandlers): ReadonlyArray<HTTP_METHOD> | false
- removed:
function proxyRequest(request: NextRequest, { dynamic }: Pick<AppRouteUserlandModule, 'dynamic'>, hooks: { readonly serverHooks: typeof ServerHooks; readonly headerHooks: typeof HeaderHooks; readonly staticGenerationBailout: typeof StaticGenerationBailout }): NextRequest
- removed:
readonly property AppRouteRouteModule.headerHooks: typeof headerHooks - removed:
readonly property AppRouteRouteModule.staticGenerationBailout: import('../../../../client/components/static-generation-bailout').StaticGenerationBailout - removed:
static method AppRouteRouteModule.is(route: RouteModule): route is AppRouteRouteModule - changed:
property AppRouteRouteHandlerContext.prerenderManifest: PrerenderManifest → property AppRouteRouteHandlerContext.prerenderManifest: DeepReadonly<PrerenderManifest> - added:
function hasNonStaticMethods(handlers: AppRouteHandlers): boolean
- added:
function isAppPageRouteModule(routeModule: RouteModule): routeModule is AppPageRouteModule - added:
function isAppRouteRouteModule(routeModule: RouteModule): routeModule is AppRouteRouteModule - added:
function isPagesAPIRouteModule(routeModule: RouteModule): routeModule is PagesAPIRouteModule - added:
function isPagesRouteModule(routeModule: RouteModule): routeModule is PagesRouteModule
- changed:
function detectContentType(buffer: Buffer): 'image/svg+xml' | 'image/avif' | 'image/webp' | 'image/jpeg' | 'image/png' | 'image/x-icon' | 'image/gif' | null → function detectContentType(buffer: Buffer): Promise<string | null> - changed:
function getMaxAge(str: string | null): number → function getMaxAge(str: string | null | undefined): number - changed:
function imageOptimizer(_req: IncomingMessage, _res: ServerResponse, paramsResult: ImageParamsResult, nextConfig: NextConfigComplete, isDev: boolean | undefined, handleRequest: (newReq: IncomingMessage, newRes: ServerResponse, newParsedUrl?: NextUrlWithParsedQuery) => Promise<void>): Promise<{ buffer: Buffer; contentType: string; maxAge: number }> → function imageOptimizer(imageUpstream: ImageUpstream, paramsResult: Pick<ImageParamsResult, 'href' | 'width' | 'quality' | 'mimeType'>, nextConfig: { output: NextConfigComplete['output']; images: Pick<NextConfigComplete['images'], 'dangerouslyAllowSVG' | 'minimumCacheTTL'> }, isDev: boolean | undefined): Promise<{ buffer: Buffer; contentType: string; maxAge: number }> - added:
function fetchExternalImage(href: string): Promise<ImageUpstream> - added:
function fetchInternalImage(href: string, _req: IncomingMessage, _res: ServerResponse, handleRequest: (newReq: IncomingMessage, newRes: ServerResponse, newParsedUrl?: NextUrlWithParsedQuery) => Promise<void>): Promise<ImageUpstream>
- removed:
function stripInternalHeaders(headers: IncomingHttpHeaders): void
- added:
function getStartServerInfo(dir: string, dev: boolean): Promise<{ envInfo?: string[]; expFeatureInfo?: string[] }> - added:
function logStartInfo({ networkUrl, appUrl, envInfo, expFeatureInfo, maxExperimentalFeatures }: { networkUrl: string | null; appUrl: string | null; envInfo?: string[]; expFeatureInfo?: string[]; maxExperimentalFeatures?: number }): void
- added:
function createLocalRequestContext(): RunnableBuiltinRequestContext - added:
function getBuiltinRequestContext(): BuiltinRequestContextValue | undefined - added:
type BuiltinRequestContext = { get(): BuiltinRequestContextValue | undefined } - added:
type BuiltinRequestContextValue = { waitUntil?: WaitUntil } - added:
type RunnableBuiltinRequestContext = BuiltinRequestContext & { run<T>(value: BuiltinRequestContextValue, callback: () => T): T } - added:
type WaitUntil = (promise: Promise<any>) => void
- added:
function cloneResponse(original: Response): [Response, Response]
- added:
function createDedupeFetch(originalFetch: typeof fetch): (resource: URL | RequestInfo, options?: RequestInit) => Promise<Response>
- changed:
method DevBundlerService.getFallbackErrorComponents(): Promise<void> → method DevBundlerService.getFallbackErrorComponents(url?: string): Promise<void>
- changed:
function createValidFileMatcher(pageExtensions: string[], appDirPath: string | undefined): { isPageFile: (filePath: string) => boolean; isAppRouterPage: (filePath: string) => boolean; isMetadataFile: (filePath: string) => boolean; isRootNotFound: (filePath: string) => boolean } → function createValidFileMatcher(pageExtensions: PageExtensions, appDirPath: string | undefined): { isPageFile: (filePath: string) => boolean; isAppRouterPage: (filePath: string) => boolean; isMetadataFile: (filePath: string) => boolean; isRootNotFound: (filePath: string) => boolean } - changed:
function findPageFile(pagesDir: string, normalizedPagePath: string, pageExtensions: string[], isAppDir: boolean): Promise<string | null> → function findPageFile(pagesDir: string, normalizedPagePath: string, pageExtensions: PageExtensions, isAppDir: boolean): Promise<string | null>
- changed:
method FetchCache.get(key: string, ctx: { tags?: string[]; softTags?: string[]; fetchCache?: boolean; fetchUrl?: string; fetchIdx?: number }): Promise<CacheHandlerValue | null> → method FetchCache.get(...args: Parameters<CacheHandler['get']>): Promise<CacheHandlerValue | null> - changed:
method FetchCache.revalidateTag(tag: string): Promise<void> → method FetchCache.revalidateTag(...args: Parameters<CacheHandler['revalidateTag']>): Promise<void> - changed:
method FetchCache.set(key: string, data: CacheHandlerValue['value'], { fetchCache, fetchIdx, fetchUrl, tags }: { tags?: string[]; fetchCache?: boolean; fetchUrl?: string; fetchIdx?: number }): Promise<void> → method FetchCache.set(...args: Parameters<CacheHandler['set']>): Promise<void> - added:
method FetchCache.resetRequestCache(): void
- changed:
method FileSystemCache.get(key: string, { tags, softTags, fetchCache }?: { tags?: string[]; softTags?: string[]; fetchCache?: boolean }): Promise<CacheHandlerValue | null> → method FileSystemCache.get(...args: Parameters<CacheHandler['get']>): Promise<CacheHandlerValue | null> - changed:
method FileSystemCache.revalidateTag(tag: string): Promise<void> → method FileSystemCache.revalidateTag(...args: Parameters<CacheHandler['revalidateTag']>): Promise<void> - changed:
method FileSystemCache.set(key: string, data: CacheHandlerValue['value'], ctx: { tags?: string[] }): Promise<void> → method FileSystemCache.set(...args: Parameters<CacheHandler['set']>): Promise<void> - added:
method FileSystemCache.resetRequestCache(): void
- changed:
class IncrementalCache → class IncrementalCache implements IncrementalCacheType - changed:
constructor IncrementalCache({ fs, dev, appDir, flushToDisk, fetchCache, minimalMode, serverDistDir, requestHeaders, requestProtocol, maxMemoryCacheSize, getPrerenderManifest, fetchCacheKeyPrefix, CurCacheHandler, allowedRevalidateHeaderKeys }: { fs?: CacheFs; dev: boolean; appDir?: boolean; fetchCache?: boolean; minimalMode?: boolean; serverDistDir?: string; flushToDisk?: boolean; requestProtoco… → constructor IncrementalCache({ fs, dev, appDir, pagesDir, flushToDisk, fetchCache, minimalMode, serverDistDir, requestHeaders, requestProtocol, maxMemoryCacheSize, getPrerenderManifest, fetchCacheKeyPrefix, CurCacheHandler, allowedRevalidateHeaderKeys, experimental }: { fs?: CacheFs; dev: boolean; appDir?: boolean; pagesDir?: boolean; fetchCache?: boolean; minimalMode?: boolean; serverDistDir?: s… - changed:
method CacheHandler.revalidateTag(_tag: string): Promise<void> → method CacheHandler.revalidateTag(..._args: Parameters<IncrementalCache['revalidateTag']>): Promise<void> - changed:
method IncrementalCache.get(cacheKey: string, ctx?: { fetchCache?: boolean; revalidate?: number | false; fetchUrl?: string; fetchIdx?: number; tags?: string[]; softTags?: string[] }): Promise<IncrementalCacheEntry | null> → method IncrementalCache.get(cacheKey: string, ctx?: { kindHint?: IncrementalCacheKindHint; revalidate?: number | false; fetchUrl?: string; fetchIdx?: number; tags?: string[]; softTags?: string[] }): Promise<IncrementalCacheEntry | null> - changed:
method IncrementalCache.revalidateTag(tag: string): Promise<any> → method IncrementalCache.revalidateTag(tags: string | string[]): Promise<void> - changed:
property IncrementalCache.allowedRevalidateHeaderKeys?: string[] → readonly property IncrementalCache.allowedRevalidateHeaderKeys?: string[] - changed:
property IncrementalCache.cacheHandler?: CacheHandler → readonly property IncrementalCache.cacheHandler?: CacheHandler - changed:
property IncrementalCache.dev?: boolean → readonly property IncrementalCache.dev?: boolean - changed:
property IncrementalCache.fetchCacheKeyPrefix?: string → readonly property IncrementalCache.fetchCacheKeyPrefix?: string - changed:
property IncrementalCache.isOnDemandRevalidate?: boolean → readonly property IncrementalCache.isOnDemandRevalidate?: boolean - changed:
property IncrementalCache.minimalMode?: boolean → readonly property IncrementalCache.minimalMode?: boolean - changed:
property IncrementalCache.prerenderManifest: PrerenderManifest → readonly property IncrementalCache.prerenderManifest: DeepReadonly<PrerenderManifest> - changed:
property IncrementalCache.requestHeaders: Record<string, undefined | string | string[]> → readonly property IncrementalCache.requestHeaders: Record<string, undefined | string | string[]> - changed:
property IncrementalCache.requestProtocol?: 'http' | 'https' → readonly property IncrementalCache.requestProtocol?: 'http' | 'https' - changed:
property IncrementalCache.revalidatedTags?: string[] → readonly property IncrementalCache.revalidatedTags?: string[] - added:
method CacheHandler.resetRequestCache(): void - added:
method IncrementalCache.resetRequestCache(): void - added:
property CacheHandlerContext._pagesDir: boolean - added:
property CacheHandlerContext.experimental: { ppr: boolean } - added:
readonly property IncrementalCache.disableForTestmode?: boolean - added:
readonly property IncrementalCache.hasCustomCacheHandler: boolean
- changed:
constructor SharedRevalidateTimings(prerenderManifest: Pick<PrerenderManifest, 'routes'>) → constructor SharedRevalidateTimings(prerenderManifest: DeepReadonly<Pick<PrerenderManifest, 'routes'>>)
- removed:
function checkIsNodeDebugging(): boolean | 'brk'
- changed:
function addImplicitTags(staticGenerationStore: ReturnType<StaticGenerationAsyncStorage['getStore']>): string[] → function addImplicitTags(staticGenerationStore: StaticGenerationStore): string[] - changed:
function patchFetch({ serverHooks, staticGenerationAsyncStorage }: PatchableModule): void → function patchFetch(options: PatchableModule): void - added:
function validateRevalidate(revalidateVal: unknown, pathname: string): undefined | number | false
- changed:
function initialize(opts: Parameters<typeof initializeImpl>[0]): Promise<{ requestHandler: ReturnType<InstanceType<typeof NextServer>['getRequestHandler']>; upgradeHandler: ReturnType<InstanceType<typeof NextServer>['getUpgradeHandler']> }> → function initialize(opts: Parameters<typeof initializeImpl>[0]): Promise<{ requestHandler: ReturnType<InstanceType<typeof NextServer>['getRequestHandler']>; upgradeHandler: ReturnType<InstanceType<typeof NextServer>['getUpgradeHandler']>; app: NextServer }> - added:
function clearAllModuleContexts(): Promise<void> | undefined
- added:
function formatRevalidate({ revalidate, swrDelta }: { revalidate: Revalidate; swrDelta?: SwrDelta }): string - added:
type SwrDelta = number
- removed:
function makeResolver(dir: string, nextConfig: NextConfigComplete, middleware: MiddlewareConfig, { hostname, port }: Partial<ServerAddress>): Promise<(req: IncomingMessage, res: ServerResponse) => Promise<RouteResult | void>>
- changed:
function initialize(opts: { dir: string; port: number; dev: boolean; server?: import('http').Server; minimalMode?: boolean; hostname?: string; isNodeDebugging: boolean; keepAliveTimeout?: number; customServer?: boolean; experimentalTestProxy?: boolean; experimentalHttpsServer?: boolean }): Promise<[WorkerRequestHandler, WorkerUpgradeHandler]> → function initialize(opts: { dir: string; port: number; dev: boolean; server?: import('http').Server; minimalMode?: boolean; hostname?: string; isNodeDebugging: boolean; keepAliveTimeout?: number; customServer?: boolean; experimentalHttpsServer?: boolean; startServerSpan?: Span }): Promise<[WorkerRequestHandler, WorkerUpgradeHandler, NextServer]>
- added:
const blockCrossSite: (req: IncomingMessage, res: ServerResponse | Duplex, allowedDevOrigins: string[] | undefined, hostname: string | undefined) => boolean
- changed:
function setupFsCheck(opts: { dir: string; dev: boolean; minimalMode?: boolean; config: NextConfigComplete; addDevWatcherCallback?: (arg: (files: Map<string, { timestamp: number }>) => void) => void }): Promise<{ headers: (import('../../../lib/load-custom-routes').Header & { match: PatchMatcher; check?: boolean | undefined })[]; rewrites: { beforeFiles: (import('../../../lib/load-custom-routes').… → function setupFsCheck(opts: { dir: string; dev: boolean; minimalMode?: boolean; config: NextConfigComplete; addDevWatcherCallback?: (arg: (files: Map<string, { timestamp: number }>) => void) => void }): Promise<{ headers: (import('../../../lib/load-custom-routes').Header & { match: PatchMatcher; check?: boolean | undefined })[]; rewrites: { beforeFiles: (Rewrite & { match: PatchMatcher; check?: b…
- added:
function isPostpone(error: any): boolean
- changed:
function getResolveRoutes(fsChecker: UnwrapPromise<ReturnType<typeof import('./filesystem').setupFsCheck>>, config: NextConfigComplete, opts: Parameters<typeof initialize>[0], renderServer: RenderServer, renderServerOpts: Parameters<RenderServer['initialize']>[0], ensureMiddleware?: () => Promise<void>): ({ req, res, isUpgradeReq, invokedOutputs }: { req: IncomingMessage; res: ServerResponse; isU… → function getResolveRoutes(fsChecker: UnwrapPromise<ReturnType<typeof import('./filesystem').setupFsCheck>>, config: NextConfigComplete, opts: Parameters<typeof initialize>[0], renderServer: RenderServer, renderServerOpts: Parameters<RenderServer['initialize']>[0], ensureMiddleware?: (url?: string) => Promise<void>): ({ req, res, isUpgradeReq, invokedOutputs }: { req: IncomingMessage; res: ServerR…
- changed:
function setupDevBundler(opts: SetupOpts): Promise<{ serverFields: { actualMiddlewareFile?: string | undefined; actualInstrumentationHookFile?: string | undefined; appPathRoutes?: Record<string, string | string[]> | undefined; middleware?: { page: string; match: MiddlewareRouteMatch; matchers?: MiddlewareMatcher[] | undefined } | undefined; hasAppNotFound?: boolean | undefined; interceptionRoutes… → function setupDevBundler(opts: SetupOpts): Promise<{ serverFields: ServerFields; hotReloader: NextJsHotReloaderInterface; requestHandler: (req: IncomingMessage, res: ServerResponse<IncomingMessage>) => Promise<{ finished: boolean }>; logErrorWithOriginalStack: (err: unknown, type?: 'warning' | 'uncaughtException' | 'unhandledRejection' | 'app-dir' | undefined) => Promise<void>; ensureMiddleware(r… - added:
function propagateServerField(opts: SetupOpts, field: PropagateToWorkersField, args: any): Promise<void> - added:
type ServerFields = { actualMiddlewareFile?: string | undefined; actualInstrumentationHookFile?: string | undefined; appPathRoutes?: Record<string, string | string[]>; middleware?… - added:
type SetupOpts = { renderServer: LazyRenderServerInstance; dir: string; turbo?: boolean; appDir?: string; pagesDir?: string; telemetry: Telemetry; isCustomServer?: boolean; fsC…
- removed:
const scheduleOnNextTick: <T = void>(cb: ScheduledFn<T>) => void - removed:
type ScheduledFn<T = void> = () => T | PromiseLike<T> - removed:
type SchedulerFn<T = void> = (cb: ScheduledFn<T>) => void
- added:
function getIsServerAction(req: IncomingMessage | BaseNextRequest | NextRequest): boolean - added:
function getServerActionRequestMetadata(req: IncomingMessage | BaseNextRequest | NextRequest): { actionId: string | null; isURLEncodedAction: boolean; isMultipartAction: boolean; isFetchAction: boolean; isServerAction: boolean }
- removed:
property StartServerOptions.envInfo?: string[] - removed:
property StartServerOptions.expFeatureInfo?: string[] - removed:
property StartServerOptions.isExperimentalTestProxy?: boolean - changed:
function getRequestHandlers({ dir, port, isDev, server, hostname, minimalMode, isNodeDebugging, keepAliveTimeout, experimentalTestProxy, experimentalHttpsServer }: { dir: string; port: number; isDev: boolean; server?: import('http').Server; hostname: string; minimalMode?: boolean; isNodeDebugging?: boolean; keepAliveTimeout?: number; experimentalTestProxy?: boolean; experimentalHttpsServer?: bool… → function getRequestHandlers({ dir, port, isDev, server, hostname, minimalMode, isNodeDebugging, keepAliveTimeout, experimentalHttpsServer }: { dir: string; port: number; isDev: boolean; server?: import('http').Server; hostname?: string; minimalMode?: boolean; isNodeDebugging?: boolean; keepAliveTimeout?: number; experimentalHttpsServer?: boolean }): ReturnType<typeof initialize> - changed:
function startServer({ dir, port, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, isExperimentalTestProxy, selfSignedCertificate, envInfo, expFeatureInfo }: StartServerOptions): Promise<void> → function startServer(serverOptions: StartServerOptions): Promise<void> - changed:
property StartServerOptions.hostname: string → property StartServerOptions.hostname?: string
- changed:
const NextVanillaSpanAllowlist: (BaseServerSpan | RenderSpan | AppRenderSpan | NodeSpan | AppRouteRouteHandlersSpan | ResolveMetadataSpan)[] → const NextVanillaSpanAllowlist: (BaseServerSpan | NextNodeServerSpan | RenderSpan | AppRenderSpan | NodeSpan | AppRouteRouteHandlersSpan | ResolveMetadataSpan | MiddlewareSpan)[] - added:
const LogSpanAllowList: NextNodeServerSpan[] - added:
enum MiddlewareSpan - added:
member MiddlewareSpan.execute = 'Middleware.execute' - added:
member NextNodeServerSpan.clientComponentLoading = 'NextNodeServer.clientComponentLoading' - added:
member NextNodeServerSpan.createComponentTree = 'NextNodeServer.createComponentTree' - added:
member NextNodeServerSpan.getLayoutOrPageModule = 'NextNodeServer.getLayoutOrPageModule' - added:
member NextNodeServerSpan.startResponse = 'NextNodeServer.startResponse' - added:
member ResolveMetadataSpan.generateViewport = 'ResolveMetadata.generateViewport'
- removed:
function getPort(args: arg.Result<arg.Spec>): number - added:
function checkNodeDebugType(): string | undefined - added:
function getMaxOldSpaceSize(): number | undefined - added:
function myParseInt(value: string): number
- changed:
function loadManifestWithRetries<T>(manifestPath: string, attempts?: number): Promise<T> → function loadManifestWithRetries<T extends object>(manifestPath: string, attempts?: number): Promise<DeepReadonly<T>> - changed:
type LoadComponentsReturnType<NextModule = any> = { Component: NextComponentType; pageConfig: PageConfig; buildManifest: BuildManifest; subresourceIntegrityManifest?: Record<string, string>; reactLoadableManif… → type LoadComponentsReturnType<NextModule = any> = { Component: NextComponentType; pageConfig: PageConfig; buildManifest: DeepReadonly<BuildManifest>; subresourceIntegrityManifest?: DeepReadonly<Record<string,… - added:
function evalManifestWithRetries<T extends object>(manifestPath: string, attempts?: number): Promise<DeepReadonly<T>> - added:
index LoadableManifest[k: string]: { id: string | number; files: string[] } - added:
interface LoadableManifest
- changed:
function clearManifestCache(path: string): boolean → function clearManifestCache(path: string, cache?: Map<string, unknown>): boolean - changed:
function loadManifest(path: string, shouldCache?: boolean): any → function loadManifest<T extends object>(path: string, shouldCache: false): T - added:
function evalManifest<T extends object>(path: string, shouldCache: false): T - added:
function evalManifest<T extends object>(path: string, shouldCache?: boolean, cache?: Map<string, unknown>): DeepReadonly<T> - added:
function evalManifest<T extends object>(path: string, shouldCache?: true, cache?: Map<string, unknown>): DeepReadonly<T> - added:
function loadManifest<T extends object>(path: string, shouldCache?: boolean, cache?: Map<string, unknown>): DeepReadonly<T> - added:
function loadManifest<T extends object>(path: string, shouldCache?: true, cache?: Map<string, unknown>): DeepReadonly<T>
- removed:
protected method NextNodeServer.getHasAppDir(dev: boolean): boolean - removed:
protected method NextNodeServer.handleCatchallMiddlewareRequest(req: BaseNextRequest, res: BaseNextResponse, parsed: NextUrlWithParsedQuery): Promise<{ finished: boolean }> - removed:
protected method NextNodeServer.handleCatchallRenderRequest(req: BaseNextRequest, res: BaseNextResponse, parsedUrl: NextUrlWithParsedQuery): Promise<{ finished: boolean }> - removed:
protected method NextNodeServer.handleNextImageRequest(req: BaseNextRequest, res: BaseNextResponse, parsedUrl: NextUrlWithParsedQuery): Promise<{ finished: boolean }> - changed:
call NodeRequestHandler(req: IncomingMessage | BaseNextRequest, res: ServerResponse | BaseNextResponse, parsedUrl?: NextUrlWithParsedQuery | undefined): Promise<void> → call NodeRequestHandler(req: IncomingMessage | BaseNextRequest, res: ServerResponse | BaseNextResponse, parsedUrl?: NextUrlWithParsedQuery | undefined): Promise<void> | void - changed:
protected method NextNodeServer.ensureEdgeFunction(_params: { page: string; appPaths: string[] | null }): Promise<void> → protected method NextNodeServer.ensureEdgeFunction(_params: { page: string; appPaths: string[] | null; url?: string }): Promise<void> - changed:
protected method NextNodeServer.ensureMiddleware(): Promise<void> → protected method NextNodeServer.ensureMiddleware(_url?: string): Promise<void> - changed:
protected method NextNodeServer.ensurePage(_opts: { page: string; clientOnly: boolean; appPaths?: ReadonlyArray<string> | null; match?: RouteMatch }): Promise<void> → protected method NextNodeServer.ensurePage(_opts: { page: string; clientOnly: boolean; appPaths?: ReadonlyArray<string> | null; match?: RouteMatch; url?: string }): Promise<void> - changed:
protected method NextNodeServer.findPageComponents({ page, query, params, isAppPath }: { page: string; query: NextParsedUrlQuery; params: Params; isAppPath: boolean; sriEnabled?: boolean; appPaths?: ReadonlyArray<string> | null; shouldEnsure: boolean }): Promise<FindComponentsResult | null> → protected method NextNodeServer.findPageComponents({ page, query, params, isAppPath, url }: { page: string; query: NextParsedUrlQuery; params: Params; isAppPath: boolean; sriEnabled?: boolean; appPaths?: ReadonlyArray<string> | null; shouldEnsure: boolean; url?: string }): Promise<FindComponentsResult | null> - changed:
protected method NextNodeServer.getEdgeFunctionInfo(params: { page: string; middleware: boolean }): { name: string; paths: string[]; wasm: { filePath: string; name: string }[]; assets: { filePath: string; name: string }[] } | null → protected method NextNodeServer.getEdgeFunctionInfo(params: { page: string; middleware: boolean }): { name: string; paths: string[]; wasm: { filePath: string; name: string }[]; env: { [key: string]: string }; assets?: { filePath: string; name: string }[] } | null - changed:
protected method NextNodeServer.getFallbackErrorComponents(): Promise<LoadComponentsReturnType | null> → protected method NextNodeServer.getFallbackErrorComponents(_url?: string): Promise<LoadComponentsReturnType | null> - changed:
protected method NextNodeServer.getIncrementalCache({ requestHeaders, requestProtocol }: { requestHeaders: IncrementalCache['requestHeaders']; requestProtocol: 'http' | 'https' }): IncrementalCache → protected method NextNodeServer.getIncrementalCache({ requestHeaders, requestProtocol }: { requestHeaders: IncrementalCache['requestHeaders']; requestProtocol: 'http' | 'https' }): Promise<IncrementalCache> - changed:
protected method NextNodeServer.getNextFontManifest(): any → protected method NextNodeServer.getNextFontManifest(): NextFontManifest | undefined - changed:
protected method NextNodeServer.renderErrorToResponseImpl(ctx: RequestContext, err: Error | null): Promise<{ type: 'html' | 'json' | 'rsc'; body: RenderResult; revalidateOptions?: any } | null> → protected method NextNodeServer.renderErrorToResponseImpl(ctx: RequestContext, err: Error | null): Promise<{ type: 'html' | 'json' | 'rsc'; body: RenderResult<import('./render-result').RenderResultMetadata>; revalidate?: Revalidate | undefined } | null> - changed:
protected method NextNodeServer.renderPageComponent(ctx: RequestContext, bubbleNoFallback: boolean): Promise<false | { type: 'html' | 'json' | 'rsc'; body: RenderResult; revalidateOptions?: any } | null> → protected method NextNodeServer.renderPageComponent(ctx: RequestContext, bubbleNoFallback: boolean): Promise<false | { type: 'html' | 'json' | 'rsc'; body: RenderResult<import('./render-result').RenderResultMetadata>; revalidate?: Revalidate | undefined } | null> - changed:
protected method NextNodeServer.runEdgeFunction(params: { req: BaseNextRequest | NodeNextRequest; res: BaseNextResponse | NodeNextResponse; query: ParsedUrlQuery; params: Params | undefined; page: string; appPaths: string[] | null; match?: RouteMatch; onWarning?: (warning: Error) => void }): Promise<FetchEventResult | null> → protected method NextNodeServer.runEdgeFunction(params: { req: BaseNextRequest | NodeNextRequest; res: BaseNextResponse | NodeNextResponse; query: ParsedUrlQuery; params: Params | undefined; page: string; appPaths: string[] | null; match?: RouteMatch; onError?: (err: unknown) => void; onWarning?: (warning: Error) => void }): Promise<FetchEventResult | null> - changed:
protected method NextNodeServer.sendRenderResult(req: NodeNextRequest, res: NodeNextResponse, options: { result: RenderResult; type: 'html' | 'json'; generateEtags: boolean; poweredByHeader: boolean; options?: PayloadOptions | undefined }): Promise<void> → protected method NextNodeServer.sendRenderResult(req: NodeNextRequest, res: NodeNextResponse, options: { result: RenderResult; type: 'html' | 'json'; generateEtags: boolean; poweredByHeader: boolean; revalidate: Revalidate | undefined; swrDelta: SwrDelta | undefined }): Promise<void> - added:
method NextNodeServer.unstable_preloadEntries(): Promise<void> - added:
protected method NextNodeServer.getEnabledDirectories(dev: boolean): NextEnabledDirectories - added:
protected method NextNodeServer.getinterceptionRoutePatterns(): RegExp[] - added:
protected property NextNodeServer.handleCatchallMiddlewareRequest: RouteHandler - added:
protected property NextNodeServer.handleCatchallRenderRequest: RouteHandler - added:
protected property NextNodeServer.handleNextImageRequest: RouteHandler
- added:
class ImageResponse extends Response - added:
constructor ImageResponse(...args: ConstructorParameters<OgModule['ImageResponse']>) - added:
static property ImageResponse.displayName: string
- removed:
function pipeReadable(readable: ReadableStream<Uint8Array>, writable: PipeTarget<Uint8Array>, waitUntilForEnd?: Promise<void>): Promise<void> - removed:
interface PipeTarget<R = any> - removed:
property PipeTarget.closed?: boolean - removed:
property PipeTarget.end: () => unknown - removed:
property PipeTarget.flush?: () => unknown - removed:
property PipeTarget.off: (event: 'close', cb: () => void) => void - removed:
property PipeTarget.on: (event: 'close', cb: () => void) => void - removed:
property PipeTarget.write: (chunk: R) => unknown - added:
function pipeToNodeResponse(readable: ReadableStream<Uint8Array>, res: ServerResponse, waitUntilForEnd?: Promise<unknown>): Promise<void>
- removed:
method RenderResult.extendMetadata(metadata: RenderResultMetadata): void - removed:
method RenderResult.pipe(res: PipeTarget<Uint8Array>): Promise<void> - changed:
constructor RenderResult(response: RenderResultResponse, { contentType, waitUntil, ...metadata }?: { contentType?: ContentTypeOption } & RenderResultMetadata) → constructor RenderResult(response: RenderResultResponse, { contentType, waitUntil, metadata }: RenderResultOptions<Metadata>) - changed:
default class RenderResult → default class RenderResult<Metadata extends RenderResultMetadata = RenderResultMetadata> - changed:
method RenderResult.toUnchunkedString(): string → method RenderResult.toUnchunkedString(stream: true): Promise<string> - changed:
readonly property RenderResult.metadata: RenderResultMetadata → readonly property RenderResult.metadata: Readonly<Metadata> - changed:
static method RenderResult.fromStatic(value: string): RenderResult → static method RenderResult.fromStatic(value: string): RenderResult<StaticRenderResultMetadata> - changed:
type RenderResultMetadata = { pageData?: any; revalidate?: Revalidate; staticBailoutInfo?: any; assetQueryString?: string; isNotFound?: boolean; isRedirect?: boolean; fetchMetrics?: Stati… → type RenderResultMetadata = AppPageRenderResultMetadata & PagesRenderResultMetadata & StaticRenderResultMetadata - added:
method RenderResult.assignMetadata(metadata: Metadata): void - added:
method RenderResult.chain(readable: ReadableStream<Uint8Array>): void - added:
method RenderResult.pipeTo(writable: WritableStream<Uint8Array>): Promise<void> - added:
method RenderResult.pipeToNodeResponse(res: ServerResponse): Promise<void> - added:
method RenderResult.toUnchunkedString(stream?: false): string - added:
type AppPageRenderResultMetadata = { flightData?: string; revalidate?: Revalidate; staticBailoutInfo?: { stack?: string; description?: string }; postponed?: string; headers?: OutgoingHttpHeaders… - added:
type PagesRenderResultMetadata = { pageData?: any; revalidate?: Revalidate; assetQueryString?: string; isNotFound?: boolean; isRedirect?: boolean } - added:
type RenderResultOptions<Metadata extends RenderResultMetadata = RenderResultMetadata> = { contentType?: ContentTypeOption; waitUntil?: Promise<unknown>; metadata: Metadata } - added:
type RenderResultResponse = ReadableStream<Uint8Array>[] | ReadableStream<Uint8Array> | string | null - added:
type StaticRenderResultMetadata = {}
- removed:
property RequestMeta.__NEXT_CLONABLE_BODY?: CloneableBody - removed:
property RequestMeta.__NEXT_INIT_QUERY?: ParsedUrlQuery - removed:
property RequestMeta.__NEXT_INIT_URL?: string - removed:
property RequestMeta.__nextHadTrailingSlash?: boolean - removed:
property RequestMeta.__nextIsLocaleDomain?: boolean - removed:
property RequestMeta.__nextStrippedLocale?: boolean - removed:
property RequestMeta._nextDataNormalizing?: boolean - removed:
property RequestMeta._nextDidRewrite?: boolean - removed:
property RequestMeta._nextHadBasePath?: boolean - removed:
property RequestMeta._nextIncrementalCache?: any - removed:
property RequestMeta._nextMatch?: RouteMatch - removed:
property RequestMeta._nextMiddlewareCookie?: string[] - removed:
property RequestMeta._nextMinimalMode?: boolean - removed:
property RequestMeta._nextRewroteUrl?: string - removed:
property RequestMeta._protocol?: string - added:
property RequestMeta.clonableBody?: CloneableBody - added:
property RequestMeta.didStripLocale?: boolean - added:
property RequestMeta.incrementalCache?: any - added:
property RequestMeta.initProtocol?: string - added:
property RequestMeta.initQuery?: ParsedUrlQuery - added:
property RequestMeta.initURL?: string - added:
property RequestMeta.invokeError?: Error - added:
property RequestMeta.invokeOutput?: string - added:
property RequestMeta.invokePath?: string - added:
property RequestMeta.invokeQuery?: Record<string, undefined | string | string[]> - added:
property RequestMeta.invokeStatus?: number - added:
property RequestMeta.isLocaleDomain?: boolean - added:
property RequestMeta.isPrefetchRSCRequest?: true - added:
property RequestMeta.isRSCRequest?: true - added:
property RequestMeta.match?: RouteMatch - added:
property RequestMeta.middlewareCookie?: string[] - added:
property RequestMeta.middlewareInvoke?: boolean - added:
property RequestMeta.notFoundRevalidate?: number | false - added:
property RequestMeta.onCacheEntry?: (cacheEntry: any, requestMeta: any) => Promise<boolean | void> | boolean | void - added:
property RequestMeta.postponed?: string - added:
property RequestMeta.rewroteURL?: string
- changed:
function requireFontManifest(distDir: string): any → function requireFontManifest(distDir: string): FontManifest
- changed:
const defaultOverrides: { 'styled-jsx': any; 'styled-jsx/style': string } → const defaultOverrides: { 'styled-jsx': any; 'styled-jsx/style': string; 'styled-jsx/style.js': string }
- changed:
default class ResponseCache → default class ResponseCache implements ResponseCacheBase - changed:
method ResponseCache.get(key: string | null, responseGenerator: ResponseGenerator, context: { isOnDemandRevalidate?: boolean; isPrefetch?: boolean; incrementalCache: IncrementalCache }): Promise<ResponseCacheEntry | null> → method ResponseCache.get(key: string | null, responseGenerator: ResponseGenerator, context: { routeKind?: RouteKind; isOnDemandRevalidate?: boolean; isPrefetch?: boolean; incrementalCache: IncrementalCache }): Promise<ResponseCacheEntry | null>
- changed:
method ResponseCacheBase.get(key: string | null, responseGenerator: ResponseGenerator, context: { isOnDemandRevalidate?: boolean; isPrefetch?: boolean; incrementalCache: IncrementalCache }): Promise<ResponseCacheEntry | null> → method ResponseCacheBase.get(key: string | null, responseGenerator: ResponseGenerator, context: { isOnDemandRevalidate?: boolean; isPrefetch?: boolean; incrementalCache: IncrementalCache; routeKind?: RouteKind }): Promise<ResponseCacheEntry | null> - changed:
property CachedFetchValue.data: { headers: { [k: string]: string }; body: string; url: string; status?: number; tags?: string[] } → property CachedFetchValue.data: { headers: { [k: string]: string }; body: string; url: string; status?: number } - changed:
property IncrementalCache.get: (key: string, ctx?: { fetchCache?: boolean }) => Promise<IncrementalCacheItem> → property IncrementalCache.get: (key: string, ctx?: { kindHint?: IncrementalCacheKindHint }) => Promise<IncrementalCacheItem> - changed:
type ResponseGenerator = (hasResolved: boolean, cacheEntry?: IncrementalCacheItem) => Promise<ResponseCacheEntry | null> → type ResponseGenerator = (hasResolved: boolean, previousCacheEntry?: IncrementalCacheItem, isRevalidating?: boolean) => Promise<ResponseCacheEntry | null> - added:
property CachedFetchValue.tags?: string[] - added:
type IncrementalCacheKindHint = 'app' | 'pages' | 'fetch'
- added:
function fromResponseCacheEntry(cacheEntry: ResponseCacheEntry): Promise<IncrementalCacheItem> - added:
function toResponseCacheEntry(response: IncrementalCacheItem): Promise<ResponseCacheEntry | null>
- added:
function sendEtagResponse(req: IncomingMessage, res: ServerResponse, etag: string | undefined): boolean - added:
function sendRenderResult({ req, res, result, type, generateEtags, poweredByHeader, revalidate, swrDelta }: { req: IncomingMessage; res: ServerResponse; result: RenderResult; type: 'html' | 'json' | 'rsc'; generateEtags: boolean; poweredByHeader: boolean; revalidate: Revalidate | undefined; swrDelta: SwrDelta | undefined }): Promise<void>
- removed:
export { setRevalidateHeaders } - removed:
function sendEtagResponse(req: IncomingMessage, res: ServerResponse, etag: string | undefined): boolean - removed:
function sendRenderResult({ req, res, result, type, generateEtags, poweredByHeader, options }: { req: IncomingMessage; res: ServerResponse; result: RenderResult; type: 'html' | 'json' | 'rsc'; generateEtags: boolean; poweredByHeader: boolean; options?: PayloadOptions }): Promise<void> - removed:
type PayloadOptions = { private: true } | { private: boolean; stateful: true } | { private: boolean; stateful: false; revalidate: number | false }
- removed:
function setRevalidateHeaders(res: ServerResponse | BaseNextResponse, options: PayloadOptions): void
- changed:
function sendResponse(req: BaseNextRequest, res: BaseNextResponse, response: Response, waitUntil?: Promise<any>): Promise<void> → function sendResponse(req: BaseNextRequest, res: BaseNextResponse, response: Response, waitUntil?: Promise<unknown>): Promise<void>
- removed:
function getContentType(extWithoutDot: string): string | null - removed:
function getExtension(contentType: string): string | null - added:
const getContentType: (extWithoutDot: string) => string | null - added:
const getExtension: (contentType: string) => string | null
- added:
function normalizeDynamicRouteParams(params: ParsedUrlQuery, ignoreOptional?: boolean, defaultRouteRegex?: ReturnType<typeof getNamedRouteRegex> | undefined, defaultRouteMatches?: ParsedUrlQuery | undefined): { params: ParsedUrlQuery; hasValidParams: boolean }
- removed:
function decodeText(input: Uint8Array | undefined, textDecoder: TextDecoder): string - removed:
function encodeText(input: string): Uint8Array
- added:
const ENCODED_TAGS: { readonly OPENING: { readonly HTML: Uint8Array; readonly BODY: Uint8Array }; readonly CLOSED: { readonly HEAD: Uint8Array; readonly BODY: Uint8Array; readonly…
- removed:
const streamToBufferedResult: (renderResult: RenderResult) => Promise<string> - removed:
function cloneTransformStream(source: TransformStream): TransformStream<any, any> - removed:
function createInsertedHTMLStream(getServerInsertedHTML: () => Promise<string>): TransformStream<Uint8Array, Uint8Array> - changed:
function chainStreams<T>(streams: ReadableStream<T>[]): ReadableStream<T> → function chainStreams<T>(...streams: ReadableStream<T>[]): ReadableStream<T> - changed:
function continueFizzStream(renderStream: ReactReadableStream, { suffix, inlinedDataStream, generateStaticHTML, getServerInsertedHTML, serverInsertedHTMLToHead, validateRootLayout }: { inlinedDataStream?: ReadableStream<Uint8Array>; generateStaticHTML: boolean; getServerInsertedHTML?: () => Promise<string>; serverInsertedHTMLToHead: boolean; validateRootLayout?: { assetPrefix?: string; getTree: (… → function continueFizzStream(renderStream: ReactReadableStream, { suffix, inlinedDataStream, isStaticGeneration, getServerInsertedHTML, serverInsertedHTMLToHead, validateRootLayout }: ContinueStreamOptions): Promise<ReadableStream<Uint8Array>> - changed:
function createRootLayoutValidatorStream(assetPrefix: string | undefined, getTree: () => FlightRouterState): TransformStream<Uint8Array, Uint8Array> → function createRootLayoutValidatorStream(): TransformStream<Uint8Array, Uint8Array> - added:
function continueDynamicDataResume(renderStream: ReadableStream<Uint8Array>, { inlinedDataStream }: ContinueDynamicDataResumeOptions): Promise<ReadableStream<Uint8Array>> - added:
function continueDynamicHTMLResume(renderStream: ReadableStream<Uint8Array>, { inlinedDataStream, getServerInsertedHTML }: ContinueResumeOptions): Promise<ReadableStream<Uint8Array>> - added:
function continueDynamicPrerender(prerenderStream: ReadableStream<Uint8Array>, { getServerInsertedHTML }: ContinueDynamicPrerenderOptions): Promise<ReadableStream<Uint8Array>> - added:
function continueStaticPrerender(prerenderStream: ReadableStream<Uint8Array>, { inlinedDataStream, getServerInsertedHTML }: ContinueStaticPrerenderOptions): Promise<ReadableStream<Uint8Array>> - added:
type ContinueStreamOptions = { inlinedDataStream: ReadableStream<Uint8Array> | undefined; isStaticGeneration: boolean; getServerInsertedHTML: (() => Promise<string>) | undefined; serverIns…
- added:
function indexOfUint8Array(a: Uint8Array, b: Uint8Array): number - added:
function isEquivalentUint8Arrays(a: Uint8Array, b: Uint8Array): boolean - added:
function removeFromUint8Array(a: Uint8Array, b: Uint8Array): Uint8Array
- removed:
const ALLOWED_EXPORTS: string[] - removed:
const ALLOWED_LAYOUT_PROPS: string[] - removed:
const ALLOWED_PAGE_PROPS: string[] - removed:
const DISALLOWED_SERVER_REACT_APIS: string[] - removed:
const LEGACY_CONFIG_EXPORT = 'config' - removed:
const NEXT_TS_ERRORS: { INVALID_SERVER_API: number; INVALID_ENTRY_EXPORT: number; INVALID_OPTION_VALUE: number; MISPLACED_CLIENT_ENTRY: number; INVALID_PAGE_PROP: number; INVALID_CO…
- removed:
const createTSPlugin: tsModule.server.PluginModuleFactory
- removed:
const clientBoundary: { getSemanticDiagnosticsForExportVariableStatement(source: tsModule.SourceFile, node: tsModule.VariableStatement): tsModule.Diagnostic[]; getSemanticDiagnostic… - removed:
default clientBoundary
- removed:
const config: { addCompletionsAtPosition(fileName: string, position: number, prior: tsModule.WithMetadata<tsModule.CompletionInfo>): void; getQuickInfoAtPosition(fileName: s… - removed:
default config
- removed:
const entry: { getCompletionsAtPosition(fileName: string, node: tsModule.FunctionDeclaration, position: number): tsModule.CompletionEntry[]; getSemanticDiagnostics(fileName… - removed:
default entry
- removed:
const errorEntry: { getSemanticDiagnostics(source: tsModule.SourceFile, isClientEntry: boolean): tsModule.Diagnostic[] } - removed:
default errorEntry
- removed:
const metadata: { filterCompletionsAtPosition(fileName: string, position: number, _options: any, prior: tsModule.WithMetadata<tsModule.CompletionInfo>): tsModule.WithMetadata<… - removed:
default metadata
- removed:
const serverLayer: { filterCompletionsAtPosition(entries: tsModule.CompletionEntry[]): tsModule.CompletionEntry[]; hasDisallowedReactAPIDefinition(definitions: readonly tsModule.… - removed:
default serverLayer
- removed:
const isAppEntryFile: (filePath: string) => boolean - removed:
const isDefaultFunctionExport: (node: tsModule.Node) => node is tsModule.FunctionDeclaration - removed:
const isInsideApp: (filePath: string) => boolean - removed:
const isPageFile: (filePath: string) => boolean - removed:
const isPositionInsideNode: (position: number, node: tsModule.Node) => boolean - removed:
function getInfo(): tsModule.server.PluginCreateInfo - removed:
function getIsClientEntry(fileName: string, throwOnInvalidDirective?: boolean): boolean - removed:
function getSource(fileName: string): tsModule.SourceFile | undefined - removed:
function getTs(): typeof tsModule - removed:
function getTypeChecker(): tsModule.TypeChecker | undefined - removed:
function init(opts: { ts: TypeScript; info: tsModule.server.PluginCreateInfo }): void - removed:
function log(message: string): void - removed:
function removeStringQuotes(str: string): string
- removed:
function cleanAmpPath(pathname: string): string - removed:
function debounce<T, F extends AnyFunc<T>>(fn: F, ms: number, maxWait?: number): (this: T, ...passedArgs: Parameters<F>) => void - removed:
function isBlockedPage(page: string): boolean
- removed:
constructor NextWebServer(options: WebServerOptions) - removed:
default class NextWebServer extends BaseServer<WebServerOptions> - removed:
protected method NextWebServer.attachRequestMeta(req: WebNextRequest, parsedUrl: NextUrlWithParsedQuery): void - removed:
protected method NextWebServer.findPageComponents({ page, query, params }: { page: string; query: NextParsedUrlQuery; params: Params | null; isAppPath: boolean }): Promise<{ query: { [x: string]: any; __nextNotFoundSrcPage?: string | undefined; __nextDefaultLocale?: string | undefined; __nextFallback?: 'true' | undefined; __nextLocale?: string | undefined; __nextInferredLocaleFromDefault?: '1' |… - removed:
protected method NextWebServer.getAppPathsManifest(): { [x: string]: string } - removed:
protected method NextWebServer.getBuildId(): string - removed:
protected method NextWebServer.getFallback(): Promise<string> - removed:
protected method NextWebServer.getFallbackErrorComponents(): Promise<LoadComponentsReturnType | null> - removed:
protected method NextWebServer.getFilesystemPaths(): Set<string> - removed:
protected method NextWebServer.getFontManifest(): undefined - removed:
protected method NextWebServer.getHasAppDir(): boolean - removed:
protected method NextWebServer.getHasStaticDir(): boolean - removed:
protected method NextWebServer.getIncrementalCache({ requestHeaders }: { requestHeaders: IncrementalCache['requestHeaders'] }): IncrementalCache - removed:
protected method NextWebServer.getMiddleware(): MiddlewareRoutingItem | undefined - removed:
protected method NextWebServer.getNextFontManifest(): import('../build/webpack/plugins/next-font-manifest-plugin').NextFontManifest | undefined - removed:
protected method NextWebServer.getPagesManifest(): { [x: string]: string } - removed:
protected method NextWebServer.getPrefetchRsc(): Promise<string | null> - removed:
protected method NextWebServer.getPrerenderManifest(): PrerenderManifest | { version: any; routes: {}; dynamicRoutes: {}; notFoundRoutes: never[]; preview: any } - removed:
protected method NextWebServer.getPublicDir(): string - removed:
protected method NextWebServer.getResponseCache(): WebResponseCache - removed:
protected method NextWebServer.getRoutesManifest(): NormalizedRouteManifest | undefined - removed:
protected method NextWebServer.handleApiRequest(): Promise<boolean> - removed:
protected method NextWebServer.handleCatchallRenderRequest(req: BaseNextRequest, res: BaseNextResponse, parsedUrl: NextUrlWithParsedQuery): Promise<{ finished: boolean }> - removed:
protected method NextWebServer.handleCompression(): void - removed:
protected method NextWebServer.handleUpgrade(): Promise<void> - removed:
protected method NextWebServer.hasPage(page: string): Promise<boolean> - removed:
protected method NextWebServer.loadEnvConfig(): void - removed:
protected method NextWebServer.renderHTML(req: WebNextRequest, res: WebNextResponse, pathname: string, query: NextParsedUrlQuery, renderOpts: LoadedRenderOpts): Promise<RenderResult> - removed:
protected method NextWebServer.runApi(): Promise<boolean> - removed:
protected method NextWebServer.sendRenderResult(_req: WebNextRequest, res: WebNextResponse, options: { result: RenderResult; type: 'html' | 'json'; generateEtags: boolean; poweredByHeader: boolean; options?: PayloadOptions | undefined }): Promise<void>
- removed:
function adapter(params: AdapterOptions): Promise<FetchEventResult> - removed:
type AdapterOptions = { handler: NextMiddleware; page: string; request: RequestData; IncrementalCache?: typeof import('../lib/incremental-cache').IncrementalCache }
- removed:
class EdgeRouteModuleWrapper - removed:
static method EdgeRouteModuleWrapper.wrap(routeModule: AppRouteRouteModule, options?: WrapOptions): (opts: AdapterOptions) => Promise<import('./types').FetchEventResult>
- removed:
class PageSignatureError extends Error - removed:
class RemovedPageError extends Error - removed:
class RemovedUAError extends Error - removed:
constructor PageSignatureError({ page }: { page: string }) - removed:
constructor RemovedPageError() - removed:
constructor RemovedUAError()
- removed:
export { ImageResponse as default } from '../spec-extension/image-response'
- removed:
export { default as ImageResponse } from './image-response' - removed:
export { default as NextRequest } from './next-request' - removed:
export { default as NextResponse } from './next-response' - removed:
export { default as URLPattern } from './url-pattern' - removed:
export { default as userAgent } from './user-agent' - removed:
export { default as userAgentFromString } from './user-agent-from-string'
- removed:
export { NextRequest as default } from '../spec-extension/request'
- removed:
export { NextResponse as default } from '../spec-extension/response'
- removed:
export { revalidatePath as default } from '../spec-extension/revalidate-path'
- removed:
export { revalidateTag as default } from '../spec-extension/revalidate-tag'
- removed:
export { unstable_cache as default } from '../spec-extension/unstable-cache'
- removed:
const GlobalURLPattern: any - removed:
default GlobalURLPattern
- removed:
export { userAgent as default } from '../spec-extension/user-agent'
- removed:
export { userAgentFromString as default } from '../spec-extension/user-agent'
- removed:
function ensureInstrumentationRegistered(): Promise<void>
- removed:
const HTTP_METHODS: readonly ['GET', 'HEAD', 'OPTIONS', 'POST', 'PUT', 'DELETE', 'PATCH'] - removed:
function isHTTPMethod(maybeMethod: string): maybeMethod is HTTP_METHOD - removed:
type HTTP_METHOD = (typeof HTTP_METHODS)[number]
- removed:
function internal_getCurrentFunctionWaitUntil(): Promise<void> | null - removed:
function internal_runWithWaitUntil<T>(fn: () => T): T
- removed:
class NextURL - removed:
constructor NextURL(input: string | URL, base?: string | URL, opts?: Options) - removed:
constructor NextURL(input: string | URL, opts?: Options) - removed:
get NextURL.basePath(): string - removed:
get NextURL.buildId(): string | undefined - removed:
get NextURL.defaultLocale(): string | undefined - removed:
get NextURL.domainLocale(): DomainLocale | undefined - removed:
get NextURL.hash(): string - removed:
get NextURL.host(): string - removed:
get NextURL.hostname(): string - removed:
get NextURL.href(): string - removed:
get NextURL.locale(): string - removed:
get NextURL.origin(): string - removed:
get NextURL.password(): string - removed:
get NextURL.pathname(): string - removed:
get NextURL.port(): string - removed:
get NextURL.protocol(): string - removed:
get NextURL.search(): string - removed:
get NextURL.searchParams(): URLSearchParams - removed:
get NextURL.username(): string - removed:
method NextURL.clone(): NextURL - removed:
method NextURL.toJSON(): string - removed:
method NextURL.toString(): string - removed:
set NextURL.basePath(value: string) - removed:
set NextURL.buildId(buildId: string | undefined) - removed:
set NextURL.hash(value: string) - removed:
set NextURL.host(value: string) - removed:
set NextURL.hostname(value: string) - removed:
set NextURL.href(url: string) - removed:
set NextURL.locale(locale: string) - removed:
set NextURL.password(value: string) - removed:
set NextURL.pathname(value: string) - removed:
set NextURL.port(value: string) - removed:
set NextURL.protocol(value: string) - removed:
set NextURL.search(value: string) - removed:
set NextURL.username(value: string)
- removed:
function clearModuleContext(path: string): Promise<void> - removed:
function getModuleContext(options: ModuleContextOptions): Promise<{ evaluateInContext: (filepath: string) => void; runtime: EdgeRuntime; paths: Map<string, string>; warnedEvals: Set<string> }>
- removed:
function fetchInlineAsset(options: { input: RequestInfo | URL; distDir: string; assets: EdgeFunctionDefinition['assets']; context: { Response: typeof Response; ReadableStream: typeof ReadableStream } }): Promise<Response | undefined>
- removed:
export * from './sandbox' - removed:
export { clearModuleContext } from './context'
- removed:
const ErrorSource: unique symbol - removed:
const run: RunnerFn - removed:
function getRuntimeContext(params: { name: string; onWarning?: any; useCache: boolean; edgeFunctionEntry: any; distDir: string; paths: string[]; incrementalCache?: any }): Promise<EdgeRuntime<any>>
- removed:
class HeadersAdapter extends Headers - removed:
constructor HeadersAdapter(headers: IncomingHttpHeaders) - removed:
method HeadersAdapter.append(name: string, value: string): void - removed:
method HeadersAdapter.delete(name: string): void - removed:
method HeadersAdapter.entries(): IterableIterator<[string, string]> - removed:
method HeadersAdapter.forEach(callbackfn: (value: string, name: string, parent: Headers) => void, thisArg?: any): void - removed:
method HeadersAdapter.get(name: string): string | null - removed:
method HeadersAdapter.has(name: string): boolean - removed:
method HeadersAdapter.keys(): IterableIterator<string> - removed:
method HeadersAdapter.set(name: string, value: string): void - removed:
method HeadersAdapter.values(): IterableIterator<string> - removed:
method HeadersAdapter[Symbol.iterator](): IterableIterator<[string, string]> - removed:
static method HeadersAdapter.from(headers: IncomingHttpHeaders | Headers): Headers - removed:
static method HeadersAdapter.seal(headers: Headers): ReadonlyHeaders - removed:
type ReadonlyHeaders = Headers & { append(...args: any[]): void; set(...args: any[]): void; delete(...args: any[]): void }
- removed:
class NextRequestAdapter - removed:
function signalFromNodeResponse(response: Writable): AbortSignal - removed:
static method NextRequestAdapter.fromBaseNextRequest(request: BaseNextRequest, signal: AbortSignal): NextRequest - removed:
static method NextRequestAdapter.fromNodeNextRequest(request: NodeNextRequest, signal: AbortSignal): NextRequest - removed:
static method NextRequestAdapter.fromWebNextRequest(request: WebNextRequest): NextRequest
- removed:
class ReflectAdapter - removed:
static method ReflectAdapter.deleteProperty<T extends object>(target: T, prop: string | symbol): boolean - removed:
static method ReflectAdapter.get<T extends object>(target: T, prop: string | symbol, receiver: unknown): any - removed:
static method ReflectAdapter.has<T extends object>(target: T, prop: string | symbol): boolean - removed:
static method ReflectAdapter.set<T extends object>(target: T, prop: string | symbol, value: any, receiver: any): boolean
- removed:
class MutableRequestCookiesAdapter - removed:
class RequestCookiesAdapter - removed:
function appendMutableCookies(headers: Headers, mutableCookies: ResponseCookies): boolean - removed:
function getModifiedCookieValues(cookies: ResponseCookies): ResponseCookie[] - removed:
static method MutableRequestCookiesAdapter.wrap(cookies: RequestCookies, onUpdateCookies?: (cookies: string[]) => void): ResponseCookies - removed:
static method RequestCookiesAdapter.seal(cookies: RequestCookies): ReadonlyRequestCookies - removed:
type ReadonlyRequestCookies = Omit<RequestCookies, 'set' | 'clear' | 'delete'> & Pick<ResponseCookies, 'set' | 'delete'>
- removed:
export { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies' - removed:
export { ResponseCookies } from 'next/dist/compiled/@edge-runtime/cookies'
- removed:
class NextFetchEvent extends FetchEvent - removed:
const waitUntilSymbol: unique symbol - removed:
constructor NextFetchEvent(params: { request: NextRequest; page: string }) - removed:
get NextFetchEvent.request(): void - removed:
method NextFetchEvent.respondWith(): void - removed:
property NextFetchEvent.sourcePage: string
- removed:
class ImageResponse extends Response - removed:
constructor ImageResponse(...args: ConstructorParameters<typeof import('next/dist/compiled/@vercel/og').ImageResponse>) - removed:
static property ImageResponse.displayName: string
- removed:
class NextRequest extends Request - removed:
const INTERNALS: unique symbol - removed:
constructor NextRequest(input: URL | RequestInfo, init?: RequestInit) - removed:
get NextRequest.cookies(): RequestCookies - removed:
get NextRequest.geo(): { city?: string | undefined; country?: string | undefined; region?: string | undefined; latitude?: string | undefined; longitude?: string | undefined } | undefined - removed:
get NextRequest.ip(): string | undefined - removed:
get NextRequest.nextUrl(): NextURL - removed:
get NextRequest.page(): void - removed:
get NextRequest.ua(): void - removed:
get NextRequest.url(): string - removed:
interface RequestInit extends globalThis.RequestInit - removed:
property NextRequest[INTERNALS]: { cookies: RequestCookies; geo: RequestData['geo']; ip?: string; url: string; nextUrl: NextURL } - removed:
property RequestInit.geo?: { city?: string; country?: string; region?: string } - removed:
property RequestInit.ip?: string - removed:
property RequestInit.nextConfig?: { basePath?: string; i18n?: I18NConfig | null; trailingSlash?: boolean } - removed:
property RequestInit.signal?: AbortSignal
- removed:
class NextResponse<Body = unknown> extends Response - removed:
constructor NextResponse(body?: BodyInit | null, init?: ResponseInit) - removed:
get NextResponse.cookies(): ResponseCookies - removed:
property NextResponse[INTERNALS]: { cookies: ResponseCookies; url?: NextURL; body?: Body } - removed:
static method NextResponse.json<JsonBody>(body: JsonBody, init?: ResponseInit): NextResponse<JsonBody> - removed:
static method NextResponse.next(init?: MiddlewareResponseInit): NextResponse<unknown> - removed:
static method NextResponse.redirect(url: string | NextURL | URL, init?: number | ResponseInit): NextResponse<unknown> - removed:
static method NextResponse.rewrite(destination: string | NextURL | URL, init?: MiddlewareResponseInit): NextResponse<unknown>
- removed:
function revalidatePath(originalPath: string, type?: 'layout' | 'page'): void
- removed:
function revalidateTag(tag: string): void
- removed:
function unstable_cache<T extends Callback>(cb: T, keyParts?: string[], options?: { revalidate?: number | false; tags?: string[] }): T
- removed:
function isBot(input: string): boolean - removed:
function userAgent({ headers }: { headers: Headers }): UserAgent - removed:
function userAgentFromString(input: string | undefined): UserAgent
- removed:
interface FetchEventResult - removed:
interface RequestData - removed:
property FetchEventResult.fetchMetrics?: FetchMetrics - removed:
property FetchEventResult.response: Response - removed:
property FetchEventResult.waitUntil: Promise<any> - removed:
property RequestData.body?: ReadableStream<Uint8Array> - removed:
property RequestData.geo?: { city?: string; country?: string; region?: string; latitude?: string; longitude?: string } - removed:
property RequestData.headers: OutgoingHttpHeaders - removed:
property RequestData.ip?: string - removed:
property RequestData.method: string - removed:
property RequestData.nextConfig?: { basePath?: string; i18n?: I18NConfig | null; trailingSlash?: boolean } - removed:
property RequestData.page?: { name?: string; params?: { [key: string]: string | string[] } } - removed:
property RequestData.signal: AbortSignal - removed:
property RequestData.url: string - removed:
type NextMiddleware = (request: NextRequest, event: NextFetchEvent) => NextMiddlewareResult | Promise<NextMiddlewareResult> - removed:
type NextMiddlewareResult = NextResponse | Response | null | undefined | void - removed:
type NodejsRequestData = Omit<RequestData, 'body'> & { body?: CloneableBody }
- removed:
function fromNodeOutgoingHttpHeaders(nodeHeaders: OutgoingHttpHeaders): Headers - removed:
function splitCookiesString(cookiesString: string): string[] - removed:
function toNodeOutgoingHttpHeaders(headers: Headers): OutgoingHttpHeaders - removed:
function validateURL(url: string | URL): string
- removed:
function useAmp(): boolean
- removed:
const AmpStateContext: React.Context<any>
- removed:
function isInAmpMode({ ampFirst, hybrid, hasQuery }?: { ampFirst?: boolean | undefined; hybrid?: boolean | undefined; hasQuery?: boolean | undefined }): boolean
- removed:
default function dynamic<P = {}>(dynamicOptions: DynamicOptions<P> | Loader<P>, options?: DynamicOptions<P>): React.ComponentType<P> - removed:
type DynamicOptions<P = {}> = LoadableGeneratedOptions & { loading?: (loadingProps: DynamicOptionsLoadingProps) => JSX.Element | null; loader?: Loader<P>; loadableGenerated?: LoadableGenera… - removed:
type DynamicOptionsLoadingProps = { error?: Error | null; isLoading?: boolean; pastDelay?: boolean; retry?: () => void; timedOut?: boolean } - removed:
type LoadableComponent<P = {}> = React.ComponentType<P> - removed:
type LoadableFn<P = {}> = (opts: LoadableOptions<P>) => React.ComponentType<P> - removed:
type LoadableGeneratedOptions = { webpack?(): any; modules?(): LoaderMap } - removed:
type LoadableOptions<P = {}> = DynamicOptions<P> - removed:
type Loader<P = {}> = () => LoaderComponent<P> - removed:
type LoaderComponent<P = {}> = Promise<React.ComponentType<P> | ComponentModule<P>> - removed:
type LoaderMap = { [module: string]: () => Loader<any> }
- removed:
const AppRouterContext: React.Context<AppRouterInstance | null> - removed:
const GlobalLayoutRouterContext: React.Context<{ buildId: string; tree: FlightRouterState; changeByServerResponse: (previousTree: FlightRouterState, flightData: FlightData, overrideCanonicalUr… - removed:
const LayoutRouterContext: React.Context<{ childNodes: CacheNode['parallelRoutes']; tree: FlightRouterState; url: string }> - removed:
const TemplateContext: React.Context<React.ReactNode> - removed:
enum CacheStates - removed:
interface AppRouterInstance - removed:
interface NavigateOptions - removed:
interface PrefetchOptions - removed:
member CacheStates.DATA_FETCH = 'DATAFETCH' - removed:
member CacheStates.LAZY_INITIALIZED = 'LAZYINITIALIZED' - removed:
member CacheStates.READY = 'READY' - removed:
method AppRouterInstance.back(): void - removed:
method AppRouterInstance.forward(): void - removed:
method AppRouterInstance.prefetch(href: string, options?: PrefetchOptions): void - removed:
method AppRouterInstance.push(href: string, options?: NavigateOptions): void - removed:
method AppRouterInstance.refresh(): void - removed:
method AppRouterInstance.replace(href: string, options?: NavigateOptions): void - removed:
property NavigateOptions.scroll?: boolean - removed:
property PrefetchOptions.kind: PrefetchKind - removed:
type CacheNode = { status: CacheStates.DATA_FETCH; data: ThenableRecord<FetchServerResponseResult> | null; head?: React.ReactNode; subTreeData: null; parallelRoutes: Map<string… - removed:
type ChildSegmentMap = Map<string, CacheNode>
- removed:
const decode: (base64: string) => ArrayBuffer - removed:
const encode: (arraybuffer: ArrayBuffer) => string
- removed:
class BloomFilter - removed:
constructor BloomFilter(numItems: number, errorRate: number) - removed:
method BloomFilter.add(item: string): void - removed:
method BloomFilter.contains(item: string): boolean - removed:
method BloomFilter.export(): { numItems: number; errorRate: number; numBits: number; numHashes: number; bitArray: number[] } - removed:
method BloomFilter.getHashValues(item: string): number[] - removed:
method BloomFilter.import(data: ReturnType<(typeof this)['export']>): void - removed:
property BloomFilter.bitArray: number[] - removed:
property BloomFilter.errorRate: number - removed:
property BloomFilter.numBits: number - removed:
property BloomFilter.numHashes: number - removed:
property BloomFilter.numItems: number - removed:
static method BloomFilter.from(items: string[], errorRate?: number): BloomFilter
- removed:
const APP_BUILD_MANIFEST = 'app-build-manifest.json' - removed:
const APP_CLIENT_INTERNALS = 'app-pages-internals' - removed:
const APP_PATHS_MANIFEST = 'app-paths-manifest.json' - removed:
const APP_PATH_ROUTES_MANIFEST = 'app-path-routes-manifest.json' - removed:
const BARREL_OPTIMIZATION_PREFIX = '__barrel_optimize__' - removed:
const BLOCKED_PAGES: string[] - removed:
const BUILD_ID_FILE = 'BUILD_ID' - removed:
const BUILD_MANIFEST = 'build-manifest.json' - removed:
const CLIENT_PUBLIC_FILES_PATH = 'public' - removed:
const CLIENT_REFERENCE_MANIFEST = 'client-reference-manifest' - removed:
const CLIENT_STATIC_FILES_PATH = 'static' - removed:
const CLIENT_STATIC_FILES_RUNTIME_AMP = 'amp' - removed:
const CLIENT_STATIC_FILES_RUNTIME_MAIN = 'main' - removed:
const CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = 'main-app' - removed:
const CLIENT_STATIC_FILES_RUNTIME_POLYFILLS = 'polyfills' - removed:
const CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL: unique symbol - removed:
const CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = 'react-refresh' - removed:
const CLIENT_STATIC_FILES_RUNTIME_WEBPACK = 'webpack' - removed:
const COMPILER_INDEXES: { [compilerKey in CompilerNameValues]: number } - removed:
const COMPILER_NAMES: { readonly client: 'client'; readonly server: 'server'; readonly edgeServer: 'edge-server' } - removed:
const CONFIG_FILES: string[] - removed:
const DEFAULT_SANS_SERIF_FONT: { name: string; xAvgCharWidth: number; azAvgWidth: number; unitsPerEm: number } - removed:
const DEFAULT_SERIF_FONT: { name: string; xAvgCharWidth: number; azAvgWidth: number; unitsPerEm: number } - removed:
const DEV_CLIENT_PAGES_MANIFEST = '_devPagesManifest.json' - removed:
const DEV_MIDDLEWARE_MANIFEST = '_devMiddlewareManifest.json' - removed:
const EDGE_RUNTIME_WEBPACK = 'edge-runtime-webpack' - removed:
const EDGE_UNSUPPORTED_NODE_APIS: string[] - removed:
const EXPORT_DETAIL = 'export-detail.json' - removed:
const EXPORT_MARKER = 'export-marker.json' - removed:
const FONT_MANIFEST = 'font-manifest.json' - removed:
const FUNCTIONS_CONFIG_MANIFEST = 'functions-config-manifest.json' - removed:
const GOOGLE_FONT_PROVIDER = 'https://fonts.googleapis.com/' - removed:
const IMAGES_MANIFEST = 'images-manifest.json' - removed:
const INTERNAL_HEADERS: readonly ['x-invoke-path', 'x-invoke-status', 'x-invoke-error', 'x-invoke-query', 'x-middleware-invoke'] - removed:
const MIDDLEWARE_BUILD_MANIFEST = 'middleware-build-manifest' - removed:
const MIDDLEWARE_MANIFEST = 'middleware-manifest.json' - removed:
const MIDDLEWARE_REACT_LOADABLE_MANIFEST = 'middleware-react-loadable-manifest' - removed:
const NEXT_BUILTIN_DOCUMENT = '__NEXT_BUILTIN_DOCUMENT__' - removed:
const NEXT_FONT_MANIFEST = 'next-font-manifest' - removed:
const OPTIMIZED_FONT_PROVIDERS: { url: string; preconnect: string }[] - removed:
const PAGES_MANIFEST = 'pages-manifest.json' - removed:
const PAGE_SEGMENT_KEY = '__PAGE__' - removed:
const PERMANENT_REDIRECT_STATUS = 308 - removed:
const PHASE_DEVELOPMENT_SERVER = 'phase-development-server' - removed:
const PHASE_EXPORT = 'phase-export' - removed:
const PHASE_INFO = 'phase-info' - removed:
const PHASE_PRODUCTION_BUILD = 'phase-production-build' - removed:
const PHASE_PRODUCTION_SERVER = 'phase-production-server' - removed:
const PHASE_TEST = 'phase-test' - removed:
const PRERENDER_MANIFEST = 'prerender-manifest.json' - removed:
const REACT_LOADABLE_MANIFEST = 'react-loadable-manifest.json' - removed:
const ROUTES_MANIFEST = 'routes-manifest.json' - removed:
const RSC_MODULE_TYPES: { readonly client: 'client'; readonly server: 'server' } - removed:
const SERVER_DIRECTORY = 'server' - removed:
const SERVER_FILES_MANIFEST = 'required-server-files.json' - removed:
const SERVER_PROPS_ID = '__N_SSP' - removed:
const SERVER_REFERENCE_MANIFEST = 'server-reference-manifest' - removed:
const STATIC_PROPS_ID = '__N_SSG' - removed:
const STATIC_STATUS_PAGES: string[] - removed:
const STRING_LITERAL_DROP_BUNDLE = '__NEXT_DROP_CLIENT_FILE__' - removed:
const SUBRESOURCE_INTEGRITY_MANIFEST = 'subresource-integrity-manifest' - removed:
const SYSTEM_ENTRYPOINTS: Set<string> - removed:
const TEMPORARY_REDIRECT_STATUS = 307 - removed:
const TRACE_OUTPUT_VERSION = 1 - removed:
const TURBO_TRACE_DEFAULT_MEMORY_LIMIT = 6000 - removed:
export { MODERN_BROWSERSLIST_TARGET } - removed:
type CompilerNameValues = ValueOf<typeof COMPILER_NAMES> - removed:
type ValueOf<T> = Required<T>[keyof T]
- removed:
default function dynamic<P = {}>(dynamicOptions: DynamicOptions<P> | Loader<P>, options?: DynamicOptions<P>): React.ComponentType<P> - removed:
function noSSR<P = {}>(LoadableInitializer: LoadableFn<P>, loadableOptions: DynamicOptions<P>): React.ComponentType<P> - removed:
type DynamicOptions<P = {}> = LoadableGeneratedOptions & { loading?: (loadingProps: DynamicOptionsLoadingProps) => JSX.Element | null; loader?: Loader<P> | LoaderMap; loadableGenerated?: Lo… - removed:
type DynamicOptionsLoadingProps = { error?: Error | null; isLoading?: boolean; pastDelay?: boolean; retry?: () => void; timedOut?: boolean } - removed:
type LoadableComponent<P = {}> = React.ComponentType<P> - removed:
type LoadableFn<P = {}> = (opts: LoadableOptions<P>) => React.ComponentType<P> - removed:
type LoadableGeneratedOptions = { webpack?(): any; modules?(): LoaderMap } - removed:
type LoadableOptions<P = {}> = DynamicOptions<P> - removed:
type Loader<P = {}> = (() => LoaderComponent<P>) | LoaderComponent<P> - removed:
type LoaderComponent<P = {}> = Promise<React.ComponentType<P> | ComponentModule<P>> - removed:
type LoaderMap = { [module: string]: () => Loader<any> }
- removed:
function escapeStringRegexp(str: string): string
- removed:
default function fnv1a(inputString: string, { size, seed }?: { size?: keyof typeof FNV_PRIMES; seed?: number }): bigint
- removed:
function getHostname(parsed: { hostname?: string | null }, headers?: OutgoingHttpHeaders): string | undefined
- removed:
function getImgProps({ src, sizes, unoptimized, priority, loading, className, quality, width, height, fill, style, onLoad, onLoadingComplete, placeholder, blurDataURL, fetchPriority, layout, objectFit, objectPosition, lazyBoundary, lazyRoot, ...rest }: ImageProps, _state: { defaultLoader: ImageLoaderWithConfig; imgConf: ImageConfigComplete; showAltText?: boolean; blurComplete?: boolean }): { prop… - removed:
interface StaticImageData - removed:
interface StaticRequire - removed:
property StaticImageData.blurDataURL?: string - removed:
property StaticImageData.blurHeight?: number - removed:
property StaticImageData.blurWidth?: number - removed:
property StaticImageData.height: number - removed:
property StaticImageData.src: string - removed:
property StaticImageData.width: number - removed:
property StaticRequire.default: StaticImageData - removed:
type ImageLoader = (p: ImageLoaderProps) => string - removed:
type ImageProps = Omit<JSX.IntrinsicElements['img'], 'src' | 'srcSet' | 'ref' | 'alt' | 'width' | 'height' | 'loading'> & { src: string | StaticImport; alt: string; width?: numb… - removed:
type ImgProps = Omit<ImageProps, 'src' | 'alt' | 'loader'> & { loading: LoadingValue; width: number | undefined; height: number | undefined; style: NonNullable<JSX.IntrinsicEl… - removed:
type OnLoad = React.ReactEventHandler<HTMLImageElement> | undefined - removed:
type OnLoadingComplete = (img: HTMLImageElement) => void - removed:
type PlaceholderValue = 'blur' | 'empty' | `data:image/${string}` - removed:
type StaticImport = StaticRequire | StaticImageData
- removed:
function djb2Hash(str: string): number - removed:
function hexHash(str: string): string
- removed:
default Head - removed:
function Head({ children }: { children: React.ReactNode }): React.JSX.Element - removed:
function defaultHead(inAmpMode?: boolean): JSX.Element[]
- removed:
const HeadManagerContext: React.Context<{ updateHead?: (state: any) => void; mountedInstances?: any; updateScripts?: (state: any) => void; scripts?: any; getIsSsr?: () => boolean; appDi…
- removed:
const PathParamsContext: import('react').Context<Params | null> - removed:
const PathnameContext: import('react').Context<string | null> - removed:
const SearchParamsContext: import('react').Context<URLSearchParams | null>
- removed:
const HtmlContext: import('react').Context<HtmlProps | undefined> - removed:
function useHtmlContext(): HtmlProps - removed:
type HtmlProps = { __NEXT_DATA__: NEXT_DATA; strictNextHead: boolean; dangerousAsPath: string; docComponentsRendered: { Html?: boolean; Main?: boolean; Head?: boolean; NextScri…
- removed:
function detectDomainLocale(domainItems?: DomainLocale[], hostname?: string, detectedLocale?: string): DomainLocale | undefined
- removed:
function getLocaleRedirect({ defaultLocale, domainLocale, pathLocale, headers, nextConfig, urlParsed }: Options): string | undefined
- removed:
function normalizeLocalePath(pathname: string, locales?: string[]): PathLocale - removed:
interface PathLocale - removed:
property PathLocale.detectedLocale?: string - removed:
property PathLocale.pathname: string
- removed:
function getImageBlurSvg({ widthInt, heightInt, blurWidth, blurHeight, blurDataURL, objectFit }: { widthInt?: number; heightInt?: number; blurWidth?: number; blurHeight?: number; blurDataURL: string; objectFit?: string }): string
- removed:
const VALID_LOADERS: readonly ['default', 'imgix', 'cloudinary', 'akamai', 'custom'] - removed:
const imageConfigDefault: ImageConfigComplete - removed:
type ImageConfig = Partial<ImageConfigComplete> - removed:
type ImageConfigComplete = { deviceSizes: number[]; imageSizes: number[]; loader: LoaderValue; path: string; loaderFile: string; domains: string[]; disableStaticImages: boolean; minimumC… - removed:
type ImageLoaderProps = { src: string; width: number; quality?: number } - removed:
type ImageLoaderPropsWithConfig = ImageLoaderProps & { config: Readonly<ImageConfig> } - removed:
type LoaderValue = (typeof VALID_LOADERS)[number] - removed:
type RemotePattern = { protocol?: 'http' | 'https'; hostname: string; port?: string; pathname?: string }
- removed:
const ImageConfigContext: React.Context<ImageConfigComplete>
- removed:
const unstable_getImgProps: (imgProps: ImageProps) => { props: import('./get-img-props').ImgProps } - removed:
default Image - removed:
export { ImageLoader } - removed:
export { ImageLoaderProps } - removed:
export { ImageProps } - removed:
export { StaticImageData }
- removed:
default defaultLoader - removed:
function defaultLoader({ config, src, width, quality }: ImageLoaderPropsWithConfig): string - removed:
namespace defaultLoader - removed:
var defaultLoader.__next_img_default: boolean
- removed:
function getObjectClassLabel(value: any): string - removed:
function isPlainObject(value: any): boolean
- removed:
export { default } from 'path'
- removed:
function NoSSR({ children }: { children: Child }): Child - removed:
function suspense(): void
- removed:
default Loadable - removed:
function Loadable(options: any): { (props: any): React.JSX.Element; displayName: string }
- removed:
const NEXT_DYNAMIC_NO_SSR_CODE = 'NEXT_DYNAMIC_NO_SSR_CODE'
- removed:
const LoadableContext: React.Context<CaptureFn | null>
- removed:
declare global - removed:
default Loadable - removed:
function Loadable(opts: any): React.ForwardRefExoticComponent<Omit<any, 'ref'> & React.RefAttributes<unknown>> - removed:
namespace Loadable - removed:
var Loadable.preloadAll: () => Promise<unknown> - removed:
var Loadable.preloadReady: (ids?: (string | number)[]) => Promise<void>
- removed:
function hasMatch(domains: string[], remotePatterns: RemotePattern[], url: URL): boolean - removed:
function matchRemotePattern(pattern: RemotePattern, url: URL): boolean
- removed:
default function mitt(): MittEmitter<string> - removed:
type MittEmitter<T> = { on(type: T, handler: Handler): void; off(type: T, handler: Handler): void; emit(type: T, ...evts: any[]): void }
- removed:
const MODERN_BROWSERSLIST_TARGET: ['chrome 64', 'edge 79', 'firefox 67', 'opera 51', 'safari 12'] - removed:
default MODERN_BROWSERSLIST_TARGET
- removed:
function absolutePathToPage(pagePath: string, options: { extensions: string[] | readonly string[]; keepIndex: boolean; dir: string; pagesType: 'pages' | 'app' | 'root' }): string
- removed:
function denormalizeAppPagePath(page: string): string
- removed:
function denormalizePagePath(page: string): string