turbopack_core/resolve/
node.rs1use 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}