Skip to main content

turbopack_core/
source_transform.rs

1use turbo_tasks::{ResolvedVc, Vc};
2
3use crate::{context::AssetContext, source::Source};
4
5#[turbo_tasks::value_trait]
6pub trait SourceTransform {
7    #[turbo_tasks::function]
8    fn transform(
9        self: Vc<Self>,
10        source: Vc<Box<dyn Source>>,
11        asset_context: Vc<Box<dyn AssetContext>>,
12    ) -> Vc<Box<dyn Source>>;
13}
14
15#[turbo_tasks::value(transparent)]
16pub struct SourceTransforms(Vec<ResolvedVc<Box<dyn SourceTransform>>>);
17
18#[turbo_tasks::value_impl]
19impl SourceTransforms {
20    #[turbo_tasks::function]
21    pub fn transform(
22        &self,
23        source: Vc<Box<dyn Source>>,
24        asset_context: Vc<Box<dyn AssetContext>>,
25    ) -> Vc<Box<dyn Source>> {
26        self.0.iter().fold(source, |source, transform| {
27            transform.transform(source, asset_context)
28        })
29    }
30}