UNPKG

next

Version:

The React Framework

346 lines (345 loc) • 9.92 kB
import type { NextConfigComplete } from '../../server/config-shared'; import type { __ApiPreviewProps } from '../../server/api-utils'; import type { ExternalObject, RefCell, NapiTurboEngineOptions } from './generated-native'; export type { NapiTurboEngineOptions as TurboEngineOptions }; export interface Binding { isWasm: boolean; turbo: { createProject(options: ProjectOptions, turboEngineOptions?: NapiTurboEngineOptions): Promise<Project>; startTurbopackTraceServer(traceFilePath: string): void; nextBuild?: any; }; mdx: { compile(src: string, options: any): any; compileSync(src: string, options: any): any; }; minify(src: string, options: any): Promise<any>; minifySync(src: string, options: any): any; transform(src: string, options: any): Promise<any>; transformSync(src: string, options: any): any; parse(src: string, options: any): Promise<string>; getTargetTriple(): string | undefined; initCustomTraceSubscriber?(traceOutFilePath?: string): ExternalObject<RefCell>; teardownTraceSubscriber?(guardExternal: ExternalObject<RefCell>): void; css: { lightning: { transform(transformOptions: any): Promise<any>; transformStyleAttr(transformAttrOptions: any): Promise<any>; }; }; } export type StyledString = { type: 'text'; value: string; } | { type: 'code'; value: string; } | { type: 'strong'; value: string; } | { type: 'stack'; value: StyledString[]; } | { type: 'line'; value: StyledString[]; }; export interface Issue { severity: string; stage: string; filePath: string; title: StyledString; description?: StyledString; detail?: StyledString; source?: { source: { ident: string; content?: string; }; range?: { start: { line: number; column: number; }; end: { line: number; column: number; }; }; }; documentationLink: string; subIssues: Issue[]; } export interface Diagnostics { category: string; name: string; payload: unknown; } export type TurbopackResult<T = {}> = T & { issues: Issue[]; diagnostics: Diagnostics[]; }; export interface Middleware { endpoint: Endpoint; } export interface Instrumentation { nodeJs: Endpoint; edge: Endpoint; } export interface RawEntrypoints { routes: Map<string, Route>; middleware?: Middleware; instrumentation?: Instrumentation; pagesDocumentEndpoint: Endpoint; pagesAppEndpoint: Endpoint; pagesErrorEndpoint: Endpoint; } interface BaseUpdate { resource: { headers: unknown; path: string; }; diagnostics: unknown[]; issues: Issue[]; } interface IssuesUpdate extends BaseUpdate { type: 'issues'; } interface EcmascriptMergedUpdate { type: 'EcmascriptMergedUpdate'; chunks: { [moduleName: string]: { type: 'partial'; }; }; entries: { [moduleName: string]: { code: string; map: string; url: string; }; }; } interface PartialUpdate extends BaseUpdate { type: 'partial'; instruction: { type: 'ChunkListUpdate'; merged: EcmascriptMergedUpdate[] | undefined; }; } export type Update = IssuesUpdate | PartialUpdate; export interface HmrIdentifiers { identifiers: string[]; } /** @see https://github.com/vercel/next.js/blob/415cd74b9a220b6f50da64da68c13043e9b02995/packages/next-swc/crates/napi/src/next_api/project.rs#L824-L833 */ export interface TurbopackStackFrame { isServer: boolean; isInternal?: boolean; file: string; originalFile?: string; /** 1-indexed, unlike source map tokens */ line?: number; /** 1-indexed, unlike source map tokens */ column?: number; methodName?: string; } export type UpdateMessage = { updateType: 'start'; } | { updateType: 'end'; value: UpdateInfo; }; export interface UpdateInfo { duration: number; tasks: number; } export interface Project { update(options: Partial<ProjectOptions>): Promise<void>; entrypointsSubscribe(): AsyncIterableIterator<TurbopackResult<RawEntrypoints>>; hmrEvents(identifier: string): AsyncIterableIterator<TurbopackResult<Update>>; hmrIdentifiersSubscribe(): AsyncIterableIterator<TurbopackResult<HmrIdentifiers>>; getSourceForAsset(filePath: string): Promise<string | null>; getSourceMap(filePath: string): Promise<string | null>; getSourceMapSync(filePath: string): string | null; traceSource(stackFrame: TurbopackStackFrame, currentDirectoryFileUrl: string): Promise<TurbopackStackFrame | null>; updateInfoSubscribe(aggregationMs: number): AsyncIterableIterator<TurbopackResult<UpdateMessage>>; shutdown(): Promise<void>; onExit(): Promise<void>; } export type Route = { type: 'conflict'; } | { type: 'app-page'; pages: { originalName: string; htmlEndpoint: Endpoint; rscEndpoint: Endpoint; }[]; } | { type: 'app-route'; originalName: string; endpoint: Endpoint; } | { type: 'page'; htmlEndpoint: Endpoint; dataEndpoint: Endpoint; } | { type: 'page-api'; endpoint: Endpoint; }; export interface Endpoint { /** Write files for the endpoint to disk. */ writeToDisk(): Promise<TurbopackResult<WrittenEndpoint>>; /** * Listen to client-side changes to the endpoint. * After clientChanged() has been awaited it will listen to changes. * The async iterator will yield for each change. */ clientChanged(): Promise<AsyncIterableIterator<TurbopackResult>>; /** * Listen to server-side changes to the endpoint. * After serverChanged() has been awaited it will listen to changes. * The async iterator will yield for each change. */ serverChanged(includeIssues: boolean): Promise<AsyncIterableIterator<TurbopackResult>>; } interface EndpointConfig { dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static'; dynamicParams?: boolean; revalidate?: 'never' | 'force-cache' | number; fetchCache?: 'auto' | 'default-cache' | 'only-cache' | 'force-cache' | 'default-no-store' | 'only-no-store' | 'force-no-store'; runtime?: 'nodejs' | 'edge'; preferredRegion?: string; } export type ServerPath = { path: string; contentHash: string; }; export type WrittenEndpoint = { type: 'nodejs'; /** The entry path for the endpoint. */ entryPath: string; /** All client paths that have been written for the endpoint. */ clientPaths: string[]; /** All server paths that have been written for the endpoint. */ serverPaths: ServerPath[]; config: EndpointConfig; } | { type: 'edge'; /** All client paths that have been written for the endpoint. */ clientPaths: string[]; /** All server paths that have been written for the endpoint. */ serverPaths: ServerPath[]; config: EndpointConfig; } | { type: 'none'; clientPaths: []; serverPaths: []; config: EndpointConfig; }; export interface ProjectOptions { /** * A root path from which all files must be nested under. Trying to access * a file outside this root will fail. Think of this as a chroot. */ rootPath: string; /** * A path inside the root_path which contains the app/pages directories. */ projectPath: string; /** * The path to the .next directory. */ distDir: string; /** * The next.config.js contents. */ nextConfig: NextConfigComplete; /** * Jsconfig, or tsconfig contents. * * Next.js implicitly requires to read it to support few options * https://nextjs.org/docs/architecture/nextjs-compiler#legacy-decorators * https://nextjs.org/docs/architecture/nextjs-compiler#importsource */ jsConfig: { compilerOptions: object; }; /** * A map of environment variables to use when compiling code. */ env: Record<string, string>; defineEnv: DefineEnv; /** * Whether to watch the filesystem for file changes. */ watch: { enable: boolean; pollIntervalMs?: number; }; /** * The mode in which Next.js is running. */ dev: boolean; /** * The server actions encryption key. */ encryptionKey: string; /** * The build id. */ buildId: string; /** * Options for draft mode. */ previewProps: __ApiPreviewProps; /** * The browserslist query to use for targeting browsers. */ browserslistQuery: string; /** * When the code is minified, this opts out of the default mangling of local * names for variables, functions etc., which can be useful for * debugging/profiling purposes. */ noMangling: boolean; } export interface DefineEnv { client: RustifiedEnv; edge: RustifiedEnv; nodejs: RustifiedEnv; } export type RustifiedEnv = { name: string; value: string; }[]; export interface GlobalEntrypoints { app: Endpoint | undefined; document: Endpoint | undefined; error: Endpoint | undefined; middleware: Middleware | undefined; instrumentation: Instrumentation | undefined; } export type PageRoute = { type: 'page'; htmlEndpoint: Endpoint; dataEndpoint: Endpoint; } | { type: 'page-api'; endpoint: Endpoint; }; export type AppRoute = { type: 'app-page'; htmlEndpoint: Endpoint; rscEndpoint: Endpoint; } | { type: 'app-route'; endpoint: Endpoint; }; export type PageEntrypoints = Map<string, PageRoute>; export type AppEntrypoints = Map<string, AppRoute>; export type Entrypoints = { global: GlobalEntrypoints; page: PageEntrypoints; app: AppEntrypoints; };