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 | 29x 29x 29x 29x 12x 29x 29x 29x 29x 1x 1x 29x 29x 65x 65x 28x 1x 29x 29x | import { getScriptDownloadPath, getGetResultPath, IntegrationEnv, getStatusPagePath } from './env'
import { handleDownloadScript, handleIngressAPI, handleStatusPage } from './handlers'
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[] = []
const downloadScriptRoute: Route = {
pathPattern: createRoute(getScriptDownloadPath(env)),
handler: handleDownloadScript,
}
const ingressAPIRoute: Route = {
pathPattern: createRoute(getGetResultPath(env)),
handler: handleIngressAPI,
}
const statusRoute: Route = {
pathPattern: createRoute(getStatusPagePath()),
handler: (request, env) => handleStatusPage(request, env),
}
routes.push(downloadScriptRoute)
routes.push(ingressAPIRoute)
routes.push(statusRoute)
return routes
}
function handleNoMatch(urlPathname: string): Response {
const responseHeaders = new Headers({
'content-type': 'application/json',
})
return new Response(JSON.stringify({ error: `unmatched path ${urlPathname}` }), {
status: 404,
headers: responseHeaders,
})
}
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 handleNoMatch(url.pathname)
}
export async function handleReq(request: Request, env: IntegrationEnv): Promise<Response> {
const routes = createRoutes(env)
return handleRequestWithRoutes(request, env, routes)
}
|