diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-04-01 02:07:11 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-01 07:07:11 +0100 |
commit | 8698492128310f713993bb115985d41d3fdca2db (patch) | |
tree | 8d278c37c815eae7e816f7dc10fc51c1d5c2ec4e | |
parent | b8af46e0075f659f4e373e249b0f19b3cb0f62a9 (diff) |
fix(node): handle empty 'main' entry in pkg json (#23155)
12 files changed, 43 insertions, 4 deletions
diff --git a/ext/node/package_json.rs b/ext/node/package_json.rs index 9d6a491b5..9ac3a0969 100644 --- a/ext/node/package_json.rs +++ b/ext/node/package_json.rs @@ -213,12 +213,13 @@ impl PackageJson { Ok(package_json) } - pub fn main(&self, referrer_kind: NodeModuleKind) -> Option<&String> { - if referrer_kind == NodeModuleKind::Esm && self.typ == "module" { + pub fn main(&self, referrer_kind: NodeModuleKind) -> Option<&str> { + let main = if referrer_kind == NodeModuleKind::Esm && self.typ == "module" { self.module.as_ref().or(self.main.as_ref()) } else { self.main.as_ref() - } + }; + main.map(|m| m.trim()).filter(|m| !m.is_empty()) } pub fn specifier(&self) -> ModuleSpecifier { diff --git a/ext/node/resolution.rs b/ext/node/resolution.rs index d878a5059..50c4e2bb5 100644 --- a/ext/node/resolution.rs +++ b/ext/node/resolution.rs @@ -1232,7 +1232,7 @@ impl NodeResolver { ) -> Result<Option<ModuleSpecifier>, AnyError> { let maybe_main = if mode.is_types() { match package_json.types.as_ref() { - Some(types) => Some(types), + Some(types) => Some(types.as_str()), None => { // fallback to checking the main entrypoint for // a corresponding declaration file diff --git a/tests/specs/check/npm_pkg_empty_main_entry/__test__.jsonc b/tests/specs/check/npm_pkg_empty_main_entry/__test__.jsonc new file mode 100644 index 000000000..a61769ed6 --- /dev/null +++ b/tests/specs/check/npm_pkg_empty_main_entry/__test__.jsonc @@ -0,0 +1,10 @@ +{ + "steps": [{ + "args": "check index.ts", + "output": "check.out", + "exitCode": 1 + }, { + "args": "run index.ts", + "output": "run.out" + }] +} diff --git a/tests/specs/check/npm_pkg_empty_main_entry/check.out b/tests/specs/check/npm_pkg_empty_main_entry/check.out new file mode 100644 index 000000000..9fcc4b290 --- /dev/null +++ b/tests/specs/check/npm_pkg_empty_main_entry/check.out @@ -0,0 +1,5 @@ +Check file:///[WILDLINE]/index.ts +error: TS2322 [ERROR]: Type 'number' is not assignable to type 'string'. +const result: string = add(1, 2); + ~~~~~~ + at file:///[WILDLINE]/index.ts:4:7 diff --git a/tests/specs/check/npm_pkg_empty_main_entry/deno.json b/tests/specs/check/npm_pkg_empty_main_entry/deno.json new file mode 100644 index 000000000..6134d86d1 --- /dev/null +++ b/tests/specs/check/npm_pkg_empty_main_entry/deno.json @@ -0,0 +1,3 @@ +{ + "unstable": ["byonm"] +} diff --git a/tests/specs/check/npm_pkg_empty_main_entry/index.ts b/tests/specs/check/npm_pkg_empty_main_entry/index.ts new file mode 100644 index 000000000..45966c024 --- /dev/null +++ b/tests/specs/check/npm_pkg_empty_main_entry/index.ts @@ -0,0 +1,5 @@ +// this package has an empty "main" entry in its package.json for both the package and @types/package +import { add } from "package"; + +const result: string = add(1, 2); +console.log(result); diff --git a/tests/specs/check/npm_pkg_empty_main_entry/node_modules/@types/package/index.d.ts b/tests/specs/check/npm_pkg_empty_main_entry/node_modules/@types/package/index.d.ts new file mode 100644 index 000000000..9b197eb1e --- /dev/null +++ b/tests/specs/check/npm_pkg_empty_main_entry/node_modules/@types/package/index.d.ts @@ -0,0 +1 @@ +export function add(a: number, b: number): number; diff --git a/tests/specs/check/npm_pkg_empty_main_entry/node_modules/@types/package/package.json b/tests/specs/check/npm_pkg_empty_main_entry/node_modules/@types/package/package.json new file mode 100644 index 000000000..dbb176e65 --- /dev/null +++ b/tests/specs/check/npm_pkg_empty_main_entry/node_modules/@types/package/package.json @@ -0,0 +1,3 @@ +{ + "main": "" +}
\ No newline at end of file diff --git a/tests/specs/check/npm_pkg_empty_main_entry/node_modules/package/index.js b/tests/specs/check/npm_pkg_empty_main_entry/node_modules/package/index.js new file mode 100644 index 000000000..62c45aa26 --- /dev/null +++ b/tests/specs/check/npm_pkg_empty_main_entry/node_modules/package/index.js @@ -0,0 +1 @@ +module.exports.add = (a, b) => a + b; diff --git a/tests/specs/check/npm_pkg_empty_main_entry/node_modules/package/package.json b/tests/specs/check/npm_pkg_empty_main_entry/node_modules/package/package.json new file mode 100644 index 000000000..dbb176e65 --- /dev/null +++ b/tests/specs/check/npm_pkg_empty_main_entry/node_modules/package/package.json @@ -0,0 +1,3 @@ +{ + "main": "" +}
\ No newline at end of file diff --git a/tests/specs/check/npm_pkg_empty_main_entry/package.json b/tests/specs/check/npm_pkg_empty_main_entry/package.json new file mode 100644 index 000000000..fd3fd8d4e --- /dev/null +++ b/tests/specs/check/npm_pkg_empty_main_entry/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "package": "*", + "@types/package": "*" + } +} diff --git a/tests/specs/check/npm_pkg_empty_main_entry/run.out b/tests/specs/check/npm_pkg_empty_main_entry/run.out new file mode 100644 index 000000000..00750edc0 --- /dev/null +++ b/tests/specs/check/npm_pkg_empty_main_entry/run.out @@ -0,0 +1 @@ +3 |