vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
628 lines (627 loc) • 22.3 kB
TypeScript
export type { Config };
export type { ConfigBuiltIn };
export type { ConfigBuiltInResolved };
export type { ConfigNameBuiltIn };
export type { ConfigNameGlobal };
export type { ConfigMeta };
export type { HookName };
export type { HookNameOld };
export type { HookNamePage };
export type { HookNameGlobal };
export type { Route };
export type { KeepScrollPosition };
export type { DataAsync };
export type { DataSync };
export type { GuardAsync };
export type { GuardSync };
export type { OnBeforePrerenderStartAsync };
export type { OnBeforePrerenderStartSync };
export type { OnBeforeRenderAsync };
export type { OnBeforeRenderSync };
export type { OnBeforeRouteAsync };
export type { OnBeforeRouteSync };
export type { OnHydrationEndAsync };
export type { OnHydrationEndSync };
export type { OnPageTransitionEndAsync };
export type { OnPageTransitionEndSync };
export type { OnPageTransitionStartAsync };
export type { OnPageTransitionStartSync };
export type { OnPrerenderStartAsync };
export type { OnPrerenderStartSync };
export type { OnRenderClientAsync };
export type { OnRenderClientSync };
export type { OnRenderHtmlAsync };
export type { OnRenderHtmlSync };
export type { RouteAsync };
export type { RouteSync };
import type { PrefetchSetting, PrefetchStaticAssets } from '../client/runtime-client-routing/prefetch/PrefetchSetting.js';
import type { ConfigDefinition } from '../node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js';
import type { DocumentHtml } from '../server/runtime/renderPageServer/html/renderHtml.js';
import type { InjectFilterEntry } from './index.js';
import type { VikeVitePluginOptions } from '../node/vite/index.js';
import type { Vike } from './VikeNamespace.js';
import type { HooksTimeoutProvidedByUser } from '../shared-server-client/hooks/getHook.js';
import type { PageContextClient, PageContextServer } from './PageContext.js';
import type { GlobalContext } from './GlobalContext.js';
import type { InlineConfig } from 'vite';
import type { PassToClientPublic } from '../server/runtime/renderPageServer/html/serializeContext.js';
import type { CliPreviewConfig } from '../node/api/preview.js';
import type { StaticReplace } from '../node/vite/plugins/pluginStaticReplace/applyStaticReplace.js';
import type { ImportStringList } from '../node/vite/shared/importString.js';
type HookNameOld = HookName | HookNameOldDesign;
type HookName = HookNamePage | HookNameGlobal;
type HookNamePage = 'onHydrationEnd' | 'onBeforePrerenderStart' | 'onBeforeRender' | 'onPageTransitionStart' | 'onPageTransitionEnd' | 'onRenderHtml' | 'onRenderClient' | 'guard' | 'data' | 'onData' | 'route';
type HookNameGlobal = 'onBeforeRoute' | 'onPrerenderStart' | 'onCreatePageContext' | 'onCreateGlobalContext' | 'onError' | 'onHookCall';
type HookNameOldDesign = 'render' | 'prerender' | 'onBeforePrerender';
type ConfigNameBuiltIn = Exclude<keyof ConfigBuiltIn, keyof VikeVitePluginOptions | 'onBeforeRoute' | 'onPrerenderStart' | 'vite' | 'redirects'> | 'prerender' | 'hasServerOnlyHook' | 'isClientRuntimeLoaded' | 'onBeforeRenderEnv' | 'dataEnv' | 'guardEnv' | 'hooksTimeout' | 'clientHooks' | 'middleware';
type ConfigNameGlobal = 'onPrerenderStart' | 'onBeforeRoute' | 'prerender' | 'disableAutoFullBuild' | 'includeAssetsImportedByServer' | 'baseAssets' | 'baseServer' | 'redirects' | 'trailingSlash' | 'disableUrlNormalization' | 'vite';
type Config = ConfigBuiltIn & Vike.Config;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/data
*/
type DataAsync<Data = unknown> = (pageContext: PageContextServer) => Promise<Data>;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/data
*/
type DataSync<Data = unknown> = (pageContext: PageContextServer) => Data;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/guard
*/
type GuardAsync = (pageContext: PageContextServer) => Promise<void>;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/guard
*/
type GuardSync = (pageContext: PageContextServer) => void;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onBeforePrerenderStart
*/
type OnBeforePrerenderStartAsync<Data = unknown> = () => Promise<(string | {
url: string;
pageContext: Partial<Vike.PageContext & {
data: Data;
}>;
})[]>;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onBeforePrerenderStart
*/
type OnBeforePrerenderStartSync<Data = unknown> = () => (string | {
url: string;
pageContext: Partial<Vike.PageContext & {
data: Data;
}>;
})[];
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onBeforeRender
*/
type OnBeforeRenderAsync = (pageContext: PageContextServer) => Promise<{
pageContext: Partial<Vike.PageContext>;
} | void>;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onBeforeRender
*/
type OnBeforeRenderSync = (pageContext: PageContextServer) => {
pageContext: Partial<Vike.PageContext>;
} | void;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onBeforeRoute
*/
type OnBeforeRouteAsync = (pageContext: PageContextServer) => Promise<{
pageContext: Partial<{
/** The URL you provided to Vike when calling `renderPage({ urlOriginal })` in your server middleware.
*
* https://vike.dev/renderPage
*/
urlOriginal: string;
} | Vike.PageContext>;
}>;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onBeforeRoute
*/
type OnBeforeRouteSync = (pageContext: PageContextServer) => {
pageContext: Partial<{
/** The URL you provided to Vike when calling `renderPage({ urlOriginal })` in your server middleware.
*
* https://vike.dev/renderPage
*/
urlOriginal: string;
} | Vike.PageContext>;
};
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onHydrationEnd
*/
type OnHydrationEndAsync = (pageContext: PageContextClient) => Promise<void>;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onHydrationEnd
*/
type OnHydrationEndSync = (pageContext: PageContextClient) => void;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onPageTransitionEnd
*/
type OnPageTransitionEndAsync = (pageContext: PageContextClient) => Promise<void>;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onPageTransitionEnd
*/
type OnPageTransitionEndSync = (pageContext: PageContextClient) => void;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onPageTransitionStart
*/
type OnPageTransitionStartAsync = (pageContext: PageContextClient) => Promise<void>;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onPageTransitionStart
*/
type OnPageTransitionStartSync = (pageContext: PageContextClient) => void;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onPrerenderStart
*/
type OnPrerenderStartAsync = (prerenderContext: {
pageContexts: PageContextServer[];
}) => Promise<{
prerenderContext: {
pageContexts: PageContextServer[];
};
}>;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onPrerenderStart
*/
type OnPrerenderStartSync = (prerenderContext: {
pageContexts: PageContextServer[];
}) => {
prerenderContext: {
pageContexts: PageContextServer[];
};
};
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onRenderClient
*/
type OnRenderClientAsync = (pageContext: PageContextClient) => Promise<void>;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onRenderClient
*/
type OnRenderClientSync = (pageContext: PageContextClient) => void;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onRenderHtml
*/
type OnRenderHtmlAsync = (pageContext: PageContextServer) => Promise<OnRenderHtmlReturn>;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/onRenderHtml
*/
type OnRenderHtmlSync = (pageContext: PageContextServer) => OnRenderHtmlReturn;
type OnRenderHtmlReturn = DocumentHtml | {
injectFilter?: (assets: InjectFilterEntry[]) => void;
documentHtml?: DocumentHtml;
pageContext?: OnRenderHtmlPageContextReturn | (() => Promise<OnRenderHtmlPageContextReturn> | OnRenderHtmlPageContextReturn);
};
type OnRenderHtmlPageContextReturn = Partial<Vike.PageContext & {
/** See https://vike.dev/streaming */
enableEagerStreaming: boolean;
}>;
/** @deprecated Use a sync route() with an async guard() instead */
type RouteAsync = (pageContext: PageContextServer | PageContextClient) => Promise<{
routeParams?: Record<string, string>;
precedence?: number;
} | boolean>;
/** @deprecated This type is deprecated, see:
* - https://vike.dev/migration/hook-types
* - https://vike.dev/route
*/
type RouteSync = (pageContext: PageContextServer | PageContextClient) => {
routeParams?: Record<string, string>;
precedence?: number;
} | boolean;
/** Whether the page scrolls to the top upon navigation.
*
* https://vike.dev/keepScrollPosition
*/
type KeepScrollPosition = boolean | string | string[] | ((pageContext: PageContextClient) => boolean | string | string[]);
/** The page's route.
*
* https://vike.dev/routing
*/
type Route = string | RouteSync | RouteAsync;
/** Page configuration.
*
* https://vike.dev/config
*/
type ConfigBuiltIn = {
/** The page's root component */
Page?: unknown;
/** The page's URL(s).
*
* https://vike.dev/route
*/
route?: Route | ImportStringList;
/** Protect page(s), e.g. forbid unauthorized access.
*
* https://vike.dev/guard
*/
guard?: GuardAsync | GuardSync | ImportStringList;
/**
* Pre-render page(s).
*
* https://vike.dev/pre-rendering
* https://vike.dev/prerender
*
* @default false
*/
prerender?: PrerenderSetting | (() => PrerenderSetting | Promise<PrerenderSetting>) | ImportStringList;
/**
* Install Vike extensions.
*
* https://vike.dev/extends
*/
extends?: Config | Config[] | ImportStringList;
/** Hook called before the page is rendered.
*
* https://vike.dev/onBeforeRender
*/
onBeforeRender?: OnBeforeRenderAsync | OnBeforeRenderSync | ImportStringList | null;
/** Hook called when a `pageContext` object is created.
*
* https://vike.dev/onCreatePageContext
*/
onCreatePageContext?: ((pageContext: PageContextServer) => void) | ImportStringList | null;
/** Hook called when an error occurs during server-side rendering.
*
* https://vike.dev/onError
*/
onError?: ((error: unknown, pageContext: null | PageContextServer) => void) | ImportStringList | null;
/** Hook called when the `globalContext` object is created.
*
* https://vike.dev/onCreateGlobalContext
*/
onCreateGlobalContext?: ((globalContext: GlobalContext) => void) | ImportStringList | null;
/** Hook called whenever a hook is called.
*
* https://vike.dev/onHookCall
*/
onHookCall?: ((hook: {
name: HookName;
filePath: string;
call: () => void | Promise<void>;
}, pageContext: PageContextClient | PageContextServer | null) => void | Promise<void>) | ImportStringList;
/** Hook for fetching data.
*
* https://vike.dev/data
*/
data?: DataAsync<unknown> | DataSync<unknown> | ImportStringList | null;
/** Hook called as soon as `pageContext.data` is available.
*
* https://vike.dev/onData
*/
onData?: Function;
/** Determines what pageContext properties are sent to the client-side.
*
* https://vike.dev/passToClient
*/
passToClient?: PassToClientPublic | ImportStringList;
/** Hook called when page is rendered on the client-side.
*
* https://vike.dev/onRenderClient
*/
onRenderClient?: OnRenderClientAsync | OnRenderClientSync | ImportStringList;
/** Hook called when page is rendered to HTML on the server-side.
*
* https://vike.dev/onRenderHtml
*/
onRenderHtml?: OnRenderHtmlAsync | OnRenderHtmlSync | ImportStringList;
/** Enable async Route Functions.
*
* https://vike.dev/route-function#async
*/
iKnowThePerformanceRisksOfAsyncRouteFunctions?: boolean | ImportStringList;
/** Change the URL root of Filesystem Routing.
*
* https://vike.dev/filesystemRoutingRoot
*/
filesystemRoutingRoot?: string | ImportStringList;
/** Hook called when pre-rendering starts.
*
* https://vike.dev/onPrerenderStart
*/
onPrerenderStart?: OnPrerenderStartAsync | OnPrerenderStartSync | ImportStringList;
/** Hook called for initializing pre-rendering.
*
* https://vike.dev/onBeforePrerenderStart
*/
onBeforePrerenderStart?: OnBeforePrerenderStartAsync | OnBeforePrerenderStartSync | ImportStringList;
/** Hook called before the URL is routed to a page.
*
* https://vike.dev/onBeforeRoute
*/
onBeforeRoute?: OnBeforeRouteAsync | OnBeforeRouteSync | ImportStringList;
/** Hook called after the page is hydrated.
*
* https://vike.dev/onHydrationEnd
*/
onHydrationEnd?: OnHydrationEndAsync | OnHydrationEndSync | ImportStringList;
/** Hook called before the user navigates to a new page.
*
* https://vike.dev/onPageTransitionStart
*/
onPageTransitionStart?: OnPageTransitionStartAsync | OnPageTransitionStartSync | ImportStringList;
/** Hook called after the user navigates to a new page.
*
* https://vike.dev/onPageTransitionEnd
*/
onPageTransitionEnd?: OnPageTransitionEndAsync | OnPageTransitionEndSync | ImportStringList;
/** Whether the UI framework (React/Vue/Solid/...) allows the page's hydration to be aborted.
*
* https://vike.dev/hydrationCanBeAborted
*/
hydrationCanBeAborted?: boolean | ImportStringList;
/** Add client code.
*
* https://vike.dev/client
*/
client?: string | ImportStringList;
/** Enable Client Routing.
*
* https://vike.dev/clientRouting
*/
clientRouting?: boolean | ImportStringList;
/**
* Whether hooks are loaded on the client-side.
*
* https://vike.dev/clientHooks
*/
clientHooks?: boolean | null | ImportStringList;
/** Create new or modify existing configurations.
*
* https://vike.dev/meta
*/
meta?: ConfigMeta | ImportStringList;
/** Vite configuration.
*
* https://vite.dev/config/
*/
vite?: InlineConfig | (() => InlineConfig | Promise<InlineConfig>);
/** Permanent redirections (HTTP status code 301)
*
* https://vike.dev/redirects
*/
redirects?: Record<string, string>;
/** Whether URLs should end with a trailing slash.
*
* https://vike.dev/url-normalization
*
* @default false
*/
trailingSlash?: boolean;
/** Disable automatic URL normalization.
*
* https://vike.dev/url-normalization
*
* @default false
*/
disableUrlNormalization?: boolean;
/** @deprecated It's now `true` by default. You can remove this option. */
includeAssetsImportedByServer?: boolean;
/** @deprecated See https://vike.dev/disableAutoFullBuild */
disableAutoFullBuild?: boolean | 'prerender';
/** @deprecated It's value is now always true. */
vite6BuilderApp?: true;
/** The Base URL of your server.
*
* https://vike.dev/base-url
*/
baseServer?: string;
/** The Base URL of your static assets.
*
* https://vike.dev/base-url
*/
baseAssets?: string;
/**
* @experimental DON'T USE: the API *will* have breaking changes upon any minor version release.
*
* Prefetch pages/links.
*
* https://vike.dev/prefetch
*/
prefetch?: PrefetchSetting | ImportStringList;
/** @deprecated Use `prefetch` setting (https://vike.dev/prefetch) instead. */
/** Prefetch links.
*
* https://vike.dev/prefetchStaticAssets
*/
prefetchStaticAssets?: PrefetchStaticAssets | ImportStringList;
/** Modify the timeouts of hooks. */
hooksTimeout?: HooksTimeoutProvidedByUser;
/** `Cache-Control` HTTP header value.
*
* Default: `no-store, max-age=0`
*
* Set to an empty string to not send the header.
*
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
*/
cacheControl?: string;
/**
* Add HTTP headers to the HTTP response.
*
* https://vike.dev/headers#response
*/
headersResponse?: HeadersInit | ((pageContext: PageContextServer) => HeadersInit | Promise<HeadersInit>);
/**
* Make development/preview server available over LAN and public addresses.
*
* Default: `false` (or `true` if running inside Docker/Podman).
*
* https://vike.dev/host
*/
host?: boolean | string;
/**
* Change port of development/preview server.
*
* @default 3000
*
* https://vike.dev/port
*/
port?: number;
/**
* Set the mode to run in.
*
* https://vike.dev/mode
*/
mode?: string;
/**
* Disable Vite's cache.
*
* https://vike.dev/force
*/
force?: boolean;
/**
* Content Security Policy (CSP).
*
* https://vike.dev/csp
*/
csp?: {
nonce: boolean | ((pageContext: PageContextServer) => string | Promise<string>);
};
/** Where scripts are injected in the HTML.
*
* https://vike.dev/injectScriptsAt
*/
injectScriptsAt?: 'HTML_BEGIN' | 'HTML_END' | 'HTML_STREAM' | null;
/** Used by Vike extensions to set their name.
*
* https://vike.dev/extends
*/
name?: string;
/** Used by Vike extensions to enforce their peer dependencies.
*
* https://vike.dev/require
*/
require?: Record<string, string | {
version: string;
optional?: boolean;
}>;
/** Whether the page scrolls to the top upon navigation.
*
* https://vike.dev/keepScrollPosition
*/
keepScrollPosition?: KeepScrollPosition;
/** @experimental */
middleware?: Function;
cli?: {
/** @experimental
*
* Preview configuration.
*
* Set it to `false` if previewing isn't supported.
*
* Set it to `true` if previewing should load the `dist/server/index.js` entry.
*
* Set it to `vite` if previewing should use Vite's preview server.
*/
preview?: CliPreviewConfig;
};
/**
* Static code transformations for optimizations like removing component children server-side.
*
* @experimental
*/
staticReplace?: StaticReplace[];
};
type PrerenderSetting = boolean | {
/**
* Allow only some pages to be pre-rendered.
*
* This setting doesn't affect the pre-rendering process: it merely suppresses the warnings when some of your pages cannot be pre-rendered.
*
* https://vike.dev/prerender#partial
*
* @default false
*/
partial?: boolean;
/**
* Whether +redirects should be pre-rendered to redirecting HTML documents.
*
* https://vike.dev/prerender#redirects
*/
redirects?: boolean;
/**
* Don't create a new directory for each HTML file.
*
* For example, generate `dist/client/about.html` instead of `dist/client/about/index.html`.
*
* https://vike.dev/prerender#noextradir
*
* @default false
*/
noExtraDir?: boolean;
/**
* Number of concurrent pre-render jobs.
*
* Set to `false` to disable concurrency.
*
* https://vike.dev/prerender#parallel
*
* @default os.cpus().length
*/
parallel?: boolean | number;
/**
* Don't automatically run the pre-rendering process upon `$ vike build`.
*
* Use this if you want to programmatically initiate the pre-rendering process instead.
*
* https://vike.dev/prerender#disableautorun
*
* @default false
*/
disableAutoRun?: boolean;
/**
* Change settings without enabling pre-rendering.
*
* By setting `enable: null` you can define pre-render settings without enabling pre-rendering.
*
* Used by Vike extensions to set pre-render settings without enabling pre-rerendering on behalf of the user.
*
* https://vike.dev/prerender#enable
*
* @default true
*/
enable?: boolean | null;
/**
* Don't remove the `dist/server/` directory.
*
* If you pre-render all your pages then Vike removes the `dist/server/` directory after pre-rendering has finished.
*
* If `keepDistServer: true` then Vike won't remove the `dist/server/` directory.
*
* https://vike.dev/prerender#keepDistServer
*
* @default false
*/
keepDistServer?: boolean;
};
type ConfigBuiltInResolved = {
passToClient?: string[][];
redirects?: Record<string, string>[];
prerender?: Exclude<Config['prerender'], ImportStringList | undefined>[];
middleware?: Function[];
headersResponse?: Exclude<Config['headersResponse'], ImportStringList | undefined>[];
staticReplace?: StaticReplace[][];
};
type ConfigMeta = Record<string, ConfigDefinition>;