Skip to main content

turbopack/
runtime_asset_context.rs

1use turbo_rcstr::rcstr;
2use turbo_tasks::{ResolvedVc, Result, Vc};
3use turbopack_core::{
4    compile_time_info::CompileTimeInfo, context::AssetContext, environment::Environment,
5    ident::Layer,
6};
7use turbopack_ecmascript::TreeShakingMode;
8
9use crate::{
10    ModuleAssetContext,
11    module_options::{EcmascriptOptionsContext, ModuleOptionsContext, TypescriptTransformOptions},
12};
13
14/// Returns the runtime asset context used to compile embedded runtime
15/// TypeScript files (e.g. the turbopack-ecmascript-runtime JS sources).
16#[turbo_tasks::function]
17pub async fn get_runtime_asset_context(
18    environment: ResolvedVc<Environment>,
19) -> Result<Vc<Box<dyn AssetContext>>> {
20    let module_options_context = ModuleOptionsContext {
21        ecmascript: EcmascriptOptionsContext {
22            enable_typescript_transform: Some(
23                TypescriptTransformOptions::default().resolved_cell(),
24            ),
25            inline_helpers: true,
26            ..Default::default()
27        },
28        environment: Some(environment),
29        tree_shaking_mode: Some(TreeShakingMode::ReexportsOnly),
30        ..Default::default()
31    }
32    .cell();
33    let compile_time_info = CompileTimeInfo::builder(environment).cell().await?;
34
35    let asset_context: Vc<Box<dyn AssetContext>> = Vc::upcast(ModuleAssetContext::new(
36        Default::default(),
37        compile_time_info,
38        module_options_context,
39        Vc::default(),
40        Layer::new(rcstr!("runtime")),
41    ));
42
43    Ok(asset_context)
44}