Skip to main content

turbopack_core/resolve/
node.rs

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