UNPKG

nitropack

Version:

Build and Deploy Universal JavaScript Servers

259 lines (249 loc) 12.9 kB
import { App, Router, H3Event, RouterMethod } from 'h3'; import { FetchRequest, FetchOptions, FetchResponse } from 'ofetch'; import { a as NitroOptions, b as NitroConfig, N as NitroModule } from '../shared/nitro.DLF2_KRt.mjs'; export { A as AppConfig, C as CacheEntry, c as CacheOptions, d as CachedEventHandlerOptions, e as CompressOptions, g as DatabaseConnectionConfig, h as DatabaseConnectionConfigs, D as DatabaseConnectionName, l as DevServerOptions, I as EsbuildOptions, O as HTTPStatusCode, L as LoadConfigOptions, u as Nitro, y as NitroBuildInfo, q as NitroDevEventHandler, n as NitroDevServer, v as NitroDynamicConfig, r as NitroErrorHandler, p as NitroEventHandler, x as NitroFrameworkInfo, s as NitroHooks, t as NitroModuleInput, k as NitroOpenAPIConfig, E as NitroPreset, F as NitroPresetMeta, Q as NitroRouteConfig, o as NitroRouteMeta, T as NitroRouteRules, j as NitroRuntimeConfig, i as NitroRuntimeConfigApp, w as NitroTypes, m as NitroWorker, J as NodeExternalsOptions, B as PrerenderGenerateRoute, z as PrerenderRoute, P as PublicAssetDir, M as RawOptions, R as ResponseCacheEntry, G as RollupConfig, H as RollupVirtualOptions, S as ServerAssetDir, K as ServerAssetOptions, f as StorageMounts, V as VirtualModule } from '../shared/nitro.DLF2_KRt.mjs'; import { Hookable } from 'hookable'; import { NitroRuntimeHooks as NitroRuntimeHooks$1 } from 'nitropack'; import { AbstractRequest, AbstractResponse } from 'node-mock-http'; import { CaptureError as CaptureError$1, CapturedErrorContext as CapturedErrorContext$1, CacheOptions } from 'nitropack/types'; import 'consola'; import 'nitropack/presets'; import 'unimport'; import 'unstorage'; import '@rollup/plugin-commonjs'; import 'c12'; import 'chokidar'; import 'compatx'; import 'db0'; import 'httpxy'; import 'pkg-types'; import 'rollup-plugin-visualizer'; import 'unenv'; import 'unimport/unplugin'; import 'unwasm/plugin'; import 'node:http'; import 'node:stream'; import 'node:worker_threads'; import 'listhen'; import 'unplugin-utils'; import '@vercel/nft'; import 'esbuild'; import 'rollup'; import '@scalar/api-reference'; import 'std-env'; interface PublicAsset { type: string; etag: string; mtime: string; path: string; size: number; encoding?: string; data?: string; } interface AssetMeta { type?: string; etag?: string; mtime?: string; } interface NitroApp { h3App: App; router: Router; hooks: Hookable<NitroRuntimeHooks>; localCall: (aRequest: AbstractRequest) => Promise<AbstractResponse>; localFetch: (req: string | URL | Request, init?: RequestInit & AbstractRequest) => Promise<Response>; captureError: CaptureError; } interface NitroAppPlugin { (nitro: NitroApp): void; } interface NitroAsyncContext { event: H3Event; } interface RenderResponse { body: any; statusCode: number; statusMessage: string; headers: Record<string, string>; } type RenderHandler = (event: H3Event) => Partial<RenderResponse> | Promise<Partial<RenderResponse>>; interface RenderContext { event: H3Event; render: RenderHandler; response?: Partial<RenderResponse>; } interface CapturedErrorContext { event?: H3Event; [key: string]: unknown; } type CaptureError = (error: Error, context: CapturedErrorContext) => void; interface NitroRuntimeHooks extends NitroRuntimeHooks$1 { } type MaybePromise<T> = T | Promise<T>; /** @experimental */ interface TaskContext { } /** @experimental */ interface TaskPayload { [key: string]: unknown; } /** @experimental */ interface TaskMeta { name?: string; description?: string; } /** @experimental */ interface TaskEvent { name: string; payload: TaskPayload; context: TaskContext; } /** @experimental */ interface TaskResult<RT = unknown> { result?: RT; } /** @experimental */ interface Task<RT = unknown> { meta?: TaskMeta; run(event: TaskEvent): MaybePromise<{ result?: RT; }>; } /** @experimental */ interface TaskRunnerOptions { cwd?: string; buildDir?: string; } interface InternalApi { } type NitroFetchRequest = Exclude<keyof InternalApi, `/_${string}` | `/api/_${string}`> | Exclude<FetchRequest, string> | (string & {}); type MiddlewareOf<Route extends string, Method extends RouterMethod | "default"> = Method extends keyof InternalApi[MatchedRoutes<Route>] ? InternalApi[MatchedRoutes<Route>][Method] : never; type TypedInternalResponse<Route, Default = unknown, Method extends RouterMethod = RouterMethod> = Default extends string | boolean | number | null | void | object ? Default : Route extends string ? MiddlewareOf<Route, Method> extends never ? MiddlewareOf<Route, "default"> extends never ? Default : MiddlewareOf<Route, "default"> : MiddlewareOf<Route, Method> : Default; type AvailableRouterMethod<R extends NitroFetchRequest> = R extends string ? keyof InternalApi[MatchedRoutes<R>] extends undefined ? RouterMethod : Extract<keyof InternalApi[MatchedRoutes<R>], "default"> extends undefined ? Extract<RouterMethod, keyof InternalApi[MatchedRoutes<R>]> : RouterMethod : RouterMethod; interface NitroFetchOptions<R extends NitroFetchRequest, M extends AvailableRouterMethod<R> = AvailableRouterMethod<R>> extends FetchOptions { method?: Uppercase<M> | M; } type ExtractedRouteMethod<R extends NitroFetchRequest, O extends NitroFetchOptions<R>> = O extends undefined ? "get" : Lowercase<Exclude<O["method"], undefined>> extends RouterMethod ? Lowercase<Exclude<O["method"], undefined>> : "get"; type Base$Fetch<DefaultT = unknown, DefaultR extends NitroFetchRequest = NitroFetchRequest> = <T = DefaultT, R extends NitroFetchRequest = DefaultR, O extends NitroFetchOptions<R> = NitroFetchOptions<R>>(request: R, opts?: O) => Promise<TypedInternalResponse<R, T, NitroFetchOptions<R> extends O ? "get" : ExtractedRouteMethod<R, O>>>; interface $Fetch<DefaultT = unknown, DefaultR extends NitroFetchRequest = NitroFetchRequest> extends Base$Fetch<DefaultT, DefaultR> { raw<T = DefaultT, R extends NitroFetchRequest = DefaultR, O extends NitroFetchOptions<R> = NitroFetchOptions<R>>(request: R, opts?: O): Promise<FetchResponse<TypedInternalResponse<R, T, NitroFetchOptions<R> extends O ? "get" : ExtractedRouteMethod<R, O>>>>; create<T = DefaultT, R extends NitroFetchRequest = DefaultR>(defaults: FetchOptions): $Fetch<T, R>; } declare global { var $fetch: $Fetch; namespace NodeJS { interface Global { $fetch: $Fetch; } } } type MatchResult<Key extends string, Exact extends boolean = false, Score extends any[] = [], catchAll extends boolean = false> = { [k in Key]: { key: k; exact: Exact; score: Score; catchAll: catchAll; }; }[Key]; type Subtract<Minuend extends any[] = [], Subtrahend extends any[] = []> = Minuend extends [...Subtrahend, ...infer Remainder] ? Remainder : never; type TupleIfDiff<First extends string, Second extends string, Tuple extends any[] = []> = First extends `${Second}${infer Diff}` ? Diff extends "" ? [] : Tuple : []; type MaxTuple<N extends any[] = [], T extends any[] = []> = { current: T; result: MaxTuple<N, ["", ...T]>; }[[N["length"]] extends [Partial<T>["length"]] ? "current" : "result"]; type CalcMatchScore<Key extends string, Route extends string, Score extends any[] = [], Init extends boolean = false, FirstKeySegMatcher extends string = Init extends true ? ":Invalid:" : ""> = `${Key}/` extends `${infer KeySeg}/${infer KeyRest}` ? KeySeg extends FirstKeySegMatcher ? Subtract<[ ...Score, ...TupleIfDiff<Route, Key, ["", ""]> ], TupleIfDiff<Key, Route, ["", ""]>> : `${Route}/` extends `${infer RouteSeg}/${infer RouteRest}` ? `${RouteSeg}?` extends `${infer RouteSegWithoutQuery}?${string}` ? RouteSegWithoutQuery extends KeySeg ? CalcMatchScore<KeyRest, RouteRest, [...Score, "", ""]> : KeySeg extends `:${string}` ? RouteSegWithoutQuery extends "" ? never : CalcMatchScore<KeyRest, RouteRest, [...Score, ""]> : KeySeg extends RouteSegWithoutQuery ? CalcMatchScore<KeyRest, RouteRest, [...Score, ""]> : never : never : never : never; type _MatchedRoutes<Route extends string, MatchedResultUnion extends MatchResult<string> = MatchResult<keyof InternalApi>> = MatchedResultUnion["key"] extends infer MatchedKeys ? MatchedKeys extends string ? Route extends MatchedKeys ? MatchResult<MatchedKeys, true> : MatchedKeys extends `${infer Root}/**${string}` ? MatchedKeys extends `${string}/**` ? Route extends `${Root}/${string}` ? MatchResult<MatchedKeys, false, [], true> : never : MatchResult<MatchedKeys, false, CalcMatchScore<Root, Route, [], true>> : MatchResult<MatchedKeys, false, CalcMatchScore<MatchedKeys, Route, [], true>> : never : never; type MatchedRoutes<Route extends string, MatchedKeysResult extends MatchResult<string> = MatchResult<keyof InternalApi>, Matches extends MatchResult<string> = _MatchedRoutes<Route, MatchedKeysResult>> = Route extends "/" ? keyof InternalApi : Extract<Matches, { exact: true; }> extends never ? Extract<Exclude<Matches, { score: never; }>, { score: MaxTuple<Matches["score"]>; }>["key"] | Extract<Matches, { catchAll: true; }>["key"] : Extract<Matches, { exact: true; }>["key"]; /** * @link https://github.com/remix-run/remix/blob/2248669ed59fd716e267ea41df5d665d4781f4a9/packages/remix-server-runtime/serialize.ts */ type JsonPrimitive = string | number | boolean | string | number | boolean | null; type NonJsonPrimitive = undefined | Function | symbol; type IsAny<T> = 0 extends 1 & T ? true : false; type FilterKeys<TObj extends object, TFilter> = { [TKey in keyof TObj]: TObj[TKey] extends TFilter ? TKey : never; }[keyof TObj]; type Serialize<T> = IsAny<T> extends true ? any : T extends JsonPrimitive | undefined ? T : T extends Map<any, any> | Set<any> ? Record<string, never> : T extends NonJsonPrimitive ? never : T extends { toJSON(): infer U; } ? U : T extends [] ? [] : T extends [unknown, ...unknown[]] ? SerializeTuple<T> : T extends ReadonlyArray<infer U> ? (U extends NonJsonPrimitive ? null : Serialize<U>)[] : T extends object ? SerializeObject<T> : never; /** JSON serialize [tuples](https://www.typescriptlang.org/docs/handbook/2/objects.html#tuple-types) */ type SerializeTuple<T extends [unknown, ...unknown[]]> = { [k in keyof T]: T[k] extends NonJsonPrimitive ? null : Serialize<T[k]>; }; /** JSON serialize objects (not including arrays) and classes */ type SerializeObject<T extends object> = { [k in keyof Omit<T, FilterKeys<T, NonJsonPrimitive>>]: Serialize<T[k]>; }; /** * @see https://github.com/ianstormtaylor/superstruct/blob/7973400cd04d8ad92bbdc2b6f35acbfb3c934079/src/utils.ts#L323-L325 */ type Simplify<TType> = TType extends any[] | Date ? TType : { [K in keyof TType]: Simplify<TType[K]>; }; interface NitroStaticBuildFlags { _asyncContext?: boolean; _websocket?: boolean; _tasks?: boolean; dev?: boolean; client?: boolean; nitro?: boolean; baseURL?: string; prerender?: boolean; preset?: NitroOptions["preset"]; server?: boolean; versions?: { nitro?: string; }; } declare global { namespace NodeJS { interface Process extends NitroStaticBuildFlags { } } interface ImportMeta extends NitroStaticBuildFlags { } } declare global { const defineNitroConfig: (config: NitroConfig) => NitroConfig; const defineNitroModule: (definition: NitroModule) => NitroModule; } type H3EventFetch = (request: NitroFetchRequest, init?: RequestInit) => Promise<Response>; type H3Event$Fetch = Base$Fetch<unknown, NitroFetchRequest>; declare module "h3" { interface H3Event { /** @experimental Calls fetch with same context and request headers */ fetch: H3EventFetch; /** @experimental Calls fetch with same context and request headers */ $fetch: H3Event$Fetch; waitUntil: (promise: Promise<unknown>) => void; /** @experimental */ captureError: CaptureError$1; } interface H3Context { nitro: { _waitUntilPromises?: Promise<unknown>[]; /** @experimental */ errors: { error?: Error; context: CapturedErrorContext$1; }[]; }; cache: { options: CacheOptions; }; } } export { NitroConfig, NitroModule, NitroOptions }; export type { $Fetch, AssetMeta, AvailableRouterMethod, Base$Fetch, CaptureError, CapturedErrorContext, ExtractedRouteMethod, H3Event$Fetch, H3EventFetch, InternalApi, MatchedRoutes, MiddlewareOf, NitroApp, NitroAppPlugin, NitroAsyncContext, NitroFetchOptions, NitroFetchRequest, NitroRuntimeHooks, NitroStaticBuildFlags, PublicAsset, RenderContext, RenderHandler, RenderResponse, Serialize, SerializeObject, SerializeTuple, Simplify, Task, TaskContext, TaskEvent, TaskMeta, TaskPayload, TaskResult, TaskRunnerOptions, TypedInternalResponse };