/// /// import type { ComponentType } from 'react'; import type { DomainLocale } from '../../../server/config'; import type { MittEmitter } from '../mitt'; import type { ParsedUrlQuery } from 'querystring'; import type { RouterEvent } from '../../../client/router'; import type { StyleSheetTuple } from '../../../client/page-loader'; import type { UrlObject } from 'url'; import type PageLoader from '../../../client/page-loader'; import type { NextPageContext, NEXT_DATA } from '../utils'; declare global { interface Window { __NEXT_DATA__: NEXT_DATA; } } interface RouteProperties { shallow: boolean; } interface TransitionOptions { shallow?: boolean; locale?: string | false; scroll?: boolean; unstable_skipClientCache?: boolean; } interface NextHistoryState { url: string; as: string; options: TransitionOptions; } export type HistoryState = null | { __NA: true; __N?: false; } | { __N: false; __NA?: false; } | ({ __NA?: false; __N: true; key: string; } & NextHistoryState); interface MiddlewareEffectParams { fetchData?: () => Promise; locale?: string; asPath: string; router: Router; } export declare function matchesMiddleware(options: MiddlewareEffectParams): Promise; export type Url = UrlObject | string; export type BaseRouter = { route: string; pathname: string; query: ParsedUrlQuery; asPath: string; basePath: string; locale?: string | undefined; locales?: string[] | undefined; defaultLocale?: string | undefined; domainLocales?: DomainLocale[] | undefined; isLocaleDomain: boolean; }; export type NextRouter = BaseRouter & Pick; export type PrefetchOptions = { priority?: boolean; locale?: string | false; unstable_skipClientCache?: boolean; }; export type PrivateRouteInfo = (Omit & { initial: true; }) | CompletePrivateRouteInfo; export type CompletePrivateRouteInfo = { Component: ComponentType; styleSheets: StyleSheetTuple[]; __N_SSG?: boolean; __N_SSP?: boolean; props?: Record; err?: Error; error?: any; route?: string; resolvedAs?: string; query?: ParsedUrlQuery; }; export type AppProps = Pick & { router: Router; } & Record; export type AppComponent = ComponentType; type Subscription = (data: PrivateRouteInfo, App: AppComponent, resetScroll: { x: number; y: number; } | null) => Promise; type BeforePopStateCallback = (state: NextHistoryState) => boolean; type ComponentLoadCancel = (() => void) | null; type HistoryMethod = 'replaceState' | 'pushState'; interface FetchDataOutput { dataHref: string; json: Record | null; response: Response; text: string; cacheKey: string; } interface NextDataCache { [asPath: string]: Promise; } export declare function createKey(): string; export default class Router implements BaseRouter { basePath: string; /** * Map of all components loaded in `Router` */ components: { [pathname: string]: PrivateRouteInfo; }; sdc: NextDataCache; sbc: NextDataCache; sub: Subscription; clc: ComponentLoadCancel; pageLoader: PageLoader; _bps: BeforePopStateCallback | undefined; events: MittEmitter; _wrapApp: (App: AppComponent) => any; isSsr: boolean; _inFlightRoute?: string | undefined; _shallow?: boolean | undefined; locales?: string[] | undefined; defaultLocale?: string | undefined; domainLocales?: DomainLocale[] | undefined; isReady: boolean; isLocaleDomain: boolean; isFirstPopStateEvent: boolean; _initialMatchesMiddlewarePromise: Promise; _bfl_s?: import('../../lib/bloom-filter').BloomFilter; _bfl_d?: import('../../lib/bloom-filter').BloomFilter; private state; private _key; static events: MittEmitter; constructor(pathname: string, query: ParsedUrlQuery, as: string, { initialProps, pageLoader, App, wrapApp, Component, err, subscription, isFallback, locale, locales, defaultLocale, domainLocales, isPreview, }: { subscription: Subscription; initialProps: any; pageLoader: any; Component: ComponentType; App: AppComponent; wrapApp: (WrapAppComponent: AppComponent) => any; err?: Error; isFallback: boolean; locale?: string; locales?: string[]; defaultLocale?: string; domainLocales?: DomainLocale[]; isPreview?: boolean; }); onPopState: (e: PopStateEvent) => void; reload(): void; /** * Go back in history */ back(): void; /** * Go forward in history */ forward(): void; /** * Performs a `pushState` with arguments * @param url of the route * @param as masks `url` for the browser * @param options object you can define `shallow` and other options */ push(url: Url, as?: Url, options?: TransitionOptions): Promise; /** * Performs a `replaceState` with arguments * @param url of the route * @param as masks `url` for the browser * @param options object you can define `shallow` and other options */ replace(url: Url, as?: Url, options?: TransitionOptions): Promise; _bfl(as: string, resolvedAs?: string, locale?: string | false, skipNavigate?: boolean): Promise; private change; changeState(method: HistoryMethod, url: string, as: string, options?: TransitionOptions): void; handleRouteInfoError(err: Error & { code?: any; cancelled?: boolean; }, pathname: string, query: ParsedUrlQuery, as: string, routeProps: RouteProperties, loadErrorFail?: boolean): Promise; getRouteInfo({ route: requestedRoute, pathname, query, as, resolvedAs, routeProps, locale, hasMiddleware, isPreview, unstable_skipClientCache, isQueryUpdating, isMiddlewareRewrite, isNotFound, }: { route: string; pathname: string; query: ParsedUrlQuery; as: string; resolvedAs: string; hasMiddleware?: boolean; routeProps: RouteProperties; locale: string | undefined; isPreview: boolean; unstable_skipClientCache?: boolean; isQueryUpdating?: boolean; isMiddlewareRewrite?: boolean; isNotFound?: boolean; }): Promise<{ type: "redirect-external"; destination: string; } | { type: "redirect-internal"; newAs: string; newUrl: string; } | PrivateRouteInfo>; private set; /** * Callback to execute before replacing router state * @param cb callback to be executed */ beforePopState(cb: BeforePopStateCallback): void; onlyAHashChange(as: string): boolean; scrollToHash(as: string): void; urlIsNew(asPath: string): boolean; /** * Prefetch page code, you may wait for the data during page rendering. * This feature only works in production! * @param url the href of prefetched page * @param asPath the as path of the prefetched page */ prefetch(url: string, asPath?: string, options?: PrefetchOptions): Promise; fetchComponent(route: string): Promise; _getData(fn: () => Promise): Promise; _getFlightData(dataHref: string): Promise<{ data: string; }>; getInitialProps(Component: ComponentType, ctx: NextPageContext): Promise>; get route(): string; get pathname(): string; get query(): ParsedUrlQuery; get asPath(): string; get locale(): string | undefined; get isFallback(): boolean; get isPreview(): boolean; } export {};