UNPKG

astro

Version:

Astro is a modern site builder with web best practices, performance, and DX front-of-mind.

43 lines (42 loc) 1.38 kB
import { createCrossOriginForbiddenResponse, isForbiddenCrossOriginRequest } from "../core/app/origin-check.js"; import { markFeatureUsed, FetchFeatures } from "../core/fetch/features.js"; import { getActionContext, serializeActionResult } from "./runtime/server.js"; function handleAction(apiContext, state) { markFeatureUsed(state.manifest, FetchFeatures.actions); if (apiContext.isPrerendered) { return void 0; } const { action, setActionResult } = getActionContext(apiContext); if (!action) { return void 0; } if (state.manifest.checkOrigin && isForbiddenCrossOriginRequest(apiContext.request, apiContext.url, apiContext.isPrerendered)) { return Promise.resolve(createCrossOriginForbiddenResponse(apiContext.request)); } return executeAction(action, setActionResult); } async function executeAction(action, setActionResult) { const actionResult = await action.handler(); const serialized = serializeActionResult(actionResult); if (action.calledFrom === "rpc") { if (serialized.type === "empty") { return new Response(null, { status: serialized.status }); } return new Response(serialized.body, { status: serialized.status, headers: { "Content-Type": serialized.contentType } }); } setActionResult(action.name, serialized); return void 0; } export { handleAction };