one
Version:
One is a new React Framework that makes Vite serve both native and web.
47 lines • 2.01 kB
TypeScript
import type { OneRouter } from './interfaces/router';
type MaybePromise<T> = T | Promise<T>;
/**
* Minimal shape of the Cloudflare Workers `ExecutionContext`.
* Use `context.worker?.executionCtx?.waitUntil(promise)` from an API handler
* to keep the worker alive for fire-and-forget background work after the
* response has been sent.
*/
export type WorkerExecutionContext = {
waitUntil: (promise: Promise<unknown>) => void;
passThroughOnException: () => void;
};
/** Cloudflare Workers `env` bindings. Shape is app-specific; `unknown` by default. */
export type WorkerEnv = Record<string, unknown>;
/**
* Worker-runtime context surfaced on API handlers when running under an edge
* runtime (Cloudflare Workers). Undefined in dev/Node.
*/
export type WorkerContext = {
env?: WorkerEnv;
executionCtx?: WorkerExecutionContext;
};
export type APIRouteContext<Params extends Record<string, string> = Record<string, string>> = {
params: Params;
/** Present on worker runtimes (Cloudflare Workers). Undefined in dev/Node. */
worker?: WorkerContext;
};
type APIRouteHandler<Params extends Record<string, string> = Record<string, string>> = (request: Request, context: APIRouteContext<Params>) => MaybePromise<Response>;
/**
* Type helper for API route handlers with typed params.
*
* @example
* ```ts
* // app/api/users/[id]+api.ts
* import { createAPIRoute } from 'one'
*
* export const GET = createAPIRoute<'/api/users/[id]'>((request, { params, worker }) => {
* // params.id is typed as string
* // on cloudflare workers, worker.executionCtx.waitUntil() keeps background work alive
* worker?.executionCtx?.waitUntil(trackEvent(params.id))
* return Response.json({ id: params.id })
* })
* ```
*/
export declare function createAPIRoute<Path extends string = string>(handler: APIRouteHandler<OneRouter.RouteType<Path>['Params']>): APIRouteHandler<OneRouter.RouteType<Path>["Params"]>;
export type { APIRouteHandler };
//# sourceMappingURL=createAPIRoute.d.ts.map