mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Fix self-name input linking for --allowJs --declaration projects (#54819)
Co-authored-by: Jake Bailey <5341706+jakebailey@users.noreply.github.com>
This commit is contained in:
co-authored by
Jake Bailey
parent
88cb76d314
commit
5932420b0f
@@ -657,6 +657,7 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [
|
||||
{
|
||||
name: "checkJs",
|
||||
type: "boolean",
|
||||
affectsModuleResolution: true,
|
||||
showInSimplifiedHelpView: true,
|
||||
category: Diagnostics.JavaScript_Support,
|
||||
description: Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files,
|
||||
|
||||
@@ -35,6 +35,7 @@ import {
|
||||
forEach,
|
||||
forEachAncestorDirectory,
|
||||
formatMessage,
|
||||
getAllowJSCompilerOption,
|
||||
getBaseFileName,
|
||||
GetCanonicalFileName,
|
||||
getCommonSourceDirectory,
|
||||
@@ -2420,7 +2421,16 @@ function loadModuleFromSelfNameReference(extensions: Extensions, moduleName: str
|
||||
// in order to be consistent with (non-self) library-name loading in
|
||||
// `loadModuleFromNearestNodeModulesDirectoryWorker`, which uses two passes in order
|
||||
// to prioritize `@types` packages higher up the directory tree over untyped
|
||||
// implementation packages.
|
||||
// implementation packages. See the selfNameModuleAugmentation.ts test for why this
|
||||
// matters.
|
||||
//
|
||||
// However, there's an exception. If the user has `allowJs` and `declaration`, we need
|
||||
// to ensure that self-name imports of their own package can resolve back to their
|
||||
// input JS files via `tryLoadInputFileForPath` at a higher priority than their output
|
||||
// declaration files, so we need to do a single pass with all extensions for that case.
|
||||
if (getAllowJSCompilerOption(state.compilerOptions) && !pathContainsNodeModules(directory)) {
|
||||
return loadModuleFromExports(scope, extensions, subpath, state, cache, redirectedReference);
|
||||
}
|
||||
const priorityExtensions = extensions & (Extensions.TypeScript | Extensions.Declaration);
|
||||
const secondaryExtensions = extensions & ~(Extensions.TypeScript | Extensions.Declaration);
|
||||
return loadModuleFromExports(scope, priorityExtensions, subpath, state, cache, redirectedReference)
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
//// [tests/cases/conformance/node/allowJs/nodeAllowJsPackageSelfName2.ts] ////
|
||||
|
||||
//// [package.json]
|
||||
{
|
||||
"name": "js-self-name-import",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
"./*": {
|
||||
"types": "./types/src/*",
|
||||
"default": "./src/*"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//// [foo.d.ts]
|
||||
export const foo: 1;
|
||||
|
||||
//// [foo.d.ts]
|
||||
export {};
|
||||
|
||||
//// [foo.js]
|
||||
export const foo = 1;
|
||||
|
||||
//// [foo.js]
|
||||
import { foo } from "js-self-name-import/foo.js";
|
||||
|
||||
|
||||
|
||||
|
||||
//// [foo.d.ts]
|
||||
export const foo: 1;
|
||||
//// [foo.d.ts]
|
||||
export {};
|
||||
@@ -0,0 +1,10 @@
|
||||
//// [tests/cases/conformance/node/allowJs/nodeAllowJsPackageSelfName2.ts] ////
|
||||
|
||||
=== /src/foo.js ===
|
||||
export const foo = 1;
|
||||
>foo : Symbol(foo, Decl(foo.js, 0, 12))
|
||||
|
||||
=== /test/foo.js ===
|
||||
import { foo } from "js-self-name-import/foo.js";
|
||||
>foo : Symbol(foo, Decl(foo.js, 0, 8))
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
//// [tests/cases/conformance/node/allowJs/nodeAllowJsPackageSelfName2.ts] ////
|
||||
|
||||
=== /src/foo.js ===
|
||||
export const foo = 1;
|
||||
>foo : 1
|
||||
>1 : 1
|
||||
|
||||
=== /test/foo.js ===
|
||||
import { foo } from "js-self-name-import/foo.js";
|
||||
>foo : 1
|
||||
|
||||
+3
-3
@@ -69,7 +69,7 @@ Info seq [hh:mm:ss:mss] Open files:
|
||||
Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/index.ts ProjectRootPath: undefined
|
||||
Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json
|
||||
DocumentRegistry::
|
||||
Key:: undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
|
||||
Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
|
||||
/user/username/projects/myproject/index.ts: TS 1
|
||||
/user/username/projects/myproject/module1.d.ts: TS 1
|
||||
/a/lib/lib.d.ts: TS 1
|
||||
@@ -88,7 +88,7 @@ Info seq [hh:mm:ss:mss] Files (2)
|
||||
|
||||
Info seq [hh:mm:ss:mss] -----------------------------------------------
|
||||
DocumentRegistry::
|
||||
Key:: undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
|
||||
Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
|
||||
/user/username/projects/myproject/index.ts: TS 1
|
||||
/a/lib/lib.d.ts: TS 1
|
||||
Info seq [hh:mm:ss:mss] FileWatcher:: Triggered with /user/username/projects/myproject/module1.d.ts 1:: WatchInfo: /user/username/projects/myproject/module1.d.ts 500 undefined WatchType: Closed Script info
|
||||
@@ -111,7 +111,7 @@ Info seq [hh:mm:ss:mss] Files (3)
|
||||
|
||||
Info seq [hh:mm:ss:mss] -----------------------------------------------
|
||||
DocumentRegistry::
|
||||
Key:: undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
|
||||
Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
|
||||
/user/username/projects/myproject/index.ts: TS 1
|
||||
/a/lib/lib.d.ts: TS 1
|
||||
/user/username/projects/myproject/module1.d.ts: TS 1
|
||||
+3
-3
@@ -69,7 +69,7 @@ Info seq [hh:mm:ss:mss] Open files:
|
||||
Info seq [hh:mm:ss:mss] FileName: /user/username/projects/myproject/index.ts ProjectRootPath: undefined
|
||||
Info seq [hh:mm:ss:mss] Projects: /user/username/projects/myproject/tsconfig.json
|
||||
DocumentRegistry::
|
||||
Key:: undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
|
||||
Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
|
||||
/user/username/projects/myproject/index.ts: TS 1
|
||||
/user/username/projects/myproject/module1.d.ts: TS 1
|
||||
/a/lib/lib.d.ts: TS 1
|
||||
@@ -88,7 +88,7 @@ Info seq [hh:mm:ss:mss] Files (2)
|
||||
|
||||
Info seq [hh:mm:ss:mss] -----------------------------------------------
|
||||
DocumentRegistry::
|
||||
Key:: undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
|
||||
Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
|
||||
/user/username/projects/myproject/index.ts: TS 1
|
||||
/a/lib/lib.d.ts: TS 1
|
||||
Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/tsconfig.json
|
||||
@@ -109,7 +109,7 @@ Info seq [hh:mm:ss:mss] Files (3)
|
||||
|
||||
Info seq [hh:mm:ss:mss] -----------------------------------------------
|
||||
DocumentRegistry::
|
||||
Key:: undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
|
||||
Key:: undefined|undefined|undefined|undefined|undefined|false|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined|undefined
|
||||
/user/username/projects/myproject/index.ts: TS 1
|
||||
/a/lib/lib.d.ts: TS 1
|
||||
/user/username/projects/myproject/module1.d.ts: TS 1
|
||||
@@ -0,0 +1,38 @@
|
||||
// @Filename: /tsconfig.json
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "nodenext",
|
||||
"target": "esnext",
|
||||
"emitDeclarationOnly": true,
|
||||
"declaration": true,
|
||||
"declarationDir": "./types",
|
||||
"checkJs": true,
|
||||
"rootDir": ".",
|
||||
"strict": true,
|
||||
},
|
||||
"include": ["src", "test"]
|
||||
}
|
||||
|
||||
// @Filename: /package.json
|
||||
{
|
||||
"name": "js-self-name-import",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
"./*": {
|
||||
"types": "./types/src/*",
|
||||
"default": "./src/*"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// @Filename: /types/src/foo.d.ts
|
||||
export const foo: 1;
|
||||
|
||||
// @Filename: /types/test/foo.d.ts
|
||||
export {};
|
||||
|
||||
// @Filename: /src/foo.js
|
||||
export const foo = 1;
|
||||
|
||||
// @Filename: /test/foo.js
|
||||
import { foo } from "js-self-name-import/foo.js";
|
||||
Reference in New Issue
Block a user