From c61bc85b1cbd9d4b71e33a42b876bda93ea4c884 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 5 May 2021 12:41:00 -0700 Subject: [PATCH 1/2] Baseline without the actual implementation of the flag --- src/compiler/commandLineParser.ts | 6 + src/compiler/diagnosticMessages.json | 4 + src/compiler/types.ts | 1 + src/testRunner/unittests/tsc/incremental.ts | 31 ++ .../reference/api/tsserverlibrary.d.ts | 1 + tests/baselines/reference/api/typescript.d.ts | 1 + .../assumeChangesAffectShape/tsconfig.json | 5 + .../initial-build/assumeChangesAffectShape.js | 342 ++++++++++++++++++ 8 files changed, 391 insertions(+) create mode 100644 tests/baselines/reference/showConfig/Shows tsconfig for single option/assumeChangesAffectShape/tsconfig.json create mode 100644 tests/baselines/reference/tsc/incremental/initial-build/assumeChangesAffectShape.js diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 253e38a5295b5..6e8a399609cc4 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -272,6 +272,12 @@ namespace ts { category: Diagnostics.Advanced_Options, description: Diagnostics.Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it }, + { + name: "assumeChangesAffectShape", + type: "boolean", + category: Diagnostics.Advanced_Options, + description: Diagnostics.Have_recompiles_in_incremental_and_watch_assume_that_any_change_to_file_can_affect_its_shape_resulting_in_affecting_it_s_dependecies + }, { name: "locale", type: "string", diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index f4fbe932e93f9..d75709343a8ae 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -5057,6 +5057,10 @@ "category": "Message", "code": 6388 }, + "Have recompiles in '--incremental' and '--watch' assume that any change to file can affect its shape resulting in affecting it's dependecies.": { + "category": "Message", + "code": 6389 + }, "The expected type comes from property '{0}' which is declared here on type '{1}'": { "category": "Message", diff --git a/src/compiler/types.ts b/src/compiler/types.ts index f7183d7dd6c27..d8c8c9daa80ae 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -5965,6 +5965,7 @@ namespace ts { noImplicitUseStrict?: boolean; noPropertyAccessFromIndexSignature?: boolean; assumeChangesOnlyAffectDirectDependencies?: boolean; + assumeChangesAffectShape?: boolean; noLib?: boolean; noResolve?: boolean; noUncheckedIndexedAccess?: boolean; diff --git a/src/testRunner/unittests/tsc/incremental.ts b/src/testRunner/unittests/tsc/incremental.ts index 7e975b89ce6b2..bed964f8b7214 100644 --- a/src/testRunner/unittests/tsc/incremental.ts +++ b/src/testRunner/unittests/tsc/incremental.ts @@ -293,6 +293,37 @@ const a: string = 10;`, "utf-8"), baselinePrograms: true, }); + verifyTscSerializedIncrementalEdits({ + scenario: "incremental", + subScenario: "assumeChangesAffectShape", + fs: () => loadProjectFromFiles({ + "/src/project/main.ts": `import { foo } from "./module";foo();`, + "/src/project/module.ts": `export function foo(): string { return "hello"; }`, + "/src/project/extraFile.ts": "export const extra = 10;", + "/src/project/tsconfig.json": JSON.stringify({ + compilerOptions: { assumeChangesAffectShape: true } + }) + }), + commandLineArgs: ["--incremental", "--p", "src/project"], + incrementalScenarios: [ + { + subScenario: "Local edit to module", + modifyFs: fs => replaceText(fs, "/src/project/module.ts", "hello", "hello world"), + buildKind: BuildKind.IncrementalDtsUnchanged + }, + { + subScenario: "Local edit to module again", + modifyFs: fs => replaceText(fs, "/src/project/module.ts", "hello", "hello world"), + buildKind: BuildKind.IncrementalDtsUnchanged + }, + { + subScenario: "Api change edit to module", + modifyFs: fs => prependText(fs, "/src/project/module.ts", "export const x = 10;"), + buildKind: BuildKind.IncrementalDtsUnchanged + }, + ] + }); + describe("when synthesized imports are added to files", () => { function getJsxLibraryContent() { return ` diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index e94b1da823f34..f6efb77e97b9a 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -2861,6 +2861,7 @@ declare namespace ts { noImplicitUseStrict?: boolean; noPropertyAccessFromIndexSignature?: boolean; assumeChangesOnlyAffectDirectDependencies?: boolean; + assumeChangesAffectShape?: boolean; noLib?: boolean; noResolve?: boolean; noUncheckedIndexedAccess?: boolean; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 7b8a24ba088b4..b7c17b912a8a7 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -2861,6 +2861,7 @@ declare namespace ts { noImplicitUseStrict?: boolean; noPropertyAccessFromIndexSignature?: boolean; assumeChangesOnlyAffectDirectDependencies?: boolean; + assumeChangesAffectShape?: boolean; noLib?: boolean; noResolve?: boolean; noUncheckedIndexedAccess?: boolean; diff --git a/tests/baselines/reference/showConfig/Shows tsconfig for single option/assumeChangesAffectShape/tsconfig.json b/tests/baselines/reference/showConfig/Shows tsconfig for single option/assumeChangesAffectShape/tsconfig.json new file mode 100644 index 0000000000000..2b7ca994a991c --- /dev/null +++ b/tests/baselines/reference/showConfig/Shows tsconfig for single option/assumeChangesAffectShape/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "assumeChangesAffectShape": true + } +} diff --git a/tests/baselines/reference/tsc/incremental/initial-build/assumeChangesAffectShape.js b/tests/baselines/reference/tsc/incremental/initial-build/assumeChangesAffectShape.js new file mode 100644 index 0000000000000..77f7424350950 --- /dev/null +++ b/tests/baselines/reference/tsc/incremental/initial-build/assumeChangesAffectShape.js @@ -0,0 +1,342 @@ +Input:: +//// [/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + +//// [/src/project/extraFile.ts] +export const extra = 10; + +//// [/src/project/main.ts] +import { foo } from "./module";foo(); + +//// [/src/project/module.ts] +export function foo(): string { return "hello"; } + +//// [/src/project/tsconfig.json] +{"compilerOptions":{"assumeChangesAffectShape":true}} + + + +Output:: +/lib/tsc --incremental --p src/project +exitCode:: ExitStatus.Success + + +//// [/src/project/extraFile.js] +"use strict"; +exports.__esModule = true; +exports.extra = void 0; +exports.extra = 10; + + +//// [/src/project/main.js] +"use strict"; +exports.__esModule = true; +var module_1 = require("./module"); +(0, module_1.foo)(); + + +//// [/src/project/module.js] +"use strict"; +exports.__esModule = true; +exports.foo = void 0; +function foo() { return "hello"; } +exports.foo = foo; + + +//// [/src/project/tsconfig.tsbuildinfo] +{"program":{"fileNames":["../../lib/lib.d.ts","./extrafile.ts","./module.ts","./main.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-13403012629-export const extra = 10;","-8446458946-export function foo(): string { return \"hello\"; }","-7083766686-import { foo } from \"./module\";foo();"],"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[[4,1]],"semanticDiagnosticsPerFile":[1,2,4,3]},"version":"FakeTSVersion"} + +//// [/src/project/tsconfig.tsbuildinfo.readable.baseline.txt] +{ + "program": { + "fileNames": [ + "../../lib/lib.d.ts", + "./extrafile.ts", + "./module.ts", + "./main.ts" + ], + "fileNamesList": [ + [ + "./module.ts" + ] + ], + "fileInfos": { + "../../lib/lib.d.ts": { + "version": "3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };", + "signature": "3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true + }, + "./extrafile.ts": { + "version": "-13403012629-export const extra = 10;", + "signature": "-13403012629-export const extra = 10;" + }, + "./module.ts": { + "version": "-8446458946-export function foo(): string { return \"hello\"; }", + "signature": "-8446458946-export function foo(): string { return \"hello\"; }" + }, + "./main.ts": { + "version": "-7083766686-import { foo } from \"./module\";foo();", + "signature": "-7083766686-import { foo } from \"./module\";foo();" + } + }, + "referencedMap": { + "./main.ts": [ + "./module.ts" + ] + }, + "exportedModulesMap": { + "./main.ts": [ + "./module.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + "../../lib/lib.d.ts", + "./extrafile.ts", + "./main.ts", + "./module.ts" + ] + }, + "version": "FakeTSVersion", + "size": 882 +} + + + +Change:: Local edit to module +Input:: +//// [/src/project/module.ts] +export function foo(): string { return "hello world"; } + + + +Output:: +/lib/tsc --incremental --p src/project +exitCode:: ExitStatus.Success + + +//// [/src/project/main.js] file written with same contents +//// [/src/project/module.js] +"use strict"; +exports.__esModule = true; +exports.foo = void 0; +function foo() { return "hello world"; } +exports.foo = foo; + + +//// [/src/project/tsconfig.tsbuildinfo] +{"program":{"fileNames":["../../lib/lib.d.ts","./extrafile.ts","./module.ts","./main.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-13403012629-export const extra = 10;",{"version":"-4300970970-export function foo(): string { return \"hello world\"; }","signature":"-8035635627-export declare function foo(): string;\r\n"},{"version":"-7083766686-import { foo } from \"./module\";foo();","signature":"-4882119183-export {};\r\n"}],"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,4,3]},"version":"FakeTSVersion"} + +//// [/src/project/tsconfig.tsbuildinfo.readable.baseline.txt] +{ + "program": { + "fileNames": [ + "../../lib/lib.d.ts", + "./extrafile.ts", + "./module.ts", + "./main.ts" + ], + "fileNamesList": [ + [ + "./module.ts" + ] + ], + "fileInfos": { + "../../lib/lib.d.ts": { + "version": "3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };", + "signature": "3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true + }, + "./extrafile.ts": { + "version": "-13403012629-export const extra = 10;", + "signature": "-13403012629-export const extra = 10;" + }, + "./module.ts": { + "version": "-4300970970-export function foo(): string { return \"hello world\"; }", + "signature": "-8035635627-export declare function foo(): string;\r\n" + }, + "./main.ts": { + "version": "-7083766686-import { foo } from \"./module\";foo();", + "signature": "-4882119183-export {};\r\n" + } + }, + "referencedMap": { + "./main.ts": [ + "./module.ts" + ] + }, + "exportedModulesMap": {}, + "semanticDiagnosticsPerFile": [ + "../../lib/lib.d.ts", + "./extrafile.ts", + "./main.ts", + "./module.ts" + ] + }, + "version": "FakeTSVersion", + "size": 1017 +} + + + +Change:: Local edit to module again +Input:: +//// [/src/project/module.ts] +export function foo(): string { return "hello world world"; } + + + +Output:: +/lib/tsc --incremental --p src/project +exitCode:: ExitStatus.Success + + +//// [/src/project/module.js] +"use strict"; +exports.__esModule = true; +exports.foo = void 0; +function foo() { return "hello world world"; } +exports.foo = foo; + + +//// [/src/project/tsconfig.tsbuildinfo] +{"program":{"fileNames":["../../lib/lib.d.ts","./extrafile.ts","./module.ts","./main.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-13403012629-export const extra = 10;",{"version":"-3334720882-export function foo(): string { return \"hello world world\"; }","signature":"-8035635627-export declare function foo(): string;\r\n"},{"version":"-7083766686-import { foo } from \"./module\";foo();","signature":"-4882119183-export {};\r\n"}],"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,4,3]},"version":"FakeTSVersion"} + +//// [/src/project/tsconfig.tsbuildinfo.readable.baseline.txt] +{ + "program": { + "fileNames": [ + "../../lib/lib.d.ts", + "./extrafile.ts", + "./module.ts", + "./main.ts" + ], + "fileNamesList": [ + [ + "./module.ts" + ] + ], + "fileInfos": { + "../../lib/lib.d.ts": { + "version": "3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };", + "signature": "3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true + }, + "./extrafile.ts": { + "version": "-13403012629-export const extra = 10;", + "signature": "-13403012629-export const extra = 10;" + }, + "./module.ts": { + "version": "-3334720882-export function foo(): string { return \"hello world world\"; }", + "signature": "-8035635627-export declare function foo(): string;\r\n" + }, + "./main.ts": { + "version": "-7083766686-import { foo } from \"./module\";foo();", + "signature": "-4882119183-export {};\r\n" + } + }, + "referencedMap": { + "./main.ts": [ + "./module.ts" + ] + }, + "exportedModulesMap": {}, + "semanticDiagnosticsPerFile": [ + "../../lib/lib.d.ts", + "./extrafile.ts", + "./main.ts", + "./module.ts" + ] + }, + "version": "FakeTSVersion", + "size": 1023 +} + + + +Change:: Api change edit to module +Input:: +//// [/src/project/module.ts] +export const x = 10;export function foo(): string { return "hello world world"; } + + + +Output:: +/lib/tsc --incremental --p src/project +exitCode:: ExitStatus.Success + + +//// [/src/project/main.js] file written with same contents +//// [/src/project/module.js] +"use strict"; +exports.__esModule = true; +exports.foo = exports.x = void 0; +exports.x = 10; +function foo() { return "hello world world"; } +exports.foo = foo; + + +//// [/src/project/tsconfig.tsbuildinfo] +{"program":{"fileNames":["../../lib/lib.d.ts","./extrafile.ts","./module.ts","./main.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-13403012629-export const extra = 10;",{"version":"-3842804408-export const x = 10;export function foo(): string { return \"hello world world\"; }","signature":"1387636182-export declare const x = 10;\r\nexport declare function foo(): string;\r\n"},{"version":"-7083766686-import { foo } from \"./module\";foo();","signature":"-4882119183-export {};\r\n"}],"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,4,3]},"version":"FakeTSVersion"} + +//// [/src/project/tsconfig.tsbuildinfo.readable.baseline.txt] +{ + "program": { + "fileNames": [ + "../../lib/lib.d.ts", + "./extrafile.ts", + "./module.ts", + "./main.ts" + ], + "fileNamesList": [ + [ + "./module.ts" + ] + ], + "fileInfos": { + "../../lib/lib.d.ts": { + "version": "3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };", + "signature": "3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true + }, + "./extrafile.ts": { + "version": "-13403012629-export const extra = 10;", + "signature": "-13403012629-export const extra = 10;" + }, + "./module.ts": { + "version": "-3842804408-export const x = 10;export function foo(): string { return \"hello world world\"; }", + "signature": "1387636182-export declare const x = 10;\r\nexport declare function foo(): string;\r\n" + }, + "./main.ts": { + "version": "-7083766686-import { foo } from \"./module\";foo();", + "signature": "-4882119183-export {};\r\n" + } + }, + "referencedMap": { + "./main.ts": [ + "./module.ts" + ] + }, + "exportedModulesMap": {}, + "semanticDiagnosticsPerFile": [ + "../../lib/lib.d.ts", + "./extrafile.ts", + "./main.ts", + "./module.ts" + ] + }, + "version": "FakeTSVersion", + "size": 1074 +} + From d52da06f4f23b925a8d2225bfc0c42bae5bfa4e8 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 23 Oct 2020 15:34:13 -0700 Subject: [PATCH 2/2] Implement assumeChangesAffectShape which means any change to file can affect the dependencies This avoids having to generate d.ts files for the sources --- src/compiler/builderState.ts | 3 +- .../initial-build/assumeChangesAffectShape.js | 43 ++++++++++++------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/compiler/builderState.ts b/src/compiler/builderState.ts index c150098fff9fb..f40a1142be05d 100644 --- a/src/compiler/builderState.ts +++ b/src/compiler/builderState.ts @@ -243,7 +243,8 @@ namespace ts { referencedMap, exportedModulesMap, hasCalledUpdateShapeSignature, - useFileVersionAsSignature: !disableUseFileVersionAsSignature && !useOldState + useFileVersionAsSignature: (!disableUseFileVersionAsSignature && !useOldState) || + !!newProgram.getCompilerOptions().assumeChangesAffectShape, }; } diff --git a/tests/baselines/reference/tsc/incremental/initial-build/assumeChangesAffectShape.js b/tests/baselines/reference/tsc/incremental/initial-build/assumeChangesAffectShape.js index 77f7424350950..e4b7b7cf6e79c 100644 --- a/tests/baselines/reference/tsc/incremental/initial-build/assumeChangesAffectShape.js +++ b/tests/baselines/reference/tsc/incremental/initial-build/assumeChangesAffectShape.js @@ -136,7 +136,7 @@ exports.foo = foo; //// [/src/project/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../../lib/lib.d.ts","./extrafile.ts","./module.ts","./main.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-13403012629-export const extra = 10;",{"version":"-4300970970-export function foo(): string { return \"hello world\"; }","signature":"-8035635627-export declare function foo(): string;\r\n"},{"version":"-7083766686-import { foo } from \"./module\";foo();","signature":"-4882119183-export {};\r\n"}],"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,4,3]},"version":"FakeTSVersion"} +{"program":{"fileNames":["../../lib/lib.d.ts","./extrafile.ts","./module.ts","./main.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-13403012629-export const extra = 10;","-4300970970-export function foo(): string { return \"hello world\"; }","-7083766686-import { foo } from \"./module\";foo();"],"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[[4,1]],"semanticDiagnosticsPerFile":[1,2,4,3]},"version":"FakeTSVersion"} //// [/src/project/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -164,11 +164,11 @@ exports.foo = foo; }, "./module.ts": { "version": "-4300970970-export function foo(): string { return \"hello world\"; }", - "signature": "-8035635627-export declare function foo(): string;\r\n" + "signature": "-4300970970-export function foo(): string { return \"hello world\"; }" }, "./main.ts": { "version": "-7083766686-import { foo } from \"./module\";foo();", - "signature": "-4882119183-export {};\r\n" + "signature": "-7083766686-import { foo } from \"./module\";foo();" } }, "referencedMap": { @@ -176,7 +176,11 @@ exports.foo = foo; "./module.ts" ] }, - "exportedModulesMap": {}, + "exportedModulesMap": { + "./main.ts": [ + "./module.ts" + ] + }, "semanticDiagnosticsPerFile": [ "../../lib/lib.d.ts", "./extrafile.ts", @@ -185,7 +189,7 @@ exports.foo = foo; ] }, "version": "FakeTSVersion", - "size": 1017 + "size": 888 } @@ -202,6 +206,7 @@ Output:: exitCode:: ExitStatus.Success +//// [/src/project/main.js] file written with same contents //// [/src/project/module.js] "use strict"; exports.__esModule = true; @@ -211,7 +216,7 @@ exports.foo = foo; //// [/src/project/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../../lib/lib.d.ts","./extrafile.ts","./module.ts","./main.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-13403012629-export const extra = 10;",{"version":"-3334720882-export function foo(): string { return \"hello world world\"; }","signature":"-8035635627-export declare function foo(): string;\r\n"},{"version":"-7083766686-import { foo } from \"./module\";foo();","signature":"-4882119183-export {};\r\n"}],"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,4,3]},"version":"FakeTSVersion"} +{"program":{"fileNames":["../../lib/lib.d.ts","./extrafile.ts","./module.ts","./main.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-13403012629-export const extra = 10;","-3334720882-export function foo(): string { return \"hello world world\"; }","-7083766686-import { foo } from \"./module\";foo();"],"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[[4,1]],"semanticDiagnosticsPerFile":[1,2,4,3]},"version":"FakeTSVersion"} //// [/src/project/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -239,11 +244,11 @@ exports.foo = foo; }, "./module.ts": { "version": "-3334720882-export function foo(): string { return \"hello world world\"; }", - "signature": "-8035635627-export declare function foo(): string;\r\n" + "signature": "-3334720882-export function foo(): string { return \"hello world world\"; }" }, "./main.ts": { "version": "-7083766686-import { foo } from \"./module\";foo();", - "signature": "-4882119183-export {};\r\n" + "signature": "-7083766686-import { foo } from \"./module\";foo();" } }, "referencedMap": { @@ -251,7 +256,11 @@ exports.foo = foo; "./module.ts" ] }, - "exportedModulesMap": {}, + "exportedModulesMap": { + "./main.ts": [ + "./module.ts" + ] + }, "semanticDiagnosticsPerFile": [ "../../lib/lib.d.ts", "./extrafile.ts", @@ -260,7 +269,7 @@ exports.foo = foo; ] }, "version": "FakeTSVersion", - "size": 1023 + "size": 894 } @@ -288,7 +297,7 @@ exports.foo = foo; //// [/src/project/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../../lib/lib.d.ts","./extrafile.ts","./module.ts","./main.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-13403012629-export const extra = 10;",{"version":"-3842804408-export const x = 10;export function foo(): string { return \"hello world world\"; }","signature":"1387636182-export declare const x = 10;\r\nexport declare function foo(): string;\r\n"},{"version":"-7083766686-import { foo } from \"./module\";foo();","signature":"-4882119183-export {};\r\n"}],"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,4,3]},"version":"FakeTSVersion"} +{"program":{"fileNames":["../../lib/lib.d.ts","./extrafile.ts","./module.ts","./main.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-13403012629-export const extra = 10;","-3842804408-export const x = 10;export function foo(): string { return \"hello world world\"; }","-7083766686-import { foo } from \"./module\";foo();"],"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[[4,1]],"semanticDiagnosticsPerFile":[1,2,4,3]},"version":"FakeTSVersion"} //// [/src/project/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -316,11 +325,11 @@ exports.foo = foo; }, "./module.ts": { "version": "-3842804408-export const x = 10;export function foo(): string { return \"hello world world\"; }", - "signature": "1387636182-export declare const x = 10;\r\nexport declare function foo(): string;\r\n" + "signature": "-3842804408-export const x = 10;export function foo(): string { return \"hello world world\"; }" }, "./main.ts": { "version": "-7083766686-import { foo } from \"./module\";foo();", - "signature": "-4882119183-export {};\r\n" + "signature": "-7083766686-import { foo } from \"./module\";foo();" } }, "referencedMap": { @@ -328,7 +337,11 @@ exports.foo = foo; "./module.ts" ] }, - "exportedModulesMap": {}, + "exportedModulesMap": { + "./main.ts": [ + "./module.ts" + ] + }, "semanticDiagnosticsPerFile": [ "../../lib/lib.d.ts", "./extrafile.ts", @@ -337,6 +350,6 @@ exports.foo = foo; ] }, "version": "FakeTSVersion", - "size": 1074 + "size": 914 }