summaryrefslogtreecommitdiff
path: root/ext/node/errors.rs
blob: 8d1822f7baebe324ddb48fa3a761cdb557e9ff12 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.

use deno_core::error::generic_error;
use deno_core::error::type_error;
use deno_core::error::AnyError;

pub fn err_invalid_module_specifier(
  request: &str,
  reason: &str,
  maybe_base: Option<String>,
) -> AnyError {
  let mut msg = format!(
    "[ERR_INVALID_MODULE_SPECIFIER] Invalid module \"{}\" {}",
    request, reason
  );

  if let Some(base) = maybe_base {
    msg = format!("{} imported from {}", msg, base);
  }

  type_error(msg)
}

#[allow(unused)]
pub fn err_invalid_package_config(
  path: &str,
  maybe_base: Option<String>,
  maybe_message: Option<String>,
) -> AnyError {
  let mut msg = format!(
    "[ERR_INVALID_PACKAGE_CONFIG] Invalid package config {}",
    path
  );

  if let Some(base) = maybe_base {
    msg = format!("{} while importing {}", msg, base);
  }

  if let Some(message) = maybe_message {
    msg = format!("{}. {}", msg, message);
  }

  generic_error(msg)
}

#[allow(unused)]
pub fn err_module_not_found(path: &str, base: &str, typ: &str) -> AnyError {
  generic_error(format!(
    "[ERR_MODULE_NOT_FOUND] Cannot find {} \"{}\" imported from \"{}\"",
    typ, path, base
  ))
}

pub fn err_invalid_package_target(
  pkg_path: String,
  key: String,
  target: String,
  is_import: bool,
  maybe_base: Option<String>,
) -> AnyError {
  let rel_error = !is_import && !target.is_empty() && !target.starts_with("./");
  let mut msg = "[ERR_INVALID_PACKAGE_TARGET]".to_string();

  if key == "." {
    assert!(!is_import);
    msg = format!("{} Invalid \"exports\" main target {} defined in the package config {}package.json", msg, target, pkg_path)
  } else {
    let ie = if is_import { "imports" } else { "exports" };
    msg = format!("{} Invalid \"{}\" target {} defined for '{}' in the package config {}package.json", msg, ie, target, key, pkg_path)
  };

  if let Some(base) = maybe_base {
    msg = format!("{} imported from {}", msg, base);
  };
  if rel_error {
    msg = format!("{}; target must start with \"./\"", msg);
  }

  generic_error(msg)
}

pub fn err_package_path_not_exported(
  pkg_path: String,
  subpath: String,
  maybe_base: Option<String>,
) -> AnyError {
  let mut msg = "[ERR_PACKAGE_PATH_NOT_EXPORTED]".to_string();

  if subpath == "." {
    msg = format!(
      "{} No \"exports\" main defined in {}package.json",
      msg, pkg_path
    );
  } else {
    msg = format!("{} Package subpath \'{}\' is not defined by \"exports\" in {}package.json", msg, subpath, pkg_path);
  };

  if let Some(base) = maybe_base {
    msg = format!("{} imported from {}", msg, base);
  }

  generic_error(msg)
}

pub fn err_package_import_not_defined(
  specifier: &str,
  package_path: Option<String>,
  base: &str,
) -> AnyError {
  let mut msg = format!(
    "[ERR_PACKAGE_IMPORT_NOT_DEFINED] Package import specifier \"{}\" is not defined in",
    specifier
  );

  if let Some(package_path) = package_path {
    msg = format!("{} in package {}package.json", msg, package_path);
  }

  msg = format!("{} imported from {}", msg, base);

  type_error(msg)
}