turbopack_core/resolve/
node.rs

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