All files / src handler.ts

100% Statements 16/16
100% Branches 6/6
100% Functions 4/4
100% Lines 16/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68                                              44x   44x 23x           44x 28x           44x   12x     44x               44x 44x 73x 73x 33x       11x       44x 44x    
import {
  getScriptDownloadPath,
  getGetResultPath,
  IntegrationEnv,
  getStatusPagePath,
  isScriptDownloadPathSet,
  isGetResultPathSet,
} from './env'
 
import { handleDownloadScript, handleIngressAPI, handleStatusPage } from './handlers'
import { handleApiRequest } from './handlers/handleApiRequest'
import { createRoute } from './utils'
 
export type Route = {
  pathPattern: RegExp
  handler: (
    request: Request,
    env: IntegrationEnv,
    routeMatchArray: RegExpMatchArray | undefined
  ) => Response | Promise<Response>
}
 
function createRoutes(env: IntegrationEnv): Route[] {
  const routes: Route[] = []
 
  if (isScriptDownloadPathSet(env)) {
    routes.push({
      pathPattern: createRoute(getScriptDownloadPath(env)),
      handler: handleDownloadScript,
    })
  }
 
  if (isGetResultPathSet(env)) {
    routes.push({
      pathPattern: createRoute(getGetResultPath(env)),
      handler: handleIngressAPI,
    })
  }
 
  routes.push({
    pathPattern: createRoute(getStatusPagePath()),
    handler: (request, env) => handleStatusPage(request, env),
  })
 
  return routes
}
 
export function handleRequestWithRoutes(
  request: Request,
  env: IntegrationEnv,
  routes: Route[]
): Promise<Response> | Response {
  const url = new URL(request.url)
  for (const route of routes) {
    const matches = url.pathname.match(route.pathPattern)
    if (matches) {
      return route.handler(request, env, matches)
    }
  }
 
  return handleApiRequest(request, env, url.pathname)
}
 
export async function handleReq(request: Request, env: IntegrationEnv): Promise<Response> {
  const routes = createRoutes(env)
  return handleRequestWithRoutes(request, env, routes)
}