mirror of
https://github.com/denoland/deno.git
synced 2025-09-26 12:19:12 +00:00
refactor: make import and require conditions an override in ConditionResolver
(#29622)
Some checks are pending
ci / pre-build (push) Waiting to run
ci / test debug linux-aarch64 (push) Blocked by required conditions
ci / test release linux-aarch64 (push) Blocked by required conditions
ci / test debug macos-aarch64 (push) Blocked by required conditions
ci / test release macos-aarch64 (push) Blocked by required conditions
ci / bench release linux-x86_64 (push) Blocked by required conditions
ci / lint debug linux-x86_64 (push) Blocked by required conditions
ci / lint debug macos-x86_64 (push) Blocked by required conditions
ci / lint debug windows-x86_64 (push) Blocked by required conditions
ci / test debug linux-x86_64 (push) Blocked by required conditions
ci / test release linux-x86_64 (push) Blocked by required conditions
ci / test debug macos-x86_64 (push) Blocked by required conditions
ci / test release macos-x86_64 (push) Blocked by required conditions
ci / test debug windows-x86_64 (push) Blocked by required conditions
ci / test release windows-x86_64 (push) Blocked by required conditions
ci / build wasm32 (push) Blocked by required conditions
ci / publish canary (push) Blocked by required conditions
Some checks are pending
ci / pre-build (push) Waiting to run
ci / test debug linux-aarch64 (push) Blocked by required conditions
ci / test release linux-aarch64 (push) Blocked by required conditions
ci / test debug macos-aarch64 (push) Blocked by required conditions
ci / test release macos-aarch64 (push) Blocked by required conditions
ci / bench release linux-x86_64 (push) Blocked by required conditions
ci / lint debug linux-x86_64 (push) Blocked by required conditions
ci / lint debug macos-x86_64 (push) Blocked by required conditions
ci / lint debug windows-x86_64 (push) Blocked by required conditions
ci / test debug linux-x86_64 (push) Blocked by required conditions
ci / test release linux-x86_64 (push) Blocked by required conditions
ci / test debug macos-x86_64 (push) Blocked by required conditions
ci / test release macos-x86_64 (push) Blocked by required conditions
ci / test debug windows-x86_64 (push) Blocked by required conditions
ci / test release windows-x86_64 (push) Blocked by required conditions
ci / build wasm32 (push) Blocked by required conditions
ci / publish canary (push) Blocked by required conditions
This commit is contained in:
parent
22a615c7eb
commit
512a0072b1
5 changed files with 65 additions and 63 deletions
|
@ -54,8 +54,7 @@ use deno_runtime::permissions::RuntimePermissionDescriptorParser;
|
||||||
use deno_runtime::FeatureChecker;
|
use deno_runtime::FeatureChecker;
|
||||||
use node_resolver::analyze::NodeCodeTranslator;
|
use node_resolver::analyze::NodeCodeTranslator;
|
||||||
use node_resolver::cache::NodeResolutionThreadLocalCache;
|
use node_resolver::cache::NodeResolutionThreadLocalCache;
|
||||||
use node_resolver::ConditionResolver;
|
use node_resolver::NodeConditionOptions;
|
||||||
use node_resolver::ConditionResolverOptions;
|
|
||||||
use node_resolver::NodeResolverOptions;
|
use node_resolver::NodeResolverOptions;
|
||||||
use once_cell::sync::OnceCell;
|
use once_cell::sync::OnceCell;
|
||||||
use sys_traits::EnvCurrentDir;
|
use sys_traits::EnvCurrentDir;
|
||||||
|
@ -1212,16 +1211,15 @@ impl CliFactory {
|
||||||
IsCjsResolutionMode::Disabled
|
IsCjsResolutionMode::Disabled
|
||||||
},
|
},
|
||||||
node_resolver_options: NodeResolverOptions {
|
node_resolver_options: NodeResolverOptions {
|
||||||
condition_resolver: ConditionResolver::new(
|
conditions: NodeConditionOptions {
|
||||||
ConditionResolverOptions {
|
conditions: options
|
||||||
conditions: options
|
.node_conditions()
|
||||||
.node_conditions()
|
.iter()
|
||||||
.iter()
|
.map(|c| Cow::Owned(c.clone()))
|
||||||
.map(|c| Cow::Owned(c.clone()))
|
.collect(),
|
||||||
.collect(),
|
import_conditions_override: None,
|
||||||
..Default::default()
|
require_conditions_override: None,
|
||||||
},
|
},
|
||||||
),
|
|
||||||
typescript_version: Some(
|
typescript_version: Some(
|
||||||
deno_semver::Version::parse_standard(
|
deno_semver::Version::parse_standard(
|
||||||
deno_lib::version::DENO_VERSION_INFO.typescript,
|
deno_lib::version::DENO_VERSION_INFO.typescript,
|
||||||
|
|
|
@ -1113,7 +1113,7 @@ impl<'a> ResolverFactory<'a> {
|
||||||
self.pkg_json_resolver.clone(),
|
self.pkg_json_resolver.clone(),
|
||||||
self.node_resolution_sys.clone(),
|
self.node_resolution_sys.clone(),
|
||||||
NodeResolverOptions {
|
NodeResolverOptions {
|
||||||
condition_resolver: Default::default(),
|
conditions: Default::default(),
|
||||||
typescript_version: Some(
|
typescript_version: Some(
|
||||||
deno_semver::Version::parse_standard(
|
deno_semver::Version::parse_standard(
|
||||||
deno_lib::version::DENO_VERSION_INFO.typescript,
|
deno_lib::version::DENO_VERSION_INFO.typescript,
|
||||||
|
|
|
@ -20,7 +20,7 @@ use deno_config::workspace::WorkspaceDirectoryEmptyOptions;
|
||||||
use deno_config::workspace::WorkspaceDiscoverError;
|
use deno_config::workspace::WorkspaceDiscoverError;
|
||||||
use deno_config::workspace::WorkspaceDiscoverOptions;
|
use deno_config::workspace::WorkspaceDiscoverOptions;
|
||||||
use deno_config::workspace::WorkspaceDiscoverStart;
|
use deno_config::workspace::WorkspaceDiscoverStart;
|
||||||
use deno_npm::NpmSystemInfo;
|
pub use deno_npm::NpmSystemInfo;
|
||||||
use deno_path_util::fs::canonicalize_path_maybe_not_exists;
|
use deno_path_util::fs::canonicalize_path_maybe_not_exists;
|
||||||
use deno_path_util::normalize_path;
|
use deno_path_util::normalize_path;
|
||||||
use futures::future::FutureExt;
|
use futures::future::FutureExt;
|
||||||
|
|
|
@ -32,8 +32,7 @@ pub use path::UrlOrPathRef;
|
||||||
pub use resolution::parse_npm_pkg_name;
|
pub use resolution::parse_npm_pkg_name;
|
||||||
pub use resolution::resolve_specifier_into_node_modules;
|
pub use resolution::resolve_specifier_into_node_modules;
|
||||||
pub use resolution::types_package_name;
|
pub use resolution::types_package_name;
|
||||||
pub use resolution::ConditionResolver;
|
pub use resolution::NodeConditionOptions;
|
||||||
pub use resolution::ConditionResolverOptions;
|
|
||||||
pub use resolution::NodeResolution;
|
pub use resolution::NodeResolution;
|
||||||
pub use resolution::NodeResolutionKind;
|
pub use resolution::NodeResolutionKind;
|
||||||
pub use resolution::NodeResolver;
|
pub use resolution::NodeResolver;
|
||||||
|
@ -41,5 +40,5 @@ pub use resolution::NodeResolverOptions;
|
||||||
pub use resolution::NodeResolverRc;
|
pub use resolution::NodeResolverRc;
|
||||||
pub use resolution::NodeResolverSys;
|
pub use resolution::NodeResolverSys;
|
||||||
pub use resolution::ResolutionMode;
|
pub use resolution::ResolutionMode;
|
||||||
pub use resolution::DEFAULT_CONDITIONS;
|
pub use resolution::IMPORT_CONDITIONS;
|
||||||
pub use resolution::REQUIRE_CONDITIONS;
|
pub use resolution::REQUIRE_CONDITIONS;
|
||||||
|
|
|
@ -61,7 +61,7 @@ use crate::NpmPackageFolderResolver;
|
||||||
use crate::PackageJsonResolverRc;
|
use crate::PackageJsonResolverRc;
|
||||||
use crate::PathClean;
|
use crate::PathClean;
|
||||||
|
|
||||||
pub static DEFAULT_CONDITIONS: &[Cow<'static, str>] = &[
|
pub static IMPORT_CONDITIONS: &[Cow<'static, str>] = &[
|
||||||
Cow::Borrowed("deno"),
|
Cow::Borrowed("deno"),
|
||||||
Cow::Borrowed("node"),
|
Cow::Borrowed("node"),
|
||||||
Cow::Borrowed("import"),
|
Cow::Borrowed("import"),
|
||||||
|
@ -70,57 +70,62 @@ pub static REQUIRE_CONDITIONS: &[Cow<'static, str>] =
|
||||||
&[Cow::Borrowed("require"), Cow::Borrowed("node")];
|
&[Cow::Borrowed("require"), Cow::Borrowed("node")];
|
||||||
static TYPES_ONLY_CONDITIONS: &[Cow<'static, str>] = &[Cow::Borrowed("types")];
|
static TYPES_ONLY_CONDITIONS: &[Cow<'static, str>] = &[Cow::Borrowed("types")];
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Default, Clone)]
|
||||||
pub struct ConditionResolverOptions {
|
pub struct NodeConditionOptions {
|
||||||
pub conditions: Vec<Cow<'static, str>>,
|
pub conditions: Vec<Cow<'static, str>>,
|
||||||
pub default_import_conditions: Vec<Cow<'static, str>>,
|
/// Provide a value to override the default import conditions.
|
||||||
pub default_require_conditions: Vec<Cow<'static, str>>,
|
///
|
||||||
}
|
/// Defaults to `["deno", "node", "import"]`
|
||||||
|
pub import_conditions_override: Option<Vec<Cow<'static, str>>>,
|
||||||
impl Default for ConditionResolverOptions {
|
/// Provide a value to override the default require conditions.
|
||||||
fn default() -> Self {
|
///
|
||||||
Self {
|
/// Defaults to `["require", "node"]`
|
||||||
conditions: Vec::new(),
|
pub require_conditions_override: Option<Vec<Cow<'static, str>>>,
|
||||||
default_import_conditions: DEFAULT_CONDITIONS.to_vec(),
|
|
||||||
default_require_conditions: REQUIRE_CONDITIONS.to_vec(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct ConditionResolver {
|
struct ConditionResolver {
|
||||||
import_conditions: Vec<Cow<'static, str>>,
|
import_conditions: Cow<'static, [Cow<'static, str>]>,
|
||||||
require_conditions: Vec<Cow<'static, str>>,
|
require_conditions: Cow<'static, [Cow<'static, str>]>,
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for ConditionResolver {
|
|
||||||
fn default() -> Self {
|
|
||||||
Self::new(Default::default())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ConditionResolver {
|
impl ConditionResolver {
|
||||||
pub fn new(options: ConditionResolverOptions) -> Self {
|
pub fn new(options: NodeConditionOptions) -> Self {
|
||||||
if options.conditions.is_empty() {
|
fn combine_conditions(
|
||||||
// Fast path for no custom conditions.
|
user_conditions: Cow<'_, [Cow<'static, str>]>,
|
||||||
return Self {
|
override_default: Option<Vec<Cow<'static, str>>>,
|
||||||
import_conditions: options.default_import_conditions,
|
default_conditions: &'static [Cow<'static, str>],
|
||||||
require_conditions: options.default_require_conditions,
|
) -> Cow<'static, [Cow<'static, str>]> {
|
||||||
};
|
if user_conditions.is_empty() {
|
||||||
|
Cow::Borrowed(default_conditions)
|
||||||
|
} else {
|
||||||
|
let default_conditions = override_default
|
||||||
|
.map(Cow::Owned)
|
||||||
|
.unwrap_or(Cow::Borrowed(default_conditions));
|
||||||
|
let mut new =
|
||||||
|
Vec::with_capacity(user_conditions.len() + default_conditions.len());
|
||||||
|
let mut append =
|
||||||
|
|conditions: Cow<'_, [Cow<'static, str>]>| match conditions {
|
||||||
|
Cow::Borrowed(conditions) => new.extend(conditions.iter().cloned()),
|
||||||
|
Cow::Owned(conditions) => new.extend(conditions),
|
||||||
|
};
|
||||||
|
append(user_conditions);
|
||||||
|
append(default_conditions);
|
||||||
|
Cow::Owned(new)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
import_conditions: options
|
import_conditions: combine_conditions(
|
||||||
.conditions
|
Cow::Borrowed(&options.conditions),
|
||||||
.iter()
|
options.import_conditions_override,
|
||||||
.chain(&options.default_import_conditions)
|
IMPORT_CONDITIONS,
|
||||||
.cloned()
|
),
|
||||||
.collect(),
|
require_conditions: combine_conditions(
|
||||||
require_conditions: options
|
Cow::Owned(options.conditions),
|
||||||
.conditions
|
options.require_conditions_override,
|
||||||
.iter()
|
REQUIRE_CONDITIONS,
|
||||||
.chain(&options.default_require_conditions)
|
),
|
||||||
.cloned()
|
|
||||||
.collect(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,7 +149,7 @@ pub enum ResolutionMode {
|
||||||
impl ResolutionMode {
|
impl ResolutionMode {
|
||||||
pub fn default_conditions(&self) -> &'static [Cow<'static, str>] {
|
pub fn default_conditions(&self) -> &'static [Cow<'static, str>] {
|
||||||
match self {
|
match self {
|
||||||
ResolutionMode::Import => DEFAULT_CONDITIONS,
|
ResolutionMode::Import => IMPORT_CONDITIONS,
|
||||||
ResolutionMode::Require => REQUIRE_CONDITIONS,
|
ResolutionMode::Require => REQUIRE_CONDITIONS,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -234,7 +239,7 @@ enum ResolvedMethod {
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone)]
|
#[derive(Debug, Default, Clone)]
|
||||||
pub struct NodeResolverOptions {
|
pub struct NodeResolverOptions {
|
||||||
pub condition_resolver: ConditionResolver,
|
pub conditions: NodeConditionOptions,
|
||||||
/// TypeScript version to use for typesVersions resolution and
|
/// TypeScript version to use for typesVersions resolution and
|
||||||
/// `types@req` exports resolution.
|
/// `types@req` exports resolution.
|
||||||
pub typescript_version: Option<Version>,
|
pub typescript_version: Option<Version>,
|
||||||
|
@ -302,7 +307,7 @@ impl<
|
||||||
npm_pkg_folder_resolver,
|
npm_pkg_folder_resolver,
|
||||||
pkg_json_resolver,
|
pkg_json_resolver,
|
||||||
sys,
|
sys,
|
||||||
condition_resolver: options.condition_resolver,
|
condition_resolver: ConditionResolver::new(options.conditions),
|
||||||
typescript_version: options.typescript_version,
|
typescript_version: options.typescript_version,
|
||||||
package_resolution_lookup_cache: None,
|
package_resolution_lookup_cache: None,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue