turbopack_env/
embeddable.rs1use anyhow::Result;
2use turbo_rcstr::RcStr;
3use turbo_tasks::{ResolvedVc, Vc};
4use turbo_tasks_env::{EnvMap, ProcessEnv};
5use turbopack_ecmascript::utils::StringifyJs;
6
7#[turbo_tasks::value]
10pub struct EmbeddableProcessEnv {
11 prior: ResolvedVc<Box<dyn ProcessEnv>>,
12}
13
14#[turbo_tasks::value_impl]
15impl EmbeddableProcessEnv {
16 #[turbo_tasks::function]
17 pub fn new(prior: ResolvedVc<Box<dyn ProcessEnv>>) -> Result<Vc<Self>> {
18 Ok(EmbeddableProcessEnv { prior }.cell())
19 }
20}
21
22#[turbo_tasks::value_impl]
23impl ProcessEnv for EmbeddableProcessEnv {
24 #[turbo_tasks::function]
25 async fn read_all(&self) -> Result<Vc<EnvMap>> {
26 let prior = self.prior.read_all().await?;
27
28 let encoded = prior
29 .iter()
30 .map(|(k, v)| (k.clone(), StringifyJs(v).to_string().into()))
31 .collect();
32
33 Ok(Vc::cell(encoded))
34 }
35
36 #[turbo_tasks::function]
37 async fn read(&self, name: RcStr) -> Result<Vc<Option<RcStr>>> {
38 let prior = self.prior.read(name).await?;
39 let encoded = prior
40 .as_deref()
41 .map(|s| StringifyJs(s).to_string())
42 .map(RcStr::from);
43 Ok(Vc::cell(encoded))
44 }
45}