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