UNPKG

@builder.io/qwik

Version:

An Open-Source sub-framework designed with a focus on server-side-rendering, lazy-loading, and styling/animation.

341 lines (304 loc) 10 kB
/// <reference path="./server-modules.d.ts" /> import type { QwikManifest } from './optimizer'; import type { ResolvedManifest } from './optimizer'; import type { SnapshotResult } from '.'; import type { StreamWriter } from '.'; import type { SymbolMapperFn } from './optimizer'; /** * Provides the `qwikloader.js` file as a string. Useful for tooling to inline the qwikloader script * into HTML. * * @public */ export declare function getQwikLoaderScript(opts?: { debug?: boolean; }): string; /** * Provides the `qwik-prefetch-service-worker.js` file as a string. Useful for tooling to inline the * qwik-prefetch-service-worker script into HTML. * * @public */ export declare function getQwikPrefetchWorkerScript(opts?: { debug?: boolean; }): string; /** @public */ declare interface GlobalInjections { tag: string; attributes?: { [key: string]: string; }; location: 'head' | 'body'; } /** @public */ export declare interface InOrderAuto { strategy: 'auto'; maximunInitialChunk?: number; maximunChunk?: number; } /** @public */ declare interface InOrderDirect { strategy: 'direct'; } /** @public */ export declare interface InOrderDisabled { strategy: 'disabled'; } /** @public */ export declare type InOrderStreaming = InOrderAuto | InOrderDisabled | InOrderDirect; /** @public */ export declare interface PrefetchImplementation { /** * `js-append`: Use JS runtime to create each `<link>` and append to the body. * * `html-append`: Render each `<link>` within html, appended at the end of the body. */ linkInsert?: 'js-append' | 'html-append' | null; /** * Value of the `<link rel="...">` attribute when link is used. Defaults to `prefetch` if links * are inserted. */ linkRel?: 'prefetch' | 'preload' | 'modulepreload' | null; /** * Value of the `<link fetchpriority="...">` attribute when link is used. Defaults to `null` if * links are inserted. */ linkFetchPriority?: 'auto' | 'low' | 'high' | null; /** * `always`: Always include the worker fetch JS runtime. * * `no-link-support`: Only include the worker fetch JS runtime when the browser doesn't support * `<link>` prefetch/preload/modulepreload. */ workerFetchInsert?: 'always' | 'no-link-support' | null; /** * Dispatch a `qprefetch` event with detail data containing the bundles that should be prefetched. * The event dispatch script will be inlined into the document's HTML so any listeners of this * event should already be ready to handle the event. * * This implementation will inject a script similar to: * * ``` * <script type="module"> * document.dispatchEvent(new CustomEvent("qprefetch", { detail:{ "bundles": [...] } })) * </script> * ``` * * By default, the `prefetchEvent` implementation will be set to `always`. */ prefetchEvent?: 'always' | null; } /** @public */ export declare interface PrefetchResource { url: string; imports: PrefetchResource[]; } /** @public */ export declare interface PrefetchStrategy { implementation?: PrefetchImplementation; symbolsToPrefetch?: SymbolsToPrefetch; } /** @public */ declare interface QwikBundle { size: number; /** Not precise, but an indication of whether this import may be a task */ isTask?: boolean; symbols?: string[]; imports?: string[]; dynamicImports?: string[]; origins?: string[]; } /** @public */ export declare interface QwikLoaderOptions { include?: 'always' | 'never' | 'auto'; position?: 'top' | 'bottom'; } /** * The metadata of the build. One of its uses is storing where QRL symbols are located. * * @public */ declare interface QwikManifest_2 { /** Content hash of the manifest, if this changes, the code changed */ manifestHash: string; /** QRL symbols */ symbols: { [symbolName: string]: QwikSymbol; }; /** Where QRLs are located */ mapping: { [symbolName: string]: string; }; /** All code bundles, used to know the import graph */ bundles: { [fileName: string]: QwikBundle; }; /** CSS etc to inject in the document head */ injections?: GlobalInjections[]; version: string; options?: { target?: string; buildMode?: string; entryStrategy?: { [key: string]: any; }; }; platform?: { [name: string]: string; }; } /** * Options which determine how the Qwik Prefetch Service Worker is added to the document. * * Qwik Prefetch Service Worker is used to prefetch resources so that the QwikLoader will always * have a cache hit. This will ensure that there will not be any delays for the end user while * interacting with the application. * * @public */ declare interface QwikPrefetchServiceWorkerOptions { /** * Should the Qwik Prefetch Service Worker be added to the container. Defaults to `false` until * the QwikCity Service Worker is deprecated. */ include?: boolean; /** * Where should the Qwik Prefetch Service Worker be added to the container. Defaults to `top` to * get prefetching going as fast as possible. */ position?: 'top' | 'bottom'; } /** @public */ declare interface QwikSymbol { origin: string; displayName: string; hash: string; canonicalFilename: string; ctxKind: 'function' | 'event'; ctxName: string; captures: boolean; parent: string | null; loc: [number, number]; } /** @public */ export declare type Render = RenderToString | RenderToStream; /** @public */ export declare interface RenderOptions extends SerializeDocumentOptions { /** Defaults to `true` */ snapshot?: boolean; /** * Specifies the root of the JS files of the client build. Setting a base, will cause the render * of the `q:base` attribute in the `q:container` element. */ base?: string | ((options: RenderOptions) => string); /** Language to use when rendering the document. */ locale?: string | ((options: RenderOptions) => string); /** * Specifies if the Qwik Loader script is added to the document or not. * * Defaults to `{ include: true }`. */ qwikLoader?: QwikLoaderOptions; /** * Specifies if the Qwik Prefetch Service Worker script is added to the document or not. * * Defaults to `{ include: false }`. NOTE: This may be change in the future. */ qwikPrefetchServiceWorker?: QwikPrefetchServiceWorkerOptions; prefetchStrategy?: PrefetchStrategy | null; /** * When set, the app is serialized into a fragment. And the returned html is not a complete * document. Defaults to `html` */ containerTagName?: string; containerAttributes?: Record<string, string>; serverData?: Record<string, any>; } /** @public */ export declare interface RenderResult { prefetchResources: PrefetchResource[]; snapshotResult: SnapshotResult | undefined; isStatic: boolean; manifest?: QwikManifest; /** @internal TODO: Move to snapshotResult */ _symbols?: string[]; } /** @public */ export declare type RenderToStream = (opts: RenderToStreamOptions) => Promise<RenderToStreamResult>; /** * Creates a server-side `document`, renders to root node to the document, then serializes the * document to a string. * * @public */ export declare function renderToStream(rootNode: any, opts: RenderToStreamOptions): Promise<RenderToStreamResult>; /** @public */ export declare interface RenderToStreamOptions extends RenderOptions { stream: StreamWriter; streaming?: StreamingOptions; } /** @public */ export declare interface RenderToStreamResult extends RenderResult { flushes: number; size: number; timing: { firstFlush: number; render: number; snapshot: number; }; } /** @public */ export declare type RenderToString = (opts: RenderToStringOptions) => Promise<RenderToStringResult>; /** * Creates a server-side `document`, renders to root node to the document, then serializes the * document to a string. * * @public */ export declare function renderToString(rootNode: any, opts?: RenderToStringOptions): Promise<RenderToStringResult>; /** @public */ export declare interface RenderToStringOptions extends RenderOptions { } /** @public */ export declare interface RenderToStringResult extends RenderResult { html: string; timing: { render: number; snapshot: number; }; } /** @public */ declare interface ResolvedManifest_2 { mapper: SymbolMapper; manifest: QwikManifest_2; } /** @public */ export declare function resolveManifest(manifest: QwikManifest | ResolvedManifest_2 | undefined): ResolvedManifest_2 | undefined; /** @public */ export declare interface SerializeDocumentOptions { manifest?: QwikManifest | ResolvedManifest; symbolMapper?: SymbolMapperFn; debug?: boolean; } /** @public */ export declare function setServerPlatform(manifest: QwikManifest | ResolvedManifest | undefined): Promise<void>; /** @public */ export declare interface StreamingOptions { inOrder?: InOrderStreaming; } /** @public */ declare type SymbolMapper = Record<string, readonly [symbol: string, chunk: string]>; /** * Auto: Prefetch all possible QRLs used by the document. Default * * @public */ export declare type SymbolsToPrefetch = 'auto' | ((opts: { manifest: QwikManifest; }) => PrefetchResource[]); /** @public */ export declare const versions: { readonly qwik: string; readonly qwikDom: string; }; export { }