turbopack_core/
source_transform.rs1use 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}