From 4e87195739f2a5d9a05451b48773c8afdc680765 Mon Sep 17 00:00:00 2001 From: akiyamn Date: Sun, 24 Sep 2023 23:22:21 +1000 Subject: Initial commit (by create-cloudflare CLI) --- .../wrangler/templates/middleware/common.ts | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 node_modules/wrangler/templates/middleware/common.ts (limited to 'node_modules/wrangler/templates/middleware/common.ts') 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 | Promise; +// TODO: allow dispatching more events? +export type Dispatcher = ( + type: "scheduled", + init: { cron?: string } +) => Awaitable; + +export type IncomingRequest = Request< + unknown, + IncomingRequestCfProperties +>; + +export interface MiddlewareContext { + dispatch: Dispatcher; + next(request: IncomingRequest, env: any): Awaitable; +} + +export type Middleware = ( + request: IncomingRequest, + env: any, + ctx: ExecutionContext, + middlewareCtx: MiddlewareContext +) => Awaitable; + +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 { + 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 { + return __facade_invokeChain__(request, env, ctx, dispatch, [ + ...__facade_middleware__, + finalMiddleware, + ]); +} -- cgit v1.2.3