Skip to content

Commit

Permalink
Add test that fails
Browse files Browse the repository at this point in the history
  • Loading branch information
sheetalkamat committed Sep 27, 2022
1 parent 16faef1 commit 05d739b
Show file tree
Hide file tree
Showing 4 changed files with 231 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/harness/fakesHosts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ namespace fakes {
}

public write(message: string) {
if (ts.Debug.isDebugging) console.log(message);
this.output.push(message);
}

Expand Down
1 change: 1 addition & 0 deletions src/harness/virtualFileSystemWithWatch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -987,6 +987,7 @@ interface Array<T> { length: number; [n: number]: T; }`
}

write(message: string) {
if (Debug.isDebugging) console.log(message);
this.output.push(message);
}

Expand Down
34 changes: 33 additions & 1 deletion src/testRunner/unittests/tsbuild/moduleResolution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,36 @@ namespace ts.tscWatch {
commandLineArgs: ["-b", "/src/packages/pkg1.tsconfig.json", "/src/packages/pkg2.tsconfig.json", "--verbose", "--traceResolution"],
});
});
}

describe("unittests:: tsbuild:: moduleResolution:: impliedNodeFormat differs between projects for shared file", () => {
verifyTscWithEdits({
scenario: "moduleResolution",
subScenario: "impliedNodeFormat differs between projects for shared file",
fs: () => loadProjectFromFiles({
"/src/projects/a/src/index.ts": "",
"/src/projects/a/tsconfig.json": JSON.stringify({
compilerOptions: { strict: true }
}),
"/src/projects/b/src/index.ts": Utils.dedent`
import pg from "pg";
pg.foo();
`,
"/src/projects/b/tsconfig.json": JSON.stringify({
compilerOptions: { strict: true, module: "node16" }
}),
"/src/projects/b/package.json": JSON.stringify({
name: "b",
type: "module"
}),
"/src/projects/node_modules/@types/pg/index.d.ts": "export function foo(): void;",
"/src/projects/node_modules/@types/pg/package.json": JSON.stringify({
name: "@types/pg",
types: "index.d.ts",
}),
}),
modifyFs: fs => fs.writeFileSync("/lib/lib.es2022.full.d.ts", libFile.content),
commandLineArgs: ["-b", "/src/projects/a", "/src/projects/b", "--verbose", "--traceResolution", "--explainFiles"],
edits: noChangeOnlyRuns
});
});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
Input::
//// [/lib/lib.d.ts]
/// <reference no-default-lib="true"/>
interface Boolean {}
interface Function {}
interface CallableFunction {}
interface NewableFunction {}
interface IArguments {}
interface Number { toExponential: any; }
interface Object {}
interface RegExp {}
interface String { charAt: any; }
interface Array<T> { length: number; [n: number]: T; }
interface ReadonlyArray<T> {}
declare const console: { log(msg: any): void; };

//// [/lib/lib.es2022.full.d.ts]
/// <reference no-default-lib="true"/>
interface Boolean {}
interface Function {}
interface CallableFunction {}
interface NewableFunction {}
interface IArguments {}
interface Number { toExponential: any; }
interface Object {}
interface RegExp {}
interface String { charAt: any; }
interface Array<T> { length: number; [n: number]: T; }

//// [/src/projects/a/src/index.ts]


//// [/src/projects/a/tsconfig.json]
{"compilerOptions":{"strict":true}}

//// [/src/projects/b/package.json]
{"name":"b","type":"module"}

//// [/src/projects/b/src/index.ts]
import pg from "pg";
pg.foo();


//// [/src/projects/b/tsconfig.json]
{"compilerOptions":{"strict":true,"module":"node16"}}

//// [/src/projects/node_modules/@types/pg/index.d.ts]
export function foo(): void;

//// [/src/projects/node_modules/@types/pg/package.json]
{"name":"@types/pg","types":"index.d.ts"}



Output::
/lib/tsc -b /src/projects/a /src/projects/b --verbose --traceResolution --explainFiles
[12:00:22 AM] Projects in this build:
* src/projects/a/tsconfig.json
* src/projects/b/tsconfig.json

[12:00:23 AM] Project 'src/projects/a/tsconfig.json' is out of date because output file 'src/projects/a/src/index.js' does not exist

[12:00:24 AM] Building project '/src/projects/a/tsconfig.json'...

======== Resolving type reference directive 'pg', containing file '/src/projects/a/__inferred type names__.ts', root directory '/src/projects/node_modules/@types'. ========
Resolving with primary search path '/src/projects/node_modules/@types'.
Found 'package.json' at '/src/projects/node_modules/@types/pg/package.json'.
'package.json' does not have a 'typesVersions' field.
'package.json' does not have a 'typings' field.
'package.json' has 'types' field 'index.d.ts' that references '/src/projects/node_modules/@types/pg/index.d.ts'.
File '/src/projects/node_modules/@types/pg/index.d.ts' exist - use it as a name resolution result.
Resolving real path for '/src/projects/node_modules/@types/pg/index.d.ts', result '/src/projects/node_modules/@types/pg/index.d.ts'.
======== Type reference directive 'pg' was successfully resolved to '/src/projects/node_modules/@types/pg/index.d.ts', primary: true. ========
lib/lib.d.ts
Default library for target 'es3'
src/projects/a/src/index.ts
Matched by default include pattern '**/*'
src/projects/node_modules/@types/pg/index.d.ts
Entry point for implicit type library 'pg'
[12:00:26 AM] Project 'src/projects/b/tsconfig.json' is out of date because output file 'src/projects/b/src/index.js' does not exist
[12:00:27 AM] Building project '/src/projects/b/tsconfig.json'...
File '/src/projects/b/src/package.json' does not exist.
Found 'package.json' at '/src/projects/b/package.json'.
'package.json' does not have a 'typesVersions' field.
======== Resolving module 'pg' from '/src/projects/b/src/index.ts'. ========
Module resolution kind is not specified, using 'Node16'.
File '/src/projects/b/src/package.json' does not exist according to earlier cached lookups.
File '/src/projects/b/package.json' exists according to earlier cached lookups.
Loading module 'pg' from 'node_modules' folder, target file type 'TypeScript'.
Directory '/src/projects/b/src/node_modules' does not exist, skipping all lookups in it.
Directory '/src/projects/b/node_modules' does not exist, skipping all lookups in it.
File '/src/projects/node_modules/@types/pg/package.json' exists according to earlier cached lookups.
'package.json' does not have a 'typings' field.
'package.json' has 'types' field 'index.d.ts' that references '/src/projects/node_modules/@types/pg/index.d.ts'.
File '/src/projects/node_modules/@types/pg/index.d.ts' exist - use it as a name resolution result.
Resolving real path for '/src/projects/node_modules/@types/pg/index.d.ts', result '/src/projects/node_modules/@types/pg/index.d.ts'.
======== Module name 'pg' was successfully resolved to '/src/projects/node_modules/@types/pg/index.d.ts'. ========
File '/src/projects/node_modules/@types/pg/package.json' exists according to earlier cached lookups.
======== Resolving type reference directive 'pg', containing file '/src/projects/b/__inferred type names__.ts', root directory '/src/projects/node_modules/@types'. ========
Resolving with primary search path '/src/projects/node_modules/@types'.
File '/src/projects/node_modules/@types/pg/package.json' exists according to earlier cached lookups.
'package.json' does not have a 'typings' field.
'package.json' has 'types' field 'index.d.ts' that references '/src/projects/node_modules/@types/pg/index.d.ts'.
File '/src/projects/node_modules/@types/pg/index.d.ts' exist - use it as a name resolution result.
Resolving real path for '/src/projects/node_modules/@types/pg/index.d.ts', result '/src/projects/node_modules/@types/pg/index.d.ts'.
======== Type reference directive 'pg' was successfully resolved to '/src/projects/node_modules/@types/pg/index.d.ts', primary: true. ========
File '/lib/package.json' does not exist.
File '/package.json' does not exist.
src/projects/b/src/index.ts:1:8 - error TS1192: Module '"/src/projects/node_modules/@types/pg/index"' has no default export.
1 import pg from "pg";
   ~~
lib/lib.es2022.full.d.ts
Default library for target 'es2022'
src/projects/node_modules/@types/pg/index.d.ts
Imported via "pg" from file 'src/projects/b/src/index.ts'
Entry point for implicit type library 'pg'
src/projects/b/src/index.ts
Matched by default include pattern '**/*'
File is ECMAScript module because 'src/projects/b/package.json' has field "type" with value "module"
Found 1 error.
exitCode:: ExitStatus.DiagnosticsPresent_OutputsGenerated
//// [/src/projects/a/src/index.js]
"use strict";
Change:: no-change-run
Input::
Output::
/lib/tsc -b /src/projects/a /src/projects/b --verbose --traceResolution --explainFiles
[12:00:28 AM] Projects in this build:
* src/projects/a/tsconfig.json
* src/projects/b/tsconfig.json
[12:00:29 AM] Project 'src/projects/a/tsconfig.json' is up to date because newest input 'src/projects/a/src/index.ts' is older than output 'src/projects/a/src/index.js'
[12:00:30 AM] Project 'src/projects/b/tsconfig.json' is out of date because output file 'src/projects/b/src/index.js' does not exist
[12:00:31 AM] Building project '/src/projects/b/tsconfig.json'...
File '/src/projects/b/src/package.json' does not exist.
Found 'package.json' at '/src/projects/b/package.json'.
'package.json' does not have a 'typesVersions' field.
======== Resolving module 'pg' from '/src/projects/b/src/index.ts'. ========
Module resolution kind is not specified, using 'Node16'.
File '/src/projects/b/src/package.json' does not exist according to earlier cached lookups.
File '/src/projects/b/package.json' exists according to earlier cached lookups.
Loading module 'pg' from 'node_modules' folder, target file type 'TypeScript'.
Directory '/src/projects/b/src/node_modules' does not exist, skipping all lookups in it.
Directory '/src/projects/b/node_modules' does not exist, skipping all lookups in it.
Found 'package.json' at '/src/projects/node_modules/@types/pg/package.json'.
'package.json' does not have a 'typesVersions' field.
'package.json' does not have a 'typings' field.
'package.json' has 'types' field 'index.d.ts' that references '/src/projects/node_modules/@types/pg/index.d.ts'.
File '/src/projects/node_modules/@types/pg/index.d.ts' exist - use it as a name resolution result.
Resolving real path for '/src/projects/node_modules/@types/pg/index.d.ts', result '/src/projects/node_modules/@types/pg/index.d.ts'.
======== Module name 'pg' was successfully resolved to '/src/projects/node_modules/@types/pg/index.d.ts'. ========
File '/src/projects/node_modules/@types/pg/package.json' exists according to earlier cached lookups.
======== Resolving type reference directive 'pg', containing file '/src/projects/b/__inferred type names__.ts', root directory '/src/projects/node_modules/@types'. ========
Resolving with primary search path '/src/projects/node_modules/@types'.
File '/src/projects/node_modules/@types/pg/package.json' exists according to earlier cached lookups.
'package.json' does not have a 'typings' field.
'package.json' has 'types' field 'index.d.ts' that references '/src/projects/node_modules/@types/pg/index.d.ts'.
File '/src/projects/node_modules/@types/pg/index.d.ts' exist - use it as a name resolution result.
Resolving real path for '/src/projects/node_modules/@types/pg/index.d.ts', result '/src/projects/node_modules/@types/pg/index.d.ts'.
======== Type reference directive 'pg' was successfully resolved to '/src/projects/node_modules/@types/pg/index.d.ts', primary: true. ========
File '/lib/package.json' does not exist.
File '/package.json' does not exist.
lib/lib.es2022.full.d.ts
Default library for target 'es2022'
src/projects/node_modules/@types/pg/index.d.ts
Imported via "pg" from file 'src/projects/b/src/index.ts'
Entry point for implicit type library 'pg'
File is CommonJS module because 'src/projects/node_modules/@types/pg/package.json' does not have field "type"
src/projects/b/src/index.ts
Matched by default include pattern '**/*'
File is ECMAScript module because 'src/projects/b/package.json' has field "type" with value "module"
exitCode:: ExitStatus.Success


//// [/src/projects/b/src/index.js]
import pg from "pg";
pg.foo();


0 comments on commit 05d739b

Please sign in to comment.