turbopack_core/
raw_module.rs

1use turbo_tasks::{ResolvedVc, Vc};
2
3use crate::{
4    ident::AssetIdent,
5    module::{Module, ModuleSideEffects},
6    source::{OptionSource, Source},
7};
8
9/// A module where source code doesn't need to be parsed but can be used as is.
10/// This module has no references to other modules.
11#[turbo_tasks::value]
12pub struct RawModule {
13    source: ResolvedVc<Box<dyn Source>>,
14}
15
16#[turbo_tasks::value_impl]
17impl Module for RawModule {
18    #[turbo_tasks::function]
19    fn ident(&self) -> Vc<AssetIdent> {
20        self.source.ident()
21    }
22
23    #[turbo_tasks::function]
24    fn source(&self) -> Vc<OptionSource> {
25        Vc::cell(Some(self.source))
26    }
27    #[turbo_tasks::function]
28    fn side_effects(self: Vc<Self>) -> Vc<ModuleSideEffects> {
29        ModuleSideEffects::SideEffectful.cell()
30    }
31}
32
33#[turbo_tasks::value_impl]
34impl RawModule {
35    #[turbo_tasks::function]
36    pub fn new(source: ResolvedVc<Box<dyn Source>>) -> Vc<RawModule> {
37        RawModule { source }.cell()
38    }
39}