diff options
| author | akiyamn | 2023-09-24 23:22:21 +1000 |
|---|---|---|
| committer | akiyamn | 2023-09-24 23:22:21 +1000 |
| commit | 4e87195739f2a5d9a05451b48773c8afdc680765 (patch) | |
| tree | 9cba501844a4a11dcbdffc4050ed8189561c55ed /node_modules/wrangler/templates/middleware/common.ts | |
| download | price-tracker-worker-4e87195739f2a5d9a05451b48773c8afdc680765.tar.gz price-tracker-worker-4e87195739f2a5d9a05451b48773c8afdc680765.zip | |
Initial commit (by create-cloudflare CLI)
Diffstat (limited to 'node_modules/wrangler/templates/middleware/common.ts')
| -rw-r--r-- | node_modules/wrangler/templates/middleware/common.ts | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/node_modules/wrangler/templates/middleware/common.ts b/node_modules/wrangler/templates/middleware/common.ts new file mode 100644 index 0000000..1319e5d --- /dev/null +++ b/node_modules/wrangler/templates/middleware/common.ts @@ -0,0 +1,67 @@ +export type Awaitable<T> = T | Promise<T>; +// TODO: allow dispatching more events? +export type Dispatcher = ( + type: "scheduled", + init: { cron?: string } +) => Awaitable<void>; + +export type IncomingRequest = Request< + unknown, + IncomingRequestCfProperties<unknown> +>; + +export interface MiddlewareContext { + dispatch: Dispatcher; + next(request: IncomingRequest, env: any): Awaitable<Response>; +} + +export type Middleware = ( + request: IncomingRequest, + env: any, + ctx: ExecutionContext, + middlewareCtx: MiddlewareContext +) => Awaitable<Response>; + +const __facade_middleware__: Middleware[] = []; + +// The register functions allow for the insertion of one or many middleware, +// We register internal middleware first in the stack, but have no way of controlling +// the order that addMiddleware is run in service workers so need an internal function. +export function __facade_register__(...args: (Middleware | Middleware[])[]) { + __facade_middleware__.push(...args.flat()); +} +export function __facade_registerInternal__( + ...args: (Middleware | Middleware[])[] +) { + __facade_middleware__.unshift(...args.flat()); +} + +function __facade_invokeChain__( + request: IncomingRequest, + env: any, + ctx: ExecutionContext, + dispatch: Dispatcher, + middlewareChain: Middleware[] +): Awaitable<Response> { + const [head, ...tail] = middlewareChain; + const middlewareCtx: MiddlewareContext = { + dispatch, + next(newRequest, newEnv) { + return __facade_invokeChain__(newRequest, newEnv, ctx, dispatch, tail); + }, + }; + return head(request, env, ctx, middlewareCtx); +} + +export function __facade_invoke__( + request: IncomingRequest, + env: any, + ctx: ExecutionContext, + dispatch: Dispatcher, + finalMiddleware: Middleware +): Awaitable<Response> { + return __facade_invokeChain__(request, env, ctx, dispatch, [ + ...__facade_middleware__, + finalMiddleware, + ]); +} |
