diff options
Diffstat (limited to 'cli')
9 files changed, 100 insertions, 28 deletions
diff --git a/cli/node/mod.rs b/cli/node/mod.rs index 7bb28d984..9ab4574ef 100644 --- a/cli/node/mod.rs +++ b/cli/node/mod.rs @@ -25,6 +25,7 @@ use deno_runtime::deno_node::legacy_main_resolve; use deno_runtime::deno_node::package_exports_resolve; use deno_runtime::deno_node::package_imports_resolve; use deno_runtime::deno_node::package_resolve; +use deno_runtime::deno_node::path_to_declaration_path; use deno_runtime::deno_node::NodeModuleKind; use deno_runtime::deno_node::PackageJson; use deno_runtime::deno_node::PathClean; @@ -548,34 +549,6 @@ fn mode_conditions(mode: NodeResolutionMode) -> &'static [&'static str] { } } -/// Checks if the resolved file has a corresponding declaration file. -fn path_to_declaration_path( - path: PathBuf, - referrer_kind: NodeModuleKind, -) -> PathBuf { - let lowercase_path = path.to_string_lossy().to_lowercase(); - if lowercase_path.ends_with(".d.ts") - || lowercase_path.ends_with(".d.cts") - || lowercase_path.ends_with(".d.ts") - { - return path; - } - let specific_dts_path = match referrer_kind { - NodeModuleKind::Cjs => path.with_extension("d.cts"), - NodeModuleKind::Esm => path.with_extension("d.mts"), - }; - if specific_dts_path.exists() { - specific_dts_path - } else { - let dts_path = path.with_extension("d.ts"); - if dts_path.exists() { - dts_path - } else { - path - } - } -} - pub fn node_resolve_binary_export( pkg_req: &NpmPackageReq, bin_name: Option<&str>, diff --git a/cli/tests/integration/npm_tests.rs b/cli/tests/integration/npm_tests.rs index e6990f0e0..e29c1452e 100644 --- a/cli/tests/integration/npm_tests.rs +++ b/cli/tests/integration/npm_tests.rs @@ -266,6 +266,14 @@ itest!(check_local { exit_code: 1, }); +itest!(types { + args: "check --quiet npm/types/main.ts", + output: "npm/types/main.out", + envs: env_vars(), + http_server: true, + exit_code: 1, +}); + itest!(types_ambient_module { args: "check --quiet npm/types_ambient_module/main.ts", output: "npm/types_ambient_module/main.out", diff --git a/cli/tests/testdata/npm/registry/@denotest/types/1.0.0/index.d.ts b/cli/tests/testdata/npm/registry/@denotest/types/1.0.0/index.d.ts new file mode 100644 index 000000000..afe876c4d --- /dev/null +++ b/cli/tests/testdata/npm/registry/@denotest/types/1.0.0/index.d.ts @@ -0,0 +1,4 @@ +export interface Fizzbuzz { + fizz: string; + buzz: string; +}
\ No newline at end of file diff --git a/cli/tests/testdata/npm/registry/@denotest/types/1.0.0/package.json b/cli/tests/testdata/npm/registry/@denotest/types/1.0.0/package.json new file mode 100644 index 000000000..ef927cbe3 --- /dev/null +++ b/cli/tests/testdata/npm/registry/@denotest/types/1.0.0/package.json @@ -0,0 +1,5 @@ +{ + "name": "@denotest/types-ambient", + "version": "1.0.0", + "types": "./index.d.ts" +} diff --git a/cli/tests/testdata/npm/registry/@denotest/types_imported/1.0.0/index.d.ts b/cli/tests/testdata/npm/registry/@denotest/types_imported/1.0.0/index.d.ts new file mode 100644 index 000000000..559cdb2ec --- /dev/null +++ b/cli/tests/testdata/npm/registry/@denotest/types_imported/1.0.0/index.d.ts @@ -0,0 +1,4 @@ +export interface SomeInterface { + prop: string; + prop2: number; +}
\ No newline at end of file diff --git a/cli/tests/testdata/npm/registry/@denotest/types_imported/1.0.0/package.json b/cli/tests/testdata/npm/registry/@denotest/types_imported/1.0.0/package.json new file mode 100644 index 000000000..ef927cbe3 --- /dev/null +++ b/cli/tests/testdata/npm/registry/@denotest/types_imported/1.0.0/package.json @@ -0,0 +1,5 @@ +{ + "name": "@denotest/types-ambient", + "version": "1.0.0", + "types": "./index.d.ts" +} diff --git a/cli/tests/testdata/npm/registry/@denotest/types_imported/1.0.0/subpath.d.ts b/cli/tests/testdata/npm/registry/@denotest/types_imported/1.0.0/subpath.d.ts new file mode 100644 index 000000000..883cf037a --- /dev/null +++ b/cli/tests/testdata/npm/registry/@denotest/types_imported/1.0.0/subpath.d.ts @@ -0,0 +1,4 @@ +export interface Foobar { + foo: string; + bar: string; +}
\ No newline at end of file diff --git a/cli/tests/testdata/npm/types/main.out b/cli/tests/testdata/npm/types/main.out new file mode 100644 index 000000000..c43923478 --- /dev/null +++ b/cli/tests/testdata/npm/types/main.out @@ -0,0 +1,51 @@ +error: TS2322 [ERROR]: Type 'number' is not assignable to type 'string'. + bar: 1, + ~~~ + at [WILDCARD]/npm/types/main.ts:7:3 + + The expected type comes from property 'bar' which is declared here on type 'Foobar' + bar: string; + ~~~ + at [WILDCARD]/@denotest/types_imported/1.0.0/subpath.d.ts:3:5 + +TS2322 [ERROR]: Type 'number' is not assignable to type 'string'. + prop: 1, + ~~~~ + at [WILDCARD]/npm/types/main.ts:11:3 + + The expected type comes from property 'prop' which is declared here on type 'SomeInterface' + prop: string; + ~~~~ + at [WILDCARD]/@denotest/types_imported/1.0.0/index.d.ts:2:5 + +TS2322 [ERROR]: Type 'string' is not assignable to type 'number'. + prop2: "asdf", + ~~~~~ + at [WILDCARD]/npm/types/main.ts:12:3 + + The expected type comes from property 'prop2' which is declared here on type 'SomeInterface' + prop2: number; + ~~~~~ + at [WILDCARD]/@denotest/types_imported/1.0.0/index.d.ts:3:5 + +TS2322 [ERROR]: Type 'number' is not assignable to type 'string'. + fizz: 1, + ~~~~ + at [WILDCARD]/npm/types/main.ts:16:3 + + The expected type comes from property 'fizz' which is declared here on type 'Fizzbuzz' + fizz: string; + ~~~~ + at [WILDCARD]/@denotest/types/1.0.0/index.d.ts:2:3 + +TS2322 [ERROR]: Type 'number' is not assignable to type 'string'. + buzz: 2, + ~~~~ + at [WILDCARD]/npm/types/main.ts:17:3 + + The expected type comes from property 'buzz' which is declared here on type 'Fizzbuzz' + buzz: string; + ~~~~ + at [WILDCARD]/@denotest/types/1.0.0/index.d.ts:3:3 + +Found 5 errors. diff --git a/cli/tests/testdata/npm/types/main.ts b/cli/tests/testdata/npm/types/main.ts new file mode 100644 index 000000000..324ed723f --- /dev/null +++ b/cli/tests/testdata/npm/types/main.ts @@ -0,0 +1,18 @@ +import type { Fizzbuzz } from "npm:@denotest/types"; +import type { SomeInterface } from "npm:@denotest/types_imported"; +import type { Foobar as FooInterface } from "npm:@denotest/types_imported/subpath"; + +const foobar: FooInterface = { + foo: "foo", + bar: 1, +}; + +const i: SomeInterface = { + prop: 1, + prop2: "asdf", +}; + +const fizzbuzz: Fizzbuzz = { + fizz: 1, + buzz: 2, +}; |