type HMRPayload = | ConnectedPayload | UpdatePayload | FullReloadPayload | CustomPayload | ErrorPayload | PrunePayload interface ConnectedPayload { type: 'connected' } interface UpdatePayload { type: 'update' updates: Update[] } interface Update { type: 'js-update' | 'css-update' path: string acceptedPath: string timestamp: number /** * @experimental internal */ explicitImportRequired?: boolean | undefined } interface PrunePayload { type: 'prune' paths: string[] } interface FullReloadPayload { type: 'full-reload' path?: string } interface CustomPayload { type: 'custom' event: string data?: any } interface ErrorPayload { type: 'error' err: { [name: string]: any message: string stack: string id?: string frame?: string plugin?: string pluginCode?: string loc?: { file?: string line: number column: number } } } interface CustomEventMap { 'wite:beforeUpdate': UpdatePayload 'wite:afterUpdate': UpdatePayload 'wite:beforePrune': PrunePayload 'wite:beforeFullReload': FullReloadPayload 'wite:error': ErrorPayload 'wite:invalidate': InvalidatePayload 'wite:ws:connect': WebSocketConnectionPayload 'wite:ws:disconnect': WebSocketConnectionPayload } interface WebSocketConnectionPayload { /** * @experimental * We expose this instance experimentally to see potential usage. * This might be removed in the future if we didn't find reasonable use cases. * If you find this useful, please open an issue with details so we can discuss and make it stable API. */ webSocket: WebSocket } interface InvalidatePayload { path: string message: string | undefined } type InferCustomEventPayload = T extends keyof CustomEventMap ? CustomEventMap[T] : any type ModuleNamespace = Record & { [Symbol.toStringTag]: 'Module' } interface WiteHotContext { readonly data: any accept(): void accept(cb: (mod: ModuleNamespace | undefined) => void): void accept(dep: string, cb: (mod: ModuleNamespace | undefined) => void): void accept( deps: readonly string[], cb: (mods: Array) => void, ): void acceptExports( exportNames: string | readonly string[], cb?: (mod: ModuleNamespace | undefined) => void, ): void dispose(cb: (data: any) => void): void prune(cb: (data: any) => void): void invalidate(message?: string): void on( event: T, cb: (payload: InferCustomEventPayload) => void, ): void send(event: T, data?: InferCustomEventPayload): void } declare const DEFAULT_REQUEST_STUBS: { '/@wite/client': { injectQuery: (id: string) => string; createHotContext(): { accept: () => void; prune: () => void; dispose: () => void; decline: () => void; invalidate: () => void; on: () => void; }; updateStyle(id: string, css: string): void; }; '@wite/client': { injectQuery: (id: string) => string; createHotContext(): { accept: () => void; prune: () => void; dispose: () => void; decline: () => void; invalidate: () => void; on: () => void; }; updateStyle(id: string, css: string): void; }; }; declare class ModuleCacheMap extends Map { normalizePath(fsPath: string): string; /** * Assign partial data to the map */ update(fsPath: string, mod: Partial): this; setByModuleId(modulePath: string, mod: ModuleCache): this; set(fsPath: string, mod: ModuleCache): this; getByModuleId(modulePath: string): ModuleCache; get(fsPath: string): ModuleCache; deleteByModuleId(modulePath: string): boolean; delete(fsPath: string): boolean; /** * Invalidate modules that dependent on the given modules, up to the main entry */ invalidateDepTree(ids: string[] | Set, invalidated?: Set): Set; /** * Invalidate dependency modules of the given modules, down to the bottom-level dependencies */ invalidateSubDepTree(ids: string[] | Set, invalidated?: Set): Set; /** * Return parsed source map based on inlined source map of the module */ getSourceMap(id: string): RawSourceMap | null; } declare class WiteNodeRunner { options: WiteNodeRunnerOptions; root: string; debug: boolean; /** * Holds the cache of modules * Keys of the map are filepaths, or plain package names */ moduleCache: ModuleCacheMap; constructor(options: WiteNodeRunnerOptions); executeFile(file: string): Promise; executeId(rawId: string): Promise; getSourceMap(id: string): RawSourceMap | null; /** @internal */ cachedRequest(id: string, fsPath: string, callstack: string[]): Promise; shouldResolveId(id: string, _importee?: string): boolean; private _resolveUrl; resolveUrl(id: string, importee?: string): Promise<[url: string, fsPath: string]>; /** @internal */ dependencyRequest(id: string, fsPath: string, callstack: string[]): Promise; /** @internal */ directRequest(id: string, fsPath: string, _callstack: string[]): Promise; prepareContext(context: Record): Record; /** * Define if a module should be interop-ed * This function mostly for the ability to override by subclass */ shouldInterop(path: string, mod: any): boolean; /** * Import a module and interop it */ interopedImport(path: string): Promise; } type Nullable = T | null | undefined; type Arrayable = T | Array; interface DepsHandlingOptions { external?: (string | RegExp)[]; inline?: (string | RegExp)[] | true; /** * Try to guess the CJS version of a package when it's invalid ESM * @default false */ fallbackCJS?: boolean; } interface StartOfSourceMap { file?: string; sourceRoot?: string; } interface RawSourceMap extends StartOfSourceMap { version: string; sources: string[]; names: string[]; sourcesContent?: string[]; mappings: string; } interface FetchResult { code?: string; externalize?: string; map?: RawSourceMap; } type HotContext = Omit; type FetchFunction = (id: string) => Promise; type ResolveIdFunction = (id: string, importer?: string) => Promise; type CreateHotContextFunction = (runner: WiteNodeRunner, url: string) => HotContext; interface ModuleCache { promise?: Promise; exports?: any; evaluated?: boolean; resolving?: boolean; code?: string; map?: RawSourceMap; /** * Module ids that imports this module */ importers?: Set; } interface WiteNodeRunnerOptions { root: string; fetchModule: FetchFunction; resolveId?: ResolveIdFunction; createHotContext?: CreateHotContextFunction; base?: string; moduleCache?: ModuleCacheMap; interopDefault?: boolean; requestStubs?: Record; debug?: boolean; } interface WiteNodeResolveId { external?: boolean | 'absolute' | 'relative'; id: string; meta?: Record | null; moduleSideEffects?: boolean | 'no-treeshake' | null; syntheticNamedExports?: boolean | string | null; } interface WiteNodeServerOptions { /** * Inject inline sourcemap to modules * @default 'inline' */ sourcemap?: 'inline' | boolean; /** * Deps handling */ deps?: DepsHandlingOptions; /** * Transform method for modules */ transformMode?: { ssr?: RegExp[]; web?: RegExp[]; }; debug?: DebuggerOptions; } interface DebuggerOptions { /** * Dump the transformed module to filesystem * Passing a string will dump to the specified path */ dumpModules?: boolean | string; /** * Read dumpped module from filesystem whenever exists. * Useful for debugging by modifying the dump result from the filesystem. */ loadDumppedModules?: boolean; } export { Arrayable as A, CreateHotContextFunction as C, DepsHandlingOptions as D, FetchResult as F, HotContext as H, ModuleCacheMap as M, Nullable as N, RawSourceMap as R, StartOfSourceMap as S, WiteNodeRunnerOptions as W, FetchFunction as a, ResolveIdFunction as b, ModuleCache as c, WiteNodeResolveId as d, WiteNodeServerOptions as e, DebuggerOptions as f, CustomEventMap as g, WiteNodeRunner as h, HMRPayload as i, DEFAULT_REQUEST_STUBS as j };