Skip to content

Commit

Permalink
add concrete error
Browse files Browse the repository at this point in the history
  • Loading branch information
dsherret committed Jan 23, 2025
1 parent b048dec commit d011744
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
19 changes: 17 additions & 2 deletions src/deno_json/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,15 @@ pub enum IntoResolvedErrorKind {
InvalidExclude(crate::glob::FromExcludeRelativePathOrPatternsError),
}

#[derive(Debug, Error, JsError)]
#[class(generic)]
#[error("Failed deserilaizing \"compilerOptions\".\"types\" in {}", self.specifier)]
pub struct CompilerOptionTypesDeserializeError {
specifier: Url,
#[source]
source: serde_json::Error,
}

#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
#[serde(default, deny_unknown_fields)]
struct SerializedFilesConfig {
Expand Down Expand Up @@ -1580,15 +1589,21 @@ impl ConfigFile {

pub fn to_compiler_option_types(
&self,
) -> Result<Vec<(Url, Vec<String>)>, serde_json::Error> {
) -> Result<Vec<(Url, Vec<String>)>, CompilerOptionTypesDeserializeError> {
let Some(compiler_options_value) = self.json.compiler_options.as_ref()
else {
return Ok(Vec::new());
};
let Some(types) = compiler_options_value.get("types") else {
return Ok(Vec::new());
};
let imports: Vec<String> = serde_json::from_value(types.clone())?;
let imports: Vec<String> =
serde_json::from_value(types.clone()).map_err(|source| {
CompilerOptionTypesDeserializeError {
specifier: self.specifier.clone(),
source,
}
})?;
if !imports.is_empty() {
let referrer = self.specifier.clone();
Ok(vec![(referrer, imports)])
Expand Down
3 changes: 2 additions & 1 deletion src/workspace/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ use url::Url;
use crate::deno_json;
use crate::deno_json::get_ts_config_for_emit;
use crate::deno_json::BenchConfig;
use crate::deno_json::CompilerOptionTypesDeserializeError;
use crate::deno_json::ConfigFile;
use crate::deno_json::ConfigFileError;
use crate::deno_json::ConfigFileRc;
Expand Down Expand Up @@ -1384,7 +1385,7 @@ impl WorkspaceDirectory {

pub fn to_compiler_option_types(
&self,
) -> Result<Vec<(Url, Vec<String>)>, serde_json::Error> {
) -> Result<Vec<(Url, Vec<String>)>, CompilerOptionTypesDeserializeError> {
self
.deno_json_for_compiler_options()
.map(|c| c.to_compiler_option_types())
Expand Down

0 comments on commit d011744

Please sign in to comment.