turbopack_core/resolve/
node.rs

1use turbo_tasks::{ResolvedVc, Vc};
2use turbo_tasks_fs::FileSystemPath;
3
4use super::options::{
5    ConditionValue, ResolutionConditions, ResolveInPackage, ResolveIntoPackage, ResolveModules,
6    ResolveOptions,
7};
8
9#[turbo_tasks::function]
10pub fn node_cjs_resolve_options(root: ResolvedVc<FileSystemPath>) -> Vc<ResolveOptions> {
11    let conditions: ResolutionConditions = [
12        ("node".into(), ConditionValue::Set),
13        ("require".into(), ConditionValue::Set),
14    ]
15    .into();
16    let extensions = vec![".js".into(), ".json".into(), ".node".into()];
17    ResolveOptions {
18        extensions,
19        modules: vec![ResolveModules::Nested(root, vec!["node_modules".into()])],
20        into_package: vec![
21            ResolveIntoPackage::ExportsField {
22                conditions: conditions.clone(),
23                unspecified_conditions: ConditionValue::Unset,
24            },
25            ResolveIntoPackage::MainField {
26                field: "main".into(),
27            },
28        ],
29        in_package: vec![ResolveInPackage::ImportsField {
30            conditions,
31            unspecified_conditions: ConditionValue::Unset,
32        }],
33        default_files: vec!["index".into()],
34        ..Default::default()
35    }
36    .cell()
37}
38
39#[turbo_tasks::function]
40pub fn node_esm_resolve_options(root: ResolvedVc<FileSystemPath>) -> Vc<ResolveOptions> {
41    let conditions: ResolutionConditions = [
42        ("node".into(), ConditionValue::Set),
43        ("import".into(), ConditionValue::Set),
44    ]
45    .into();
46    let extensions = vec![".js".into(), ".json".into(), ".node".into()];
47    ResolveOptions {
48        fully_specified: true,
49        extensions,
50        modules: vec![ResolveModules::Nested(root, vec!["node_modules".into()])],
51        into_package: vec![
52            ResolveIntoPackage::ExportsField {
53                conditions: conditions.clone(),
54                unspecified_conditions: ConditionValue::Unset,
55            },
56            ResolveIntoPackage::MainField {
57                field: "main".into(),
58            },
59        ],
60        in_package: vec![ResolveInPackage::ImportsField {
61            conditions,
62            unspecified_conditions: ConditionValue::Unset,
63        }],
64        default_files: vec!["index".into()],
65        ..Default::default()
66    }
67    .cell()
68}