From 20a910e5f8aff1f552ebd1e2a5683ac4a9315061 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Fri, 24 Jan 2025 13:05:04 -0500 Subject: [PATCH] fix(node): align type stripping in node_modules error message with Node (#27809) --- cli/lib/loader.rs | 18 +++++++++++------- cli/module_loader.rs | 5 ++--- .../npm/typescript_file_in_package/main.out | 2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/cli/lib/loader.rs b/cli/lib/loader.rs index 32f97dc718..68d56be233 100644 --- a/cli/lib/loader.rs +++ b/cli/lib/loader.rs @@ -27,12 +27,17 @@ pub struct ModuleCodeStringSource { #[derive(Debug, Error, deno_error::JsError)] #[class(type)] -#[error("{media_type} files are not supported in npm packages: {specifier}")] -pub struct NotSupportedKindInNpmError { - pub media_type: MediaType, +#[error("[{}]: Stripping types is currently unsupported for files under node_modules, for \"{}\"", self.code(), specifier)] +pub struct StrippingTypesNodeModulesError { pub specifier: Url, } +impl StrippingTypesNodeModulesError { + pub fn code(&self) -> &'static str { + "ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING" + } +} + #[derive(Debug, Error, deno_error::JsError)] pub enum NpmModuleLoadError { #[class(inherit)] @@ -40,7 +45,7 @@ pub enum NpmModuleLoadError { UrlToFilePath(#[from] deno_path_util::UrlToFilePathError), #[class(inherit)] #[error(transparent)] - NotSupportedKindInNpm(#[from] NotSupportedKindInNpmError), + StrippingTypesNodeModules(#[from] StrippingTypesNodeModulesError), #[class(inherit)] #[error(transparent)] ClosestPkgJson(#[from] node_resolver::errors::ClosestPkgJsonError), @@ -177,9 +182,8 @@ impl< let media_type = MediaType::from_specifier(specifier); if media_type.is_emittable() { - return Err(NpmModuleLoadError::NotSupportedKindInNpm( - NotSupportedKindInNpmError { - media_type, + return Err(NpmModuleLoadError::StrippingTypesNodeModules( + StrippingTypesNodeModulesError { specifier: specifier.clone(), }, )); diff --git a/cli/module_loader.rs b/cli/module_loader.rs index 70900abc69..276637dada 100644 --- a/cli/module_loader.rs +++ b/cli/module_loader.rs @@ -38,8 +38,8 @@ use deno_graph::ModuleGraphError; use deno_graph::Resolution; use deno_graph::WasmModule; use deno_lib::loader::ModuleCodeStringSource; -use deno_lib::loader::NotSupportedKindInNpmError; use deno_lib::loader::NpmModuleLoadError; +use deno_lib::loader::StrippingTypesNodeModulesError; use deno_lib::npm::NpmRegistryReadPermissionChecker; use deno_lib::util::hash::FastInsecureHasher; use deno_lib::worker::CreateModuleLoaderResult; @@ -1257,8 +1257,7 @@ impl NodeRequireLoader let specifier = deno_path_util::url_from_file_path(path) .map_err(JsErrorBox::from_err)?; if self.in_npm_pkg_checker.in_npm_package(&specifier) { - return Err(JsErrorBox::from_err(NotSupportedKindInNpmError { - media_type, + return Err(JsErrorBox::from_err(StrippingTypesNodeModulesError { specifier, })); } diff --git a/tests/specs/npm/typescript_file_in_package/main.out b/tests/specs/npm/typescript_file_in_package/main.out index 58290a8737..fe57be4372 100644 --- a/tests/specs/npm/typescript_file_in_package/main.out +++ b/tests/specs/npm/typescript_file_in_package/main.out @@ -1,3 +1,3 @@ Download http://localhost:4260/@denotest%2ftypescript-file Download http://localhost:4260/@denotest/typescript-file/1.0.0.tgz -error: TypeScript files are not supported in npm packages: file:///[WILDCARD]/@denotest/typescript-file/1.0.0/index.ts +error: [ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING]: Stripping types is currently unsupported for files under node_modules, for "file:///[WILDLINE]/index.ts"