next.js/turbopack/crates/turbopack-core/src/resolve/node.rs
node.rs70 lines2.2 KB
use turbo_rcstr::rcstr;
use turbo_tasks::Vc;
use turbo_tasks_fs::FileSystemPath;

use super::options::{
    ConditionValue, ResolutionConditions, ResolveInPackage, ResolveIntoPackage, ResolveModules,
    ResolveOptions,
};

#[turbo_tasks::function]
pub fn node_cjs_resolve_options(root: FileSystemPath) -> Vc<ResolveOptions> {
    let conditions: ResolutionConditions = [
        (rcstr!("node"), ConditionValue::Set),
        (rcstr!("require"), ConditionValue::Set),
    ]
    .into();
    let extensions = vec![rcstr!(".js"), rcstr!(".json"), rcstr!(".node")];
    ResolveOptions {
        extensions,
        modules: vec![ResolveModules::Nested(root, vec![rcstr!("node_modules")])],
        into_package: vec![
            ResolveIntoPackage::ExportsField {
                conditions: conditions.clone(),
                unspecified_conditions: ConditionValue::Unset,
            },
            ResolveIntoPackage::MainField {
                field: rcstr!("main"),
            },
        ],
        in_package: vec![ResolveInPackage::ImportsField {
            conditions,
            unspecified_conditions: ConditionValue::Unset,
        }],
        default_files: vec![rcstr!("index")],
        ..Default::default()
    }
    .cell()
}

#[turbo_tasks::function]
pub fn node_esm_resolve_options(root: FileSystemPath) -> Vc<ResolveOptions> {
    let conditions: ResolutionConditions = [
        (rcstr!("node"), ConditionValue::Set),
        (rcstr!("import"), ConditionValue::Set),
    ]
    .into();
    let extensions = vec![rcstr!(".js"), rcstr!(".json"), rcstr!(".node")];
    ResolveOptions {
        fully_specified: true,
        extensions,
        modules: vec![ResolveModules::Nested(root, vec![rcstr!("node_modules")])],
        into_package: vec![
            ResolveIntoPackage::ExportsField {
                conditions: conditions.clone(),
                unspecified_conditions: ConditionValue::Unset,
            },
            ResolveIntoPackage::MainField {
                field: rcstr!("main"),
            },
        ],
        in_package: vec![ResolveInPackage::ImportsField {
            conditions,
            unspecified_conditions: ConditionValue::Unset,
        }],
        default_files: vec![rcstr!("index")],
        ..Default::default()
    }
    .cell()
}
Quest for Codev2.0.0
/
SIGN IN