turbopack_ecmascript_runtime/
nodejs_runtime.rs

1use anyhow::Result;
2use turbo_rcstr::rcstr;
3use turbo_tasks::{ResolvedVc, Vc};
4use turbopack_core::{
5    code_builder::{Code, CodeBuilder},
6    environment::Environment,
7};
8
9use crate::{asset_context::get_runtime_asset_context, embed_js::embed_static_code};
10
11/// Returns the code for the Node.js production ECMAScript runtime.
12#[turbo_tasks::function]
13pub async fn get_nodejs_runtime_code(
14    environment: ResolvedVc<Environment>,
15    generate_source_map: bool,
16) -> Result<Vc<Code>> {
17    let asset_context = get_runtime_asset_context(*environment).resolve().await?;
18
19    let shared_runtime_utils_code = embed_static_code(
20        asset_context,
21        rcstr!("shared/runtime-utils.ts"),
22        generate_source_map,
23    );
24    let shared_base_external_utils_code = embed_static_code(
25        asset_context,
26        rcstr!("shared-node/base-externals-utils.ts"),
27        generate_source_map,
28    );
29    let shared_node_external_utils_code = embed_static_code(
30        asset_context,
31        rcstr!("shared-node/node-externals-utils.ts"),
32        generate_source_map,
33    );
34    let shared_node_wasm_utils_code = embed_static_code(
35        asset_context,
36        rcstr!("shared-node/node-wasm-utils.ts"),
37        generate_source_map,
38    );
39    let runtime_code = embed_static_code(
40        asset_context,
41        rcstr!("nodejs/runtime.ts"),
42        generate_source_map,
43    );
44
45    let mut code = CodeBuilder::default();
46    code.push_code(&*shared_runtime_utils_code.await?);
47    code.push_code(&*shared_base_external_utils_code.await?);
48    code.push_code(&*shared_node_external_utils_code.await?);
49    code.push_code(&*shared_node_wasm_utils_code.await?);
50    code.push_code(&*runtime_code.await?);
51
52    Ok(Code::cell(code.build()))
53}