turbopack_node/render/
mod.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value as JsonValue;
3use turbo_rcstr::RcStr;
4use turbo_tasks::{FxIndexMap, ReadRef};
5
6use crate::{ResponseHeaders, StructuredError, route_matcher::Param};
7
8pub(crate) mod error_page;
9pub mod issue;
10pub mod node_api_source;
11pub mod render_proxy;
12pub mod render_static;
13pub mod rendered_source;
14
15#[turbo_tasks::value(shared)]
16#[serde(rename_all = "camelCase")]
17pub struct RenderData {
18    params: FxIndexMap<RcStr, Param>,
19    method: RcStr,
20    url: RcStr,
21    original_url: RcStr,
22    raw_query: RcStr,
23    raw_headers: Vec<(RcStr, RcStr)>,
24    path: RcStr,
25    data: Option<ReadRef<JsonValue>>,
26}
27
28#[derive(Serialize)]
29#[serde(tag = "type", rename_all = "camelCase")]
30enum RenderStaticOutgoingMessage<'a> {
31    Headers { data: &'a RenderData },
32}
33
34#[derive(Serialize)]
35#[serde(tag = "type", rename_all = "camelCase")]
36enum RenderProxyOutgoingMessage<'a> {
37    Headers { data: &'a RenderData },
38    BodyChunk { data: &'a [u8] },
39    BodyEnd,
40}
41
42#[derive(Deserialize, Debug)]
43#[serde(tag = "type", rename_all = "camelCase")]
44enum RenderProxyIncomingMessage {
45    Headers { data: ResponseHeaders },
46    BodyChunk { data: Vec<u8> },
47    BodyEnd,
48    Error(StructuredError),
49}
50
51#[derive(Deserialize, Debug)]
52#[serde(tag = "type", rename_all = "camelCase")]
53enum RenderStaticIncomingMessage {
54    #[serde(rename_all = "camelCase")]
55    Response {
56        status_code: u16,
57        headers: Vec<(RcStr, RcStr)>,
58        body: RcStr,
59    },
60    Headers {
61        data: ResponseHeaders,
62    },
63    BodyChunk {
64        data: Vec<u8>,
65    },
66    BodyEnd,
67    Rewrite {
68        path: RcStr,
69    },
70    Error(StructuredError),
71}