diff --git a/tsc/internal/fourslash/tests/autoImportPathsNodeModules_test.go b/tsc/internal/fourslash/tests/autoImportPathsNodeModules_test.go
index 97206cffbf8ee..30c23ecd3128f 100644
--- a/tsc/internal/fourslash/tests/autoImportPathsNodeModules_test.go
+++ b/tsc/internal/fourslash/tests/autoImportPathsNodeModules_test.go
@@ -14,7 +14,7 @@ func TestAutoImportPathsNodeModules(t *testing.T) {
const content = `// @Filename: tsconfig.json
{
"compilerOptions": {
- "module": "amd",
+ "module": "commonjs",
"moduleResolution": "node",
"rootDir": "ts",
"baseUrl": ".",
diff --git a/tsc/internal/fourslash/tests/autoImportsWithRootDirsAndRootedPath01_test.go b/tsc/internal/fourslash/tests/autoImportsWithRootDirsAndRootedPath01_test.go
index 8941aef0ca09d..c44b0e72d1e90 100644
--- a/tsc/internal/fourslash/tests/autoImportsWithRootDirsAndRootedPath01_test.go
+++ b/tsc/internal/fourslash/tests/autoImportsWithRootDirsAndRootedPath01_test.go
@@ -18,7 +18,7 @@ func TestAutoImportsWithRootDirsAndRootedPath01(t *testing.T) {
// @Filename: /dir/tsconfig.json
{
"compilerOptions": {
- "module": "amd",
+ "module": "commonjs",
"moduleResolution": "classic",
"rootDirs": ["D:/"]
}
diff --git a/tsc/internal/fourslash/tests/completionsPathsJsonModuleWithAmd_test.go b/tsc/internal/fourslash/tests/completionsPathsJsonModuleWithAmd_test.go
deleted file mode 100644
index bab8e0ea0b7ed..0000000000000
--- a/tsc/internal/fourslash/tests/completionsPathsJsonModuleWithAmd_test.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package fourslash_test
-
-import (
- "testing"
-
- "github.com/microsoft/TypeScript/tsc/internal/fourslash"
- . "github.com/microsoft/TypeScript/tsc/internal/fourslash/tests/util"
- "github.com/microsoft/TypeScript/tsc/internal/testutil"
-)
-
-func TestCompletionsPathsJsonModuleWithAmd(t *testing.T) {
- t.Parallel()
- defer testutil.RecoverAndFail(t, "Panic on fourslash test")
- const content = `// @module: amd
-// @resolveJsonModule: true
-// @Filename: /project/test.json
-not read
-// @Filename: /project/index.ts
-import { } from ".//**/";`
- f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
- defer done()
- f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
- IsIncomplete: false,
- ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
- CommitCharacters: &[]string{},
- EditRange: Ignored,
- },
- Items: &fourslash.CompletionsExpectedItems{
- Exact: []fourslash.CompletionsExpectedItem{},
- },
- })
-}
diff --git a/tsc/internal/fourslash/tests/declarationMapsGoToDefinitionSameNameDifferentDirectory_test.go b/tsc/internal/fourslash/tests/declarationMapsGoToDefinitionSameNameDifferentDirectory_test.go
index 31325f215a991..a2df4bf862227 100644
--- a/tsc/internal/fourslash/tests/declarationMapsGoToDefinitionSameNameDifferentDirectory_test.go
+++ b/tsc/internal/fourslash/tests/declarationMapsGoToDefinitionSameNameDifferentDirectory_test.go
@@ -43,7 +43,7 @@ class /*2*/Control{
{
"extends": "../tsbase.json",
"compilerOptions": {
- "outFile": "Source.js"
+ "outDir": "."
},
"files": [
"Source.ts"
diff --git a/tsc/internal/fourslash/tests/getDeclarationDiagnostics_test.go b/tsc/internal/fourslash/tests/getDeclarationDiagnostics_test.go
index a6a77d04a2518..8551e933f299f 100644
--- a/tsc/internal/fourslash/tests/getDeclarationDiagnostics_test.go
+++ b/tsc/internal/fourslash/tests/getDeclarationDiagnostics_test.go
@@ -12,7 +12,7 @@ func TestGetDeclarationDiagnostics(t *testing.T) {
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `// @strict: false
// @declaration: true
-// @outFile: true
+// @outDir: out
// @Filename: inputFile1.ts
namespace m {
export function foo() {
diff --git a/tsc/internal/fourslash/tests/importNameCodeFixNewImportAllowSyntheticDefaultImports4_test.go b/tsc/internal/fourslash/tests/importNameCodeFixNewImportAllowSyntheticDefaultImports4_test.go
deleted file mode 100644
index 9fce2c89e1d51..0000000000000
--- a/tsc/internal/fourslash/tests/importNameCodeFixNewImportAllowSyntheticDefaultImports4_test.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package fourslash_test
-
-import (
- "testing"
-
- "github.com/microsoft/TypeScript/tsc/internal/fourslash"
- "github.com/microsoft/TypeScript/tsc/internal/testutil"
-)
-
-func TestImportNameCodeFixNewImportAllowSyntheticDefaultImports4(t *testing.T) {
- t.Parallel()
- defer testutil.RecoverAndFail(t, "Panic on fourslash test")
- const content = `// @AllowSyntheticDefaultImports: false
-// @Module: amd
-// @Filename: a/f1.ts
-[|export var x = 0;
-bar/*0*/();|]
-// @Filename: a/foo.d.ts
-declare function bar(): number;
-export = bar;
-export as namespace bar;`
- f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
- defer done()
- f.VerifyImportFixAtPosition(t, []string{
- `import bar = require("./foo");
-
-export var x = 0;
-bar();`,
- }, nil /*preferences*/)
-}
diff --git a/tsc/internal/testrunner/compiler_runner.go b/tsc/internal/testrunner/compiler_runner.go
index 39bae630829c8..06d3a939b7185 100644
--- a/tsc/internal/testrunner/compiler_runner.go
+++ b/tsc/internal/testrunner/compiler_runner.go
@@ -107,18 +107,15 @@ var skippedTests = []string{
"mappedTypeUnionConstraintInferences.ts",
"lateBoundConstraintTypeChecksCorrectly.ts",
"keyofDoesntContainSymbols.ts",
- "isolatedModulesOut.ts",
"noStrictGenericChecks.ts",
"noImplicitUseStrict_umd.ts",
"noImplicitUseStrict_system.ts",
"noImplicitUseStrict_es6.ts",
"noImplicitUseStrict_commonjs.ts",
- "noImplicitUseStrict_amd.ts",
"noImplicitAnyIndexingSuppressed.ts",
"excessPropertyErrorsSuppressed.ts",
"moduleNoneDynamicImport.ts",
"moduleNoneErrors.ts",
- "moduleNoneOutFile.ts",
"noErrorUsingImportExportModuleAugmentationInDeclarationFile1.ts",
"noErrorUsingImportExportModuleAugmentationInDeclarationFile2.ts",
"noErrorUsingImportExportModuleAugmentationInDeclarationFile3.ts",
diff --git a/tsc/internal/testutil/harnessutil/harnessutil.go b/tsc/internal/testutil/harnessutil/harnessutil.go
index b4209fb9bac47..0b46a9a7a7cd7 100644
--- a/tsc/internal/testutil/harnessutil/harnessutil.go
+++ b/tsc/internal/testutil/harnessutil/harnessutil.go
@@ -1235,8 +1235,9 @@ func GetConfigNameFromFileName(filename string) string {
func SkipUnsupportedCompilerOptions(t *testing.T, options *core.CompilerOptions) {
t.Helper()
+ failOnUnsupportedCompilerOptions(t, options)
switch options.Module {
- case core.ModuleKindAMD, core.ModuleKindUMD, core.ModuleKindSystem:
+ case core.ModuleKindUMD, core.ModuleKindSystem:
t.Skipf("unsupported module kind %s", options.Module)
}
switch options.ModuleResolution {
@@ -1252,9 +1253,6 @@ func SkipUnsupportedCompilerOptions(t *testing.T, options *core.CompilerOptions)
if options.BaseUrl != "" {
t.Skipf("unsupported baseUrl %s", options.BaseUrl)
}
- if options.OutFile != "" {
- t.Skipf("unsupported outFile %s", options.OutFile)
- }
switch options.Target {
case core.ScriptTargetES5:
t.Skipf("unsupported target %s", options.Target)
@@ -1263,3 +1261,13 @@ func SkipUnsupportedCompilerOptions(t *testing.T, options *core.CompilerOptions)
t.Skipf("alwaysStrict=false is unsupported")
}
}
+
+func failOnUnsupportedCompilerOptions(t *testing.T, options *core.CompilerOptions) {
+ t.Helper()
+ if options.Module == core.ModuleKindAMD {
+ t.Fatalf("unsupported module kind %s", options.Module)
+ }
+ if options.OutFile != "" {
+ t.Fatalf("unsupported outFile %s", options.OutFile)
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithInternalImportDeclaration.js b/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithInternalImportDeclaration.js
new file mode 100644
index 0000000000000..964cfbe5b81a5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithInternalImportDeclaration.js
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/ambientExternalModuleWithInternalImportDeclaration.ts] ////
+
+//// [ambientExternalModuleWithInternalImportDeclaration_0.ts]
+declare module 'M' {
+ namespace C {
+ export var f: number;
+ }
+ class C {
+ foo(): void;
+ }
+ import X = C;
+ export = X;
+
+}
+
+//// [ambientExternalModuleWithInternalImportDeclaration_1.ts]
+///
+import A = require('M');
+var c = new A();
+
+//// [ambientExternalModuleWithInternalImportDeclaration_0.js]
+"use strict";
+//// [ambientExternalModuleWithInternalImportDeclaration_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+///
+const A = require("M");
+var c = new A();
diff --git a/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithInternalImportDeclaration.symbols b/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithInternalImportDeclaration.symbols
new file mode 100644
index 0000000000000..fdf8cd926e457
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithInternalImportDeclaration.symbols
@@ -0,0 +1,36 @@
+//// [tests/cases/compiler/ambientExternalModuleWithInternalImportDeclaration.ts] ////
+
+=== ambientExternalModuleWithInternalImportDeclaration_1.ts ===
+///
+import A = require('M');
+>A : Symbol(A, Decl(ambientExternalModuleWithInternalImportDeclaration_1.ts, 0, 0))
+
+var c = new A();
+>c : Symbol(c, Decl(ambientExternalModuleWithInternalImportDeclaration_1.ts, 2, 3))
+>A : Symbol(A, Decl(ambientExternalModuleWithInternalImportDeclaration_1.ts, 0, 0))
+
+=== ambientExternalModuleWithInternalImportDeclaration_0.ts ===
+declare module 'M' {
+>'M' : Symbol("M", Decl(ambientExternalModuleWithInternalImportDeclaration_0.ts, 0, 0))
+
+ namespace C {
+>C : Symbol(C, Decl(ambientExternalModuleWithInternalImportDeclaration_0.ts, 0, 20), Decl(ambientExternalModuleWithInternalImportDeclaration_0.ts, 3, 5))
+
+ export var f: number;
+>f : Symbol(f, Decl(ambientExternalModuleWithInternalImportDeclaration_0.ts, 2, 18))
+ }
+ class C {
+>C : Symbol(C, Decl(ambientExternalModuleWithInternalImportDeclaration_0.ts, 0, 20), Decl(ambientExternalModuleWithInternalImportDeclaration_0.ts, 3, 5))
+
+ foo(): void;
+>foo : Symbol(C.foo, Decl(ambientExternalModuleWithInternalImportDeclaration_0.ts, 4, 13))
+ }
+ import X = C;
+>X : Symbol(X, Decl(ambientExternalModuleWithInternalImportDeclaration_0.ts, 6, 5))
+>C : Symbol(C, Decl(ambientExternalModuleWithInternalImportDeclaration_0.ts, 0, 20), Decl(ambientExternalModuleWithInternalImportDeclaration_0.ts, 3, 5))
+
+ export = X;
+>X : Symbol(X, Decl(ambientExternalModuleWithInternalImportDeclaration_0.ts, 6, 5))
+
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithInternalImportDeclaration.types b/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithInternalImportDeclaration.types
new file mode 100644
index 0000000000000..48467e93beafd
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithInternalImportDeclaration.types
@@ -0,0 +1,37 @@
+//// [tests/cases/compiler/ambientExternalModuleWithInternalImportDeclaration.ts] ////
+
+=== ambientExternalModuleWithInternalImportDeclaration_1.ts ===
+///
+import A = require('M');
+>A : typeof A
+
+var c = new A();
+>c : A
+>new A() : A
+>A : typeof A
+
+=== ambientExternalModuleWithInternalImportDeclaration_0.ts ===
+declare module 'M' {
+>'M' : typeof import("M")
+
+ namespace C {
+>C : typeof C
+
+ export var f: number;
+>f : number
+ }
+ class C {
+>C : C
+
+ foo(): void;
+>foo : () => void
+ }
+ import X = C;
+>X : typeof C
+>C : C
+
+ export = X;
+>X : C
+
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithoutInternalImportDeclaration.js b/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithoutInternalImportDeclaration.js
new file mode 100644
index 0000000000000..61787d8f48c7d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithoutInternalImportDeclaration.js
@@ -0,0 +1,27 @@
+//// [tests/cases/compiler/ambientExternalModuleWithoutInternalImportDeclaration.ts] ////
+
+//// [ambientExternalModuleWithoutInternalImportDeclaration_0.ts]
+declare module 'M' {
+ namespace C {
+ export var f: number;
+ }
+ class C {
+ foo(): void;
+ }
+ export = C;
+
+}
+
+//// [ambientExternalModuleWithoutInternalImportDeclaration_1.ts]
+///
+import A = require('M');
+var c = new A();
+
+//// [ambientExternalModuleWithoutInternalImportDeclaration_0.js]
+"use strict";
+//// [ambientExternalModuleWithoutInternalImportDeclaration_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+///
+const A = require("M");
+var c = new A();
diff --git a/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithoutInternalImportDeclaration.symbols b/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithoutInternalImportDeclaration.symbols
new file mode 100644
index 0000000000000..e19eb1ba36eee
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithoutInternalImportDeclaration.symbols
@@ -0,0 +1,32 @@
+//// [tests/cases/compiler/ambientExternalModuleWithoutInternalImportDeclaration.ts] ////
+
+=== ambientExternalModuleWithoutInternalImportDeclaration_1.ts ===
+///
+import A = require('M');
+>A : Symbol(A, Decl(ambientExternalModuleWithoutInternalImportDeclaration_1.ts, 0, 0))
+
+var c = new A();
+>c : Symbol(c, Decl(ambientExternalModuleWithoutInternalImportDeclaration_1.ts, 2, 3))
+>A : Symbol(A, Decl(ambientExternalModuleWithoutInternalImportDeclaration_1.ts, 0, 0))
+
+=== ambientExternalModuleWithoutInternalImportDeclaration_0.ts ===
+declare module 'M' {
+>'M' : Symbol("M", Decl(ambientExternalModuleWithoutInternalImportDeclaration_0.ts, 0, 0))
+
+ namespace C {
+>C : Symbol(C, Decl(ambientExternalModuleWithoutInternalImportDeclaration_0.ts, 0, 20), Decl(ambientExternalModuleWithoutInternalImportDeclaration_0.ts, 3, 5))
+
+ export var f: number;
+>f : Symbol(f, Decl(ambientExternalModuleWithoutInternalImportDeclaration_0.ts, 2, 18))
+ }
+ class C {
+>C : Symbol(C, Decl(ambientExternalModuleWithoutInternalImportDeclaration_0.ts, 0, 20), Decl(ambientExternalModuleWithoutInternalImportDeclaration_0.ts, 3, 5))
+
+ foo(): void;
+>foo : Symbol(C.foo, Decl(ambientExternalModuleWithoutInternalImportDeclaration_0.ts, 4, 13))
+ }
+ export = C;
+>C : Symbol(C, Decl(ambientExternalModuleWithoutInternalImportDeclaration_0.ts, 0, 20), Decl(ambientExternalModuleWithoutInternalImportDeclaration_0.ts, 3, 5))
+
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithoutInternalImportDeclaration.types b/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithoutInternalImportDeclaration.types
new file mode 100644
index 0000000000000..db7961c451a6a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/ambientExternalModuleWithoutInternalImportDeclaration.types
@@ -0,0 +1,33 @@
+//// [tests/cases/compiler/ambientExternalModuleWithoutInternalImportDeclaration.ts] ////
+
+=== ambientExternalModuleWithoutInternalImportDeclaration_1.ts ===
+///
+import A = require('M');
+>A : typeof A
+
+var c = new A();
+>c : A
+>new A() : A
+>A : typeof A
+
+=== ambientExternalModuleWithoutInternalImportDeclaration_0.ts ===
+declare module 'M' {
+>'M' : typeof import("M")
+
+ namespace C {
+>C : typeof C
+
+ export var f: number;
+>f : number
+ }
+ class C {
+>C : C
+
+ foo(): void;
+>foo : () => void
+ }
+ export = C;
+>C : C
+
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/amdDependencyComment1.errors.txt b/tsc/testdata/baselines/reference/compiler/amdDependencyComment1.errors.txt
deleted file mode 100644
index 00c706f38089e..0000000000000
--- a/tsc/testdata/baselines/reference/compiler/amdDependencyComment1.errors.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-amdDependencyComment1.ts(3,21): error TS2307: Cannot find module 'm2' or its corresponding type declarations.
-
-
-==== amdDependencyComment1.ts (1 errors) ====
- ///
-
- import m1 = require("m2")
- ~~~~
-!!! error TS2307: Cannot find module 'm2' or its corresponding type declarations.
- m1.f();
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/amdDependencyComment1.js b/tsc/testdata/baselines/reference/compiler/amdDependencyComment1.js
deleted file mode 100644
index e12e84748597b..0000000000000
--- a/tsc/testdata/baselines/reference/compiler/amdDependencyComment1.js
+++ /dev/null
@@ -1,14 +0,0 @@
-//// [tests/cases/compiler/amdDependencyComment1.ts] ////
-
-//// [amdDependencyComment1.ts]
-///
-
-import m1 = require("m2")
-m1.f();
-
-//// [amdDependencyComment1.js]
-"use strict";
-///
-Object.defineProperty(exports, "__esModule", { value: true });
-const m1 = require("m2");
-m1.f();
diff --git a/tsc/testdata/baselines/reference/compiler/amdDependencyComment1.symbols b/tsc/testdata/baselines/reference/compiler/amdDependencyComment1.symbols
deleted file mode 100644
index 15ed066e79e15..0000000000000
--- a/tsc/testdata/baselines/reference/compiler/amdDependencyComment1.symbols
+++ /dev/null
@@ -1,11 +0,0 @@
-//// [tests/cases/compiler/amdDependencyComment1.ts] ////
-
-=== amdDependencyComment1.ts ===
-///
-
-import m1 = require("m2")
->m1 : Symbol(m1, Decl(amdDependencyComment1.ts, 0, 0))
-
-m1.f();
->m1 : Symbol(m1, Decl(amdDependencyComment1.ts, 0, 0))
-
diff --git a/tsc/testdata/baselines/reference/compiler/amdDependencyComment1.types b/tsc/testdata/baselines/reference/compiler/amdDependencyComment1.types
deleted file mode 100644
index 906cd203210ef..0000000000000
--- a/tsc/testdata/baselines/reference/compiler/amdDependencyComment1.types
+++ /dev/null
@@ -1,14 +0,0 @@
-//// [tests/cases/compiler/amdDependencyComment1.ts] ////
-
-=== amdDependencyComment1.ts ===
-///
-
-import m1 = require("m2")
->m1 : any
-
-m1.f();
->m1.f() : any
->m1.f : any
->m1 : any
->f : any
-
diff --git a/tsc/testdata/baselines/reference/compiler/amdDependencyCommentName1.errors.txt b/tsc/testdata/baselines/reference/compiler/amdDependencyCommentName1.errors.txt
deleted file mode 100644
index 10efca68a7a19..0000000000000
--- a/tsc/testdata/baselines/reference/compiler/amdDependencyCommentName1.errors.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-amdDependencyCommentName1.ts(3,21): error TS2307: Cannot find module 'm2' or its corresponding type declarations.
-
-
-==== amdDependencyCommentName1.ts (1 errors) ====
- ///
-
- import m1 = require("m2")
- ~~~~
-!!! error TS2307: Cannot find module 'm2' or its corresponding type declarations.
- m1.f();
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/amdDependencyCommentName1.js b/tsc/testdata/baselines/reference/compiler/amdDependencyCommentName1.js
deleted file mode 100644
index 7538bd86ee39e..0000000000000
--- a/tsc/testdata/baselines/reference/compiler/amdDependencyCommentName1.js
+++ /dev/null
@@ -1,14 +0,0 @@
-//// [tests/cases/compiler/amdDependencyCommentName1.ts] ////
-
-//// [amdDependencyCommentName1.ts]
-///
-
-import m1 = require("m2")
-m1.f();
-
-//// [amdDependencyCommentName1.js]
-"use strict";
-///
-Object.defineProperty(exports, "__esModule", { value: true });
-const m1 = require("m2");
-m1.f();
diff --git a/tsc/testdata/baselines/reference/compiler/amdDependencyCommentName1.symbols b/tsc/testdata/baselines/reference/compiler/amdDependencyCommentName1.symbols
deleted file mode 100644
index 1fd7912ae5729..0000000000000
--- a/tsc/testdata/baselines/reference/compiler/amdDependencyCommentName1.symbols
+++ /dev/null
@@ -1,11 +0,0 @@
-//// [tests/cases/compiler/amdDependencyCommentName1.ts] ////
-
-=== amdDependencyCommentName1.ts ===
-///
-
-import m1 = require("m2")
->m1 : Symbol(m1, Decl(amdDependencyCommentName1.ts, 0, 0))
-
-m1.f();
->m1 : Symbol(m1, Decl(amdDependencyCommentName1.ts, 0, 0))
-
diff --git a/tsc/testdata/baselines/reference/compiler/amdDependencyCommentName1.types b/tsc/testdata/baselines/reference/compiler/amdDependencyCommentName1.types
deleted file mode 100644
index 0be8c8da09d14..0000000000000
--- a/tsc/testdata/baselines/reference/compiler/amdDependencyCommentName1.types
+++ /dev/null
@@ -1,14 +0,0 @@
-//// [tests/cases/compiler/amdDependencyCommentName1.ts] ////
-
-=== amdDependencyCommentName1.ts ===
-///
-
-import m1 = require("m2")
->m1 : any
-
-m1.f();
->m1.f() : any
->m1.f : any
->m1 : any
->f : any
-
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals1_1.errors.txt b/tsc/testdata/baselines/reference/compiler/augmentExportEquals1_1.errors.txt
new file mode 100644
index 0000000000000..5c5a317a82ad6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals1_1.errors.txt
@@ -0,0 +1,28 @@
+file3.ts(1,20): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+file3.ts(2,8): error TS2882: Cannot find module or type declarations for side-effect import of 'file2'.
+
+
+==== file3.ts (2 errors) ====
+ import x = require("file1");
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ import "file2";
+ ~~~~~~~
+!!! error TS2882: Cannot find module or type declarations for side-effect import of 'file2'.
+ let a: x.A; // should not work
+==== file1.d.ts (0 errors) ====
+ declare module "file1" {
+ var x: number;
+ export = x;
+ }
+
+==== file2.ts (0 errors) ====
+ ///
+ import x = require("file1");
+
+ // augmentation for 'file1'
+ // should error since 'file1' does not have namespace meaning
+ declare module "file1" {
+ interface A { a }
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals1_1.js b/tsc/testdata/baselines/reference/compiler/augmentExportEquals1_1.js
new file mode 100644
index 0000000000000..b76e754ad41c0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals1_1.js
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/augmentExportEquals1_1.ts] ////
+
+//// [file1.d.ts]
+declare module "file1" {
+ var x: number;
+ export = x;
+}
+
+//// [file2.ts]
+///
+import x = require("file1");
+
+// augmentation for 'file1'
+// should error since 'file1' does not have namespace meaning
+declare module "file1" {
+ interface A { a }
+}
+
+//// [file3.ts]
+import x = require("file1");
+import "file2";
+let a: x.A; // should not work
+
+//// [file3.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+require("file2");
+let a; // should not work
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals1_1.symbols b/tsc/testdata/baselines/reference/compiler/augmentExportEquals1_1.symbols
new file mode 100644
index 0000000000000..debcc87715d3c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals1_1.symbols
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/augmentExportEquals1_1.ts] ////
+
+=== file3.ts ===
+import x = require("file1");
+>x : Symbol(x, Decl(file3.ts, 0, 0))
+
+import "file2";
+let a: x.A; // should not work
+>a : Symbol(a, Decl(file3.ts, 2, 3))
+>x : Symbol(x, Decl(file3.ts, 0, 0))
+>A : Symbol(x.A)
+
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals1_1.types b/tsc/testdata/baselines/reference/compiler/augmentExportEquals1_1.types
new file mode 100644
index 0000000000000..ca7dc818b484a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals1_1.types
@@ -0,0 +1,11 @@
+//// [tests/cases/compiler/augmentExportEquals1_1.ts] ////
+
+=== file3.ts ===
+import x = require("file1");
+>x : any
+
+import "file2";
+let a: x.A; // should not work
+>a : x.A
+>x : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals2_1.errors.txt b/tsc/testdata/baselines/reference/compiler/augmentExportEquals2_1.errors.txt
new file mode 100644
index 0000000000000..45cec64aaca6b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals2_1.errors.txt
@@ -0,0 +1,27 @@
+file3.ts(1,20): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+file3.ts(2,8): error TS2882: Cannot find module or type declarations for side-effect import of 'file2'.
+
+
+==== file3.ts (2 errors) ====
+ import x = require("file1");
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ import "file2";
+ ~~~~~~~
+!!! error TS2882: Cannot find module or type declarations for side-effect import of 'file2'.
+ let a: x.A; // should not work
+==== file1.d.ts (0 errors) ====
+ declare module "file1" {
+ function foo(): void;
+ export = foo;
+ }
+
+==== file2.ts (0 errors) ====
+ ///
+ import x = require("file1");
+
+ // should error since './file1' does not have namespace meaning
+ declare module "file1" {
+ interface A { a }
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals2_1.js b/tsc/testdata/baselines/reference/compiler/augmentExportEquals2_1.js
new file mode 100644
index 0000000000000..920219754da4e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals2_1.js
@@ -0,0 +1,27 @@
+//// [tests/cases/compiler/augmentExportEquals2_1.ts] ////
+
+//// [file1.d.ts]
+declare module "file1" {
+ function foo(): void;
+ export = foo;
+}
+
+//// [file2.ts]
+///
+import x = require("file1");
+
+// should error since './file1' does not have namespace meaning
+declare module "file1" {
+ interface A { a }
+}
+
+//// [file3.ts]
+import x = require("file1");
+import "file2";
+let a: x.A; // should not work
+
+//// [file3.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+require("file2");
+let a; // should not work
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals2_1.symbols b/tsc/testdata/baselines/reference/compiler/augmentExportEquals2_1.symbols
new file mode 100644
index 0000000000000..d096d496a2027
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals2_1.symbols
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/augmentExportEquals2_1.ts] ////
+
+=== file3.ts ===
+import x = require("file1");
+>x : Symbol(x, Decl(file3.ts, 0, 0))
+
+import "file2";
+let a: x.A; // should not work
+>a : Symbol(a, Decl(file3.ts, 2, 3))
+>x : Symbol(x, Decl(file3.ts, 0, 0))
+>A : Symbol(x.A)
+
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals2_1.types b/tsc/testdata/baselines/reference/compiler/augmentExportEquals2_1.types
new file mode 100644
index 0000000000000..1f6e77bc00aa5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals2_1.types
@@ -0,0 +1,11 @@
+//// [tests/cases/compiler/augmentExportEquals2_1.ts] ////
+
+=== file3.ts ===
+import x = require("file1");
+>x : any
+
+import "file2";
+let a: x.A; // should not work
+>a : x.A
+>x : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals3_1.errors.txt b/tsc/testdata/baselines/reference/compiler/augmentExportEquals3_1.errors.txt
new file mode 100644
index 0000000000000..2e80db957f502
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals3_1.errors.txt
@@ -0,0 +1,31 @@
+file3.ts(2,8): error TS2882: Cannot find module or type declarations for side-effect import of 'file2'.
+
+
+==== file1.d.ts (0 errors) ====
+ declare module "file1" {
+ function foo(): void;
+ namespace foo {
+ export var v: number;
+ }
+ export = foo;
+ }
+
+
+==== file2.ts (0 errors) ====
+ ///
+ import x = require("file1");
+ x.b = 1;
+
+ // OK - './file1' is a namespace
+ declare module "file1" {
+ interface A { a }
+ let b: number;
+ }
+
+==== file3.ts (1 errors) ====
+ import * as x from "file1";
+ import "file2";
+ ~~~~~~~
+!!! error TS2882: Cannot find module or type declarations for side-effect import of 'file2'.
+ let a: x.A;
+ let b = x.b;
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals3_1.js b/tsc/testdata/baselines/reference/compiler/augmentExportEquals3_1.js
new file mode 100644
index 0000000000000..11a8bc10a6227
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals3_1.js
@@ -0,0 +1,75 @@
+//// [tests/cases/compiler/augmentExportEquals3_1.ts] ////
+
+//// [file1.d.ts]
+declare module "file1" {
+ function foo(): void;
+ namespace foo {
+ export var v: number;
+ }
+ export = foo;
+}
+
+
+//// [file2.ts]
+///
+import x = require("file1");
+x.b = 1;
+
+// OK - './file1' is a namespace
+declare module "file1" {
+ interface A { a }
+ let b: number;
+}
+
+//// [file3.ts]
+import * as x from "file1";
+import "file2";
+let a: x.A;
+let b = x.b;
+
+//// [file2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+///
+const x = require("file1");
+x.b = 1;
+//// [file3.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || (function () {
+ var ownKeys = function(o) {
+ ownKeys = Object.getOwnPropertyNames || function (o) {
+ var ar = [];
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+ return ar;
+ };
+ return ownKeys(o);
+ };
+ return function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+ __setModuleDefault(result, mod);
+ return result;
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+const x = __importStar(require("file1"));
+require("file2");
+let a;
+let b = x.b;
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals3_1.symbols b/tsc/testdata/baselines/reference/compiler/augmentExportEquals3_1.symbols
new file mode 100644
index 0000000000000..35b57d0f18996
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals3_1.symbols
@@ -0,0 +1,58 @@
+//// [tests/cases/compiler/augmentExportEquals3_1.ts] ////
+
+=== file1.d.ts ===
+declare module "file1" {
+>"file1" : Symbol("file1", Decl(file1.d.ts, 0, 0))
+
+ function foo(): void;
+>foo : Symbol(foo, Decl(file1.d.ts, 0, 24), Decl(file1.d.ts, 1, 25), Decl(file2.ts, 2, 8))
+
+ namespace foo {
+>foo : Symbol(foo, Decl(file1.d.ts, 0, 24), Decl(file1.d.ts, 1, 25), Decl(file2.ts, 2, 8))
+
+ export var v: number;
+>v : Symbol(v, Decl(file1.d.ts, 3, 18))
+ }
+ export = foo;
+>foo : Symbol(foo, Decl(file1.d.ts, 0, 24), Decl(file1.d.ts, 1, 25), Decl(file2.ts, 2, 8))
+}
+
+
+=== file2.ts ===
+///
+import x = require("file1");
+>x : Symbol(x, Decl(file2.ts, 0, 0))
+
+x.b = 1;
+>x.b : Symbol(x.b, Decl(file2.ts, 7, 7))
+>x : Symbol(x, Decl(file2.ts, 0, 0))
+>b : Symbol(x.b, Decl(file2.ts, 7, 7))
+
+// OK - './file1' is a namespace
+declare module "file1" {
+>"file1" : Symbol(x, Decl(file1.d.ts, 0, 24), Decl(file1.d.ts, 1, 25), Decl(file2.ts, 2, 8))
+
+ interface A { a }
+>A : Symbol(A, Decl(file2.ts, 5, 24))
+>a : Symbol(A.a, Decl(file2.ts, 6, 17))
+
+ let b: number;
+>b : Symbol(b, Decl(file2.ts, 7, 7))
+}
+
+=== file3.ts ===
+import * as x from "file1";
+>x : Symbol(x, Decl(file3.ts, 0, 6))
+
+import "file2";
+let a: x.A;
+>a : Symbol(a, Decl(file3.ts, 2, 3))
+>x : Symbol(x, Decl(file3.ts, 0, 6))
+>A : Symbol(x.A, Decl(file2.ts, 5, 24))
+
+let b = x.b;
+>b : Symbol(b, Decl(file3.ts, 3, 3))
+>x.b : Symbol(x.b, Decl(file2.ts, 7, 7))
+>x : Symbol(x, Decl(file3.ts, 0, 6))
+>b : Symbol(x.b, Decl(file2.ts, 7, 7))
+
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals3_1.types b/tsc/testdata/baselines/reference/compiler/augmentExportEquals3_1.types
new file mode 100644
index 0000000000000..4a70df2240d62
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals3_1.types
@@ -0,0 +1,58 @@
+//// [tests/cases/compiler/augmentExportEquals3_1.ts] ////
+
+=== file1.d.ts ===
+declare module "file1" {
+>"file1" : typeof import("file1")
+
+ function foo(): void;
+>foo : typeof import("file1")
+
+ namespace foo {
+>foo : typeof import("file1")
+
+ export var v: number;
+>v : number
+ }
+ export = foo;
+>foo : typeof import("file1")
+}
+
+
+=== file2.ts ===
+///
+import x = require("file1");
+>x : typeof x
+
+x.b = 1;
+>x.b = 1 : 1
+>x.b : number
+>x : typeof x
+>b : number
+>1 : 1
+
+// OK - './file1' is a namespace
+declare module "file1" {
+>"file1" : typeof x
+
+ interface A { a }
+>a : any
+
+ let b: number;
+>b : number
+}
+
+=== file3.ts ===
+import * as x from "file1";
+>x : typeof x
+
+import "file2";
+let a: x.A;
+>a : x.A
+>x : any
+
+let b = x.b;
+>b : number
+>x.b : number
+>x : typeof x
+>b : number
+
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals4_1.errors.txt b/tsc/testdata/baselines/reference/compiler/augmentExportEquals4_1.errors.txt
new file mode 100644
index 0000000000000..ddc265251fbe9
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals4_1.errors.txt
@@ -0,0 +1,31 @@
+file3.ts(2,8): error TS2882: Cannot find module or type declarations for side-effect import of 'file2'.
+
+
+==== file1.d.ts (0 errors) ====
+ declare module "file1" {
+ class foo {}
+ namespace foo {
+ export var v: number;
+ }
+ export = foo;
+ }
+
+
+==== file2.ts (0 errors) ====
+ ///
+ import x = require("file1");
+ x.b = 1;
+
+ // OK - './file1' is a namespace
+ declare module "file1" {
+ interface A { a }
+ let b: number;
+ }
+
+==== file3.ts (1 errors) ====
+ import * as x from "file1";
+ import "file2";
+ ~~~~~~~
+!!! error TS2882: Cannot find module or type declarations for side-effect import of 'file2'.
+ let a: x.A;
+ let b = x.b;
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals4_1.js b/tsc/testdata/baselines/reference/compiler/augmentExportEquals4_1.js
new file mode 100644
index 0000000000000..aeb29910e41df
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals4_1.js
@@ -0,0 +1,75 @@
+//// [tests/cases/compiler/augmentExportEquals4_1.ts] ////
+
+//// [file1.d.ts]
+declare module "file1" {
+ class foo {}
+ namespace foo {
+ export var v: number;
+ }
+ export = foo;
+}
+
+
+//// [file2.ts]
+///
+import x = require("file1");
+x.b = 1;
+
+// OK - './file1' is a namespace
+declare module "file1" {
+ interface A { a }
+ let b: number;
+}
+
+//// [file3.ts]
+import * as x from "file1";
+import "file2";
+let a: x.A;
+let b = x.b;
+
+//// [file2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+///
+const x = require("file1");
+x.b = 1;
+//// [file3.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || (function () {
+ var ownKeys = function(o) {
+ ownKeys = Object.getOwnPropertyNames || function (o) {
+ var ar = [];
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+ return ar;
+ };
+ return ownKeys(o);
+ };
+ return function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+ __setModuleDefault(result, mod);
+ return result;
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+const x = __importStar(require("file1"));
+require("file2");
+let a;
+let b = x.b;
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals4_1.symbols b/tsc/testdata/baselines/reference/compiler/augmentExportEquals4_1.symbols
new file mode 100644
index 0000000000000..cfc4ac9f37eef
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals4_1.symbols
@@ -0,0 +1,58 @@
+//// [tests/cases/compiler/augmentExportEquals4_1.ts] ////
+
+=== file1.d.ts ===
+declare module "file1" {
+>"file1" : Symbol("file1", Decl(file1.d.ts, 0, 0))
+
+ class foo {}
+>foo : Symbol(foo, Decl(file1.d.ts, 0, 24), Decl(file1.d.ts, 1, 16), Decl(file2.ts, 2, 8))
+
+ namespace foo {
+>foo : Symbol(foo, Decl(file1.d.ts, 0, 24), Decl(file1.d.ts, 1, 16), Decl(file2.ts, 2, 8))
+
+ export var v: number;
+>v : Symbol(v, Decl(file1.d.ts, 3, 18))
+ }
+ export = foo;
+>foo : Symbol(foo, Decl(file1.d.ts, 0, 24), Decl(file1.d.ts, 1, 16), Decl(file2.ts, 2, 8))
+}
+
+
+=== file2.ts ===
+///
+import x = require("file1");
+>x : Symbol(x, Decl(file2.ts, 0, 0))
+
+x.b = 1;
+>x.b : Symbol(x.b, Decl(file2.ts, 7, 7))
+>x : Symbol(x, Decl(file2.ts, 0, 0))
+>b : Symbol(x.b, Decl(file2.ts, 7, 7))
+
+// OK - './file1' is a namespace
+declare module "file1" {
+>"file1" : Symbol(x, Decl(file1.d.ts, 0, 24), Decl(file1.d.ts, 1, 16), Decl(file2.ts, 2, 8))
+
+ interface A { a }
+>A : Symbol(A, Decl(file2.ts, 5, 24))
+>a : Symbol(A.a, Decl(file2.ts, 6, 17))
+
+ let b: number;
+>b : Symbol(b, Decl(file2.ts, 7, 7))
+}
+
+=== file3.ts ===
+import * as x from "file1";
+>x : Symbol(x, Decl(file3.ts, 0, 6))
+
+import "file2";
+let a: x.A;
+>a : Symbol(a, Decl(file3.ts, 2, 3))
+>x : Symbol(x, Decl(file3.ts, 0, 6))
+>A : Symbol(x.A, Decl(file2.ts, 5, 24))
+
+let b = x.b;
+>b : Symbol(b, Decl(file3.ts, 3, 3))
+>x.b : Symbol(x.b, Decl(file2.ts, 7, 7))
+>x : Symbol(x, Decl(file3.ts, 0, 6))
+>b : Symbol(x.b, Decl(file2.ts, 7, 7))
+
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals4_1.types b/tsc/testdata/baselines/reference/compiler/augmentExportEquals4_1.types
new file mode 100644
index 0000000000000..fcd4b549c4c2f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals4_1.types
@@ -0,0 +1,58 @@
+//// [tests/cases/compiler/augmentExportEquals4_1.ts] ////
+
+=== file1.d.ts ===
+declare module "file1" {
+>"file1" : typeof import("file1")
+
+ class foo {}
+>foo : import("file1")
+
+ namespace foo {
+>foo : typeof import("file1")
+
+ export var v: number;
+>v : number
+ }
+ export = foo;
+>foo : import("file1")
+}
+
+
+=== file2.ts ===
+///
+import x = require("file1");
+>x : typeof x
+
+x.b = 1;
+>x.b = 1 : 1
+>x.b : number
+>x : typeof x
+>b : number
+>1 : 1
+
+// OK - './file1' is a namespace
+declare module "file1" {
+>"file1" : typeof x
+
+ interface A { a }
+>a : any
+
+ let b: number;
+>b : number
+}
+
+=== file3.ts ===
+import * as x from "file1";
+>x : typeof x
+
+import "file2";
+let a: x.A;
+>a : x.A
+>x : any
+
+let b = x.b;
+>b : number
+>x.b : number
+>x : typeof x
+>b : number
+
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals6_1.errors.txt b/tsc/testdata/baselines/reference/compiler/augmentExportEquals6_1.errors.txt
new file mode 100644
index 0000000000000..176a7018e74df
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals6_1.errors.txt
@@ -0,0 +1,29 @@
+file3.ts(2,8): error TS2882: Cannot find module or type declarations for side-effect import of 'file2'.
+
+
+==== file1.d.ts (0 errors) ====
+ declare module "file1" {
+ class foo {}
+ namespace foo {
+ class A {}
+ }
+ export = foo;
+ }
+
+
+==== file2.ts (0 errors) ====
+ ///
+ import x = require("file1");
+
+ // OK - './file1' is a namespace
+ declare module "file1" {
+ interface A { a: number }
+ }
+
+==== file3.ts (1 errors) ====
+ import * as x from "file1";
+ import "file2";
+ ~~~~~~~
+!!! error TS2882: Cannot find module or type declarations for side-effect import of 'file2'.
+ let a: x.A;
+ let b = a.a;
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals6_1.js b/tsc/testdata/baselines/reference/compiler/augmentExportEquals6_1.js
new file mode 100644
index 0000000000000..d71ffa5c38469
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals6_1.js
@@ -0,0 +1,36 @@
+//// [tests/cases/compiler/augmentExportEquals6_1.ts] ////
+
+//// [file1.d.ts]
+declare module "file1" {
+ class foo {}
+ namespace foo {
+ class A {}
+ }
+ export = foo;
+}
+
+
+//// [file2.ts]
+///
+import x = require("file1");
+
+// OK - './file1' is a namespace
+declare module "file1" {
+ interface A { a: number }
+}
+
+//// [file3.ts]
+import * as x from "file1";
+import "file2";
+let a: x.A;
+let b = a.a;
+
+//// [file2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [file3.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+require("file2");
+let a;
+let b = a.a;
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals6_1.symbols b/tsc/testdata/baselines/reference/compiler/augmentExportEquals6_1.symbols
new file mode 100644
index 0000000000000..3a5b2f4e73f58
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals6_1.symbols
@@ -0,0 +1,50 @@
+//// [tests/cases/compiler/augmentExportEquals6_1.ts] ////
+
+=== file1.d.ts ===
+declare module "file1" {
+>"file1" : Symbol("file1", Decl(file1.d.ts, 0, 0))
+
+ class foo {}
+>foo : Symbol(foo, Decl(file1.d.ts, 0, 24), Decl(file1.d.ts, 1, 16), Decl(file2.ts, 1, 28))
+
+ namespace foo {
+>foo : Symbol(foo, Decl(file1.d.ts, 0, 24), Decl(file1.d.ts, 1, 16), Decl(file2.ts, 1, 28))
+
+ class A {}
+>A : Symbol(A, Decl(file1.d.ts, 2, 19), Decl(file2.ts, 4, 24))
+ }
+ export = foo;
+>foo : Symbol(foo, Decl(file1.d.ts, 0, 24), Decl(file1.d.ts, 1, 16), Decl(file2.ts, 1, 28))
+}
+
+
+=== file2.ts ===
+///
+import x = require("file1");
+>x : Symbol(x, Decl(file2.ts, 0, 0))
+
+// OK - './file1' is a namespace
+declare module "file1" {
+>"file1" : Symbol(x, Decl(file1.d.ts, 0, 24), Decl(file1.d.ts, 1, 16), Decl(file2.ts, 1, 28))
+
+ interface A { a: number }
+>A : Symbol(A, Decl(file1.d.ts, 2, 19), Decl(file2.ts, 4, 24))
+>a : Symbol(A.a, Decl(file2.ts, 5, 17))
+}
+
+=== file3.ts ===
+import * as x from "file1";
+>x : Symbol(x, Decl(file3.ts, 0, 6))
+
+import "file2";
+let a: x.A;
+>a : Symbol(a, Decl(file3.ts, 2, 3))
+>x : Symbol(x, Decl(file3.ts, 0, 6))
+>A : Symbol(x.A, Decl(file1.d.ts, 2, 19), Decl(file2.ts, 4, 24))
+
+let b = a.a;
+>b : Symbol(b, Decl(file3.ts, 3, 3))
+>a.a : Symbol(x.A.a, Decl(file2.ts, 5, 17))
+>a : Symbol(a, Decl(file3.ts, 2, 3))
+>a : Symbol(x.A.a, Decl(file2.ts, 5, 17))
+
diff --git a/tsc/testdata/baselines/reference/compiler/augmentExportEquals6_1.types b/tsc/testdata/baselines/reference/compiler/augmentExportEquals6_1.types
new file mode 100644
index 0000000000000..181c6bba01268
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentExportEquals6_1.types
@@ -0,0 +1,48 @@
+//// [tests/cases/compiler/augmentExportEquals6_1.ts] ////
+
+=== file1.d.ts ===
+declare module "file1" {
+>"file1" : typeof import("file1")
+
+ class foo {}
+>foo : import("file1")
+
+ namespace foo {
+>foo : typeof import("file1")
+
+ class A {}
+>A : A
+ }
+ export = foo;
+>foo : import("file1")
+}
+
+
+=== file2.ts ===
+///
+import x = require("file1");
+>x : typeof x
+
+// OK - './file1' is a namespace
+declare module "file1" {
+>"file1" : typeof x
+
+ interface A { a: number }
+>a : number
+}
+
+=== file3.ts ===
+import * as x from "file1";
+>x : typeof x
+
+import "file2";
+let a: x.A;
+>a : x.A
+>x : any
+
+let b = a.a;
+>b : number
+>a.a : number
+>a : x.A
+>a : number
+
diff --git a/tsc/testdata/baselines/reference/compiler/augmentedTypesExternalModule1.js b/tsc/testdata/baselines/reference/compiler/augmentedTypesExternalModule1.js
new file mode 100644
index 0000000000000..ddc80b5e749d0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentedTypesExternalModule1.js
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/augmentedTypesExternalModule1.ts] ////
+
+//// [augmentedTypesExternalModule1.ts]
+export var a = 1;
+class c5 { public foo() { } }
+namespace c5 { } // should be ok everywhere
+
+//// [augmentedTypesExternalModule1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.a = void 0;
+exports.a = 1;
+class c5 {
+ foo() { }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/augmentedTypesExternalModule1.symbols b/tsc/testdata/baselines/reference/compiler/augmentedTypesExternalModule1.symbols
new file mode 100644
index 0000000000000..9734c040ca6da
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentedTypesExternalModule1.symbols
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/augmentedTypesExternalModule1.ts] ////
+
+=== augmentedTypesExternalModule1.ts ===
+export var a = 1;
+>a : Symbol(a, Decl(augmentedTypesExternalModule1.ts, 0, 10))
+
+class c5 { public foo() { } }
+>c5 : Symbol(c5, Decl(augmentedTypesExternalModule1.ts, 0, 17), Decl(augmentedTypesExternalModule1.ts, 1, 29))
+>foo : Symbol(c5.foo, Decl(augmentedTypesExternalModule1.ts, 1, 10))
+
+namespace c5 { } // should be ok everywhere
+>c5 : Symbol(c5, Decl(augmentedTypesExternalModule1.ts, 0, 17), Decl(augmentedTypesExternalModule1.ts, 1, 29))
+
diff --git a/tsc/testdata/baselines/reference/compiler/augmentedTypesExternalModule1.types b/tsc/testdata/baselines/reference/compiler/augmentedTypesExternalModule1.types
new file mode 100644
index 0000000000000..5efb4ecd2fb74
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/augmentedTypesExternalModule1.types
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/augmentedTypesExternalModule1.ts] ////
+
+=== augmentedTypesExternalModule1.ts ===
+export var a = 1;
+>a : number
+>1 : 1
+
+class c5 { public foo() { } }
+>c5 : c5
+>foo : () => void
+
+namespace c5 { } // should be ok everywhere
diff --git a/tsc/testdata/baselines/reference/compiler/bangInModuleName.js b/tsc/testdata/baselines/reference/compiler/bangInModuleName.js
new file mode 100644
index 0000000000000..dfb21310a2bc1
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/bangInModuleName.js
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/bangInModuleName.ts] ////
+
+//// [a.d.ts]
+declare module "http" {
+}
+
+declare module 'intern/dojo/node!http' {
+ import http = require('http');
+ export = http;
+}
+
+//// [a.ts]
+///
+
+import * as http from 'intern/dojo/node!http';
+
+//// [a.js]
+"use strict";
+///
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/tsc/testdata/baselines/reference/compiler/bangInModuleName.symbols b/tsc/testdata/baselines/reference/compiler/bangInModuleName.symbols
new file mode 100644
index 0000000000000..0477ca0793e0c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/bangInModuleName.symbols
@@ -0,0 +1,23 @@
+//// [tests/cases/compiler/bangInModuleName.ts] ////
+
+=== a.ts ===
+///
+
+import * as http from 'intern/dojo/node!http';
+>http : Symbol(http, Decl(a.ts, 2, 6))
+
+=== a.d.ts ===
+declare module "http" {
+>"http" : Symbol("http", Decl(a.d.ts, 0, 0))
+}
+
+declare module 'intern/dojo/node!http' {
+>'intern/dojo/node!http' : Symbol("intern/dojo/node!http", Decl(a.d.ts, 1, 1))
+
+ import http = require('http');
+>http : Symbol(http, Decl(a.d.ts, 3, 40))
+
+ export = http;
+>http : Symbol(http, Decl(a.d.ts, 3, 40))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/bangInModuleName.types b/tsc/testdata/baselines/reference/compiler/bangInModuleName.types
new file mode 100644
index 0000000000000..025c852ede7fc
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/bangInModuleName.types
@@ -0,0 +1,23 @@
+//// [tests/cases/compiler/bangInModuleName.ts] ////
+
+=== a.ts ===
+///
+
+import * as http from 'intern/dojo/node!http';
+>http : typeof http
+
+=== a.d.ts ===
+declare module "http" {
+>"http" : typeof import("http")
+}
+
+declare module 'intern/dojo/node!http' {
+>'intern/dojo/node!http' : typeof import("intern/dojo/node!http")
+
+ import http = require('http');
+>http : typeof http
+
+ export = http;
+>http : typeof http
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/blockScopedClassDeclarationAcrossFiles.js b/tsc/testdata/baselines/reference/compiler/blockScopedClassDeclarationAcrossFiles.js
new file mode 100644
index 0000000000000..ccd2497a3cc36
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/blockScopedClassDeclarationAcrossFiles.js
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/blockScopedClassDeclarationAcrossFiles.ts] ////
+
+//// [c.ts]
+let foo: typeof C;
+//// [b.ts]
+class C { }
+
+
+//// [c.js]
+"use strict";
+let foo;
+//// [b.js]
+"use strict";
+class C {
+}
diff --git a/tsc/testdata/baselines/reference/compiler/blockScopedClassDeclarationAcrossFiles.symbols b/tsc/testdata/baselines/reference/compiler/blockScopedClassDeclarationAcrossFiles.symbols
new file mode 100644
index 0000000000000..4fa4569b62ce1
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/blockScopedClassDeclarationAcrossFiles.symbols
@@ -0,0 +1,11 @@
+//// [tests/cases/compiler/blockScopedClassDeclarationAcrossFiles.ts] ////
+
+=== c.ts ===
+let foo: typeof C;
+>foo : Symbol(foo, Decl(c.ts, 0, 3))
+>C : Symbol(C, Decl(b.ts, 0, 0))
+
+=== b.ts ===
+class C { }
+>C : Symbol(C, Decl(b.ts, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/blockScopedClassDeclarationAcrossFiles.types b/tsc/testdata/baselines/reference/compiler/blockScopedClassDeclarationAcrossFiles.types
new file mode 100644
index 0000000000000..1da2a72801623
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/blockScopedClassDeclarationAcrossFiles.types
@@ -0,0 +1,11 @@
+//// [tests/cases/compiler/blockScopedClassDeclarationAcrossFiles.ts] ////
+
+=== c.ts ===
+let foo: typeof C;
+>foo : typeof C
+>C : typeof C
+
+=== b.ts ===
+class C { }
+>C : C
+
diff --git a/tsc/testdata/baselines/reference/compiler/blockScopedNamespaceDifferentFile(target=es2015).js b/tsc/testdata/baselines/reference/compiler/blockScopedNamespaceDifferentFile(target=es2015).js
new file mode 100644
index 0000000000000..49b8c0cc83051
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/blockScopedNamespaceDifferentFile(target=es2015).js
@@ -0,0 +1,32 @@
+//// [tests/cases/compiler/blockScopedNamespaceDifferentFile.ts] ////
+
+//// [test.ts]
+namespace C {
+ export class Name {
+ static funcData = A.AA.func();
+ static someConst = A.AA.foo;
+
+ constructor(parameters) {}
+ }
+}
+
+//// [typings.d.ts]
+declare namespace A {
+ namespace AA {
+ function func(): number;
+ const foo = "";
+ }
+}
+
+
+//// [test.js]
+"use strict";
+var C;
+(function (C) {
+ class Name {
+ constructor(parameters) { }
+ }
+ Name.funcData = A.AA.func();
+ Name.someConst = A.AA.foo;
+ C.Name = Name;
+})(C || (C = {}));
diff --git a/tsc/testdata/baselines/reference/compiler/blockScopedNamespaceDifferentFile(target=es2015).symbols b/tsc/testdata/baselines/reference/compiler/blockScopedNamespaceDifferentFile(target=es2015).symbols
new file mode 100644
index 0000000000000..565eb550cddd2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/blockScopedNamespaceDifferentFile(target=es2015).symbols
@@ -0,0 +1,45 @@
+//// [tests/cases/compiler/blockScopedNamespaceDifferentFile.ts] ////
+
+=== test.ts ===
+namespace C {
+>C : Symbol(C, Decl(test.ts, 0, 0))
+
+ export class Name {
+>Name : Symbol(Name, Decl(test.ts, 0, 13))
+
+ static funcData = A.AA.func();
+>funcData : Symbol(Name.funcData, Decl(test.ts, 1, 23))
+>A.AA.func : Symbol(A.AA.func, Decl(typings.d.ts, 1, 18))
+>A.AA : Symbol(A.AA, Decl(typings.d.ts, 0, 21))
+>A : Symbol(A, Decl(typings.d.ts, 0, 0))
+>AA : Symbol(A.AA, Decl(typings.d.ts, 0, 21))
+>func : Symbol(A.AA.func, Decl(typings.d.ts, 1, 18))
+
+ static someConst = A.AA.foo;
+>someConst : Symbol(Name.someConst, Decl(test.ts, 2, 38))
+>A.AA.foo : Symbol(A.AA.foo, Decl(typings.d.ts, 3, 13))
+>A.AA : Symbol(A.AA, Decl(typings.d.ts, 0, 21))
+>A : Symbol(A, Decl(typings.d.ts, 0, 0))
+>AA : Symbol(A.AA, Decl(typings.d.ts, 0, 21))
+>foo : Symbol(A.AA.foo, Decl(typings.d.ts, 3, 13))
+
+ constructor(parameters) {}
+>parameters : Symbol(parameters, Decl(test.ts, 5, 20))
+ }
+}
+
+=== typings.d.ts ===
+declare namespace A {
+>A : Symbol(A, Decl(typings.d.ts, 0, 0))
+
+ namespace AA {
+>AA : Symbol(AA, Decl(typings.d.ts, 0, 21))
+
+ function func(): number;
+>func : Symbol(func, Decl(typings.d.ts, 1, 18))
+
+ const foo = "";
+>foo : Symbol(foo, Decl(typings.d.ts, 3, 13))
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/blockScopedNamespaceDifferentFile(target=es2015).types b/tsc/testdata/baselines/reference/compiler/blockScopedNamespaceDifferentFile(target=es2015).types
new file mode 100644
index 0000000000000..48d60bab74124
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/blockScopedNamespaceDifferentFile(target=es2015).types
@@ -0,0 +1,47 @@
+//// [tests/cases/compiler/blockScopedNamespaceDifferentFile.ts] ////
+
+=== test.ts ===
+namespace C {
+>C : typeof C
+
+ export class Name {
+>Name : Name
+
+ static funcData = A.AA.func();
+>funcData : number
+>A.AA.func() : number
+>A.AA.func : () => number
+>A.AA : typeof A.AA
+>A : typeof A
+>AA : typeof A.AA
+>func : () => number
+
+ static someConst = A.AA.foo;
+>someConst : string
+>A.AA.foo : ""
+>A.AA : typeof A.AA
+>A : typeof A
+>AA : typeof A.AA
+>foo : ""
+
+ constructor(parameters) {}
+>parameters : any
+ }
+}
+
+=== typings.d.ts ===
+declare namespace A {
+>A : typeof A
+
+ namespace AA {
+>AA : typeof AA
+
+ function func(): number;
+>func : () => number
+
+ const foo = "";
+>foo : ""
+>"" : ""
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/cacheResolutions.js b/tsc/testdata/baselines/reference/compiler/cacheResolutions.js
new file mode 100644
index 0000000000000..59b9a455619dc
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/cacheResolutions.js
@@ -0,0 +1,26 @@
+//// [tests/cases/compiler/cacheResolutions.ts] ////
+
+//// [app.ts]
+export let x = 1;
+
+//// [lib1.ts]
+export let x = 1;
+
+//// [lib2.ts]
+export let x = 1;
+
+//// [app.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+exports.x = 1;
+//// [lib1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+exports.x = 1;
+//// [lib2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+exports.x = 1;
diff --git a/tsc/testdata/baselines/reference/compiler/cacheResolutions.symbols b/tsc/testdata/baselines/reference/compiler/cacheResolutions.symbols
new file mode 100644
index 0000000000000..8bdcae6654ceb
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/cacheResolutions.symbols
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/cacheResolutions.ts] ////
+
+=== /a/b/c/app.ts ===
+export let x = 1;
+>x : Symbol(x, Decl(app.ts, 0, 10))
+
+=== /a/b/c/lib1.ts ===
+export let x = 1;
+>x : Symbol(x, Decl(lib1.ts, 0, 10))
+
+=== /a/b/c/lib2.ts ===
+export let x = 1;
+>x : Symbol(x, Decl(lib2.ts, 0, 10))
+
diff --git a/tsc/testdata/baselines/reference/compiler/cacheResolutions.trace.json b/tsc/testdata/baselines/reference/compiler/cacheResolutions.trace.json
new file mode 100644
index 0000000000000..fff26ed32a10b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/cacheResolutions.trace.json
@@ -0,0 +1,57 @@
+======== Resolving module 'tslib' from '/a/b/c/app.ts'. ========
+Module resolution kind is not specified, using 'Bundler'.
+Resolving in CJS mode with conditions 'require', 'types'.
+File '/a/b/c/package.json' does not exist.
+File '/a/b/package.json' does not exist.
+File '/a/package.json' does not exist.
+File '/package.json' does not exist.
+Loading module 'tslib' from 'node_modules' folder, target file types: TypeScript, JavaScript, Declaration, JSON.
+Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.
+Directory '/a/b/c/node_modules' does not exist, skipping all lookups in it.
+Directory '/a/b/node_modules' does not exist, skipping all lookups in it.
+Directory '/a/node_modules' does not exist, skipping all lookups in it.
+Directory '/node_modules' does not exist, skipping all lookups in it.
+Searching all ancestor node_modules directories for fallback extensions: JavaScript, JSON.
+Directory '/a/b/c/node_modules' does not exist, skipping all lookups in it.
+Directory '/a/b/node_modules' does not exist, skipping all lookups in it.
+Directory '/a/node_modules' does not exist, skipping all lookups in it.
+Directory '/node_modules' does not exist, skipping all lookups in it.
+======== Module name 'tslib' was not resolved. ========
+======== Resolving module 'tslib' from '/a/b/c/lib1.ts'. ========
+Module resolution kind is not specified, using 'Bundler'.
+Resolving in CJS mode with conditions 'require', 'types'.
+File '/a/b/c/package.json' does not exist according to earlier cached lookups.
+File '/a/b/package.json' does not exist according to earlier cached lookups.
+File '/a/package.json' does not exist according to earlier cached lookups.
+File '/package.json' does not exist according to earlier cached lookups.
+Loading module 'tslib' from 'node_modules' folder, target file types: TypeScript, JavaScript, Declaration, JSON.
+Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.
+Directory '/a/b/c/node_modules' does not exist, skipping all lookups in it.
+Directory '/a/b/node_modules' does not exist, skipping all lookups in it.
+Directory '/a/node_modules' does not exist, skipping all lookups in it.
+Directory '/node_modules' does not exist, skipping all lookups in it.
+Searching all ancestor node_modules directories for fallback extensions: JavaScript, JSON.
+Directory '/a/b/c/node_modules' does not exist, skipping all lookups in it.
+Directory '/a/b/node_modules' does not exist, skipping all lookups in it.
+Directory '/a/node_modules' does not exist, skipping all lookups in it.
+Directory '/node_modules' does not exist, skipping all lookups in it.
+======== Module name 'tslib' was not resolved. ========
+======== Resolving module 'tslib' from '/a/b/c/lib2.ts'. ========
+Module resolution kind is not specified, using 'Bundler'.
+Resolving in CJS mode with conditions 'require', 'types'.
+File '/a/b/c/package.json' does not exist according to earlier cached lookups.
+File '/a/b/package.json' does not exist according to earlier cached lookups.
+File '/a/package.json' does not exist according to earlier cached lookups.
+File '/package.json' does not exist according to earlier cached lookups.
+Loading module 'tslib' from 'node_modules' folder, target file types: TypeScript, JavaScript, Declaration, JSON.
+Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.
+Directory '/a/b/c/node_modules' does not exist, skipping all lookups in it.
+Directory '/a/b/node_modules' does not exist, skipping all lookups in it.
+Directory '/a/node_modules' does not exist, skipping all lookups in it.
+Directory '/node_modules' does not exist, skipping all lookups in it.
+Searching all ancestor node_modules directories for fallback extensions: JavaScript, JSON.
+Directory '/a/b/c/node_modules' does not exist, skipping all lookups in it.
+Directory '/a/b/node_modules' does not exist, skipping all lookups in it.
+Directory '/a/node_modules' does not exist, skipping all lookups in it.
+Directory '/node_modules' does not exist, skipping all lookups in it.
+======== Module name 'tslib' was not resolved. ========
diff --git a/tsc/testdata/baselines/reference/compiler/cacheResolutions.types b/tsc/testdata/baselines/reference/compiler/cacheResolutions.types
new file mode 100644
index 0000000000000..af9a4d6388a8b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/cacheResolutions.types
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/cacheResolutions.ts] ////
+
+=== /a/b/c/app.ts ===
+export let x = 1;
+>x : number
+>1 : 1
+
+=== /a/b/c/lib1.ts ===
+export let x = 1;
+>x : number
+>1 : 1
+
+=== /a/b/c/lib2.ts ===
+export let x = 1;
+>x : number
+>1 : 1
+
diff --git a/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.errors.txt b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.errors.txt
new file mode 100644
index 0000000000000..fa22beceb33e2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.errors.txt
@@ -0,0 +1,27 @@
+weird.js(1,1): error TS2552: Cannot find name 'someFunction'. Did you mean 'Function'?
+weird.js(1,23): error TS7006: Parameter 'BaseClass' implicitly has an 'any' type.
+weird.js(9,17): error TS7006: Parameter 'error' implicitly has an 'any' type.
+
+
+==== weird.js (3 errors) ====
+ someFunction(function(BaseClass) {
+ ~~~~~~~~~~~~
+!!! error TS2552: Cannot find name 'someFunction'. Did you mean 'Function'?
+!!! related TS2728 lib.es5.d.ts:--:--: 'Function' is declared here.
+ ~~~~~~~~~
+!!! error TS7006: Parameter 'BaseClass' implicitly has an 'any' type.
+ 'use strict';
+ const DEFAULT_MESSAGE = "nop!";
+ class Hello extends BaseClass {
+ constructor() {
+ super();
+ this.foo = "bar";
+ }
+ _render(error) {
+ ~~~~~
+!!! error TS7006: Parameter 'error' implicitly has an 'any' type.
+ const message = error.message || DEFAULT_MESSAGE;
+ }
+ }
+ });
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.symbols b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.symbols
new file mode 100644
index 0000000000000..99ddd57e9d8cd
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.symbols
@@ -0,0 +1,33 @@
+//// [tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts] ////
+
+=== weird.js ===
+someFunction(function(BaseClass) {
+>BaseClass : Symbol(BaseClass, Decl(weird.js, 0, 22))
+
+ 'use strict';
+ const DEFAULT_MESSAGE = "nop!";
+>DEFAULT_MESSAGE : Symbol(DEFAULT_MESSAGE, Decl(weird.js, 2, 9))
+
+ class Hello extends BaseClass {
+>Hello : Symbol(Hello, Decl(weird.js, 2, 35))
+>BaseClass : Symbol(BaseClass, Decl(weird.js, 0, 22))
+
+ constructor() {
+ super();
+ this.foo = "bar";
+>this.foo : Symbol(Hello.foo, Decl(weird.js, 5, 20))
+>this : Symbol(Hello, Decl(weird.js, 2, 35))
+>foo : Symbol(Hello.foo, Decl(weird.js, 5, 20))
+ }
+ _render(error) {
+>_render : Symbol(Hello._render, Decl(weird.js, 7, 9))
+>error : Symbol(error, Decl(weird.js, 8, 16))
+
+ const message = error.message || DEFAULT_MESSAGE;
+>message : Symbol(message, Decl(weird.js, 9, 17))
+>error : Symbol(error, Decl(weird.js, 8, 16))
+>DEFAULT_MESSAGE : Symbol(DEFAULT_MESSAGE, Decl(weird.js, 2, 9))
+ }
+ }
+});
+
diff --git a/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.types b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.types
new file mode 100644
index 0000000000000..7f98768cc3b3e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/checkIndexConstraintOfJavascriptClassExpression.types
@@ -0,0 +1,47 @@
+//// [tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts] ////
+
+=== weird.js ===
+someFunction(function(BaseClass) {
+>someFunction(function(BaseClass) { 'use strict'; const DEFAULT_MESSAGE = "nop!"; class Hello extends BaseClass { constructor() { super(); this.foo = "bar"; } _render(error) { const message = error.message || DEFAULT_MESSAGE; } }}) : any
+>someFunction : any
+>function(BaseClass) { 'use strict'; const DEFAULT_MESSAGE = "nop!"; class Hello extends BaseClass { constructor() { super(); this.foo = "bar"; } _render(error) { const message = error.message || DEFAULT_MESSAGE; } }} : (BaseClass: any) => void
+>BaseClass : any
+
+ 'use strict';
+>'use strict' : "use strict"
+
+ const DEFAULT_MESSAGE = "nop!";
+>DEFAULT_MESSAGE : "nop!"
+>"nop!" : "nop!"
+
+ class Hello extends BaseClass {
+>Hello : Hello
+>BaseClass : any
+
+ constructor() {
+ super();
+>super() : void
+>super : any
+
+ this.foo = "bar";
+>this.foo = "bar" : "bar"
+>this.foo : any
+>this : this
+>foo : any
+>"bar" : "bar"
+ }
+ _render(error) {
+>_render : (error: any) => void
+>error : any
+
+ const message = error.message || DEFAULT_MESSAGE;
+>message : any
+>error.message || DEFAULT_MESSAGE : any
+>error.message : any
+>error : any
+>message : any
+>DEFAULT_MESSAGE : "nop!"
+ }
+ }
+});
+
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndClass.errors.txt b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndClass.errors.txt
new file mode 100644
index 0000000000000..a2635142096ff
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndClass.errors.txt
@@ -0,0 +1,43 @@
+collisionExportsRequireAndClass_externalmodule.ts(1,14): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module.
+collisionExportsRequireAndClass_externalmodule.ts(3,14): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module.
+
+
+==== collisionExportsRequireAndClass_externalmodule.ts (2 errors) ====
+ export class require {
+ ~~~~~~~
+!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module.
+ }
+ export class exports {
+ ~~~~~~~
+!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module.
+ }
+ namespace m1 {
+ class require {
+ }
+ class exports {
+ }
+ }
+ namespace m2 {
+ export class require {
+ }
+ export class exports {
+ }
+ }
+
+==== collisionExportsRequireAndClass_globalFile.ts (0 errors) ====
+ class require {
+ }
+ class exports {
+ }
+ namespace m3 {
+ class require {
+ }
+ class exports {
+ }
+ }
+ namespace m4 {
+ export class require {
+ }
+ export class exports {
+ }
+ }
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndClass.js b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndClass.js
new file mode 100644
index 0000000000000..05d0d4eb88505
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndClass.js
@@ -0,0 +1,86 @@
+//// [tests/cases/compiler/collisionExportsRequireAndClass.ts] ////
+
+//// [collisionExportsRequireAndClass_externalmodule.ts]
+export class require {
+}
+export class exports {
+}
+namespace m1 {
+ class require {
+ }
+ class exports {
+ }
+}
+namespace m2 {
+ export class require {
+ }
+ export class exports {
+ }
+}
+
+//// [collisionExportsRequireAndClass_globalFile.ts]
+class require {
+}
+class exports {
+}
+namespace m3 {
+ class require {
+ }
+ class exports {
+ }
+}
+namespace m4 {
+ export class require {
+ }
+ export class exports {
+ }
+}
+
+//// [collisionExportsRequireAndClass_externalmodule.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.exports = exports.require = void 0;
+class require {
+}
+exports.require = require;
+class exports {
+}
+exports.exports = exports;
+var m1;
+(function (m1) {
+ class require {
+ }
+ class exports {
+ }
+})(m1 || (m1 = {}));
+var m2;
+(function (m2) {
+ class require {
+ }
+ m2.require = require;
+ class exports {
+ }
+ m2.exports = exports;
+})(m2 || (m2 = {}));
+//// [collisionExportsRequireAndClass_globalFile.js]
+"use strict";
+class require {
+}
+class exports {
+}
+var m3;
+(function (m3) {
+ class require {
+ }
+ class exports {
+ }
+})(m3 || (m3 = {}));
+var m4;
+(function (m4) {
+ class require {
+ }
+ m4.require = require;
+ class exports {
+ }
+ m4.exports = exports;
+})(m4 || (m4 = {}));
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndClass.symbols b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndClass.symbols
new file mode 100644
index 0000000000000..d6446f9ea733b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndClass.symbols
@@ -0,0 +1,57 @@
+//// [tests/cases/compiler/collisionExportsRequireAndClass.ts] ////
+
+=== collisionExportsRequireAndClass_externalmodule.ts ===
+export class require {
+>require : Symbol(require, Decl(collisionExportsRequireAndClass_externalmodule.ts, 0, 0))
+}
+export class exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndClass_externalmodule.ts, 1, 1))
+}
+namespace m1 {
+>m1 : Symbol(m1, Decl(collisionExportsRequireAndClass_externalmodule.ts, 3, 1))
+
+ class require {
+>require : Symbol(require, Decl(collisionExportsRequireAndClass_externalmodule.ts, 4, 14))
+ }
+ class exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndClass_externalmodule.ts, 6, 5))
+ }
+}
+namespace m2 {
+>m2 : Symbol(m2, Decl(collisionExportsRequireAndClass_externalmodule.ts, 9, 1))
+
+ export class require {
+>require : Symbol(require, Decl(collisionExportsRequireAndClass_externalmodule.ts, 10, 14))
+ }
+ export class exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndClass_externalmodule.ts, 12, 5))
+ }
+}
+
+=== collisionExportsRequireAndClass_globalFile.ts ===
+class require {
+>require : Symbol(require, Decl(collisionExportsRequireAndClass_globalFile.ts, 0, 0))
+}
+class exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndClass_globalFile.ts, 1, 1))
+}
+namespace m3 {
+>m3 : Symbol(m3, Decl(collisionExportsRequireAndClass_globalFile.ts, 3, 1))
+
+ class require {
+>require : Symbol(require, Decl(collisionExportsRequireAndClass_globalFile.ts, 4, 14))
+ }
+ class exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndClass_globalFile.ts, 6, 5))
+ }
+}
+namespace m4 {
+>m4 : Symbol(m4, Decl(collisionExportsRequireAndClass_globalFile.ts, 9, 1))
+
+ export class require {
+>require : Symbol(require, Decl(collisionExportsRequireAndClass_globalFile.ts, 10, 14))
+ }
+ export class exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndClass_globalFile.ts, 12, 5))
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndClass.types b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndClass.types
new file mode 100644
index 0000000000000..d9bc7269dbe2d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndClass.types
@@ -0,0 +1,57 @@
+//// [tests/cases/compiler/collisionExportsRequireAndClass.ts] ////
+
+=== collisionExportsRequireAndClass_externalmodule.ts ===
+export class require {
+>require : require
+}
+export class exports {
+>exports : exports
+}
+namespace m1 {
+>m1 : typeof m1
+
+ class require {
+>require : require
+ }
+ class exports {
+>exports : exports
+ }
+}
+namespace m2 {
+>m2 : typeof m2
+
+ export class require {
+>require : require
+ }
+ export class exports {
+>exports : exports
+ }
+}
+
+=== collisionExportsRequireAndClass_globalFile.ts ===
+class require {
+>require : require
+}
+class exports {
+>exports : exports
+}
+namespace m3 {
+>m3 : typeof m3
+
+ class require {
+>require : require
+ }
+ class exports {
+>exports : exports
+ }
+}
+namespace m4 {
+>m4 : typeof m4
+
+ export class require {
+>require : require
+ }
+ export class exports {
+>exports : exports
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndEnum.errors.txt b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndEnum.errors.txt
new file mode 100644
index 0000000000000..c929a282c8d49
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndEnum.errors.txt
@@ -0,0 +1,67 @@
+collisionExportsRequireAndEnum_externalmodule.ts(1,13): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module.
+collisionExportsRequireAndEnum_externalmodule.ts(5,13): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module.
+
+
+==== collisionExportsRequireAndEnum_externalmodule.ts (2 errors) ====
+ export enum require { // Error
+ ~~~~~~~
+!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module.
+ _thisVal1,
+ _thisVal2,
+ }
+ export enum exports { // Error
+ ~~~~~~~
+!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module.
+ _thisVal1,
+ _thisVal2,
+ }
+ namespace m1 {
+ enum require {
+ _thisVal1,
+ _thisVal2,
+ }
+ enum exports {
+ _thisVal1,
+ _thisVal2,
+ }
+ }
+ namespace m2 {
+ export enum require {
+ _thisVal1,
+ _thisVal2,
+ }
+ export enum exports {
+ _thisVal1,
+ _thisVal2,
+ }
+ }
+
+==== collisionExportsRequireAndEnum_globalFile.ts (0 errors) ====
+ enum require {
+ _thisVal1,
+ _thisVal2,
+ }
+ enum exports {
+ _thisVal1,
+ _thisVal2,
+ }
+ namespace m3 {
+ enum require {
+ _thisVal1,
+ _thisVal2,
+ }
+ enum exports {
+ _thisVal1,
+ _thisVal2,
+ }
+ }
+ namespace m4 {
+ export enum require {
+ _thisVal1,
+ _thisVal2,
+ }
+ export enum exports {
+ _thisVal1,
+ _thisVal2,
+ }
+ }
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndEnum.js b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndEnum.js
new file mode 100644
index 0000000000000..92701f2c56563
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndEnum.js
@@ -0,0 +1,140 @@
+//// [tests/cases/compiler/collisionExportsRequireAndEnum.ts] ////
+
+//// [collisionExportsRequireAndEnum_externalmodule.ts]
+export enum require { // Error
+ _thisVal1,
+ _thisVal2,
+}
+export enum exports { // Error
+ _thisVal1,
+ _thisVal2,
+}
+namespace m1 {
+ enum require {
+ _thisVal1,
+ _thisVal2,
+ }
+ enum exports {
+ _thisVal1,
+ _thisVal2,
+ }
+}
+namespace m2 {
+ export enum require {
+ _thisVal1,
+ _thisVal2,
+ }
+ export enum exports {
+ _thisVal1,
+ _thisVal2,
+ }
+}
+
+//// [collisionExportsRequireAndEnum_globalFile.ts]
+enum require {
+ _thisVal1,
+ _thisVal2,
+}
+enum exports {
+ _thisVal1,
+ _thisVal2,
+}
+namespace m3 {
+ enum require {
+ _thisVal1,
+ _thisVal2,
+ }
+ enum exports {
+ _thisVal1,
+ _thisVal2,
+ }
+}
+namespace m4 {
+ export enum require {
+ _thisVal1,
+ _thisVal2,
+ }
+ export enum exports {
+ _thisVal1,
+ _thisVal2,
+ }
+}
+
+//// [collisionExportsRequireAndEnum_externalmodule.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.exports = exports.require = void 0;
+var require;
+(function (require) {
+ require[require["_thisVal1"] = 0] = "_thisVal1";
+ require[require["_thisVal2"] = 1] = "_thisVal2";
+})(require || (exports.require = require = {}));
+var exports;
+(function (exports) {
+ exports[exports["_thisVal1"] = 0] = "_thisVal1";
+ exports[exports["_thisVal2"] = 1] = "_thisVal2";
+})(exports || (exports.exports = exports = {}));
+var m1;
+(function (m1) {
+ let require;
+ (function (require) {
+ require[require["_thisVal1"] = 0] = "_thisVal1";
+ require[require["_thisVal2"] = 1] = "_thisVal2";
+ })(require || (require = {}));
+ let exports;
+ (function (exports) {
+ exports[exports["_thisVal1"] = 0] = "_thisVal1";
+ exports[exports["_thisVal2"] = 1] = "_thisVal2";
+ })(exports || (exports = {}));
+})(m1 || (m1 = {}));
+var m2;
+(function (m2) {
+ let require;
+ (function (require) {
+ require[require["_thisVal1"] = 0] = "_thisVal1";
+ require[require["_thisVal2"] = 1] = "_thisVal2";
+ })(require = m2.require || (m2.require = {}));
+ let exports;
+ (function (exports) {
+ exports[exports["_thisVal1"] = 0] = "_thisVal1";
+ exports[exports["_thisVal2"] = 1] = "_thisVal2";
+ })(exports = m2.exports || (m2.exports = {}));
+})(m2 || (m2 = {}));
+//// [collisionExportsRequireAndEnum_globalFile.js]
+"use strict";
+var require;
+(function (require) {
+ require[require["_thisVal1"] = 0] = "_thisVal1";
+ require[require["_thisVal2"] = 1] = "_thisVal2";
+})(require || (require = {}));
+var exports;
+(function (exports) {
+ exports[exports["_thisVal1"] = 0] = "_thisVal1";
+ exports[exports["_thisVal2"] = 1] = "_thisVal2";
+})(exports || (exports = {}));
+var m3;
+(function (m3) {
+ let require;
+ (function (require) {
+ require[require["_thisVal1"] = 0] = "_thisVal1";
+ require[require["_thisVal2"] = 1] = "_thisVal2";
+ })(require || (require = {}));
+ let exports;
+ (function (exports) {
+ exports[exports["_thisVal1"] = 0] = "_thisVal1";
+ exports[exports["_thisVal2"] = 1] = "_thisVal2";
+ })(exports || (exports = {}));
+})(m3 || (m3 = {}));
+var m4;
+(function (m4) {
+ let require;
+ (function (require) {
+ require[require["_thisVal1"] = 0] = "_thisVal1";
+ require[require["_thisVal2"] = 1] = "_thisVal2";
+ })(require = m4.require || (m4.require = {}));
+ let exports;
+ (function (exports) {
+ exports[exports["_thisVal1"] = 0] = "_thisVal1";
+ exports[exports["_thisVal2"] = 1] = "_thisVal2";
+ })(exports = m4.exports || (m4.exports = {}));
+})(m4 || (m4 = {}));
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndEnum.symbols b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndEnum.symbols
new file mode 100644
index 0000000000000..4ea0e744f4398
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndEnum.symbols
@@ -0,0 +1,129 @@
+//// [tests/cases/compiler/collisionExportsRequireAndEnum.ts] ////
+
+=== collisionExportsRequireAndEnum_externalmodule.ts ===
+export enum require { // Error
+>require : Symbol(require, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 0, 0))
+
+ _thisVal1,
+>_thisVal1 : Symbol(require._thisVal1, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 0, 21))
+
+ _thisVal2,
+>_thisVal2 : Symbol(require._thisVal2, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 1, 14))
+}
+export enum exports { // Error
+>exports : Symbol(exports, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 3, 1))
+
+ _thisVal1,
+>_thisVal1 : Symbol(exports._thisVal1, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 4, 21))
+
+ _thisVal2,
+>_thisVal2 : Symbol(exports._thisVal2, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 5, 14))
+}
+namespace m1 {
+>m1 : Symbol(m1, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 7, 1))
+
+ enum require {
+>require : Symbol(require, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 8, 14))
+
+ _thisVal1,
+>_thisVal1 : Symbol(require._thisVal1, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 9, 18))
+
+ _thisVal2,
+>_thisVal2 : Symbol(require._thisVal2, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 10, 18))
+ }
+ enum exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 12, 5))
+
+ _thisVal1,
+>_thisVal1 : Symbol(exports._thisVal1, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 13, 18))
+
+ _thisVal2,
+>_thisVal2 : Symbol(exports._thisVal2, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 14, 18))
+ }
+}
+namespace m2 {
+>m2 : Symbol(m2, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 17, 1))
+
+ export enum require {
+>require : Symbol(require, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 18, 14))
+
+ _thisVal1,
+>_thisVal1 : Symbol(require._thisVal1, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 19, 25))
+
+ _thisVal2,
+>_thisVal2 : Symbol(require._thisVal2, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 20, 18))
+ }
+ export enum exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 22, 5))
+
+ _thisVal1,
+>_thisVal1 : Symbol(exports._thisVal1, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 23, 25))
+
+ _thisVal2,
+>_thisVal2 : Symbol(exports._thisVal2, Decl(collisionExportsRequireAndEnum_externalmodule.ts, 24, 18))
+ }
+}
+
+=== collisionExportsRequireAndEnum_globalFile.ts ===
+enum require {
+>require : Symbol(require, Decl(collisionExportsRequireAndEnum_globalFile.ts, 0, 0))
+
+ _thisVal1,
+>_thisVal1 : Symbol(require._thisVal1, Decl(collisionExportsRequireAndEnum_globalFile.ts, 0, 14))
+
+ _thisVal2,
+>_thisVal2 : Symbol(require._thisVal2, Decl(collisionExportsRequireAndEnum_globalFile.ts, 1, 14))
+}
+enum exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndEnum_globalFile.ts, 3, 1))
+
+ _thisVal1,
+>_thisVal1 : Symbol(exports._thisVal1, Decl(collisionExportsRequireAndEnum_globalFile.ts, 4, 14))
+
+ _thisVal2,
+>_thisVal2 : Symbol(exports._thisVal2, Decl(collisionExportsRequireAndEnum_globalFile.ts, 5, 14))
+}
+namespace m3 {
+>m3 : Symbol(m3, Decl(collisionExportsRequireAndEnum_globalFile.ts, 7, 1))
+
+ enum require {
+>require : Symbol(require, Decl(collisionExportsRequireAndEnum_globalFile.ts, 8, 14))
+
+ _thisVal1,
+>_thisVal1 : Symbol(require._thisVal1, Decl(collisionExportsRequireAndEnum_globalFile.ts, 9, 18))
+
+ _thisVal2,
+>_thisVal2 : Symbol(require._thisVal2, Decl(collisionExportsRequireAndEnum_globalFile.ts, 10, 18))
+ }
+ enum exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndEnum_globalFile.ts, 12, 5))
+
+ _thisVal1,
+>_thisVal1 : Symbol(exports._thisVal1, Decl(collisionExportsRequireAndEnum_globalFile.ts, 13, 18))
+
+ _thisVal2,
+>_thisVal2 : Symbol(exports._thisVal2, Decl(collisionExportsRequireAndEnum_globalFile.ts, 14, 18))
+ }
+}
+namespace m4 {
+>m4 : Symbol(m4, Decl(collisionExportsRequireAndEnum_globalFile.ts, 17, 1))
+
+ export enum require {
+>require : Symbol(require, Decl(collisionExportsRequireAndEnum_globalFile.ts, 18, 14))
+
+ _thisVal1,
+>_thisVal1 : Symbol(require._thisVal1, Decl(collisionExportsRequireAndEnum_globalFile.ts, 19, 25))
+
+ _thisVal2,
+>_thisVal2 : Symbol(require._thisVal2, Decl(collisionExportsRequireAndEnum_globalFile.ts, 20, 18))
+ }
+ export enum exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndEnum_globalFile.ts, 22, 5))
+
+ _thisVal1,
+>_thisVal1 : Symbol(exports._thisVal1, Decl(collisionExportsRequireAndEnum_globalFile.ts, 23, 25))
+
+ _thisVal2,
+>_thisVal2 : Symbol(exports._thisVal2, Decl(collisionExportsRequireAndEnum_globalFile.ts, 24, 18))
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndEnum.types b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndEnum.types
new file mode 100644
index 0000000000000..3cde99df60634
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndEnum.types
@@ -0,0 +1,129 @@
+//// [tests/cases/compiler/collisionExportsRequireAndEnum.ts] ////
+
+=== collisionExportsRequireAndEnum_externalmodule.ts ===
+export enum require { // Error
+>require : require
+
+ _thisVal1,
+>_thisVal1 : require._thisVal1
+
+ _thisVal2,
+>_thisVal2 : require._thisVal2
+}
+export enum exports { // Error
+>exports : exports
+
+ _thisVal1,
+>_thisVal1 : exports._thisVal1
+
+ _thisVal2,
+>_thisVal2 : exports._thisVal2
+}
+namespace m1 {
+>m1 : typeof m1
+
+ enum require {
+>require : require
+
+ _thisVal1,
+>_thisVal1 : require._thisVal1
+
+ _thisVal2,
+>_thisVal2 : require._thisVal2
+ }
+ enum exports {
+>exports : exports
+
+ _thisVal1,
+>_thisVal1 : exports._thisVal1
+
+ _thisVal2,
+>_thisVal2 : exports._thisVal2
+ }
+}
+namespace m2 {
+>m2 : typeof m2
+
+ export enum require {
+>require : require
+
+ _thisVal1,
+>_thisVal1 : require._thisVal1
+
+ _thisVal2,
+>_thisVal2 : require._thisVal2
+ }
+ export enum exports {
+>exports : exports
+
+ _thisVal1,
+>_thisVal1 : exports._thisVal1
+
+ _thisVal2,
+>_thisVal2 : exports._thisVal2
+ }
+}
+
+=== collisionExportsRequireAndEnum_globalFile.ts ===
+enum require {
+>require : require
+
+ _thisVal1,
+>_thisVal1 : require._thisVal1
+
+ _thisVal2,
+>_thisVal2 : require._thisVal2
+}
+enum exports {
+>exports : exports
+
+ _thisVal1,
+>_thisVal1 : exports._thisVal1
+
+ _thisVal2,
+>_thisVal2 : exports._thisVal2
+}
+namespace m3 {
+>m3 : typeof m3
+
+ enum require {
+>require : require
+
+ _thisVal1,
+>_thisVal1 : require._thisVal1
+
+ _thisVal2,
+>_thisVal2 : require._thisVal2
+ }
+ enum exports {
+>exports : exports
+
+ _thisVal1,
+>_thisVal1 : exports._thisVal1
+
+ _thisVal2,
+>_thisVal2 : exports._thisVal2
+ }
+}
+namespace m4 {
+>m4 : typeof m4
+
+ export enum require {
+>require : require
+
+ _thisVal1,
+>_thisVal1 : require._thisVal1
+
+ _thisVal2,
+>_thisVal2 : require._thisVal2
+ }
+ export enum exports {
+>exports : exports
+
+ _thisVal1,
+>_thisVal1 : exports._thisVal1
+
+ _thisVal2,
+>_thisVal2 : exports._thisVal2
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndFunction.errors.txt b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndFunction.errors.txt
new file mode 100644
index 0000000000000..414dfe834f90f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndFunction.errors.txt
@@ -0,0 +1,31 @@
+collisionExportsRequireAndFunction.ts(1,17): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module.
+collisionExportsRequireAndFunction.ts(4,17): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module.
+
+
+==== collisionExportsRequireAndFunction.ts (2 errors) ====
+ export function exports() {
+ ~~~~~~~
+!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module.
+ return 1;
+ }
+ export function require() {
+ ~~~~~~~
+!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module.
+ return "require";
+ }
+ namespace m1 {
+ function exports() {
+ return 1;
+ }
+ function require() {
+ return "require";
+ }
+ }
+ namespace m2 {
+ export function exports() {
+ return 1;
+ }
+ export function require() {
+ return "require";
+ }
+ }
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndFunction.js b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndFunction.js
new file mode 100644
index 0000000000000..2f59c38f75b07
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndFunction.js
@@ -0,0 +1,57 @@
+//// [tests/cases/compiler/collisionExportsRequireAndFunction.ts] ////
+
+//// [collisionExportsRequireAndFunction.ts]
+export function exports() {
+ return 1;
+}
+export function require() {
+ return "require";
+}
+namespace m1 {
+ function exports() {
+ return 1;
+ }
+ function require() {
+ return "require";
+ }
+}
+namespace m2 {
+ export function exports() {
+ return 1;
+ }
+ export function require() {
+ return "require";
+ }
+}
+
+//// [collisionExportsRequireAndFunction.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.exports = exports;
+exports.require = require;
+function exports() {
+ return 1;
+}
+function require() {
+ return "require";
+}
+var m1;
+(function (m1) {
+ function exports() {
+ return 1;
+ }
+ function require() {
+ return "require";
+ }
+})(m1 || (m1 = {}));
+var m2;
+(function (m2) {
+ function exports() {
+ return 1;
+ }
+ m2.exports = exports;
+ function require() {
+ return "require";
+ }
+ m2.require = require;
+})(m2 || (m2 = {}));
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndFunction.symbols b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndFunction.symbols
new file mode 100644
index 0000000000000..ec4800881fcc0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndFunction.symbols
@@ -0,0 +1,41 @@
+//// [tests/cases/compiler/collisionExportsRequireAndFunction.ts] ////
+
+=== collisionExportsRequireAndFunction.ts ===
+export function exports() {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndFunction.ts, 0, 0))
+
+ return 1;
+}
+export function require() {
+>require : Symbol(require, Decl(collisionExportsRequireAndFunction.ts, 2, 1))
+
+ return "require";
+}
+namespace m1 {
+>m1 : Symbol(m1, Decl(collisionExportsRequireAndFunction.ts, 5, 1))
+
+ function exports() {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndFunction.ts, 6, 14))
+
+ return 1;
+ }
+ function require() {
+>require : Symbol(require, Decl(collisionExportsRequireAndFunction.ts, 9, 5))
+
+ return "require";
+ }
+}
+namespace m2 {
+>m2 : Symbol(m2, Decl(collisionExportsRequireAndFunction.ts, 13, 1))
+
+ export function exports() {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndFunction.ts, 14, 14))
+
+ return 1;
+ }
+ export function require() {
+>require : Symbol(require, Decl(collisionExportsRequireAndFunction.ts, 17, 5))
+
+ return "require";
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndFunction.types b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndFunction.types
new file mode 100644
index 0000000000000..8774b8341a134
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndFunction.types
@@ -0,0 +1,47 @@
+//// [tests/cases/compiler/collisionExportsRequireAndFunction.ts] ////
+
+=== collisionExportsRequireAndFunction.ts ===
+export function exports() {
+>exports : () => number
+
+ return 1;
+>1 : 1
+}
+export function require() {
+>require : () => string
+
+ return "require";
+>"require" : "require"
+}
+namespace m1 {
+>m1 : typeof m1
+
+ function exports() {
+>exports : () => number
+
+ return 1;
+>1 : 1
+ }
+ function require() {
+>require : () => string
+
+ return "require";
+>"require" : "require"
+ }
+}
+namespace m2 {
+>m2 : typeof m2
+
+ export function exports() {
+>exports : () => number
+
+ return 1;
+>1 : 1
+ }
+ export function require() {
+>require : () => string
+
+ return "require";
+>"require" : "require"
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndInternalModuleAlias.errors.txt b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndInternalModuleAlias.errors.txt
new file mode 100644
index 0000000000000..6eb1079637611
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndInternalModuleAlias.errors.txt
@@ -0,0 +1,31 @@
+collisionExportsRequireAndInternalModuleAlias.ts(5,8): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module.
+collisionExportsRequireAndInternalModuleAlias.ts(6,8): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module.
+
+
+==== collisionExportsRequireAndInternalModuleAlias.ts (2 errors) ====
+ export namespace m {
+ export class c {
+ }
+ }
+ import exports = m.c;
+ ~~~~~~~
+!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module.
+ import require = m.c;
+ ~~~~~~~
+!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module.
+ new exports();
+ new require();
+
+ namespace m1 {
+ import exports = m.c;
+ import require = m.c;
+ new exports();
+ new require();
+ }
+
+ namespace m2 {
+ export import exports = m.c;
+ export import require = m.c;
+ new exports();
+ new require();
+ }
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndInternalModuleAlias.js b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndInternalModuleAlias.js
new file mode 100644
index 0000000000000..20b9f38cd1a3f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndInternalModuleAlias.js
@@ -0,0 +1,54 @@
+//// [tests/cases/compiler/collisionExportsRequireAndInternalModuleAlias.ts] ////
+
+//// [collisionExportsRequireAndInternalModuleAlias.ts]
+export namespace m {
+ export class c {
+ }
+}
+import exports = m.c;
+import require = m.c;
+new exports();
+new require();
+
+namespace m1 {
+ import exports = m.c;
+ import require = m.c;
+ new exports();
+ new require();
+}
+
+namespace m2 {
+ export import exports = m.c;
+ export import require = m.c;
+ new exports();
+ new require();
+}
+
+//// [collisionExportsRequireAndInternalModuleAlias.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.m = void 0;
+var m;
+(function (m) {
+ class c {
+ }
+ m.c = c;
+})(m || (exports.m = m = {}));
+var exports = m.c;
+var require = m.c;
+new exports();
+new require();
+var m1;
+(function (m1) {
+ var exports = m.c;
+ var require = m.c;
+ new exports();
+ new require();
+})(m1 || (m1 = {}));
+var m2;
+(function (m2) {
+ m2.exports = m.c;
+ m2.require = m.c;
+ new m2.exports();
+ new m2.require();
+})(m2 || (m2 = {}));
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndInternalModuleAlias.symbols b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndInternalModuleAlias.symbols
new file mode 100644
index 0000000000000..af2fc2c8a3197
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndInternalModuleAlias.symbols
@@ -0,0 +1,65 @@
+//// [tests/cases/compiler/collisionExportsRequireAndInternalModuleAlias.ts] ////
+
+=== collisionExportsRequireAndInternalModuleAlias.ts ===
+export namespace m {
+>m : Symbol(m, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 0))
+
+ export class c {
+>c : Symbol(c, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 20))
+ }
+}
+import exports = m.c;
+>exports : Symbol(exports, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 3, 1))
+>m : Symbol(m, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 0))
+>c : Symbol(exports, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 20))
+
+import require = m.c;
+>require : Symbol(require, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 4, 21))
+>m : Symbol(m, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 0))
+>c : Symbol(exports, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 20))
+
+new exports();
+>exports : Symbol(exports, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 3, 1))
+
+new require();
+>require : Symbol(require, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 4, 21))
+
+namespace m1 {
+>m1 : Symbol(m1, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 7, 14))
+
+ import exports = m.c;
+>exports : Symbol(exports, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 9, 14))
+>m : Symbol(m, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 0))
+>c : Symbol(exports, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 20))
+
+ import require = m.c;
+>require : Symbol(require, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 10, 25))
+>m : Symbol(m, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 0))
+>c : Symbol(exports, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 20))
+
+ new exports();
+>exports : Symbol(exports, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 9, 14))
+
+ new require();
+>require : Symbol(require, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 10, 25))
+}
+
+namespace m2 {
+>m2 : Symbol(m2, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 14, 1))
+
+ export import exports = m.c;
+>exports : Symbol(exports, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 16, 14))
+>m : Symbol(m, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 0))
+>c : Symbol(exports, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 20))
+
+ export import require = m.c;
+>require : Symbol(require, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 17, 32))
+>m : Symbol(m, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 0))
+>c : Symbol(exports, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 0, 20))
+
+ new exports();
+>exports : Symbol(exports, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 16, 14))
+
+ new require();
+>require : Symbol(require, Decl(collisionExportsRequireAndInternalModuleAlias.ts, 17, 32))
+}
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndInternalModuleAlias.types b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndInternalModuleAlias.types
new file mode 100644
index 0000000000000..cb386b3fd95ba
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndInternalModuleAlias.types
@@ -0,0 +1,71 @@
+//// [tests/cases/compiler/collisionExportsRequireAndInternalModuleAlias.ts] ////
+
+=== collisionExportsRequireAndInternalModuleAlias.ts ===
+export namespace m {
+>m : typeof m
+
+ export class c {
+>c : c
+ }
+}
+import exports = m.c;
+>exports : typeof exports
+>m : typeof m
+>c : exports
+
+import require = m.c;
+>require : typeof exports
+>m : typeof m
+>c : exports
+
+new exports();
+>new exports() : exports
+>exports : typeof exports
+
+new require();
+>new require() : exports
+>require : typeof exports
+
+namespace m1 {
+>m1 : typeof m1
+
+ import exports = m.c;
+>exports : typeof exports
+>m : typeof m
+>c : exports
+
+ import require = m.c;
+>require : typeof exports
+>m : typeof m
+>c : exports
+
+ new exports();
+>new exports() : exports
+>exports : typeof exports
+
+ new require();
+>new require() : exports
+>require : typeof exports
+}
+
+namespace m2 {
+>m2 : typeof m2
+
+ export import exports = m.c;
+>exports : typeof exports
+>m : typeof m
+>c : exports
+
+ export import require = m.c;
+>require : typeof exports
+>m : typeof m
+>c : exports
+
+ new exports();
+>new exports() : exports
+>exports : typeof exports
+
+ new require();
+>new require() : exports
+>require : typeof exports
+}
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndModule.errors.txt b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndModule.errors.txt
new file mode 100644
index 0000000000000..aecf2080c3bc7
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndModule.errors.txt
@@ -0,0 +1,104 @@
+collisionExportsRequireAndModule_externalmodule.ts(1,18): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module.
+collisionExportsRequireAndModule_externalmodule.ts(8,5): error TS2322: Type 'null' is not assignable to type 'I'.
+collisionExportsRequireAndModule_externalmodule.ts(10,18): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module.
+collisionExportsRequireAndModule_externalmodule.ts(17,5): error TS2322: Type 'null' is not assignable to type 'I'.
+
+
+==== collisionExportsRequireAndModule_externalmodule.ts (4 errors) ====
+ export namespace require {
+ ~~~~~~~
+!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module.
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ export function foo(): require.I {
+ return null;
+ ~~~~~~
+!!! error TS2322: Type 'null' is not assignable to type 'I'.
+ }
+ export namespace exports {
+ ~~~~~~~
+!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module.
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ export function foo2(): exports.I {
+ return null;
+ ~~~~~~
+!!! error TS2322: Type 'null' is not assignable to type 'I'.
+ }
+ namespace m1 {
+ namespace require {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ namespace exports {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ }
+ namespace m2 {
+ export namespace require {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ export namespace exports {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ }
+
+==== collisionExportsRequireAndModule_globalFile.ts (0 errors) ====
+ namespace require {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ namespace exports {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ namespace m3 {
+ namespace require {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ namespace exports {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ }
+ namespace m4 {
+ export namespace require {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ export namespace exports {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndModule.js b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndModule.js
new file mode 100644
index 0000000000000..bede80115730e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndModule.js
@@ -0,0 +1,191 @@
+//// [tests/cases/compiler/collisionExportsRequireAndModule.ts] ////
+
+//// [collisionExportsRequireAndModule_externalmodule.ts]
+export namespace require {
+ export interface I {
+ }
+ export class C {
+ }
+}
+export function foo(): require.I {
+ return null;
+}
+export namespace exports {
+ export interface I {
+ }
+ export class C {
+ }
+}
+export function foo2(): exports.I {
+ return null;
+}
+namespace m1 {
+ namespace require {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ namespace exports {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+}
+namespace m2 {
+ export namespace require {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ export namespace exports {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+}
+
+//// [collisionExportsRequireAndModule_globalFile.ts]
+namespace require {
+ export interface I {
+ }
+ export class C {
+ }
+}
+namespace exports {
+ export interface I {
+ }
+ export class C {
+ }
+}
+namespace m3 {
+ namespace require {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ namespace exports {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+}
+namespace m4 {
+ export namespace require {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+ export namespace exports {
+ export interface I {
+ }
+ export class C {
+ }
+ }
+}
+
+
+//// [collisionExportsRequireAndModule_externalmodule.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.exports = exports.require = void 0;
+exports.foo = foo;
+exports.foo2 = foo2;
+var require;
+(function (require) {
+ class C {
+ }
+ require.C = C;
+})(require || (exports.require = require = {}));
+function foo() {
+ return null;
+}
+var exports;
+(function (exports) {
+ class C {
+ }
+ exports.C = C;
+})(exports || (exports.exports = exports = {}));
+function foo2() {
+ return null;
+}
+var m1;
+(function (m1) {
+ let require;
+ (function (require) {
+ class C {
+ }
+ require.C = C;
+ })(require || (require = {}));
+ let exports;
+ (function (exports) {
+ class C {
+ }
+ exports.C = C;
+ })(exports || (exports = {}));
+})(m1 || (m1 = {}));
+var m2;
+(function (m2) {
+ let require;
+ (function (require) {
+ class C {
+ }
+ require.C = C;
+ })(require = m2.require || (m2.require = {}));
+ let exports;
+ (function (exports) {
+ class C {
+ }
+ exports.C = C;
+ })(exports = m2.exports || (m2.exports = {}));
+})(m2 || (m2 = {}));
+//// [collisionExportsRequireAndModule_globalFile.js]
+"use strict";
+var require;
+(function (require) {
+ class C {
+ }
+ require.C = C;
+})(require || (require = {}));
+var exports;
+(function (exports) {
+ class C {
+ }
+ exports.C = C;
+})(exports || (exports = {}));
+var m3;
+(function (m3) {
+ let require;
+ (function (require) {
+ class C {
+ }
+ require.C = C;
+ })(require || (require = {}));
+ let exports;
+ (function (exports) {
+ class C {
+ }
+ exports.C = C;
+ })(exports || (exports = {}));
+})(m3 || (m3 = {}));
+var m4;
+(function (m4) {
+ let require;
+ (function (require) {
+ class C {
+ }
+ require.C = C;
+ })(require = m4.require || (m4.require = {}));
+ let exports;
+ (function (exports) {
+ class C {
+ }
+ exports.C = C;
+ })(exports = m4.exports || (m4.exports = {}));
+})(m4 || (m4 = {}));
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndModule.symbols b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndModule.symbols
new file mode 100644
index 0000000000000..77e441d951e31
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndModule.symbols
@@ -0,0 +1,156 @@
+//// [tests/cases/compiler/collisionExportsRequireAndModule.ts] ////
+
+=== collisionExportsRequireAndModule_externalmodule.ts ===
+export namespace require {
+>require : Symbol(require, Decl(collisionExportsRequireAndModule_externalmodule.ts, 0, 0))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndModule_externalmodule.ts, 0, 26))
+ }
+ export class C {
+>C : Symbol(C, Decl(collisionExportsRequireAndModule_externalmodule.ts, 2, 5))
+ }
+}
+export function foo(): require.I {
+>foo : Symbol(foo, Decl(collisionExportsRequireAndModule_externalmodule.ts, 5, 1))
+>require : Symbol(require, Decl(collisionExportsRequireAndModule_externalmodule.ts, 0, 0))
+>I : Symbol(require.I, Decl(collisionExportsRequireAndModule_externalmodule.ts, 0, 26))
+
+ return null;
+}
+export namespace exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndModule_externalmodule.ts, 8, 1))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndModule_externalmodule.ts, 9, 26))
+ }
+ export class C {
+>C : Symbol(C, Decl(collisionExportsRequireAndModule_externalmodule.ts, 11, 5))
+ }
+}
+export function foo2(): exports.I {
+>foo2 : Symbol(foo2, Decl(collisionExportsRequireAndModule_externalmodule.ts, 14, 1))
+>exports : Symbol(exports, Decl(collisionExportsRequireAndModule_externalmodule.ts, 8, 1))
+>I : Symbol(exports.I, Decl(collisionExportsRequireAndModule_externalmodule.ts, 9, 26))
+
+ return null;
+}
+namespace m1 {
+>m1 : Symbol(m1, Decl(collisionExportsRequireAndModule_externalmodule.ts, 17, 1))
+
+ namespace require {
+>require : Symbol(require, Decl(collisionExportsRequireAndModule_externalmodule.ts, 18, 14))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndModule_externalmodule.ts, 19, 23))
+ }
+ export class C {
+>C : Symbol(C, Decl(collisionExportsRequireAndModule_externalmodule.ts, 21, 9))
+ }
+ }
+ namespace exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndModule_externalmodule.ts, 24, 5))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndModule_externalmodule.ts, 25, 23))
+ }
+ export class C {
+>C : Symbol(C, Decl(collisionExportsRequireAndModule_externalmodule.ts, 27, 9))
+ }
+ }
+}
+namespace m2 {
+>m2 : Symbol(m2, Decl(collisionExportsRequireAndModule_externalmodule.ts, 31, 1))
+
+ export namespace require {
+>require : Symbol(require, Decl(collisionExportsRequireAndModule_externalmodule.ts, 32, 14))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndModule_externalmodule.ts, 33, 30))
+ }
+ export class C {
+>C : Symbol(C, Decl(collisionExportsRequireAndModule_externalmodule.ts, 35, 9))
+ }
+ }
+ export namespace exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndModule_externalmodule.ts, 38, 5))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndModule_externalmodule.ts, 39, 30))
+ }
+ export class C {
+>C : Symbol(C, Decl(collisionExportsRequireAndModule_externalmodule.ts, 41, 9))
+ }
+ }
+}
+
+=== collisionExportsRequireAndModule_globalFile.ts ===
+namespace require {
+>require : Symbol(require, Decl(collisionExportsRequireAndModule_globalFile.ts, 0, 0))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndModule_globalFile.ts, 0, 19))
+ }
+ export class C {
+>C : Symbol(C, Decl(collisionExportsRequireAndModule_globalFile.ts, 2, 5))
+ }
+}
+namespace exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndModule_globalFile.ts, 5, 1))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndModule_globalFile.ts, 6, 19))
+ }
+ export class C {
+>C : Symbol(C, Decl(collisionExportsRequireAndModule_globalFile.ts, 8, 5))
+ }
+}
+namespace m3 {
+>m3 : Symbol(m3, Decl(collisionExportsRequireAndModule_globalFile.ts, 11, 1))
+
+ namespace require {
+>require : Symbol(require, Decl(collisionExportsRequireAndModule_globalFile.ts, 12, 14))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndModule_globalFile.ts, 13, 23))
+ }
+ export class C {
+>C : Symbol(C, Decl(collisionExportsRequireAndModule_globalFile.ts, 15, 9))
+ }
+ }
+ namespace exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndModule_globalFile.ts, 18, 5))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndModule_globalFile.ts, 19, 23))
+ }
+ export class C {
+>C : Symbol(C, Decl(collisionExportsRequireAndModule_globalFile.ts, 21, 9))
+ }
+ }
+}
+namespace m4 {
+>m4 : Symbol(m4, Decl(collisionExportsRequireAndModule_globalFile.ts, 25, 1))
+
+ export namespace require {
+>require : Symbol(require, Decl(collisionExportsRequireAndModule_globalFile.ts, 26, 14))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndModule_globalFile.ts, 27, 30))
+ }
+ export class C {
+>C : Symbol(C, Decl(collisionExportsRequireAndModule_globalFile.ts, 29, 9))
+ }
+ }
+ export namespace exports {
+>exports : Symbol(exports, Decl(collisionExportsRequireAndModule_globalFile.ts, 32, 5))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndModule_globalFile.ts, 33, 30))
+ }
+ export class C {
+>C : Symbol(C, Decl(collisionExportsRequireAndModule_globalFile.ts, 35, 9))
+ }
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndModule.types b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndModule.types
new file mode 100644
index 0000000000000..171367ef95eb5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndModule.types
@@ -0,0 +1,142 @@
+//// [tests/cases/compiler/collisionExportsRequireAndModule.ts] ////
+
+=== collisionExportsRequireAndModule_externalmodule.ts ===
+export namespace require {
+>require : typeof require
+
+ export interface I {
+ }
+ export class C {
+>C : C
+ }
+}
+export function foo(): require.I {
+>foo : () => require.I
+>require : any
+
+ return null;
+}
+export namespace exports {
+>exports : typeof exports
+
+ export interface I {
+ }
+ export class C {
+>C : C
+ }
+}
+export function foo2(): exports.I {
+>foo2 : () => exports.I
+>exports : any
+
+ return null;
+}
+namespace m1 {
+>m1 : typeof m1
+
+ namespace require {
+>require : typeof require
+
+ export interface I {
+ }
+ export class C {
+>C : C
+ }
+ }
+ namespace exports {
+>exports : typeof exports
+
+ export interface I {
+ }
+ export class C {
+>C : C
+ }
+ }
+}
+namespace m2 {
+>m2 : typeof m2
+
+ export namespace require {
+>require : typeof require
+
+ export interface I {
+ }
+ export class C {
+>C : C
+ }
+ }
+ export namespace exports {
+>exports : typeof exports
+
+ export interface I {
+ }
+ export class C {
+>C : C
+ }
+ }
+}
+
+=== collisionExportsRequireAndModule_globalFile.ts ===
+namespace require {
+>require : typeof require
+
+ export interface I {
+ }
+ export class C {
+>C : C
+ }
+}
+namespace exports {
+>exports : typeof exports
+
+ export interface I {
+ }
+ export class C {
+>C : C
+ }
+}
+namespace m3 {
+>m3 : typeof m3
+
+ namespace require {
+>require : typeof require
+
+ export interface I {
+ }
+ export class C {
+>C : C
+ }
+ }
+ namespace exports {
+>exports : typeof exports
+
+ export interface I {
+ }
+ export class C {
+>C : C
+ }
+ }
+}
+namespace m4 {
+>m4 : typeof m4
+
+ export namespace require {
+>require : typeof require
+
+ export interface I {
+ }
+ export class C {
+>C : C
+ }
+ }
+ export namespace exports {
+>exports : typeof exports
+
+ export interface I {
+ }
+ export class C {
+>C : C
+ }
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndUninstantiatedModule.errors.txt b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndUninstantiatedModule.errors.txt
new file mode 100644
index 0000000000000..7b302a77ad064
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndUninstantiatedModule.errors.txt
@@ -0,0 +1,23 @@
+collisionExportsRequireAndUninstantiatedModule.ts(6,5): error TS2322: Type 'null' is not assignable to type 'I'.
+collisionExportsRequireAndUninstantiatedModule.ts(13,5): error TS2322: Type 'null' is not assignable to type 'I'.
+
+
+==== collisionExportsRequireAndUninstantiatedModule.ts (2 errors) ====
+ export namespace require { // no error
+ export interface I {
+ }
+ }
+ export function foo(): require.I {
+ return null;
+ ~~~~~~
+!!! error TS2322: Type 'null' is not assignable to type 'I'.
+ }
+ export namespace exports { // no error
+ export interface I {
+ }
+ }
+ export function foo2(): exports.I {
+ return null;
+ ~~~~~~
+!!! error TS2322: Type 'null' is not assignable to type 'I'.
+ }
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndUninstantiatedModule.js b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndUninstantiatedModule.js
new file mode 100644
index 0000000000000..e06e3bf0c0021
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndUninstantiatedModule.js
@@ -0,0 +1,29 @@
+//// [tests/cases/compiler/collisionExportsRequireAndUninstantiatedModule.ts] ////
+
+//// [collisionExportsRequireAndUninstantiatedModule.ts]
+export namespace require { // no error
+ export interface I {
+ }
+}
+export function foo(): require.I {
+ return null;
+}
+export namespace exports { // no error
+ export interface I {
+ }
+}
+export function foo2(): exports.I {
+ return null;
+}
+
+//// [collisionExportsRequireAndUninstantiatedModule.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.foo = foo;
+exports.foo2 = foo2;
+function foo() {
+ return null;
+}
+function foo2() {
+ return null;
+}
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndUninstantiatedModule.symbols b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndUninstantiatedModule.symbols
new file mode 100644
index 0000000000000..cc04d6ddaee28
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndUninstantiatedModule.symbols
@@ -0,0 +1,31 @@
+//// [tests/cases/compiler/collisionExportsRequireAndUninstantiatedModule.ts] ////
+
+=== collisionExportsRequireAndUninstantiatedModule.ts ===
+export namespace require { // no error
+>require : Symbol(require, Decl(collisionExportsRequireAndUninstantiatedModule.ts, 0, 0))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndUninstantiatedModule.ts, 0, 26))
+ }
+}
+export function foo(): require.I {
+>foo : Symbol(foo, Decl(collisionExportsRequireAndUninstantiatedModule.ts, 3, 1))
+>require : Symbol(require, Decl(collisionExportsRequireAndUninstantiatedModule.ts, 0, 0))
+>I : Symbol(require.I, Decl(collisionExportsRequireAndUninstantiatedModule.ts, 0, 26))
+
+ return null;
+}
+export namespace exports { // no error
+>exports : Symbol(exports, Decl(collisionExportsRequireAndUninstantiatedModule.ts, 6, 1))
+
+ export interface I {
+>I : Symbol(I, Decl(collisionExportsRequireAndUninstantiatedModule.ts, 7, 26))
+ }
+}
+export function foo2(): exports.I {
+>foo2 : Symbol(foo2, Decl(collisionExportsRequireAndUninstantiatedModule.ts, 10, 1))
+>exports : Symbol(exports, Decl(collisionExportsRequireAndUninstantiatedModule.ts, 6, 1))
+>I : Symbol(exports.I, Decl(collisionExportsRequireAndUninstantiatedModule.ts, 7, 26))
+
+ return null;
+}
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndUninstantiatedModule.types b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndUninstantiatedModule.types
new file mode 100644
index 0000000000000..3f9b481ce32b3
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndUninstantiatedModule.types
@@ -0,0 +1,23 @@
+//// [tests/cases/compiler/collisionExportsRequireAndUninstantiatedModule.ts] ////
+
+=== collisionExportsRequireAndUninstantiatedModule.ts ===
+export namespace require { // no error
+ export interface I {
+ }
+}
+export function foo(): require.I {
+>foo : () => require.I
+>require : any
+
+ return null;
+}
+export namespace exports { // no error
+ export interface I {
+ }
+}
+export function foo2(): exports.I {
+>foo2 : () => exports.I
+>exports : any
+
+ return null;
+}
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndVar.errors.txt b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndVar.errors.txt
new file mode 100644
index 0000000000000..5d6c84e914cdd
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndVar.errors.txt
@@ -0,0 +1,33 @@
+collisionExportsRequireAndVar_externalmodule.ts(3,5): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module.
+collisionExportsRequireAndVar_externalmodule.ts(4,5): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module.
+
+
+==== collisionExportsRequireAndVar_externalmodule.ts (2 errors) ====
+ export function foo() {
+ }
+ var exports = 1;
+ ~~~~~~~
+!!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module.
+ var require = "require";
+ ~~~~~~~
+!!! error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module.
+ namespace m1 {
+ var exports = 0;
+ var require = "require";
+ }
+ namespace m2 {
+ export var exports = 0;
+ export var require = "require";
+ }
+
+==== collisionExportsRequireAndVar_globalFile.ts (0 errors) ====
+ var exports = 0;
+ var require = "require";
+ namespace m3 {
+ var exports = 0;
+ var require = "require";
+ }
+ namespace m4 {
+ export var exports = 0;
+ export var require = "require";
+ }
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndVar.js b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndVar.js
new file mode 100644
index 0000000000000..047fa9113c877
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndVar.js
@@ -0,0 +1,60 @@
+//// [tests/cases/compiler/collisionExportsRequireAndVar.ts] ////
+
+//// [collisionExportsRequireAndVar_externalmodule.ts]
+export function foo() {
+}
+var exports = 1;
+var require = "require";
+namespace m1 {
+ var exports = 0;
+ var require = "require";
+}
+namespace m2 {
+ export var exports = 0;
+ export var require = "require";
+}
+
+//// [collisionExportsRequireAndVar_globalFile.ts]
+var exports = 0;
+var require = "require";
+namespace m3 {
+ var exports = 0;
+ var require = "require";
+}
+namespace m4 {
+ export var exports = 0;
+ export var require = "require";
+}
+
+//// [collisionExportsRequireAndVar_externalmodule.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.foo = foo;
+function foo() {
+}
+var exports = 1;
+var require = "require";
+var m1;
+(function (m1) {
+ var exports = 0;
+ var require = "require";
+})(m1 || (m1 = {}));
+var m2;
+(function (m2) {
+ m2.exports = 0;
+ m2.require = "require";
+})(m2 || (m2 = {}));
+//// [collisionExportsRequireAndVar_globalFile.js]
+"use strict";
+var exports = 0;
+var require = "require";
+var m3;
+(function (m3) {
+ var exports = 0;
+ var require = "require";
+})(m3 || (m3 = {}));
+var m4;
+(function (m4) {
+ m4.exports = 0;
+ m4.require = "require";
+})(m4 || (m4 = {}));
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndVar.symbols b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndVar.symbols
new file mode 100644
index 0000000000000..70ac97df745c6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndVar.symbols
@@ -0,0 +1,56 @@
+//// [tests/cases/compiler/collisionExportsRequireAndVar.ts] ////
+
+=== collisionExportsRequireAndVar_externalmodule.ts ===
+export function foo() {
+>foo : Symbol(foo, Decl(collisionExportsRequireAndVar_externalmodule.ts, 0, 0))
+}
+var exports = 1;
+>exports : Symbol(exports, Decl(collisionExportsRequireAndVar_externalmodule.ts, 2, 3))
+
+var require = "require";
+>require : Symbol(require, Decl(collisionExportsRequireAndVar_externalmodule.ts, 3, 3))
+
+namespace m1 {
+>m1 : Symbol(m1, Decl(collisionExportsRequireAndVar_externalmodule.ts, 3, 24))
+
+ var exports = 0;
+>exports : Symbol(exports, Decl(collisionExportsRequireAndVar_externalmodule.ts, 5, 7))
+
+ var require = "require";
+>require : Symbol(require, Decl(collisionExportsRequireAndVar_externalmodule.ts, 6, 7))
+}
+namespace m2 {
+>m2 : Symbol(m2, Decl(collisionExportsRequireAndVar_externalmodule.ts, 7, 1))
+
+ export var exports = 0;
+>exports : Symbol(exports, Decl(collisionExportsRequireAndVar_externalmodule.ts, 9, 14))
+
+ export var require = "require";
+>require : Symbol(require, Decl(collisionExportsRequireAndVar_externalmodule.ts, 10, 14))
+}
+
+=== collisionExportsRequireAndVar_globalFile.ts ===
+var exports = 0;
+>exports : Symbol(exports, Decl(collisionExportsRequireAndVar_globalFile.ts, 0, 3))
+
+var require = "require";
+>require : Symbol(require, Decl(collisionExportsRequireAndVar_globalFile.ts, 1, 3))
+
+namespace m3 {
+>m3 : Symbol(m3, Decl(collisionExportsRequireAndVar_globalFile.ts, 1, 24))
+
+ var exports = 0;
+>exports : Symbol(exports, Decl(collisionExportsRequireAndVar_globalFile.ts, 3, 7))
+
+ var require = "require";
+>require : Symbol(require, Decl(collisionExportsRequireAndVar_globalFile.ts, 4, 7))
+}
+namespace m4 {
+>m4 : Symbol(m4, Decl(collisionExportsRequireAndVar_globalFile.ts, 5, 1))
+
+ export var exports = 0;
+>exports : Symbol(exports, Decl(collisionExportsRequireAndVar_globalFile.ts, 7, 14))
+
+ export var require = "require";
+>require : Symbol(require, Decl(collisionExportsRequireAndVar_globalFile.ts, 8, 14))
+}
diff --git a/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndVar.types b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndVar.types
new file mode 100644
index 0000000000000..d69f30d9cba8e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/collisionExportsRequireAndVar.types
@@ -0,0 +1,68 @@
+//// [tests/cases/compiler/collisionExportsRequireAndVar.ts] ////
+
+=== collisionExportsRequireAndVar_externalmodule.ts ===
+export function foo() {
+>foo : () => void
+}
+var exports = 1;
+>exports : number
+>1 : 1
+
+var require = "require";
+>require : string
+>"require" : "require"
+
+namespace m1 {
+>m1 : typeof m1
+
+ var exports = 0;
+>exports : number
+>0 : 0
+
+ var require = "require";
+>require : string
+>"require" : "require"
+}
+namespace m2 {
+>m2 : typeof m2
+
+ export var exports = 0;
+>exports : number
+>0 : 0
+
+ export var require = "require";
+>require : string
+>"require" : "require"
+}
+
+=== collisionExportsRequireAndVar_globalFile.ts ===
+var exports = 0;
+>exports : number
+>0 : 0
+
+var require = "require";
+>require : string
+>"require" : "require"
+
+namespace m3 {
+>m3 : typeof m3
+
+ var exports = 0;
+>exports : number
+>0 : 0
+
+ var require = "require";
+>require : string
+>"require" : "require"
+}
+namespace m4 {
+>m4 : typeof m4
+
+ export var exports = 0;
+>exports : number
+>0 : 0
+
+ export var require = "require";
+>require : string
+>"require" : "require"
+}
diff --git a/tsc/testdata/baselines/reference/compiler/commentsBeforeVariableStatement1.js b/tsc/testdata/baselines/reference/compiler/commentsBeforeVariableStatement1.js
new file mode 100644
index 0000000000000..22b48534738bb
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsBeforeVariableStatement1.js
@@ -0,0 +1,11 @@
+//// [tests/cases/compiler/commentsBeforeVariableStatement1.ts] ////
+
+//// [commentsBeforeVariableStatement1.ts]
+/** b's comment*/
+export var b: number;
+
+
+//// [commentsBeforeVariableStatement1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.b = void 0;
diff --git a/tsc/testdata/baselines/reference/compiler/commentsBeforeVariableStatement1.symbols b/tsc/testdata/baselines/reference/compiler/commentsBeforeVariableStatement1.symbols
new file mode 100644
index 0000000000000..f7bf2435af4b0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsBeforeVariableStatement1.symbols
@@ -0,0 +1,7 @@
+//// [tests/cases/compiler/commentsBeforeVariableStatement1.ts] ////
+
+=== commentsBeforeVariableStatement1.ts ===
+/** b's comment*/
+export var b: number;
+>b : Symbol(b, Decl(commentsBeforeVariableStatement1.ts, 1, 10))
+
diff --git a/tsc/testdata/baselines/reference/compiler/commentsBeforeVariableStatement1.types b/tsc/testdata/baselines/reference/compiler/commentsBeforeVariableStatement1.types
new file mode 100644
index 0000000000000..af719ce11e8f2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsBeforeVariableStatement1.types
@@ -0,0 +1,7 @@
+//// [tests/cases/compiler/commentsBeforeVariableStatement1.ts] ////
+
+=== commentsBeforeVariableStatement1.ts ===
+/** b's comment*/
+export var b: number;
+>b : number
+
diff --git a/tsc/testdata/baselines/reference/compiler/commentsDottedModuleName(target=es2015).js b/tsc/testdata/baselines/reference/compiler/commentsDottedModuleName(target=es2015).js
new file mode 100644
index 0000000000000..33e55c614c3b5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsDottedModuleName(target=es2015).js
@@ -0,0 +1,33 @@
+//// [tests/cases/compiler/commentsDottedModuleName.ts] ////
+
+//// [commentsDottedModuleName.ts]
+/** this is multi declare module*/
+export namespace outerModule.InnerModule {
+ /// class b comment
+ export class b {
+ }
+}
+
+//// [commentsDottedModuleName.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.outerModule = void 0;
+/** this is multi declare module*/
+var outerModule;
+(function (outerModule) {
+ var InnerModule;
+ (function (InnerModule) {
+ /// class b comment
+ class b {
+ }
+ InnerModule.b = b;
+ })(InnerModule = outerModule.InnerModule || (outerModule.InnerModule = {}));
+})(outerModule || (exports.outerModule = outerModule = {}));
+
+
+//// [commentsDottedModuleName.d.ts]
+/** this is multi declare module*/
+export declare namespace outerModule.InnerModule {
+ class b {
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/commentsDottedModuleName(target=es2015).symbols b/tsc/testdata/baselines/reference/compiler/commentsDottedModuleName(target=es2015).symbols
new file mode 100644
index 0000000000000..f30db4fce00ce
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsDottedModuleName(target=es2015).symbols
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/commentsDottedModuleName.ts] ////
+
+=== commentsDottedModuleName.ts ===
+/** this is multi declare module*/
+export namespace outerModule.InnerModule {
+>outerModule : Symbol(outerModule, Decl(commentsDottedModuleName.ts, 0, 0))
+>InnerModule : Symbol(InnerModule, Decl(commentsDottedModuleName.ts, 1, 29))
+
+ /// class b comment
+ export class b {
+>b : Symbol(b, Decl(commentsDottedModuleName.ts, 1, 42))
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/commentsDottedModuleName(target=es2015).types b/tsc/testdata/baselines/reference/compiler/commentsDottedModuleName(target=es2015).types
new file mode 100644
index 0000000000000..ce40cccc64dcf
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsDottedModuleName(target=es2015).types
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/commentsDottedModuleName.ts] ////
+
+=== commentsDottedModuleName.ts ===
+/** this is multi declare module*/
+export namespace outerModule.InnerModule {
+>outerModule : typeof outerModule
+>InnerModule : typeof InnerModule
+
+ /// class b comment
+ export class b {
+>b : b
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/commentsExternalModules(target=es2015).errors.txt b/tsc/testdata/baselines/reference/compiler/commentsExternalModules(target=es2015).errors.txt
new file mode 100644
index 0000000000000..180e8158bf46a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsExternalModules(target=es2015).errors.txt
@@ -0,0 +1,64 @@
+commentsExternalModules_1.ts(2,25): error TS2307: Cannot find module 'commentsExternalModules_0' or its corresponding type declarations.
+
+
+==== commentsExternalModules_1.ts (1 errors) ====
+ /**This is on import declaration*/
+ import extMod = require("commentsExternalModules_0"); // trailing comment1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'commentsExternalModules_0' or its corresponding type declarations.
+ extMod.m1.fooExport();
+ var newVar = new extMod.m1.m2.c();
+ extMod.m4.fooExport();
+ var newVar2 = new extMod.m4.m2.c();
+
+==== commentsExternalModules_0.ts (0 errors) ====
+ /** Module comment*/
+ export namespace m1 {
+ /** b's comment*/
+ export var b: number;
+ /** foo's comment*/
+ function foo() {
+ return b;
+ }
+ /** m2 comments*/
+ export namespace m2 {
+ /** class comment;*/
+ export class c {
+ };
+ /** i*/
+ export var i = new c();
+ }
+ /** exported function*/
+ export function fooExport() {
+ return foo();
+ }
+ }
+ m1.fooExport();
+ var myvar = new m1.m2.c();
+
+ /** Module comment */
+ export namespace m4 {
+ /** b's comment */
+ export var b: number;
+ /** foo's comment
+ */
+ function foo() {
+ return b;
+ }
+ /** m2 comments
+ */
+ export namespace m2 {
+ /** class comment; */
+ export class c {
+ };
+ /** i */
+ export var i = new c();
+ }
+ /** exported function */
+ export function fooExport() {
+ return foo();
+ }
+ }
+ m4.fooExport();
+ var myvar2 = new m4.m2.c();
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/commentsExternalModules(target=es2015).js b/tsc/testdata/baselines/reference/compiler/commentsExternalModules(target=es2015).js
new file mode 100644
index 0000000000000..59ed456b71925
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsExternalModules(target=es2015).js
@@ -0,0 +1,75 @@
+//// [tests/cases/compiler/commentsExternalModules.ts] ////
+
+//// [commentsExternalModules_0.ts]
+/** Module comment*/
+export namespace m1 {
+ /** b's comment*/
+ export var b: number;
+ /** foo's comment*/
+ function foo() {
+ return b;
+ }
+ /** m2 comments*/
+ export namespace m2 {
+ /** class comment;*/
+ export class c {
+ };
+ /** i*/
+ export var i = new c();
+ }
+ /** exported function*/
+ export function fooExport() {
+ return foo();
+ }
+}
+m1.fooExport();
+var myvar = new m1.m2.c();
+
+/** Module comment */
+export namespace m4 {
+ /** b's comment */
+ export var b: number;
+ /** foo's comment
+ */
+ function foo() {
+ return b;
+ }
+ /** m2 comments
+ */
+ export namespace m2 {
+ /** class comment; */
+ export class c {
+ };
+ /** i */
+ export var i = new c();
+ }
+ /** exported function */
+ export function fooExport() {
+ return foo();
+ }
+}
+m4.fooExport();
+var myvar2 = new m4.m2.c();
+
+//// [commentsExternalModules_1.ts]
+/**This is on import declaration*/
+import extMod = require("commentsExternalModules_0"); // trailing comment1
+extMod.m1.fooExport();
+var newVar = new extMod.m1.m2.c();
+extMod.m4.fooExport();
+var newVar2 = new extMod.m4.m2.c();
+
+
+//// [commentsExternalModules_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+/**This is on import declaration*/
+const extMod = require("commentsExternalModules_0"); // trailing comment1
+extMod.m1.fooExport();
+var newVar = new extMod.m1.m2.c();
+extMod.m4.fooExport();
+var newVar2 = new extMod.m4.m2.c();
+
+
+//// [commentsExternalModules_1.d.ts]
+export {};
diff --git a/tsc/testdata/baselines/reference/compiler/commentsExternalModules(target=es2015).symbols b/tsc/testdata/baselines/reference/compiler/commentsExternalModules(target=es2015).symbols
new file mode 100644
index 0000000000000..fb9732a70d847
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsExternalModules(target=es2015).symbols
@@ -0,0 +1,21 @@
+//// [tests/cases/compiler/commentsExternalModules.ts] ////
+
+=== commentsExternalModules_1.ts ===
+/**This is on import declaration*/
+import extMod = require("commentsExternalModules_0"); // trailing comment1
+>extMod : Symbol(extMod, Decl(commentsExternalModules_1.ts, 0, 0))
+
+extMod.m1.fooExport();
+>extMod : Symbol(extMod, Decl(commentsExternalModules_1.ts, 0, 0))
+
+var newVar = new extMod.m1.m2.c();
+>newVar : Symbol(newVar, Decl(commentsExternalModules_1.ts, 3, 3))
+>extMod : Symbol(extMod, Decl(commentsExternalModules_1.ts, 0, 0))
+
+extMod.m4.fooExport();
+>extMod : Symbol(extMod, Decl(commentsExternalModules_1.ts, 0, 0))
+
+var newVar2 = new extMod.m4.m2.c();
+>newVar2 : Symbol(newVar2, Decl(commentsExternalModules_1.ts, 5, 3))
+>extMod : Symbol(extMod, Decl(commentsExternalModules_1.ts, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/commentsExternalModules(target=es2015).types b/tsc/testdata/baselines/reference/compiler/commentsExternalModules(target=es2015).types
new file mode 100644
index 0000000000000..cfecac79f8e33
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsExternalModules(target=es2015).types
@@ -0,0 +1,45 @@
+//// [tests/cases/compiler/commentsExternalModules.ts] ////
+
+=== commentsExternalModules_1.ts ===
+/**This is on import declaration*/
+import extMod = require("commentsExternalModules_0"); // trailing comment1
+>extMod : any
+
+extMod.m1.fooExport();
+>extMod.m1.fooExport() : any
+>extMod.m1.fooExport : any
+>extMod.m1 : any
+>extMod : any
+>m1 : any
+>fooExport : any
+
+var newVar = new extMod.m1.m2.c();
+>newVar : any
+>new extMod.m1.m2.c() : any
+>extMod.m1.m2.c : any
+>extMod.m1.m2 : any
+>extMod.m1 : any
+>extMod : any
+>m1 : any
+>m2 : any
+>c : any
+
+extMod.m4.fooExport();
+>extMod.m4.fooExport() : any
+>extMod.m4.fooExport : any
+>extMod.m4 : any
+>extMod : any
+>m4 : any
+>fooExport : any
+
+var newVar2 = new extMod.m4.m2.c();
+>newVar2 : any
+>new extMod.m4.m2.c() : any
+>extMod.m4.m2.c : any
+>extMod.m4.m2 : any
+>extMod.m4 : any
+>extMod : any
+>m4 : any
+>m2 : any
+>c : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/commentsExternalModules2(target=es2015).errors.txt b/tsc/testdata/baselines/reference/compiler/commentsExternalModules2(target=es2015).errors.txt
new file mode 100644
index 0000000000000..e63e7082a3f28
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsExternalModules2(target=es2015).errors.txt
@@ -0,0 +1,64 @@
+commentsExternalModules_1.ts(2,25): error TS2307: Cannot find module 'commentsExternalModules2_0' or its corresponding type declarations.
+
+
+==== commentsExternalModules_1.ts (1 errors) ====
+ /**This is on import declaration*/
+ import extMod = require("commentsExternalModules2_0"); // trailing comment 1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'commentsExternalModules2_0' or its corresponding type declarations.
+ extMod.m1.fooExport();
+ export var newVar = new extMod.m1.m2.c();
+ extMod.m4.fooExport();
+ export var newVar2 = new extMod.m4.m2.c();
+
+==== commentsExternalModules2_0.ts (0 errors) ====
+ /** Module comment*/
+ export namespace m1 {
+ /** b's comment*/
+ export var b: number;
+ /** foo's comment*/
+ function foo() {
+ return b;
+ }
+ /** m2 comments*/
+ export namespace m2 {
+ /** class comment;*/
+ export class c {
+ };
+ /** i*/
+ export var i = new c();
+ }
+ /** exported function*/
+ export function fooExport() {
+ return foo();
+ }
+ }
+ m1.fooExport();
+ var myvar = new m1.m2.c();
+
+ /** Module comment */
+ export namespace m4 {
+ /** b's comment */
+ export var b: number;
+ /** foo's comment
+ */
+ function foo() {
+ return b;
+ }
+ /** m2 comments
+ */
+ export namespace m2 {
+ /** class comment; */
+ export class c {
+ };
+ /** i */
+ export var i = new c();
+ }
+ /** exported function */
+ export function fooExport() {
+ return foo();
+ }
+ }
+ m4.fooExport();
+ var myvar2 = new m4.m2.c();
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/commentsExternalModules2(target=es2015).js b/tsc/testdata/baselines/reference/compiler/commentsExternalModules2(target=es2015).js
new file mode 100644
index 0000000000000..1af3808c94fba
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsExternalModules2(target=es2015).js
@@ -0,0 +1,77 @@
+//// [tests/cases/compiler/commentsExternalModules2.ts] ////
+
+//// [commentsExternalModules2_0.ts]
+/** Module comment*/
+export namespace m1 {
+ /** b's comment*/
+ export var b: number;
+ /** foo's comment*/
+ function foo() {
+ return b;
+ }
+ /** m2 comments*/
+ export namespace m2 {
+ /** class comment;*/
+ export class c {
+ };
+ /** i*/
+ export var i = new c();
+ }
+ /** exported function*/
+ export function fooExport() {
+ return foo();
+ }
+}
+m1.fooExport();
+var myvar = new m1.m2.c();
+
+/** Module comment */
+export namespace m4 {
+ /** b's comment */
+ export var b: number;
+ /** foo's comment
+ */
+ function foo() {
+ return b;
+ }
+ /** m2 comments
+ */
+ export namespace m2 {
+ /** class comment; */
+ export class c {
+ };
+ /** i */
+ export var i = new c();
+ }
+ /** exported function */
+ export function fooExport() {
+ return foo();
+ }
+}
+m4.fooExport();
+var myvar2 = new m4.m2.c();
+
+//// [commentsExternalModules_1.ts]
+/**This is on import declaration*/
+import extMod = require("commentsExternalModules2_0"); // trailing comment 1
+extMod.m1.fooExport();
+export var newVar = new extMod.m1.m2.c();
+extMod.m4.fooExport();
+export var newVar2 = new extMod.m4.m2.c();
+
+
+//// [commentsExternalModules_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.newVar2 = exports.newVar = void 0;
+/**This is on import declaration*/
+const extMod = require("commentsExternalModules2_0"); // trailing comment 1
+extMod.m1.fooExport();
+exports.newVar = new extMod.m1.m2.c();
+extMod.m4.fooExport();
+exports.newVar2 = new extMod.m4.m2.c();
+
+
+//// [commentsExternalModules_1.d.ts]
+export declare var newVar: any;
+export declare var newVar2: any;
diff --git a/tsc/testdata/baselines/reference/compiler/commentsExternalModules2(target=es2015).symbols b/tsc/testdata/baselines/reference/compiler/commentsExternalModules2(target=es2015).symbols
new file mode 100644
index 0000000000000..9fd3f1d1a9f8d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsExternalModules2(target=es2015).symbols
@@ -0,0 +1,21 @@
+//// [tests/cases/compiler/commentsExternalModules2.ts] ////
+
+=== commentsExternalModules_1.ts ===
+/**This is on import declaration*/
+import extMod = require("commentsExternalModules2_0"); // trailing comment 1
+>extMod : Symbol(extMod, Decl(commentsExternalModules_1.ts, 0, 0))
+
+extMod.m1.fooExport();
+>extMod : Symbol(extMod, Decl(commentsExternalModules_1.ts, 0, 0))
+
+export var newVar = new extMod.m1.m2.c();
+>newVar : Symbol(newVar, Decl(commentsExternalModules_1.ts, 3, 10))
+>extMod : Symbol(extMod, Decl(commentsExternalModules_1.ts, 0, 0))
+
+extMod.m4.fooExport();
+>extMod : Symbol(extMod, Decl(commentsExternalModules_1.ts, 0, 0))
+
+export var newVar2 = new extMod.m4.m2.c();
+>newVar2 : Symbol(newVar2, Decl(commentsExternalModules_1.ts, 5, 10))
+>extMod : Symbol(extMod, Decl(commentsExternalModules_1.ts, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/commentsExternalModules2(target=es2015).types b/tsc/testdata/baselines/reference/compiler/commentsExternalModules2(target=es2015).types
new file mode 100644
index 0000000000000..7f2d709d9fd7a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsExternalModules2(target=es2015).types
@@ -0,0 +1,45 @@
+//// [tests/cases/compiler/commentsExternalModules2.ts] ////
+
+=== commentsExternalModules_1.ts ===
+/**This is on import declaration*/
+import extMod = require("commentsExternalModules2_0"); // trailing comment 1
+>extMod : any
+
+extMod.m1.fooExport();
+>extMod.m1.fooExport() : any
+>extMod.m1.fooExport : any
+>extMod.m1 : any
+>extMod : any
+>m1 : any
+>fooExport : any
+
+export var newVar = new extMod.m1.m2.c();
+>newVar : any
+>new extMod.m1.m2.c() : any
+>extMod.m1.m2.c : any
+>extMod.m1.m2 : any
+>extMod.m1 : any
+>extMod : any
+>m1 : any
+>m2 : any
+>c : any
+
+extMod.m4.fooExport();
+>extMod.m4.fooExport() : any
+>extMod.m4.fooExport : any
+>extMod.m4 : any
+>extMod : any
+>m4 : any
+>fooExport : any
+
+export var newVar2 = new extMod.m4.m2.c();
+>newVar2 : any
+>new extMod.m4.m2.c() : any
+>extMod.m4.m2.c : any
+>extMod.m4.m2 : any
+>extMod.m4 : any
+>extMod : any
+>m4 : any
+>m2 : any
+>c : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/commentsMultiModuleMultiFile(target=es2015).errors.txt b/tsc/testdata/baselines/reference/compiler/commentsMultiModuleMultiFile(target=es2015).errors.txt
new file mode 100644
index 0000000000000..4d71c6d5803c3
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsMultiModuleMultiFile(target=es2015).errors.txt
@@ -0,0 +1,39 @@
+commentsMultiModuleMultiFile_1.ts(1,20): error TS2307: Cannot find module 'commentsMultiModuleMultiFile_0' or its corresponding type declarations.
+
+
+==== commentsMultiModuleMultiFile_1.ts (1 errors) ====
+ import m = require('commentsMultiModuleMultiFile_0');
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'commentsMultiModuleMultiFile_0' or its corresponding type declarations.
+ /** this is multi module 3 comment*/
+ export namespace multiM {
+ /** class d comment*/
+ export class d {
+ }
+
+ /// class f comment
+ export class f {
+ }
+ }
+ new multiM.d();
+==== commentsMultiModuleMultiFile_0.ts (0 errors) ====
+ /** this is multi declare module*/
+ export namespace multiM {
+ /// class b comment
+ export class b {
+ }
+ }
+ /** thi is multi module 2*/
+ export namespace multiM {
+ /** class c comment*/
+ export class c {
+ }
+
+ // class e comment
+ export class e {
+ }
+ }
+
+ new multiM.b();
+ new multiM.c();
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/commentsMultiModuleMultiFile(target=es2015).js b/tsc/testdata/baselines/reference/compiler/commentsMultiModuleMultiFile(target=es2015).js
new file mode 100644
index 0000000000000..292b6dffbec99
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsMultiModuleMultiFile(target=es2015).js
@@ -0,0 +1,65 @@
+//// [tests/cases/compiler/commentsMultiModuleMultiFile.ts] ////
+
+//// [commentsMultiModuleMultiFile_0.ts]
+/** this is multi declare module*/
+export namespace multiM {
+ /// class b comment
+ export class b {
+ }
+}
+/** thi is multi module 2*/
+export namespace multiM {
+ /** class c comment*/
+ export class c {
+ }
+
+ // class e comment
+ export class e {
+ }
+}
+
+new multiM.b();
+new multiM.c();
+
+//// [commentsMultiModuleMultiFile_1.ts]
+import m = require('commentsMultiModuleMultiFile_0');
+/** this is multi module 3 comment*/
+export namespace multiM {
+ /** class d comment*/
+ export class d {
+ }
+
+ /// class f comment
+ export class f {
+ }
+}
+new multiM.d();
+
+//// [commentsMultiModuleMultiFile_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.multiM = void 0;
+/** this is multi module 3 comment*/
+var multiM;
+(function (multiM) {
+ /** class d comment*/
+ class d {
+ }
+ multiM.d = d;
+ /// class f comment
+ class f {
+ }
+ multiM.f = f;
+})(multiM || (exports.multiM = multiM = {}));
+new multiM.d();
+
+
+//// [commentsMultiModuleMultiFile_1.d.ts]
+/** this is multi module 3 comment*/
+export declare namespace multiM {
+ /** class d comment*/
+ class d {
+ }
+ class f {
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/commentsMultiModuleMultiFile(target=es2015).symbols b/tsc/testdata/baselines/reference/compiler/commentsMultiModuleMultiFile(target=es2015).symbols
new file mode 100644
index 0000000000000..561cd8636512d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsMultiModuleMultiFile(target=es2015).symbols
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/commentsMultiModuleMultiFile.ts] ////
+
+=== commentsMultiModuleMultiFile_1.ts ===
+import m = require('commentsMultiModuleMultiFile_0');
+>m : Symbol(m, Decl(commentsMultiModuleMultiFile_1.ts, 0, 0))
+
+/** this is multi module 3 comment*/
+export namespace multiM {
+>multiM : Symbol(multiM, Decl(commentsMultiModuleMultiFile_1.ts, 0, 53))
+
+ /** class d comment*/
+ export class d {
+>d : Symbol(d, Decl(commentsMultiModuleMultiFile_1.ts, 2, 25))
+ }
+
+ /// class f comment
+ export class f {
+>f : Symbol(f, Decl(commentsMultiModuleMultiFile_1.ts, 5, 5))
+ }
+}
+new multiM.d();
+>multiM.d : Symbol(multiM.d, Decl(commentsMultiModuleMultiFile_1.ts, 2, 25))
+>multiM : Symbol(multiM, Decl(commentsMultiModuleMultiFile_1.ts, 0, 53))
+>d : Symbol(multiM.d, Decl(commentsMultiModuleMultiFile_1.ts, 2, 25))
+
diff --git a/tsc/testdata/baselines/reference/compiler/commentsMultiModuleMultiFile(target=es2015).types b/tsc/testdata/baselines/reference/compiler/commentsMultiModuleMultiFile(target=es2015).types
new file mode 100644
index 0000000000000..4c619088de6eb
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/commentsMultiModuleMultiFile(target=es2015).types
@@ -0,0 +1,26 @@
+//// [tests/cases/compiler/commentsMultiModuleMultiFile.ts] ////
+
+=== commentsMultiModuleMultiFile_1.ts ===
+import m = require('commentsMultiModuleMultiFile_0');
+>m : any
+
+/** this is multi module 3 comment*/
+export namespace multiM {
+>multiM : typeof multiM
+
+ /** class d comment*/
+ export class d {
+>d : d
+ }
+
+ /// class f comment
+ export class f {
+>f : f
+ }
+}
+new multiM.d();
+>new multiM.d() : multiM.d
+>multiM.d : typeof multiM.d
+>multiM : typeof multiM
+>d : typeof multiM.d
+
diff --git a/tsc/testdata/baselines/reference/compiler/constDeclarations-useBeforeDefinition2.js b/tsc/testdata/baselines/reference/compiler/constDeclarations-useBeforeDefinition2.js
new file mode 100644
index 0000000000000..f606a805987f0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constDeclarations-useBeforeDefinition2.js
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/constDeclarations-useBeforeDefinition2.ts] ////
+
+//// [file1.ts]
+c;
+
+//// [file2.ts]
+const c = 0;
+
+
+//// [file1.js]
+"use strict";
+c;
+//// [file2.js]
+"use strict";
+const c = 0;
diff --git a/tsc/testdata/baselines/reference/compiler/constDeclarations-useBeforeDefinition2.symbols b/tsc/testdata/baselines/reference/compiler/constDeclarations-useBeforeDefinition2.symbols
new file mode 100644
index 0000000000000..aa905a40d2930
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constDeclarations-useBeforeDefinition2.symbols
@@ -0,0 +1,10 @@
+//// [tests/cases/compiler/constDeclarations-useBeforeDefinition2.ts] ////
+
+=== file1.ts ===
+c;
+>c : Symbol(c, Decl(file2.ts, 0, 5))
+
+=== file2.ts ===
+const c = 0;
+>c : Symbol(c, Decl(file2.ts, 0, 5))
+
diff --git a/tsc/testdata/baselines/reference/compiler/constDeclarations-useBeforeDefinition2.types b/tsc/testdata/baselines/reference/compiler/constDeclarations-useBeforeDefinition2.types
new file mode 100644
index 0000000000000..168dc54da6d0c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constDeclarations-useBeforeDefinition2.types
@@ -0,0 +1,11 @@
+//// [tests/cases/compiler/constDeclarations-useBeforeDefinition2.ts] ////
+
+=== file1.ts ===
+c;
+>c : 0
+
+=== file2.ts ===
+const c = 0;
+>c : 0
+>0 : 0
+
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumExternalModule.errors.txt b/tsc/testdata/baselines/reference/compiler/constEnumExternalModule.errors.txt
new file mode 100644
index 0000000000000..3c65fee023fe5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumExternalModule.errors.txt
@@ -0,0 +1,14 @@
+m2.ts(1,20): error TS2307: Cannot find module 'm1' or its corresponding type declarations.
+
+
+==== m2.ts (1 errors) ====
+ import A = require('m1')
+ ~~~~
+!!! error TS2307: Cannot find module 'm1' or its corresponding type declarations.
+ var v = A.V;
+==== m1.ts (0 errors) ====
+ const enum E {
+ V = 100
+ }
+
+ export = E
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumExternalModule.js b/tsc/testdata/baselines/reference/compiler/constEnumExternalModule.js
new file mode 100644
index 0000000000000..e0d49b427ea7f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumExternalModule.js
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/constEnumExternalModule.ts] ////
+
+//// [m1.ts]
+const enum E {
+ V = 100
+}
+
+export = E
+//// [m2.ts]
+import A = require('m1')
+var v = A.V;
+
+//// [m2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const A = require("m1");
+var v = A.V;
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumExternalModule.symbols b/tsc/testdata/baselines/reference/compiler/constEnumExternalModule.symbols
new file mode 100644
index 0000000000000..0fadd8eb6987d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumExternalModule.symbols
@@ -0,0 +1,10 @@
+//// [tests/cases/compiler/constEnumExternalModule.ts] ////
+
+=== m2.ts ===
+import A = require('m1')
+>A : Symbol(A, Decl(m2.ts, 0, 0))
+
+var v = A.V;
+>v : Symbol(v, Decl(m2.ts, 1, 3))
+>A : Symbol(A, Decl(m2.ts, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumExternalModule.types b/tsc/testdata/baselines/reference/compiler/constEnumExternalModule.types
new file mode 100644
index 0000000000000..ff6de7111a23c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumExternalModule.types
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/constEnumExternalModule.ts] ////
+
+=== m2.ts ===
+import A = require('m1')
+>A : any
+
+var v = A.V;
+>v : any
+>A.V : any
+>A : any
+>V : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues1.js b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues1.js
new file mode 100644
index 0000000000000..79d3912456706
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues1.js
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/constEnumMergingWithValues1.ts] ////
+
+//// [m1.ts]
+function foo() {}
+namespace foo {
+ const enum E { X }
+}
+
+export = foo
+
+//// [m1.js]
+"use strict";
+function foo() { }
+module.exports = foo;
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues1.symbols b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues1.symbols
new file mode 100644
index 0000000000000..3dbda36c0c1dc
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues1.symbols
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/constEnumMergingWithValues1.ts] ////
+
+=== m1.ts ===
+function foo() {}
+>foo : Symbol(foo, Decl(m1.ts, 0, 0), Decl(m1.ts, 0, 17))
+
+namespace foo {
+>foo : Symbol(foo, Decl(m1.ts, 0, 0), Decl(m1.ts, 0, 17))
+
+ const enum E { X }
+>E : Symbol(E, Decl(m1.ts, 1, 15))
+>X : Symbol(E.X, Decl(m1.ts, 2, 18))
+}
+
+export = foo
+>foo : Symbol(foo, Decl(m1.ts, 0, 0), Decl(m1.ts, 0, 17))
+
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues1.types b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues1.types
new file mode 100644
index 0000000000000..3fcb45f7f6973
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues1.types
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/constEnumMergingWithValues1.ts] ////
+
+=== m1.ts ===
+function foo() {}
+>foo : typeof foo
+
+namespace foo {
+ const enum E { X }
+>E : E
+>X : E.X
+}
+
+export = foo
+>foo : typeof foo
+
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues2.js b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues2.js
new file mode 100644
index 0000000000000..bddd97e2d9e38
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues2.js
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/constEnumMergingWithValues2.ts] ////
+
+//// [m1.ts]
+class foo {}
+namespace foo {
+ const enum E { X }
+}
+
+export = foo
+
+//// [m1.js]
+"use strict";
+class foo {
+}
+module.exports = foo;
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues2.symbols b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues2.symbols
new file mode 100644
index 0000000000000..0c1fc623dec6b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues2.symbols
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/constEnumMergingWithValues2.ts] ////
+
+=== m1.ts ===
+class foo {}
+>foo : Symbol(foo, Decl(m1.ts, 0, 0), Decl(m1.ts, 0, 12))
+
+namespace foo {
+>foo : Symbol(foo, Decl(m1.ts, 0, 0), Decl(m1.ts, 0, 12))
+
+ const enum E { X }
+>E : Symbol(E, Decl(m1.ts, 1, 15))
+>X : Symbol(E.X, Decl(m1.ts, 2, 18))
+}
+
+export = foo
+>foo : Symbol(foo, Decl(m1.ts, 0, 0), Decl(m1.ts, 0, 12))
+
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues2.types b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues2.types
new file mode 100644
index 0000000000000..3cde49a728d72
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues2.types
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/constEnumMergingWithValues2.ts] ////
+
+=== m1.ts ===
+class foo {}
+>foo : foo
+
+namespace foo {
+ const enum E { X }
+>E : E
+>X : E.X
+}
+
+export = foo
+>foo : foo
+
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues3.js b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues3.js
new file mode 100644
index 0000000000000..1b6a441e2a4b8
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues3.js
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/constEnumMergingWithValues3.ts] ////
+
+//// [m1.ts]
+enum foo { A }
+namespace foo {
+ const enum E { X }
+}
+
+export = foo
+
+//// [m1.js]
+"use strict";
+var foo;
+(function (foo) {
+ foo[foo["A"] = 0] = "A";
+})(foo || (foo = {}));
+module.exports = foo;
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues3.symbols b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues3.symbols
new file mode 100644
index 0000000000000..07114431ddf8d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues3.symbols
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/constEnumMergingWithValues3.ts] ////
+
+=== m1.ts ===
+enum foo { A }
+>foo : Symbol(foo, Decl(m1.ts, 0, 0), Decl(m1.ts, 0, 14))
+>A : Symbol(foo.A, Decl(m1.ts, 0, 10))
+
+namespace foo {
+>foo : Symbol(foo, Decl(m1.ts, 0, 0), Decl(m1.ts, 0, 14))
+
+ const enum E { X }
+>E : Symbol(E, Decl(m1.ts, 1, 15))
+>X : Symbol(E.X, Decl(m1.ts, 2, 18))
+}
+
+export = foo
+>foo : Symbol(foo, Decl(m1.ts, 0, 0), Decl(m1.ts, 0, 14))
+
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues3.types b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues3.types
new file mode 100644
index 0000000000000..c2debccc2f5ae
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues3.types
@@ -0,0 +1,16 @@
+//// [tests/cases/compiler/constEnumMergingWithValues3.ts] ////
+
+=== m1.ts ===
+enum foo { A }
+>foo : foo
+>A : foo.A
+
+namespace foo {
+ const enum E { X }
+>E : E
+>X : E.X
+}
+
+export = foo
+>foo : foo
+
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues4.js b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues4.js
new file mode 100644
index 0000000000000..37c221f184c5f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues4.js
@@ -0,0 +1,21 @@
+//// [tests/cases/compiler/constEnumMergingWithValues4.ts] ////
+
+//// [m1.ts]
+namespace foo {
+ const enum E { X }
+}
+
+namespace foo {
+ var x = 1;
+}
+
+
+export = foo
+
+//// [m1.js]
+"use strict";
+var foo;
+(function (foo) {
+ var x = 1;
+})(foo || (foo = {}));
+module.exports = foo;
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues4.symbols b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues4.symbols
new file mode 100644
index 0000000000000..fbfe492e87c79
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues4.symbols
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/constEnumMergingWithValues4.ts] ////
+
+=== m1.ts ===
+namespace foo {
+>foo : Symbol(foo, Decl(m1.ts, 0, 0), Decl(m1.ts, 2, 1))
+
+ const enum E { X }
+>E : Symbol(E, Decl(m1.ts, 0, 15))
+>X : Symbol(E.X, Decl(m1.ts, 1, 18))
+}
+
+namespace foo {
+>foo : Symbol(foo, Decl(m1.ts, 0, 0), Decl(m1.ts, 2, 1))
+
+ var x = 1;
+>x : Symbol(x, Decl(m1.ts, 5, 7))
+}
+
+
+export = foo
+>foo : Symbol(foo, Decl(m1.ts, 0, 0), Decl(m1.ts, 2, 1))
+
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues4.types b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues4.types
new file mode 100644
index 0000000000000..b1a632567c91e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues4.types
@@ -0,0 +1,21 @@
+//// [tests/cases/compiler/constEnumMergingWithValues4.ts] ////
+
+=== m1.ts ===
+namespace foo {
+ const enum E { X }
+>E : E
+>X : E.X
+}
+
+namespace foo {
+>foo : typeof foo
+
+ var x = 1;
+>x : number
+>1 : 1
+}
+
+
+export = foo
+>foo : typeof foo
+
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues5.js b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues5.js
new file mode 100644
index 0000000000000..2ef3638be5aed
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues5.js
@@ -0,0 +1,19 @@
+//// [tests/cases/compiler/constEnumMergingWithValues5.ts] ////
+
+//// [m1.ts]
+namespace foo {
+ const enum E { X }
+}
+
+export = foo
+
+//// [m1.js]
+"use strict";
+var foo;
+(function (foo) {
+ let E;
+ (function (E) {
+ E[E["X"] = 0] = "X";
+ })(E || (E = {}));
+})(foo || (foo = {}));
+module.exports = foo;
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues5.symbols b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues5.symbols
new file mode 100644
index 0000000000000..78ec7648311e3
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues5.symbols
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/constEnumMergingWithValues5.ts] ////
+
+=== m1.ts ===
+namespace foo {
+>foo : Symbol(foo, Decl(m1.ts, 0, 0))
+
+ const enum E { X }
+>E : Symbol(E, Decl(m1.ts, 0, 15))
+>X : Symbol(E.X, Decl(m1.ts, 1, 18))
+}
+
+export = foo
+>foo : Symbol(foo, Decl(m1.ts, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues5.types b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues5.types
new file mode 100644
index 0000000000000..00b1c91419b77
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/constEnumMergingWithValues5.types
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/constEnumMergingWithValues5.ts] ////
+
+=== m1.ts ===
+namespace foo {
+ const enum E { X }
+>E : E
+>X : E.X
+}
+
+export = foo
+>foo : typeof foo
+
diff --git a/tsc/testdata/baselines/reference/compiler/controlFlowJavascript.js b/tsc/testdata/baselines/reference/compiler/controlFlowJavascript.js
new file mode 100644
index 0000000000000..7bb9f9c6962eb
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/controlFlowJavascript.js
@@ -0,0 +1,205 @@
+//// [tests/cases/compiler/controlFlowJavascript.ts] ////
+
+//// [controlFlowJavascript.js]
+let cond = true;
+
+// CFA for 'let' and no initializer
+function f1() {
+ let x;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | undefined
+}
+
+// CFA for 'let' and 'undefined' initializer
+function f2() {
+ let x = undefined;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | undefined
+}
+
+// CFA for 'let' and 'null' initializer
+function f3() {
+ let x = null;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | null
+}
+
+// CFA for 'var' with no initializer
+function f5() {
+ var x;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | undefined
+}
+
+// CFA for 'var' with 'undefined' initializer
+function f6() {
+ var x = undefined;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | undefined
+}
+
+// CFA for 'var' with 'null' initializer
+function f7() {
+ var x = null;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | null
+}
+
+// No CFA for captured outer variables
+function f9() {
+ let x;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | undefined
+ function f() {
+ const z = x; // any
+ }
+}
+
+// No CFA for captured outer variables
+function f10() {
+ let x;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | undefined
+ const f = () => {
+ const z = x; // any
+ };
+}
+
+
+//// [controlFlowJavascript.js]
+"use strict";
+let cond = true;
+// CFA for 'let' and no initializer
+function f1() {
+ let x;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | undefined
+}
+// CFA for 'let' and 'undefined' initializer
+function f2() {
+ let x = undefined;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | undefined
+}
+// CFA for 'let' and 'null' initializer
+function f3() {
+ let x = null;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | null
+}
+// CFA for 'var' with no initializer
+function f5() {
+ var x;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | undefined
+}
+// CFA for 'var' with 'undefined' initializer
+function f6() {
+ var x = undefined;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | undefined
+}
+// CFA for 'var' with 'null' initializer
+function f7() {
+ var x = null;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | null
+}
+// No CFA for captured outer variables
+function f9() {
+ let x;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | undefined
+ function f() {
+ const z = x; // any
+ }
+}
+// No CFA for captured outer variables
+function f10() {
+ let x;
+ if (cond) {
+ x = 1;
+ }
+ if (cond) {
+ x = "hello";
+ }
+ const y = x; // string | number | undefined
+ const f = () => {
+ const z = x; // any
+ };
+}
diff --git a/tsc/testdata/baselines/reference/compiler/controlFlowJavascript.symbols b/tsc/testdata/baselines/reference/compiler/controlFlowJavascript.symbols
new file mode 100644
index 0000000000000..fc5feaf282985
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/controlFlowJavascript.symbols
@@ -0,0 +1,217 @@
+//// [tests/cases/compiler/controlFlowJavascript.ts] ////
+
+=== controlFlowJavascript.js ===
+let cond = true;
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+// CFA for 'let' and no initializer
+function f1() {
+>f1 : Symbol(f1, Decl(controlFlowJavascript.js, 0, 16))
+
+ let x;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 4, 7))
+
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = 1;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 4, 7))
+ }
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = "hello";
+>x : Symbol(x, Decl(controlFlowJavascript.js, 4, 7))
+ }
+ const y = x; // string | number | undefined
+>y : Symbol(y, Decl(controlFlowJavascript.js, 11, 9))
+>x : Symbol(x, Decl(controlFlowJavascript.js, 4, 7))
+}
+
+// CFA for 'let' and 'undefined' initializer
+function f2() {
+>f2 : Symbol(f2, Decl(controlFlowJavascript.js, 12, 1))
+
+ let x = undefined;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 16, 7))
+>undefined : Symbol(undefined)
+
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = 1;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 16, 7))
+ }
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = "hello";
+>x : Symbol(x, Decl(controlFlowJavascript.js, 16, 7))
+ }
+ const y = x; // string | number | undefined
+>y : Symbol(y, Decl(controlFlowJavascript.js, 23, 9))
+>x : Symbol(x, Decl(controlFlowJavascript.js, 16, 7))
+}
+
+// CFA for 'let' and 'null' initializer
+function f3() {
+>f3 : Symbol(f3, Decl(controlFlowJavascript.js, 24, 1))
+
+ let x = null;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 28, 7))
+
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = 1;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 28, 7))
+ }
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = "hello";
+>x : Symbol(x, Decl(controlFlowJavascript.js, 28, 7))
+ }
+ const y = x; // string | number | null
+>y : Symbol(y, Decl(controlFlowJavascript.js, 35, 9))
+>x : Symbol(x, Decl(controlFlowJavascript.js, 28, 7))
+}
+
+// CFA for 'var' with no initializer
+function f5() {
+>f5 : Symbol(f5, Decl(controlFlowJavascript.js, 36, 1))
+
+ var x;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 40, 7))
+
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = 1;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 40, 7))
+ }
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = "hello";
+>x : Symbol(x, Decl(controlFlowJavascript.js, 40, 7))
+ }
+ const y = x; // string | number | undefined
+>y : Symbol(y, Decl(controlFlowJavascript.js, 47, 9))
+>x : Symbol(x, Decl(controlFlowJavascript.js, 40, 7))
+}
+
+// CFA for 'var' with 'undefined' initializer
+function f6() {
+>f6 : Symbol(f6, Decl(controlFlowJavascript.js, 48, 1))
+
+ var x = undefined;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 52, 7))
+>undefined : Symbol(undefined)
+
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = 1;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 52, 7))
+ }
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = "hello";
+>x : Symbol(x, Decl(controlFlowJavascript.js, 52, 7))
+ }
+ const y = x; // string | number | undefined
+>y : Symbol(y, Decl(controlFlowJavascript.js, 59, 9))
+>x : Symbol(x, Decl(controlFlowJavascript.js, 52, 7))
+}
+
+// CFA for 'var' with 'null' initializer
+function f7() {
+>f7 : Symbol(f7, Decl(controlFlowJavascript.js, 60, 1))
+
+ var x = null;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 64, 7))
+
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = 1;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 64, 7))
+ }
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = "hello";
+>x : Symbol(x, Decl(controlFlowJavascript.js, 64, 7))
+ }
+ const y = x; // string | number | null
+>y : Symbol(y, Decl(controlFlowJavascript.js, 71, 9))
+>x : Symbol(x, Decl(controlFlowJavascript.js, 64, 7))
+}
+
+// No CFA for captured outer variables
+function f9() {
+>f9 : Symbol(f9, Decl(controlFlowJavascript.js, 72, 1))
+
+ let x;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 76, 7))
+
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = 1;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 76, 7))
+ }
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = "hello";
+>x : Symbol(x, Decl(controlFlowJavascript.js, 76, 7))
+ }
+ const y = x; // string | number | undefined
+>y : Symbol(y, Decl(controlFlowJavascript.js, 83, 9))
+>x : Symbol(x, Decl(controlFlowJavascript.js, 76, 7))
+
+ function f() {
+>f : Symbol(f, Decl(controlFlowJavascript.js, 83, 16))
+
+ const z = x; // any
+>z : Symbol(z, Decl(controlFlowJavascript.js, 85, 13))
+>x : Symbol(x, Decl(controlFlowJavascript.js, 76, 7))
+ }
+}
+
+// No CFA for captured outer variables
+function f10() {
+>f10 : Symbol(f10, Decl(controlFlowJavascript.js, 87, 1))
+
+ let x;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 91, 7))
+
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = 1;
+>x : Symbol(x, Decl(controlFlowJavascript.js, 91, 7))
+ }
+ if (cond) {
+>cond : Symbol(cond, Decl(controlFlowJavascript.js, 0, 3))
+
+ x = "hello";
+>x : Symbol(x, Decl(controlFlowJavascript.js, 91, 7))
+ }
+ const y = x; // string | number | undefined
+>y : Symbol(y, Decl(controlFlowJavascript.js, 98, 9))
+>x : Symbol(x, Decl(controlFlowJavascript.js, 91, 7))
+
+ const f = () => {
+>f : Symbol(f, Decl(controlFlowJavascript.js, 99, 9))
+
+ const z = x; // any
+>z : Symbol(z, Decl(controlFlowJavascript.js, 100, 13))
+>x : Symbol(x, Decl(controlFlowJavascript.js, 91, 7))
+
+ };
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/controlFlowJavascript.types b/tsc/testdata/baselines/reference/compiler/controlFlowJavascript.types
new file mode 100644
index 0000000000000..ac99dbf071c95
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/controlFlowJavascript.types
@@ -0,0 +1,251 @@
+//// [tests/cases/compiler/controlFlowJavascript.ts] ////
+
+=== controlFlowJavascript.js ===
+let cond = true;
+>cond : boolean
+>true : true
+
+// CFA for 'let' and no initializer
+function f1() {
+>f1 : () => void
+
+ let x;
+>x : any
+
+ if (cond) {
+>cond : boolean
+
+ x = 1;
+>x = 1 : 1
+>x : any
+>1 : 1
+ }
+ if (cond) {
+>cond : boolean
+
+ x = "hello";
+>x = "hello" : "hello"
+>x : any
+>"hello" : "hello"
+ }
+ const y = x; // string | number | undefined
+>y : string | number | undefined
+>x : string | number | undefined
+}
+
+// CFA for 'let' and 'undefined' initializer
+function f2() {
+>f2 : () => void
+
+ let x = undefined;
+>x : any
+>undefined : undefined
+
+ if (cond) {
+>cond : boolean
+
+ x = 1;
+>x = 1 : 1
+>x : any
+>1 : 1
+ }
+ if (cond) {
+>cond : boolean
+
+ x = "hello";
+>x = "hello" : "hello"
+>x : any
+>"hello" : "hello"
+ }
+ const y = x; // string | number | undefined
+>y : string | number | undefined
+>x : string | number | undefined
+}
+
+// CFA for 'let' and 'null' initializer
+function f3() {
+>f3 : () => void
+
+ let x = null;
+>x : any
+
+ if (cond) {
+>cond : boolean
+
+ x = 1;
+>x = 1 : 1
+>x : any
+>1 : 1
+ }
+ if (cond) {
+>cond : boolean
+
+ x = "hello";
+>x = "hello" : "hello"
+>x : any
+>"hello" : "hello"
+ }
+ const y = x; // string | number | null
+>y : string | number | null
+>x : string | number | null
+}
+
+// CFA for 'var' with no initializer
+function f5() {
+>f5 : () => void
+
+ var x;
+>x : any
+
+ if (cond) {
+>cond : boolean
+
+ x = 1;
+>x = 1 : 1
+>x : any
+>1 : 1
+ }
+ if (cond) {
+>cond : boolean
+
+ x = "hello";
+>x = "hello" : "hello"
+>x : any
+>"hello" : "hello"
+ }
+ const y = x; // string | number | undefined
+>y : string | number | undefined
+>x : string | number | undefined
+}
+
+// CFA for 'var' with 'undefined' initializer
+function f6() {
+>f6 : () => void
+
+ var x = undefined;
+>x : any
+>undefined : undefined
+
+ if (cond) {
+>cond : boolean
+
+ x = 1;
+>x = 1 : 1
+>x : any
+>1 : 1
+ }
+ if (cond) {
+>cond : boolean
+
+ x = "hello";
+>x = "hello" : "hello"
+>x : any
+>"hello" : "hello"
+ }
+ const y = x; // string | number | undefined
+>y : string | number | undefined
+>x : string | number | undefined
+}
+
+// CFA for 'var' with 'null' initializer
+function f7() {
+>f7 : () => void
+
+ var x = null;
+>x : any
+
+ if (cond) {
+>cond : boolean
+
+ x = 1;
+>x = 1 : 1
+>x : any
+>1 : 1
+ }
+ if (cond) {
+>cond : boolean
+
+ x = "hello";
+>x = "hello" : "hello"
+>x : any
+>"hello" : "hello"
+ }
+ const y = x; // string | number | null
+>y : string | number | null
+>x : string | number | null
+}
+
+// No CFA for captured outer variables
+function f9() {
+>f9 : () => void
+
+ let x;
+>x : any
+
+ if (cond) {
+>cond : boolean
+
+ x = 1;
+>x = 1 : 1
+>x : any
+>1 : 1
+ }
+ if (cond) {
+>cond : boolean
+
+ x = "hello";
+>x = "hello" : "hello"
+>x : any
+>"hello" : "hello"
+ }
+ const y = x; // string | number | undefined
+>y : string | number | undefined
+>x : string | number | undefined
+
+ function f() {
+>f : () => void
+
+ const z = x; // any
+>z : any
+>x : any
+ }
+}
+
+// No CFA for captured outer variables
+function f10() {
+>f10 : () => void
+
+ let x;
+>x : any
+
+ if (cond) {
+>cond : boolean
+
+ x = 1;
+>x = 1 : 1
+>x : any
+>1 : 1
+ }
+ if (cond) {
+>cond : boolean
+
+ x = "hello";
+>x = "hello" : "hello"
+>x : any
+>"hello" : "hello"
+ }
+ const y = x; // string | number | undefined
+>y : string | number | undefined
+>x : string | number | undefined
+
+ const f = () => {
+>f : () => void
+>() => { const z = x; // any } : () => void
+
+ const z = x; // any
+>z : any
+>x : any
+
+ };
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/crashIntypeCheckObjectCreationExpression.errors.txt b/tsc/testdata/baselines/reference/compiler/crashIntypeCheckObjectCreationExpression.errors.txt
new file mode 100644
index 0000000000000..b1c070056b052
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/crashIntypeCheckObjectCreationExpression.errors.txt
@@ -0,0 +1,14 @@
+crashIntypeCheckObjectCreationExpression.ts(3,45): error TS2304: Cannot find name 'X'.
+
+
+==== crashIntypeCheckObjectCreationExpression.ts (1 errors) ====
+ export class BuildWorkspaceService {
+ public injectRequestService(service: P0) {
+ this.injectBuildService(new X(service));
+ ~
+!!! error TS2304: Cannot find name 'X'.
+ }
+ public injectBuildService(service: P0) {
+ }
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/crashIntypeCheckObjectCreationExpression.js b/tsc/testdata/baselines/reference/compiler/crashIntypeCheckObjectCreationExpression.js
new file mode 100644
index 0000000000000..a11bf980be3a7
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/crashIntypeCheckObjectCreationExpression.js
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/crashIntypeCheckObjectCreationExpression.ts] ////
+
+//// [crashIntypeCheckObjectCreationExpression.ts]
+export class BuildWorkspaceService {
+ public injectRequestService(service: P0) {
+ this.injectBuildService(new X(service));
+ }
+ public injectBuildService(service: P0) {
+ }
+}
+
+
+//// [crashIntypeCheckObjectCreationExpression.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.BuildWorkspaceService = void 0;
+class BuildWorkspaceService {
+ injectRequestService(service) {
+ this.injectBuildService(new X(service));
+ }
+ injectBuildService(service) {
+ }
+}
+exports.BuildWorkspaceService = BuildWorkspaceService;
diff --git a/tsc/testdata/baselines/reference/compiler/crashIntypeCheckObjectCreationExpression.symbols b/tsc/testdata/baselines/reference/compiler/crashIntypeCheckObjectCreationExpression.symbols
new file mode 100644
index 0000000000000..a9a0175009dfb
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/crashIntypeCheckObjectCreationExpression.symbols
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/crashIntypeCheckObjectCreationExpression.ts] ////
+
+=== crashIntypeCheckObjectCreationExpression.ts ===
+export class BuildWorkspaceService {
+>BuildWorkspaceService : Symbol(BuildWorkspaceService, Decl(crashIntypeCheckObjectCreationExpression.ts, 0, 0))
+
+ public injectRequestService(service: P0) {
+>injectRequestService : Symbol(BuildWorkspaceService.injectRequestService, Decl(crashIntypeCheckObjectCreationExpression.ts, 0, 36))
+>P0 : Symbol(P0, Decl(crashIntypeCheckObjectCreationExpression.ts, 1, 32))
+>P1 : Symbol(P1, Decl(crashIntypeCheckObjectCreationExpression.ts, 1, 35))
+>P2 : Symbol(P2, Decl(crashIntypeCheckObjectCreationExpression.ts, 1, 39))
+>service : Symbol(service, Decl(crashIntypeCheckObjectCreationExpression.ts, 1, 44))
+>P0 : Symbol(P0, Decl(crashIntypeCheckObjectCreationExpression.ts, 1, 32))
+
+ this.injectBuildService(new X(service));
+>this.injectBuildService : Symbol(BuildWorkspaceService.injectBuildService, Decl(crashIntypeCheckObjectCreationExpression.ts, 3, 5))
+>this : Symbol(BuildWorkspaceService, Decl(crashIntypeCheckObjectCreationExpression.ts, 0, 0))
+>injectBuildService : Symbol(BuildWorkspaceService.injectBuildService, Decl(crashIntypeCheckObjectCreationExpression.ts, 3, 5))
+>service : Symbol(service, Decl(crashIntypeCheckObjectCreationExpression.ts, 1, 44))
+ }
+ public injectBuildService(service: P0) {
+>injectBuildService : Symbol(BuildWorkspaceService.injectBuildService, Decl(crashIntypeCheckObjectCreationExpression.ts, 3, 5))
+>P0 : Symbol(P0, Decl(crashIntypeCheckObjectCreationExpression.ts, 4, 30))
+>service : Symbol(service, Decl(crashIntypeCheckObjectCreationExpression.ts, 4, 34))
+>P0 : Symbol(P0, Decl(crashIntypeCheckObjectCreationExpression.ts, 4, 30))
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/crashIntypeCheckObjectCreationExpression.types b/tsc/testdata/baselines/reference/compiler/crashIntypeCheckObjectCreationExpression.types
new file mode 100644
index 0000000000000..71b464049228f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/crashIntypeCheckObjectCreationExpression.types
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/crashIntypeCheckObjectCreationExpression.ts] ////
+
+=== crashIntypeCheckObjectCreationExpression.ts ===
+export class BuildWorkspaceService {
+>BuildWorkspaceService : BuildWorkspaceService
+
+ public injectRequestService(service: P0) {
+>injectRequestService : (service: P0) => void
+>service : P0
+
+ this.injectBuildService(new X(service));
+>this.injectBuildService(new X(service)) : void
+>this.injectBuildService : (service: P0_1) => void
+>this : this
+>injectBuildService : (service: P0_1) => void
+>new X(service) : any
+>X : any
+>service : P0
+ }
+ public injectBuildService(service: P0) {
+>injectBuildService : (service: P0) => void
+>service : P0
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/declFileExportAssignmentOfGenericInterface.errors.txt b/tsc/testdata/baselines/reference/compiler/declFileExportAssignmentOfGenericInterface.errors.txt
new file mode 100644
index 0000000000000..12565c8aa1a61
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declFileExportAssignmentOfGenericInterface.errors.txt
@@ -0,0 +1,15 @@
+declFileExportAssignmentOfGenericInterface_1.ts(1,20): error TS2307: Cannot find module 'declFileExportAssignmentOfGenericInterface_0' or its corresponding type declarations.
+
+
+==== declFileExportAssignmentOfGenericInterface_1.ts (1 errors) ====
+ import a = require('declFileExportAssignmentOfGenericInterface_0');
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'declFileExportAssignmentOfGenericInterface_0' or its corresponding type declarations.
+ export var x: a>;
+ x.a;
+==== declFileExportAssignmentOfGenericInterface_0.ts (0 errors) ====
+ interface Foo {
+ a: string;
+ }
+ export = Foo;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/declFileExportAssignmentOfGenericInterface.js b/tsc/testdata/baselines/reference/compiler/declFileExportAssignmentOfGenericInterface.js
new file mode 100644
index 0000000000000..b6c6be646d76f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declFileExportAssignmentOfGenericInterface.js
@@ -0,0 +1,23 @@
+//// [tests/cases/compiler/declFileExportAssignmentOfGenericInterface.ts] ////
+
+//// [declFileExportAssignmentOfGenericInterface_0.ts]
+interface Foo {
+ a: string;
+}
+export = Foo;
+
+//// [declFileExportAssignmentOfGenericInterface_1.ts]
+import a = require('declFileExportAssignmentOfGenericInterface_0');
+export var x: a>;
+x.a;
+
+//// [declFileExportAssignmentOfGenericInterface_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+exports.x.a;
+
+
+//// [declFileExportAssignmentOfGenericInterface_1.d.ts]
+import a = require('declFileExportAssignmentOfGenericInterface_0');
+export declare var x: a>;
diff --git a/tsc/testdata/baselines/reference/compiler/declFileExportAssignmentOfGenericInterface.symbols b/tsc/testdata/baselines/reference/compiler/declFileExportAssignmentOfGenericInterface.symbols
new file mode 100644
index 0000000000000..c23524a1eaa8b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declFileExportAssignmentOfGenericInterface.symbols
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/declFileExportAssignmentOfGenericInterface.ts] ////
+
+=== declFileExportAssignmentOfGenericInterface_1.ts ===
+import a = require('declFileExportAssignmentOfGenericInterface_0');
+>a : Symbol(a, Decl(declFileExportAssignmentOfGenericInterface_1.ts, 0, 0))
+
+export var x: a>;
+>x : Symbol(x, Decl(declFileExportAssignmentOfGenericInterface_1.ts, 1, 10))
+>a : Symbol(a, Decl(declFileExportAssignmentOfGenericInterface_1.ts, 0, 0))
+>a : Symbol(a, Decl(declFileExportAssignmentOfGenericInterface_1.ts, 0, 0))
+
+x.a;
+>x : Symbol(x, Decl(declFileExportAssignmentOfGenericInterface_1.ts, 1, 10))
+
diff --git a/tsc/testdata/baselines/reference/compiler/declFileExportAssignmentOfGenericInterface.types b/tsc/testdata/baselines/reference/compiler/declFileExportAssignmentOfGenericInterface.types
new file mode 100644
index 0000000000000..1b6a529291c5d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declFileExportAssignmentOfGenericInterface.types
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/declFileExportAssignmentOfGenericInterface.ts] ////
+
+=== declFileExportAssignmentOfGenericInterface_1.ts ===
+import a = require('declFileExportAssignmentOfGenericInterface_0');
+>a : any
+
+export var x: a>;
+>x : a>
+
+x.a;
+>x.a : any
+>x : a>
+>a : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/declFileExportImportChain.errors.txt b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain.errors.txt
new file mode 100644
index 0000000000000..efaf98be6c434
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain.errors.txt
@@ -0,0 +1,27 @@
+declFileExportImportChain_d.ts(1,20): error TS2307: Cannot find module 'declFileExportImportChain_c' or its corresponding type declarations.
+
+
+==== declFileExportImportChain_d.ts (1 errors) ====
+ import c = require("declFileExportImportChain_c");
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'declFileExportImportChain_c' or its corresponding type declarations.
+ export var x: c.b1.a.m2.c1;
+==== declFileExportImportChain_a.ts (0 errors) ====
+ namespace m1 {
+ export namespace m2 {
+ export class c1 {
+ }
+ }
+ }
+ export = m1;
+
+==== declFileExportImportChain_b.ts (0 errors) ====
+ export import a = require("declFileExportImportChain_a");
+
+==== declFileExportImportChain_b1.ts (0 errors) ====
+ import b = require("declFileExportImportChain_b");
+ export = b;
+
+==== declFileExportImportChain_c.ts (0 errors) ====
+ export import b1 = require("declFileExportImportChain_b1");
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/declFileExportImportChain.js b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain.js
new file mode 100644
index 0000000000000..cb13b821d1f99
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain.js
@@ -0,0 +1,34 @@
+//// [tests/cases/compiler/declFileExportImportChain.ts] ////
+
+//// [declFileExportImportChain_a.ts]
+namespace m1 {
+ export namespace m2 {
+ export class c1 {
+ }
+ }
+}
+export = m1;
+
+//// [declFileExportImportChain_b.ts]
+export import a = require("declFileExportImportChain_a");
+
+//// [declFileExportImportChain_b1.ts]
+import b = require("declFileExportImportChain_b");
+export = b;
+
+//// [declFileExportImportChain_c.ts]
+export import b1 = require("declFileExportImportChain_b1");
+
+//// [declFileExportImportChain_d.ts]
+import c = require("declFileExportImportChain_c");
+export var x: c.b1.a.m2.c1;
+
+//// [declFileExportImportChain_d.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+
+
+//// [declFileExportImportChain_d.d.ts]
+import c = require("declFileExportImportChain_c");
+export declare var x: c.b1.a.m2.c1;
diff --git a/tsc/testdata/baselines/reference/compiler/declFileExportImportChain.symbols b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain.symbols
new file mode 100644
index 0000000000000..1f8ccabafb25d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain.symbols
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/declFileExportImportChain.ts] ////
+
+=== declFileExportImportChain_d.ts ===
+import c = require("declFileExportImportChain_c");
+>c : Symbol(c, Decl(declFileExportImportChain_d.ts, 0, 0))
+
+export var x: c.b1.a.m2.c1;
+>x : Symbol(x, Decl(declFileExportImportChain_d.ts, 1, 10))
+>c : Symbol(c, Decl(declFileExportImportChain_d.ts, 0, 0))
+>b1 : Symbol(c.b1)
+>a : Symbol(c.b1.a)
+>m2 : Symbol(c.b1.a.m2)
+>c1 : Symbol(c.b1.a.m2.c1)
+
diff --git a/tsc/testdata/baselines/reference/compiler/declFileExportImportChain.types b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain.types
new file mode 100644
index 0000000000000..7229a84d65c17
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain.types
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/declFileExportImportChain.ts] ////
+
+=== declFileExportImportChain_d.ts ===
+import c = require("declFileExportImportChain_c");
+>c : any
+
+export var x: c.b1.a.m2.c1;
+>x : c.b1.a.m2.c1
+>c : any
+>b1 : any
+>a : any
+>m2 : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/declFileExportImportChain2.errors.txt b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain2.errors.txt
new file mode 100644
index 0000000000000..250637928e15b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain2.errors.txt
@@ -0,0 +1,24 @@
+declFileExportImportChain2_d.ts(1,20): error TS2307: Cannot find module 'declFileExportImportChain2_c' or its corresponding type declarations.
+
+
+==== declFileExportImportChain2_d.ts (1 errors) ====
+ import c = require("declFileExportImportChain2_c");
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'declFileExportImportChain2_c' or its corresponding type declarations.
+ export var x: c.b.m2.c1;
+==== declFileExportImportChain2_a.ts (0 errors) ====
+ namespace m1 {
+ export namespace m2 {
+ export class c1 {
+ }
+ }
+ }
+ export = m1;
+
+==== declFileExportImportChain2_b.ts (0 errors) ====
+ import a = require("declFileExportImportChain2_a");
+ export = a;
+
+==== declFileExportImportChain2_c.ts (0 errors) ====
+ export import b = require("declFileExportImportChain2_b");
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/declFileExportImportChain2.js b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain2.js
new file mode 100644
index 0000000000000..cae64b2314ed3
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain2.js
@@ -0,0 +1,31 @@
+//// [tests/cases/compiler/declFileExportImportChain2.ts] ////
+
+//// [declFileExportImportChain2_a.ts]
+namespace m1 {
+ export namespace m2 {
+ export class c1 {
+ }
+ }
+}
+export = m1;
+
+//// [declFileExportImportChain2_b.ts]
+import a = require("declFileExportImportChain2_a");
+export = a;
+
+//// [declFileExportImportChain2_c.ts]
+export import b = require("declFileExportImportChain2_b");
+
+//// [declFileExportImportChain2_d.ts]
+import c = require("declFileExportImportChain2_c");
+export var x: c.b.m2.c1;
+
+//// [declFileExportImportChain2_d.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+
+
+//// [declFileExportImportChain2_d.d.ts]
+import c = require("declFileExportImportChain2_c");
+export declare var x: c.b.m2.c1;
diff --git a/tsc/testdata/baselines/reference/compiler/declFileExportImportChain2.symbols b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain2.symbols
new file mode 100644
index 0000000000000..c47240c8fabac
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain2.symbols
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/declFileExportImportChain2.ts] ////
+
+=== declFileExportImportChain2_d.ts ===
+import c = require("declFileExportImportChain2_c");
+>c : Symbol(c, Decl(declFileExportImportChain2_d.ts, 0, 0))
+
+export var x: c.b.m2.c1;
+>x : Symbol(x, Decl(declFileExportImportChain2_d.ts, 1, 10))
+>c : Symbol(c, Decl(declFileExportImportChain2_d.ts, 0, 0))
+>b : Symbol(c.b)
+>m2 : Symbol(c.b.m2)
+>c1 : Symbol(c.b.m2.c1)
+
diff --git a/tsc/testdata/baselines/reference/compiler/declFileExportImportChain2.types b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain2.types
new file mode 100644
index 0000000000000..1d01872b92132
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declFileExportImportChain2.types
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/declFileExportImportChain2.ts] ////
+
+=== declFileExportImportChain2_d.ts ===
+import c = require("declFileExportImportChain2_c");
+>c : any
+
+export var x: c.b.m2.c1;
+>x : c.b.m2.c1
+>c : any
+>b : any
+>m2 : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/declarationMerging2.js b/tsc/testdata/baselines/reference/compiler/declarationMerging2.js
new file mode 100644
index 0000000000000..124dcdb52d9b0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declarationMerging2.js
@@ -0,0 +1,27 @@
+//// [tests/cases/compiler/declarationMerging2.ts] ////
+
+//// [a.ts]
+export class A {
+ protected _f: number;
+ getF() { return this._f; }
+}
+
+//// [b.ts]
+export {}
+declare module "./a" {
+ interface A {
+ run();
+ }
+}
+
+//// [a.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.A = void 0;
+class A {
+ getF() { return this._f; }
+}
+exports.A = A;
+//// [b.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/tsc/testdata/baselines/reference/compiler/declarationMerging2.symbols b/tsc/testdata/baselines/reference/compiler/declarationMerging2.symbols
new file mode 100644
index 0000000000000..f6805ffcecec5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declarationMerging2.symbols
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/declarationMerging2.ts] ////
+
+=== a.ts ===
+export class A {
+>A : Symbol(A, Decl(a.ts, 0, 0), Decl(b.ts, 1, 22))
+
+ protected _f: number;
+>_f : Symbol(A._f, Decl(a.ts, 0, 16))
+
+ getF() { return this._f; }
+>getF : Symbol(A.getF, Decl(a.ts, 1, 25))
+>this._f : Symbol(A._f, Decl(a.ts, 0, 16))
+>this : Symbol(A, Decl(a.ts, 0, 0), Decl(b.ts, 1, 22))
+>_f : Symbol(A._f, Decl(a.ts, 0, 16))
+}
+
+=== b.ts ===
+export {}
+declare module "./a" {
+>"./a" : Symbol("./a", Decl(a.ts, 0, 0), Decl(b.ts, 0, 9))
+
+ interface A {
+>A : Symbol(A, Decl(a.ts, 0, 0), Decl(b.ts, 1, 22))
+
+ run();
+>run : Symbol(A.run, Decl(b.ts, 2, 17))
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/declarationMerging2.types b/tsc/testdata/baselines/reference/compiler/declarationMerging2.types
new file mode 100644
index 0000000000000..fb3a5a8e38736
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/declarationMerging2.types
@@ -0,0 +1,26 @@
+//// [tests/cases/compiler/declarationMerging2.ts] ////
+
+=== a.ts ===
+export class A {
+>A : A
+
+ protected _f: number;
+>_f : number
+
+ getF() { return this._f; }
+>getF : () => number
+>this._f : number
+>this : this
+>_f : number
+}
+
+=== b.ts ===
+export {}
+declare module "./a" {
+>"./a" : typeof import("./a")
+
+ interface A {
+ run();
+>run : () => any
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/dependencyViaImportAlias.errors.txt b/tsc/testdata/baselines/reference/compiler/dependencyViaImportAlias.errors.txt
new file mode 100644
index 0000000000000..8dcfd24bcef2f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/dependencyViaImportAlias.errors.txt
@@ -0,0 +1,14 @@
+B.ts(1,20): error TS2307: Cannot find module 'A' or its corresponding type declarations.
+
+
+==== B.ts (1 errors) ====
+ import a = require('A');
+ ~~~
+!!! error TS2307: Cannot find module 'A' or its corresponding type declarations.
+
+ import A = a.A;
+
+ export = A;
+==== A.ts (0 errors) ====
+ export class A {
+ }
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/dependencyViaImportAlias.js b/tsc/testdata/baselines/reference/compiler/dependencyViaImportAlias.js
new file mode 100644
index 0000000000000..0f057245c9bc9
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/dependencyViaImportAlias.js
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/dependencyViaImportAlias.ts] ////
+
+//// [A.ts]
+export class A {
+}
+//// [B.ts]
+import a = require('A');
+
+import A = a.A;
+
+export = A;
+
+//// [B.js]
+"use strict";
+const a = require("A");
+var A = a.A;
+module.exports = A;
diff --git a/tsc/testdata/baselines/reference/compiler/dependencyViaImportAlias.symbols b/tsc/testdata/baselines/reference/compiler/dependencyViaImportAlias.symbols
new file mode 100644
index 0000000000000..31bfff1385d89
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/dependencyViaImportAlias.symbols
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/dependencyViaImportAlias.ts] ////
+
+=== B.ts ===
+import a = require('A');
+>a : Symbol(a, Decl(B.ts, 0, 0))
+
+import A = a.A;
+>A : Symbol(A, Decl(B.ts, 0, 24))
+>a : Symbol(a, Decl(B.ts, 0, 0))
+>A : Symbol(a)
+
+export = A;
+>A : Symbol(A, Decl(B.ts, 0, 24))
+
diff --git a/tsc/testdata/baselines/reference/compiler/dependencyViaImportAlias.types b/tsc/testdata/baselines/reference/compiler/dependencyViaImportAlias.types
new file mode 100644
index 0000000000000..fb1a6fd4a29de
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/dependencyViaImportAlias.types
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/dependencyViaImportAlias.ts] ////
+
+=== B.ts ===
+import a = require('A');
+>a : any
+
+import A = a.A;
+>A : any
+>a : any
+>A : any
+
+export = A;
+>A : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions2.errors.txt b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions2.errors.txt
new file mode 100644
index 0000000000000..ed29b1aca57d2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions2.errors.txt
@@ -0,0 +1,45 @@
+/foo/tsconfig.json(4,19): error TS6046: Argument for '--target' option must be: 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'es2023', 'es2024', 'es2025', 'esnext'.
+/foo/tsconfig.json(5,9): error TS5023: Unknown compiler option 'noImplicitUseStrict'.
+/foo/tsconfig.json(6,9): error TS5023: Unknown compiler option 'keyofStringsOnly'.
+/foo/tsconfig.json(7,9): error TS5023: Unknown compiler option 'suppressExcessPropertyErrors'.
+/foo/tsconfig.json(8,9): error TS5023: Unknown compiler option 'suppressImplicitAnyIndexErrors'.
+/foo/tsconfig.json(9,9): error TS5023: Unknown compiler option 'noStrictGenericChecks'.
+/foo/tsconfig.json(10,9): error TS5023: Unknown compiler option 'charset'.
+/foo/tsconfig.json(11,9): error TS5023: Unknown compiler option 'out'.
+
+
+==== /foo/tsconfig.json (8 errors) ====
+ {
+ "compilerOptions": {
+ "module": "commonjs",
+ "target": "ES3",
+ ~~~~~
+!!! error TS6046: Argument for '--target' option must be: 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'es2023', 'es2024', 'es2025', 'esnext'.
+ "noImplicitUseStrict": true,
+ ~~~~~~~~~~~~~~~~~~~~~
+!!! error TS5023: Unknown compiler option 'noImplicitUseStrict'.
+ "keyofStringsOnly": true,
+ ~~~~~~~~~~~~~~~~~~
+!!! error TS5023: Unknown compiler option 'keyofStringsOnly'.
+ "suppressExcessPropertyErrors": true,
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS5023: Unknown compiler option 'suppressExcessPropertyErrors'.
+ "suppressImplicitAnyIndexErrors": true,
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS5023: Unknown compiler option 'suppressImplicitAnyIndexErrors'.
+ "noStrictGenericChecks": true,
+ ~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS5023: Unknown compiler option 'noStrictGenericChecks'.
+ "charset": "utf8",
+ ~~~~~~~~~
+!!! error TS5023: Unknown compiler option 'charset'.
+ "out": "dist.js",
+ ~~~~~
+!!! error TS5023: Unknown compiler option 'out'.
+ "ignoreDeprecations": "5.0"
+ }
+ }
+
+==== /foo/a.ts (0 errors) ====
+ const a = 1;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions2.js b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions2.js
new file mode 100644
index 0000000000000..3b8fcc03c2caf
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions2.js
@@ -0,0 +1,9 @@
+//// [tests/cases/compiler/deprecatedCompilerOptions2.ts] ////
+
+//// [a.ts]
+const a = 1;
+
+
+//// [a.js]
+"use strict";
+const a = 1;
diff --git a/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions2.symbols b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions2.symbols
new file mode 100644
index 0000000000000..946026b89ea81
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions2.symbols
@@ -0,0 +1,6 @@
+//// [tests/cases/compiler/deprecatedCompilerOptions2.ts] ////
+
+=== /foo/a.ts ===
+const a = 1;
+>a : Symbol(a, Decl(a.ts, 0, 5))
+
diff --git a/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions2.types b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions2.types
new file mode 100644
index 0000000000000..efeb14fc9a69c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions2.types
@@ -0,0 +1,7 @@
+//// [tests/cases/compiler/deprecatedCompilerOptions2.ts] ////
+
+=== /foo/a.ts ===
+const a = 1;
+>a : 1
+>1 : 1
+
diff --git a/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions6.errors.txt b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions6.errors.txt
new file mode 100644
index 0000000000000..caad86fccfa21
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions6.errors.txt
@@ -0,0 +1,45 @@
+/foo/tsconfig.json(4,19): error TS6046: Argument for '--target' option must be: 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'es2023', 'es2024', 'es2025', 'esnext'.
+/foo/tsconfig.json(5,9): error TS5023: Unknown compiler option 'noImplicitUseStrict'.
+/foo/tsconfig.json(6,9): error TS5023: Unknown compiler option 'keyofStringsOnly'.
+/foo/tsconfig.json(7,9): error TS5023: Unknown compiler option 'suppressExcessPropertyErrors'.
+/foo/tsconfig.json(8,9): error TS5023: Unknown compiler option 'suppressImplicitAnyIndexErrors'.
+/foo/tsconfig.json(9,9): error TS5023: Unknown compiler option 'noStrictGenericChecks'.
+/foo/tsconfig.json(10,9): error TS5023: Unknown compiler option 'charset'.
+/foo/tsconfig.json(11,9): error TS5023: Unknown compiler option 'out'.
+
+
+==== /foo/tsconfig.json (8 errors) ====
+ {
+ "compilerOptions": {
+ "module": "commonjs",
+ "target": "ES3",
+ ~~~~~
+!!! error TS6046: Argument for '--target' option must be: 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'es2023', 'es2024', 'es2025', 'esnext'.
+ "noImplicitUseStrict": true,
+ ~~~~~~~~~~~~~~~~~~~~~
+!!! error TS5023: Unknown compiler option 'noImplicitUseStrict'.
+ "keyofStringsOnly": true,
+ ~~~~~~~~~~~~~~~~~~
+!!! error TS5023: Unknown compiler option 'keyofStringsOnly'.
+ "suppressExcessPropertyErrors": true,
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS5023: Unknown compiler option 'suppressExcessPropertyErrors'.
+ "suppressImplicitAnyIndexErrors": true,
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS5023: Unknown compiler option 'suppressImplicitAnyIndexErrors'.
+ "noStrictGenericChecks": true,
+ ~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS5023: Unknown compiler option 'noStrictGenericChecks'.
+ "charset": "utf8",
+ ~~~~~~~~~
+!!! error TS5023: Unknown compiler option 'charset'.
+ "out": "dist.js",
+ ~~~~~
+!!! error TS5023: Unknown compiler option 'out'.
+ "ignoreDeprecations": "5.1"
+ }
+ }
+
+==== /foo/a.ts (0 errors) ====
+ const a = 1;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions6.js b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions6.js
new file mode 100644
index 0000000000000..f03077cb3efef
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions6.js
@@ -0,0 +1,9 @@
+//// [tests/cases/compiler/deprecatedCompilerOptions6.ts] ////
+
+//// [a.ts]
+const a = 1;
+
+
+//// [a.js]
+"use strict";
+const a = 1;
diff --git a/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions6.symbols b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions6.symbols
new file mode 100644
index 0000000000000..d3e67bb0bacdc
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions6.symbols
@@ -0,0 +1,6 @@
+//// [tests/cases/compiler/deprecatedCompilerOptions6.ts] ////
+
+=== /foo/a.ts ===
+const a = 1;
+>a : Symbol(a, Decl(a.ts, 0, 5))
+
diff --git a/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions6.types b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions6.types
new file mode 100644
index 0000000000000..cf265215b9539
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/deprecatedCompilerOptions6.types
@@ -0,0 +1,7 @@
+//// [tests/cases/compiler/deprecatedCompilerOptions6.ts] ////
+
+=== /foo/a.ts ===
+const a = 1;
+>a : 1
+>1 : 1
+
diff --git a/tsc/testdata/baselines/reference/compiler/doNotEmitTripleSlashCommentsInEmptyFile.js b/tsc/testdata/baselines/reference/compiler/doNotEmitTripleSlashCommentsInEmptyFile.js
index 2876103ddd2dc..49e8e2ddd284d 100644
--- a/tsc/testdata/baselines/reference/compiler/doNotEmitTripleSlashCommentsInEmptyFile.js
+++ b/tsc/testdata/baselines/reference/compiler/doNotEmitTripleSlashCommentsInEmptyFile.js
@@ -7,7 +7,7 @@
//// [file2.ts]
///
///
-///
+
//// [file0.js]
"use strict";
diff --git a/tsc/testdata/baselines/reference/compiler/doNotEmitTripleSlashCommentsInEmptyFile.symbols b/tsc/testdata/baselines/reference/compiler/doNotEmitTripleSlashCommentsInEmptyFile.symbols
index e757b4fcd33d0..2bc5b0ecab71e 100644
--- a/tsc/testdata/baselines/reference/compiler/doNotEmitTripleSlashCommentsInEmptyFile.symbols
+++ b/tsc/testdata/baselines/reference/compiler/doNotEmitTripleSlashCommentsInEmptyFile.symbols
@@ -4,7 +4,7 @@
///
///
-///
+
=== file0.ts ===
=== file1.ts ===
diff --git a/tsc/testdata/baselines/reference/compiler/doNotEmitTripleSlashCommentsInEmptyFile.types b/tsc/testdata/baselines/reference/compiler/doNotEmitTripleSlashCommentsInEmptyFile.types
index e757b4fcd33d0..2bc5b0ecab71e 100644
--- a/tsc/testdata/baselines/reference/compiler/doNotEmitTripleSlashCommentsInEmptyFile.types
+++ b/tsc/testdata/baselines/reference/compiler/doNotEmitTripleSlashCommentsInEmptyFile.types
@@ -4,7 +4,7 @@
///
///
-///
+
=== file0.ts ===
=== file1.ts ===
diff --git a/tsc/testdata/baselines/reference/compiler/doNotemitTripleSlashComments.js b/tsc/testdata/baselines/reference/compiler/doNotemitTripleSlashComments.js
index b55627c2f36bc..46423f8360937 100644
--- a/tsc/testdata/baselines/reference/compiler/doNotemitTripleSlashComments.js
+++ b/tsc/testdata/baselines/reference/compiler/doNotemitTripleSlashComments.js
@@ -3,7 +3,6 @@
//// [file0.ts]
///
///
-///
var x = 10;
///
diff --git a/tsc/testdata/baselines/reference/compiler/doNotemitTripleSlashComments.symbols b/tsc/testdata/baselines/reference/compiler/doNotemitTripleSlashComments.symbols
index c1c099027ba8d..3926e135f5dd3 100644
--- a/tsc/testdata/baselines/reference/compiler/doNotemitTripleSlashComments.symbols
+++ b/tsc/testdata/baselines/reference/compiler/doNotemitTripleSlashComments.symbols
@@ -15,13 +15,12 @@ function bar() { }
=== file0.ts ===
///
///
-///
var x = 10;
->x : Symbol(x, Decl(file0.ts, 3, 3))
+>x : Symbol(x, Decl(file0.ts, 2, 3))
///
var y = "hello";
->y : Symbol(y, Decl(file0.ts, 6, 3))
+>y : Symbol(y, Decl(file0.ts, 5, 3))
///
diff --git a/tsc/testdata/baselines/reference/compiler/doNotemitTripleSlashComments.types b/tsc/testdata/baselines/reference/compiler/doNotemitTripleSlashComments.types
index cc4c4f7e6b500..54e490821a528 100644
--- a/tsc/testdata/baselines/reference/compiler/doNotemitTripleSlashComments.types
+++ b/tsc/testdata/baselines/reference/compiler/doNotemitTripleSlashComments.types
@@ -15,7 +15,6 @@ function bar() { }
=== file0.ts ===
///
///
-///
var x = 10;
>x : number
>10 : 10
diff --git a/tsc/testdata/baselines/reference/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.js b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.js
new file mode 100644
index 0000000000000..3d8bed909036b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.js
@@ -0,0 +1,38 @@
+//// [tests/cases/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.ts] ////
+
+//// [duplicateIdentifierShouldNotShortCircuitBaseTypeBinding_0.ts]
+export interface IPoint {}
+
+export namespace Shapes {
+
+ export class Point implements IPoint {}
+
+}
+
+//// [duplicateIdentifierShouldNotShortCircuitBaseTypeBinding_1.ts]
+//var x = new Shapes.Point();
+//interface IPoint {}
+
+//namespace Shapes {
+
+// export class Point implements IPoint {}
+
+//}
+
+//// [duplicateIdentifierShouldNotShortCircuitBaseTypeBinding_0.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Shapes = void 0;
+var Shapes;
+(function (Shapes) {
+ class Point {
+ }
+ Shapes.Point = Point;
+})(Shapes || (exports.Shapes = Shapes = {}));
+//// [duplicateIdentifierShouldNotShortCircuitBaseTypeBinding_1.js]
+"use strict";
+//var x = new Shapes.Point();
+//interface IPoint {}
+//namespace Shapes {
+// export class Point implements IPoint {}
+//}
diff --git a/tsc/testdata/baselines/reference/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.symbols b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.symbols
new file mode 100644
index 0000000000000..46895adac8fd0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.symbols
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.ts] ////
+
+=== duplicateIdentifierShouldNotShortCircuitBaseTypeBinding_0.ts ===
+export interface IPoint {}
+>IPoint : Symbol(IPoint, Decl(duplicateIdentifierShouldNotShortCircuitBaseTypeBinding_0.ts, 0, 0))
+
+export namespace Shapes {
+>Shapes : Symbol(Shapes, Decl(duplicateIdentifierShouldNotShortCircuitBaseTypeBinding_0.ts, 0, 26))
+
+ export class Point implements IPoint {}
+>Point : Symbol(Point, Decl(duplicateIdentifierShouldNotShortCircuitBaseTypeBinding_0.ts, 2, 25))
+>IPoint : Symbol(IPoint, Decl(duplicateIdentifierShouldNotShortCircuitBaseTypeBinding_0.ts, 0, 0))
+
+}
+
+=== duplicateIdentifierShouldNotShortCircuitBaseTypeBinding_1.ts ===
+
+//var x = new Shapes.Point();
+//interface IPoint {}
+
+//namespace Shapes {
+
+// export class Point implements IPoint {}
+
+//}
diff --git a/tsc/testdata/baselines/reference/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.types b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.types
new file mode 100644
index 0000000000000..1493f2e59b89d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.types
@@ -0,0 +1,23 @@
+//// [tests/cases/compiler/duplicateIdentifierShouldNotShortCircuitBaseTypeBinding.ts] ////
+
+=== duplicateIdentifierShouldNotShortCircuitBaseTypeBinding_0.ts ===
+export interface IPoint {}
+
+export namespace Shapes {
+>Shapes : typeof Shapes
+
+ export class Point implements IPoint {}
+>Point : Point
+
+}
+
+=== duplicateIdentifierShouldNotShortCircuitBaseTypeBinding_1.ts ===
+
+//var x = new Shapes.Point();
+//interface IPoint {}
+
+//namespace Shapes {
+
+// export class Point implements IPoint {}
+
+//}
diff --git a/tsc/testdata/baselines/reference/compiler/dynamicRequire.js b/tsc/testdata/baselines/reference/compiler/dynamicRequire.js
new file mode 100644
index 0000000000000..55f15d5b938cd
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/dynamicRequire.js
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/dynamicRequire.ts] ////
+
+//// [a.js]
+function foo(name) {
+ var s = require("t/" + name)
+}
+
+
+//// [a.js]
+"use strict";
+function foo(name) {
+ var s = require("t/" + name);
+}
diff --git a/tsc/testdata/baselines/reference/compiler/dynamicRequire.symbols b/tsc/testdata/baselines/reference/compiler/dynamicRequire.symbols
new file mode 100644
index 0000000000000..d665cff06604f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/dynamicRequire.symbols
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/dynamicRequire.ts] ////
+
+=== a.js ===
+function foo(name) {
+>foo : Symbol(foo, Decl(a.js, 0, 0))
+>name : Symbol(name, Decl(a.js, 0, 13))
+
+ var s = require("t/" + name)
+>s : Symbol(s, Decl(a.js, 1, 7))
+>require : Symbol(require)
+>name : Symbol(name, Decl(a.js, 0, 13))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/dynamicRequire.types b/tsc/testdata/baselines/reference/compiler/dynamicRequire.types
new file mode 100644
index 0000000000000..605f6da667395
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/dynamicRequire.types
@@ -0,0 +1,16 @@
+//// [tests/cases/compiler/dynamicRequire.ts] ////
+
+=== a.js ===
+function foo(name) {
+>foo : (name: any) => void
+>name : any
+
+ var s = require("t/" + name)
+>s : any
+>require("t/" + name) : any
+>require : any
+>"t/" + name : string
+>"t/" : "t/"
+>name : any
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport(target=es2015).errors.txt b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport(target=es2015).errors.txt
new file mode 100644
index 0000000000000..8d696684e5d4c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport(target=es2015).errors.txt
@@ -0,0 +1,12 @@
+client.ts(1,1): error TS1191: An import declaration cannot have modifiers.
+
+
+==== server.ts (0 errors) ====
+ var a = 10;
+ export default a;
+
+==== client.ts (1 errors) ====
+ export import defaultBinding, * as nameSpaceBinding from "./server";
+ ~~~~~~
+!!! error TS1191: An import declaration cannot have modifiers.
+ export var x: number = defaultBinding;
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport(target=es2015).js b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport(target=es2015).js
new file mode 100644
index 0000000000000..c5a18d86f534f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport(target=es2015).js
@@ -0,0 +1,31 @@
+//// [tests/cases/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport.ts] ////
+
+//// [server.ts]
+var a = 10;
+export default a;
+
+//// [client.ts]
+export import defaultBinding, * as nameSpaceBinding from "./server";
+export var x: number = defaultBinding;
+
+//// [server.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var a = 10;
+exports.default = a;
+//// [client.js]
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+const server_1 = __importDefault(require("./server"));
+exports.x = server_1.default;
+
+
+//// [server.d.ts]
+declare var a: number;
+export default a;
+//// [client.d.ts]
+export declare var x: number;
diff --git a/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport(target=es2015).symbols b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport(target=es2015).symbols
new file mode 100644
index 0000000000000..42acdc7dd56b0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport(target=es2015).symbols
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport.ts] ////
+
+=== server.ts ===
+var a = 10;
+>a : Symbol(a, Decl(server.ts, 0, 3))
+
+export default a;
+>a : Symbol(a, Decl(server.ts, 0, 3))
+
+=== client.ts ===
+export import defaultBinding, * as nameSpaceBinding from "./server";
+>defaultBinding : Symbol(defaultBinding, Decl(client.ts, 0, 13))
+>nameSpaceBinding : Symbol(nameSpaceBinding, Decl(client.ts, 0, 29))
+
+export var x: number = defaultBinding;
+>x : Symbol(x, Decl(client.ts, 1, 10))
+>defaultBinding : Symbol(defaultBinding, Decl(client.ts, 0, 13))
+
diff --git a/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport(target=es2015).types b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport(target=es2015).types
new file mode 100644
index 0000000000000..13748a465dd09
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport(target=es2015).types
@@ -0,0 +1,19 @@
+//// [tests/cases/compiler/es6ImportDefaultBindingFollowedWithNamespaceBinding1WithExport.ts] ////
+
+=== server.ts ===
+var a = 10;
+>a : number
+>10 : 10
+
+export default a;
+>a : number
+
+=== client.ts ===
+export import defaultBinding, * as nameSpaceBinding from "./server";
+>defaultBinding : number
+>nameSpaceBinding : typeof nameSpaceBinding
+
+export var x: number = defaultBinding;
+>x : number
+>defaultBinding : number
+
diff --git a/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBindingDts1(target=es2015).js b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBindingDts1(target=es2015).js
new file mode 100644
index 0000000000000..f819347e8bbdf
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBindingDts1(target=es2015).js
@@ -0,0 +1,34 @@
+//// [tests/cases/compiler/es6ImportDefaultBindingFollowedWithNamespaceBindingDts1.ts] ////
+
+//// [server.ts]
+class a { }
+export default a;
+
+//// [client.ts]
+import defaultBinding, * as nameSpaceBinding from "./server";
+export var x = new defaultBinding();
+
+//// [server.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+class a {
+}
+exports.default = a;
+//// [client.js]
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+const server_1 = __importDefault(require("./server"));
+exports.x = new server_1.default();
+
+
+//// [server.d.ts]
+declare class a {
+}
+export default a;
+//// [client.d.ts]
+import defaultBinding from "./server";
+export declare var x: defaultBinding;
diff --git a/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBindingDts1(target=es2015).symbols b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBindingDts1(target=es2015).symbols
new file mode 100644
index 0000000000000..6227c06b0ee62
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBindingDts1(target=es2015).symbols
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/es6ImportDefaultBindingFollowedWithNamespaceBindingDts1.ts] ////
+
+=== server.ts ===
+class a { }
+>a : Symbol(a, Decl(server.ts, 0, 0))
+
+export default a;
+>a : Symbol(a, Decl(server.ts, 0, 0))
+
+=== client.ts ===
+import defaultBinding, * as nameSpaceBinding from "./server";
+>defaultBinding : Symbol(defaultBinding, Decl(client.ts, 0, 6))
+>nameSpaceBinding : Symbol(nameSpaceBinding, Decl(client.ts, 0, 22))
+
+export var x = new defaultBinding();
+>x : Symbol(x, Decl(client.ts, 1, 10))
+>defaultBinding : Symbol(defaultBinding, Decl(client.ts, 0, 6))
+
diff --git a/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBindingDts1(target=es2015).types b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBindingDts1(target=es2015).types
new file mode 100644
index 0000000000000..c6866e6c4afbf
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/es6ImportDefaultBindingFollowedWithNamespaceBindingDts1(target=es2015).types
@@ -0,0 +1,19 @@
+//// [tests/cases/compiler/es6ImportDefaultBindingFollowedWithNamespaceBindingDts1.ts] ////
+
+=== server.ts ===
+class a { }
+>a : a
+
+export default a;
+>a : a
+
+=== client.ts ===
+import defaultBinding, * as nameSpaceBinding from "./server";
+>defaultBinding : typeof defaultBinding
+>nameSpaceBinding : typeof nameSpaceBinding
+
+export var x = new defaultBinding();
+>x : defaultBinding
+>new defaultBinding() : defaultBinding
+>defaultBinding : typeof defaultBinding
+
diff --git a/tsc/testdata/baselines/reference/compiler/es6ImportNameSpaceImportWithExport.errors.txt b/tsc/testdata/baselines/reference/compiler/es6ImportNameSpaceImportWithExport.errors.txt
new file mode 100644
index 0000000000000..b74395f6dda49
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/es6ImportNameSpaceImportWithExport.errors.txt
@@ -0,0 +1,22 @@
+client.ts(1,1): error TS1191: An import declaration cannot have modifiers.
+client.ts(1,42): error TS2307: Cannot find module 'server' or its corresponding type declarations.
+client.ts(3,1): error TS1191: An import declaration cannot have modifiers.
+client.ts(3,43): error TS2307: Cannot find module 'server' or its corresponding type declarations.
+
+
+==== server.ts (0 errors) ====
+ export var a = 10;
+
+==== client.ts (4 errors) ====
+ export import * as nameSpaceBinding from "server";
+ ~~~~~~
+!!! error TS1191: An import declaration cannot have modifiers.
+ ~~~~~~~~
+!!! error TS2307: Cannot find module 'server' or its corresponding type declarations.
+ export var x = nameSpaceBinding.a;
+ export import * as nameSpaceBinding2 from "server"; // Not referenced imports
+ ~~~~~~
+!!! error TS1191: An import declaration cannot have modifiers.
+ ~~~~~~~~
+!!! error TS2307: Cannot find module 'server' or its corresponding type declarations.
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/es6ImportNameSpaceImportWithExport.js b/tsc/testdata/baselines/reference/compiler/es6ImportNameSpaceImportWithExport.js
new file mode 100644
index 0000000000000..df2036a7e2061
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/es6ImportNameSpaceImportWithExport.js
@@ -0,0 +1,61 @@
+//// [tests/cases/compiler/es6ImportNameSpaceImportWithExport.ts] ////
+
+//// [server.ts]
+export var a = 10;
+
+//// [client.ts]
+export import * as nameSpaceBinding from "server";
+export var x = nameSpaceBinding.a;
+export import * as nameSpaceBinding2 from "server"; // Not referenced imports
+
+
+//// [server.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.a = void 0;
+exports.a = 10;
+//// [client.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || (function () {
+ var ownKeys = function(o) {
+ ownKeys = Object.getOwnPropertyNames || function (o) {
+ var ar = [];
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+ return ar;
+ };
+ return ownKeys(o);
+ };
+ return function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+ __setModuleDefault(result, mod);
+ return result;
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+const nameSpaceBinding = __importStar(require("server"));
+exports.x = nameSpaceBinding.a;
+
+
+//// [server.d.ts]
+export declare var a: number;
+//// [client.d.ts]
+export declare var x: any;
diff --git a/tsc/testdata/baselines/reference/compiler/es6ImportNameSpaceImportWithExport.symbols b/tsc/testdata/baselines/reference/compiler/es6ImportNameSpaceImportWithExport.symbols
new file mode 100644
index 0000000000000..c801ff874ce1c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/es6ImportNameSpaceImportWithExport.symbols
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/es6ImportNameSpaceImportWithExport.ts] ////
+
+=== server.ts ===
+export var a = 10;
+>a : Symbol(a, Decl(server.ts, 0, 10))
+
+=== client.ts ===
+export import * as nameSpaceBinding from "server";
+>nameSpaceBinding : Symbol(nameSpaceBinding, Decl(client.ts, 0, 13))
+
+export var x = nameSpaceBinding.a;
+>x : Symbol(x, Decl(client.ts, 1, 10))
+>nameSpaceBinding : Symbol(nameSpaceBinding, Decl(client.ts, 0, 13))
+
+export import * as nameSpaceBinding2 from "server"; // Not referenced imports
+>nameSpaceBinding2 : Symbol(nameSpaceBinding2, Decl(client.ts, 2, 13))
+
diff --git a/tsc/testdata/baselines/reference/compiler/es6ImportNameSpaceImportWithExport.types b/tsc/testdata/baselines/reference/compiler/es6ImportNameSpaceImportWithExport.types
new file mode 100644
index 0000000000000..f84d6324e8038
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/es6ImportNameSpaceImportWithExport.types
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/es6ImportNameSpaceImportWithExport.ts] ////
+
+=== server.ts ===
+export var a = 10;
+>a : number
+>10 : 10
+
+=== client.ts ===
+export import * as nameSpaceBinding from "server";
+>nameSpaceBinding : any
+
+export var x = nameSpaceBinding.a;
+>x : any
+>nameSpaceBinding.a : any
+>nameSpaceBinding : any
+>a : any
+
+export import * as nameSpaceBinding2 from "server"; // Not referenced imports
+>nameSpaceBinding2 : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignedTypeAsTypeAnnotation.errors.txt b/tsc/testdata/baselines/reference/compiler/exportAssignedTypeAsTypeAnnotation.errors.txt
new file mode 100644
index 0000000000000..330e44f8a43be
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignedTypeAsTypeAnnotation.errors.txt
@@ -0,0 +1,17 @@
+exportAssignedTypeAsTypeAnnotation_1.ts(2,23): error TS2307: Cannot find module 'exportAssignedTypeAsTypeAnnotation_0' or its corresponding type declarations.
+
+
+==== exportAssignedTypeAsTypeAnnotation_1.ts (1 errors) ====
+ ///
+ import test = require('exportAssignedTypeAsTypeAnnotation_0');
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'exportAssignedTypeAsTypeAnnotation_0' or its corresponding type declarations.
+ var t2: test; // should not raise a 'container type' error
+
+==== exportAssignedTypeAsTypeAnnotation_0.ts (0 errors) ====
+ interface x {
+ (): Date;
+ foo: string;
+ }
+ export = x;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignedTypeAsTypeAnnotation.js b/tsc/testdata/baselines/reference/compiler/exportAssignedTypeAsTypeAnnotation.js
new file mode 100644
index 0000000000000..a5f7a6f4994b0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignedTypeAsTypeAnnotation.js
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/exportAssignedTypeAsTypeAnnotation.ts] ////
+
+//// [exportAssignedTypeAsTypeAnnotation_0.ts]
+interface x {
+ (): Date;
+ foo: string;
+}
+export = x;
+
+//// [exportAssignedTypeAsTypeAnnotation_1.ts]
+///
+import test = require('exportAssignedTypeAsTypeAnnotation_0');
+var t2: test; // should not raise a 'container type' error
+
+
+//// [exportAssignedTypeAsTypeAnnotation_0.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [exportAssignedTypeAsTypeAnnotation_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var t2; // should not raise a 'container type' error
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignedTypeAsTypeAnnotation.symbols b/tsc/testdata/baselines/reference/compiler/exportAssignedTypeAsTypeAnnotation.symbols
new file mode 100644
index 0000000000000..45c069ffdb6db
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignedTypeAsTypeAnnotation.symbols
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/exportAssignedTypeAsTypeAnnotation.ts] ////
+
+=== exportAssignedTypeAsTypeAnnotation_1.ts ===
+///
+import test = require('exportAssignedTypeAsTypeAnnotation_0');
+>test : Symbol(test, Decl(exportAssignedTypeAsTypeAnnotation_1.ts, 0, 0))
+
+var t2: test; // should not raise a 'container type' error
+>t2 : Symbol(t2, Decl(exportAssignedTypeAsTypeAnnotation_1.ts, 2, 3))
+>test : Symbol(test, Decl(exportAssignedTypeAsTypeAnnotation_1.ts, 0, 0))
+
+=== exportAssignedTypeAsTypeAnnotation_0.ts ===
+interface x {
+>x : Symbol(x, Decl(exportAssignedTypeAsTypeAnnotation_0.ts, 0, 0))
+
+ (): Date;
+>Date : Symbol(Date, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.scripthost.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
+
+ foo: string;
+>foo : Symbol(x.foo, Decl(exportAssignedTypeAsTypeAnnotation_0.ts, 1, 13))
+}
+export = x;
+>x : Symbol(x, Decl(exportAssignedTypeAsTypeAnnotation_0.ts, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignedTypeAsTypeAnnotation.types b/tsc/testdata/baselines/reference/compiler/exportAssignedTypeAsTypeAnnotation.types
new file mode 100644
index 0000000000000..0d879a2960500
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignedTypeAsTypeAnnotation.types
@@ -0,0 +1,19 @@
+//// [tests/cases/compiler/exportAssignedTypeAsTypeAnnotation.ts] ////
+
+=== exportAssignedTypeAsTypeAnnotation_1.ts ===
+///
+import test = require('exportAssignedTypeAsTypeAnnotation_0');
+>test : any
+
+var t2: test; // should not raise a 'container type' error
+>t2 : test
+
+=== exportAssignedTypeAsTypeAnnotation_0.ts ===
+interface x {
+ (): Date;
+ foo: string;
+>foo : string
+}
+export = x;
+>x : x
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentClass.errors.txt b/tsc/testdata/baselines/reference/compiler/exportAssignmentClass.errors.txt
new file mode 100644
index 0000000000000..23274b0c68580
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentClass.errors.txt
@@ -0,0 +1,15 @@
+exportAssignmentClass_B.ts(1,20): error TS2307: Cannot find module 'exportAssignmentClass_A' or its corresponding type declarations.
+
+
+==== exportAssignmentClass_B.ts (1 errors) ====
+ import D = require("exportAssignmentClass_A");
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'exportAssignmentClass_A' or its corresponding type declarations.
+
+ var d = new D();
+ var x = d.p;
+==== exportAssignmentClass_A.ts (0 errors) ====
+ class C { public p = 0; }
+
+ export = C;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentClass.js b/tsc/testdata/baselines/reference/compiler/exportAssignmentClass.js
new file mode 100644
index 0000000000000..2c40737187e98
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentClass.js
@@ -0,0 +1,19 @@
+//// [tests/cases/compiler/exportAssignmentClass.ts] ////
+
+//// [exportAssignmentClass_A.ts]
+class C { public p = 0; }
+
+export = C;
+
+//// [exportAssignmentClass_B.ts]
+import D = require("exportAssignmentClass_A");
+
+var d = new D();
+var x = d.p;
+
+//// [exportAssignmentClass_B.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const D = require("exportAssignmentClass_A");
+var d = new D();
+var x = d.p;
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentClass.symbols b/tsc/testdata/baselines/reference/compiler/exportAssignmentClass.symbols
new file mode 100644
index 0000000000000..40abf433d42ea
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentClass.symbols
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/exportAssignmentClass.ts] ////
+
+=== exportAssignmentClass_B.ts ===
+import D = require("exportAssignmentClass_A");
+>D : Symbol(D, Decl(exportAssignmentClass_B.ts, 0, 0))
+
+var d = new D();
+>d : Symbol(d, Decl(exportAssignmentClass_B.ts, 2, 3))
+>D : Symbol(D, Decl(exportAssignmentClass_B.ts, 0, 0))
+
+var x = d.p;
+>x : Symbol(x, Decl(exportAssignmentClass_B.ts, 3, 3))
+>d : Symbol(d, Decl(exportAssignmentClass_B.ts, 2, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentClass.types b/tsc/testdata/baselines/reference/compiler/exportAssignmentClass.types
new file mode 100644
index 0000000000000..2919832844800
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentClass.types
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/exportAssignmentClass.ts] ////
+
+=== exportAssignmentClass_B.ts ===
+import D = require("exportAssignmentClass_A");
+>D : any
+
+var d = new D();
+>d : any
+>new D() : any
+>D : any
+
+var x = d.p;
+>x : any
+>d.p : any
+>d : any
+>p : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentError.js b/tsc/testdata/baselines/reference/compiler/exportAssignmentError.js
new file mode 100644
index 0000000000000..4983706f70ca9
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentError.js
@@ -0,0 +1,19 @@
+//// [tests/cases/compiler/exportAssignmentError.ts] ////
+
+//// [exportEqualsModule_A.ts]
+namespace M {
+ export var x;
+}
+
+import M2 = M;
+
+export = M2; // should not error
+
+
+//// [exportEqualsModule_A.js]
+"use strict";
+var M;
+(function (M) {
+})(M || (M = {}));
+var M2 = M;
+module.exports = M2;
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentError.symbols b/tsc/testdata/baselines/reference/compiler/exportAssignmentError.symbols
new file mode 100644
index 0000000000000..ff333e602f627
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentError.symbols
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/exportAssignmentError.ts] ////
+
+=== exportEqualsModule_A.ts ===
+namespace M {
+>M : Symbol(M, Decl(exportEqualsModule_A.ts, 0, 0))
+
+ export var x;
+>x : Symbol(x, Decl(exportEqualsModule_A.ts, 1, 11))
+}
+
+import M2 = M;
+>M2 : Symbol(M2, Decl(exportEqualsModule_A.ts, 2, 1))
+>M : Symbol(M, Decl(exportEqualsModule_A.ts, 0, 0))
+
+export = M2; // should not error
+>M2 : Symbol(M2, Decl(exportEqualsModule_A.ts, 2, 1))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentError.types b/tsc/testdata/baselines/reference/compiler/exportAssignmentError.types
new file mode 100644
index 0000000000000..03654f38ce4ab
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentError.types
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/exportAssignmentError.ts] ////
+
+=== exportEqualsModule_A.ts ===
+namespace M {
+>M : typeof M
+
+ export var x;
+>x : any
+}
+
+import M2 = M;
+>M2 : typeof M
+>M : typeof M
+
+export = M2; // should not error
+>M2 : typeof M
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentFunction.errors.txt b/tsc/testdata/baselines/reference/compiler/exportAssignmentFunction.errors.txt
new file mode 100644
index 0000000000000..861f9cc56cb79
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentFunction.errors.txt
@@ -0,0 +1,14 @@
+exportAssignmentFunction_B.ts(1,26): error TS2307: Cannot find module 'exportAssignmentFunction_A' or its corresponding type declarations.
+
+
+==== exportAssignmentFunction_B.ts (1 errors) ====
+ import fooFunc = require("exportAssignmentFunction_A");
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'exportAssignmentFunction_A' or its corresponding type declarations.
+
+ var n: number = fooFunc();
+==== exportAssignmentFunction_A.ts (0 errors) ====
+ function foo() { return 0; }
+
+ export = foo;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentFunction.js b/tsc/testdata/baselines/reference/compiler/exportAssignmentFunction.js
new file mode 100644
index 0000000000000..ac5142a7b10a2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentFunction.js
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/exportAssignmentFunction.ts] ////
+
+//// [exportAssignmentFunction_A.ts]
+function foo() { return 0; }
+
+export = foo;
+
+//// [exportAssignmentFunction_B.ts]
+import fooFunc = require("exportAssignmentFunction_A");
+
+var n: number = fooFunc();
+
+//// [exportAssignmentFunction_B.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fooFunc = require("exportAssignmentFunction_A");
+var n = fooFunc();
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentFunction.symbols b/tsc/testdata/baselines/reference/compiler/exportAssignmentFunction.symbols
new file mode 100644
index 0000000000000..d73fc22db7d30
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentFunction.symbols
@@ -0,0 +1,10 @@
+//// [tests/cases/compiler/exportAssignmentFunction.ts] ////
+
+=== exportAssignmentFunction_B.ts ===
+import fooFunc = require("exportAssignmentFunction_A");
+>fooFunc : Symbol(fooFunc, Decl(exportAssignmentFunction_B.ts, 0, 0))
+
+var n: number = fooFunc();
+>n : Symbol(n, Decl(exportAssignmentFunction_B.ts, 2, 3))
+>fooFunc : Symbol(fooFunc, Decl(exportAssignmentFunction_B.ts, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentFunction.types b/tsc/testdata/baselines/reference/compiler/exportAssignmentFunction.types
new file mode 100644
index 0000000000000..fe0bfb1f674ef
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentFunction.types
@@ -0,0 +1,11 @@
+//// [tests/cases/compiler/exportAssignmentFunction.ts] ////
+
+=== exportAssignmentFunction_B.ts ===
+import fooFunc = require("exportAssignmentFunction_A");
+>fooFunc : any
+
+var n: number = fooFunc();
+>n : number
+>fooFunc() : any
+>fooFunc : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentInterface.errors.txt b/tsc/testdata/baselines/reference/compiler/exportAssignmentInterface.errors.txt
new file mode 100644
index 0000000000000..11f9fd23c4b39
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentInterface.errors.txt
@@ -0,0 +1,18 @@
+exportAssignmentInterface_B.ts(1,21): error TS2307: Cannot find module 'exportAssignmentInterface_A' or its corresponding type declarations.
+
+
+==== exportAssignmentInterface_B.ts (1 errors) ====
+ import I1 = require("exportAssignmentInterface_A");
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'exportAssignmentInterface_A' or its corresponding type declarations.
+
+ var i: I1;
+
+ var n: number = i.p1;
+==== exportAssignmentInterface_A.ts (0 errors) ====
+ interface A {
+ p1: number;
+ }
+
+ export = A;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentInterface.js b/tsc/testdata/baselines/reference/compiler/exportAssignmentInterface.js
new file mode 100644
index 0000000000000..fe3d58f9125e6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentInterface.js
@@ -0,0 +1,21 @@
+//// [tests/cases/compiler/exportAssignmentInterface.ts] ////
+
+//// [exportAssignmentInterface_A.ts]
+interface A {
+ p1: number;
+}
+
+export = A;
+
+//// [exportAssignmentInterface_B.ts]
+import I1 = require("exportAssignmentInterface_A");
+
+var i: I1;
+
+var n: number = i.p1;
+
+//// [exportAssignmentInterface_B.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var i;
+var n = i.p1;
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentInterface.symbols b/tsc/testdata/baselines/reference/compiler/exportAssignmentInterface.symbols
new file mode 100644
index 0000000000000..ba2d95a63f404
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentInterface.symbols
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/exportAssignmentInterface.ts] ////
+
+=== exportAssignmentInterface_B.ts ===
+import I1 = require("exportAssignmentInterface_A");
+>I1 : Symbol(I1, Decl(exportAssignmentInterface_B.ts, 0, 0))
+
+var i: I1;
+>i : Symbol(i, Decl(exportAssignmentInterface_B.ts, 2, 3))
+>I1 : Symbol(I1, Decl(exportAssignmentInterface_B.ts, 0, 0))
+
+var n: number = i.p1;
+>n : Symbol(n, Decl(exportAssignmentInterface_B.ts, 4, 3))
+>i : Symbol(i, Decl(exportAssignmentInterface_B.ts, 2, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentInterface.types b/tsc/testdata/baselines/reference/compiler/exportAssignmentInterface.types
new file mode 100644
index 0000000000000..a3b059914d488
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentInterface.types
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/exportAssignmentInterface.ts] ////
+
+=== exportAssignmentInterface_B.ts ===
+import I1 = require("exportAssignmentInterface_A");
+>I1 : any
+
+var i: I1;
+>i : I1
+
+var n: number = i.p1;
+>n : number
+>i.p1 : any
+>i : I1
+>p1 : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentInternalModule.errors.txt b/tsc/testdata/baselines/reference/compiler/exportAssignmentInternalModule.errors.txt
new file mode 100644
index 0000000000000..386cda68ec238
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentInternalModule.errors.txt
@@ -0,0 +1,16 @@
+exportAssignmentInternalModule_B.ts(1,23): error TS2307: Cannot find module 'exportAssignmentInternalModule_A' or its corresponding type declarations.
+
+
+==== exportAssignmentInternalModule_B.ts (1 errors) ====
+ import modM = require("exportAssignmentInternalModule_A");
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'exportAssignmentInternalModule_A' or its corresponding type declarations.
+
+ var n: number = modM.x;
+==== exportAssignmentInternalModule_A.ts (0 errors) ====
+ namespace M {
+ export var x;
+ }
+
+ export = M;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentInternalModule.js b/tsc/testdata/baselines/reference/compiler/exportAssignmentInternalModule.js
new file mode 100644
index 0000000000000..507098a7ed108
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentInternalModule.js
@@ -0,0 +1,19 @@
+//// [tests/cases/compiler/exportAssignmentInternalModule.ts] ////
+
+//// [exportAssignmentInternalModule_A.ts]
+namespace M {
+ export var x;
+}
+
+export = M;
+
+//// [exportAssignmentInternalModule_B.ts]
+import modM = require("exportAssignmentInternalModule_A");
+
+var n: number = modM.x;
+
+//// [exportAssignmentInternalModule_B.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const modM = require("exportAssignmentInternalModule_A");
+var n = modM.x;
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentInternalModule.symbols b/tsc/testdata/baselines/reference/compiler/exportAssignmentInternalModule.symbols
new file mode 100644
index 0000000000000..437e2fbfd1985
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentInternalModule.symbols
@@ -0,0 +1,10 @@
+//// [tests/cases/compiler/exportAssignmentInternalModule.ts] ////
+
+=== exportAssignmentInternalModule_B.ts ===
+import modM = require("exportAssignmentInternalModule_A");
+>modM : Symbol(modM, Decl(exportAssignmentInternalModule_B.ts, 0, 0))
+
+var n: number = modM.x;
+>n : Symbol(n, Decl(exportAssignmentInternalModule_B.ts, 2, 3))
+>modM : Symbol(modM, Decl(exportAssignmentInternalModule_B.ts, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentInternalModule.types b/tsc/testdata/baselines/reference/compiler/exportAssignmentInternalModule.types
new file mode 100644
index 0000000000000..d04bc6fce3c23
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentInternalModule.types
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/exportAssignmentInternalModule.ts] ////
+
+=== exportAssignmentInternalModule_B.ts ===
+import modM = require("exportAssignmentInternalModule_A");
+>modM : any
+
+var n: number = modM.x;
+>n : number
+>modM.x : any
+>modM : any
+>x : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentOfGenericType1.errors.txt b/tsc/testdata/baselines/reference/compiler/exportAssignmentOfGenericType1.errors.txt
new file mode 100644
index 0000000000000..4194c67feb980
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentOfGenericType1.errors.txt
@@ -0,0 +1,26 @@
+exportAssignmentOfGenericType1_0.ts(2,14): error TS2564: Property 'foo' has no initializer and is not definitely assigned in the constructor.
+exportAssignmentOfGenericType1_1.ts(2,20): error TS2307: Cannot find module 'exportAssignmentOfGenericType1_0' or its corresponding type declarations.
+exportAssignmentOfGenericType1_1.ts(6,17): error TS2454: Variable 'm' is used before being assigned.
+exportAssignmentOfGenericType1_1.ts(6,19): error TS2339: Property 'foo' does not exist on type 'M'.
+
+
+==== exportAssignmentOfGenericType1_1.ts (3 errors) ====
+ ///
+ import q = require("exportAssignmentOfGenericType1_0");
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'exportAssignmentOfGenericType1_0' or its corresponding type declarations.
+
+ class M extends q { }
+ var m: M;
+ var r: string = m.foo;
+ ~
+!!! error TS2454: Variable 'm' is used before being assigned.
+ ~~~
+!!! error TS2339: Property 'foo' does not exist on type 'M'.
+
+==== exportAssignmentOfGenericType1_0.ts (1 errors) ====
+ export = T;
+ class T { foo: X; }
+ ~~~
+!!! error TS2564: Property 'foo' has no initializer and is not definitely assigned in the constructor.
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentOfGenericType1.js b/tsc/testdata/baselines/reference/compiler/exportAssignmentOfGenericType1.js
new file mode 100644
index 0000000000000..ec174d1b7aae7
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentOfGenericType1.js
@@ -0,0 +1,29 @@
+//// [tests/cases/compiler/exportAssignmentOfGenericType1.ts] ////
+
+//// [exportAssignmentOfGenericType1_0.ts]
+export = T;
+class T { foo: X; }
+
+//// [exportAssignmentOfGenericType1_1.ts]
+///
+import q = require("exportAssignmentOfGenericType1_0");
+
+class M extends q { }
+var m: M;
+var r: string = m.foo;
+
+
+//// [exportAssignmentOfGenericType1_0.js]
+"use strict";
+class T {
+}
+module.exports = T;
+//// [exportAssignmentOfGenericType1_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+///
+const q = require("exportAssignmentOfGenericType1_0");
+class M extends q {
+}
+var m;
+var r = m.foo;
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentOfGenericType1.symbols b/tsc/testdata/baselines/reference/compiler/exportAssignmentOfGenericType1.symbols
new file mode 100644
index 0000000000000..b2c1b5f6ade33
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentOfGenericType1.symbols
@@ -0,0 +1,29 @@
+//// [tests/cases/compiler/exportAssignmentOfGenericType1.ts] ////
+
+=== exportAssignmentOfGenericType1_1.ts ===
+///
+import q = require("exportAssignmentOfGenericType1_0");
+>q : Symbol(q, Decl(exportAssignmentOfGenericType1_1.ts, 0, 0))
+
+class M extends q { }
+>M : Symbol(M, Decl(exportAssignmentOfGenericType1_1.ts, 1, 55))
+>q : Symbol(q, Decl(exportAssignmentOfGenericType1_1.ts, 0, 0))
+
+var m: M;
+>m : Symbol(m, Decl(exportAssignmentOfGenericType1_1.ts, 4, 3))
+>M : Symbol(M, Decl(exportAssignmentOfGenericType1_1.ts, 1, 55))
+
+var r: string = m.foo;
+>r : Symbol(r, Decl(exportAssignmentOfGenericType1_1.ts, 5, 3))
+>m : Symbol(m, Decl(exportAssignmentOfGenericType1_1.ts, 4, 3))
+
+=== exportAssignmentOfGenericType1_0.ts ===
+export = T;
+>T : Symbol(T, Decl(exportAssignmentOfGenericType1_0.ts, 0, 11))
+
+class T { foo: X; }
+>T : Symbol(T, Decl(exportAssignmentOfGenericType1_0.ts, 0, 11))
+>X : Symbol(X, Decl(exportAssignmentOfGenericType1_0.ts, 1, 8))
+>foo : Symbol(T.foo, Decl(exportAssignmentOfGenericType1_0.ts, 1, 12))
+>X : Symbol(X, Decl(exportAssignmentOfGenericType1_0.ts, 1, 8))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentOfGenericType1.types b/tsc/testdata/baselines/reference/compiler/exportAssignmentOfGenericType1.types
new file mode 100644
index 0000000000000..045ed4241f6e9
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentOfGenericType1.types
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/exportAssignmentOfGenericType1.ts] ////
+
+=== exportAssignmentOfGenericType1_1.ts ===
+///
+import q = require("exportAssignmentOfGenericType1_0");
+>q : any
+
+class M extends q { }
+>M : M
+>q : any
+
+var m: M;
+>m : M
+
+var r: string = m.foo;
+>r : string
+>m.foo : any
+>m : M
+>foo : any
+
+=== exportAssignmentOfGenericType1_0.ts ===
+export = T;
+>T : T
+
+class T { foo: X; }
+>T : T
+>foo : X
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentWithImportStatementPrivacyError.js b/tsc/testdata/baselines/reference/compiler/exportAssignmentWithImportStatementPrivacyError.js
new file mode 100644
index 0000000000000..1362b5b2103b1
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentWithImportStatementPrivacyError.js
@@ -0,0 +1,31 @@
+//// [tests/cases/compiler/exportAssignmentWithImportStatementPrivacyError.ts] ////
+
+//// [exportAssignmentWithImportStatementPrivacyError.ts]
+namespace m2 {
+ export interface connectModule {
+ (res, req, next): void;
+ }
+ export interface connectExport {
+ use: (mod: connectModule) => connectExport;
+ listen: (port: number) => void;
+ }
+
+}
+
+namespace M {
+ export var server: {
+ (): m2.connectExport;
+ test1: m2.connectModule;
+ test2(): m2.connectModule;
+ };
+}
+import M22 = M;
+
+export = M;
+
+//// [exportAssignmentWithImportStatementPrivacyError.js]
+"use strict";
+var M;
+(function (M) {
+})(M || (M = {}));
+module.exports = M;
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentWithImportStatementPrivacyError.symbols b/tsc/testdata/baselines/reference/compiler/exportAssignmentWithImportStatementPrivacyError.symbols
new file mode 100644
index 0000000000000..324d72049a1f8
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentWithImportStatementPrivacyError.symbols
@@ -0,0 +1,59 @@
+//// [tests/cases/compiler/exportAssignmentWithImportStatementPrivacyError.ts] ////
+
+=== exportAssignmentWithImportStatementPrivacyError.ts ===
+namespace m2 {
+>m2 : Symbol(m2, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 0, 0))
+
+ export interface connectModule {
+>connectModule : Symbol(connectModule, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 0, 14))
+
+ (res, req, next): void;
+>res : Symbol(res, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 2, 9))
+>req : Symbol(req, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 2, 13))
+>next : Symbol(next, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 2, 18))
+ }
+ export interface connectExport {
+>connectExport : Symbol(connectExport, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 3, 5))
+
+ use: (mod: connectModule) => connectExport;
+>use : Symbol(connectExport.use, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 4, 36))
+>mod : Symbol(mod, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 5, 14))
+>connectModule : Symbol(connectModule, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 0, 14))
+>connectExport : Symbol(connectExport, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 3, 5))
+
+ listen: (port: number) => void;
+>listen : Symbol(connectExport.listen, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 5, 51))
+>port : Symbol(port, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 6, 17))
+ }
+
+}
+
+namespace M {
+>M : Symbol(M, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 9, 1))
+
+ export var server: {
+>server : Symbol(server, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 12, 14))
+
+ (): m2.connectExport;
+>m2 : Symbol(m2, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 0, 0))
+>connectExport : Symbol(m2.connectExport, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 3, 5))
+
+ test1: m2.connectModule;
+>test1 : Symbol(test1, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 13, 29))
+>m2 : Symbol(m2, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 0, 0))
+>connectModule : Symbol(m2.connectModule, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 0, 14))
+
+ test2(): m2.connectModule;
+>test2 : Symbol(test2, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 14, 32))
+>m2 : Symbol(m2, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 0, 0))
+>connectModule : Symbol(m2.connectModule, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 0, 14))
+
+ };
+}
+import M22 = M;
+>M22 : Symbol(M22, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 17, 1))
+>M : Symbol(M, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 9, 1))
+
+export = M;
+>M : Symbol(M, Decl(exportAssignmentWithImportStatementPrivacyError.ts, 9, 1))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentWithImportStatementPrivacyError.types b/tsc/testdata/baselines/reference/compiler/exportAssignmentWithImportStatementPrivacyError.types
new file mode 100644
index 0000000000000..db44fae92af93
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentWithImportStatementPrivacyError.types
@@ -0,0 +1,48 @@
+//// [tests/cases/compiler/exportAssignmentWithImportStatementPrivacyError.ts] ////
+
+=== exportAssignmentWithImportStatementPrivacyError.ts ===
+namespace m2 {
+ export interface connectModule {
+ (res, req, next): void;
+>res : any
+>req : any
+>next : any
+ }
+ export interface connectExport {
+ use: (mod: connectModule) => connectExport;
+>use : (mod: connectModule) => connectExport
+>mod : connectModule
+
+ listen: (port: number) => void;
+>listen : (port: number) => void
+>port : number
+ }
+
+}
+
+namespace M {
+>M : typeof M
+
+ export var server: {
+>server : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; }
+
+ (): m2.connectExport;
+>m2 : any
+
+ test1: m2.connectModule;
+>test1 : m2.connectModule
+>m2 : any
+
+ test2(): m2.connectModule;
+>test2 : () => m2.connectModule
+>m2 : any
+
+ };
+}
+import M22 = M;
+>M22 : typeof M
+>M : typeof M
+
+export = M;
+>M : typeof M
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentWithPrivacyError.js b/tsc/testdata/baselines/reference/compiler/exportAssignmentWithPrivacyError.js
new file mode 100644
index 0000000000000..502d3113e69e5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentWithPrivacyError.js
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/exportAssignmentWithPrivacyError.ts] ////
+
+//// [exportAssignmentWithPrivacyError.ts]
+interface connectmodule {
+ (res, req, next): void;
+}
+interface connectexport {
+ use: (mod: connectmodule) => connectexport;
+ listen: (port: number) => void;
+}
+
+var server: {
+ (): connectexport;
+ test1: connectmodule;
+ test2(): connectmodule;
+};
+
+export = server;
+
+
+
+//// [exportAssignmentWithPrivacyError.js]
+"use strict";
+var server;
+module.exports = server;
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentWithPrivacyError.symbols b/tsc/testdata/baselines/reference/compiler/exportAssignmentWithPrivacyError.symbols
new file mode 100644
index 0000000000000..c744020f4b2bf
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentWithPrivacyError.symbols
@@ -0,0 +1,45 @@
+//// [tests/cases/compiler/exportAssignmentWithPrivacyError.ts] ////
+
+=== exportAssignmentWithPrivacyError.ts ===
+interface connectmodule {
+>connectmodule : Symbol(connectmodule, Decl(exportAssignmentWithPrivacyError.ts, 0, 0))
+
+ (res, req, next): void;
+>res : Symbol(res, Decl(exportAssignmentWithPrivacyError.ts, 1, 5))
+>req : Symbol(req, Decl(exportAssignmentWithPrivacyError.ts, 1, 9))
+>next : Symbol(next, Decl(exportAssignmentWithPrivacyError.ts, 1, 14))
+}
+interface connectexport {
+>connectexport : Symbol(connectexport, Decl(exportAssignmentWithPrivacyError.ts, 2, 1))
+
+ use: (mod: connectmodule) => connectexport;
+>use : Symbol(connectexport.use, Decl(exportAssignmentWithPrivacyError.ts, 3, 25))
+>mod : Symbol(mod, Decl(exportAssignmentWithPrivacyError.ts, 4, 10))
+>connectmodule : Symbol(connectmodule, Decl(exportAssignmentWithPrivacyError.ts, 0, 0))
+>connectexport : Symbol(connectexport, Decl(exportAssignmentWithPrivacyError.ts, 2, 1))
+
+ listen: (port: number) => void;
+>listen : Symbol(connectexport.listen, Decl(exportAssignmentWithPrivacyError.ts, 4, 47))
+>port : Symbol(port, Decl(exportAssignmentWithPrivacyError.ts, 5, 13))
+}
+
+var server: {
+>server : Symbol(server, Decl(exportAssignmentWithPrivacyError.ts, 8, 3))
+
+ (): connectexport;
+>connectexport : Symbol(connectexport, Decl(exportAssignmentWithPrivacyError.ts, 2, 1))
+
+ test1: connectmodule;
+>test1 : Symbol(test1, Decl(exportAssignmentWithPrivacyError.ts, 9, 22))
+>connectmodule : Symbol(connectmodule, Decl(exportAssignmentWithPrivacyError.ts, 0, 0))
+
+ test2(): connectmodule;
+>test2 : Symbol(test2, Decl(exportAssignmentWithPrivacyError.ts, 10, 25))
+>connectmodule : Symbol(connectmodule, Decl(exportAssignmentWithPrivacyError.ts, 0, 0))
+
+};
+
+export = server;
+>server : Symbol(server, Decl(exportAssignmentWithPrivacyError.ts, 8, 3))
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportAssignmentWithPrivacyError.types b/tsc/testdata/baselines/reference/compiler/exportAssignmentWithPrivacyError.types
new file mode 100644
index 0000000000000..6bf982d56e3c0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportAssignmentWithPrivacyError.types
@@ -0,0 +1,35 @@
+//// [tests/cases/compiler/exportAssignmentWithPrivacyError.ts] ////
+
+=== exportAssignmentWithPrivacyError.ts ===
+interface connectmodule {
+ (res, req, next): void;
+>res : any
+>req : any
+>next : any
+}
+interface connectexport {
+ use: (mod: connectmodule) => connectexport;
+>use : (mod: connectmodule) => connectexport
+>mod : connectmodule
+
+ listen: (port: number) => void;
+>listen : (port: number) => void
+>port : number
+}
+
+var server: {
+>server : { (): connectexport; test1: connectmodule; test2(): connectmodule; }
+
+ (): connectexport;
+ test1: connectmodule;
+>test1 : connectmodule
+
+ test2(): connectmodule;
+>test2 : () => connectmodule
+
+};
+
+export = server;
+>server : { (): connectexport; test1: connectmodule; test2(): connectmodule; }
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportEqualCallable.errors.txt b/tsc/testdata/baselines/reference/compiler/exportEqualCallable.errors.txt
new file mode 100644
index 0000000000000..51dd6e5ea964f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportEqualCallable.errors.txt
@@ -0,0 +1,19 @@
+exportEqualCallable_0.ts(4,10): error TS2454: Variable 'server' is used before being assigned.
+exportEqualCallable_1.ts(2,26): error TS2307: Cannot find module 'exportEqualCallable_0' or its corresponding type declarations.
+
+
+==== exportEqualCallable_1.ts (1 errors) ====
+ ///
+ import connect = require('exportEqualCallable_0');
+ ~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'exportEqualCallable_0' or its corresponding type declarations.
+ connect();
+
+==== exportEqualCallable_0.ts (1 errors) ====
+ var server: {
+ (): any;
+ };
+ export = server;
+ ~~~~~~
+!!! error TS2454: Variable 'server' is used before being assigned.
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportEqualCallable.js b/tsc/testdata/baselines/reference/compiler/exportEqualCallable.js
new file mode 100644
index 0000000000000..b8f3c164e1787
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportEqualCallable.js
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/exportEqualCallable.ts] ////
+
+//// [exportEqualCallable_0.ts]
+var server: {
+ (): any;
+};
+export = server;
+
+//// [exportEqualCallable_1.ts]
+///
+import connect = require('exportEqualCallable_0');
+connect();
+
+
+//// [exportEqualCallable_0.js]
+"use strict";
+var server;
+module.exports = server;
+//// [exportEqualCallable_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+///
+const connect = require("exportEqualCallable_0");
+connect();
diff --git a/tsc/testdata/baselines/reference/compiler/exportEqualCallable.symbols b/tsc/testdata/baselines/reference/compiler/exportEqualCallable.symbols
new file mode 100644
index 0000000000000..953d7444a551f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportEqualCallable.symbols
@@ -0,0 +1,19 @@
+//// [tests/cases/compiler/exportEqualCallable.ts] ////
+
+=== exportEqualCallable_1.ts ===
+///
+import connect = require('exportEqualCallable_0');
+>connect : Symbol(connect, Decl(exportEqualCallable_1.ts, 0, 0))
+
+connect();
+>connect : Symbol(connect, Decl(exportEqualCallable_1.ts, 0, 0))
+
+=== exportEqualCallable_0.ts ===
+var server: {
+>server : Symbol(server, Decl(exportEqualCallable_0.ts, 0, 3))
+
+ (): any;
+};
+export = server;
+>server : Symbol(server, Decl(exportEqualCallable_0.ts, 0, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportEqualCallable.types b/tsc/testdata/baselines/reference/compiler/exportEqualCallable.types
new file mode 100644
index 0000000000000..45ad366e6ac0c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportEqualCallable.types
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/exportEqualCallable.ts] ////
+
+=== exportEqualCallable_1.ts ===
+///
+import connect = require('exportEqualCallable_0');
+>connect : any
+
+connect();
+>connect() : any
+>connect : any
+
+=== exportEqualCallable_0.ts ===
+var server: {
+>server : () => any
+
+ (): any;
+};
+export = server;
+>server : () => any
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportEqualNamespaces.js b/tsc/testdata/baselines/reference/compiler/exportEqualNamespaces.js
new file mode 100644
index 0000000000000..18c8cf5668332
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportEqualNamespaces.js
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/exportEqualNamespaces.ts] ////
+
+//// [exportEqualNamespaces.ts]
+declare namespace server {
+ interface Server extends Object { }
+}
+
+interface server {
+ (): server.Server;
+ startTime: Date;
+}
+
+var x = 5;
+var server = new Date();
+export = server;
+
+
+//// [exportEqualNamespaces.js]
+"use strict";
+var x = 5;
+var server = new Date();
+module.exports = server;
diff --git a/tsc/testdata/baselines/reference/compiler/exportEqualNamespaces.symbols b/tsc/testdata/baselines/reference/compiler/exportEqualNamespaces.symbols
new file mode 100644
index 0000000000000..35ee66c7b6bab
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportEqualNamespaces.symbols
@@ -0,0 +1,33 @@
+//// [tests/cases/compiler/exportEqualNamespaces.ts] ////
+
+=== exportEqualNamespaces.ts ===
+declare namespace server {
+>server : Symbol(server, Decl(exportEqualNamespaces.ts, 0, 0), Decl(exportEqualNamespaces.ts, 2, 1), Decl(exportEqualNamespaces.ts, 10, 3))
+
+ interface Server extends Object { }
+>Server : Symbol(Server, Decl(exportEqualNamespaces.ts, 0, 26))
+>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
+}
+
+interface server {
+>server : Symbol(server, Decl(exportEqualNamespaces.ts, 0, 0), Decl(exportEqualNamespaces.ts, 2, 1), Decl(exportEqualNamespaces.ts, 10, 3))
+
+ (): server.Server;
+>server : Symbol(server, Decl(exportEqualNamespaces.ts, 0, 0), Decl(exportEqualNamespaces.ts, 2, 1), Decl(exportEqualNamespaces.ts, 10, 3))
+>Server : Symbol(server.Server, Decl(exportEqualNamespaces.ts, 0, 26))
+
+ startTime: Date;
+>startTime : Symbol(server.startTime, Decl(exportEqualNamespaces.ts, 5, 22))
+>Date : Symbol(Date, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.scripthost.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
+}
+
+var x = 5;
+>x : Symbol(x, Decl(exportEqualNamespaces.ts, 9, 3))
+
+var server = new Date();
+>server : Symbol(server, Decl(exportEqualNamespaces.ts, 0, 0), Decl(exportEqualNamespaces.ts, 2, 1), Decl(exportEqualNamespaces.ts, 10, 3))
+>Date : Symbol(Date, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.scripthost.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
+
+export = server;
+>server : Symbol(server, Decl(exportEqualNamespaces.ts, 0, 0), Decl(exportEqualNamespaces.ts, 2, 1), Decl(exportEqualNamespaces.ts, 10, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportEqualNamespaces.types b/tsc/testdata/baselines/reference/compiler/exportEqualNamespaces.types
new file mode 100644
index 0000000000000..e7724037a5528
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportEqualNamespaces.types
@@ -0,0 +1,27 @@
+//// [tests/cases/compiler/exportEqualNamespaces.ts] ////
+
+=== exportEqualNamespaces.ts ===
+declare namespace server {
+ interface Server extends Object { }
+}
+
+interface server {
+ (): server.Server;
+>server : any
+
+ startTime: Date;
+>startTime : Date
+}
+
+var x = 5;
+>x : number
+>5 : 5
+
+var server = new Date();
+>server : Date
+>new Date() : Date
+>Date : DateConstructor
+
+export = server;
+>server : server
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportImport.js b/tsc/testdata/baselines/reference/compiler/exportImport.js
new file mode 100644
index 0000000000000..98ce23521ab19
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImport.js
@@ -0,0 +1,48 @@
+//// [tests/cases/compiler/exportImport.ts] ////
+
+//// [w1.ts]
+export = Widget1
+class Widget1 { name = 'one'; }
+
+//// [exporter.ts]
+export import w = require('./w1');
+
+//// [consumer.ts]
+import e = require('./exporter');
+
+export function w(): e.w { // Should be OK
+ return new e.w();
+}
+
+//// [w1.js]
+"use strict";
+class Widget1 {
+ constructor() {
+ this.name = 'one';
+ }
+}
+module.exports = Widget1;
+//// [exporter.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.w = require("./w1");
+//// [consumer.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.w = w;
+const e = require("./exporter");
+function w() {
+ return new e.w();
+}
+
+
+//// [w1.d.ts]
+export = Widget1;
+declare class Widget1 {
+ name: string;
+}
+//// [exporter.d.ts]
+export import w = require('./w1');
+//// [consumer.d.ts]
+import e = require('./exporter');
+export declare function w(): e.w;
diff --git a/tsc/testdata/baselines/reference/compiler/exportImport.symbols b/tsc/testdata/baselines/reference/compiler/exportImport.symbols
new file mode 100644
index 0000000000000..df91436d721ee
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImport.symbols
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/exportImport.ts] ////
+
+=== consumer.ts ===
+import e = require('./exporter');
+>e : Symbol(e, Decl(consumer.ts, 0, 0))
+
+export function w(): e.w { // Should be OK
+>w : Symbol(w, Decl(consumer.ts, 0, 33))
+>e : Symbol(e, Decl(consumer.ts, 0, 0))
+>w : Symbol(e.w, Decl(exporter.ts, 0, 0))
+
+ return new e.w();
+>e.w : Symbol(e.w, Decl(exporter.ts, 0, 0))
+>e : Symbol(e, Decl(consumer.ts, 0, 0))
+>w : Symbol(e.w, Decl(exporter.ts, 0, 0))
+}
+=== w1.ts ===
+export = Widget1
+>Widget1 : Symbol(Widget1, Decl(w1.ts, 0, 16))
+
+class Widget1 { name = 'one'; }
+>Widget1 : Symbol(Widget1, Decl(w1.ts, 0, 16))
+>name : Symbol(Widget1.name, Decl(w1.ts, 1, 15))
+
+=== exporter.ts ===
+export import w = require('./w1');
+>w : Symbol(w, Decl(exporter.ts, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportImport.types b/tsc/testdata/baselines/reference/compiler/exportImport.types
new file mode 100644
index 0000000000000..b47c62f0da647
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImport.types
@@ -0,0 +1,29 @@
+//// [tests/cases/compiler/exportImport.ts] ////
+
+=== consumer.ts ===
+import e = require('./exporter');
+>e : typeof e
+
+export function w(): e.w { // Should be OK
+>w : () => e.w
+>e : any
+
+ return new e.w();
+>new e.w() : e.w
+>e.w : typeof e.w
+>e : typeof e
+>w : typeof e.w
+}
+=== w1.ts ===
+export = Widget1
+>Widget1 : Widget1
+
+class Widget1 { name = 'one'; }
+>Widget1 : Widget1
+>name : string
+>'one' : "one"
+
+=== exporter.ts ===
+export import w = require('./w1');
+>w : typeof w
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportImportCanSubstituteConstEnumForValue(target=es2015).js b/tsc/testdata/baselines/reference/compiler/exportImportCanSubstituteConstEnumForValue(target=es2015).js
new file mode 100644
index 0000000000000..6e9a48643c5cc
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImportCanSubstituteConstEnumForValue(target=es2015).js
@@ -0,0 +1,130 @@
+//// [tests/cases/compiler/exportImportCanSubstituteConstEnumForValue.ts] ////
+
+//// [exportImportCanSubstituteConstEnumForValue.ts]
+namespace MsPortalFx.ViewModels.Dialogs {
+
+ export const enum DialogResult {
+ Abort,
+ Cancel,
+ Ignore,
+ No,
+ Ok,
+ Retry,
+ Yes,
+ }
+
+ export interface DialogResultCallback {
+ (result: MsPortalFx.ViewModels.Dialogs.DialogResult): void;
+ }
+
+ export function someExportedFunction() {
+ }
+
+ export const enum MessageBoxButtons {
+ AbortRetryIgnore,
+ OK,
+ OKCancel,
+ RetryCancel,
+ YesNo,
+ YesNoCancel,
+ }
+}
+
+
+namespace MsPortalFx.ViewModels {
+
+ /**
+ * For some reason javascript code is emitted for this re-exported const enum.
+ */
+ export import ReExportedEnum = Dialogs.DialogResult;
+
+ /**
+ * Not exported to show difference. No javascript is emmitted (as expected)
+ */
+ import DialogButtons = Dialogs.MessageBoxButtons;
+
+ /**
+ * Re-exporting a function type to show difference. No javascript is emmitted (as expected)
+ */
+ export import Callback = Dialogs.DialogResultCallback;
+
+ export class SomeUsagesOfTheseConsts {
+ constructor() {
+ // these do get replaced by the const value
+ const value1 = ReExportedEnum.Cancel;
+ console.log(value1);
+ const value2 = DialogButtons.OKCancel;
+ console.log(value2);
+ }
+ }
+}
+
+
+//// [exportImportCanSubstituteConstEnumForValue.js]
+"use strict";
+var MsPortalFx;
+(function (MsPortalFx) {
+ var ViewModels;
+ (function (ViewModels) {
+ var Dialogs;
+ (function (Dialogs) {
+ function someExportedFunction() {
+ }
+ Dialogs.someExportedFunction = someExportedFunction;
+ })(Dialogs = ViewModels.Dialogs || (ViewModels.Dialogs = {}));
+ })(ViewModels = MsPortalFx.ViewModels || (MsPortalFx.ViewModels = {}));
+})(MsPortalFx || (MsPortalFx = {}));
+(function (MsPortalFx) {
+ var ViewModels;
+ (function (ViewModels) {
+ class SomeUsagesOfTheseConsts {
+ constructor() {
+ // these do get replaced by the const value
+ const value1 = 1 /* ReExportedEnum.Cancel */;
+ console.log(value1);
+ const value2 = 2 /* DialogButtons.OKCancel */;
+ console.log(value2);
+ }
+ }
+ ViewModels.SomeUsagesOfTheseConsts = SomeUsagesOfTheseConsts;
+ })(ViewModels = MsPortalFx.ViewModels || (MsPortalFx.ViewModels = {}));
+})(MsPortalFx || (MsPortalFx = {}));
+
+
+//// [exportImportCanSubstituteConstEnumForValue.d.ts]
+declare namespace MsPortalFx.ViewModels.Dialogs {
+ const enum DialogResult {
+ Abort = 0,
+ Cancel = 1,
+ Ignore = 2,
+ No = 3,
+ Ok = 4,
+ Retry = 5,
+ Yes = 6
+ }
+ interface DialogResultCallback {
+ (result: MsPortalFx.ViewModels.Dialogs.DialogResult): void;
+ }
+ function someExportedFunction(): void;
+ const enum MessageBoxButtons {
+ AbortRetryIgnore = 0,
+ OK = 1,
+ OKCancel = 2,
+ RetryCancel = 3,
+ YesNo = 4,
+ YesNoCancel = 5
+ }
+}
+declare namespace MsPortalFx.ViewModels {
+ /**
+ * For some reason javascript code is emitted for this re-exported const enum.
+ */
+ export import ReExportedEnum = Dialogs.DialogResult;
+ /**
+ * Re-exporting a function type to show difference. No javascript is emmitted (as expected)
+ */
+ export import Callback = Dialogs.DialogResultCallback;
+ class SomeUsagesOfTheseConsts {
+ constructor();
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/exportImportCanSubstituteConstEnumForValue(target=es2015).symbols b/tsc/testdata/baselines/reference/compiler/exportImportCanSubstituteConstEnumForValue(target=es2015).symbols
new file mode 100644
index 0000000000000..c94e113918142
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImportCanSubstituteConstEnumForValue(target=es2015).symbols
@@ -0,0 +1,132 @@
+//// [tests/cases/compiler/exportImportCanSubstituteConstEnumForValue.ts] ////
+
+=== exportImportCanSubstituteConstEnumForValue.ts ===
+namespace MsPortalFx.ViewModels.Dialogs {
+>MsPortalFx : Symbol(MsPortalFx, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 0), Decl(exportImportCanSubstituteConstEnumForValue.ts, 27, 1))
+>ViewModels : Symbol(ViewModels, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 21), Decl(exportImportCanSubstituteConstEnumForValue.ts, 30, 21))
+>Dialogs : Symbol(Dialogs, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 32))
+
+ export const enum DialogResult {
+>DialogResult : Symbol(DialogResult, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 41))
+
+ Abort,
+>Abort : Symbol(ReExportedEnum.Abort, Decl(exportImportCanSubstituteConstEnumForValue.ts, 2, 36))
+
+ Cancel,
+>Cancel : Symbol(ReExportedEnum.Cancel, Decl(exportImportCanSubstituteConstEnumForValue.ts, 3, 14))
+
+ Ignore,
+>Ignore : Symbol(ReExportedEnum.Ignore, Decl(exportImportCanSubstituteConstEnumForValue.ts, 4, 15))
+
+ No,
+>No : Symbol(ReExportedEnum.No, Decl(exportImportCanSubstituteConstEnumForValue.ts, 5, 15))
+
+ Ok,
+>Ok : Symbol(ReExportedEnum.Ok, Decl(exportImportCanSubstituteConstEnumForValue.ts, 6, 11))
+
+ Retry,
+>Retry : Symbol(ReExportedEnum.Retry, Decl(exportImportCanSubstituteConstEnumForValue.ts, 7, 11))
+
+ Yes,
+>Yes : Symbol(ReExportedEnum.Yes, Decl(exportImportCanSubstituteConstEnumForValue.ts, 8, 14))
+ }
+
+ export interface DialogResultCallback {
+>DialogResultCallback : Symbol(DialogResultCallback, Decl(exportImportCanSubstituteConstEnumForValue.ts, 10, 5))
+
+ (result: MsPortalFx.ViewModels.Dialogs.DialogResult): void;
+>result : Symbol(result, Decl(exportImportCanSubstituteConstEnumForValue.ts, 13, 9))
+>MsPortalFx : Symbol(MsPortalFx, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 0), Decl(exportImportCanSubstituteConstEnumForValue.ts, 27, 1))
+>ViewModels : Symbol(ViewModels, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 21), Decl(exportImportCanSubstituteConstEnumForValue.ts, 30, 21))
+>Dialogs : Symbol(Dialogs, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 32))
+>DialogResult : Symbol(DialogResult, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 41))
+ }
+
+ export function someExportedFunction() {
+>someExportedFunction : Symbol(someExportedFunction, Decl(exportImportCanSubstituteConstEnumForValue.ts, 14, 5))
+ }
+
+ export const enum MessageBoxButtons {
+>MessageBoxButtons : Symbol(MessageBoxButtons, Decl(exportImportCanSubstituteConstEnumForValue.ts, 17, 5))
+
+ AbortRetryIgnore,
+>AbortRetryIgnore : Symbol(MessageBoxButtons.AbortRetryIgnore, Decl(exportImportCanSubstituteConstEnumForValue.ts, 19, 41))
+
+ OK,
+>OK : Symbol(MessageBoxButtons.OK, Decl(exportImportCanSubstituteConstEnumForValue.ts, 20, 25))
+
+ OKCancel,
+>OKCancel : Symbol(MessageBoxButtons.OKCancel, Decl(exportImportCanSubstituteConstEnumForValue.ts, 21, 11))
+
+ RetryCancel,
+>RetryCancel : Symbol(MessageBoxButtons.RetryCancel, Decl(exportImportCanSubstituteConstEnumForValue.ts, 22, 17))
+
+ YesNo,
+>YesNo : Symbol(MessageBoxButtons.YesNo, Decl(exportImportCanSubstituteConstEnumForValue.ts, 23, 20))
+
+ YesNoCancel,
+>YesNoCancel : Symbol(MessageBoxButtons.YesNoCancel, Decl(exportImportCanSubstituteConstEnumForValue.ts, 24, 14))
+ }
+}
+
+
+namespace MsPortalFx.ViewModels {
+>MsPortalFx : Symbol(MsPortalFx, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 0), Decl(exportImportCanSubstituteConstEnumForValue.ts, 27, 1))
+>ViewModels : Symbol(ViewModels, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 21), Decl(exportImportCanSubstituteConstEnumForValue.ts, 30, 21))
+
+ /**
+ * For some reason javascript code is emitted for this re-exported const enum.
+ */
+ export import ReExportedEnum = Dialogs.DialogResult;
+>ReExportedEnum : Symbol(ReExportedEnum, Decl(exportImportCanSubstituteConstEnumForValue.ts, 30, 33))
+>Dialogs : Symbol(Dialogs, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 32))
+>DialogResult : Symbol(ReExportedEnum, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 41))
+
+ /**
+ * Not exported to show difference. No javascript is emmitted (as expected)
+ */
+ import DialogButtons = Dialogs.MessageBoxButtons;
+>DialogButtons : Symbol(DialogButtons, Decl(exportImportCanSubstituteConstEnumForValue.ts, 35, 56))
+>Dialogs : Symbol(Dialogs, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 32))
+>MessageBoxButtons : Symbol(DialogButtons, Decl(exportImportCanSubstituteConstEnumForValue.ts, 17, 5))
+
+ /**
+ * Re-exporting a function type to show difference. No javascript is emmitted (as expected)
+ */
+ export import Callback = Dialogs.DialogResultCallback;
+>Callback : Symbol(Callback, Decl(exportImportCanSubstituteConstEnumForValue.ts, 40, 53))
+>Dialogs : Symbol(Dialogs, Decl(exportImportCanSubstituteConstEnumForValue.ts, 0, 32))
+>DialogResultCallback : Symbol(Callback, Decl(exportImportCanSubstituteConstEnumForValue.ts, 10, 5))
+
+ export class SomeUsagesOfTheseConsts {
+>SomeUsagesOfTheseConsts : Symbol(SomeUsagesOfTheseConsts, Decl(exportImportCanSubstituteConstEnumForValue.ts, 45, 58))
+
+ constructor() {
+ // these do get replaced by the const value
+ const value1 = ReExportedEnum.Cancel;
+>value1 : Symbol(value1, Decl(exportImportCanSubstituteConstEnumForValue.ts, 50, 17))
+>ReExportedEnum.Cancel : Symbol(ReExportedEnum.Cancel, Decl(exportImportCanSubstituteConstEnumForValue.ts, 3, 14))
+>ReExportedEnum : Symbol(ReExportedEnum, Decl(exportImportCanSubstituteConstEnumForValue.ts, 30, 33))
+>Cancel : Symbol(ReExportedEnum.Cancel, Decl(exportImportCanSubstituteConstEnumForValue.ts, 3, 14))
+
+ console.log(value1);
+>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
+>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
+>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
+>value1 : Symbol(value1, Decl(exportImportCanSubstituteConstEnumForValue.ts, 50, 17))
+
+ const value2 = DialogButtons.OKCancel;
+>value2 : Symbol(value2, Decl(exportImportCanSubstituteConstEnumForValue.ts, 52, 17))
+>DialogButtons.OKCancel : Symbol(DialogButtons.OKCancel, Decl(exportImportCanSubstituteConstEnumForValue.ts, 21, 11))
+>DialogButtons : Symbol(DialogButtons, Decl(exportImportCanSubstituteConstEnumForValue.ts, 35, 56))
+>OKCancel : Symbol(DialogButtons.OKCancel, Decl(exportImportCanSubstituteConstEnumForValue.ts, 21, 11))
+
+ console.log(value2);
+>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
+>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
+>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
+>value2 : Symbol(value2, Decl(exportImportCanSubstituteConstEnumForValue.ts, 52, 17))
+ }
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportImportCanSubstituteConstEnumForValue(target=es2015).types b/tsc/testdata/baselines/reference/compiler/exportImportCanSubstituteConstEnumForValue(target=es2015).types
new file mode 100644
index 0000000000000..7b301ee3c58a5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImportCanSubstituteConstEnumForValue(target=es2015).types
@@ -0,0 +1,131 @@
+//// [tests/cases/compiler/exportImportCanSubstituteConstEnumForValue.ts] ////
+
+=== exportImportCanSubstituteConstEnumForValue.ts ===
+namespace MsPortalFx.ViewModels.Dialogs {
+>MsPortalFx : typeof MsPortalFx
+>ViewModels : typeof ViewModels
+>Dialogs : typeof Dialogs
+
+ export const enum DialogResult {
+>DialogResult : DialogResult
+
+ Abort,
+>Abort : DialogResult.Abort
+
+ Cancel,
+>Cancel : DialogResult.Cancel
+
+ Ignore,
+>Ignore : DialogResult.Ignore
+
+ No,
+>No : DialogResult.No
+
+ Ok,
+>Ok : DialogResult.Ok
+
+ Retry,
+>Retry : DialogResult.Retry
+
+ Yes,
+>Yes : DialogResult.Yes
+ }
+
+ export interface DialogResultCallback {
+ (result: MsPortalFx.ViewModels.Dialogs.DialogResult): void;
+>result : DialogResult
+>MsPortalFx : any
+>ViewModels : any
+>Dialogs : any
+ }
+
+ export function someExportedFunction() {
+>someExportedFunction : () => void
+ }
+
+ export const enum MessageBoxButtons {
+>MessageBoxButtons : MessageBoxButtons
+
+ AbortRetryIgnore,
+>AbortRetryIgnore : MessageBoxButtons.AbortRetryIgnore
+
+ OK,
+>OK : MessageBoxButtons.OK
+
+ OKCancel,
+>OKCancel : MessageBoxButtons.OKCancel
+
+ RetryCancel,
+>RetryCancel : MessageBoxButtons.RetryCancel
+
+ YesNo,
+>YesNo : MessageBoxButtons.YesNo
+
+ YesNoCancel,
+>YesNoCancel : MessageBoxButtons.YesNoCancel
+ }
+}
+
+
+namespace MsPortalFx.ViewModels {
+>MsPortalFx : typeof MsPortalFx
+>ViewModels : typeof ViewModels
+
+ /**
+ * For some reason javascript code is emitted for this re-exported const enum.
+ */
+ export import ReExportedEnum = Dialogs.DialogResult;
+>ReExportedEnum : typeof ReExportedEnum
+>Dialogs : typeof Dialogs
+>DialogResult : ReExportedEnum
+
+ /**
+ * Not exported to show difference. No javascript is emmitted (as expected)
+ */
+ import DialogButtons = Dialogs.MessageBoxButtons;
+>DialogButtons : typeof DialogButtons
+>Dialogs : typeof Dialogs
+>MessageBoxButtons : DialogButtons
+
+ /**
+ * Re-exporting a function type to show difference. No javascript is emmitted (as expected)
+ */
+ export import Callback = Dialogs.DialogResultCallback;
+>Callback : any
+>Dialogs : typeof Dialogs
+>DialogResultCallback : Callback
+
+ export class SomeUsagesOfTheseConsts {
+>SomeUsagesOfTheseConsts : SomeUsagesOfTheseConsts
+
+ constructor() {
+ // these do get replaced by the const value
+ const value1 = ReExportedEnum.Cancel;
+>value1 : ReExportedEnum.Cancel
+>ReExportedEnum.Cancel : ReExportedEnum.Cancel
+>ReExportedEnum : typeof ReExportedEnum
+>Cancel : ReExportedEnum.Cancel
+
+ console.log(value1);
+>console.log(value1) : void
+>console.log : (...data: any[]) => void
+>console : Console
+>log : (...data: any[]) => void
+>value1 : ReExportedEnum.Cancel
+
+ const value2 = DialogButtons.OKCancel;
+>value2 : DialogButtons.OKCancel
+>DialogButtons.OKCancel : DialogButtons.OKCancel
+>DialogButtons : typeof DialogButtons
+>OKCancel : DialogButtons.OKCancel
+
+ console.log(value2);
+>console.log(value2) : void
+>console.log : (...data: any[]) => void
+>console : Console
+>log : (...data: any[]) => void
+>value2 : DialogButtons.OKCancel
+ }
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportImportMultipleFiles.errors.txt b/tsc/testdata/baselines/reference/compiler/exportImportMultipleFiles.errors.txt
new file mode 100644
index 0000000000000..eafba97d38f5f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImportMultipleFiles.errors.txt
@@ -0,0 +1,16 @@
+exportImportMultipleFiles_library.ts(1,30): error TS2307: Cannot find module 'exportImportMultipleFiles_math' or its corresponding type declarations.
+
+
+==== exportImportMultipleFiles_userCode.ts (0 errors) ====
+ import lib = require('./exportImportMultipleFiles_library');
+ lib.math.add(3, 4); // Shouldnt be error
+
+==== exportImportMultipleFiles_math.ts (0 errors) ====
+ export function add(a, b) { return a + b; }
+
+==== exportImportMultipleFiles_library.ts (1 errors) ====
+ export import math = require("exportImportMultipleFiles_math");
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'exportImportMultipleFiles_math' or its corresponding type declarations.
+ math.add(3, 4); // OK
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportImportMultipleFiles.js b/tsc/testdata/baselines/reference/compiler/exportImportMultipleFiles.js
new file mode 100644
index 0000000000000..0a9c0e29c1016
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImportMultipleFiles.js
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/exportImportMultipleFiles.ts] ////
+
+//// [exportImportMultipleFiles_math.ts]
+export function add(a, b) { return a + b; }
+
+//// [exportImportMultipleFiles_library.ts]
+export import math = require("exportImportMultipleFiles_math");
+math.add(3, 4); // OK
+
+//// [exportImportMultipleFiles_userCode.ts]
+import lib = require('./exportImportMultipleFiles_library');
+lib.math.add(3, 4); // Shouldnt be error
+
+
+//// [exportImportMultipleFiles_library.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.math = require("exportImportMultipleFiles_math");
+exports.math.add(3, 4); // OK
+//// [exportImportMultipleFiles_userCode.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const lib = require("./exportImportMultipleFiles_library");
+lib.math.add(3, 4); // Shouldnt be error
diff --git a/tsc/testdata/baselines/reference/compiler/exportImportMultipleFiles.symbols b/tsc/testdata/baselines/reference/compiler/exportImportMultipleFiles.symbols
new file mode 100644
index 0000000000000..31eedaee862bf
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImportMultipleFiles.symbols
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/exportImportMultipleFiles.ts] ////
+
+=== exportImportMultipleFiles_userCode.ts ===
+import lib = require('./exportImportMultipleFiles_library');
+>lib : Symbol(lib, Decl(exportImportMultipleFiles_userCode.ts, 0, 0))
+
+lib.math.add(3, 4); // Shouldnt be error
+>lib.math : Symbol(lib.math, Decl(exportImportMultipleFiles_library.ts, 0, 0))
+>lib : Symbol(lib, Decl(exportImportMultipleFiles_userCode.ts, 0, 0))
+>math : Symbol(lib.math, Decl(exportImportMultipleFiles_library.ts, 0, 0))
+
+=== exportImportMultipleFiles_library.ts ===
+export import math = require("exportImportMultipleFiles_math");
+>math : Symbol(math, Decl(exportImportMultipleFiles_library.ts, 0, 0))
+
+math.add(3, 4); // OK
+>math : Symbol(math, Decl(exportImportMultipleFiles_library.ts, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportImportMultipleFiles.types b/tsc/testdata/baselines/reference/compiler/exportImportMultipleFiles.types
new file mode 100644
index 0000000000000..2e0b43e5b8a98
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImportMultipleFiles.types
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/exportImportMultipleFiles.ts] ////
+
+=== exportImportMultipleFiles_userCode.ts ===
+import lib = require('./exportImportMultipleFiles_library');
+>lib : typeof lib
+
+lib.math.add(3, 4); // Shouldnt be error
+>lib.math.add(3, 4) : any
+>lib.math.add : any
+>lib.math : any
+>lib : typeof lib
+>math : any
+>add : any
+>3 : 3
+>4 : 4
+
+=== exportImportMultipleFiles_library.ts ===
+export import math = require("exportImportMultipleFiles_math");
+>math : any
+
+math.add(3, 4); // OK
+>math.add(3, 4) : any
+>math.add : any
+>math : any
+>add : any
+>3 : 3
+>4 : 4
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportImportNonInstantiatedModule2.js b/tsc/testdata/baselines/reference/compiler/exportImportNonInstantiatedModule2.js
new file mode 100644
index 0000000000000..d0de496c6da94
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImportNonInstantiatedModule2.js
@@ -0,0 +1,41 @@
+//// [tests/cases/compiler/exportImportNonInstantiatedModule2.ts] ////
+
+//// [w1.ts]
+export = Widget1
+interface Widget1 { name: string; }
+
+//// [exporter.ts]
+export import w = require('./w1');
+
+//// [consumer.ts]
+import e = require('./exporter');
+
+export function w(): e.w { // Should be OK
+ return {name: 'value' };
+}
+
+//// [w1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [exporter.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [consumer.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.w = w;
+function w() {
+ return { name: 'value' };
+}
+
+
+//// [w1.d.ts]
+export = Widget1;
+interface Widget1 {
+ name: string;
+}
+//// [exporter.d.ts]
+export import w = require('./w1');
+//// [consumer.d.ts]
+import e = require('./exporter');
+export declare function w(): e.w;
diff --git a/tsc/testdata/baselines/reference/compiler/exportImportNonInstantiatedModule2.symbols b/tsc/testdata/baselines/reference/compiler/exportImportNonInstantiatedModule2.symbols
new file mode 100644
index 0000000000000..a441b529cd37b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImportNonInstantiatedModule2.symbols
@@ -0,0 +1,26 @@
+//// [tests/cases/compiler/exportImportNonInstantiatedModule2.ts] ////
+
+=== consumer.ts ===
+import e = require('./exporter');
+>e : Symbol(e, Decl(consumer.ts, 0, 0))
+
+export function w(): e.w { // Should be OK
+>w : Symbol(w, Decl(consumer.ts, 0, 33))
+>e : Symbol(e, Decl(consumer.ts, 0, 0))
+>w : Symbol(e.w, Decl(exporter.ts, 0, 0))
+
+ return {name: 'value' };
+>name : Symbol(name, Decl(consumer.ts, 3, 12))
+}
+=== w1.ts ===
+export = Widget1
+>Widget1 : Symbol(Widget1, Decl(w1.ts, 0, 16))
+
+interface Widget1 { name: string; }
+>Widget1 : Symbol(Widget1, Decl(w1.ts, 0, 16))
+>name : Symbol(Widget1.name, Decl(w1.ts, 1, 19))
+
+=== exporter.ts ===
+export import w = require('./w1');
+>w : Symbol(w, Decl(exporter.ts, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportImportNonInstantiatedModule2.types b/tsc/testdata/baselines/reference/compiler/exportImportNonInstantiatedModule2.types
new file mode 100644
index 0000000000000..9ae93058fde9b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportImportNonInstantiatedModule2.types
@@ -0,0 +1,26 @@
+//// [tests/cases/compiler/exportImportNonInstantiatedModule2.ts] ////
+
+=== consumer.ts ===
+import e = require('./exporter');
+>e : typeof e
+
+export function w(): e.w { // Should be OK
+>w : () => e.w
+>e : any
+
+ return {name: 'value' };
+>{name: 'value' } : { name: string; }
+>name : string
+>'value' : "value"
+}
+=== w1.ts ===
+export = Widget1
+>Widget1 : Widget1
+
+interface Widget1 { name: string; }
+>name : string
+
+=== exporter.ts ===
+export import w = require('./w1');
+>w : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues.errors.txt b/tsc/testdata/baselines/reference/compiler/exportStarForValues.errors.txt
new file mode 100644
index 0000000000000..9c8a32f785829
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues.errors.txt
@@ -0,0 +1,11 @@
+file2.ts(1,15): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+
+
+==== file1.ts (0 errors) ====
+ export interface Foo { x }
+
+==== file2.ts (1 errors) ====
+ export * from "file1"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ var x;
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues.js b/tsc/testdata/baselines/reference/compiler/exportStarForValues.js
new file mode 100644
index 0000000000000..9c468454182bb
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues.js
@@ -0,0 +1,31 @@
+//// [tests/cases/compiler/exportStarForValues.ts] ////
+
+//// [file1.ts]
+export interface Foo { x }
+
+//// [file2.ts]
+export * from "file1"
+var x;
+
+//// [file1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [file2.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("file1"), exports);
+var x;
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues.symbols b/tsc/testdata/baselines/reference/compiler/exportStarForValues.symbols
new file mode 100644
index 0000000000000..0327a066b8c09
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues.symbols
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/exportStarForValues.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
+>x : Symbol(Foo.x, Decl(file1.ts, 0, 22))
+
+=== file2.ts ===
+export * from "file1"
+var x;
+>x : Symbol(x, Decl(file2.ts, 1, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues.types b/tsc/testdata/baselines/reference/compiler/exportStarForValues.types
new file mode 100644
index 0000000000000..aa9264c0320ef
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues.types
@@ -0,0 +1,11 @@
+//// [tests/cases/compiler/exportStarForValues.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>x : any
+
+=== file2.ts ===
+export * from "file1"
+var x;
+>x : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues2.errors.txt b/tsc/testdata/baselines/reference/compiler/exportStarForValues2.errors.txt
new file mode 100644
index 0000000000000..5636a44b000f5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues2.errors.txt
@@ -0,0 +1,18 @@
+file2.ts(1,15): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+file3.ts(1,15): error TS2307: Cannot find module 'file2' or its corresponding type declarations.
+
+
+==== file1.ts (0 errors) ====
+ export interface Foo { x }
+
+==== file2.ts (1 errors) ====
+ export * from "file1"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ var x = 1;
+
+==== file3.ts (1 errors) ====
+ export * from "file2"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file2' or its corresponding type declarations.
+ var x = 1;
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues2.js b/tsc/testdata/baselines/reference/compiler/exportStarForValues2.js
new file mode 100644
index 0000000000000..79bde6f7db993
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues2.js
@@ -0,0 +1,54 @@
+//// [tests/cases/compiler/exportStarForValues2.ts] ////
+
+//// [file1.ts]
+export interface Foo { x }
+
+//// [file2.ts]
+export * from "file1"
+var x = 1;
+
+//// [file3.ts]
+export * from "file2"
+var x = 1;
+
+//// [file1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [file2.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("file1"), exports);
+var x = 1;
+//// [file3.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("file2"), exports);
+var x = 1;
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues2.symbols b/tsc/testdata/baselines/reference/compiler/exportStarForValues2.symbols
new file mode 100644
index 0000000000000..4f0d0436275ea
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues2.symbols
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/exportStarForValues2.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
+>x : Symbol(Foo.x, Decl(file1.ts, 0, 22))
+
+=== file2.ts ===
+export * from "file1"
+var x = 1;
+>x : Symbol(x, Decl(file2.ts, 1, 3))
+
+=== file3.ts ===
+export * from "file2"
+var x = 1;
+>x : Symbol(x, Decl(file3.ts, 1, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues2.types b/tsc/testdata/baselines/reference/compiler/exportStarForValues2.types
new file mode 100644
index 0000000000000..196166581b39c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues2.types
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/exportStarForValues2.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>x : any
+
+=== file2.ts ===
+export * from "file1"
+var x = 1;
+>x : number
+>1 : 1
+
+=== file3.ts ===
+export * from "file2"
+var x = 1;
+>x : number
+>1 : 1
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues3.errors.txt b/tsc/testdata/baselines/reference/compiler/exportStarForValues3.errors.txt
new file mode 100644
index 0000000000000..a98b2e95ea373
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues3.errors.txt
@@ -0,0 +1,39 @@
+file2.ts(2,15): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+file3.ts(2,15): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+file4.ts(2,15): error TS2307: Cannot find module 'file2' or its corresponding type declarations.
+file4.ts(3,15): error TS2307: Cannot find module 'file3' or its corresponding type declarations.
+file5.ts(1,15): error TS2307: Cannot find module 'file4' or its corresponding type declarations.
+
+
+==== file1.ts (0 errors) ====
+ export interface Foo { x }
+
+==== file2.ts (1 errors) ====
+ export interface A { x }
+ export * from "file1"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ var x = 1;
+
+==== file3.ts (1 errors) ====
+ export interface B { x }
+ export * from "file1"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ var x = 1;
+
+==== file4.ts (2 errors) ====
+ export interface C { x }
+ export * from "file2"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file2' or its corresponding type declarations.
+ export * from "file3"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file3' or its corresponding type declarations.
+ var x = 1;
+
+==== file5.ts (1 errors) ====
+ export * from "file4"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file4' or its corresponding type declarations.
+ var x = 1;
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues3.js b/tsc/testdata/baselines/reference/compiler/exportStarForValues3.js
new file mode 100644
index 0000000000000..109cb5e768771
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues3.js
@@ -0,0 +1,105 @@
+//// [tests/cases/compiler/exportStarForValues3.ts] ////
+
+//// [file1.ts]
+export interface Foo { x }
+
+//// [file2.ts]
+export interface A { x }
+export * from "file1"
+var x = 1;
+
+//// [file3.ts]
+export interface B { x }
+export * from "file1"
+var x = 1;
+
+//// [file4.ts]
+export interface C { x }
+export * from "file2"
+export * from "file3"
+var x = 1;
+
+//// [file5.ts]
+export * from "file4"
+var x = 1;
+
+//// [file1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [file2.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("file1"), exports);
+var x = 1;
+//// [file3.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("file1"), exports);
+var x = 1;
+//// [file4.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("file2"), exports);
+__exportStar(require("file3"), exports);
+var x = 1;
+//// [file5.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("file4"), exports);
+var x = 1;
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues3.symbols b/tsc/testdata/baselines/reference/compiler/exportStarForValues3.symbols
new file mode 100644
index 0000000000000..5bad1078155f4
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues3.symbols
@@ -0,0 +1,40 @@
+//// [tests/cases/compiler/exportStarForValues3.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
+>x : Symbol(Foo.x, Decl(file1.ts, 0, 22))
+
+=== file2.ts ===
+export interface A { x }
+>A : Symbol(A, Decl(file2.ts, 0, 0))
+>x : Symbol(A.x, Decl(file2.ts, 0, 20))
+
+export * from "file1"
+var x = 1;
+>x : Symbol(x, Decl(file2.ts, 2, 3))
+
+=== file3.ts ===
+export interface B { x }
+>B : Symbol(B, Decl(file3.ts, 0, 0))
+>x : Symbol(B.x, Decl(file3.ts, 0, 20))
+
+export * from "file1"
+var x = 1;
+>x : Symbol(x, Decl(file3.ts, 2, 3))
+
+=== file4.ts ===
+export interface C { x }
+>C : Symbol(C, Decl(file4.ts, 0, 0))
+>x : Symbol(C.x, Decl(file4.ts, 0, 20))
+
+export * from "file2"
+export * from "file3"
+var x = 1;
+>x : Symbol(x, Decl(file4.ts, 3, 3))
+
+=== file5.ts ===
+export * from "file4"
+var x = 1;
+>x : Symbol(x, Decl(file5.ts, 1, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues3.types b/tsc/testdata/baselines/reference/compiler/exportStarForValues3.types
new file mode 100644
index 0000000000000..7eb9e419a7e8e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues3.types
@@ -0,0 +1,40 @@
+//// [tests/cases/compiler/exportStarForValues3.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>x : any
+
+=== file2.ts ===
+export interface A { x }
+>x : any
+
+export * from "file1"
+var x = 1;
+>x : number
+>1 : 1
+
+=== file3.ts ===
+export interface B { x }
+>x : any
+
+export * from "file1"
+var x = 1;
+>x : number
+>1 : 1
+
+=== file4.ts ===
+export interface C { x }
+>x : any
+
+export * from "file2"
+export * from "file3"
+var x = 1;
+>x : number
+>1 : 1
+
+=== file5.ts ===
+export * from "file4"
+var x = 1;
+>x : number
+>1 : 1
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues4.errors.txt b/tsc/testdata/baselines/reference/compiler/exportStarForValues4.errors.txt
new file mode 100644
index 0000000000000..fa4c097c47b7a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues4.errors.txt
@@ -0,0 +1,25 @@
+file2.ts(2,15): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+file2.ts(3,15): error TS2307: Cannot find module 'file3' or its corresponding type declarations.
+file3.ts(2,15): error TS2307: Cannot find module 'file2' or its corresponding type declarations.
+
+
+==== file1.ts (0 errors) ====
+ export interface Foo { x }
+
+==== file2.ts (2 errors) ====
+ export interface A { x }
+ export * from "file1"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ export * from "file3"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file3' or its corresponding type declarations.
+ var x = 1;
+
+==== file3.ts (1 errors) ====
+ export interface B { x }
+ export * from "file2"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file2' or its corresponding type declarations.
+ var x = 1;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues4.js b/tsc/testdata/baselines/reference/compiler/exportStarForValues4.js
new file mode 100644
index 0000000000000..fe10b7c4151ba
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues4.js
@@ -0,0 +1,59 @@
+//// [tests/cases/compiler/exportStarForValues4.ts] ////
+
+//// [file1.ts]
+export interface Foo { x }
+
+//// [file2.ts]
+export interface A { x }
+export * from "file1"
+export * from "file3"
+var x = 1;
+
+//// [file3.ts]
+export interface B { x }
+export * from "file2"
+var x = 1;
+
+
+//// [file1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [file2.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("file1"), exports);
+__exportStar(require("file3"), exports);
+var x = 1;
+//// [file3.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("file2"), exports);
+var x = 1;
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues4.symbols b/tsc/testdata/baselines/reference/compiler/exportStarForValues4.symbols
new file mode 100644
index 0000000000000..6ea3823bdb0bb
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues4.symbols
@@ -0,0 +1,26 @@
+//// [tests/cases/compiler/exportStarForValues4.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
+>x : Symbol(Foo.x, Decl(file1.ts, 0, 22))
+
+=== file2.ts ===
+export interface A { x }
+>A : Symbol(A, Decl(file2.ts, 0, 0))
+>x : Symbol(A.x, Decl(file2.ts, 0, 20))
+
+export * from "file1"
+export * from "file3"
+var x = 1;
+>x : Symbol(x, Decl(file2.ts, 3, 3))
+
+=== file3.ts ===
+export interface B { x }
+>B : Symbol(B, Decl(file3.ts, 0, 0))
+>x : Symbol(B.x, Decl(file3.ts, 0, 20))
+
+export * from "file2"
+var x = 1;
+>x : Symbol(x, Decl(file3.ts, 2, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues4.types b/tsc/testdata/baselines/reference/compiler/exportStarForValues4.types
new file mode 100644
index 0000000000000..2571c2c5d8587
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues4.types
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/exportStarForValues4.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>x : any
+
+=== file2.ts ===
+export interface A { x }
+>x : any
+
+export * from "file1"
+export * from "file3"
+var x = 1;
+>x : number
+>1 : 1
+
+=== file3.ts ===
+export interface B { x }
+>x : any
+
+export * from "file2"
+var x = 1;
+>x : number
+>1 : 1
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues5.errors.txt b/tsc/testdata/baselines/reference/compiler/exportStarForValues5.errors.txt
new file mode 100644
index 0000000000000..5904c2977943f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues5.errors.txt
@@ -0,0 +1,11 @@
+file2.ts(1,15): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+
+
+==== file1.ts (0 errors) ====
+ export interface Foo { x }
+
+==== file2.ts (1 errors) ====
+ export * from "file1"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ export var x;
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues5.js b/tsc/testdata/baselines/reference/compiler/exportStarForValues5.js
new file mode 100644
index 0000000000000..32be7c4a92c11
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues5.js
@@ -0,0 +1,31 @@
+//// [tests/cases/compiler/exportStarForValues5.ts] ////
+
+//// [file1.ts]
+export interface Foo { x }
+
+//// [file2.ts]
+export * from "file1"
+export var x;
+
+//// [file1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [file2.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+__exportStar(require("file1"), exports);
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues5.symbols b/tsc/testdata/baselines/reference/compiler/exportStarForValues5.symbols
new file mode 100644
index 0000000000000..b168b701e53d9
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues5.symbols
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/exportStarForValues5.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
+>x : Symbol(Foo.x, Decl(file1.ts, 0, 22))
+
+=== file2.ts ===
+export * from "file1"
+export var x;
+>x : Symbol(x, Decl(file2.ts, 1, 10))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues5.types b/tsc/testdata/baselines/reference/compiler/exportStarForValues5.types
new file mode 100644
index 0000000000000..bbb495b7d300c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues5.types
@@ -0,0 +1,11 @@
+//// [tests/cases/compiler/exportStarForValues5.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>x : any
+
+=== file2.ts ===
+export * from "file1"
+export var x;
+>x : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues7.errors.txt b/tsc/testdata/baselines/reference/compiler/exportStarForValues7.errors.txt
new file mode 100644
index 0000000000000..931c6174b11a6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues7.errors.txt
@@ -0,0 +1,18 @@
+file2.ts(1,15): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+file3.ts(1,15): error TS2307: Cannot find module 'file2' or its corresponding type declarations.
+
+
+==== file1.ts (0 errors) ====
+ export interface Foo { x }
+
+==== file2.ts (1 errors) ====
+ export * from "file1"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ export var x = 1;
+
+==== file3.ts (1 errors) ====
+ export * from "file2"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file2' or its corresponding type declarations.
+ export var x = 1;
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues7.js b/tsc/testdata/baselines/reference/compiler/exportStarForValues7.js
new file mode 100644
index 0000000000000..be769e8be0b74
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues7.js
@@ -0,0 +1,56 @@
+//// [tests/cases/compiler/exportStarForValues7.ts] ////
+
+//// [file1.ts]
+export interface Foo { x }
+
+//// [file2.ts]
+export * from "file1"
+export var x = 1;
+
+//// [file3.ts]
+export * from "file2"
+export var x = 1;
+
+//// [file1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [file2.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+__exportStar(require("file1"), exports);
+exports.x = 1;
+//// [file3.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+__exportStar(require("file2"), exports);
+exports.x = 1;
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues7.symbols b/tsc/testdata/baselines/reference/compiler/exportStarForValues7.symbols
new file mode 100644
index 0000000000000..204085c5f1e58
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues7.symbols
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/exportStarForValues7.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
+>x : Symbol(Foo.x, Decl(file1.ts, 0, 22))
+
+=== file2.ts ===
+export * from "file1"
+export var x = 1;
+>x : Symbol(x, Decl(file2.ts, 1, 10))
+
+=== file3.ts ===
+export * from "file2"
+export var x = 1;
+>x : Symbol(x, Decl(file3.ts, 1, 10))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues7.types b/tsc/testdata/baselines/reference/compiler/exportStarForValues7.types
new file mode 100644
index 0000000000000..3029250c3942d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues7.types
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/exportStarForValues7.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>x : any
+
+=== file2.ts ===
+export * from "file1"
+export var x = 1;
+>x : number
+>1 : 1
+
+=== file3.ts ===
+export * from "file2"
+export var x = 1;
+>x : number
+>1 : 1
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues8.errors.txt b/tsc/testdata/baselines/reference/compiler/exportStarForValues8.errors.txt
new file mode 100644
index 0000000000000..e4f893e4fc475
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues8.errors.txt
@@ -0,0 +1,39 @@
+file2.ts(2,15): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+file3.ts(2,15): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+file4.ts(2,15): error TS2307: Cannot find module 'file2' or its corresponding type declarations.
+file4.ts(3,15): error TS2307: Cannot find module 'file3' or its corresponding type declarations.
+file5.ts(1,15): error TS2307: Cannot find module 'file4' or its corresponding type declarations.
+
+
+==== file1.ts (0 errors) ====
+ export interface Foo { x }
+
+==== file2.ts (1 errors) ====
+ export interface A { x }
+ export * from "file1"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ export var x = 1;
+
+==== file3.ts (1 errors) ====
+ export interface B { x }
+ export * from "file1"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ export var x = 1;
+
+==== file4.ts (2 errors) ====
+ export interface C { x }
+ export * from "file2"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file2' or its corresponding type declarations.
+ export * from "file3"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file3' or its corresponding type declarations.
+ export var x = 1;
+
+==== file5.ts (1 errors) ====
+ export * from "file4"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file4' or its corresponding type declarations.
+ export var x = 1;
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues8.js b/tsc/testdata/baselines/reference/compiler/exportStarForValues8.js
new file mode 100644
index 0000000000000..f1dfd136c17b6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues8.js
@@ -0,0 +1,109 @@
+//// [tests/cases/compiler/exportStarForValues8.ts] ////
+
+//// [file1.ts]
+export interface Foo { x }
+
+//// [file2.ts]
+export interface A { x }
+export * from "file1"
+export var x = 1;
+
+//// [file3.ts]
+export interface B { x }
+export * from "file1"
+export var x = 1;
+
+//// [file4.ts]
+export interface C { x }
+export * from "file2"
+export * from "file3"
+export var x = 1;
+
+//// [file5.ts]
+export * from "file4"
+export var x = 1;
+
+//// [file1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [file2.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+__exportStar(require("file1"), exports);
+exports.x = 1;
+//// [file3.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+__exportStar(require("file1"), exports);
+exports.x = 1;
+//// [file4.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+__exportStar(require("file2"), exports);
+__exportStar(require("file3"), exports);
+exports.x = 1;
+//// [file5.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+__exportStar(require("file4"), exports);
+exports.x = 1;
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues8.symbols b/tsc/testdata/baselines/reference/compiler/exportStarForValues8.symbols
new file mode 100644
index 0000000000000..c647d39a6af3f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues8.symbols
@@ -0,0 +1,40 @@
+//// [tests/cases/compiler/exportStarForValues8.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
+>x : Symbol(Foo.x, Decl(file1.ts, 0, 22))
+
+=== file2.ts ===
+export interface A { x }
+>A : Symbol(A, Decl(file2.ts, 0, 0))
+>x : Symbol(A.x, Decl(file2.ts, 0, 20))
+
+export * from "file1"
+export var x = 1;
+>x : Symbol(x, Decl(file2.ts, 2, 10))
+
+=== file3.ts ===
+export interface B { x }
+>B : Symbol(B, Decl(file3.ts, 0, 0))
+>x : Symbol(B.x, Decl(file3.ts, 0, 20))
+
+export * from "file1"
+export var x = 1;
+>x : Symbol(x, Decl(file3.ts, 2, 10))
+
+=== file4.ts ===
+export interface C { x }
+>C : Symbol(C, Decl(file4.ts, 0, 0))
+>x : Symbol(C.x, Decl(file4.ts, 0, 20))
+
+export * from "file2"
+export * from "file3"
+export var x = 1;
+>x : Symbol(x, Decl(file4.ts, 3, 10))
+
+=== file5.ts ===
+export * from "file4"
+export var x = 1;
+>x : Symbol(x, Decl(file5.ts, 1, 10))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues8.types b/tsc/testdata/baselines/reference/compiler/exportStarForValues8.types
new file mode 100644
index 0000000000000..9484a148a1776
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues8.types
@@ -0,0 +1,40 @@
+//// [tests/cases/compiler/exportStarForValues8.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>x : any
+
+=== file2.ts ===
+export interface A { x }
+>x : any
+
+export * from "file1"
+export var x = 1;
+>x : number
+>1 : 1
+
+=== file3.ts ===
+export interface B { x }
+>x : any
+
+export * from "file1"
+export var x = 1;
+>x : number
+>1 : 1
+
+=== file4.ts ===
+export interface C { x }
+>x : any
+
+export * from "file2"
+export * from "file3"
+export var x = 1;
+>x : number
+>1 : 1
+
+=== file5.ts ===
+export * from "file4"
+export var x = 1;
+>x : number
+>1 : 1
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues9.errors.txt b/tsc/testdata/baselines/reference/compiler/exportStarForValues9.errors.txt
new file mode 100644
index 0000000000000..b937bb920a981
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues9.errors.txt
@@ -0,0 +1,25 @@
+file2.ts(2,15): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+file2.ts(3,15): error TS2307: Cannot find module 'file3' or its corresponding type declarations.
+file3.ts(2,15): error TS2307: Cannot find module 'file2' or its corresponding type declarations.
+
+
+==== file1.ts (0 errors) ====
+ export interface Foo { x }
+
+==== file2.ts (2 errors) ====
+ export interface A { x }
+ export * from "file1"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ export * from "file3"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file3' or its corresponding type declarations.
+ export var x = 1;
+
+==== file3.ts (1 errors) ====
+ export interface B { x }
+ export * from "file2"
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file2' or its corresponding type declarations.
+ export var x = 1;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues9.js b/tsc/testdata/baselines/reference/compiler/exportStarForValues9.js
new file mode 100644
index 0000000000000..afe81e92ac6c4
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues9.js
@@ -0,0 +1,61 @@
+//// [tests/cases/compiler/exportStarForValues9.ts] ////
+
+//// [file1.ts]
+export interface Foo { x }
+
+//// [file2.ts]
+export interface A { x }
+export * from "file1"
+export * from "file3"
+export var x = 1;
+
+//// [file3.ts]
+export interface B { x }
+export * from "file2"
+export var x = 1;
+
+
+//// [file1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [file2.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+__exportStar(require("file1"), exports);
+__exportStar(require("file3"), exports);
+exports.x = 1;
+//// [file3.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+__exportStar(require("file2"), exports);
+exports.x = 1;
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues9.symbols b/tsc/testdata/baselines/reference/compiler/exportStarForValues9.symbols
new file mode 100644
index 0000000000000..f32531326adb9
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues9.symbols
@@ -0,0 +1,26 @@
+//// [tests/cases/compiler/exportStarForValues9.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
+>x : Symbol(Foo.x, Decl(file1.ts, 0, 22))
+
+=== file2.ts ===
+export interface A { x }
+>A : Symbol(A, Decl(file2.ts, 0, 0))
+>x : Symbol(A.x, Decl(file2.ts, 0, 20))
+
+export * from "file1"
+export * from "file3"
+export var x = 1;
+>x : Symbol(x, Decl(file2.ts, 3, 10))
+
+=== file3.ts ===
+export interface B { x }
+>B : Symbol(B, Decl(file3.ts, 0, 0))
+>x : Symbol(B.x, Decl(file3.ts, 0, 20))
+
+export * from "file2"
+export var x = 1;
+>x : Symbol(x, Decl(file3.ts, 2, 10))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportStarForValues9.types b/tsc/testdata/baselines/reference/compiler/exportStarForValues9.types
new file mode 100644
index 0000000000000..95072682811ce
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportStarForValues9.types
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/exportStarForValues9.ts] ////
+
+=== file1.ts ===
+export interface Foo { x }
+>x : any
+
+=== file2.ts ===
+export interface A { x }
+>x : any
+
+export * from "file1"
+export * from "file3"
+export var x = 1;
+>x : number
+>1 : 1
+
+=== file3.ts ===
+export interface B { x }
+>x : any
+
+export * from "file2"
+export var x = 1;
+>x : number
+>1 : 1
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportedInterfaceInaccessibleInCallbackInModule.js b/tsc/testdata/baselines/reference/compiler/exportedInterfaceInaccessibleInCallbackInModule.js
new file mode 100644
index 0000000000000..19d20f5cef063
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportedInterfaceInaccessibleInCallbackInModule.js
@@ -0,0 +1,19 @@
+//// [tests/cases/compiler/exportedInterfaceInaccessibleInCallbackInModule.ts] ////
+
+//// [exportedInterfaceInaccessibleInCallbackInModule.ts]
+export interface ProgressCallback {
+ (progress:any):any;
+}
+
+// --- Generic promise
+export declare class TPromise {
+
+ constructor(init:(complete: (value:V)=>void, error:(err:any)=>void, progress:ProgressCallback)=>void, oncancel?: any);
+
+ // removing this method fixes the error squiggle.....
+ public then(success?: (value:V)=>TPromise, error?: (err:any)=>TPromise, progress?:ProgressCallback): TPromise;
+}
+
+//// [exportedInterfaceInaccessibleInCallbackInModule.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/tsc/testdata/baselines/reference/compiler/exportedInterfaceInaccessibleInCallbackInModule.symbols b/tsc/testdata/baselines/reference/compiler/exportedInterfaceInaccessibleInCallbackInModule.symbols
new file mode 100644
index 0000000000000..2da8d6ee76af0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportedInterfaceInaccessibleInCallbackInModule.symbols
@@ -0,0 +1,44 @@
+//// [tests/cases/compiler/exportedInterfaceInaccessibleInCallbackInModule.ts] ////
+
+=== exportedInterfaceInaccessibleInCallbackInModule.ts ===
+export interface ProgressCallback {
+>ProgressCallback : Symbol(ProgressCallback, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 0, 0))
+
+ (progress:any):any;
+>progress : Symbol(progress, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 1, 2))
+}
+
+// --- Generic promise
+export declare class TPromise {
+>TPromise : Symbol(TPromise, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 2, 1))
+>V : Symbol(V, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 5, 30))
+
+ constructor(init:(complete: (value:V)=>void, error:(err:any)=>void, progress:ProgressCallback)=>void, oncancel?: any);
+>init : Symbol(init, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 7, 13))
+>complete : Symbol(complete, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 7, 19))
+>value : Symbol(value, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 7, 30))
+>V : Symbol(V, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 5, 30))
+>error : Symbol(error, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 7, 45))
+>err : Symbol(err, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 7, 53))
+>progress : Symbol(progress, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 7, 68))
+>ProgressCallback : Symbol(ProgressCallback, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 0, 0))
+>oncancel : Symbol(oncancel, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 7, 102))
+
+ // removing this method fixes the error squiggle.....
+ public then(success?: (value:V)=>TPromise, error?: (err:any)=>TPromise, progress?:ProgressCallback): TPromise;
+>then : Symbol(TPromise.then, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 7, 119))
+>U : Symbol(U, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 10, 13))
+>success : Symbol(success, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 10, 16))
+>value : Symbol(value, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 10, 27))
+>V : Symbol(V, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 5, 30))
+>TPromise : Symbol(TPromise, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 2, 1))
+>U : Symbol(U, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 10, 13))
+>error : Symbol(error, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 10, 49))
+>err : Symbol(err, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 10, 59))
+>TPromise : Symbol(TPromise, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 2, 1))
+>U : Symbol(U, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 10, 13))
+>progress : Symbol(progress, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 10, 81))
+>ProgressCallback : Symbol(ProgressCallback, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 0, 0))
+>TPromise : Symbol(TPromise, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 2, 1))
+>U : Symbol(U, Decl(exportedInterfaceInaccessibleInCallbackInModule.ts, 10, 13))
+}
diff --git a/tsc/testdata/baselines/reference/compiler/exportedInterfaceInaccessibleInCallbackInModule.types b/tsc/testdata/baselines/reference/compiler/exportedInterfaceInaccessibleInCallbackInModule.types
new file mode 100644
index 0000000000000..d8f62bb41e32c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportedInterfaceInaccessibleInCallbackInModule.types
@@ -0,0 +1,30 @@
+//// [tests/cases/compiler/exportedInterfaceInaccessibleInCallbackInModule.ts] ////
+
+=== exportedInterfaceInaccessibleInCallbackInModule.ts ===
+export interface ProgressCallback {
+ (progress:any):any;
+>progress : any
+}
+
+// --- Generic promise
+export declare class TPromise {
+>TPromise : TPromise
+
+ constructor(init:(complete: (value:V)=>void, error:(err:any)=>void, progress:ProgressCallback)=>void, oncancel?: any);
+>init : (complete: (value: V) => void, error: (err: any) => void, progress: ProgressCallback) => void
+>complete : (value: V) => void
+>value : V
+>error : (err: any) => void
+>err : any
+>progress : ProgressCallback
+>oncancel : any
+
+ // removing this method fixes the error squiggle.....
+ public then(success?: (value:V)=>TPromise, error?: (err:any)=>TPromise, progress?:ProgressCallback): TPromise;
+>then : (success?: (value: V) => TPromise, error?: (err: any) => TPromise, progress?: ProgressCallback) => TPromise
+>success : ((value: V) => TPromise) | undefined
+>value : V
+>error : ((err: any) => TPromise) | undefined
+>err : any
+>progress : ProgressCallback | undefined
+}
diff --git a/tsc/testdata/baselines/reference/compiler/exportedVariable1.js b/tsc/testdata/baselines/reference/compiler/exportedVariable1.js
new file mode 100644
index 0000000000000..0a260c38fb031
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportedVariable1.js
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/exportedVariable1.ts] ////
+
+//// [exportedVariable1.ts]
+export var foo = {name: "Bill"};
+var upper = foo.name.toUpperCase();
+
+
+//// [exportedVariable1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.foo = void 0;
+exports.foo = { name: "Bill" };
+var upper = exports.foo.name.toUpperCase();
diff --git a/tsc/testdata/baselines/reference/compiler/exportedVariable1.symbols b/tsc/testdata/baselines/reference/compiler/exportedVariable1.symbols
new file mode 100644
index 0000000000000..8f90b8b6f1e37
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportedVariable1.symbols
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/exportedVariable1.ts] ////
+
+=== exportedVariable1.ts ===
+export var foo = {name: "Bill"};
+>foo : Symbol(foo, Decl(exportedVariable1.ts, 0, 10))
+>name : Symbol(name, Decl(exportedVariable1.ts, 0, 18))
+
+var upper = foo.name.toUpperCase();
+>upper : Symbol(upper, Decl(exportedVariable1.ts, 1, 3))
+>foo.name.toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --))
+>foo.name : Symbol(name, Decl(exportedVariable1.ts, 0, 18))
+>foo : Symbol(foo, Decl(exportedVariable1.ts, 0, 10))
+>name : Symbol(name, Decl(exportedVariable1.ts, 0, 18))
+>toUpperCase : Symbol(String.toUpperCase, Decl(lib.es5.d.ts, --, --))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportedVariable1.types b/tsc/testdata/baselines/reference/compiler/exportedVariable1.types
new file mode 100644
index 0000000000000..c36c806d25b26
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportedVariable1.types
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/exportedVariable1.ts] ////
+
+=== exportedVariable1.ts ===
+export var foo = {name: "Bill"};
+>foo : { name: string; }
+>{name: "Bill"} : { name: string; }
+>name : string
+>"Bill" : "Bill"
+
+var upper = foo.name.toUpperCase();
+>upper : string
+>foo.name.toUpperCase() : string
+>foo.name.toUpperCase : () => string
+>foo.name : string
+>foo : { name: string; }
+>name : string
+>toUpperCase : () => string
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportingContainingVisibleType.errors.txt b/tsc/testdata/baselines/reference/compiler/exportingContainingVisibleType.errors.txt
new file mode 100644
index 0000000000000..30013d2a09b4c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportingContainingVisibleType.errors.txt
@@ -0,0 +1,16 @@
+exportingContainingVisibleType.ts(4,16): error TS2454: Variable 'i' is used before being assigned.
+
+
+==== exportingContainingVisibleType.ts (1 errors) ====
+ class Foo {
+ public get foo() {
+ var i: Foo;
+ return i; // Should be fine (previous bug report visibility error).
+ ~
+!!! error TS2454: Variable 'i' is used before being assigned.
+
+ }
+ }
+
+ export var x = 5;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportingContainingVisibleType.js b/tsc/testdata/baselines/reference/compiler/exportingContainingVisibleType.js
new file mode 100644
index 0000000000000..f3c4040a724a6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportingContainingVisibleType.js
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/exportingContainingVisibleType.ts] ////
+
+//// [exportingContainingVisibleType.ts]
+class Foo {
+ public get foo() {
+ var i: Foo;
+ return i; // Should be fine (previous bug report visibility error).
+
+ }
+}
+
+export var x = 5;
+
+
+//// [exportingContainingVisibleType.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+class Foo {
+ get foo() {
+ var i;
+ return i; // Should be fine (previous bug report visibility error).
+ }
+}
+exports.x = 5;
diff --git a/tsc/testdata/baselines/reference/compiler/exportingContainingVisibleType.symbols b/tsc/testdata/baselines/reference/compiler/exportingContainingVisibleType.symbols
new file mode 100644
index 0000000000000..9541507d35a3e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportingContainingVisibleType.symbols
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/exportingContainingVisibleType.ts] ////
+
+=== exportingContainingVisibleType.ts ===
+class Foo {
+>Foo : Symbol(Foo, Decl(exportingContainingVisibleType.ts, 0, 0))
+
+ public get foo() {
+>foo : Symbol(Foo.foo, Decl(exportingContainingVisibleType.ts, 0, 11))
+
+ var i: Foo;
+>i : Symbol(i, Decl(exportingContainingVisibleType.ts, 2, 11))
+>Foo : Symbol(Foo, Decl(exportingContainingVisibleType.ts, 0, 0))
+
+ return i; // Should be fine (previous bug report visibility error).
+>i : Symbol(i, Decl(exportingContainingVisibleType.ts, 2, 11))
+
+ }
+}
+
+export var x = 5;
+>x : Symbol(x, Decl(exportingContainingVisibleType.ts, 8, 10))
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportingContainingVisibleType.types b/tsc/testdata/baselines/reference/compiler/exportingContainingVisibleType.types
new file mode 100644
index 0000000000000..b0d8defde3187
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportingContainingVisibleType.types
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/exportingContainingVisibleType.ts] ////
+
+=== exportingContainingVisibleType.ts ===
+class Foo {
+>Foo : Foo
+
+ public get foo() {
+>foo : Foo
+
+ var i: Foo;
+>i : Foo
+
+ return i; // Should be fine (previous bug report visibility error).
+>i : Foo
+
+ }
+}
+
+export var x = 5;
+>x : number
+>5 : 5
+
diff --git a/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules1.errors.txt b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules1.errors.txt
new file mode 100644
index 0000000000000..f7f881b891d16
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules1.errors.txt
@@ -0,0 +1,12 @@
+main.ts(2,21): error TS2307: Cannot find module 'external' or its corresponding type declarations.
+
+
+==== external.d.ts (0 errors) ====
+ export var x: number
+
+==== main.ts (1 errors) ====
+ declare module "M" {
+ export {x} from "external"
+ ~~~~~~~~~~
+!!! error TS2307: Cannot find module 'external' or its corresponding type declarations.
+ }
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules1.js b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules1.js
new file mode 100644
index 0000000000000..15e673bb038cd
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules1.js
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/exportsInAmbientModules1.ts] ////
+
+//// [external.d.ts]
+export var x: number
+
+//// [main.ts]
+declare module "M" {
+ export {x} from "external"
+}
+
+//// [main.js]
+"use strict";
diff --git a/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules1.symbols b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules1.symbols
new file mode 100644
index 0000000000000..5bdf37cad95e7
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules1.symbols
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/exportsInAmbientModules1.ts] ////
+
+=== external.d.ts ===
+export var x: number
+>x : Symbol(x, Decl(external.d.ts, 0, 10))
+
+=== main.ts ===
+declare module "M" {
+>"M" : Symbol("M", Decl(main.ts, 0, 0))
+
+ export {x} from "external"
+>x : Symbol(x, Decl(main.ts, 1, 12))
+}
diff --git a/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules1.types b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules1.types
new file mode 100644
index 0000000000000..d09b3f2ac8a24
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules1.types
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/exportsInAmbientModules1.ts] ////
+
+=== external.d.ts ===
+export var x: number
+>x : number
+
+=== main.ts ===
+declare module "M" {
+>"M" : typeof import("M")
+
+ export {x} from "external"
+>x : any
+}
diff --git a/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules2.errors.txt b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules2.errors.txt
new file mode 100644
index 0000000000000..627d3cd7bfcec
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules2.errors.txt
@@ -0,0 +1,12 @@
+main.ts(2,19): error TS2307: Cannot find module 'external' or its corresponding type declarations.
+
+
+==== external.d.ts (0 errors) ====
+ export default class C {}
+
+==== main.ts (1 errors) ====
+ declare module "M" {
+ export * from "external"
+ ~~~~~~~~~~
+!!! error TS2307: Cannot find module 'external' or its corresponding type declarations.
+ }
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules2.js b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules2.js
new file mode 100644
index 0000000000000..3a191fa47d4f2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules2.js
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/exportsInAmbientModules2.ts] ////
+
+//// [external.d.ts]
+export default class C {}
+
+//// [main.ts]
+declare module "M" {
+ export * from "external"
+}
+
+//// [main.js]
+"use strict";
diff --git a/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules2.symbols b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules2.symbols
new file mode 100644
index 0000000000000..34fb7d3446977
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules2.symbols
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/exportsInAmbientModules2.ts] ////
+
+=== external.d.ts ===
+export default class C {}
+>C : Symbol(C, Decl(external.d.ts, 0, 0))
+
+=== main.ts ===
+declare module "M" {
+>"M" : Symbol("M", Decl(main.ts, 0, 0))
+
+ export * from "external"
+}
diff --git a/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules2.types b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules2.types
new file mode 100644
index 0000000000000..ad1f3d16c60d0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/exportsInAmbientModules2.types
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/exportsInAmbientModules2.ts] ////
+
+=== external.d.ts ===
+export default class C {}
+>C : C
+
+=== main.ts ===
+declare module "M" {
+>"M" : typeof import("M")
+
+ export * from "external"
+}
diff --git a/tsc/testdata/baselines/reference/compiler/externalModuleAssignToVar.errors.txt b/tsc/testdata/baselines/reference/compiler/externalModuleAssignToVar.errors.txt
new file mode 100644
index 0000000000000..39ac5a3746b44
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/externalModuleAssignToVar.errors.txt
@@ -0,0 +1,39 @@
+externalModuleAssignToVar_core.ts(2,22): error TS2307: Cannot find module 'externalModuleAssignToVar_core_require' or its corresponding type declarations.
+externalModuleAssignToVar_core.ts(6,23): error TS2307: Cannot find module 'externalModuleAssignToVar_core_require2' or its corresponding type declarations.
+externalModuleAssignToVar_core.ts(10,23): error TS2307: Cannot find module 'externalModuleAssignToVar_ext' or its corresponding type declarations.
+externalModuleAssignToVar_core_require.ts(1,18): error TS2564: Property 'bar' has no initializer and is not definitely assigned in the constructor.
+
+
+==== externalModuleAssignToVar_core.ts (3 errors) ====
+ ///
+ import ext = require('externalModuleAssignToVar_core_require');
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'externalModuleAssignToVar_core_require' or its corresponding type declarations.
+ var y1: { C: new() => ext.C; } = ext;
+ y1 = ext; // ok
+
+ import ext2 = require('externalModuleAssignToVar_core_require2');
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'externalModuleAssignToVar_core_require2' or its corresponding type declarations.
+ var y2: new() => ext2 = ext2;
+ y2 = ext2; // ok
+
+ import ext3 = require('externalModuleAssignToVar_ext');
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'externalModuleAssignToVar_ext' or its corresponding type declarations.
+ var y3: new () => ext3 = ext3;
+ y3 = ext3; // ok
+
+==== externalModuleAssignToVar_ext.ts (0 errors) ====
+ class D { foo: string; }
+ export = D;
+
+==== externalModuleAssignToVar_core_require.ts (1 errors) ====
+ export class C { bar: string; }
+ ~~~
+!!! error TS2564: Property 'bar' has no initializer and is not definitely assigned in the constructor.
+
+==== externalModuleAssignToVar_core_require2.ts (0 errors) ====
+ class C { baz: string; }
+ export = C;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/externalModuleAssignToVar.js b/tsc/testdata/baselines/reference/compiler/externalModuleAssignToVar.js
new file mode 100644
index 0000000000000..f3802158a67f9
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/externalModuleAssignToVar.js
@@ -0,0 +1,48 @@
+//// [tests/cases/compiler/externalModuleAssignToVar.ts] ////
+
+//// [externalModuleAssignToVar_ext.ts]
+class D { foo: string; }
+export = D;
+
+//// [externalModuleAssignToVar_core_require.ts]
+export class C { bar: string; }
+
+//// [externalModuleAssignToVar_core_require2.ts]
+class C { baz: string; }
+export = C;
+
+//// [externalModuleAssignToVar_core.ts]
+///
+import ext = require('externalModuleAssignToVar_core_require');
+var y1: { C: new() => ext.C; } = ext;
+y1 = ext; // ok
+
+import ext2 = require('externalModuleAssignToVar_core_require2');
+var y2: new() => ext2 = ext2;
+y2 = ext2; // ok
+
+import ext3 = require('externalModuleAssignToVar_ext');
+var y3: new () => ext3 = ext3;
+y3 = ext3; // ok
+
+
+//// [externalModuleAssignToVar_core_require.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.C = void 0;
+class C {
+}
+exports.C = C;
+//// [externalModuleAssignToVar_core.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+///
+const ext = require("externalModuleAssignToVar_core_require");
+var y1 = ext;
+y1 = ext; // ok
+const ext2 = require("externalModuleAssignToVar_core_require2");
+var y2 = ext2;
+y2 = ext2; // ok
+const ext3 = require("externalModuleAssignToVar_ext");
+var y3 = ext3;
+y3 = ext3; // ok
diff --git a/tsc/testdata/baselines/reference/compiler/externalModuleAssignToVar.symbols b/tsc/testdata/baselines/reference/compiler/externalModuleAssignToVar.symbols
new file mode 100644
index 0000000000000..e118f6fbcb72c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/externalModuleAssignToVar.symbols
@@ -0,0 +1,47 @@
+//// [tests/cases/compiler/externalModuleAssignToVar.ts] ////
+
+=== externalModuleAssignToVar_core.ts ===
+///
+import ext = require('externalModuleAssignToVar_core_require');
+>ext : Symbol(ext, Decl(externalModuleAssignToVar_core.ts, 0, 0))
+
+var y1: { C: new() => ext.C; } = ext;
+>y1 : Symbol(y1, Decl(externalModuleAssignToVar_core.ts, 2, 3))
+>C : Symbol(C, Decl(externalModuleAssignToVar_core.ts, 2, 9))
+>ext : Symbol(ext, Decl(externalModuleAssignToVar_core.ts, 0, 0))
+>C : Symbol(ext.C)
+>ext : Symbol(ext, Decl(externalModuleAssignToVar_core.ts, 0, 0))
+
+y1 = ext; // ok
+>y1 : Symbol(y1, Decl(externalModuleAssignToVar_core.ts, 2, 3))
+>ext : Symbol(ext, Decl(externalModuleAssignToVar_core.ts, 0, 0))
+
+import ext2 = require('externalModuleAssignToVar_core_require2');
+>ext2 : Symbol(ext2, Decl(externalModuleAssignToVar_core.ts, 3, 9))
+
+var y2: new() => ext2 = ext2;
+>y2 : Symbol(y2, Decl(externalModuleAssignToVar_core.ts, 6, 3))
+>ext2 : Symbol(ext2, Decl(externalModuleAssignToVar_core.ts, 3, 9))
+>ext2 : Symbol(ext2, Decl(externalModuleAssignToVar_core.ts, 3, 9))
+
+y2 = ext2; // ok
+>y2 : Symbol(y2, Decl(externalModuleAssignToVar_core.ts, 6, 3))
+>ext2 : Symbol(ext2, Decl(externalModuleAssignToVar_core.ts, 3, 9))
+
+import ext3 = require('externalModuleAssignToVar_ext');
+>ext3 : Symbol(ext3, Decl(externalModuleAssignToVar_core.ts, 7, 10))
+
+var y3: new () => ext3 = ext3;
+>y3 : Symbol(y3, Decl(externalModuleAssignToVar_core.ts, 10, 3))
+>ext3 : Symbol(ext3, Decl(externalModuleAssignToVar_core.ts, 7, 10))
+>ext3 : Symbol(ext3, Decl(externalModuleAssignToVar_core.ts, 7, 10))
+
+y3 = ext3; // ok
+>y3 : Symbol(y3, Decl(externalModuleAssignToVar_core.ts, 10, 3))
+>ext3 : Symbol(ext3, Decl(externalModuleAssignToVar_core.ts, 7, 10))
+
+=== externalModuleAssignToVar_core_require.ts ===
+export class C { bar: string; }
+>C : Symbol(C, Decl(externalModuleAssignToVar_core_require.ts, 0, 0))
+>bar : Symbol(C.bar, Decl(externalModuleAssignToVar_core_require.ts, 0, 16))
+
diff --git a/tsc/testdata/baselines/reference/compiler/externalModuleAssignToVar.types b/tsc/testdata/baselines/reference/compiler/externalModuleAssignToVar.types
new file mode 100644
index 0000000000000..50e43f47b118d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/externalModuleAssignToVar.types
@@ -0,0 +1,47 @@
+//// [tests/cases/compiler/externalModuleAssignToVar.ts] ////
+
+=== externalModuleAssignToVar_core.ts ===
+///
+import ext = require('externalModuleAssignToVar_core_require');
+>ext : any
+
+var y1: { C: new() => ext.C; } = ext;
+>y1 : { C: new () => ext.C; }
+>C : new () => ext.C
+>ext : any
+>ext : any
+
+y1 = ext; // ok
+>y1 = ext : any
+>y1 : { C: new () => ext.C; }
+>ext : any
+
+import ext2 = require('externalModuleAssignToVar_core_require2');
+>ext2 : any
+
+var y2: new() => ext2 = ext2;
+>y2 : new () => ext2
+>ext2 : any
+
+y2 = ext2; // ok
+>y2 = ext2 : any
+>y2 : new () => ext2
+>ext2 : any
+
+import ext3 = require('externalModuleAssignToVar_ext');
+>ext3 : any
+
+var y3: new () => ext3 = ext3;
+>y3 : new () => ext3
+>ext3 : any
+
+y3 = ext3; // ok
+>y3 = ext3 : any
+>y3 : new () => ext3
+>ext3 : any
+
+=== externalModuleAssignToVar_core_require.ts ===
+export class C { bar: string; }
+>C : C
+>bar : string
+
diff --git a/tsc/testdata/baselines/reference/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.errors.txt b/tsc/testdata/baselines/reference/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.errors.txt
new file mode 100644
index 0000000000000..ed2db13acbc46
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.errors.txt
@@ -0,0 +1,12 @@
+externalModuleReferenceOfImportDeclarationWithExportModifier_1.ts(1,31): error TS2307: Cannot find module 'externalModuleReferenceOfImportDeclarationWithExportModifier_0' or its corresponding type declarations.
+
+
+==== externalModuleReferenceOfImportDeclarationWithExportModifier_1.ts (1 errors) ====
+ export import file1 = require('externalModuleReferenceOfImportDeclarationWithExportModifier_0');
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'externalModuleReferenceOfImportDeclarationWithExportModifier_0' or its corresponding type declarations.
+ file1.foo();
+
+==== externalModuleReferenceOfImportDeclarationWithExportModifier_0.ts (0 errors) ====
+ export function foo() { };
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.js b/tsc/testdata/baselines/reference/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.js
new file mode 100644
index 0000000000000..97929fed6b47f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.js
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.ts] ////
+
+//// [externalModuleReferenceOfImportDeclarationWithExportModifier_0.ts]
+export function foo() { };
+
+//// [externalModuleReferenceOfImportDeclarationWithExportModifier_1.ts]
+export import file1 = require('externalModuleReferenceOfImportDeclarationWithExportModifier_0');
+file1.foo();
+
+
+//// [externalModuleReferenceOfImportDeclarationWithExportModifier_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.file1 = require("externalModuleReferenceOfImportDeclarationWithExportModifier_0");
+exports.file1.foo();
diff --git a/tsc/testdata/baselines/reference/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.symbols b/tsc/testdata/baselines/reference/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.symbols
new file mode 100644
index 0000000000000..a58f76073a229
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.symbols
@@ -0,0 +1,9 @@
+//// [tests/cases/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.ts] ////
+
+=== externalModuleReferenceOfImportDeclarationWithExportModifier_1.ts ===
+export import file1 = require('externalModuleReferenceOfImportDeclarationWithExportModifier_0');
+>file1 : Symbol(file1, Decl(externalModuleReferenceOfImportDeclarationWithExportModifier_1.ts, 0, 0))
+
+file1.foo();
+>file1 : Symbol(file1, Decl(externalModuleReferenceOfImportDeclarationWithExportModifier_1.ts, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.types b/tsc/testdata/baselines/reference/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.types
new file mode 100644
index 0000000000000..4412d2b377b36
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.types
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/externalModuleReferenceOfImportDeclarationWithExportModifier.ts] ////
+
+=== externalModuleReferenceOfImportDeclarationWithExportModifier_1.ts ===
+export import file1 = require('externalModuleReferenceOfImportDeclarationWithExportModifier_0');
+>file1 : any
+
+file1.foo();
+>file1.foo() : any
+>file1.foo : any
+>file1 : any
+>foo : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/genericClassesInModule2.js b/tsc/testdata/baselines/reference/compiler/genericClassesInModule2.js
new file mode 100644
index 0000000000000..80068f7cdcf8b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericClassesInModule2.js
@@ -0,0 +1,44 @@
+//// [tests/cases/compiler/genericClassesInModule2.ts] ////
+
+//// [genericClassesInModule2.ts]
+export class A{
+ constructor( public callback: (self: A) => void) {
+ var child = new B(this);
+ }
+ AAA( callback: (self: A) => void) {
+ var child = new B(this);
+ }
+}
+
+export interface C{
+ child: B;
+ (self: C): void;
+ new(callback: (self: C) => void)
+}
+
+export class B {
+ constructor(public parent: T2) { }
+}
+
+
+
+//// [genericClassesInModule2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.B = exports.A = void 0;
+class A {
+ constructor(callback) {
+ this.callback = callback;
+ var child = new B(this);
+ }
+ AAA(callback) {
+ var child = new B(this);
+ }
+}
+exports.A = A;
+class B {
+ constructor(parent) {
+ this.parent = parent;
+ }
+}
+exports.B = B;
diff --git a/tsc/testdata/baselines/reference/compiler/genericClassesInModule2.symbols b/tsc/testdata/baselines/reference/compiler/genericClassesInModule2.symbols
new file mode 100644
index 0000000000000..a5562ee13d8ef
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericClassesInModule2.symbols
@@ -0,0 +1,63 @@
+//// [tests/cases/compiler/genericClassesInModule2.ts] ////
+
+=== genericClassesInModule2.ts ===
+export class A{
+>A : Symbol(A, Decl(genericClassesInModule2.ts, 0, 0))
+>T1 : Symbol(T1, Decl(genericClassesInModule2.ts, 0, 15))
+
+ constructor( public callback: (self: A) => void) {
+>callback : Symbol(A.callback, Decl(genericClassesInModule2.ts, 1, 16))
+>self : Symbol(self, Decl(genericClassesInModule2.ts, 1, 35))
+>A : Symbol(A, Decl(genericClassesInModule2.ts, 0, 0))
+>T1 : Symbol(T1, Decl(genericClassesInModule2.ts, 0, 15))
+
+ var child = new B(this);
+>child : Symbol(child, Decl(genericClassesInModule2.ts, 2, 11))
+>B : Symbol(B, Decl(genericClassesInModule2.ts, 13, 1))
+>this : Symbol(A, Decl(genericClassesInModule2.ts, 0, 0))
+ }
+ AAA( callback: (self: A) => void) {
+>AAA : Symbol(A.AAA, Decl(genericClassesInModule2.ts, 3, 5))
+>callback : Symbol(callback, Decl(genericClassesInModule2.ts, 4, 8))
+>self : Symbol(self, Decl(genericClassesInModule2.ts, 4, 20))
+>A : Symbol(A, Decl(genericClassesInModule2.ts, 0, 0))
+>T1 : Symbol(T1, Decl(genericClassesInModule2.ts, 0, 15))
+
+ var child = new B(this);
+>child : Symbol(child, Decl(genericClassesInModule2.ts, 5, 11))
+>B : Symbol(B, Decl(genericClassesInModule2.ts, 13, 1))
+>this : Symbol(A, Decl(genericClassesInModule2.ts, 0, 0))
+ }
+}
+
+export interface C{
+>C : Symbol(C, Decl(genericClassesInModule2.ts, 7, 1))
+>T1 : Symbol(T1, Decl(genericClassesInModule2.ts, 9, 19))
+
+ child: B;
+>child : Symbol(C.child, Decl(genericClassesInModule2.ts, 9, 23))
+>B : Symbol(B, Decl(genericClassesInModule2.ts, 13, 1))
+>T1 : Symbol(T1, Decl(genericClassesInModule2.ts, 9, 19))
+
+ (self: C): void;
+>self : Symbol(self, Decl(genericClassesInModule2.ts, 11, 5))
+>C : Symbol(C, Decl(genericClassesInModule2.ts, 7, 1))
+>T1 : Symbol(T1, Decl(genericClassesInModule2.ts, 9, 19))
+
+ new(callback: (self: C) => void)
+>callback : Symbol(callback, Decl(genericClassesInModule2.ts, 12, 8))
+>self : Symbol(self, Decl(genericClassesInModule2.ts, 12, 19))
+>C : Symbol(C, Decl(genericClassesInModule2.ts, 7, 1))
+>T1 : Symbol(T1, Decl(genericClassesInModule2.ts, 9, 19))
+}
+
+export class B {
+>B : Symbol(B, Decl(genericClassesInModule2.ts, 13, 1))
+>T2 : Symbol(T2, Decl(genericClassesInModule2.ts, 15, 15))
+
+ constructor(public parent: T2) { }
+>parent : Symbol(B.parent, Decl(genericClassesInModule2.ts, 16, 16))
+>T2 : Symbol(T2, Decl(genericClassesInModule2.ts, 15, 15))
+}
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/genericClassesInModule2.types b/tsc/testdata/baselines/reference/compiler/genericClassesInModule2.types
new file mode 100644
index 0000000000000..2409d468dff02
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericClassesInModule2.types
@@ -0,0 +1,49 @@
+//// [tests/cases/compiler/genericClassesInModule2.ts] ////
+
+=== genericClassesInModule2.ts ===
+export class A{
+>A : A
+
+ constructor( public callback: (self: A) => void) {
+>callback : (self: A) => void
+>self : A
+
+ var child = new B(this);
+>child : B
+>new B(this) : B
+>B : typeof B
+>this : this
+ }
+ AAA( callback: (self: A) => void) {
+>AAA : (callback: (self: A) => void) => void
+>callback : (self: A) => void
+>self : A
+
+ var child = new B(this);
+>child : B
+>new B(this) : B
+>B : typeof B
+>this : this
+ }
+}
+
+export interface C{
+ child: B;
+>child : B
+
+ (self: C): void;
+>self : C
+
+ new(callback: (self: C) => void)
+>callback : (self: C) => void
+>self : C
+}
+
+export class B {
+>B : B
+
+ constructor(public parent: T2) { }
+>parent : T2
+}
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/genericInterfaceFunctionTypeParameter.js b/tsc/testdata/baselines/reference/compiler/genericInterfaceFunctionTypeParameter.js
new file mode 100644
index 0000000000000..420da1d46c6d4
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericInterfaceFunctionTypeParameter.js
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/genericInterfaceFunctionTypeParameter.ts] ////
+
+//// [genericInterfaceFunctionTypeParameter.ts]
+export interface IFoo { }
+export function foo(fn: (ifoo: IFoo) => void) {
+ foo(fn); // Invocation is necessary to repro (!)
+}
+
+
+
+
+//// [genericInterfaceFunctionTypeParameter.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.foo = foo;
+function foo(fn) {
+ foo(fn); // Invocation is necessary to repro (!)
+}
diff --git a/tsc/testdata/baselines/reference/compiler/genericInterfaceFunctionTypeParameter.symbols b/tsc/testdata/baselines/reference/compiler/genericInterfaceFunctionTypeParameter.symbols
new file mode 100644
index 0000000000000..7ba56c973bdbd
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericInterfaceFunctionTypeParameter.symbols
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/genericInterfaceFunctionTypeParameter.ts] ////
+
+=== genericInterfaceFunctionTypeParameter.ts ===
+export interface IFoo { }
+>IFoo : Symbol(IFoo, Decl(genericInterfaceFunctionTypeParameter.ts, 0, 0))
+>A : Symbol(A, Decl(genericInterfaceFunctionTypeParameter.ts, 0, 22))
+
+export function foo(fn: (ifoo: IFoo) => void) {
+>foo : Symbol(foo, Decl(genericInterfaceFunctionTypeParameter.ts, 0, 28))
+>A : Symbol(A, Decl(genericInterfaceFunctionTypeParameter.ts, 1, 20))
+>fn : Symbol(fn, Decl(genericInterfaceFunctionTypeParameter.ts, 1, 23))
+>ifoo : Symbol(ifoo, Decl(genericInterfaceFunctionTypeParameter.ts, 1, 28))
+>IFoo : Symbol(IFoo, Decl(genericInterfaceFunctionTypeParameter.ts, 0, 0))
+>A : Symbol(A, Decl(genericInterfaceFunctionTypeParameter.ts, 1, 20))
+
+ foo(fn); // Invocation is necessary to repro (!)
+>foo : Symbol(foo, Decl(genericInterfaceFunctionTypeParameter.ts, 0, 28))
+>fn : Symbol(fn, Decl(genericInterfaceFunctionTypeParameter.ts, 1, 23))
+}
+
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/genericInterfaceFunctionTypeParameter.types b/tsc/testdata/baselines/reference/compiler/genericInterfaceFunctionTypeParameter.types
new file mode 100644
index 0000000000000..dd2c780bdbab4
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericInterfaceFunctionTypeParameter.types
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/genericInterfaceFunctionTypeParameter.ts] ////
+
+=== genericInterfaceFunctionTypeParameter.ts ===
+export interface IFoo { }
+export function foo(fn: (ifoo: IFoo) => void) {
+>foo : (fn: (ifoo: IFoo) => void) => void
+>fn : (ifoo: IFoo) => void
+>ifoo : IFoo
+
+ foo(fn); // Invocation is necessary to repro (!)
+>foo(fn) : void
+>foo : (fn: (ifoo: IFoo) => void) => void
+>fn : (ifoo: IFoo) => void
+}
+
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/genericRecursiveImplicitConstructorErrors1.errors.txt b/tsc/testdata/baselines/reference/compiler/genericRecursiveImplicitConstructorErrors1.errors.txt
new file mode 100644
index 0000000000000..2e2efb0b33045
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericRecursiveImplicitConstructorErrors1.errors.txt
@@ -0,0 +1,19 @@
+genericRecursiveImplicitConstructorErrors1.ts(9,49): error TS2314: Generic type 'PullTypeSymbol' requires 3 type argument(s).
+
+
+==== genericRecursiveImplicitConstructorErrors1.ts (1 errors) ====
+ export declare namespace TypeScript {
+ class PullSymbol { }
+ class PullSignatureSymbol extends PullSymbol {
+ public addSpecialization(signature: PullSignatureSymbol, typeArguments: PullTypeSymbol[]): void;
+ }
+ class PullTypeSymbol extends PullSymbol {
+ public findTypeParameter(name: string): PullTypeParameterSymbol;
+ }
+ class PullTypeParameterSymbol extends PullTypeSymbol {
+ ~~~~~~~~~~~~~~
+!!! error TS2314: Generic type 'PullTypeSymbol' requires 3 type argument(s).
+ }
+ }
+
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/genericRecursiveImplicitConstructorErrors1.js b/tsc/testdata/baselines/reference/compiler/genericRecursiveImplicitConstructorErrors1.js
new file mode 100644
index 0000000000000..3b4a08fc8a8ef
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericRecursiveImplicitConstructorErrors1.js
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/genericRecursiveImplicitConstructorErrors1.ts] ////
+
+//// [genericRecursiveImplicitConstructorErrors1.ts]
+export declare namespace TypeScript {
+ class PullSymbol { }
+ class PullSignatureSymbol extends PullSymbol {
+ public addSpecialization(signature: PullSignatureSymbol, typeArguments: PullTypeSymbol[]): void;
+ }
+ class PullTypeSymbol extends PullSymbol {
+ public findTypeParameter(name: string): PullTypeParameterSymbol;
+ }
+ class PullTypeParameterSymbol extends PullTypeSymbol {
+ }
+}
+
+
+
+//// [genericRecursiveImplicitConstructorErrors1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/tsc/testdata/baselines/reference/compiler/genericRecursiveImplicitConstructorErrors1.symbols b/tsc/testdata/baselines/reference/compiler/genericRecursiveImplicitConstructorErrors1.symbols
new file mode 100644
index 0000000000000..d556094b61859
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericRecursiveImplicitConstructorErrors1.symbols
@@ -0,0 +1,57 @@
+//// [tests/cases/compiler/genericRecursiveImplicitConstructorErrors1.ts] ////
+
+=== genericRecursiveImplicitConstructorErrors1.ts ===
+export declare namespace TypeScript {
+>TypeScript : Symbol(TypeScript, Decl(genericRecursiveImplicitConstructorErrors1.ts, 0, 0))
+
+ class PullSymbol { }
+>PullSymbol : Symbol(PullSymbol, Decl(genericRecursiveImplicitConstructorErrors1.ts, 0, 37))
+
+ class PullSignatureSymbol extends PullSymbol {
+>PullSignatureSymbol : Symbol(PullSignatureSymbol, Decl(genericRecursiveImplicitConstructorErrors1.ts, 1, 22))
+>A : Symbol(A, Decl(genericRecursiveImplicitConstructorErrors1.ts, 2, 29))
+>B : Symbol(B, Decl(genericRecursiveImplicitConstructorErrors1.ts, 2, 31))
+>C : Symbol(C, Decl(genericRecursiveImplicitConstructorErrors1.ts, 2, 33))
+>PullSymbol : Symbol(PullSymbol, Decl(genericRecursiveImplicitConstructorErrors1.ts, 0, 37))
+
+ public addSpecialization(signature: PullSignatureSymbol, typeArguments: PullTypeSymbol[]): void;
+>addSpecialization : Symbol(PullSignatureSymbol.addSpecialization, Decl(genericRecursiveImplicitConstructorErrors1.ts, 2, 56))
+>A : Symbol(A, Decl(genericRecursiveImplicitConstructorErrors1.ts, 3, 27))
+>B : Symbol(B, Decl(genericRecursiveImplicitConstructorErrors1.ts, 3, 29))
+>C : Symbol(C, Decl(genericRecursiveImplicitConstructorErrors1.ts, 3, 31))
+>signature : Symbol(signature, Decl(genericRecursiveImplicitConstructorErrors1.ts, 3, 34))
+>PullSignatureSymbol : Symbol(PullSignatureSymbol, Decl(genericRecursiveImplicitConstructorErrors1.ts, 1, 22))
+>A : Symbol(A, Decl(genericRecursiveImplicitConstructorErrors1.ts, 3, 27))
+>B : Symbol(B, Decl(genericRecursiveImplicitConstructorErrors1.ts, 3, 29))
+>C : Symbol(C, Decl(genericRecursiveImplicitConstructorErrors1.ts, 3, 31))
+>typeArguments : Symbol(typeArguments, Decl(genericRecursiveImplicitConstructorErrors1.ts, 3, 72))
+>PullTypeSymbol : Symbol(PullTypeSymbol, Decl(genericRecursiveImplicitConstructorErrors1.ts, 4, 3))
+ }
+ class PullTypeSymbol extends PullSymbol {
+>PullTypeSymbol : Symbol(PullTypeSymbol, Decl(genericRecursiveImplicitConstructorErrors1.ts, 4, 3))
+>A : Symbol(A, Decl(genericRecursiveImplicitConstructorErrors1.ts, 5, 24))
+>B : Symbol(B, Decl(genericRecursiveImplicitConstructorErrors1.ts, 5, 26))
+>C : Symbol(C, Decl(genericRecursiveImplicitConstructorErrors1.ts, 5, 28))
+>PullSymbol : Symbol(PullSymbol, Decl(genericRecursiveImplicitConstructorErrors1.ts, 0, 37))
+
+ public findTypeParameter(name: string): PullTypeParameterSymbol;
+>findTypeParameter : Symbol(PullTypeSymbol.findTypeParameter, Decl(genericRecursiveImplicitConstructorErrors1.ts, 5, 51))
+>A : Symbol(A, Decl(genericRecursiveImplicitConstructorErrors1.ts, 6, 29))
+>B : Symbol(B, Decl(genericRecursiveImplicitConstructorErrors1.ts, 6, 31))
+>C : Symbol(C, Decl(genericRecursiveImplicitConstructorErrors1.ts, 6, 33))
+>name : Symbol(name, Decl(genericRecursiveImplicitConstructorErrors1.ts, 6, 36))
+>PullTypeParameterSymbol : Symbol(PullTypeParameterSymbol, Decl(genericRecursiveImplicitConstructorErrors1.ts, 7, 3))
+>A : Symbol(A, Decl(genericRecursiveImplicitConstructorErrors1.ts, 6, 29))
+>B : Symbol(B, Decl(genericRecursiveImplicitConstructorErrors1.ts, 6, 31))
+>C : Symbol(C, Decl(genericRecursiveImplicitConstructorErrors1.ts, 6, 33))
+ }
+ class PullTypeParameterSymbol extends PullTypeSymbol {
+>PullTypeParameterSymbol : Symbol(PullTypeParameterSymbol, Decl(genericRecursiveImplicitConstructorErrors1.ts, 7, 3))
+>A : Symbol(A, Decl(genericRecursiveImplicitConstructorErrors1.ts, 8, 33))
+>B : Symbol(B, Decl(genericRecursiveImplicitConstructorErrors1.ts, 8, 35))
+>C : Symbol(C, Decl(genericRecursiveImplicitConstructorErrors1.ts, 8, 37))
+>PullTypeSymbol : Symbol(PullTypeSymbol, Decl(genericRecursiveImplicitConstructorErrors1.ts, 4, 3))
+ }
+}
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/genericRecursiveImplicitConstructorErrors1.types b/tsc/testdata/baselines/reference/compiler/genericRecursiveImplicitConstructorErrors1.types
new file mode 100644
index 0000000000000..c50a5f3ff9812
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericRecursiveImplicitConstructorErrors1.types
@@ -0,0 +1,33 @@
+//// [tests/cases/compiler/genericRecursiveImplicitConstructorErrors1.ts] ////
+
+=== genericRecursiveImplicitConstructorErrors1.ts ===
+export declare namespace TypeScript {
+>TypeScript : typeof TypeScript
+
+ class PullSymbol { }
+>PullSymbol : PullSymbol
+
+ class PullSignatureSymbol extends PullSymbol {
+>PullSignatureSymbol : PullSignatureSymbol
+>PullSymbol : PullSymbol
+
+ public addSpecialization(signature: PullSignatureSymbol, typeArguments: PullTypeSymbol[]): void;
+>addSpecialization : (signature: PullSignatureSymbol, typeArguments: PullTypeSymbol[]) => void
+>signature : PullSignatureSymbol
+>typeArguments : PullTypeSymbol[]
+ }
+ class PullTypeSymbol extends PullSymbol {
+>PullTypeSymbol : PullTypeSymbol
+>PullSymbol : PullSymbol
+
+ public findTypeParameter(name: string): PullTypeParameterSymbol;
+>findTypeParameter : (name: string) => PullTypeParameterSymbol
+>name : string
+ }
+ class PullTypeParameterSymbol extends PullTypeSymbol {
+>PullTypeParameterSymbol : PullTypeParameterSymbol
+>PullTypeSymbol : typeof PullTypeSymbol
+ }
+}
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/genericTypeWithMultipleBases2.errors.txt b/tsc/testdata/baselines/reference/compiler/genericTypeWithMultipleBases2.errors.txt
new file mode 100644
index 0000000000000..eeab11ebed2c2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericTypeWithMultipleBases2.errors.txt
@@ -0,0 +1,30 @@
+genericTypeWithMultipleBases2.ts(14,1): error TS2454: Variable 'x' is used before being assigned.
+genericTypeWithMultipleBases2.ts(15,1): error TS2454: Variable 'x' is used before being assigned.
+genericTypeWithMultipleBases2.ts(16,1): error TS2454: Variable 'x' is used before being assigned.
+
+
+==== genericTypeWithMultipleBases2.ts (3 errors) ====
+ export interface I1 {
+ m1: () => void;
+ }
+
+ export interface I2 {
+ m2: () => void;
+ }
+
+ export interface I3 extends I2, I1 {
+ p1: T;
+ }
+
+ var x: I3;
+ x.p1;
+ ~
+!!! error TS2454: Variable 'x' is used before being assigned.
+ x.m1();
+ ~
+!!! error TS2454: Variable 'x' is used before being assigned.
+ x.m2();
+ ~
+!!! error TS2454: Variable 'x' is used before being assigned.
+
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/genericTypeWithMultipleBases2.js b/tsc/testdata/baselines/reference/compiler/genericTypeWithMultipleBases2.js
new file mode 100644
index 0000000000000..47e914745d9ac
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericTypeWithMultipleBases2.js
@@ -0,0 +1,29 @@
+//// [tests/cases/compiler/genericTypeWithMultipleBases2.ts] ////
+
+//// [genericTypeWithMultipleBases2.ts]
+export interface I1 {
+ m1: () => void;
+}
+
+export interface I2 {
+ m2: () => void;
+}
+
+export interface I3 extends I2, I1 {
+ p1: T;
+}
+
+var x: I3;
+x.p1;
+x.m1();
+x.m2();
+
+
+
+//// [genericTypeWithMultipleBases2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var x;
+x.p1;
+x.m1();
+x.m2();
diff --git a/tsc/testdata/baselines/reference/compiler/genericTypeWithMultipleBases2.symbols b/tsc/testdata/baselines/reference/compiler/genericTypeWithMultipleBases2.symbols
new file mode 100644
index 0000000000000..ee8c13d4c0c71
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericTypeWithMultipleBases2.symbols
@@ -0,0 +1,48 @@
+//// [tests/cases/compiler/genericTypeWithMultipleBases2.ts] ////
+
+=== genericTypeWithMultipleBases2.ts ===
+export interface I1 {
+>I1 : Symbol(I1, Decl(genericTypeWithMultipleBases2.ts, 0, 0))
+
+ m1: () => void;
+>m1 : Symbol(I1.m1, Decl(genericTypeWithMultipleBases2.ts, 0, 21))
+}
+
+export interface I2 {
+>I2 : Symbol(I2, Decl(genericTypeWithMultipleBases2.ts, 2, 1))
+
+ m2: () => void;
+>m2 : Symbol(I2.m2, Decl(genericTypeWithMultipleBases2.ts, 4, 21))
+}
+
+export interface I3 extends I2, I1 {
+>I3 : Symbol(I3, Decl(genericTypeWithMultipleBases2.ts, 6, 1))
+>T : Symbol(T, Decl(genericTypeWithMultipleBases2.ts, 8, 20))
+>I2 : Symbol(I2, Decl(genericTypeWithMultipleBases2.ts, 2, 1))
+>I1 : Symbol(I1, Decl(genericTypeWithMultipleBases2.ts, 0, 0))
+
+ p1: T;
+>p1 : Symbol(I3.p1, Decl(genericTypeWithMultipleBases2.ts, 8, 39))
+>T : Symbol(T, Decl(genericTypeWithMultipleBases2.ts, 8, 20))
+}
+
+var x: I3;
+>x : Symbol(x, Decl(genericTypeWithMultipleBases2.ts, 12, 3))
+>I3 : Symbol(I3, Decl(genericTypeWithMultipleBases2.ts, 6, 1))
+
+x.p1;
+>x.p1 : Symbol(I3.p1, Decl(genericTypeWithMultipleBases2.ts, 8, 39))
+>x : Symbol(x, Decl(genericTypeWithMultipleBases2.ts, 12, 3))
+>p1 : Symbol(I3.p1, Decl(genericTypeWithMultipleBases2.ts, 8, 39))
+
+x.m1();
+>x.m1 : Symbol(I1.m1, Decl(genericTypeWithMultipleBases2.ts, 0, 21))
+>x : Symbol(x, Decl(genericTypeWithMultipleBases2.ts, 12, 3))
+>m1 : Symbol(I1.m1, Decl(genericTypeWithMultipleBases2.ts, 0, 21))
+
+x.m2();
+>x.m2 : Symbol(I2.m2, Decl(genericTypeWithMultipleBases2.ts, 4, 21))
+>x : Symbol(x, Decl(genericTypeWithMultipleBases2.ts, 12, 3))
+>m2 : Symbol(I2.m2, Decl(genericTypeWithMultipleBases2.ts, 4, 21))
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/genericTypeWithMultipleBases2.types b/tsc/testdata/baselines/reference/compiler/genericTypeWithMultipleBases2.types
new file mode 100644
index 0000000000000..7e7d53f0df254
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericTypeWithMultipleBases2.types
@@ -0,0 +1,39 @@
+//// [tests/cases/compiler/genericTypeWithMultipleBases2.ts] ////
+
+=== genericTypeWithMultipleBases2.ts ===
+export interface I1 {
+ m1: () => void;
+>m1 : () => void
+}
+
+export interface I2 {
+ m2: () => void;
+>m2 : () => void
+}
+
+export interface I3 extends I2, I1 {
+ p1: T;
+>p1 : T
+}
+
+var x: I3;
+>x : I3
+
+x.p1;
+>x.p1 : number
+>x : I3
+>p1 : number
+
+x.m1();
+>x.m1() : void
+>x.m1 : () => void
+>x : I3
+>m1 : () => void
+
+x.m2();
+>x.m2() : void
+>x.m2 : () => void
+>x : I3
+>m2 : () => void
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/genericWithIndexerOfTypeParameterType2.errors.txt b/tsc/testdata/baselines/reference/compiler/genericWithIndexerOfTypeParameterType2.errors.txt
new file mode 100644
index 0000000000000..0d713d28bb96b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericWithIndexerOfTypeParameterType2.errors.txt
@@ -0,0 +1,23 @@
+genericWithIndexerOfTypeParameterType2.ts(2,5): error TS2564: Property '_itemsByKey' has no initializer and is not definitely assigned in the constructor.
+genericWithIndexerOfTypeParameterType2.ts(12,5): error TS2564: Property '__isNew' has no initializer and is not definitely assigned in the constructor.
+
+
+==== genericWithIndexerOfTypeParameterType2.ts (2 errors) ====
+ export class Collection {
+ _itemsByKey: { [key: string]: TItem; };
+ ~~~~~~~~~~~
+!!! error TS2564: Property '_itemsByKey' has no initializer and is not definitely assigned in the constructor.
+ }
+
+ export class List extends Collection{
+ Bar() {}
+ }
+
+ export class CollectionItem {}
+
+ export class ListItem extends CollectionItem {
+ __isNew: boolean;
+ ~~~~~~~
+!!! error TS2564: Property '__isNew' has no initializer and is not definitely assigned in the constructor.
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/genericWithIndexerOfTypeParameterType2.js b/tsc/testdata/baselines/reference/compiler/genericWithIndexerOfTypeParameterType2.js
new file mode 100644
index 0000000000000..22087829057a2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericWithIndexerOfTypeParameterType2.js
@@ -0,0 +1,35 @@
+//// [tests/cases/compiler/genericWithIndexerOfTypeParameterType2.ts] ////
+
+//// [genericWithIndexerOfTypeParameterType2.ts]
+export class Collection {
+ _itemsByKey: { [key: string]: TItem; };
+}
+
+export class List extends Collection{
+ Bar() {}
+}
+
+export class CollectionItem {}
+
+export class ListItem extends CollectionItem {
+ __isNew: boolean;
+}
+
+
+//// [genericWithIndexerOfTypeParameterType2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ListItem = exports.CollectionItem = exports.List = exports.Collection = void 0;
+class Collection {
+}
+exports.Collection = Collection;
+class List extends Collection {
+ Bar() { }
+}
+exports.List = List;
+class CollectionItem {
+}
+exports.CollectionItem = CollectionItem;
+class ListItem extends CollectionItem {
+}
+exports.ListItem = ListItem;
diff --git a/tsc/testdata/baselines/reference/compiler/genericWithIndexerOfTypeParameterType2.symbols b/tsc/testdata/baselines/reference/compiler/genericWithIndexerOfTypeParameterType2.symbols
new file mode 100644
index 0000000000000..b28f9ff99494a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericWithIndexerOfTypeParameterType2.symbols
@@ -0,0 +1,34 @@
+//// [tests/cases/compiler/genericWithIndexerOfTypeParameterType2.ts] ////
+
+=== genericWithIndexerOfTypeParameterType2.ts ===
+export class Collection {
+>Collection : Symbol(Collection, Decl(genericWithIndexerOfTypeParameterType2.ts, 0, 0))
+>TItem : Symbol(TItem, Decl(genericWithIndexerOfTypeParameterType2.ts, 0, 24))
+>CollectionItem : Symbol(CollectionItem, Decl(genericWithIndexerOfTypeParameterType2.ts, 6, 1))
+
+ _itemsByKey: { [key: string]: TItem; };
+>_itemsByKey : Symbol(Collection._itemsByKey, Decl(genericWithIndexerOfTypeParameterType2.ts, 0, 55))
+>key : Symbol(key, Decl(genericWithIndexerOfTypeParameterType2.ts, 1, 20))
+>TItem : Symbol(TItem, Decl(genericWithIndexerOfTypeParameterType2.ts, 0, 24))
+}
+
+export class List extends Collection{
+>List : Symbol(List, Decl(genericWithIndexerOfTypeParameterType2.ts, 2, 1))
+>Collection : Symbol(Collection, Decl(genericWithIndexerOfTypeParameterType2.ts, 0, 0))
+>ListItem : Symbol(ListItem, Decl(genericWithIndexerOfTypeParameterType2.ts, 8, 30))
+
+ Bar() {}
+>Bar : Symbol(List.Bar, Decl(genericWithIndexerOfTypeParameterType2.ts, 4, 47))
+}
+
+export class CollectionItem {}
+>CollectionItem : Symbol(CollectionItem, Decl(genericWithIndexerOfTypeParameterType2.ts, 6, 1))
+
+export class ListItem extends CollectionItem {
+>ListItem : Symbol(ListItem, Decl(genericWithIndexerOfTypeParameterType2.ts, 8, 30))
+>CollectionItem : Symbol(CollectionItem, Decl(genericWithIndexerOfTypeParameterType2.ts, 6, 1))
+
+ __isNew: boolean;
+>__isNew : Symbol(ListItem.__isNew, Decl(genericWithIndexerOfTypeParameterType2.ts, 10, 46))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/genericWithIndexerOfTypeParameterType2.types b/tsc/testdata/baselines/reference/compiler/genericWithIndexerOfTypeParameterType2.types
new file mode 100644
index 0000000000000..8ac8f0a0e990b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/genericWithIndexerOfTypeParameterType2.types
@@ -0,0 +1,30 @@
+//// [tests/cases/compiler/genericWithIndexerOfTypeParameterType2.ts] ////
+
+=== genericWithIndexerOfTypeParameterType2.ts ===
+export class Collection {
+>Collection : Collection
+
+ _itemsByKey: { [key: string]: TItem; };
+>_itemsByKey : { [key: string]: TItem; }
+>key : string
+}
+
+export class List extends Collection{
+>List : List
+>Collection : Collection
+
+ Bar() {}
+>Bar : () => void
+}
+
+export class CollectionItem {}
+>CollectionItem : CollectionItem
+
+export class ListItem extends CollectionItem {
+>ListItem : ListItem
+>CollectionItem : CollectionItem
+
+ __isNew: boolean;
+>__isNew : boolean
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/importDeclWithExportModifier.errors.txt b/tsc/testdata/baselines/reference/compiler/importDeclWithExportModifier.errors.txt
new file mode 100644
index 0000000000000..8da059494431f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importDeclWithExportModifier.errors.txt
@@ -0,0 +1,16 @@
+importDeclWithExportModifier.ts(5,19): error TS2708: Cannot use namespace 'x' as a value.
+importDeclWithExportModifier.ts(5,21): error TS2694: Namespace 'x' has no exported member 'c'.
+
+
+==== importDeclWithExportModifier.ts (2 errors) ====
+ namespace x {
+ interface c {
+ }
+ }
+ export import a = x.c;
+ ~
+!!! error TS2708: Cannot use namespace 'x' as a value.
+ ~
+!!! error TS2694: Namespace 'x' has no exported member 'c'.
+ var b: a;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/importDeclWithExportModifier.js b/tsc/testdata/baselines/reference/compiler/importDeclWithExportModifier.js
new file mode 100644
index 0000000000000..d6854d687e0a1
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importDeclWithExportModifier.js
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/importDeclWithExportModifier.ts] ////
+
+//// [importDeclWithExportModifier.ts]
+namespace x {
+ interface c {
+ }
+}
+export import a = x.c;
+var b: a;
+
+
+//// [importDeclWithExportModifier.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.a = void 0;
+exports.a = x.c;
+var b;
diff --git a/tsc/testdata/baselines/reference/compiler/importDeclWithExportModifier.symbols b/tsc/testdata/baselines/reference/compiler/importDeclWithExportModifier.symbols
new file mode 100644
index 0000000000000..4a640c83b1667
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importDeclWithExportModifier.symbols
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/importDeclWithExportModifier.ts] ////
+
+=== importDeclWithExportModifier.ts ===
+namespace x {
+>x : Symbol(x, Decl(importDeclWithExportModifier.ts, 0, 0))
+
+ interface c {
+>c : Symbol(c, Decl(importDeclWithExportModifier.ts, 0, 13))
+ }
+}
+export import a = x.c;
+>a : Symbol(a, Decl(importDeclWithExportModifier.ts, 3, 1))
+>x : Symbol(x, Decl(importDeclWithExportModifier.ts, 0, 0))
+
+var b: a;
+>b : Symbol(b, Decl(importDeclWithExportModifier.ts, 5, 3))
+>a : Symbol(a, Decl(importDeclWithExportModifier.ts, 3, 1))
+
diff --git a/tsc/testdata/baselines/reference/compiler/importDeclWithExportModifier.types b/tsc/testdata/baselines/reference/compiler/importDeclWithExportModifier.types
new file mode 100644
index 0000000000000..56d8610ee0836
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importDeclWithExportModifier.types
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/importDeclWithExportModifier.ts] ////
+
+=== importDeclWithExportModifier.ts ===
+namespace x {
+ interface c {
+ }
+}
+export import a = x.c;
+>a : any
+>x : any
+>c : any
+
+var b: a;
+>b : a
+
diff --git a/tsc/testdata/baselines/reference/compiler/importShadowsGlobalName.errors.txt b/tsc/testdata/baselines/reference/compiler/importShadowsGlobalName.errors.txt
new file mode 100644
index 0000000000000..e6bf1c2970e46
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importShadowsGlobalName.errors.txt
@@ -0,0 +1,13 @@
+Bar.ts(1,24): error TS2307: Cannot find module 'Foo' or its corresponding type declarations.
+
+
+==== Bar.ts (1 errors) ====
+ import Error = require('Foo');
+ ~~~~~
+!!! error TS2307: Cannot find module 'Foo' or its corresponding type declarations.
+ class Bar extends Error {}
+ export = Bar;
+==== Foo.ts (0 errors) ====
+ class Foo {}
+ export = Foo;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/importShadowsGlobalName.js b/tsc/testdata/baselines/reference/compiler/importShadowsGlobalName.js
new file mode 100644
index 0000000000000..ad3538db5e0f6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importShadowsGlobalName.js
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/importShadowsGlobalName.ts] ////
+
+//// [Foo.ts]
+class Foo {}
+export = Foo;
+
+//// [Bar.ts]
+import Error = require('Foo');
+class Bar extends Error {}
+export = Bar;
+
+//// [Bar.js]
+"use strict";
+const Error = require("Foo");
+class Bar extends Error {
+}
+module.exports = Bar;
diff --git a/tsc/testdata/baselines/reference/compiler/importShadowsGlobalName.symbols b/tsc/testdata/baselines/reference/compiler/importShadowsGlobalName.symbols
new file mode 100644
index 0000000000000..489990f9f66c0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importShadowsGlobalName.symbols
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/importShadowsGlobalName.ts] ////
+
+=== Bar.ts ===
+import Error = require('Foo');
+>Error : Symbol(Error, Decl(Bar.ts, 0, 0))
+
+class Bar extends Error {}
+>Bar : Symbol(Bar, Decl(Bar.ts, 0, 30))
+>Error : Symbol(Error, Decl(Bar.ts, 0, 0))
+
+export = Bar;
+>Bar : Symbol(Bar, Decl(Bar.ts, 0, 30))
+
diff --git a/tsc/testdata/baselines/reference/compiler/importShadowsGlobalName.types b/tsc/testdata/baselines/reference/compiler/importShadowsGlobalName.types
new file mode 100644
index 0000000000000..76f88a0a3b16e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importShadowsGlobalName.types
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/importShadowsGlobalName.ts] ////
+
+=== Bar.ts ===
+import Error = require('Foo');
+>Error : any
+
+class Bar extends Error {}
+>Bar : Bar
+>Error : any
+
+export = Bar;
+>Bar : Bar
+
diff --git a/tsc/testdata/baselines/reference/compiler/import_reference-exported-alias.errors.txt b/tsc/testdata/baselines/reference/compiler/import_reference-exported-alias.errors.txt
new file mode 100644
index 0000000000000..727bb97e5dcf8
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_reference-exported-alias.errors.txt
@@ -0,0 +1,25 @@
+file2.ts(1,24): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+
+
+==== file2.ts (1 errors) ====
+ import appJs = require("file1");
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ import Services = appJs.Services;
+ import UserServices = Services.UserServices;
+ var x = new UserServices().getUserName();
+
+==== file1.ts (0 errors) ====
+ namespace App {
+ export namespace Services {
+ export class UserServices {
+ public getUserName(): string {
+ return "Bill Gates";
+ }
+ }
+ }
+ }
+
+ import Mod = App;
+ export = Mod;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/import_reference-exported-alias.js b/tsc/testdata/baselines/reference/compiler/import_reference-exported-alias.js
new file mode 100644
index 0000000000000..c8857f038a940
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_reference-exported-alias.js
@@ -0,0 +1,30 @@
+//// [tests/cases/compiler/import_reference-exported-alias.ts] ////
+
+//// [file1.ts]
+namespace App {
+ export namespace Services {
+ export class UserServices {
+ public getUserName(): string {
+ return "Bill Gates";
+ }
+ }
+ }
+}
+
+import Mod = App;
+export = Mod;
+
+//// [file2.ts]
+import appJs = require("file1");
+import Services = appJs.Services;
+import UserServices = Services.UserServices;
+var x = new UserServices().getUserName();
+
+
+//// [file2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const appJs = require("file1");
+var Services = appJs.Services;
+var UserServices = Services.UserServices;
+var x = new UserServices().getUserName();
diff --git a/tsc/testdata/baselines/reference/compiler/import_reference-exported-alias.symbols b/tsc/testdata/baselines/reference/compiler/import_reference-exported-alias.symbols
new file mode 100644
index 0000000000000..683337e6a5854
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_reference-exported-alias.symbols
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/import_reference-exported-alias.ts] ////
+
+=== file2.ts ===
+import appJs = require("file1");
+>appJs : Symbol(appJs, Decl(file2.ts, 0, 0))
+
+import Services = appJs.Services;
+>Services : Symbol(Services, Decl(file2.ts, 0, 32))
+>appJs : Symbol(appJs, Decl(file2.ts, 0, 0))
+>Services : Symbol(appJs)
+
+import UserServices = Services.UserServices;
+>UserServices : Symbol(UserServices, Decl(file2.ts, 1, 33))
+>Services : Symbol(Services, Decl(file2.ts, 0, 32))
+>UserServices : Symbol(appJs)
+
+var x = new UserServices().getUserName();
+>x : Symbol(x, Decl(file2.ts, 3, 3))
+>UserServices : Symbol(UserServices, Decl(file2.ts, 1, 33))
+
diff --git a/tsc/testdata/baselines/reference/compiler/import_reference-exported-alias.types b/tsc/testdata/baselines/reference/compiler/import_reference-exported-alias.types
new file mode 100644
index 0000000000000..6aa132b329cf6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_reference-exported-alias.types
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/import_reference-exported-alias.ts] ////
+
+=== file2.ts ===
+import appJs = require("file1");
+>appJs : any
+
+import Services = appJs.Services;
+>Services : any
+>appJs : any
+>Services : any
+
+import UserServices = Services.UserServices;
+>UserServices : any
+>Services : any
+>UserServices : any
+
+var x = new UserServices().getUserName();
+>x : any
+>new UserServices().getUserName() : any
+>new UserServices().getUserName : any
+>new UserServices() : any
+>UserServices : any
+>getUserName : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/import_reference-to-type-alias.errors.txt b/tsc/testdata/baselines/reference/compiler/import_reference-to-type-alias.errors.txt
new file mode 100644
index 0000000000000..f000e2bdae831
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_reference-to-type-alias.errors.txt
@@ -0,0 +1,21 @@
+file2.ts(1,24): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+
+
+==== file2.ts (1 errors) ====
+ import appJs = require("file1");
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ import Services = appJs.App.Services;
+ var x = new Services.UserServices().getUserName();
+
+==== file1.ts (0 errors) ====
+ export namespace App {
+ export namespace Services {
+ export class UserServices {
+ public getUserName(): string {
+ return "Bill Gates";
+ }
+ }
+ }
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/import_reference-to-type-alias.js b/tsc/testdata/baselines/reference/compiler/import_reference-to-type-alias.js
new file mode 100644
index 0000000000000..e45e803f37fa3
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_reference-to-type-alias.js
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/import_reference-to-type-alias.ts] ////
+
+//// [file1.ts]
+export namespace App {
+ export namespace Services {
+ export class UserServices {
+ public getUserName(): string {
+ return "Bill Gates";
+ }
+ }
+ }
+}
+
+//// [file2.ts]
+import appJs = require("file1");
+import Services = appJs.App.Services;
+var x = new Services.UserServices().getUserName();
+
+
+//// [file2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const appJs = require("file1");
+var Services = appJs.App.Services;
+var x = new Services.UserServices().getUserName();
diff --git a/tsc/testdata/baselines/reference/compiler/import_reference-to-type-alias.symbols b/tsc/testdata/baselines/reference/compiler/import_reference-to-type-alias.symbols
new file mode 100644
index 0000000000000..6c674cc4f7c80
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_reference-to-type-alias.symbols
@@ -0,0 +1,16 @@
+//// [tests/cases/compiler/import_reference-to-type-alias.ts] ////
+
+=== file2.ts ===
+import appJs = require("file1");
+>appJs : Symbol(appJs, Decl(file2.ts, 0, 0))
+
+import Services = appJs.App.Services;
+>Services : Symbol(Services, Decl(file2.ts, 0, 32))
+>appJs : Symbol(appJs, Decl(file2.ts, 0, 0))
+>App : Symbol(appJs)
+>Services : Symbol(appJs)
+
+var x = new Services.UserServices().getUserName();
+>x : Symbol(x, Decl(file2.ts, 2, 3))
+>Services : Symbol(Services, Decl(file2.ts, 0, 32))
+
diff --git a/tsc/testdata/baselines/reference/compiler/import_reference-to-type-alias.types b/tsc/testdata/baselines/reference/compiler/import_reference-to-type-alias.types
new file mode 100644
index 0000000000000..91af8d3b30982
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_reference-to-type-alias.types
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/import_reference-to-type-alias.ts] ////
+
+=== file2.ts ===
+import appJs = require("file1");
+>appJs : any
+
+import Services = appJs.App.Services;
+>Services : any
+>appJs : any
+>App : any
+>Services : any
+
+var x = new Services.UserServices().getUserName();
+>x : any
+>new Services.UserServices().getUserName() : any
+>new Services.UserServices().getUserName : any
+>new Services.UserServices() : any
+>Services.UserServices : any
+>Services : any
+>UserServices : any
+>getUserName : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.errors.txt b/tsc/testdata/baselines/reference/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.errors.txt
new file mode 100644
index 0000000000000..834afc632a5e2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.errors.txt
@@ -0,0 +1,19 @@
+a.ts(4,9): error TS2454: Variable 'testData' is used before being assigned.
+
+
+==== a.ts (1 errors) ====
+ ///
+ import ITest = require('ITest');
+ var testData: ITest[];
+ var p = testData[0].name;
+ ~~~~~~~~
+!!! error TS2454: Variable 'testData' is used before being assigned.
+
+==== b.ts (0 errors) ====
+ declare module "ITest" {
+ interface Name {
+ name: string;
+ }
+ export = Name;
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.js b/tsc/testdata/baselines/reference/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.js
new file mode 100644
index 0000000000000..62bce172df9b2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.js
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.ts] ////
+
+//// [b.ts]
+declare module "ITest" {
+ interface Name {
+ name: string;
+ }
+ export = Name;
+}
+
+//// [a.ts]
+///
+import ITest = require('ITest');
+var testData: ITest[];
+var p = testData[0].name;
+
+
+//// [b.js]
+"use strict";
+//// [a.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var testData;
+var p = testData[0].name;
diff --git a/tsc/testdata/baselines/reference/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.symbols b/tsc/testdata/baselines/reference/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.symbols
new file mode 100644
index 0000000000000..e96d3615a7255
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.symbols
@@ -0,0 +1,31 @@
+//// [tests/cases/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.ts] ////
+
+=== a.ts ===
+///
+import ITest = require('ITest');
+>ITest : Symbol(ITest, Decl(a.ts, 0, 0))
+
+var testData: ITest[];
+>testData : Symbol(testData, Decl(a.ts, 2, 3))
+>ITest : Symbol(ITest, Decl(a.ts, 0, 0))
+
+var p = testData[0].name;
+>p : Symbol(p, Decl(a.ts, 3, 3))
+>testData[0].name : Symbol(ITest.name, Decl(b.ts, 1, 20))
+>testData : Symbol(testData, Decl(a.ts, 2, 3))
+>name : Symbol(ITest.name, Decl(b.ts, 1, 20))
+
+=== b.ts ===
+declare module "ITest" {
+>"ITest" : Symbol("ITest", Decl(b.ts, 0, 0))
+
+ interface Name {
+>Name : Symbol(Name, Decl(b.ts, 0, 24))
+
+ name: string;
+>name : Symbol(Name.name, Decl(b.ts, 1, 20))
+ }
+ export = Name;
+>Name : Symbol(Name, Decl(b.ts, 0, 24))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.types b/tsc/testdata/baselines/reference/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.types
new file mode 100644
index 0000000000000..c612d961c91af
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.types
@@ -0,0 +1,30 @@
+//// [tests/cases/compiler/import_unneeded-require-when-referenecing-aliased-type-throug-array.ts] ////
+
+=== a.ts ===
+///
+import ITest = require('ITest');
+>ITest : any
+
+var testData: ITest[];
+>testData : ITest[]
+
+var p = testData[0].name;
+>p : string
+>testData[0].name : string
+>testData[0] : ITest
+>testData : ITest[]
+>0 : 0
+>name : string
+
+=== b.ts ===
+declare module "ITest" {
+>"ITest" : typeof import("ITest")
+
+ interface Name {
+ name: string;
+>name : string
+ }
+ export = Name;
+>Name : Name
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/import_var-referencing-an-imported-module-alias.errors.txt b/tsc/testdata/baselines/reference/compiler/import_var-referencing-an-imported-module-alias.errors.txt
new file mode 100644
index 0000000000000..ce2227488c2f7
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_var-referencing-an-imported-module-alias.errors.txt
@@ -0,0 +1,13 @@
+consumer.ts(1,23): error TS2307: Cannot find module 'host' or its corresponding type declarations.
+
+
+==== consumer.ts (1 errors) ====
+ import host = require("host");
+ ~~~~~~
+!!! error TS2307: Cannot find module 'host' or its corresponding type declarations.
+ var hostVar = host;
+ var v = new hostVar.Host();
+
+==== host.ts (0 errors) ====
+ export class Host { }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/import_var-referencing-an-imported-module-alias.js b/tsc/testdata/baselines/reference/compiler/import_var-referencing-an-imported-module-alias.js
new file mode 100644
index 0000000000000..213a190c278ef
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_var-referencing-an-imported-module-alias.js
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/import_var-referencing-an-imported-module-alias.ts] ////
+
+//// [host.ts]
+export class Host { }
+
+//// [consumer.ts]
+import host = require("host");
+var hostVar = host;
+var v = new hostVar.Host();
+
+
+//// [consumer.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const host = require("host");
+var hostVar = host;
+var v = new hostVar.Host();
diff --git a/tsc/testdata/baselines/reference/compiler/import_var-referencing-an-imported-module-alias.symbols b/tsc/testdata/baselines/reference/compiler/import_var-referencing-an-imported-module-alias.symbols
new file mode 100644
index 0000000000000..cee548391f971
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_var-referencing-an-imported-module-alias.symbols
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/import_var-referencing-an-imported-module-alias.ts] ////
+
+=== consumer.ts ===
+import host = require("host");
+>host : Symbol(host, Decl(consumer.ts, 0, 0))
+
+var hostVar = host;
+>hostVar : Symbol(hostVar, Decl(consumer.ts, 1, 3))
+>host : Symbol(host, Decl(consumer.ts, 0, 0))
+
+var v = new hostVar.Host();
+>v : Symbol(v, Decl(consumer.ts, 2, 3))
+>hostVar : Symbol(hostVar, Decl(consumer.ts, 1, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/import_var-referencing-an-imported-module-alias.types b/tsc/testdata/baselines/reference/compiler/import_var-referencing-an-imported-module-alias.types
new file mode 100644
index 0000000000000..b13f1fa2a40e3
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/import_var-referencing-an-imported-module-alias.types
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/import_var-referencing-an-imported-module-alias.ts] ////
+
+=== consumer.ts ===
+import host = require("host");
+>host : any
+
+var hostVar = host;
+>hostVar : any
+>host : any
+
+var v = new hostVar.Host();
+>v : any
+>new hostVar.Host() : any
+>hostVar.Host : any
+>hostVar : any
+>Host : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/importedAliasesInTypePositions.errors.txt b/tsc/testdata/baselines/reference/compiler/importedAliasesInTypePositions.errors.txt
new file mode 100644
index 0000000000000..35a2b69a5d925
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importedAliasesInTypePositions.errors.txt
@@ -0,0 +1,22 @@
+file2.ts(1,27): error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+
+
+==== file2.ts (1 errors) ====
+ import RT_ALIAS = require("file1");
+ ~~~~~~~
+!!! error TS2307: Cannot find module 'file1' or its corresponding type declarations.
+ import ReferredTo = RT_ALIAS.elaborate.nested.mod.name.ReferredTo;
+
+ export namespace ImportingModule {
+ class UsesReferredType {
+ constructor(private referred: ReferredTo) { }
+ }
+ }
+==== file1.ts (0 errors) ====
+ export namespace elaborate.nested.mod.name {
+ export class ReferredTo {
+ doSomething(): void {
+ }
+ }
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/importedAliasesInTypePositions.js b/tsc/testdata/baselines/reference/compiler/importedAliasesInTypePositions.js
new file mode 100644
index 0000000000000..5b17940a6fd0c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importedAliasesInTypePositions.js
@@ -0,0 +1,32 @@
+//// [tests/cases/compiler/importedAliasesInTypePositions.ts] ////
+
+//// [file1.ts]
+export namespace elaborate.nested.mod.name {
+ export class ReferredTo {
+ doSomething(): void {
+ }
+ }
+}
+
+//// [file2.ts]
+import RT_ALIAS = require("file1");
+import ReferredTo = RT_ALIAS.elaborate.nested.mod.name.ReferredTo;
+
+export namespace ImportingModule {
+ class UsesReferredType {
+ constructor(private referred: ReferredTo) { }
+ }
+}
+
+//// [file2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ImportingModule = void 0;
+var ImportingModule;
+(function (ImportingModule) {
+ class UsesReferredType {
+ constructor(referred) {
+ this.referred = referred;
+ }
+ }
+})(ImportingModule || (exports.ImportingModule = ImportingModule = {}));
diff --git a/tsc/testdata/baselines/reference/compiler/importedAliasesInTypePositions.symbols b/tsc/testdata/baselines/reference/compiler/importedAliasesInTypePositions.symbols
new file mode 100644
index 0000000000000..f88dc0a3830ec
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importedAliasesInTypePositions.symbols
@@ -0,0 +1,26 @@
+//// [tests/cases/compiler/importedAliasesInTypePositions.ts] ////
+
+=== file2.ts ===
+import RT_ALIAS = require("file1");
+>RT_ALIAS : Symbol(RT_ALIAS, Decl(file2.ts, 0, 0))
+
+import ReferredTo = RT_ALIAS.elaborate.nested.mod.name.ReferredTo;
+>ReferredTo : Symbol(ReferredTo, Decl(file2.ts, 0, 35))
+>RT_ALIAS : Symbol(RT_ALIAS, Decl(file2.ts, 0, 0))
+>elaborate : Symbol(RT_ALIAS)
+>nested : Symbol(RT_ALIAS)
+>mod : Symbol(RT_ALIAS)
+>name : Symbol(RT_ALIAS)
+>ReferredTo : Symbol(RT_ALIAS)
+
+export namespace ImportingModule {
+>ImportingModule : Symbol(ImportingModule, Decl(file2.ts, 1, 66))
+
+ class UsesReferredType {
+>UsesReferredType : Symbol(UsesReferredType, Decl(file2.ts, 3, 34))
+
+ constructor(private referred: ReferredTo) { }
+>referred : Symbol(UsesReferredType.referred, Decl(file2.ts, 5, 20))
+>ReferredTo : Symbol(ReferredTo, Decl(file2.ts, 0, 35))
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/importedAliasesInTypePositions.types b/tsc/testdata/baselines/reference/compiler/importedAliasesInTypePositions.types
new file mode 100644
index 0000000000000..26d26993559c6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importedAliasesInTypePositions.types
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/importedAliasesInTypePositions.ts] ////
+
+=== file2.ts ===
+import RT_ALIAS = require("file1");
+>RT_ALIAS : any
+
+import ReferredTo = RT_ALIAS.elaborate.nested.mod.name.ReferredTo;
+>ReferredTo : any
+>RT_ALIAS : any
+>elaborate : any
+>nested : any
+>mod : any
+>name : any
+>ReferredTo : any
+
+export namespace ImportingModule {
+>ImportingModule : typeof ImportingModule
+
+ class UsesReferredType {
+>UsesReferredType : UsesReferredType
+
+ constructor(private referred: ReferredTo) { }
+>referred : ReferredTo
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/importedModuleClassNameClash.js b/tsc/testdata/baselines/reference/compiler/importedModuleClassNameClash.js
new file mode 100644
index 0000000000000..66ac31c0f61b1
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importedModuleClassNameClash.js
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/importedModuleClassNameClash.ts] ////
+
+//// [importedModuleClassNameClash.ts]
+import foo = m1;
+
+export namespace m1 { }
+
+class foo { }
+
+
+//// [importedModuleClassNameClash.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+class foo {
+}
diff --git a/tsc/testdata/baselines/reference/compiler/importedModuleClassNameClash.symbols b/tsc/testdata/baselines/reference/compiler/importedModuleClassNameClash.symbols
new file mode 100644
index 0000000000000..651d73786fbe6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importedModuleClassNameClash.symbols
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/importedModuleClassNameClash.ts] ////
+
+=== importedModuleClassNameClash.ts ===
+import foo = m1;
+>foo : Symbol(foo, Decl(importedModuleClassNameClash.ts, 0, 0), Decl(importedModuleClassNameClash.ts, 2, 23))
+>m1 : Symbol(foo, Decl(importedModuleClassNameClash.ts, 0, 16))
+
+export namespace m1 { }
+>m1 : Symbol(foo, Decl(importedModuleClassNameClash.ts, 0, 16))
+
+class foo { }
+>foo : Symbol(foo, Decl(importedModuleClassNameClash.ts, 0, 0), Decl(importedModuleClassNameClash.ts, 2, 23))
+
diff --git a/tsc/testdata/baselines/reference/compiler/importedModuleClassNameClash.types b/tsc/testdata/baselines/reference/compiler/importedModuleClassNameClash.types
new file mode 100644
index 0000000000000..14001567c40b4
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importedModuleClassNameClash.types
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/importedModuleClassNameClash.ts] ////
+
+=== importedModuleClassNameClash.ts ===
+import foo = m1;
+>foo : typeof foo
+>m1 : error
+
+export namespace m1 { }
+
+class foo { }
+>foo : foo
+
diff --git a/tsc/testdata/baselines/reference/compiler/importsInAmbientModules1.errors.txt b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules1.errors.txt
new file mode 100644
index 0000000000000..436ab51ab60d8
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules1.errors.txt
@@ -0,0 +1,12 @@
+main.ts(2,21): error TS2307: Cannot find module 'external' or its corresponding type declarations.
+
+
+==== external.d.ts (0 errors) ====
+ export var x: number
+
+==== main.ts (1 errors) ====
+ declare module "M" {
+ import {x} from "external"
+ ~~~~~~~~~~
+!!! error TS2307: Cannot find module 'external' or its corresponding type declarations.
+ }
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/importsInAmbientModules1.js b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules1.js
new file mode 100644
index 0000000000000..11e2930d8f8de
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules1.js
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/importsInAmbientModules1.ts] ////
+
+//// [external.d.ts]
+export var x: number
+
+//// [main.ts]
+declare module "M" {
+ import {x} from "external"
+}
+
+//// [main.js]
+"use strict";
diff --git a/tsc/testdata/baselines/reference/compiler/importsInAmbientModules1.symbols b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules1.symbols
new file mode 100644
index 0000000000000..847c69eea3dca
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules1.symbols
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/importsInAmbientModules1.ts] ////
+
+=== external.d.ts ===
+export var x: number
+>x : Symbol(x, Decl(external.d.ts, 0, 10))
+
+=== main.ts ===
+declare module "M" {
+>"M" : Symbol("M", Decl(main.ts, 0, 0))
+
+ import {x} from "external"
+>x : Symbol(x, Decl(main.ts, 1, 12))
+}
diff --git a/tsc/testdata/baselines/reference/compiler/importsInAmbientModules1.types b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules1.types
new file mode 100644
index 0000000000000..46496efd1ad6d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules1.types
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/importsInAmbientModules1.ts] ////
+
+=== external.d.ts ===
+export var x: number
+>x : number
+
+=== main.ts ===
+declare module "M" {
+>"M" : typeof import("M")
+
+ import {x} from "external"
+>x : any
+}
diff --git a/tsc/testdata/baselines/reference/compiler/importsInAmbientModules2.errors.txt b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules2.errors.txt
new file mode 100644
index 0000000000000..8298f3699a8a5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules2.errors.txt
@@ -0,0 +1,12 @@
+main.ts(2,19): error TS2307: Cannot find module 'external' or its corresponding type declarations.
+
+
+==== external.d.ts (0 errors) ====
+ export default class C {}
+
+==== main.ts (1 errors) ====
+ declare module "M" {
+ import C from "external"
+ ~~~~~~~~~~
+!!! error TS2307: Cannot find module 'external' or its corresponding type declarations.
+ }
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/importsInAmbientModules2.js b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules2.js
new file mode 100644
index 0000000000000..d7c7067fe7419
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules2.js
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/importsInAmbientModules2.ts] ////
+
+//// [external.d.ts]
+export default class C {}
+
+//// [main.ts]
+declare module "M" {
+ import C from "external"
+}
+
+//// [main.js]
+"use strict";
diff --git a/tsc/testdata/baselines/reference/compiler/importsInAmbientModules2.symbols b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules2.symbols
new file mode 100644
index 0000000000000..109f2d87a727e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules2.symbols
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/importsInAmbientModules2.ts] ////
+
+=== external.d.ts ===
+export default class C {}
+>C : Symbol(C, Decl(external.d.ts, 0, 0))
+
+=== main.ts ===
+declare module "M" {
+>"M" : Symbol("M", Decl(main.ts, 0, 0))
+
+ import C from "external"
+>C : Symbol(C, Decl(main.ts, 1, 10))
+}
diff --git a/tsc/testdata/baselines/reference/compiler/importsInAmbientModules2.types b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules2.types
new file mode 100644
index 0000000000000..5615063778860
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules2.types
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/importsInAmbientModules2.ts] ////
+
+=== external.d.ts ===
+export default class C {}
+>C : C
+
+=== main.ts ===
+declare module "M" {
+>"M" : typeof import("M")
+
+ import C from "external"
+>C : any
+}
diff --git a/tsc/testdata/baselines/reference/compiler/importsInAmbientModules3.errors.txt b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules3.errors.txt
new file mode 100644
index 0000000000000..660bb8860e71f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules3.errors.txt
@@ -0,0 +1,12 @@
+main.ts(2,24): error TS2307: Cannot find module 'external' or its corresponding type declarations.
+
+
+==== main.ts (1 errors) ====
+ declare module "M" {
+ import C = require("external");
+ ~~~~~~~~~~
+!!! error TS2307: Cannot find module 'external' or its corresponding type declarations.
+ }
+==== external.d.ts (0 errors) ====
+ export default class C {}
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/importsInAmbientModules3.js b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules3.js
new file mode 100644
index 0000000000000..c47017aa82a0f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules3.js
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/importsInAmbientModules3.ts] ////
+
+//// [external.d.ts]
+export default class C {}
+
+//// [main.ts]
+declare module "M" {
+ import C = require("external");
+}
+
+//// [main.js]
+"use strict";
diff --git a/tsc/testdata/baselines/reference/compiler/importsInAmbientModules3.symbols b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules3.symbols
new file mode 100644
index 0000000000000..9e3c3ede9ff59
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules3.symbols
@@ -0,0 +1,9 @@
+//// [tests/cases/compiler/importsInAmbientModules3.ts] ////
+
+=== main.ts ===
+declare module "M" {
+>"M" : Symbol("M", Decl(main.ts, 0, 0))
+
+ import C = require("external");
+>C : Symbol(C, Decl(main.ts, 0, 20))
+}
diff --git a/tsc/testdata/baselines/reference/compiler/importsInAmbientModules3.types b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules3.types
new file mode 100644
index 0000000000000..d4ef862bbfb13
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/importsInAmbientModules3.types
@@ -0,0 +1,9 @@
+//// [tests/cases/compiler/importsInAmbientModules3.ts] ////
+
+=== main.ts ===
+declare module "M" {
+>"M" : typeof import("M")
+
+ import C = require("external");
+>C : any
+}
diff --git a/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).errors.txt b/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).errors.txt
new file mode 100644
index 0000000000000..e4ba724320001
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).errors.txt
@@ -0,0 +1,12 @@
+error TS5053: Option 'mapRoot' cannot be specified with option 'inlineSourceMap'.
+error TS5053: Option 'sourceMap' cannot be specified with option 'inlineSourceMap'.
+
+
+!!! error TS5053: Option 'mapRoot' cannot be specified with option 'inlineSourceMap'.
+!!! error TS5053: Option 'sourceMap' cannot be specified with option 'inlineSourceMap'.
+==== inlineSourceMap2.ts (0 errors) ====
+ // configuration errors
+
+ var x = 0;
+ console.log(x);
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).js b/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).js
new file mode 100644
index 0000000000000..dcf6697f0e4d9
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).js
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/inlineSourceMap2.ts] ////
+
+//// [inlineSourceMap2.ts]
+// configuration errors
+
+var x = 0;
+console.log(x);
+
+
+//// [inlineSourceMap2.js]
+"use strict";
+// configuration errors
+var x = 0;
+console.log(x);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lU291cmNlTWFwMi5qcyIsInNvdXJjZVJvb3QiOiJmaWxlOi8vL2ZvbGRlci8iLCJzb3VyY2VzIjpbImlubGluZVNvdXJjZU1hcDIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVCQUF1QjtBQUV2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDIn0=
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).sourcemap.txt b/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).sourcemap.txt
new file mode 100644
index 0000000000000..219b03b5b6825
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).sourcemap.txt
@@ -0,0 +1,71 @@
+===================================================================
+JsFile: inlineSourceMap2.js
+mapUrl: data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lU291cmNlTWFwMi5qcyIsInNvdXJjZVJvb3QiOiJmaWxlOi8vL2ZvbGRlci8iLCJzb3VyY2VzIjpbImlubGluZVNvdXJjZU1hcDIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVCQUF1QjtBQUV2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDIn0=
+sourceRoot: file:///folder/
+sources: inlineSourceMap2.ts
+===================================================================
+-------------------------------------------------------------------
+emittedFile:out/inlineSourceMap2.js
+sourceFile:inlineSourceMap2.ts
+-------------------------------------------------------------------
+>>>"use strict";
+>>>// configuration errors
+1 >
+2 >^^^^^^^^^^^^^^^^^^^^^^^
+1 >
+2 >// configuration errors
+1 >Emitted(2, 1) Source(1, 1) + SourceIndex(0)
+2 >Emitted(2, 24) Source(1, 24) + SourceIndex(0)
+---
+>>>var x = 0;
+1 >
+2 >^^^^
+3 > ^
+4 > ^^^
+5 > ^
+6 > ^
+7 > ^^^^^^->
+1 >
+ >
+ >
+2 >var
+3 > x
+4 > =
+5 > 0
+6 > ;
+1 >Emitted(3, 1) Source(3, 1) + SourceIndex(0)
+2 >Emitted(3, 5) Source(3, 5) + SourceIndex(0)
+3 >Emitted(3, 6) Source(3, 6) + SourceIndex(0)
+4 >Emitted(3, 9) Source(3, 9) + SourceIndex(0)
+5 >Emitted(3, 10) Source(3, 10) + SourceIndex(0)
+6 >Emitted(3, 11) Source(3, 11) + SourceIndex(0)
+---
+>>>console.log(x);
+1->
+2 >^^^^^^^
+3 > ^
+4 > ^^^
+5 > ^
+6 > ^
+7 > ^
+8 > ^
+9 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^->
+1->
+ >
+2 >console
+3 > .
+4 > log
+5 > (
+6 > x
+7 > )
+8 > ;
+1->Emitted(4, 1) Source(4, 1) + SourceIndex(0)
+2 >Emitted(4, 8) Source(4, 8) + SourceIndex(0)
+3 >Emitted(4, 9) Source(4, 9) + SourceIndex(0)
+4 >Emitted(4, 12) Source(4, 12) + SourceIndex(0)
+5 >Emitted(4, 13) Source(4, 13) + SourceIndex(0)
+6 >Emitted(4, 14) Source(4, 14) + SourceIndex(0)
+7 >Emitted(4, 15) Source(4, 15) + SourceIndex(0)
+8 >Emitted(4, 16) Source(4, 16) + SourceIndex(0)
+---
+>>>//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lU291cmNlTWFwMi5qcyIsInNvdXJjZVJvb3QiOiJmaWxlOi8vL2ZvbGRlci8iLCJzb3VyY2VzIjpbImlubGluZVNvdXJjZU1hcDIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVCQUF1QjtBQUV2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDIn0=
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).symbols b/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).symbols
new file mode 100644
index 0000000000000..8cd650b50c377
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).symbols
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/inlineSourceMap2.ts] ////
+
+=== inlineSourceMap2.ts ===
+// configuration errors
+
+var x = 0;
+>x : Symbol(x, Decl(inlineSourceMap2.ts, 2, 3))
+
+console.log(x);
+>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
+>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
+>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
+>x : Symbol(x, Decl(inlineSourceMap2.ts, 2, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).types b/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).types
new file mode 100644
index 0000000000000..7dee271a146de
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/inlineSourceMap2(target=es2015).types
@@ -0,0 +1,16 @@
+//// [tests/cases/compiler/inlineSourceMap2.ts] ////
+
+=== inlineSourceMap2.ts ===
+// configuration errors
+
+var x = 0;
+>x : number
+>0 : 0
+
+console.log(x);
+>console.log(x) : void
+>console.log : (...data: any[]) => void
+>console : Console
+>log : (...data: any[]) => void
+>x : number
+
diff --git a/tsc/testdata/baselines/reference/compiler/instanceOfInExternalModules.errors.txt b/tsc/testdata/baselines/reference/compiler/instanceOfInExternalModules.errors.txt
new file mode 100644
index 0000000000000..efbadc018d12e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/instanceOfInExternalModules.errors.txt
@@ -0,0 +1,18 @@
+instanceOfInExternalModules_1.ts(2,22): error TS2307: Cannot find module 'instanceOfInExternalModules_require' or its corresponding type declarations.
+instanceOfInExternalModules_require.ts(1,20): error TS2564: Property 'foo' has no initializer and is not definitely assigned in the constructor.
+
+
+==== instanceOfInExternalModules_1.ts (1 errors) ====
+ ///
+ import Bar = require("instanceOfInExternalModules_require");
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'instanceOfInExternalModules_require' or its corresponding type declarations.
+ function IsFoo(value: any): boolean {
+ return value instanceof Bar.Foo;
+ }
+
+==== instanceOfInExternalModules_require.ts (1 errors) ====
+ export class Foo { foo: string; }
+ ~~~
+!!! error TS2564: Property 'foo' has no initializer and is not definitely assigned in the constructor.
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/instanceOfInExternalModules.js b/tsc/testdata/baselines/reference/compiler/instanceOfInExternalModules.js
new file mode 100644
index 0000000000000..9a9ad8dcddf2a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/instanceOfInExternalModules.js
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/instanceOfInExternalModules.ts] ////
+
+//// [instanceOfInExternalModules_require.ts]
+export class Foo { foo: string; }
+
+//// [instanceOfInExternalModules_1.ts]
+///
+import Bar = require("instanceOfInExternalModules_require");
+function IsFoo(value: any): boolean {
+ return value instanceof Bar.Foo;
+}
+
+
+//// [instanceOfInExternalModules_require.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Foo = void 0;
+class Foo {
+}
+exports.Foo = Foo;
+//// [instanceOfInExternalModules_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+///
+const Bar = require("instanceOfInExternalModules_require");
+function IsFoo(value) {
+ return value instanceof Bar.Foo;
+}
diff --git a/tsc/testdata/baselines/reference/compiler/instanceOfInExternalModules.symbols b/tsc/testdata/baselines/reference/compiler/instanceOfInExternalModules.symbols
new file mode 100644
index 0000000000000..040e4b4256935
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/instanceOfInExternalModules.symbols
@@ -0,0 +1,21 @@
+//// [tests/cases/compiler/instanceOfInExternalModules.ts] ////
+
+=== instanceOfInExternalModules_1.ts ===
+///
+import Bar = require("instanceOfInExternalModules_require");
+>Bar : Symbol(Bar, Decl(instanceOfInExternalModules_1.ts, 0, 0))
+
+function IsFoo(value: any): boolean {
+>IsFoo : Symbol(IsFoo, Decl(instanceOfInExternalModules_1.ts, 1, 60))
+>value : Symbol(value, Decl(instanceOfInExternalModules_1.ts, 2, 15))
+
+ return value instanceof Bar.Foo;
+>value : Symbol(value, Decl(instanceOfInExternalModules_1.ts, 2, 15))
+>Bar : Symbol(Bar, Decl(instanceOfInExternalModules_1.ts, 0, 0))
+}
+
+=== instanceOfInExternalModules_require.ts ===
+export class Foo { foo: string; }
+>Foo : Symbol(Foo, Decl(instanceOfInExternalModules_require.ts, 0, 0))
+>foo : Symbol(Foo.foo, Decl(instanceOfInExternalModules_require.ts, 0, 18))
+
diff --git a/tsc/testdata/baselines/reference/compiler/instanceOfInExternalModules.types b/tsc/testdata/baselines/reference/compiler/instanceOfInExternalModules.types
new file mode 100644
index 0000000000000..c8f1950c60d9c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/instanceOfInExternalModules.types
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/instanceOfInExternalModules.ts] ////
+
+=== instanceOfInExternalModules_1.ts ===
+///
+import Bar = require("instanceOfInExternalModules_require");
+>Bar : any
+
+function IsFoo(value: any): boolean {
+>IsFoo : (value: any) => boolean
+>value : any
+
+ return value instanceof Bar.Foo;
+>value instanceof Bar.Foo : boolean
+>value : any
+>Bar.Foo : any
+>Bar : any
+>Foo : any
+}
+
+=== instanceOfInExternalModules_require.ts ===
+export class Foo { foo: string; }
+>Foo : Foo
+>foo : string
+
diff --git a/tsc/testdata/baselines/reference/compiler/interfaceDeclaration5.js b/tsc/testdata/baselines/reference/compiler/interfaceDeclaration5.js
new file mode 100644
index 0000000000000..1fbcf46d647ce
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/interfaceDeclaration5.js
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/interfaceDeclaration5.ts] ////
+
+//// [interfaceDeclaration5.ts]
+export interface I1 { item:string; }
+export class C1 { }
+
+
+//// [interfaceDeclaration5.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.C1 = void 0;
+class C1 {
+}
+exports.C1 = C1;
diff --git a/tsc/testdata/baselines/reference/compiler/interfaceDeclaration5.symbols b/tsc/testdata/baselines/reference/compiler/interfaceDeclaration5.symbols
new file mode 100644
index 0000000000000..2cd063f55ac03
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/interfaceDeclaration5.symbols
@@ -0,0 +1,10 @@
+//// [tests/cases/compiler/interfaceDeclaration5.ts] ////
+
+=== interfaceDeclaration5.ts ===
+export interface I1 { item:string; }
+>I1 : Symbol(I1, Decl(interfaceDeclaration5.ts, 0, 0))
+>item : Symbol(I1.item, Decl(interfaceDeclaration5.ts, 0, 21))
+
+export class C1 { }
+>C1 : Symbol(C1, Decl(interfaceDeclaration5.ts, 0, 36))
+
diff --git a/tsc/testdata/baselines/reference/compiler/interfaceDeclaration5.types b/tsc/testdata/baselines/reference/compiler/interfaceDeclaration5.types
new file mode 100644
index 0000000000000..c80d078c717cb
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/interfaceDeclaration5.types
@@ -0,0 +1,9 @@
+//// [tests/cases/compiler/interfaceDeclaration5.ts] ////
+
+=== interfaceDeclaration5.ts ===
+export interface I1 { item:string; }
+>item : string
+
+export class C1 { }
+>C1 : C1
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithExport.js b/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithExport.js
new file mode 100644
index 0000000000000..e9aec3972d30f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithExport.js
@@ -0,0 +1,42 @@
+//// [tests/cases/compiler/internalAliasEnumInsideTopLevelModuleWithExport.ts] ////
+
+//// [internalAliasEnumInsideTopLevelModuleWithExport.ts]
+export namespace a {
+ export enum weekend {
+ Friday,
+ Saturday,
+ Sunday
+ }
+}
+
+export import b = a.weekend;
+export var bVal: b = b.Sunday;
+
+
+//// [internalAliasEnumInsideTopLevelModuleWithExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.bVal = exports.b = exports.a = void 0;
+var a;
+(function (a) {
+ let weekend;
+ (function (weekend) {
+ weekend[weekend["Friday"] = 0] = "Friday";
+ weekend[weekend["Saturday"] = 1] = "Saturday";
+ weekend[weekend["Sunday"] = 2] = "Sunday";
+ })(weekend = a.weekend || (a.weekend = {}));
+})(a || (exports.a = a = {}));
+exports.b = a.weekend;
+exports.bVal = exports.b.Sunday;
+
+
+//// [internalAliasEnumInsideTopLevelModuleWithExport.d.ts]
+export declare namespace a {
+ enum weekend {
+ Friday = 0,
+ Saturday = 1,
+ Sunday = 2
+ }
+}
+export import b = a.weekend;
+export declare var bVal: b;
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithExport.symbols b/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithExport.symbols
new file mode 100644
index 0000000000000..a39fc43562e5f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithExport.symbols
@@ -0,0 +1,32 @@
+//// [tests/cases/compiler/internalAliasEnumInsideTopLevelModuleWithExport.ts] ////
+
+=== internalAliasEnumInsideTopLevelModuleWithExport.ts ===
+export namespace a {
+>a : Symbol(a, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 0, 0))
+
+ export enum weekend {
+>weekend : Symbol(weekend, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 0, 20))
+
+ Friday,
+>Friday : Symbol(b.Friday, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 1, 25))
+
+ Saturday,
+>Saturday : Symbol(b.Saturday, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 2, 15))
+
+ Sunday
+>Sunday : Symbol(b.Sunday, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 3, 17))
+ }
+}
+
+export import b = a.weekend;
+>b : Symbol(b, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 6, 1))
+>a : Symbol(a, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 0, 0))
+>weekend : Symbol(b, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 0, 20))
+
+export var bVal: b = b.Sunday;
+>bVal : Symbol(bVal, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 9, 10))
+>b : Symbol(b, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 6, 1))
+>b.Sunday : Symbol(b.Sunday, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 3, 17))
+>b : Symbol(b, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 6, 1))
+>Sunday : Symbol(b.Sunday, Decl(internalAliasEnumInsideTopLevelModuleWithExport.ts, 3, 17))
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithExport.types b/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithExport.types
new file mode 100644
index 0000000000000..6bd06120b4314
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithExport.types
@@ -0,0 +1,31 @@
+//// [tests/cases/compiler/internalAliasEnumInsideTopLevelModuleWithExport.ts] ////
+
+=== internalAliasEnumInsideTopLevelModuleWithExport.ts ===
+export namespace a {
+>a : typeof a
+
+ export enum weekend {
+>weekend : weekend
+
+ Friday,
+>Friday : weekend.Friday
+
+ Saturday,
+>Saturday : weekend.Saturday
+
+ Sunday
+>Sunday : weekend.Sunday
+ }
+}
+
+export import b = a.weekend;
+>b : typeof b
+>a : typeof a
+>weekend : b
+
+export var bVal: b = b.Sunday;
+>bVal : b
+>b.Sunday : b.Sunday
+>b : typeof b
+>Sunday : b.Sunday
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.js b/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.js
new file mode 100644
index 0000000000000..cccc03aea97a2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.js
@@ -0,0 +1,42 @@
+//// [tests/cases/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.ts] ////
+
+//// [internalAliasEnumInsideTopLevelModuleWithoutExport.ts]
+export namespace a {
+ export enum weekend {
+ Friday,
+ Saturday,
+ Sunday
+ }
+}
+
+import b = a.weekend;
+export var bVal: b = b.Sunday;
+
+
+//// [internalAliasEnumInsideTopLevelModuleWithoutExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.bVal = exports.a = void 0;
+var a;
+(function (a) {
+ let weekend;
+ (function (weekend) {
+ weekend[weekend["Friday"] = 0] = "Friday";
+ weekend[weekend["Saturday"] = 1] = "Saturday";
+ weekend[weekend["Sunday"] = 2] = "Sunday";
+ })(weekend = a.weekend || (a.weekend = {}));
+})(a || (exports.a = a = {}));
+var b = a.weekend;
+exports.bVal = b.Sunday;
+
+
+//// [internalAliasEnumInsideTopLevelModuleWithoutExport.d.ts]
+export declare namespace a {
+ enum weekend {
+ Friday = 0,
+ Saturday = 1,
+ Sunday = 2
+ }
+}
+import b = a.weekend;
+export declare var bVal: b;
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.symbols b/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.symbols
new file mode 100644
index 0000000000000..d845fc6d67ad1
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.symbols
@@ -0,0 +1,32 @@
+//// [tests/cases/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.ts] ////
+
+=== internalAliasEnumInsideTopLevelModuleWithoutExport.ts ===
+export namespace a {
+>a : Symbol(a, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 0, 0))
+
+ export enum weekend {
+>weekend : Symbol(weekend, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 0, 20))
+
+ Friday,
+>Friday : Symbol(b.Friday, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 1, 25))
+
+ Saturday,
+>Saturday : Symbol(b.Saturday, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 2, 15))
+
+ Sunday
+>Sunday : Symbol(b.Sunday, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 3, 17))
+ }
+}
+
+import b = a.weekend;
+>b : Symbol(b, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 6, 1))
+>a : Symbol(a, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 0, 0))
+>weekend : Symbol(b, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 0, 20))
+
+export var bVal: b = b.Sunday;
+>bVal : Symbol(bVal, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 9, 10))
+>b : Symbol(b, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 6, 1))
+>b.Sunday : Symbol(b.Sunday, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 3, 17))
+>b : Symbol(b, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 6, 1))
+>Sunday : Symbol(b.Sunday, Decl(internalAliasEnumInsideTopLevelModuleWithoutExport.ts, 3, 17))
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.types b/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.types
new file mode 100644
index 0000000000000..aff85d52aab24
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.types
@@ -0,0 +1,31 @@
+//// [tests/cases/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.ts] ////
+
+=== internalAliasEnumInsideTopLevelModuleWithoutExport.ts ===
+export namespace a {
+>a : typeof a
+
+ export enum weekend {
+>weekend : weekend
+
+ Friday,
+>Friday : weekend.Friday
+
+ Saturday,
+>Saturday : weekend.Saturday
+
+ Sunday
+>Sunday : weekend.Sunday
+ }
+}
+
+import b = a.weekend;
+>b : typeof b
+>a : typeof a
+>weekend : b
+
+export var bVal: b = b.Sunday;
+>bVal : b
+>b.Sunday : b.Sunday
+>b : typeof b
+>Sunday : b.Sunday
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.js b/tsc/testdata/baselines/reference/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.js
new file mode 100644
index 0000000000000..75acde72b7744
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.js
@@ -0,0 +1,37 @@
+//// [tests/cases/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.ts] ////
+
+//// [internalAliasFunctionInsideTopLevelModuleWithExport.ts]
+export namespace a {
+ export function foo(x: number) {
+ return x;
+ }
+}
+
+export import b = a.foo;
+export var bVal = b(10);
+export var bVal2 = b;
+
+
+//// [internalAliasFunctionInsideTopLevelModuleWithExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.bVal2 = exports.bVal = exports.b = exports.a = void 0;
+var a;
+(function (a) {
+ function foo(x) {
+ return x;
+ }
+ a.foo = foo;
+})(a || (exports.a = a = {}));
+exports.b = a.foo;
+exports.bVal = (0, exports.b)(10);
+exports.bVal2 = exports.b;
+
+
+//// [internalAliasFunctionInsideTopLevelModuleWithExport.d.ts]
+export declare namespace a {
+ function foo(x: number): number;
+}
+export import b = a.foo;
+export declare var bVal: number;
+export declare var bVal2: typeof b;
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.symbols b/tsc/testdata/baselines/reference/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.symbols
new file mode 100644
index 0000000000000..6ff1a42fe5ffa
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.symbols
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.ts] ////
+
+=== internalAliasFunctionInsideTopLevelModuleWithExport.ts ===
+export namespace a {
+>a : Symbol(a, Decl(internalAliasFunctionInsideTopLevelModuleWithExport.ts, 0, 0))
+
+ export function foo(x: number) {
+>foo : Symbol(foo, Decl(internalAliasFunctionInsideTopLevelModuleWithExport.ts, 0, 20))
+>x : Symbol(x, Decl(internalAliasFunctionInsideTopLevelModuleWithExport.ts, 1, 24))
+
+ return x;
+>x : Symbol(x, Decl(internalAliasFunctionInsideTopLevelModuleWithExport.ts, 1, 24))
+ }
+}
+
+export import b = a.foo;
+>b : Symbol(b, Decl(internalAliasFunctionInsideTopLevelModuleWithExport.ts, 4, 1))
+>a : Symbol(a, Decl(internalAliasFunctionInsideTopLevelModuleWithExport.ts, 0, 0))
+>foo : Symbol(b, Decl(internalAliasFunctionInsideTopLevelModuleWithExport.ts, 0, 20))
+
+export var bVal = b(10);
+>bVal : Symbol(bVal, Decl(internalAliasFunctionInsideTopLevelModuleWithExport.ts, 7, 10))
+>b : Symbol(b, Decl(internalAliasFunctionInsideTopLevelModuleWithExport.ts, 4, 1))
+
+export var bVal2 = b;
+>bVal2 : Symbol(bVal2, Decl(internalAliasFunctionInsideTopLevelModuleWithExport.ts, 8, 10))
+>b : Symbol(b, Decl(internalAliasFunctionInsideTopLevelModuleWithExport.ts, 4, 1))
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.types b/tsc/testdata/baselines/reference/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.types
new file mode 100644
index 0000000000000..cd7ce114e8201
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.types
@@ -0,0 +1,30 @@
+//// [tests/cases/compiler/internalAliasFunctionInsideTopLevelModuleWithExport.ts] ////
+
+=== internalAliasFunctionInsideTopLevelModuleWithExport.ts ===
+export namespace a {
+>a : typeof a
+
+ export function foo(x: number) {
+>foo : (x: number) => number
+>x : number
+
+ return x;
+>x : number
+ }
+}
+
+export import b = a.foo;
+>b : (x: number) => number
+>a : typeof a
+>foo : (x: number) => number
+
+export var bVal = b(10);
+>bVal : number
+>b(10) : number
+>b : (x: number) => number
+>10 : 10
+
+export var bVal2 = b;
+>bVal2 : (x: number) => number
+>b : (x: number) => number
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.js b/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.js
new file mode 100644
index 0000000000000..c7006a66da5bd
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.js
@@ -0,0 +1,46 @@
+//// [tests/cases/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.ts] ////
+
+//// [internalAliasInitializedModuleInsideLocalModuleWithExport.ts]
+export namespace a {
+ export namespace b {
+ export class c {
+ }
+ }
+}
+
+export namespace c {
+ export import b = a.b;
+ export var x: b.c = new b.c();
+}
+
+//// [internalAliasInitializedModuleInsideLocalModuleWithExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.c = exports.a = void 0;
+var a;
+(function (a) {
+ let b;
+ (function (b) {
+ class c {
+ }
+ b.c = c;
+ })(b = a.b || (a.b = {}));
+})(a || (exports.a = a = {}));
+var c;
+(function (c) {
+ c.b = a.b;
+ c.x = new c.b.c();
+})(c || (exports.c = c = {}));
+
+
+//// [internalAliasInitializedModuleInsideLocalModuleWithExport.d.ts]
+export declare namespace a {
+ namespace b {
+ class c {
+ }
+ }
+}
+export declare namespace c {
+ export import b = a.b;
+ var x: b.c;
+}
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.symbols b/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.symbols
new file mode 100644
index 0000000000000..c895549af8c6c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.symbols
@@ -0,0 +1,31 @@
+//// [tests/cases/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.ts] ////
+
+=== internalAliasInitializedModuleInsideLocalModuleWithExport.ts ===
+export namespace a {
+>a : Symbol(a, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 0, 0))
+
+ export namespace b {
+>b : Symbol(b, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 0, 20))
+
+ export class c {
+>c : Symbol(c, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 1, 24))
+ }
+ }
+}
+
+export namespace c {
+>c : Symbol(c, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 5, 1))
+
+ export import b = a.b;
+>b : Symbol(b, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 7, 20))
+>a : Symbol(a, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 0, 0))
+>b : Symbol(b, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 0, 20))
+
+ export var x: b.c = new b.c();
+>x : Symbol(x, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 9, 14))
+>b : Symbol(b, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 7, 20))
+>c : Symbol(b.c, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 1, 24))
+>b.c : Symbol(b.c, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 1, 24))
+>b : Symbol(b, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 7, 20))
+>c : Symbol(b.c, Decl(internalAliasInitializedModuleInsideLocalModuleWithExport.ts, 1, 24))
+}
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.types b/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.types
new file mode 100644
index 0000000000000..f0cf9233851f5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.types
@@ -0,0 +1,31 @@
+//// [tests/cases/compiler/internalAliasInitializedModuleInsideLocalModuleWithExport.ts] ////
+
+=== internalAliasInitializedModuleInsideLocalModuleWithExport.ts ===
+export namespace a {
+>a : typeof a
+
+ export namespace b {
+>b : typeof b
+
+ export class c {
+>c : c
+ }
+ }
+}
+
+export namespace c {
+>c : typeof c
+
+ export import b = a.b;
+>b : typeof b
+>a : typeof a
+>b : typeof b
+
+ export var x: b.c = new b.c();
+>x : b.c
+>b : any
+>new b.c() : b.c
+>b.c : typeof b.c
+>b : typeof b
+>c : typeof b.c
+}
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.js b/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.js
new file mode 100644
index 0000000000000..03fcff73ec8cc
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.js
@@ -0,0 +1,39 @@
+//// [tests/cases/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts] ////
+
+//// [internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts]
+export namespace a {
+ export namespace b {
+ export class c {
+ }
+ }
+}
+
+import b = a.b;
+export var x: b.c = new b.c();
+
+//// [internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = exports.a = void 0;
+var a;
+(function (a) {
+ let b;
+ (function (b) {
+ class c {
+ }
+ b.c = c;
+ })(b = a.b || (a.b = {}));
+})(a || (exports.a = a = {}));
+var b = a.b;
+exports.x = new b.c();
+
+
+//// [internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.d.ts]
+export declare namespace a {
+ namespace b {
+ class c {
+ }
+ }
+}
+import b = a.b;
+export declare var x: b.c;
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.symbols b/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.symbols
new file mode 100644
index 0000000000000..f68fe76b58d14
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.symbols
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts] ////
+
+=== internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts ===
+export namespace a {
+>a : Symbol(a, Decl(internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts, 0, 0))
+
+ export namespace b {
+>b : Symbol(b, Decl(internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts, 0, 20))
+
+ export class c {
+>c : Symbol(c, Decl(internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts, 1, 24))
+ }
+ }
+}
+
+import b = a.b;
+>b : Symbol(b, Decl(internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts, 5, 1))
+>a : Symbol(a, Decl(internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts, 0, 0))
+>b : Symbol(b, Decl(internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts, 0, 20))
+
+export var x: b.c = new b.c();
+>x : Symbol(x, Decl(internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts, 8, 10))
+>b : Symbol(b, Decl(internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts, 5, 1))
+>c : Symbol(b.c, Decl(internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts, 1, 24))
+>b.c : Symbol(b.c, Decl(internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts, 1, 24))
+>b : Symbol(b, Decl(internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts, 5, 1))
+>c : Symbol(b.c, Decl(internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts, 1, 24))
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.types b/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.types
new file mode 100644
index 0000000000000..e8dcf930d917d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.types
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts] ////
+
+=== internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.ts ===
+export namespace a {
+>a : typeof a
+
+ export namespace b {
+>b : typeof b
+
+ export class c {
+>c : c
+ }
+ }
+}
+
+import b = a.b;
+>b : typeof b
+>a : typeof a
+>b : typeof b
+
+export var x: b.c = new b.c();
+>x : b.c
+>b : any
+>new b.c() : b.c
+>b.c : typeof b.c
+>b : typeof b
+>c : typeof b.c
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithExport.js b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithExport.js
new file mode 100644
index 0000000000000..a8168d3fe6568
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithExport.js
@@ -0,0 +1,32 @@
+//// [tests/cases/compiler/internalAliasInterfaceInsideLocalModuleWithExport.ts] ////
+
+//// [internalAliasInterfaceInsideLocalModuleWithExport.ts]
+export namespace a {
+ export interface I {
+ }
+}
+
+export namespace c {
+ export import b = a.I;
+ export var x: b;
+}
+
+
+//// [internalAliasInterfaceInsideLocalModuleWithExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.c = void 0;
+var c;
+(function (c) {
+})(c || (exports.c = c = {}));
+
+
+//// [internalAliasInterfaceInsideLocalModuleWithExport.d.ts]
+export declare namespace a {
+ interface I {
+ }
+}
+export declare namespace c {
+ export import b = a.I;
+ var x: b;
+}
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithExport.symbols b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithExport.symbols
new file mode 100644
index 0000000000000..0e352925a2daa
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithExport.symbols
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/internalAliasInterfaceInsideLocalModuleWithExport.ts] ////
+
+=== internalAliasInterfaceInsideLocalModuleWithExport.ts ===
+export namespace a {
+>a : Symbol(a, Decl(internalAliasInterfaceInsideLocalModuleWithExport.ts, 0, 0))
+
+ export interface I {
+>I : Symbol(I, Decl(internalAliasInterfaceInsideLocalModuleWithExport.ts, 0, 20))
+ }
+}
+
+export namespace c {
+>c : Symbol(c, Decl(internalAliasInterfaceInsideLocalModuleWithExport.ts, 3, 1))
+
+ export import b = a.I;
+>b : Symbol(b, Decl(internalAliasInterfaceInsideLocalModuleWithExport.ts, 5, 20))
+>a : Symbol(a, Decl(internalAliasInterfaceInsideLocalModuleWithExport.ts, 0, 0))
+>I : Symbol(b, Decl(internalAliasInterfaceInsideLocalModuleWithExport.ts, 0, 20))
+
+ export var x: b;
+>x : Symbol(x, Decl(internalAliasInterfaceInsideLocalModuleWithExport.ts, 7, 14))
+>b : Symbol(b, Decl(internalAliasInterfaceInsideLocalModuleWithExport.ts, 5, 20))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithExport.types b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithExport.types
new file mode 100644
index 0000000000000..8cee0d79aebac
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithExport.types
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/internalAliasInterfaceInsideLocalModuleWithExport.ts] ////
+
+=== internalAliasInterfaceInsideLocalModuleWithExport.ts ===
+export namespace a {
+ export interface I {
+ }
+}
+
+export namespace c {
+>c : typeof c
+
+ export import b = a.I;
+>b : any
+>a : any
+>I : b
+
+ export var x: b;
+>x : b
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.js b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.js
new file mode 100644
index 0000000000000..3dfa4ab2015c7
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.js
@@ -0,0 +1,32 @@
+//// [tests/cases/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.ts] ////
+
+//// [internalAliasInterfaceInsideLocalModuleWithoutExport.ts]
+export namespace a {
+ export interface I {
+ }
+}
+
+export namespace c {
+ import b = a.I;
+ export var x: b;
+}
+
+
+//// [internalAliasInterfaceInsideLocalModuleWithoutExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.c = void 0;
+var c;
+(function (c) {
+})(c || (exports.c = c = {}));
+
+
+//// [internalAliasInterfaceInsideLocalModuleWithoutExport.d.ts]
+export declare namespace a {
+ interface I {
+ }
+}
+export declare namespace c {
+ import b = a.I;
+ var x: b;
+}
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.symbols b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.symbols
new file mode 100644
index 0000000000000..160779c275a3e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.symbols
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.ts] ////
+
+=== internalAliasInterfaceInsideLocalModuleWithoutExport.ts ===
+export namespace a {
+>a : Symbol(a, Decl(internalAliasInterfaceInsideLocalModuleWithoutExport.ts, 0, 0))
+
+ export interface I {
+>I : Symbol(I, Decl(internalAliasInterfaceInsideLocalModuleWithoutExport.ts, 0, 20))
+ }
+}
+
+export namespace c {
+>c : Symbol(c, Decl(internalAliasInterfaceInsideLocalModuleWithoutExport.ts, 3, 1))
+
+ import b = a.I;
+>b : Symbol(b, Decl(internalAliasInterfaceInsideLocalModuleWithoutExport.ts, 5, 20))
+>a : Symbol(a, Decl(internalAliasInterfaceInsideLocalModuleWithoutExport.ts, 0, 0))
+>I : Symbol(b, Decl(internalAliasInterfaceInsideLocalModuleWithoutExport.ts, 0, 20))
+
+ export var x: b;
+>x : Symbol(x, Decl(internalAliasInterfaceInsideLocalModuleWithoutExport.ts, 7, 14))
+>b : Symbol(b, Decl(internalAliasInterfaceInsideLocalModuleWithoutExport.ts, 5, 20))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.types b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.types
new file mode 100644
index 0000000000000..ae35cdb47fea2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.types
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.ts] ////
+
+=== internalAliasInterfaceInsideLocalModuleWithoutExport.ts ===
+export namespace a {
+ export interface I {
+ }
+}
+
+export namespace c {
+>c : typeof c
+
+ import b = a.I;
+>b : any
+>a : any
+>I : b
+
+ export var x: b;
+>x : b
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.js b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.js
new file mode 100644
index 0000000000000..3d7a7f85a927c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.js
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts] ////
+
+//// [internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts]
+export namespace a {
+ export interface I {
+ }
+}
+
+import b = a.I;
+export var x: b;
+
+
+//// [internalAliasInterfaceInsideTopLevelModuleWithoutExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+
+
+//// [internalAliasInterfaceInsideTopLevelModuleWithoutExport.d.ts]
+export declare namespace a {
+ interface I {
+ }
+}
+import b = a.I;
+export declare var x: b;
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.symbols b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.symbols
new file mode 100644
index 0000000000000..bc17a808d8582
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.symbols
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts] ////
+
+=== internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts ===
+export namespace a {
+>a : Symbol(a, Decl(internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts, 0, 0))
+
+ export interface I {
+>I : Symbol(I, Decl(internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts, 0, 20))
+ }
+}
+
+import b = a.I;
+>b : Symbol(b, Decl(internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts, 3, 1))
+>a : Symbol(a, Decl(internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts, 0, 0))
+>I : Symbol(b, Decl(internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts, 0, 20))
+
+export var x: b;
+>x : Symbol(x, Decl(internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts, 6, 10))
+>b : Symbol(b, Decl(internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts, 3, 1))
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.types b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.types
new file mode 100644
index 0000000000000..7a626c796fa45
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.types
@@ -0,0 +1,16 @@
+//// [tests/cases/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts] ////
+
+=== internalAliasInterfaceInsideTopLevelModuleWithoutExport.ts ===
+export namespace a {
+ export interface I {
+ }
+}
+
+import b = a.I;
+>b : any
+>a : any
+>I : b
+
+export var x: b;
+>x : b
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.js b/tsc/testdata/baselines/reference/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.js
new file mode 100644
index 0000000000000..6584286180bd6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.js
@@ -0,0 +1,33 @@
+//// [tests/cases/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts] ////
+
+//// [internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts]
+export namespace a {
+ export namespace b {
+ export interface I {
+ foo();
+ }
+ }
+}
+
+export import b = a.b;
+export var x: b.I;
+x.foo();
+
+
+//// [internalAliasUninitializedModuleInsideTopLevelModuleWithExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+exports.x.foo();
+
+
+//// [internalAliasUninitializedModuleInsideTopLevelModuleWithExport.d.ts]
+export declare namespace a {
+ namespace b {
+ interface I {
+ foo(): any;
+ }
+ }
+}
+export import b = a.b;
+export declare var x: b.I;
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.symbols b/tsc/testdata/baselines/reference/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.symbols
new file mode 100644
index 0000000000000..74ef9414cf71f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.symbols
@@ -0,0 +1,33 @@
+//// [tests/cases/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts] ////
+
+=== internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts ===
+export namespace a {
+>a : Symbol(a, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 0, 0))
+
+ export namespace b {
+>b : Symbol(b, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 0, 20))
+
+ export interface I {
+>I : Symbol(I, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 1, 24))
+
+ foo();
+>foo : Symbol(I.foo, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 2, 28))
+ }
+ }
+}
+
+export import b = a.b;
+>b : Symbol(b, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 6, 1))
+>a : Symbol(a, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 0, 0))
+>b : Symbol(b, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 0, 20))
+
+export var x: b.I;
+>x : Symbol(x, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 9, 10))
+>b : Symbol(b, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 6, 1))
+>I : Symbol(b.I, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 1, 24))
+
+x.foo();
+>x.foo : Symbol(b.I.foo, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 2, 28))
+>x : Symbol(x, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 9, 10))
+>foo : Symbol(b.I.foo, Decl(internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts, 2, 28))
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.types b/tsc/testdata/baselines/reference/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.types
new file mode 100644
index 0000000000000..103fe347d0587
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.types
@@ -0,0 +1,27 @@
+//// [tests/cases/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts] ////
+
+=== internalAliasUninitializedModuleInsideTopLevelModuleWithExport.ts ===
+export namespace a {
+ export namespace b {
+ export interface I {
+ foo();
+>foo : () => any
+ }
+ }
+}
+
+export import b = a.b;
+>b : any
+>a : any
+>b : any
+
+export var x: b.I;
+>x : b.I
+>b : any
+
+x.foo();
+>x.foo() : any
+>x.foo : () => any
+>x : b.I
+>foo : () => any
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithExport.js b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithExport.js
new file mode 100644
index 0000000000000..1befe533ee37a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithExport.js
@@ -0,0 +1,36 @@
+//// [tests/cases/compiler/internalAliasVarInsideLocalModuleWithExport.ts] ////
+
+//// [internalAliasVarInsideLocalModuleWithExport.ts]
+export namespace a {
+ export var x = 10;
+}
+
+export namespace c {
+ export import b = a.x;
+ export var bVal = b;
+}
+
+
+//// [internalAliasVarInsideLocalModuleWithExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.c = exports.a = void 0;
+var a;
+(function (a) {
+ a.x = 10;
+})(a || (exports.a = a = {}));
+var c;
+(function (c) {
+ c.b = a.x;
+ c.bVal = c.b;
+})(c || (exports.c = c = {}));
+
+
+//// [internalAliasVarInsideLocalModuleWithExport.d.ts]
+export declare namespace a {
+ var x: number;
+}
+export declare namespace c {
+ export import b = a.x;
+ var bVal: number;
+}
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithExport.symbols b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithExport.symbols
new file mode 100644
index 0000000000000..d2bb636174e4d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithExport.symbols
@@ -0,0 +1,23 @@
+//// [tests/cases/compiler/internalAliasVarInsideLocalModuleWithExport.ts] ////
+
+=== internalAliasVarInsideLocalModuleWithExport.ts ===
+export namespace a {
+>a : Symbol(a, Decl(internalAliasVarInsideLocalModuleWithExport.ts, 0, 0))
+
+ export var x = 10;
+>x : Symbol(x, Decl(internalAliasVarInsideLocalModuleWithExport.ts, 1, 14))
+}
+
+export namespace c {
+>c : Symbol(c, Decl(internalAliasVarInsideLocalModuleWithExport.ts, 2, 1))
+
+ export import b = a.x;
+>b : Symbol(b, Decl(internalAliasVarInsideLocalModuleWithExport.ts, 4, 20))
+>a : Symbol(a, Decl(internalAliasVarInsideLocalModuleWithExport.ts, 0, 0))
+>x : Symbol(b, Decl(internalAliasVarInsideLocalModuleWithExport.ts, 1, 14))
+
+ export var bVal = b;
+>bVal : Symbol(bVal, Decl(internalAliasVarInsideLocalModuleWithExport.ts, 6, 14))
+>b : Symbol(b, Decl(internalAliasVarInsideLocalModuleWithExport.ts, 4, 20))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithExport.types b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithExport.types
new file mode 100644
index 0000000000000..d72d9c5ee36a3
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithExport.types
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/internalAliasVarInsideLocalModuleWithExport.ts] ////
+
+=== internalAliasVarInsideLocalModuleWithExport.ts ===
+export namespace a {
+>a : typeof a
+
+ export var x = 10;
+>x : number
+>10 : 10
+}
+
+export namespace c {
+>c : typeof c
+
+ export import b = a.x;
+>b : number
+>a : typeof a
+>x : number
+
+ export var bVal = b;
+>bVal : number
+>b : number
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithoutExport.js b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithoutExport.js
new file mode 100644
index 0000000000000..d129f7071afbe
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithoutExport.js
@@ -0,0 +1,35 @@
+//// [tests/cases/compiler/internalAliasVarInsideLocalModuleWithoutExport.ts] ////
+
+//// [internalAliasVarInsideLocalModuleWithoutExport.ts]
+export namespace a {
+ export var x = 10;
+}
+
+export namespace c {
+ import b = a.x;
+ export var bVal = b;
+}
+
+
+//// [internalAliasVarInsideLocalModuleWithoutExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.c = exports.a = void 0;
+var a;
+(function (a) {
+ a.x = 10;
+})(a || (exports.a = a = {}));
+var c;
+(function (c) {
+ var b = a.x;
+ c.bVal = b;
+})(c || (exports.c = c = {}));
+
+
+//// [internalAliasVarInsideLocalModuleWithoutExport.d.ts]
+export declare namespace a {
+ var x: number;
+}
+export declare namespace c {
+ var bVal: number;
+}
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithoutExport.symbols b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithoutExport.symbols
new file mode 100644
index 0000000000000..c7aee70f940ee
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithoutExport.symbols
@@ -0,0 +1,23 @@
+//// [tests/cases/compiler/internalAliasVarInsideLocalModuleWithoutExport.ts] ////
+
+=== internalAliasVarInsideLocalModuleWithoutExport.ts ===
+export namespace a {
+>a : Symbol(a, Decl(internalAliasVarInsideLocalModuleWithoutExport.ts, 0, 0))
+
+ export var x = 10;
+>x : Symbol(x, Decl(internalAliasVarInsideLocalModuleWithoutExport.ts, 1, 14))
+}
+
+export namespace c {
+>c : Symbol(c, Decl(internalAliasVarInsideLocalModuleWithoutExport.ts, 2, 1))
+
+ import b = a.x;
+>b : Symbol(b, Decl(internalAliasVarInsideLocalModuleWithoutExport.ts, 4, 20))
+>a : Symbol(a, Decl(internalAliasVarInsideLocalModuleWithoutExport.ts, 0, 0))
+>x : Symbol(b, Decl(internalAliasVarInsideLocalModuleWithoutExport.ts, 1, 14))
+
+ export var bVal = b;
+>bVal : Symbol(bVal, Decl(internalAliasVarInsideLocalModuleWithoutExport.ts, 6, 14))
+>b : Symbol(b, Decl(internalAliasVarInsideLocalModuleWithoutExport.ts, 4, 20))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithoutExport.types b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithoutExport.types
new file mode 100644
index 0000000000000..233aef609abcc
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideLocalModuleWithoutExport.types
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/internalAliasVarInsideLocalModuleWithoutExport.ts] ////
+
+=== internalAliasVarInsideLocalModuleWithoutExport.ts ===
+export namespace a {
+>a : typeof a
+
+ export var x = 10;
+>x : number
+>10 : 10
+}
+
+export namespace c {
+>c : typeof c
+
+ import b = a.x;
+>b : number
+>a : typeof a
+>x : number
+
+ export var bVal = b;
+>bVal : number
+>b : number
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideTopLevelModuleWithExport.js b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideTopLevelModuleWithExport.js
new file mode 100644
index 0000000000000..2eedef90a10ff
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideTopLevelModuleWithExport.js
@@ -0,0 +1,30 @@
+//// [tests/cases/compiler/internalAliasVarInsideTopLevelModuleWithExport.ts] ////
+
+//// [internalAliasVarInsideTopLevelModuleWithExport.ts]
+export namespace a {
+ export var x = 10;
+}
+
+export import b = a.x;
+export var bVal = b;
+
+
+
+//// [internalAliasVarInsideTopLevelModuleWithExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.bVal = exports.b = exports.a = void 0;
+var a;
+(function (a) {
+ a.x = 10;
+})(a || (exports.a = a = {}));
+exports.b = a.x;
+exports.bVal = exports.b;
+
+
+//// [internalAliasVarInsideTopLevelModuleWithExport.d.ts]
+export declare namespace a {
+ var x: number;
+}
+export import b = a.x;
+export declare var bVal: number;
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideTopLevelModuleWithExport.symbols b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideTopLevelModuleWithExport.symbols
new file mode 100644
index 0000000000000..c0b982d8be4e5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideTopLevelModuleWithExport.symbols
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/internalAliasVarInsideTopLevelModuleWithExport.ts] ////
+
+=== internalAliasVarInsideTopLevelModuleWithExport.ts ===
+export namespace a {
+>a : Symbol(a, Decl(internalAliasVarInsideTopLevelModuleWithExport.ts, 0, 0))
+
+ export var x = 10;
+>x : Symbol(x, Decl(internalAliasVarInsideTopLevelModuleWithExport.ts, 1, 14))
+}
+
+export import b = a.x;
+>b : Symbol(b, Decl(internalAliasVarInsideTopLevelModuleWithExport.ts, 2, 1))
+>a : Symbol(a, Decl(internalAliasVarInsideTopLevelModuleWithExport.ts, 0, 0))
+>x : Symbol(b, Decl(internalAliasVarInsideTopLevelModuleWithExport.ts, 1, 14))
+
+export var bVal = b;
+>bVal : Symbol(bVal, Decl(internalAliasVarInsideTopLevelModuleWithExport.ts, 5, 10))
+>b : Symbol(b, Decl(internalAliasVarInsideTopLevelModuleWithExport.ts, 2, 1))
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideTopLevelModuleWithExport.types b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideTopLevelModuleWithExport.types
new file mode 100644
index 0000000000000..4544acaaf755d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/internalAliasVarInsideTopLevelModuleWithExport.types
@@ -0,0 +1,21 @@
+//// [tests/cases/compiler/internalAliasVarInsideTopLevelModuleWithExport.ts] ////
+
+=== internalAliasVarInsideTopLevelModuleWithExport.ts ===
+export namespace a {
+>a : typeof a
+
+ export var x = 10;
+>x : number
+>10 : 10
+}
+
+export import b = a.x;
+>b : number
+>a : typeof a
+>x : number
+
+export var bVal = b;
+>bVal : number
+>b : number
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationClassMethodContainingArrowFunction.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationClassMethodContainingArrowFunction.js
new file mode 100644
index 0000000000000..c307601c1ae0d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationClassMethodContainingArrowFunction.js
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/jsFileCompilationClassMethodContainingArrowFunction.ts] ////
+
+//// [a.js]
+class c {
+ method(a) {
+ let x = a => this.method(a);
+ }
+}
+
+
+//// [a.js]
+"use strict";
+class c {
+ method(a) {
+ let x = a => this.method(a);
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationClassMethodContainingArrowFunction.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationClassMethodContainingArrowFunction.symbols
new file mode 100644
index 0000000000000..d79e0966e56fc
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationClassMethodContainingArrowFunction.symbols
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/jsFileCompilationClassMethodContainingArrowFunction.ts] ////
+
+=== a.js ===
+class c {
+>c : Symbol(c, Decl(a.js, 0, 0))
+
+ method(a) {
+>method : Symbol(c.method, Decl(a.js, 0, 9))
+>a : Symbol(a, Decl(a.js, 1, 11))
+
+ let x = a => this.method(a);
+>x : Symbol(x, Decl(a.js, 2, 11))
+>a : Symbol(a, Decl(a.js, 2, 15))
+>this.method : Symbol(c.method, Decl(a.js, 0, 9))
+>this : Symbol(c, Decl(a.js, 0, 0))
+>method : Symbol(c.method, Decl(a.js, 0, 9))
+>a : Symbol(a, Decl(a.js, 2, 15))
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationClassMethodContainingArrowFunction.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationClassMethodContainingArrowFunction.types
new file mode 100644
index 0000000000000..9e38800cb60b6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationClassMethodContainingArrowFunction.types
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/jsFileCompilationClassMethodContainingArrowFunction.ts] ////
+
+=== a.js ===
+class c {
+>c : c
+
+ method(a) {
+>method : (a: any) => void
+>a : any
+
+ let x = a => this.method(a);
+>x : (a: any) => void
+>a => this.method(a) : (a: any) => void
+>a : any
+>this.method(a) : void
+>this.method : (a: any) => void
+>this : this
+>method : (a: any) => void
+>a : any
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementation.errors.txt b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementation.errors.txt
new file mode 100644
index 0000000000000..51e16b7a0ce15
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementation.errors.txt
@@ -0,0 +1,15 @@
+a.ts(1,10): error TS2393: Duplicate function implementation.
+
+
+==== b.js (0 errors) ====
+ function foo() {
+ return 10;
+ }
+==== a.ts (1 errors) ====
+ function foo() {
+ ~~~
+!!! error TS2393: Duplicate function implementation.
+ return 30;
+ }
+
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementation.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementation.js
new file mode 100644
index 0000000000000..25d4a5be0fc64
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementation.js
@@ -0,0 +1,27 @@
+//// [tests/cases/compiler/jsFileCompilationDuplicateFunctionImplementation.ts] ////
+
+//// [b.js]
+function foo() {
+ return 10;
+}
+//// [a.ts]
+function foo() {
+ return 30;
+}
+
+
+
+//// [b.js]
+"use strict";
+function foo() {
+ return 10;
+}
+//// [a.js]
+"use strict";
+function foo() {
+ return 30;
+}
+
+
+//// [b.d.ts]
+//// [a.d.ts]
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementation.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementation.symbols
new file mode 100644
index 0000000000000..95e1a34d9635e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementation.symbols
@@ -0,0 +1,16 @@
+//// [tests/cases/compiler/jsFileCompilationDuplicateFunctionImplementation.ts] ////
+
+=== b.js ===
+function foo() {
+>foo : Symbol(foo, Decl(b.js, 0, 0), Decl(a.ts, 0, 0))
+
+ return 10;
+}
+=== a.ts ===
+function foo() {
+>foo : Symbol(foo, Decl(b.js, 0, 0), Decl(a.ts, 0, 0))
+
+ return 30;
+}
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementation.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementation.types
new file mode 100644
index 0000000000000..a12a4b908e6be
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementation.types
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/jsFileCompilationDuplicateFunctionImplementation.ts] ////
+
+=== b.js ===
+function foo() {
+>foo : { (): number; (): number; }
+
+ return 10;
+>10 : 10
+}
+=== a.ts ===
+function foo() {
+>foo : { (): number; (): number; }
+
+ return 30;
+>30 : 30
+}
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.errors.txt b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.errors.txt
new file mode 100644
index 0000000000000..142ed1352d92a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.errors.txt
@@ -0,0 +1,16 @@
+a.ts(1,10): error TS2393: Duplicate function implementation.
+
+
+==== a.ts (1 errors) ====
+ function foo() {
+ ~~~
+!!! error TS2393: Duplicate function implementation.
+ return 30;
+ }
+
+==== b.js (0 errors) ====
+ function foo() {
+ return 10;
+ }
+
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.js
new file mode 100644
index 0000000000000..6c66e66cea1de
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.js
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.ts] ////
+
+//// [a.ts]
+function foo() {
+ return 30;
+}
+
+//// [b.js]
+function foo() {
+ return 10;
+}
+
+
+
+//// [a.js]
+"use strict";
+function foo() {
+ return 30;
+}
+//// [b.js]
+"use strict";
+function foo() {
+ return 10;
+}
+
+
+//// [a.d.ts]
+//// [b.d.ts]
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.symbols
new file mode 100644
index 0000000000000..56a11f92877ee
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.symbols
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.ts] ////
+
+=== a.ts ===
+function foo() {
+>foo : Symbol(foo, Decl(a.ts, 0, 0), Decl(b.js, 0, 0))
+
+ return 30;
+}
+
+=== b.js ===
+function foo() {
+>foo : Symbol(foo, Decl(a.ts, 0, 0), Decl(b.js, 0, 0))
+
+ return 10;
+}
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.types
new file mode 100644
index 0000000000000..8cf49d3bd1d2a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.types
@@ -0,0 +1,19 @@
+//// [tests/cases/compiler/jsFileCompilationDuplicateFunctionImplementationFileOrderReversed.ts] ////
+
+=== a.ts ===
+function foo() {
+>foo : { (): number; (): number; }
+
+ return 30;
+>30 : 30
+}
+
+=== b.js ===
+function foo() {
+>foo : { (): number; (): number; }
+
+ return 10;
+>10 : 10
+}
+
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariable.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariable.js
new file mode 100644
index 0000000000000..7163747c5dbd8
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariable.js
@@ -0,0 +1,21 @@
+//// [tests/cases/compiler/jsFileCompilationDuplicateVariable.ts] ////
+
+//// [a.ts]
+var x = 10;
+
+//// [b.js]
+var x = "hello"; // Error is recorded here, but suppressed because the js file isn't checked
+
+
+//// [a.js]
+"use strict";
+var x = 10;
+//// [b.js]
+"use strict";
+var x = "hello"; // Error is recorded here, but suppressed because the js file isn't checked
+
+
+//// [a.d.ts]
+declare var x: number;
+//// [b.d.ts]
+declare var x: number;
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariable.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariable.symbols
new file mode 100644
index 0000000000000..6966b38384904
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariable.symbols
@@ -0,0 +1,10 @@
+//// [tests/cases/compiler/jsFileCompilationDuplicateVariable.ts] ////
+
+=== a.ts ===
+var x = 10;
+>x : Symbol(x, Decl(a.ts, 0, 3), Decl(b.js, 0, 3))
+
+=== b.js ===
+var x = "hello"; // Error is recorded here, but suppressed because the js file isn't checked
+>x : Symbol(x, Decl(a.ts, 0, 3), Decl(b.js, 0, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariable.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariable.types
new file mode 100644
index 0000000000000..04852646410d8
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariable.types
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/jsFileCompilationDuplicateVariable.ts] ////
+
+=== a.ts ===
+var x = 10;
+>x : number
+>10 : 10
+
+=== b.js ===
+var x = "hello"; // Error is recorded here, but suppressed because the js file isn't checked
+>x : number
+>"hello" : "hello"
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariableErrorReported.errors.txt b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariableErrorReported.errors.txt
new file mode 100644
index 0000000000000..a44b8c591ddfc
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariableErrorReported.errors.txt
@@ -0,0 +1,12 @@
+a.ts(1,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'number'.
+
+
+==== b.js (0 errors) ====
+ var x = "hello";
+
+==== a.ts (1 errors) ====
+ var x = 10; // Error reported
+ ~
+!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'number'.
+!!! related TS6203 b.js:1:5: 'x' was also declared here.
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariableErrorReported.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariableErrorReported.js
new file mode 100644
index 0000000000000..9c546d59871cf
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariableErrorReported.js
@@ -0,0 +1,21 @@
+//// [tests/cases/compiler/jsFileCompilationDuplicateVariableErrorReported.ts] ////
+
+//// [b.js]
+var x = "hello";
+
+//// [a.ts]
+var x = 10; // Error reported
+
+
+//// [b.js]
+"use strict";
+var x = "hello";
+//// [a.js]
+"use strict";
+var x = 10; // Error reported
+
+
+//// [b.d.ts]
+declare var x: string;
+//// [a.d.ts]
+declare var x: string;
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariableErrorReported.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariableErrorReported.symbols
new file mode 100644
index 0000000000000..d122fd9ec38a5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariableErrorReported.symbols
@@ -0,0 +1,10 @@
+//// [tests/cases/compiler/jsFileCompilationDuplicateVariableErrorReported.ts] ////
+
+=== b.js ===
+var x = "hello";
+>x : Symbol(x, Decl(b.js, 0, 3), Decl(a.ts, 0, 3))
+
+=== a.ts ===
+var x = 10; // Error reported
+>x : Symbol(x, Decl(b.js, 0, 3), Decl(a.ts, 0, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariableErrorReported.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariableErrorReported.types
new file mode 100644
index 0000000000000..cabb99161dffd
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationDuplicateVariableErrorReported.types
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/jsFileCompilationDuplicateVariableErrorReported.ts] ////
+
+=== b.js ===
+var x = "hello";
+>x : string
+>"hello" : "hello"
+
+=== a.ts ===
+var x = 10; // Error reported
+>x : string
+>10 : 10
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitDeclarations.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitDeclarations.js
new file mode 100644
index 0000000000000..6cbcbece0d6bb
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitDeclarations.js
@@ -0,0 +1,26 @@
+//// [tests/cases/compiler/jsFileCompilationEmitDeclarations.ts] ////
+
+//// [a.ts]
+class c {
+}
+
+//// [b.js]
+function foo() {
+}
+
+
+//// [a.js]
+"use strict";
+class c {
+}
+//// [b.js]
+"use strict";
+function foo() {
+}
+
+
+//// [a.d.ts]
+declare class c {
+}
+//// [b.d.ts]
+declare function foo(): void;
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitDeclarations.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitDeclarations.symbols
new file mode 100644
index 0000000000000..427342522ff35
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitDeclarations.symbols
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/jsFileCompilationEmitDeclarations.ts] ////
+
+=== a.ts ===
+class c {
+>c : Symbol(c, Decl(a.ts, 0, 0))
+}
+
+=== b.js ===
+function foo() {
+>foo : Symbol(foo, Decl(b.js, 0, 0))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitDeclarations.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitDeclarations.types
new file mode 100644
index 0000000000000..6a130e285c479
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitDeclarations.types
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/jsFileCompilationEmitDeclarations.ts] ////
+
+=== a.ts ===
+class c {
+>c : c
+}
+
+=== b.js ===
+function foo() {
+>foo : () => void
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitTrippleSlashReference.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitTrippleSlashReference.js
new file mode 100644
index 0000000000000..9265fb4e58414
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitTrippleSlashReference.js
@@ -0,0 +1,38 @@
+//// [tests/cases/compiler/jsFileCompilationEmitTrippleSlashReference.ts] ////
+
+//// [a.ts]
+class c {
+}
+
+//// [b.js]
+///
+function foo() {
+}
+
+//// [c.js]
+function bar() {
+}
+
+
+//// [a.js]
+"use strict";
+class c {
+}
+//// [c.js]
+"use strict";
+function bar() {
+}
+//// [b.js]
+"use strict";
+///
+function foo() {
+}
+
+
+//// [a.d.ts]
+declare class c {
+}
+//// [c.d.ts]
+declare function bar(): void;
+//// [b.d.ts]
+declare function foo(): void;
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitTrippleSlashReference.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitTrippleSlashReference.symbols
new file mode 100644
index 0000000000000..587047e77448a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitTrippleSlashReference.symbols
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/jsFileCompilationEmitTrippleSlashReference.ts] ////
+
+=== a.ts ===
+class c {
+>c : Symbol(c, Decl(a.ts, 0, 0))
+}
+
+=== b.js ===
+///
+function foo() {
+>foo : Symbol(foo, Decl(b.js, 0, 0))
+}
+
+=== c.js ===
+function bar() {
+>bar : Symbol(bar, Decl(c.js, 0, 0))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitTrippleSlashReference.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitTrippleSlashReference.types
new file mode 100644
index 0000000000000..4c97cbff3906e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationEmitTrippleSlashReference.types
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/jsFileCompilationEmitTrippleSlashReference.ts] ////
+
+=== a.ts ===
+class c {
+>c : c
+}
+
+=== b.js ===
+///
+function foo() {
+>foo : () => void
+}
+
+=== c.js ===
+function bar() {
+>bar : () => void
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetBeingRenamed.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetBeingRenamed.js
new file mode 100644
index 0000000000000..6c0dc2bdf4972
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetBeingRenamed.js
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/jsFileCompilationLetBeingRenamed.ts] ////
+
+//// [a.js]
+function foo(a) {
+ for (let a = 0; a < 10; a++) {
+ // do something
+ }
+}
+
+
+//// [a.js]
+"use strict";
+function foo(a) {
+ for (let a = 0; a < 10; a++) {
+ // do something
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetBeingRenamed.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetBeingRenamed.symbols
new file mode 100644
index 0000000000000..18994a659726e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetBeingRenamed.symbols
@@ -0,0 +1,16 @@
+//// [tests/cases/compiler/jsFileCompilationLetBeingRenamed.ts] ////
+
+=== a.js ===
+function foo(a) {
+>foo : Symbol(foo, Decl(a.js, 0, 0))
+>a : Symbol(a, Decl(a.js, 0, 13))
+
+ for (let a = 0; a < 10; a++) {
+>a : Symbol(a, Decl(a.js, 1, 12))
+>a : Symbol(a, Decl(a.js, 1, 12))
+>a : Symbol(a, Decl(a.js, 1, 12))
+
+ // do something
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetBeingRenamed.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetBeingRenamed.types
new file mode 100644
index 0000000000000..0b5c5835612c2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetBeingRenamed.types
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/jsFileCompilationLetBeingRenamed.ts] ////
+
+=== a.js ===
+function foo(a) {
+>foo : (a: any) => void
+>a : any
+
+ for (let a = 0; a < 10; a++) {
+>a : number
+>0 : 0
+>a < 10 : boolean
+>a : number
+>10 : 10
+>a++ : number
+>a : number
+
+ // do something
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder.js
new file mode 100644
index 0000000000000..0b769678ade15
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder.js
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/jsFileCompilationLetDeclarationOrder.ts] ////
+
+//// [b.js]
+let a = 10;
+b = 30;
+
+//// [a.ts]
+let b = 30;
+a = 10;
+
+
+//// [b.js]
+"use strict";
+let a = 10;
+b = 30;
+//// [a.js]
+"use strict";
+let b = 30;
+a = 10;
+
+
+//// [b.d.ts]
+declare let a: number;
+//// [a.d.ts]
+declare let b: number;
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder.symbols
new file mode 100644
index 0000000000000..e7327adb5561a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder.symbols
@@ -0,0 +1,16 @@
+//// [tests/cases/compiler/jsFileCompilationLetDeclarationOrder.ts] ////
+
+=== b.js ===
+let a = 10;
+>a : Symbol(a, Decl(b.js, 0, 3))
+
+b = 30;
+>b : Symbol(b, Decl(a.ts, 0, 3))
+
+=== a.ts ===
+let b = 30;
+>b : Symbol(b, Decl(a.ts, 0, 3))
+
+a = 10;
+>a : Symbol(a, Decl(b.js, 0, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder.types
new file mode 100644
index 0000000000000..e8596b8b46ad6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder.types
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/jsFileCompilationLetDeclarationOrder.ts] ////
+
+=== b.js ===
+let a = 10;
+>a : number
+>10 : 10
+
+b = 30;
+>b = 30 : 30
+>b : number
+>30 : 30
+
+=== a.ts ===
+let b = 30;
+>b : number
+>30 : 30
+
+a = 10;
+>a = 10 : 10
+>a : number
+>10 : 10
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder2.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder2.js
new file mode 100644
index 0000000000000..aa17690c3e1d0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder2.js
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/jsFileCompilationLetDeclarationOrder2.ts] ////
+
+//// [a.ts]
+let b = 30;
+a = 10;
+//// [b.js]
+let a = 10;
+b = 30;
+
+
+//// [a.js]
+"use strict";
+let b = 30;
+a = 10;
+//// [b.js]
+"use strict";
+let a = 10;
+b = 30;
+
+
+//// [a.d.ts]
+declare let b: number;
+//// [b.d.ts]
+declare let a: number;
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder2.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder2.symbols
new file mode 100644
index 0000000000000..5f8fb8408f8fc
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder2.symbols
@@ -0,0 +1,16 @@
+//// [tests/cases/compiler/jsFileCompilationLetDeclarationOrder2.ts] ////
+
+=== a.ts ===
+let b = 30;
+>b : Symbol(b, Decl(a.ts, 0, 3))
+
+a = 10;
+>a : Symbol(a, Decl(b.js, 0, 3))
+
+=== b.js ===
+let a = 10;
+>a : Symbol(a, Decl(b.js, 0, 3))
+
+b = 30;
+>b : Symbol(b, Decl(a.ts, 0, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder2.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder2.types
new file mode 100644
index 0000000000000..77b87151ee28c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationLetDeclarationOrder2.types
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/jsFileCompilationLetDeclarationOrder2.ts] ////
+
+=== a.ts ===
+let b = 30;
+>b : number
+>30 : 30
+
+a = 10;
+>a = 10 : 10
+>a : number
+>10 : 10
+
+=== b.js ===
+let a = 10;
+>a : number
+>10 : 10
+
+b = 30;
+>b = 30 : 30
+>b : number
+>30 : 30
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationNonNullAssertion.errors.txt b/tsc/testdata/baselines/reference/compiler/jsFileCompilationNonNullAssertion.errors.txt
new file mode 100644
index 0000000000000..68250662d890c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationNonNullAssertion.errors.txt
@@ -0,0 +1,8 @@
+/src/a.js(1,1): error TS8013: Non-null assertions can only be used in TypeScript files.
+
+
+==== /src/a.js (1 errors) ====
+ 0!
+ ~~
+!!! error TS8013: Non-null assertions can only be used in TypeScript files.
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationNonNullAssertion.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationNonNullAssertion.js
new file mode 100644
index 0000000000000..d4cbe0c46760f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationNonNullAssertion.js
@@ -0,0 +1,9 @@
+//// [tests/cases/compiler/jsFileCompilationNonNullAssertion.ts] ////
+
+//// [a.js]
+0!
+
+
+//// [a.js]
+"use strict";
+0;
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationNonNullAssertion.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationNonNullAssertion.symbols
new file mode 100644
index 0000000000000..1804a9bac8abd
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationNonNullAssertion.symbols
@@ -0,0 +1,6 @@
+//// [tests/cases/compiler/jsFileCompilationNonNullAssertion.ts] ////
+
+=== /src/a.js ===
+
+0!
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationNonNullAssertion.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationNonNullAssertion.types
new file mode 100644
index 0000000000000..8d2f97d97bdcb
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationNonNullAssertion.types
@@ -0,0 +1,7 @@
+//// [tests/cases/compiler/jsFileCompilationNonNullAssertion.ts] ////
+
+=== /src/a.js ===
+0!
+>0! : 0
+>0 : 0
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParamJsDocFunction.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParamJsDocFunction.js
new file mode 100644
index 0000000000000..866d31ec749ae
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParamJsDocFunction.js
@@ -0,0 +1,51 @@
+//// [tests/cases/compiler/jsFileCompilationRestParamJsDocFunction.ts] ////
+
+//// [_apply.js]
+/**
+ * A faster alternative to `Function#apply`, this function invokes `func`
+ * with the `this` binding of `thisArg` and the arguments of `args`.
+ *
+ * @private
+ * @param {Function} func The function to invoke.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {...*} args The arguments to invoke `func` with.
+ * @returns {*} Returns the result of `func`.
+ */
+function apply(func, thisArg, ...args) {
+ var length = args.length;
+ switch (length) {
+ case 0: return func.call(thisArg);
+ case 1: return func.call(thisArg, args[0]);
+ case 2: return func.call(thisArg, args[0], args[1]);
+ case 3: return func.call(thisArg, args[0], args[1], args[2]);
+ }
+ return func.apply(thisArg, args);
+}
+
+export default apply;
+
+
+//// [_apply.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+/**
+ * A faster alternative to `Function#apply`, this function invokes `func`
+ * with the `this` binding of `thisArg` and the arguments of `args`.
+ *
+ * @private
+ * @param {Function} func The function to invoke.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {...*} args The arguments to invoke `func` with.
+ * @returns {*} Returns the result of `func`.
+ */
+function apply(func, thisArg, ...args) {
+ var length = args.length;
+ switch (length) {
+ case 0: return func.call(thisArg);
+ case 1: return func.call(thisArg, args[0]);
+ case 2: return func.call(thisArg, args[0], args[1]);
+ case 3: return func.call(thisArg, args[0], args[1], args[2]);
+ }
+ return func.apply(thisArg, args);
+}
+exports.default = apply;
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParamJsDocFunction.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParamJsDocFunction.symbols
new file mode 100644
index 0000000000000..c737c16d0af92
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParamJsDocFunction.symbols
@@ -0,0 +1,69 @@
+//// [tests/cases/compiler/jsFileCompilationRestParamJsDocFunction.ts] ////
+
+=== _apply.js ===
+/**
+ * A faster alternative to `Function#apply`, this function invokes `func`
+ * with the `this` binding of `thisArg` and the arguments of `args`.
+ *
+ * @private
+ * @param {Function} func The function to invoke.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {...*} args The arguments to invoke `func` with.
+ * @returns {*} Returns the result of `func`.
+ */
+function apply(func, thisArg, ...args) {
+>apply : Symbol(apply, Decl(_apply.js, 0, 0))
+>func : Symbol(func, Decl(_apply.js, 10, 15))
+>thisArg : Symbol(thisArg, Decl(_apply.js, 10, 20))
+>args : Symbol(args, Decl(_apply.js, 10, 29))
+
+ var length = args.length;
+>length : Symbol(length, Decl(_apply.js, 11, 7))
+>args.length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
+>args : Symbol(args, Decl(_apply.js, 10, 29))
+>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
+
+ switch (length) {
+>length : Symbol(length, Decl(_apply.js, 11, 7))
+
+ case 0: return func.call(thisArg);
+>func.call : Symbol(Function.call, Decl(lib.es5.d.ts, --, --))
+>func : Symbol(func, Decl(_apply.js, 10, 15))
+>call : Symbol(Function.call, Decl(lib.es5.d.ts, --, --))
+>thisArg : Symbol(thisArg, Decl(_apply.js, 10, 20))
+
+ case 1: return func.call(thisArg, args[0]);
+>func.call : Symbol(Function.call, Decl(lib.es5.d.ts, --, --))
+>func : Symbol(func, Decl(_apply.js, 10, 15))
+>call : Symbol(Function.call, Decl(lib.es5.d.ts, --, --))
+>thisArg : Symbol(thisArg, Decl(_apply.js, 10, 20))
+>args : Symbol(args, Decl(_apply.js, 10, 29))
+
+ case 2: return func.call(thisArg, args[0], args[1]);
+>func.call : Symbol(Function.call, Decl(lib.es5.d.ts, --, --))
+>func : Symbol(func, Decl(_apply.js, 10, 15))
+>call : Symbol(Function.call, Decl(lib.es5.d.ts, --, --))
+>thisArg : Symbol(thisArg, Decl(_apply.js, 10, 20))
+>args : Symbol(args, Decl(_apply.js, 10, 29))
+>args : Symbol(args, Decl(_apply.js, 10, 29))
+
+ case 3: return func.call(thisArg, args[0], args[1], args[2]);
+>func.call : Symbol(Function.call, Decl(lib.es5.d.ts, --, --))
+>func : Symbol(func, Decl(_apply.js, 10, 15))
+>call : Symbol(Function.call, Decl(lib.es5.d.ts, --, --))
+>thisArg : Symbol(thisArg, Decl(_apply.js, 10, 20))
+>args : Symbol(args, Decl(_apply.js, 10, 29))
+>args : Symbol(args, Decl(_apply.js, 10, 29))
+>args : Symbol(args, Decl(_apply.js, 10, 29))
+ }
+ return func.apply(thisArg, args);
+>func.apply : Symbol(Function.apply, Decl(lib.es5.d.ts, --, --))
+>func : Symbol(func, Decl(_apply.js, 10, 15))
+>apply : Symbol(Function.apply, Decl(lib.es5.d.ts, --, --))
+>thisArg : Symbol(thisArg, Decl(_apply.js, 10, 20))
+>args : Symbol(args, Decl(_apply.js, 10, 29))
+}
+
+export default apply;
+>apply : Symbol(apply, Decl(_apply.js, 0, 0))
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParamJsDocFunction.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParamJsDocFunction.types
new file mode 100644
index 0000000000000..ae2faddc793c0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParamJsDocFunction.types
@@ -0,0 +1,90 @@
+//// [tests/cases/compiler/jsFileCompilationRestParamJsDocFunction.ts] ////
+
+=== _apply.js ===
+/**
+ * A faster alternative to `Function#apply`, this function invokes `func`
+ * with the `this` binding of `thisArg` and the arguments of `args`.
+ *
+ * @private
+ * @param {Function} func The function to invoke.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {...*} args The arguments to invoke `func` with.
+ * @returns {*} Returns the result of `func`.
+ */
+function apply(func, thisArg, ...args) {
+>apply : (func: Function, thisArg: any, ...args: any[]) => any
+>func : Function
+>thisArg : any
+>args : any[]
+
+ var length = args.length;
+>length : number
+>args.length : number
+>args : any[]
+>length : number
+
+ switch (length) {
+>length : number
+
+ case 0: return func.call(thisArg);
+>0 : 0
+>func.call(thisArg) : any
+>func.call : (this: Function, thisArg: any, ...argArray: any[]) => any
+>func : Function
+>call : (this: Function, thisArg: any, ...argArray: any[]) => any
+>thisArg : any
+
+ case 1: return func.call(thisArg, args[0]);
+>1 : 1
+>func.call(thisArg, args[0]) : any
+>func.call : (this: Function, thisArg: any, ...argArray: any[]) => any
+>func : Function
+>call : (this: Function, thisArg: any, ...argArray: any[]) => any
+>thisArg : any
+>args[0] : any
+>args : any[]
+>0 : 0
+
+ case 2: return func.call(thisArg, args[0], args[1]);
+>2 : 2
+>func.call(thisArg, args[0], args[1]) : any
+>func.call : (this: Function, thisArg: any, ...argArray: any[]) => any
+>func : Function
+>call : (this: Function, thisArg: any, ...argArray: any[]) => any
+>thisArg : any
+>args[0] : any
+>args : any[]
+>0 : 0
+>args[1] : any
+>args : any[]
+>1 : 1
+
+ case 3: return func.call(thisArg, args[0], args[1], args[2]);
+>3 : 3
+>func.call(thisArg, args[0], args[1], args[2]) : any
+>func.call : (this: Function, thisArg: any, ...argArray: any[]) => any
+>func : Function
+>call : (this: Function, thisArg: any, ...argArray: any[]) => any
+>thisArg : any
+>args[0] : any
+>args : any[]
+>0 : 0
+>args[1] : any
+>args : any[]
+>1 : 1
+>args[2] : any
+>args : any[]
+>2 : 2
+ }
+ return func.apply(thisArg, args);
+>func.apply(thisArg, args) : any
+>func.apply : (this: Function, thisArg: any, argArray?: any) => any
+>func : Function
+>apply : (this: Function, thisArg: any, argArray?: any) => any
+>thisArg : any
+>args : any[]
+}
+
+export default apply;
+>apply : (func: Function, thisArg: any, ...args: any[]) => any
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParameter.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParameter.js
new file mode 100644
index 0000000000000..f0228eeb5838d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParameter.js
@@ -0,0 +1,9 @@
+//// [tests/cases/compiler/jsFileCompilationRestParameter.ts] ////
+
+//// [a.js]
+function foo(...a) { }
+
+
+//// [a.js]
+"use strict";
+function foo(...a) { }
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParameter.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParameter.symbols
new file mode 100644
index 0000000000000..77e06465c1093
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParameter.symbols
@@ -0,0 +1,7 @@
+//// [tests/cases/compiler/jsFileCompilationRestParameter.ts] ////
+
+=== a.js ===
+function foo(...a) { }
+>foo : Symbol(foo, Decl(a.js, 0, 0))
+>a : Symbol(a, Decl(a.js, 0, 13))
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParameter.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParameter.types
new file mode 100644
index 0000000000000..ace365e6e6f89
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationRestParameter.types
@@ -0,0 +1,7 @@
+//// [tests/cases/compiler/jsFileCompilationRestParameter.ts] ////
+
+=== a.js ===
+function foo(...a) { }
+>foo : (...a: any[]) => void
+>a : any[]
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationShortHandProperty.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationShortHandProperty.js
new file mode 100644
index 0000000000000..62420c0d56dd6
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationShortHandProperty.js
@@ -0,0 +1,23 @@
+//// [tests/cases/compiler/jsFileCompilationShortHandProperty.ts] ////
+
+//// [a.js]
+function foo() {
+ var a = 10;
+ var b = "Hello";
+ return {
+ a,
+ b
+ };
+}
+
+
+//// [a.js]
+"use strict";
+function foo() {
+ var a = 10;
+ var b = "Hello";
+ return {
+ a,
+ b
+ };
+}
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationShortHandProperty.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationShortHandProperty.symbols
new file mode 100644
index 0000000000000..4cde6bb927a8d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationShortHandProperty.symbols
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/jsFileCompilationShortHandProperty.ts] ////
+
+=== a.js ===
+function foo() {
+>foo : Symbol(foo, Decl(a.js, 0, 0))
+
+ var a = 10;
+>a : Symbol(a, Decl(a.js, 1, 7))
+
+ var b = "Hello";
+>b : Symbol(b, Decl(a.js, 2, 7))
+
+ return {
+ a,
+>a : Symbol(a, Decl(a.js, 3, 12))
+
+ b
+>b : Symbol(b, Decl(a.js, 4, 10))
+
+ };
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationShortHandProperty.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationShortHandProperty.types
new file mode 100644
index 0000000000000..163af24a00ea7
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationShortHandProperty.types
@@ -0,0 +1,26 @@
+//// [tests/cases/compiler/jsFileCompilationShortHandProperty.ts] ////
+
+=== a.js ===
+function foo() {
+>foo : () => { a: number; b: string; }
+
+ var a = 10;
+>a : number
+>10 : 10
+
+ var b = "Hello";
+>b : string
+>"Hello" : "Hello"
+
+ return {
+>{ a, b } : { a: number; b: string; }
+
+ a,
+>a : number
+
+ b
+>b : string
+
+ };
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationTypeAssertions.errors.txt b/tsc/testdata/baselines/reference/compiler/jsFileCompilationTypeAssertions.errors.txt
new file mode 100644
index 0000000000000..c120f1de95352
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationTypeAssertions.errors.txt
@@ -0,0 +1,15 @@
+/src/a.js(1,6): error TS8016: Type assertion expressions can only be used in TypeScript files.
+/src/a.js(2,10): error TS17008: JSX element 'string' has no corresponding closing tag.
+/src/a.js(3,1): error TS1005: '' expected.
+
+
+==== /src/a.js (3 errors) ====
+ 0 as number;
+ ~~~~~~
+!!! error TS8016: Type assertion expressions can only be used in TypeScript files.
+ var v = undefined;
+ ~~~~~~
+!!! error TS17008: JSX element 'string' has no corresponding closing tag.
+
+
+!!! error TS1005: '' expected.
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationTypeAssertions.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationTypeAssertions.js
new file mode 100644
index 0000000000000..a2e589aa7172e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationTypeAssertions.js
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/jsFileCompilationTypeAssertions.ts] ////
+
+//// [a.js]
+0 as number;
+var v = undefined;
+
+
+//// [a.js]
+"use strict";
+0;
+var v = undefined;
+>;
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationTypeAssertions.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationTypeAssertions.symbols
new file mode 100644
index 0000000000000..66a4e783922e2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationTypeAssertions.symbols
@@ -0,0 +1,7 @@
+//// [tests/cases/compiler/jsFileCompilationTypeAssertions.ts] ////
+
+=== /src/a.js ===
+0 as number;
+var v = undefined;
+>v : Symbol(v, Decl(a.js, 1, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationTypeAssertions.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationTypeAssertions.types
new file mode 100644
index 0000000000000..161d671433d52
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationTypeAssertions.types
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/jsFileCompilationTypeAssertions.ts] ////
+
+=== /src/a.js ===
+0 as number;
+>0 as number : number
+>0 : 0
+
+var v = undefined;
+>v : any
+>undefined; : any
+>string : any
+
+> : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationWithEnabledCompositeOption.js b/tsc/testdata/baselines/reference/compiler/jsFileCompilationWithEnabledCompositeOption.js
new file mode 100644
index 0000000000000..c78d25add1356
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationWithEnabledCompositeOption.js
@@ -0,0 +1,26 @@
+//// [tests/cases/compiler/jsFileCompilationWithEnabledCompositeOption.ts] ////
+
+//// [a.ts]
+class c {
+}
+
+//// [b.js]
+function foo() {
+}
+
+
+//// [a.js]
+"use strict";
+class c {
+}
+//// [b.js]
+"use strict";
+function foo() {
+}
+
+
+//// [a.d.ts]
+declare class c {
+}
+//// [b.d.ts]
+declare function foo(): void;
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationWithEnabledCompositeOption.symbols b/tsc/testdata/baselines/reference/compiler/jsFileCompilationWithEnabledCompositeOption.symbols
new file mode 100644
index 0000000000000..047a93e777d45
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationWithEnabledCompositeOption.symbols
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/jsFileCompilationWithEnabledCompositeOption.ts] ////
+
+=== a.ts ===
+class c {
+>c : Symbol(c, Decl(a.ts, 0, 0))
+}
+
+=== b.js ===
+function foo() {
+>foo : Symbol(foo, Decl(b.js, 0, 0))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/jsFileCompilationWithEnabledCompositeOption.types b/tsc/testdata/baselines/reference/compiler/jsFileCompilationWithEnabledCompositeOption.types
new file mode 100644
index 0000000000000..1d05fbf535484
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/jsFileCompilationWithEnabledCompositeOption.types
@@ -0,0 +1,12 @@
+//// [tests/cases/compiler/jsFileCompilationWithEnabledCompositeOption.ts] ////
+
+=== a.ts ===
+class c {
+>c : c
+}
+
+=== b.js ===
+function foo() {
+>foo : () => void
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/keepImportsInDts1.errors.txt b/tsc/testdata/baselines/reference/compiler/keepImportsInDts1.errors.txt
new file mode 100644
index 0000000000000..f99aafb8d0757
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/keepImportsInDts1.errors.txt
@@ -0,0 +1,9 @@
+c:/app/main.ts(1,8): error TS2882: Cannot find module or type declarations for side-effect import of 'test'.
+
+
+==== c:/test.d.ts (0 errors) ====
+ export {};
+==== c:/app/main.ts (1 errors) ====
+ import "test"
+ ~~~~~~
+!!! error TS2882: Cannot find module or type declarations for side-effect import of 'test'.
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/keepImportsInDts1.js b/tsc/testdata/baselines/reference/compiler/keepImportsInDts1.js
new file mode 100644
index 0000000000000..f01be171207f0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/keepImportsInDts1.js
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/keepImportsInDts1.ts] ////
+
+//// [test.d.ts]
+export {};
+//// [main.ts]
+import "test"
+
+//// [main.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+require("test");
+
+
+//// [main.d.ts]
+import "test";
diff --git a/tsc/testdata/baselines/reference/compiler/keepImportsInDts1.symbols b/tsc/testdata/baselines/reference/compiler/keepImportsInDts1.symbols
new file mode 100644
index 0000000000000..f7477049d3372
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/keepImportsInDts1.symbols
@@ -0,0 +1,8 @@
+//// [tests/cases/compiler/keepImportsInDts1.ts] ////
+
+=== c:/test.d.ts ===
+
+export {};
+=== c:/app/main.ts ===
+
+import "test"
diff --git a/tsc/testdata/baselines/reference/compiler/keepImportsInDts1.types b/tsc/testdata/baselines/reference/compiler/keepImportsInDts1.types
new file mode 100644
index 0000000000000..f7477049d3372
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/keepImportsInDts1.types
@@ -0,0 +1,8 @@
+//// [tests/cases/compiler/keepImportsInDts1.ts] ////
+
+=== c:/test.d.ts ===
+
+export {};
+=== c:/app/main.ts ===
+
+import "test"
diff --git a/tsc/testdata/baselines/reference/compiler/keepImportsInDts2.js b/tsc/testdata/baselines/reference/compiler/keepImportsInDts2.js
new file mode 100644
index 0000000000000..6a71b8cf9a123
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/keepImportsInDts2.js
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/keepImportsInDts2.ts] ////
+
+//// [test.ts]
+export {};
+//// [main.ts]
+import "./folder/test"
+
+//// [test.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [main.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+require("./folder/test");
+
+
+//// [test.d.ts]
+export {};
+//// [main.d.ts]
+import "./folder/test";
diff --git a/tsc/testdata/baselines/reference/compiler/keepImportsInDts2.symbols b/tsc/testdata/baselines/reference/compiler/keepImportsInDts2.symbols
new file mode 100644
index 0000000000000..0f3861d849b1c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/keepImportsInDts2.symbols
@@ -0,0 +1,8 @@
+//// [tests/cases/compiler/keepImportsInDts2.ts] ////
+
+=== folder/test.ts ===
+
+export {};
+=== main.ts ===
+
+import "./folder/test"
diff --git a/tsc/testdata/baselines/reference/compiler/keepImportsInDts2.types b/tsc/testdata/baselines/reference/compiler/keepImportsInDts2.types
new file mode 100644
index 0000000000000..0f3861d849b1c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/keepImportsInDts2.types
@@ -0,0 +1,8 @@
+//// [tests/cases/compiler/keepImportsInDts2.ts] ////
+
+=== folder/test.ts ===
+
+export {};
+=== main.ts ===
+
+import "./folder/test"
diff --git a/tsc/testdata/baselines/reference/compiler/letDeclarations-useBeforeDefinition2.js b/tsc/testdata/baselines/reference/compiler/letDeclarations-useBeforeDefinition2.js
new file mode 100644
index 0000000000000..51b1bd9eaccde
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/letDeclarations-useBeforeDefinition2.js
@@ -0,0 +1,15 @@
+//// [tests/cases/compiler/letDeclarations-useBeforeDefinition2.ts] ////
+
+//// [file1.ts]
+l;
+
+//// [file2.ts]
+const l = 0;
+
+
+//// [file1.js]
+"use strict";
+l;
+//// [file2.js]
+"use strict";
+const l = 0;
diff --git a/tsc/testdata/baselines/reference/compiler/letDeclarations-useBeforeDefinition2.symbols b/tsc/testdata/baselines/reference/compiler/letDeclarations-useBeforeDefinition2.symbols
new file mode 100644
index 0000000000000..c2a27479c65d7
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/letDeclarations-useBeforeDefinition2.symbols
@@ -0,0 +1,10 @@
+//// [tests/cases/compiler/letDeclarations-useBeforeDefinition2.ts] ////
+
+=== file1.ts ===
+l;
+>l : Symbol(l, Decl(file2.ts, 0, 5))
+
+=== file2.ts ===
+const l = 0;
+>l : Symbol(l, Decl(file2.ts, 0, 5))
+
diff --git a/tsc/testdata/baselines/reference/compiler/letDeclarations-useBeforeDefinition2.types b/tsc/testdata/baselines/reference/compiler/letDeclarations-useBeforeDefinition2.types
new file mode 100644
index 0000000000000..ce7d51dafae34
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/letDeclarations-useBeforeDefinition2.types
@@ -0,0 +1,11 @@
+//// [tests/cases/compiler/letDeclarations-useBeforeDefinition2.ts] ////
+
+=== file1.ts ===
+l;
+>l : 0
+
+=== file2.ts ===
+const l = 0;
+>l : 0
+>0 : 0
+
diff --git a/tsc/testdata/baselines/reference/compiler/memberAccessMustUseModuleInstances.errors.txt b/tsc/testdata/baselines/reference/compiler/memberAccessMustUseModuleInstances.errors.txt
new file mode 100644
index 0000000000000..02b58e878c1b5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/memberAccessMustUseModuleInstances.errors.txt
@@ -0,0 +1,21 @@
+memberAccessMustUseModuleInstances_0.ts(3,9): error TS2322: Type 'null' is not assignable to type 'Promise'.
+memberAccessMustUseModuleInstances_1.ts(2,24): error TS2307: Cannot find module 'memberAccessMustUseModuleInstances_0' or its corresponding type declarations.
+
+
+==== memberAccessMustUseModuleInstances_1.ts (1 errors) ====
+ ///
+ import WinJS = require('memberAccessMustUseModuleInstances_0');
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'memberAccessMustUseModuleInstances_0' or its corresponding type declarations.
+
+ WinJS.Promise.timeout(10);
+
+==== memberAccessMustUseModuleInstances_0.ts (1 errors) ====
+ export class Promise {
+ static timeout(delay: number): Promise {
+ return null;
+ ~~~~~~
+!!! error TS2322: Type 'null' is not assignable to type 'Promise'.
+ }
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/memberAccessMustUseModuleInstances.js b/tsc/testdata/baselines/reference/compiler/memberAccessMustUseModuleInstances.js
new file mode 100644
index 0000000000000..c36e17ce0be59
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/memberAccessMustUseModuleInstances.js
@@ -0,0 +1,32 @@
+//// [tests/cases/compiler/memberAccessMustUseModuleInstances.ts] ////
+
+//// [memberAccessMustUseModuleInstances_0.ts]
+export class Promise {
+ static timeout(delay: number): Promise {
+ return null;
+ }
+}
+
+//// [memberAccessMustUseModuleInstances_1.ts]
+///
+import WinJS = require('memberAccessMustUseModuleInstances_0');
+
+WinJS.Promise.timeout(10);
+
+
+//// [memberAccessMustUseModuleInstances_0.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Promise = void 0;
+class Promise {
+ static timeout(delay) {
+ return null;
+ }
+}
+exports.Promise = Promise;
+//// [memberAccessMustUseModuleInstances_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+///
+const WinJS = require("memberAccessMustUseModuleInstances_0");
+WinJS.Promise.timeout(10);
diff --git a/tsc/testdata/baselines/reference/compiler/memberAccessMustUseModuleInstances.symbols b/tsc/testdata/baselines/reference/compiler/memberAccessMustUseModuleInstances.symbols
new file mode 100644
index 0000000000000..04f6e863dfaf9
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/memberAccessMustUseModuleInstances.symbols
@@ -0,0 +1,23 @@
+//// [tests/cases/compiler/memberAccessMustUseModuleInstances.ts] ////
+
+=== memberAccessMustUseModuleInstances_1.ts ===
+///
+import WinJS = require('memberAccessMustUseModuleInstances_0');
+>WinJS : Symbol(WinJS, Decl(memberAccessMustUseModuleInstances_1.ts, 0, 0))
+
+WinJS.Promise.timeout(10);
+>WinJS : Symbol(WinJS, Decl(memberAccessMustUseModuleInstances_1.ts, 0, 0))
+
+=== memberAccessMustUseModuleInstances_0.ts ===
+export class Promise {
+>Promise : Symbol(Promise, Decl(memberAccessMustUseModuleInstances_0.ts, 0, 0))
+
+ static timeout(delay: number): Promise {
+>timeout : Symbol(Promise.timeout, Decl(memberAccessMustUseModuleInstances_0.ts, 0, 22))
+>delay : Symbol(delay, Decl(memberAccessMustUseModuleInstances_0.ts, 1, 19))
+>Promise : Symbol(Promise, Decl(memberAccessMustUseModuleInstances_0.ts, 0, 0))
+
+ return null;
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/memberAccessMustUseModuleInstances.types b/tsc/testdata/baselines/reference/compiler/memberAccessMustUseModuleInstances.types
new file mode 100644
index 0000000000000..8704848c05f38
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/memberAccessMustUseModuleInstances.types
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/memberAccessMustUseModuleInstances.ts] ////
+
+=== memberAccessMustUseModuleInstances_1.ts ===
+///
+import WinJS = require('memberAccessMustUseModuleInstances_0');
+>WinJS : any
+
+WinJS.Promise.timeout(10);
+>WinJS.Promise.timeout(10) : any
+>WinJS.Promise.timeout : any
+>WinJS.Promise : any
+>WinJS : any
+>Promise : any
+>timeout : any
+>10 : 10
+
+=== memberAccessMustUseModuleInstances_0.ts ===
+export class Promise {
+>Promise : Promise
+
+ static timeout(delay: number): Promise {
+>timeout : (delay: number) => Promise
+>delay : number
+
+ return null;
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/mergedDeclarations6.js b/tsc/testdata/baselines/reference/compiler/mergedDeclarations6.js
new file mode 100644
index 0000000000000..e0906366a3529
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/mergedDeclarations6.js
@@ -0,0 +1,44 @@
+//// [tests/cases/compiler/mergedDeclarations6.ts] ////
+
+//// [a.ts]
+export class A {
+ protected protected: any;
+
+ protected setProtected(val: any) {
+ this.protected = val;
+ }
+}
+
+//// [b.ts]
+import {A} from './a';
+
+declare module "./a" {
+ interface A { }
+}
+
+export class B extends A {
+ protected setProtected() {
+
+ }
+}
+
+//// [a.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.A = void 0;
+class A {
+ setProtected(val) {
+ this.protected = val;
+ }
+}
+exports.A = A;
+//// [b.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.B = void 0;
+const a_1 = require("./a");
+class B extends a_1.A {
+ setProtected() {
+ }
+}
+exports.B = B;
diff --git a/tsc/testdata/baselines/reference/compiler/mergedDeclarations6.symbols b/tsc/testdata/baselines/reference/compiler/mergedDeclarations6.symbols
new file mode 100644
index 0000000000000..13ab6db5e13f3
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/mergedDeclarations6.symbols
@@ -0,0 +1,41 @@
+//// [tests/cases/compiler/mergedDeclarations6.ts] ////
+
+=== a.ts ===
+export class A {
+>A : Symbol(A, Decl(a.ts, 0, 0), Decl(b.ts, 2, 22))
+
+ protected protected: any;
+>protected : Symbol(A.protected, Decl(a.ts, 0, 16))
+
+ protected setProtected(val: any) {
+>setProtected : Symbol(A.setProtected, Decl(a.ts, 1, 29))
+>val : Symbol(val, Decl(a.ts, 3, 27))
+
+ this.protected = val;
+>this.protected : Symbol(A.protected, Decl(a.ts, 0, 16))
+>this : Symbol(A, Decl(a.ts, 0, 0), Decl(b.ts, 2, 22))
+>protected : Symbol(A.protected, Decl(a.ts, 0, 16))
+>val : Symbol(val, Decl(a.ts, 3, 27))
+ }
+}
+
+=== b.ts ===
+import {A} from './a';
+>A : Symbol(A, Decl(b.ts, 0, 8))
+
+declare module "./a" {
+>"./a" : Symbol("./a", Decl(a.ts, 0, 0), Decl(b.ts, 0, 22))
+
+ interface A { }
+>A : Symbol(A, Decl(a.ts, 0, 0), Decl(b.ts, 2, 22))
+}
+
+export class B extends A {
+>B : Symbol(B, Decl(b.ts, 4, 1))
+>A : Symbol(A, Decl(b.ts, 0, 8))
+
+ protected setProtected() {
+>setProtected : Symbol(B.setProtected, Decl(b.ts, 6, 26))
+
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/mergedDeclarations6.types b/tsc/testdata/baselines/reference/compiler/mergedDeclarations6.types
new file mode 100644
index 0000000000000..adb388a7ae0cd
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/mergedDeclarations6.types
@@ -0,0 +1,41 @@
+//// [tests/cases/compiler/mergedDeclarations6.ts] ////
+
+=== a.ts ===
+export class A {
+>A : A
+
+ protected protected: any;
+>protected : any
+
+ protected setProtected(val: any) {
+>setProtected : (val: any) => void
+>val : any
+
+ this.protected = val;
+>this.protected = val : any
+>this.protected : any
+>this : this
+>protected : any
+>val : any
+ }
+}
+
+=== b.ts ===
+import {A} from './a';
+>A : typeof A
+
+declare module "./a" {
+>"./a" : typeof import("./a")
+
+ interface A { }
+}
+
+export class B extends A {
+>B : B
+>A : A
+
+ protected setProtected() {
+>setProtected : () => void
+
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAliasAsFunctionArgument.errors.txt b/tsc/testdata/baselines/reference/compiler/moduleAliasAsFunctionArgument.errors.txt
new file mode 100644
index 0000000000000..58fd5c3b6a6e3
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAliasAsFunctionArgument.errors.txt
@@ -0,0 +1,18 @@
+moduleAliasAsFunctionArgument_1.ts(2,20): error TS2307: Cannot find module 'moduleAliasAsFunctionArgument_0' or its corresponding type declarations.
+
+
+==== moduleAliasAsFunctionArgument_1.ts (1 errors) ====
+ ///
+ import a = require('moduleAliasAsFunctionArgument_0');
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'moduleAliasAsFunctionArgument_0' or its corresponding type declarations.
+
+ function fn(arg: { x: number }) {
+ }
+
+ a.x; // OK
+ fn(a); // Error: property 'x' is missing from 'a'
+
+==== moduleAliasAsFunctionArgument_0.ts (0 errors) ====
+ export var x: number;
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAliasAsFunctionArgument.js b/tsc/testdata/baselines/reference/compiler/moduleAliasAsFunctionArgument.js
new file mode 100644
index 0000000000000..73a549d1f5a3d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAliasAsFunctionArgument.js
@@ -0,0 +1,29 @@
+//// [tests/cases/compiler/moduleAliasAsFunctionArgument.ts] ////
+
+//// [moduleAliasAsFunctionArgument_0.ts]
+export var x: number;
+
+//// [moduleAliasAsFunctionArgument_1.ts]
+///
+import a = require('moduleAliasAsFunctionArgument_0');
+
+function fn(arg: { x: number }) {
+}
+
+a.x; // OK
+fn(a); // Error: property 'x' is missing from 'a'
+
+
+//// [moduleAliasAsFunctionArgument_0.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+//// [moduleAliasAsFunctionArgument_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+///
+const a = require("moduleAliasAsFunctionArgument_0");
+function fn(arg) {
+}
+a.x; // OK
+fn(a); // Error: property 'x' is missing from 'a'
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAliasAsFunctionArgument.symbols b/tsc/testdata/baselines/reference/compiler/moduleAliasAsFunctionArgument.symbols
new file mode 100644
index 0000000000000..c02e2b49c1f61
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAliasAsFunctionArgument.symbols
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/moduleAliasAsFunctionArgument.ts] ////
+
+=== moduleAliasAsFunctionArgument_1.ts ===
+///
+import a = require('moduleAliasAsFunctionArgument_0');
+>a : Symbol(a, Decl(moduleAliasAsFunctionArgument_1.ts, 0, 0))
+
+function fn(arg: { x: number }) {
+>fn : Symbol(fn, Decl(moduleAliasAsFunctionArgument_1.ts, 1, 54))
+>arg : Symbol(arg, Decl(moduleAliasAsFunctionArgument_1.ts, 3, 12))
+>x : Symbol(x, Decl(moduleAliasAsFunctionArgument_1.ts, 3, 18))
+}
+
+a.x; // OK
+>a : Symbol(a, Decl(moduleAliasAsFunctionArgument_1.ts, 0, 0))
+
+fn(a); // Error: property 'x' is missing from 'a'
+>fn : Symbol(fn, Decl(moduleAliasAsFunctionArgument_1.ts, 1, 54))
+>a : Symbol(a, Decl(moduleAliasAsFunctionArgument_1.ts, 0, 0))
+
+=== moduleAliasAsFunctionArgument_0.ts ===
+export var x: number;
+>x : Symbol(x, Decl(moduleAliasAsFunctionArgument_0.ts, 0, 10))
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAliasAsFunctionArgument.types b/tsc/testdata/baselines/reference/compiler/moduleAliasAsFunctionArgument.types
new file mode 100644
index 0000000000000..7a4b7e3972baf
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAliasAsFunctionArgument.types
@@ -0,0 +1,27 @@
+//// [tests/cases/compiler/moduleAliasAsFunctionArgument.ts] ////
+
+=== moduleAliasAsFunctionArgument_1.ts ===
+///
+import a = require('moduleAliasAsFunctionArgument_0');
+>a : any
+
+function fn(arg: { x: number }) {
+>fn : (arg: { x: number; }) => void
+>arg : { x: number; }
+>x : number
+}
+
+a.x; // OK
+>a.x : any
+>a : any
+>x : any
+
+fn(a); // Error: property 'x' is missing from 'a'
+>fn(a) : void
+>fn : (arg: { x: number; }) => void
+>a : any
+
+=== moduleAliasAsFunctionArgument_0.ts ===
+export var x: number;
+>x : number
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationCollidingNamesInAugmentation1.js b/tsc/testdata/baselines/reference/compiler/moduleAugmentationCollidingNamesInAugmentation1.js
new file mode 100644
index 0000000000000..b428c0f2edcce
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationCollidingNamesInAugmentation1.js
@@ -0,0 +1,76 @@
+//// [tests/cases/compiler/moduleAugmentationCollidingNamesInAugmentation1.ts] ////
+
+//// [map1.ts]
+import { Observable } from "./observable"
+
+(Observable.prototype).map = function() { }
+
+declare module "./observable" {
+ interface I {x0}
+}
+
+//// [map2.ts]
+import { Observable } from "./observable"
+
+(Observable.prototype).map = function() { }
+
+declare module "./observable" {
+ interface I {x1}
+}
+
+
+//// [observable.ts]
+export declare class Observable {
+ filter(pred: (e:T) => boolean): Observable;
+}
+
+//// [main.ts]
+import { Observable } from "./observable"
+import "./map1";
+import "./map2";
+
+let x: Observable;
+
+
+//// [observable.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [map1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const observable_1 = require("./observable");
+observable_1.Observable.prototype.map = function () { };
+//// [map2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const observable_1 = require("./observable");
+observable_1.Observable.prototype.map = function () { };
+//// [main.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+require("./map1");
+require("./map2");
+let x;
+
+
+//// [observable.d.ts]
+export declare class Observable {
+ filter(pred: (e: T) => boolean): Observable;
+}
+//// [map1.d.ts]
+declare module "./observable" {
+ interface I {
+ x0: any;
+ }
+}
+export {};
+//// [map2.d.ts]
+declare module "./observable" {
+ interface I {
+ x1: any;
+ }
+}
+export {};
+//// [main.d.ts]
+import "./map1";
+import "./map2";
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationCollidingNamesInAugmentation1.symbols b/tsc/testdata/baselines/reference/compiler/moduleAugmentationCollidingNamesInAugmentation1.symbols
new file mode 100644
index 0000000000000..8fa26989cf91a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationCollidingNamesInAugmentation1.symbols
@@ -0,0 +1,62 @@
+//// [tests/cases/compiler/moduleAugmentationCollidingNamesInAugmentation1.ts] ////
+
+=== map1.ts ===
+import { Observable } from "./observable"
+>Observable : Symbol(Observable, Decl(map1.ts, 0, 8))
+
+(Observable.prototype).map = function() { }
+>Observable.prototype : Symbol(Observable.prototype)
+>Observable : Symbol(Observable, Decl(map1.ts, 0, 8))
+>prototype : Symbol(Observable.prototype)
+
+declare module "./observable" {
+>"./observable" : Symbol("./observable", Decl(observable.ts, 0, 0), Decl(map1.ts, 2, 48), Decl(map2.ts, 2, 48))
+
+ interface I {x0}
+>I : Symbol(I, Decl(map1.ts, 4, 31), Decl(map2.ts, 4, 31))
+>x0 : Symbol(I.x0, Decl(map1.ts, 5, 17))
+}
+
+=== map2.ts ===
+import { Observable } from "./observable"
+>Observable : Symbol(Observable, Decl(map2.ts, 0, 8))
+
+(Observable.prototype).map = function() { }
+>Observable.prototype : Symbol(Observable.prototype)
+>Observable : Symbol(Observable, Decl(map2.ts, 0, 8))
+>prototype : Symbol(Observable.prototype)
+
+declare module "./observable" {
+>"./observable" : Symbol("./observable", Decl(observable.ts, 0, 0), Decl(map1.ts, 2, 48), Decl(map2.ts, 2, 48))
+
+ interface I {x1}
+>I : Symbol(I, Decl(map1.ts, 4, 31), Decl(map2.ts, 4, 31))
+>x1 : Symbol(I.x1, Decl(map2.ts, 5, 17))
+}
+
+
+=== observable.ts ===
+export declare class Observable {
+>Observable : Symbol(Observable, Decl(observable.ts, 0, 0))
+>T : Symbol(T, Decl(observable.ts, 0, 32))
+
+ filter(pred: (e:T) => boolean): Observable;
+>filter : Symbol(Observable.filter, Decl(observable.ts, 0, 36))
+>pred : Symbol(pred, Decl(observable.ts, 1, 11))
+>e : Symbol(e, Decl(observable.ts, 1, 18))
+>T : Symbol(T, Decl(observable.ts, 0, 32))
+>Observable : Symbol(Observable, Decl(observable.ts, 0, 0))
+>T : Symbol(T, Decl(observable.ts, 0, 32))
+}
+
+=== main.ts ===
+import { Observable } from "./observable"
+>Observable : Symbol(Observable, Decl(main.ts, 0, 8))
+
+import "./map1";
+import "./map2";
+
+let x: Observable;
+>x : Symbol(x, Decl(main.ts, 4, 3))
+>Observable : Symbol(Observable, Decl(main.ts, 0, 8))
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationCollidingNamesInAugmentation1.types b/tsc/testdata/baselines/reference/compiler/moduleAugmentationCollidingNamesInAugmentation1.types
new file mode 100644
index 0000000000000..0c776b37b6452
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationCollidingNamesInAugmentation1.types
@@ -0,0 +1,67 @@
+//// [tests/cases/compiler/moduleAugmentationCollidingNamesInAugmentation1.ts] ////
+
+=== map1.ts ===
+import { Observable } from "./observable"
+>Observable : typeof Observable
+
+(Observable.prototype).map = function() { }
+>(Observable.prototype).map = function() { } : () => void
+>(Observable.prototype).map : any
+>(Observable.prototype) : any
+>Observable.prototype : any
+>Observable.prototype : Observable
+>Observable : typeof Observable
+>prototype : Observable
+>map : any
+>function() { } : () => void
+
+declare module "./observable" {
+>"./observable" : typeof import("./observable")
+
+ interface I {x0}
+>x0 : any
+}
+
+=== map2.ts ===
+import { Observable } from "./observable"
+>Observable : typeof Observable
+
+(Observable.prototype).map = function() { }
+>(Observable.prototype).map = function() { } : () => void
+>(Observable.prototype).map : any
+>(Observable.prototype) : any
+>Observable.prototype : any
+>Observable.prototype : Observable
+>Observable : typeof Observable
+>prototype : Observable
+>map : any
+>function() { } : () => void
+
+declare module "./observable" {
+>"./observable" : typeof import("./observable")
+
+ interface I {x1}
+>x1 : any
+}
+
+
+=== observable.ts ===
+export declare class Observable {
+>Observable : Observable
+
+ filter(pred: (e:T) => boolean): Observable;
+>filter : (pred: (e: T) => boolean) => Observable
+>pred : (e: T) => boolean
+>e : T
+}
+
+=== main.ts ===
+import { Observable } from "./observable"
+>Observable : typeof Observable
+
+import "./map1";
+import "./map2";
+
+let x: Observable;
+>x : Observable
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports1.errors.txt b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports1.errors.txt
new file mode 100644
index 0000000000000..25b6d6bc8cdb0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports1.errors.txt
@@ -0,0 +1,65 @@
+b.ts(1,17): error TS2564: Property 'x' has no initializer and is not definitely assigned in the constructor.
+d.ts(7,1): error TS2322: Type '() => undefined' is not assignable to type '() => B'.
+ Type 'undefined' is not assignable to type 'B'.
+d.ts(8,1): error TS2322: Type '() => undefined' is not assignable to type '() => Cls'.
+ Type 'undefined' is not assignable to type 'Cls'.
+main.ts(2,8): error TS2882: Cannot find module or type declarations for side-effect import of 'd'.
+main.ts(5,9): error TS2454: Variable 'a' is used before being assigned.
+main.ts(6,9): error TS2454: Variable 'a' is used before being assigned.
+
+
+==== a.ts (0 errors) ====
+ export class A {}
+
+==== b.ts (1 errors) ====
+ export class B {x: number;}
+ ~
+!!! error TS2564: Property 'x' has no initializer and is not definitely assigned in the constructor.
+
+==== c.d.ts (0 errors) ====
+ declare module "C" {
+ class Cls {y: string; }
+ }
+
+==== d.ts (2 errors) ====
+ ///
+
+ import {A} from "./a";
+ import {B} from "./b";
+ import {Cls} from "C";
+
+ A.prototype.getB = function () { return undefined; }
+ ~~~~~~~~~~~~~~~~
+!!! error TS2322: Type '() => undefined' is not assignable to type '() => B'.
+!!! error TS2322: Type 'undefined' is not assignable to type 'B'.
+ A.prototype.getCls = function () { return undefined; }
+ ~~~~~~~~~~~~~~~~~~
+!!! error TS2322: Type '() => undefined' is not assignable to type '() => Cls'.
+!!! error TS2322: Type 'undefined' is not assignable to type 'Cls'.
+
+ declare module "./a" {
+ interface A {
+ getB(): B;
+ }
+ }
+
+ declare module "./a" {
+ interface A {
+ getCls(): Cls;
+ }
+ }
+
+==== main.ts (3 errors) ====
+ import {A} from "./a";
+ import "d";
+ ~~~
+!!! error TS2882: Cannot find module or type declarations for side-effect import of 'd'.
+
+ let a: A;
+ let b = a.getB().x.toFixed();
+ ~
+!!! error TS2454: Variable 'a' is used before being assigned.
+ let c = a.getCls().y.toLowerCase();
+ ~
+!!! error TS2454: Variable 'a' is used before being assigned.
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports1.js b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports1.js
new file mode 100644
index 0000000000000..ccc7a1ab2eb5c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports1.js
@@ -0,0 +1,96 @@
+//// [tests/cases/compiler/moduleAugmentationsImports1.ts] ////
+
+//// [a.ts]
+export class A {}
+
+//// [b.ts]
+export class B {x: number;}
+
+//// [c.d.ts]
+declare module "C" {
+ class Cls {y: string; }
+}
+
+//// [d.ts]
+///
+
+import {A} from "./a";
+import {B} from "./b";
+import {Cls} from "C";
+
+A.prototype.getB = function () { return undefined; }
+A.prototype.getCls = function () { return undefined; }
+
+declare module "./a" {
+ interface A {
+ getB(): B;
+ }
+}
+
+declare module "./a" {
+ interface A {
+ getCls(): Cls;
+ }
+}
+
+//// [main.ts]
+import {A} from "./a";
+import "d";
+
+let a: A;
+let b = a.getB().x.toFixed();
+let c = a.getCls().y.toLowerCase();
+
+
+//// [a.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.A = void 0;
+class A {
+}
+exports.A = A;
+//// [b.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.B = void 0;
+class B {
+}
+exports.B = B;
+//// [d.js]
+"use strict";
+///
+Object.defineProperty(exports, "__esModule", { value: true });
+const a_1 = require("./a");
+a_1.A.prototype.getB = function () { return undefined; };
+a_1.A.prototype.getCls = function () { return undefined; };
+//// [main.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+require("d");
+let a;
+let b = a.getB().x.toFixed();
+let c = a.getCls().y.toLowerCase();
+
+
+//// [a.d.ts]
+export declare class A {
+}
+//// [b.d.ts]
+export declare class B {
+ x: number;
+}
+//// [d.d.ts]
+import { B } from "./b";
+import { Cls } from "C";
+declare module "./a" {
+ interface A {
+ getB(): B;
+ }
+}
+declare module "./a" {
+ interface A {
+ getCls(): Cls;
+ }
+}
+//// [main.d.ts]
+import "d";
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports1.symbols b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports1.symbols
new file mode 100644
index 0000000000000..1a5f293e86220
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports1.symbols
@@ -0,0 +1,102 @@
+//// [tests/cases/compiler/moduleAugmentationsImports1.ts] ////
+
+=== a.ts ===
+export class A {}
+>A : Symbol(A, Decl(a.ts, 0, 0), Decl(d.ts, 9, 22), Decl(d.ts, 15, 22))
+
+=== b.ts ===
+export class B {x: number;}
+>B : Symbol(B, Decl(b.ts, 0, 0))
+>x : Symbol(B.x, Decl(b.ts, 0, 16))
+
+=== c.d.ts ===
+declare module "C" {
+>"C" : Symbol("C", Decl(c.d.ts, 0, 0))
+
+ class Cls {y: string; }
+>Cls : Symbol(Cls, Decl(c.d.ts, 0, 20))
+>y : Symbol(Cls.y, Decl(c.d.ts, 1, 15))
+}
+
+=== d.ts ===
+///
+
+import {A} from "./a";
+>A : Symbol(A, Decl(d.ts, 2, 8))
+
+import {B} from "./b";
+>B : Symbol(B, Decl(d.ts, 3, 8))
+
+import {Cls} from "C";
+>Cls : Symbol(Cls, Decl(d.ts, 4, 8))
+
+A.prototype.getB = function () { return undefined; }
+>A.prototype.getB : Symbol(A.getB, Decl(d.ts, 10, 17))
+>A.prototype : Symbol(A.prototype)
+>A : Symbol(A, Decl(d.ts, 2, 8))
+>prototype : Symbol(A.prototype)
+>getB : Symbol(A.getB, Decl(d.ts, 10, 17))
+>undefined : Symbol(undefined)
+
+A.prototype.getCls = function () { return undefined; }
+>A.prototype.getCls : Symbol(A.getCls, Decl(d.ts, 16, 17))
+>A.prototype : Symbol(A.prototype)
+>A : Symbol(A, Decl(d.ts, 2, 8))
+>prototype : Symbol(A.prototype)
+>getCls : Symbol(A.getCls, Decl(d.ts, 16, 17))
+>undefined : Symbol(undefined)
+
+declare module "./a" {
+>"./a" : Symbol("./a", Decl(a.ts, 0, 0), Decl(d.ts, 7, 54), Decl(d.ts, 13, 1))
+
+ interface A {
+>A : Symbol(A, Decl(a.ts, 0, 0), Decl(d.ts, 9, 22), Decl(d.ts, 15, 22))
+
+ getB(): B;
+>getB : Symbol(A.getB, Decl(d.ts, 10, 17))
+>B : Symbol(B, Decl(d.ts, 3, 8))
+ }
+}
+
+declare module "./a" {
+>"./a" : Symbol("./a", Decl(a.ts, 0, 0), Decl(d.ts, 7, 54), Decl(d.ts, 13, 1))
+
+ interface A {
+>A : Symbol(A, Decl(a.ts, 0, 0), Decl(d.ts, 9, 22), Decl(d.ts, 15, 22))
+
+ getCls(): Cls;
+>getCls : Symbol(A.getCls, Decl(d.ts, 16, 17))
+>Cls : Symbol(Cls, Decl(d.ts, 4, 8))
+ }
+}
+
+=== main.ts ===
+import {A} from "./a";
+>A : Symbol(A, Decl(main.ts, 0, 8))
+
+import "d";
+
+let a: A;
+>a : Symbol(a, Decl(main.ts, 3, 3))
+>A : Symbol(A, Decl(main.ts, 0, 8))
+
+let b = a.getB().x.toFixed();
+>b : Symbol(b, Decl(main.ts, 4, 3))
+>a.getB().x.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
+>a.getB().x : Symbol(B.x, Decl(b.ts, 0, 16))
+>a.getB : Symbol(A.getB, Decl(d.ts, 10, 17))
+>a : Symbol(a, Decl(main.ts, 3, 3))
+>getB : Symbol(A.getB, Decl(d.ts, 10, 17))
+>x : Symbol(B.x, Decl(b.ts, 0, 16))
+>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
+
+let c = a.getCls().y.toLowerCase();
+>c : Symbol(c, Decl(main.ts, 5, 3))
+>a.getCls().y.toLowerCase : Symbol(String.toLowerCase, Decl(lib.es5.d.ts, --, --))
+>a.getCls().y : Symbol(Cls.y, Decl(c.d.ts, 1, 15))
+>a.getCls : Symbol(A.getCls, Decl(d.ts, 16, 17))
+>a : Symbol(a, Decl(main.ts, 3, 3))
+>getCls : Symbol(A.getCls, Decl(d.ts, 16, 17))
+>y : Symbol(Cls.y, Decl(c.d.ts, 1, 15))
+>toLowerCase : Symbol(String.toLowerCase, Decl(lib.es5.d.ts, --, --))
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports1.types b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports1.types
new file mode 100644
index 0000000000000..4869b765017e3
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports1.types
@@ -0,0 +1,103 @@
+//// [tests/cases/compiler/moduleAugmentationsImports1.ts] ////
+
+=== a.ts ===
+export class A {}
+>A : A
+
+=== b.ts ===
+export class B {x: number;}
+>B : B
+>x : number
+
+=== c.d.ts ===
+declare module "C" {
+>"C" : typeof import("C")
+
+ class Cls {y: string; }
+>Cls : Cls
+>y : string
+}
+
+=== d.ts ===
+///
+
+import {A} from "./a";
+>A : typeof A
+
+import {B} from "./b";
+>B : typeof B
+
+import {Cls} from "C";
+>Cls : typeof Cls
+
+A.prototype.getB = function () { return undefined; }
+>A.prototype.getB = function () { return undefined; } : () => undefined
+>A.prototype.getB : () => B
+>A.prototype : A
+>A : typeof A
+>prototype : A
+>getB : () => B
+>function () { return undefined; } : () => undefined
+>undefined : undefined
+
+A.prototype.getCls = function () { return undefined; }
+>A.prototype.getCls = function () { return undefined; } : () => undefined
+>A.prototype.getCls : () => Cls
+>A.prototype : A
+>A : typeof A
+>prototype : A
+>getCls : () => Cls
+>function () { return undefined; } : () => undefined
+>undefined : undefined
+
+declare module "./a" {
+>"./a" : typeof import("./a")
+
+ interface A {
+ getB(): B;
+>getB : () => B
+ }
+}
+
+declare module "./a" {
+>"./a" : typeof import("./a")
+
+ interface A {
+ getCls(): Cls;
+>getCls : () => Cls
+ }
+}
+
+=== main.ts ===
+import {A} from "./a";
+>A : typeof A
+
+import "d";
+
+let a: A;
+>a : A
+
+let b = a.getB().x.toFixed();
+>b : string
+>a.getB().x.toFixed() : string
+>a.getB().x.toFixed : (fractionDigits?: number) => string
+>a.getB().x : number
+>a.getB() : import("./b").B
+>a.getB : () => import("./b").B
+>a : A
+>getB : () => import("./b").B
+>x : number
+>toFixed : (fractionDigits?: number) => string
+
+let c = a.getCls().y.toLowerCase();
+>c : string
+>a.getCls().y.toLowerCase() : string
+>a.getCls().y.toLowerCase : () => string
+>a.getCls().y : string
+>a.getCls() : import("C").Cls
+>a.getCls : () => import("C").Cls
+>a : A
+>getCls : () => import("C").Cls
+>y : string
+>toLowerCase : () => string
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports2.errors.txt b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports2.errors.txt
new file mode 100644
index 0000000000000..05d50051fdbf4
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports2.errors.txt
@@ -0,0 +1,73 @@
+b.ts(1,17): error TS2564: Property 'x' has no initializer and is not definitely assigned in the constructor.
+d.ts(6,1): error TS2322: Type '() => undefined' is not assignable to type '() => B'.
+ Type 'undefined' is not assignable to type 'B'.
+e.ts(4,1): error TS2322: Type '() => undefined' is not assignable to type '() => Cls'.
+ Type 'undefined' is not assignable to type 'Cls'.
+main.ts(2,8): error TS2882: Cannot find module or type declarations for side-effect import of 'd'.
+main.ts(3,8): error TS2882: Cannot find module or type declarations for side-effect import of 'e'.
+main.ts(6,9): error TS2454: Variable 'a' is used before being assigned.
+main.ts(7,9): error TS2454: Variable 'a' is used before being assigned.
+
+
+==== a.ts (0 errors) ====
+ export class A {}
+
+==== b.ts (1 errors) ====
+ export class B {x: number;}
+ ~
+!!! error TS2564: Property 'x' has no initializer and is not definitely assigned in the constructor.
+
+==== c.d.ts (0 errors) ====
+ declare module "C" {
+ class Cls {y: string; }
+ }
+
+==== d.ts (1 errors) ====
+ ///
+
+ import {A} from "./a";
+ import {B} from "./b";
+
+ A.prototype.getB = function () { return undefined; }
+ ~~~~~~~~~~~~~~~~
+!!! error TS2322: Type '() => undefined' is not assignable to type '() => B'.
+!!! error TS2322: Type 'undefined' is not assignable to type 'B'.
+
+ declare module "./a" {
+ interface A {
+ getB(): B;
+ }
+ }
+
+==== e.ts (1 errors) ====
+ import {A} from "./a";
+ import {Cls} from "C";
+
+ A.prototype.getCls = function () { return undefined; }
+ ~~~~~~~~~~~~~~~~~~
+!!! error TS2322: Type '() => undefined' is not assignable to type '() => Cls'.
+!!! error TS2322: Type 'undefined' is not assignable to type 'Cls'.
+
+ declare module "./a" {
+ interface A {
+ getCls(): Cls;
+ }
+ }
+
+==== main.ts (4 errors) ====
+ import {A} from "./a";
+ import "d";
+ ~~~
+!!! error TS2882: Cannot find module or type declarations for side-effect import of 'd'.
+ import "e";
+ ~~~
+!!! error TS2882: Cannot find module or type declarations for side-effect import of 'e'.
+
+ let a: A;
+ let b = a.getB().x.toFixed();
+ ~
+!!! error TS2454: Variable 'a' is used before being assigned.
+ let c = a.getCls().y.toLowerCase();
+ ~
+!!! error TS2454: Variable 'a' is used before being assigned.
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports2.js b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports2.js
new file mode 100644
index 0000000000000..3308f476c7285
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports2.js
@@ -0,0 +1,108 @@
+//// [tests/cases/compiler/moduleAugmentationsImports2.ts] ////
+
+//// [a.ts]
+export class A {}
+
+//// [b.ts]
+export class B {x: number;}
+
+//// [c.d.ts]
+declare module "C" {
+ class Cls {y: string; }
+}
+
+//// [d.ts]
+///
+
+import {A} from "./a";
+import {B} from "./b";
+
+A.prototype.getB = function () { return undefined; }
+
+declare module "./a" {
+ interface A {
+ getB(): B;
+ }
+}
+
+//// [e.ts]
+import {A} from "./a";
+import {Cls} from "C";
+
+A.prototype.getCls = function () { return undefined; }
+
+declare module "./a" {
+ interface A {
+ getCls(): Cls;
+ }
+}
+
+//// [main.ts]
+import {A} from "./a";
+import "d";
+import "e";
+
+let a: A;
+let b = a.getB().x.toFixed();
+let c = a.getCls().y.toLowerCase();
+
+
+//// [a.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.A = void 0;
+class A {
+}
+exports.A = A;
+//// [b.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.B = void 0;
+class B {
+}
+exports.B = B;
+//// [d.js]
+"use strict";
+///
+Object.defineProperty(exports, "__esModule", { value: true });
+const a_1 = require("./a");
+a_1.A.prototype.getB = function () { return undefined; };
+//// [e.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const a_1 = require("./a");
+a_1.A.prototype.getCls = function () { return undefined; };
+//// [main.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+require("d");
+require("e");
+let a;
+let b = a.getB().x.toFixed();
+let c = a.getCls().y.toLowerCase();
+
+
+//// [a.d.ts]
+export declare class A {
+}
+//// [b.d.ts]
+export declare class B {
+ x: number;
+}
+//// [d.d.ts]
+import { B } from "./b";
+declare module "./a" {
+ interface A {
+ getB(): B;
+ }
+}
+//// [e.d.ts]
+import { Cls } from "C";
+declare module "./a" {
+ interface A {
+ getCls(): Cls;
+ }
+}
+//// [main.d.ts]
+import "d";
+import "e";
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports2.symbols b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports2.symbols
new file mode 100644
index 0000000000000..83fccc63e0dd7
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports2.symbols
@@ -0,0 +1,107 @@
+//// [tests/cases/compiler/moduleAugmentationsImports2.ts] ////
+
+=== a.ts ===
+export class A {}
+>A : Symbol(A, Decl(a.ts, 0, 0), Decl(d.ts, 7, 22), Decl(e.ts, 5, 22))
+
+=== b.ts ===
+export class B {x: number;}
+>B : Symbol(B, Decl(b.ts, 0, 0))
+>x : Symbol(B.x, Decl(b.ts, 0, 16))
+
+=== c.d.ts ===
+declare module "C" {
+>"C" : Symbol("C", Decl(c.d.ts, 0, 0))
+
+ class Cls {y: string; }
+>Cls : Symbol(Cls, Decl(c.d.ts, 0, 20))
+>y : Symbol(Cls.y, Decl(c.d.ts, 1, 15))
+}
+
+=== d.ts ===
+///
+
+import {A} from "./a";
+>A : Symbol(A, Decl(d.ts, 2, 8))
+
+import {B} from "./b";
+>B : Symbol(B, Decl(d.ts, 3, 8))
+
+A.prototype.getB = function () { return undefined; }
+>A.prototype.getB : Symbol(A.getB, Decl(d.ts, 8, 17))
+>A.prototype : Symbol(A.prototype)
+>A : Symbol(A, Decl(d.ts, 2, 8))
+>prototype : Symbol(A.prototype)
+>getB : Symbol(A.getB, Decl(d.ts, 8, 17))
+>undefined : Symbol(undefined)
+
+declare module "./a" {
+>"./a" : Symbol("./a", Decl(a.ts, 0, 0), Decl(d.ts, 5, 52), Decl(e.ts, 3, 54))
+
+ interface A {
+>A : Symbol(A, Decl(a.ts, 0, 0), Decl(d.ts, 7, 22), Decl(e.ts, 5, 22))
+
+ getB(): B;
+>getB : Symbol(A.getB, Decl(d.ts, 8, 17))
+>B : Symbol(B, Decl(d.ts, 3, 8))
+ }
+}
+
+=== e.ts ===
+import {A} from "./a";
+>A : Symbol(A, Decl(e.ts, 0, 8))
+
+import {Cls} from "C";
+>Cls : Symbol(Cls, Decl(e.ts, 1, 8))
+
+A.prototype.getCls = function () { return undefined; }
+>A.prototype.getCls : Symbol(A.getCls, Decl(e.ts, 6, 17))
+>A.prototype : Symbol(A.prototype)
+>A : Symbol(A, Decl(e.ts, 0, 8))
+>prototype : Symbol(A.prototype)
+>getCls : Symbol(A.getCls, Decl(e.ts, 6, 17))
+>undefined : Symbol(undefined)
+
+declare module "./a" {
+>"./a" : Symbol("./a", Decl(a.ts, 0, 0), Decl(d.ts, 5, 52), Decl(e.ts, 3, 54))
+
+ interface A {
+>A : Symbol(A, Decl(a.ts, 0, 0), Decl(d.ts, 7, 22), Decl(e.ts, 5, 22))
+
+ getCls(): Cls;
+>getCls : Symbol(A.getCls, Decl(e.ts, 6, 17))
+>Cls : Symbol(Cls, Decl(e.ts, 1, 8))
+ }
+}
+
+=== main.ts ===
+import {A} from "./a";
+>A : Symbol(A, Decl(main.ts, 0, 8))
+
+import "d";
+import "e";
+
+let a: A;
+>a : Symbol(a, Decl(main.ts, 4, 3))
+>A : Symbol(A, Decl(main.ts, 0, 8))
+
+let b = a.getB().x.toFixed();
+>b : Symbol(b, Decl(main.ts, 5, 3))
+>a.getB().x.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
+>a.getB().x : Symbol(B.x, Decl(b.ts, 0, 16))
+>a.getB : Symbol(A.getB, Decl(d.ts, 8, 17))
+>a : Symbol(a, Decl(main.ts, 4, 3))
+>getB : Symbol(A.getB, Decl(d.ts, 8, 17))
+>x : Symbol(B.x, Decl(b.ts, 0, 16))
+>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
+
+let c = a.getCls().y.toLowerCase();
+>c : Symbol(c, Decl(main.ts, 6, 3))
+>a.getCls().y.toLowerCase : Symbol(String.toLowerCase, Decl(lib.es5.d.ts, --, --))
+>a.getCls().y : Symbol(Cls.y, Decl(c.d.ts, 1, 15))
+>a.getCls : Symbol(A.getCls, Decl(e.ts, 6, 17))
+>a : Symbol(a, Decl(main.ts, 4, 3))
+>getCls : Symbol(A.getCls, Decl(e.ts, 6, 17))
+>y : Symbol(Cls.y, Decl(c.d.ts, 1, 15))
+>toLowerCase : Symbol(String.toLowerCase, Decl(lib.es5.d.ts, --, --))
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports2.types b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports2.types
new file mode 100644
index 0000000000000..1effd5205c2df
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports2.types
@@ -0,0 +1,108 @@
+//// [tests/cases/compiler/moduleAugmentationsImports2.ts] ////
+
+=== a.ts ===
+export class A {}
+>A : A
+
+=== b.ts ===
+export class B {x: number;}
+>B : B
+>x : number
+
+=== c.d.ts ===
+declare module "C" {
+>"C" : typeof import("C")
+
+ class Cls {y: string; }
+>Cls : Cls
+>y : string
+}
+
+=== d.ts ===
+///
+
+import {A} from "./a";
+>A : typeof A
+
+import {B} from "./b";
+>B : typeof B
+
+A.prototype.getB = function () { return undefined; }
+>A.prototype.getB = function () { return undefined; } : () => undefined
+>A.prototype.getB : () => B
+>A.prototype : A
+>A : typeof A
+>prototype : A
+>getB : () => B
+>function () { return undefined; } : () => undefined
+>undefined : undefined
+
+declare module "./a" {
+>"./a" : typeof import("./a")
+
+ interface A {
+ getB(): B;
+>getB : () => B
+ }
+}
+
+=== e.ts ===
+import {A} from "./a";
+>A : typeof A
+
+import {Cls} from "C";
+>Cls : typeof Cls
+
+A.prototype.getCls = function () { return undefined; }
+>A.prototype.getCls = function () { return undefined; } : () => undefined
+>A.prototype.getCls : () => Cls
+>A.prototype : A
+>A : typeof A
+>prototype : A
+>getCls : () => Cls
+>function () { return undefined; } : () => undefined
+>undefined : undefined
+
+declare module "./a" {
+>"./a" : typeof import("./a")
+
+ interface A {
+ getCls(): Cls;
+>getCls : () => Cls
+ }
+}
+
+=== main.ts ===
+import {A} from "./a";
+>A : typeof A
+
+import "d";
+import "e";
+
+let a: A;
+>a : A
+
+let b = a.getB().x.toFixed();
+>b : string
+>a.getB().x.toFixed() : string
+>a.getB().x.toFixed : (fractionDigits?: number) => string
+>a.getB().x : number
+>a.getB() : import("./b").B
+>a.getB : () => import("./b").B
+>a : A
+>getB : () => import("./b").B
+>x : number
+>toFixed : (fractionDigits?: number) => string
+
+let c = a.getCls().y.toLowerCase();
+>c : string
+>a.getCls().y.toLowerCase() : string
+>a.getCls().y.toLowerCase : () => string
+>a.getCls().y : string
+>a.getCls() : import("C").Cls
+>a.getCls : () => import("C").Cls
+>a : A
+>getCls : () => import("C").Cls
+>y : string
+>toLowerCase : () => string
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports3.errors.txt b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports3.errors.txt
new file mode 100644
index 0000000000000..0cda1d38f776b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports3.errors.txt
@@ -0,0 +1,68 @@
+d.d.ts(2,21): error TS2307: Cannot find module 'a' or its corresponding type declarations.
+d.d.ts(3,21): error TS2307: Cannot find module 'b' or its corresponding type declarations.
+main.ts(4,8): error TS2882: Cannot find module or type declarations for side-effect import of 'e'.
+main.ts(7,9): error TS2454: Variable 'a' is used before being assigned.
+main.ts(7,11): error TS2339: Property 'getB' does not exist on type 'A'.
+main.ts(8,9): error TS2454: Variable 'a' is used before being assigned.
+main.ts(8,11): error TS2339: Property 'getCls' does not exist on type 'A'.
+
+
+==== main.ts (5 errors) ====
+ ///
+ import {A} from "./a";
+ import "D";
+ import "e";
+ ~~~
+!!! error TS2882: Cannot find module or type declarations for side-effect import of 'e'.
+
+ let a: A;
+ let b = a.getB().x.toFixed();
+ ~
+!!! error TS2454: Variable 'a' is used before being assigned.
+ ~~~~
+!!! error TS2339: Property 'getB' does not exist on type 'A'.
+ let c = a.getCls().y.toLowerCase();
+ ~
+!!! error TS2454: Variable 'a' is used before being assigned.
+ ~~~~~~
+!!! error TS2339: Property 'getCls' does not exist on type 'A'.
+
+==== a.ts (0 errors) ====
+ export class A {}
+
+==== b.ts (0 errors) ====
+ export class B {x: number;}
+
+==== c.d.ts (0 errors) ====
+ declare module "C" {
+ class Cls {y: string; }
+ }
+
+==== d.d.ts (2 errors) ====
+ declare module "D" {
+ import {A} from "a";
+ ~~~
+!!! error TS2307: Cannot find module 'a' or its corresponding type declarations.
+ import {B} from "b";
+ ~~~
+!!! error TS2307: Cannot find module 'b' or its corresponding type declarations.
+ module "a" {
+ interface A {
+ getB(): B;
+ }
+ }
+ }
+
+==== e.ts (0 errors) ====
+ ///
+ import {A} from "./a";
+ import {Cls} from "C";
+
+ A.prototype.getCls = function () { return undefined; }
+
+ declare module "./a" {
+ interface A {
+ getCls(): Cls;
+ }
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports3.js b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports3.js
new file mode 100644
index 0000000000000..7901395302667
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports3.js
@@ -0,0 +1,71 @@
+//// [tests/cases/compiler/moduleAugmentationsImports3.ts] ////
+
+//// [a.ts]
+export class A {}
+
+//// [b.ts]
+export class B {x: number;}
+
+//// [c.d.ts]
+declare module "C" {
+ class Cls {y: string; }
+}
+
+//// [d.d.ts]
+declare module "D" {
+ import {A} from "a";
+ import {B} from "b";
+ module "a" {
+ interface A {
+ getB(): B;
+ }
+ }
+}
+
+//// [e.ts]
+///
+import {A} from "./a";
+import {Cls} from "C";
+
+A.prototype.getCls = function () { return undefined; }
+
+declare module "./a" {
+ interface A {
+ getCls(): Cls;
+ }
+}
+
+//// [main.ts]
+///
+import {A} from "./a";
+import "D";
+import "e";
+
+let a: A;
+let b = a.getB().x.toFixed();
+let c = a.getCls().y.toLowerCase();
+
+
+//// [a.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.A = void 0;
+class A {
+}
+exports.A = A;
+//// [main.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+require("D");
+require("e");
+let a;
+let b = a.getB().x.toFixed();
+let c = a.getCls().y.toLowerCase();
+
+
+//// [a.d.ts]
+export declare class A {
+}
+//// [main.d.ts]
+import "D";
+import "e";
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports3.symbols b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports3.symbols
new file mode 100644
index 0000000000000..7c38ae32d6522
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports3.symbols
@@ -0,0 +1,49 @@
+//// [tests/cases/compiler/moduleAugmentationsImports3.ts] ////
+
+=== main.ts ===
+///
+import {A} from "./a";
+>A : Symbol(A, Decl(main.ts, 1, 8))
+
+import "D";
+import "e";
+
+let a: A;
+>a : Symbol(a, Decl(main.ts, 5, 3))
+>A : Symbol(A, Decl(main.ts, 1, 8))
+
+let b = a.getB().x.toFixed();
+>b : Symbol(b, Decl(main.ts, 6, 3))
+>a : Symbol(a, Decl(main.ts, 5, 3))
+
+let c = a.getCls().y.toLowerCase();
+>c : Symbol(c, Decl(main.ts, 7, 3))
+>a : Symbol(a, Decl(main.ts, 5, 3))
+
+=== a.ts ===
+export class A {}
+>A : Symbol(A, Decl(a.ts, 0, 0))
+
+=== d.d.ts ===
+declare module "D" {
+>"D" : Symbol("D", Decl(d.d.ts, 0, 0))
+
+ import {A} from "a";
+>A : Symbol(A, Decl(d.d.ts, 1, 12))
+
+ import {B} from "b";
+>B : Symbol(B, Decl(d.d.ts, 2, 12))
+
+ module "a" {
+>"a" : Symbol("a", Decl(d.d.ts, 2, 24))
+
+ interface A {
+>A : Symbol(A, Decl(d.d.ts, 3, 16))
+
+ getB(): B;
+>getB : Symbol(A.getB, Decl(d.d.ts, 4, 21))
+>B : Symbol(B, Decl(d.d.ts, 2, 12))
+ }
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports3.types b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports3.types
new file mode 100644
index 0000000000000..7002e41398aca
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports3.types
@@ -0,0 +1,61 @@
+//// [tests/cases/compiler/moduleAugmentationsImports3.ts] ////
+
+=== main.ts ===
+///
+import {A} from "./a";
+>A : typeof A
+
+import "D";
+import "e";
+
+let a: A;
+>a : A
+
+let b = a.getB().x.toFixed();
+>b : any
+>a.getB().x.toFixed() : any
+>a.getB().x.toFixed : any
+>a.getB().x : any
+>a.getB() : any
+>a.getB : any
+>a : A
+>getB : any
+>x : any
+>toFixed : any
+
+let c = a.getCls().y.toLowerCase();
+>c : any
+>a.getCls().y.toLowerCase() : any
+>a.getCls().y.toLowerCase : any
+>a.getCls().y : any
+>a.getCls() : any
+>a.getCls : any
+>a : A
+>getCls : any
+>y : any
+>toLowerCase : any
+
+=== a.ts ===
+export class A {}
+>A : A
+
+=== d.d.ts ===
+declare module "D" {
+>"D" : typeof import("D")
+
+ import {A} from "a";
+>A : any
+
+ import {B} from "b";
+>B : any
+
+ module "a" {
+>"a" : any
+
+ interface A {
+ getB(): B;
+>getB : () => B
+ }
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports4.errors.txt b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports4.errors.txt
new file mode 100644
index 0000000000000..caf90258d87d2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports4.errors.txt
@@ -0,0 +1,69 @@
+d.d.ts(2,21): error TS2307: Cannot find module 'a' or its corresponding type declarations.
+d.d.ts(3,21): error TS2307: Cannot find module 'b' or its corresponding type declarations.
+e.d.ts(3,21): error TS2307: Cannot find module 'a' or its corresponding type declarations.
+main.ts(8,9): error TS2454: Variable 'a' is used before being assigned.
+main.ts(8,11): error TS2339: Property 'getB' does not exist on type 'A'.
+main.ts(9,9): error TS2454: Variable 'a' is used before being assigned.
+main.ts(9,11): error TS2339: Property 'getCls' does not exist on type 'A'.
+
+
+==== main.ts (4 errors) ====
+ ///
+ ///
+ import {A} from "./a";
+ import "D";
+ import "E";
+
+ let a: A;
+ let b = a.getB().x.toFixed();
+ ~
+!!! error TS2454: Variable 'a' is used before being assigned.
+ ~~~~
+!!! error TS2339: Property 'getB' does not exist on type 'A'.
+ let c = a.getCls().y.toLowerCase();
+ ~
+!!! error TS2454: Variable 'a' is used before being assigned.
+ ~~~~~~
+!!! error TS2339: Property 'getCls' does not exist on type 'A'.
+
+==== a.ts (0 errors) ====
+ export class A {}
+
+==== b.ts (0 errors) ====
+ export class B {x: number;}
+
+==== c.d.ts (0 errors) ====
+ declare module "C" {
+ class Cls {y: string; }
+ }
+
+==== d.d.ts (2 errors) ====
+ declare module "D" {
+ import {A} from "a";
+ ~~~
+!!! error TS2307: Cannot find module 'a' or its corresponding type declarations.
+ import {B} from "b";
+ ~~~
+!!! error TS2307: Cannot find module 'b' or its corresponding type declarations.
+ module "a" {
+ interface A {
+ getB(): B;
+ }
+ }
+ }
+
+==== e.d.ts (1 errors) ====
+ ///
+ declare module "E" {
+ import {A} from "a";
+ ~~~
+!!! error TS2307: Cannot find module 'a' or its corresponding type declarations.
+ import {Cls} from "C";
+
+ module "a" {
+ interface A {
+ getCls(): Cls;
+ }
+ }
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports4.js b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports4.js
new file mode 100644
index 0000000000000..2c4919d99c277
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports4.js
@@ -0,0 +1,72 @@
+//// [tests/cases/compiler/moduleAugmentationsImports4.ts] ////
+
+//// [a.ts]
+export class A {}
+
+//// [b.ts]
+export class B {x: number;}
+
+//// [c.d.ts]
+declare module "C" {
+ class Cls {y: string; }
+}
+
+//// [d.d.ts]
+declare module "D" {
+ import {A} from "a";
+ import {B} from "b";
+ module "a" {
+ interface A {
+ getB(): B;
+ }
+ }
+}
+
+//// [e.d.ts]
+///
+declare module "E" {
+ import {A} from "a";
+ import {Cls} from "C";
+
+ module "a" {
+ interface A {
+ getCls(): Cls;
+ }
+ }
+}
+
+//// [main.ts]
+///
+///
+import {A} from "./a";
+import "D";
+import "E";
+
+let a: A;
+let b = a.getB().x.toFixed();
+let c = a.getCls().y.toLowerCase();
+
+
+//// [a.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.A = void 0;
+class A {
+}
+exports.A = A;
+//// [main.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+require("D");
+require("E");
+let a;
+let b = a.getB().x.toFixed();
+let c = a.getCls().y.toLowerCase();
+
+
+//// [a.d.ts]
+export declare class A {
+}
+//// [main.d.ts]
+import "D";
+import "E";
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports4.symbols b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports4.symbols
new file mode 100644
index 0000000000000..a3fa99e030c0f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports4.symbols
@@ -0,0 +1,83 @@
+//// [tests/cases/compiler/moduleAugmentationsImports4.ts] ////
+
+=== main.ts ===
+///
+///
+import {A} from "./a";
+>A : Symbol(A, Decl(main.ts, 2, 8))
+
+import "D";
+import "E";
+
+let a: A;
+>a : Symbol(a, Decl(main.ts, 6, 3))
+>A : Symbol(A, Decl(main.ts, 2, 8))
+
+let b = a.getB().x.toFixed();
+>b : Symbol(b, Decl(main.ts, 7, 3))
+>a : Symbol(a, Decl(main.ts, 6, 3))
+
+let c = a.getCls().y.toLowerCase();
+>c : Symbol(c, Decl(main.ts, 8, 3))
+>a : Symbol(a, Decl(main.ts, 6, 3))
+
+=== a.ts ===
+export class A {}
+>A : Symbol(A, Decl(a.ts, 0, 0))
+
+=== c.d.ts ===
+declare module "C" {
+>"C" : Symbol("C", Decl(c.d.ts, 0, 0))
+
+ class Cls {y: string; }
+>Cls : Symbol(Cls, Decl(c.d.ts, 0, 20))
+>y : Symbol(Cls.y, Decl(c.d.ts, 1, 15))
+}
+
+=== d.d.ts ===
+declare module "D" {
+>"D" : Symbol("D", Decl(d.d.ts, 0, 0))
+
+ import {A} from "a";
+>A : Symbol(A, Decl(d.d.ts, 1, 12))
+
+ import {B} from "b";
+>B : Symbol(B, Decl(d.d.ts, 2, 12))
+
+ module "a" {
+>"a" : Symbol("a", Decl(d.d.ts, 2, 24))
+
+ interface A {
+>A : Symbol(A, Decl(d.d.ts, 3, 16))
+
+ getB(): B;
+>getB : Symbol(A.getB, Decl(d.d.ts, 4, 21))
+>B : Symbol(B, Decl(d.d.ts, 2, 12))
+ }
+ }
+}
+
+=== e.d.ts ===
+///
+declare module "E" {
+>"E" : Symbol("E", Decl(e.d.ts, 0, 0))
+
+ import {A} from "a";
+>A : Symbol(A, Decl(e.d.ts, 2, 12))
+
+ import {Cls} from "C";
+>Cls : Symbol(Cls, Decl(e.d.ts, 3, 12))
+
+ module "a" {
+>"a" : Symbol("a", Decl(e.d.ts, 3, 26))
+
+ interface A {
+>A : Symbol(A, Decl(e.d.ts, 5, 16))
+
+ getCls(): Cls;
+>getCls : Symbol(A.getCls, Decl(e.d.ts, 6, 21))
+>Cls : Symbol(Cls, Decl(e.d.ts, 3, 12))
+ }
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports4.types b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports4.types
new file mode 100644
index 0000000000000..df1341e5ac2df
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleAugmentationsImports4.types
@@ -0,0 +1,92 @@
+//// [tests/cases/compiler/moduleAugmentationsImports4.ts] ////
+
+=== main.ts ===
+///
+///
+import {A} from "./a";
+>A : typeof A
+
+import "D";
+import "E";
+
+let a: A;
+>a : A
+
+let b = a.getB().x.toFixed();
+>b : any
+>a.getB().x.toFixed() : any
+>a.getB().x.toFixed : any
+>a.getB().x : any
+>a.getB() : any
+>a.getB : any
+>a : A
+>getB : any
+>x : any
+>toFixed : any
+
+let c = a.getCls().y.toLowerCase();
+>c : any
+>a.getCls().y.toLowerCase() : any
+>a.getCls().y.toLowerCase : any
+>a.getCls().y : any
+>a.getCls() : any
+>a.getCls : any
+>a : A
+>getCls : any
+>y : any
+>toLowerCase : any
+
+=== a.ts ===
+export class A {}
+>A : A
+
+=== c.d.ts ===
+declare module "C" {
+>"C" : typeof import("C")
+
+ class Cls {y: string; }
+>Cls : Cls
+>y : string
+}
+
+=== d.d.ts ===
+declare module "D" {
+>"D" : typeof import("D")
+
+ import {A} from "a";
+>A : any
+
+ import {B} from "b";
+>B : any
+
+ module "a" {
+>"a" : any
+
+ interface A {
+ getB(): B;
+>getB : () => B
+ }
+ }
+}
+
+=== e.d.ts ===
+///
+declare module "E" {
+>"E" : typeof import("E")
+
+ import {A} from "a";
+>A : any
+
+ import {Cls} from "C";
+>Cls : typeof Cls
+
+ module "a" {
+>"a" : any
+
+ interface A {
+ getCls(): Cls;
+>getCls : () => Cls
+ }
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleImportedForTypeArgumentPosition.errors.txt b/tsc/testdata/baselines/reference/compiler/moduleImportedForTypeArgumentPosition.errors.txt
new file mode 100644
index 0000000000000..d3b21bd66e34b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleImportedForTypeArgumentPosition.errors.txt
@@ -0,0 +1,15 @@
+moduleImportedForTypeArgumentPosition_1.ts(2,21): error TS2307: Cannot find module 'moduleImportedForTypeArgumentPosition_0' or its corresponding type declarations.
+
+
+==== moduleImportedForTypeArgumentPosition_1.ts (1 errors) ====
+ /**This is on import declaration*/
+ import M2 = require("moduleImportedForTypeArgumentPosition_0");
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'moduleImportedForTypeArgumentPosition_0' or its corresponding type declarations.
+ class C1{ }
+ class Test1 extends C1 {
+ }
+
+==== moduleImportedForTypeArgumentPosition_0.ts (0 errors) ====
+ export interface M2C { }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/moduleImportedForTypeArgumentPosition.js b/tsc/testdata/baselines/reference/compiler/moduleImportedForTypeArgumentPosition.js
new file mode 100644
index 0000000000000..cdcda8e0410f2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleImportedForTypeArgumentPosition.js
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/moduleImportedForTypeArgumentPosition.ts] ////
+
+//// [moduleImportedForTypeArgumentPosition_0.ts]
+export interface M2C { }
+
+//// [moduleImportedForTypeArgumentPosition_1.ts]
+/**This is on import declaration*/
+import M2 = require("moduleImportedForTypeArgumentPosition_0");
+class C1{ }
+class Test1 extends C1 {
+}
+
+
+//// [moduleImportedForTypeArgumentPosition_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+class C1 {
+}
+class Test1 extends C1 {
+}
diff --git a/tsc/testdata/baselines/reference/compiler/moduleImportedForTypeArgumentPosition.symbols b/tsc/testdata/baselines/reference/compiler/moduleImportedForTypeArgumentPosition.symbols
new file mode 100644
index 0000000000000..f239fa60d0f05
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleImportedForTypeArgumentPosition.symbols
@@ -0,0 +1,18 @@
+//// [tests/cases/compiler/moduleImportedForTypeArgumentPosition.ts] ////
+
+=== moduleImportedForTypeArgumentPosition_1.ts ===
+/**This is on import declaration*/
+import M2 = require("moduleImportedForTypeArgumentPosition_0");
+>M2 : Symbol(M2, Decl(moduleImportedForTypeArgumentPosition_1.ts, 0, 0))
+
+class C1{ }
+>C1 : Symbol(C1, Decl(moduleImportedForTypeArgumentPosition_1.ts, 1, 63))
+>T : Symbol(T, Decl(moduleImportedForTypeArgumentPosition_1.ts, 2, 9))
+
+class Test1 extends C1 {
+>Test1 : Symbol(Test1, Decl(moduleImportedForTypeArgumentPosition_1.ts, 2, 14))
+>C1 : Symbol(C1, Decl(moduleImportedForTypeArgumentPosition_1.ts, 1, 63))
+>M2 : Symbol(M2, Decl(moduleImportedForTypeArgumentPosition_1.ts, 0, 0))
+>M2C : Symbol(M2.M2C)
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleImportedForTypeArgumentPosition.types b/tsc/testdata/baselines/reference/compiler/moduleImportedForTypeArgumentPosition.types
new file mode 100644
index 0000000000000..1714e19fa8187
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleImportedForTypeArgumentPosition.types
@@ -0,0 +1,16 @@
+//// [tests/cases/compiler/moduleImportedForTypeArgumentPosition.ts] ////
+
+=== moduleImportedForTypeArgumentPosition_1.ts ===
+/**This is on import declaration*/
+import M2 = require("moduleImportedForTypeArgumentPosition_0");
+>M2 : any
+
+class C1{ }
+>C1 : C1
+
+class Test1 extends C1 {
+>Test1 : Test1
+>C1 : C1
+>M2 : any
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleMergeConstructor.js b/tsc/testdata/baselines/reference/compiler/moduleMergeConstructor.js
new file mode 100644
index 0000000000000..a2523e5f44545
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleMergeConstructor.js
@@ -0,0 +1,70 @@
+//// [tests/cases/compiler/moduleMergeConstructor.ts] ////
+
+//// [foo.d.ts]
+declare module "foo" {
+ export class Foo {
+ constructor();
+ method1(): any;
+ }
+}
+
+//// [foo-ext.d.ts]
+declare module "foo" {
+ export interface Foo {
+ method2(): any;
+ }
+}
+
+//// [index.ts]
+import * as foo from "foo";
+
+class Test {
+ bar: foo.Foo;
+ constructor() {
+ this.bar = new foo.Foo();
+ }
+}
+
+
+//// [index.js]
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || (function () {
+ var ownKeys = function(o) {
+ ownKeys = Object.getOwnPropertyNames || function (o) {
+ var ar = [];
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+ return ar;
+ };
+ return ownKeys(o);
+ };
+ return function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+ __setModuleDefault(result, mod);
+ return result;
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+const foo = __importStar(require("foo"));
+class Test {
+ constructor() {
+ this.bar = new foo.Foo();
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/moduleMergeConstructor.symbols b/tsc/testdata/baselines/reference/compiler/moduleMergeConstructor.symbols
new file mode 100644
index 0000000000000..45ee62d02e2bf
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleMergeConstructor.symbols
@@ -0,0 +1,50 @@
+//// [tests/cases/compiler/moduleMergeConstructor.ts] ////
+
+=== foo.d.ts ===
+declare module "foo" {
+>"foo" : Symbol("foo", Decl(foo.d.ts, 0, 0), Decl(foo-ext.d.ts, 0, 0))
+
+ export class Foo {
+>Foo : Symbol(Foo, Decl(foo.d.ts, 0, 22), Decl(foo-ext.d.ts, 0, 22))
+
+ constructor();
+ method1(): any;
+>method1 : Symbol(Foo.method1, Decl(foo.d.ts, 2, 22))
+ }
+}
+
+=== foo-ext.d.ts ===
+declare module "foo" {
+>"foo" : Symbol("foo", Decl(foo.d.ts, 0, 0), Decl(foo-ext.d.ts, 0, 0))
+
+ export interface Foo {
+>Foo : Symbol(Foo, Decl(foo.d.ts, 0, 22), Decl(foo-ext.d.ts, 0, 22))
+
+ method2(): any;
+>method2 : Symbol(Foo.method2, Decl(foo-ext.d.ts, 1, 26))
+ }
+}
+
+=== index.ts ===
+import * as foo from "foo";
+>foo : Symbol(foo, Decl(index.ts, 0, 6))
+
+class Test {
+>Test : Symbol(Test, Decl(index.ts, 0, 27))
+
+ bar: foo.Foo;
+>bar : Symbol(Test.bar, Decl(index.ts, 2, 12))
+>foo : Symbol(foo, Decl(index.ts, 0, 6))
+>Foo : Symbol(foo.Foo, Decl(foo.d.ts, 0, 22), Decl(foo-ext.d.ts, 0, 22))
+
+ constructor() {
+ this.bar = new foo.Foo();
+>this.bar : Symbol(Test.bar, Decl(index.ts, 2, 12))
+>this : Symbol(Test, Decl(index.ts, 0, 27))
+>bar : Symbol(Test.bar, Decl(index.ts, 2, 12))
+>foo.Foo : Symbol(foo.Foo, Decl(foo.d.ts, 0, 22), Decl(foo-ext.d.ts, 0, 22))
+>foo : Symbol(foo, Decl(index.ts, 0, 6))
+>Foo : Symbol(foo.Foo, Decl(foo.d.ts, 0, 22), Decl(foo-ext.d.ts, 0, 22))
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/moduleMergeConstructor.types b/tsc/testdata/baselines/reference/compiler/moduleMergeConstructor.types
new file mode 100644
index 0000000000000..437d0f78b9379
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/moduleMergeConstructor.types
@@ -0,0 +1,49 @@
+//// [tests/cases/compiler/moduleMergeConstructor.ts] ////
+
+=== foo.d.ts ===
+declare module "foo" {
+>"foo" : typeof import("foo")
+
+ export class Foo {
+>Foo : Foo
+
+ constructor();
+ method1(): any;
+>method1 : () => any
+ }
+}
+
+=== foo-ext.d.ts ===
+declare module "foo" {
+>"foo" : typeof import("foo")
+
+ export interface Foo {
+ method2(): any;
+>method2 : () => any
+ }
+}
+
+=== index.ts ===
+import * as foo from "foo";
+>foo : typeof foo
+
+class Test {
+>Test : Test
+
+ bar: foo.Foo;
+>bar : foo.Foo
+>foo : any
+
+ constructor() {
+ this.bar = new foo.Foo();
+>this.bar = new foo.Foo() : foo.Foo
+>this.bar : foo.Foo
+>this : this
+>bar : foo.Foo
+>new foo.Foo() : foo.Foo
+>foo.Foo : typeof foo.Foo
+>foo : typeof foo
+>Foo : typeof foo.Foo
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/objectIndexer.js b/tsc/testdata/baselines/reference/compiler/objectIndexer.js
new file mode 100644
index 0000000000000..f0bf0462b7a62
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/objectIndexer.js
@@ -0,0 +1,27 @@
+//// [tests/cases/compiler/objectIndexer.ts] ////
+
+//// [objectIndexer.ts]
+export interface Callback {
+ (value: any): void;
+}
+
+interface IMap {
+ [s: string]: Callback;
+}
+
+class Emitter {
+ private listeners: IMap;
+ constructor () {
+ this.listeners = {};
+ }
+}
+
+
+//// [objectIndexer.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+class Emitter {
+ constructor() {
+ this.listeners = {};
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/objectIndexer.symbols b/tsc/testdata/baselines/reference/compiler/objectIndexer.symbols
new file mode 100644
index 0000000000000..5204592721f7d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/objectIndexer.symbols
@@ -0,0 +1,33 @@
+//// [tests/cases/compiler/objectIndexer.ts] ////
+
+=== objectIndexer.ts ===
+export interface Callback {
+>Callback : Symbol(Callback, Decl(objectIndexer.ts, 0, 0))
+
+ (value: any): void;
+>value : Symbol(value, Decl(objectIndexer.ts, 1, 5))
+}
+
+interface IMap {
+>IMap : Symbol(IMap, Decl(objectIndexer.ts, 2, 1))
+
+ [s: string]: Callback;
+>s : Symbol(s, Decl(objectIndexer.ts, 5, 5))
+>Callback : Symbol(Callback, Decl(objectIndexer.ts, 0, 0))
+}
+
+class Emitter {
+>Emitter : Symbol(Emitter, Decl(objectIndexer.ts, 6, 1))
+
+ private listeners: IMap;
+>listeners : Symbol(Emitter.listeners, Decl(objectIndexer.ts, 8, 15))
+>IMap : Symbol(IMap, Decl(objectIndexer.ts, 2, 1))
+
+ constructor () {
+ this.listeners = {};
+>this.listeners : Symbol(Emitter.listeners, Decl(objectIndexer.ts, 8, 15))
+>this : Symbol(Emitter, Decl(objectIndexer.ts, 6, 1))
+>listeners : Symbol(Emitter.listeners, Decl(objectIndexer.ts, 8, 15))
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/objectIndexer.types b/tsc/testdata/baselines/reference/compiler/objectIndexer.types
new file mode 100644
index 0000000000000..8609a23eec093
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/objectIndexer.types
@@ -0,0 +1,29 @@
+//// [tests/cases/compiler/objectIndexer.ts] ////
+
+=== objectIndexer.ts ===
+export interface Callback {
+ (value: any): void;
+>value : any
+}
+
+interface IMap {
+ [s: string]: Callback;
+>s : string
+}
+
+class Emitter {
+>Emitter : Emitter
+
+ private listeners: IMap;
+>listeners : IMap
+
+ constructor () {
+ this.listeners = {};
+>this.listeners = {} : {}
+>this.listeners : IMap
+>this : this
+>listeners : IMap
+>{} : {}
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/pathMappingBasedModuleResolution6_classic.js b/tsc/testdata/baselines/reference/compiler/pathMappingBasedModuleResolution6_classic.js
new file mode 100644
index 0000000000000..ac76bfacd4766
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/pathMappingBasedModuleResolution6_classic.js
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/pathMappingBasedModuleResolution6_classic.ts] ////
+
+//// [file3.ts]
+export {x} from "../file2";
+//// [file1.ts]
+import {x} from "./project/file3";
+declare function use(x: string);
+use(x.toExponential());
+
+//// [file2.d.ts]
+export let x: number;
+
+
+//// [file3.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+var file2_1 = require("../file2");
+Object.defineProperty(exports, "x", { enumerable: true, get: function () { return file2_1.x; } });
+//// [file1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const file3_1 = require("./project/file3");
+use(file3_1.x.toExponential());
diff --git a/tsc/testdata/baselines/reference/compiler/pathMappingBasedModuleResolution6_classic.symbols b/tsc/testdata/baselines/reference/compiler/pathMappingBasedModuleResolution6_classic.symbols
new file mode 100644
index 0000000000000..bc37370f8bf54
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/pathMappingBasedModuleResolution6_classic.symbols
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/pathMappingBasedModuleResolution6_classic.ts] ////
+
+=== c:/root/src/file1.ts ===
+import {x} from "./project/file3";
+>x : Symbol(x, Decl(file1.ts, 0, 8))
+
+declare function use(x: string);
+>use : Symbol(use, Decl(file1.ts, 0, 34))
+>x : Symbol(x, Decl(file1.ts, 1, 21))
+
+use(x.toExponential());
+>use : Symbol(use, Decl(file1.ts, 0, 34))
+>x.toExponential : Symbol(Number.toExponential, Decl(lib.es5.d.ts, --, --))
+>x : Symbol(x, Decl(file1.ts, 0, 8))
+>toExponential : Symbol(Number.toExponential, Decl(lib.es5.d.ts, --, --))
+
+=== c:/root/src/file2.d.ts ===
+export let x: number;
+>x : Symbol(x, Decl(file2.d.ts, 0, 10))
+
+=== c:/root/generated/src/project/file3.ts ===
+export {x} from "../file2";
+>x : Symbol(x, Decl(file3.ts, 0, 8))
+
diff --git a/tsc/testdata/baselines/reference/compiler/pathMappingBasedModuleResolution6_classic.trace.json b/tsc/testdata/baselines/reference/compiler/pathMappingBasedModuleResolution6_classic.trace.json
new file mode 100644
index 0000000000000..a695e13934a26
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/pathMappingBasedModuleResolution6_classic.trace.json
@@ -0,0 +1,37 @@
+======== Resolving module './project/file3' from 'c:/root/src/file1.ts'. ========
+Module resolution kind is not specified, using 'Bundler'.
+Resolving in CJS mode with conditions 'require', 'types'.
+'rootDirs' option is set, using it to resolve relative module name './project/file3'.
+Checking if 'c:/root/src/' is the longest matching prefix for 'c:/root/src/project/file3' - 'true'.
+Checking if 'c:/root/generated/src/' is the longest matching prefix for 'c:/root/src/project/file3' - 'false'.
+Longest matching prefix for 'c:/root/src/project/file3' is 'c:/root/src/'.
+Loading 'project/file3' from the root dir 'c:/root/src/', candidate location 'c:/root/src/project/file3'.
+Loading module as file / folder, candidate module location 'c:/root/src/project/file3', target file types: TypeScript, JavaScript, Declaration, JSON.
+Directory 'c:/root/src/project' does not exist, skipping all lookups in it.
+Trying other entries in 'rootDirs'.
+Loading 'project/file3' from the root dir 'c:/root/generated/src', candidate location 'c:/root/generated/src/project/file3'.
+Loading module as file / folder, candidate module location 'c:/root/generated/src/project/file3', target file types: TypeScript, JavaScript, Declaration, JSON.
+File 'c:/root/generated/src/project/file3.ts' exists - use it as a name resolution result.
+======== Module name './project/file3' was successfully resolved to 'c:/root/generated/src/project/file3.ts'. ========
+======== Resolving module '../file2' from 'c:/root/generated/src/project/file3.ts'. ========
+Module resolution kind is not specified, using 'Bundler'.
+Resolving in CJS mode with conditions 'require', 'types'.
+'rootDirs' option is set, using it to resolve relative module name '../file2'.
+Checking if 'c:/root/src/' is the longest matching prefix for 'c:/root/generated/src/file2' - 'false'.
+Checking if 'c:/root/generated/src/' is the longest matching prefix for 'c:/root/generated/src/file2' - 'true'.
+Longest matching prefix for 'c:/root/generated/src/file2' is 'c:/root/generated/src/'.
+Loading 'file2' from the root dir 'c:/root/generated/src/', candidate location 'c:/root/generated/src/file2'.
+Loading module as file / folder, candidate module location 'c:/root/generated/src/file2', target file types: TypeScript, JavaScript, Declaration, JSON.
+File 'c:/root/generated/src/file2.ts' does not exist.
+File 'c:/root/generated/src/file2.tsx' does not exist.
+File 'c:/root/generated/src/file2.d.ts' does not exist.
+File 'c:/root/generated/src/file2.js' does not exist.
+File 'c:/root/generated/src/file2.jsx' does not exist.
+Directory 'c:/root/generated/src/file2' does not exist, skipping all lookups in it.
+Trying other entries in 'rootDirs'.
+Loading 'file2' from the root dir 'c:/root/src', candidate location 'c:/root/src/file2'.
+Loading module as file / folder, candidate module location 'c:/root/src/file2', target file types: TypeScript, JavaScript, Declaration, JSON.
+File 'c:/root/src/file2.ts' does not exist.
+File 'c:/root/src/file2.tsx' does not exist.
+File 'c:/root/src/file2.d.ts' exists - use it as a name resolution result.
+======== Module name '../file2' was successfully resolved to 'c:/root/src/file2.d.ts'. ========
diff --git a/tsc/testdata/baselines/reference/compiler/pathMappingBasedModuleResolution6_classic.types b/tsc/testdata/baselines/reference/compiler/pathMappingBasedModuleResolution6_classic.types
new file mode 100644
index 0000000000000..35302e766b7a9
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/pathMappingBasedModuleResolution6_classic.types
@@ -0,0 +1,26 @@
+//// [tests/cases/compiler/pathMappingBasedModuleResolution6_classic.ts] ////
+
+=== c:/root/src/file1.ts ===
+import {x} from "./project/file3";
+>x : number
+
+declare function use(x: string);
+>use : (x: string) => any
+>x : string
+
+use(x.toExponential());
+>use(x.toExponential()) : any
+>use : (x: string) => any
+>x.toExponential() : string
+>x.toExponential : (fractionDigits?: number) => string
+>x : number
+>toExponential : (fractionDigits?: number) => string
+
+=== c:/root/src/file2.d.ts ===
+export let x: number;
+>x : number
+
+=== c:/root/generated/src/project/file3.ts ===
+export {x} from "../file2";
+>x : number
+
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckAnonymousFunctionParameter2.errors.txt b/tsc/testdata/baselines/reference/compiler/privacyCheckAnonymousFunctionParameter2.errors.txt
new file mode 100644
index 0000000000000..f5602fbab3255
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckAnonymousFunctionParameter2.errors.txt
@@ -0,0 +1,20 @@
+privacyCheckAnonymousFunctionParameter2.ts(12,13): error TS2345: Argument of type 'null' is not assignable to parameter of type '(a: Iterator) => number'.
+
+
+==== privacyCheckAnonymousFunctionParameter2.ts (1 errors) ====
+ export var x = 1; // Makes this an external module
+ interface Iterator { x: T }
+
+ namespace Q {
+ export function foo(x: (a: Iterator) => number) {
+ return x;
+ }
+ }
+
+ namespace Q {
+ function bar() {
+ foo(null);
+ ~~~~
+!!! error TS2345: Argument of type 'null' is not assignable to parameter of type '(a: Iterator) => number'.
+ }
+ }
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckAnonymousFunctionParameter2.js b/tsc/testdata/baselines/reference/compiler/privacyCheckAnonymousFunctionParameter2.js
new file mode 100644
index 0000000000000..d1082b9a757cc
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckAnonymousFunctionParameter2.js
@@ -0,0 +1,39 @@
+//// [tests/cases/compiler/privacyCheckAnonymousFunctionParameter2.ts] ////
+
+//// [privacyCheckAnonymousFunctionParameter2.ts]
+export var x = 1; // Makes this an external module
+interface Iterator { x: T }
+
+namespace Q {
+ export function foo(x: (a: Iterator) => number) {
+ return x;
+ }
+}
+
+namespace Q {
+ function bar() {
+ foo(null);
+ }
+}
+
+//// [privacyCheckAnonymousFunctionParameter2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+exports.x = 1; // Makes this an external module
+var Q;
+(function (Q) {
+ function foo(x) {
+ return x;
+ }
+ Q.foo = foo;
+})(Q || (Q = {}));
+(function (Q) {
+ function bar() {
+ Q.foo(null);
+ }
+})(Q || (Q = {}));
+
+
+//// [privacyCheckAnonymousFunctionParameter2.d.ts]
+export declare var x: number;
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckAnonymousFunctionParameter2.symbols b/tsc/testdata/baselines/reference/compiler/privacyCheckAnonymousFunctionParameter2.symbols
new file mode 100644
index 0000000000000..f2fe371594cc0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckAnonymousFunctionParameter2.symbols
@@ -0,0 +1,38 @@
+//// [tests/cases/compiler/privacyCheckAnonymousFunctionParameter2.ts] ////
+
+=== privacyCheckAnonymousFunctionParameter2.ts ===
+export var x = 1; // Makes this an external module
+>x : Symbol(x, Decl(privacyCheckAnonymousFunctionParameter2.ts, 0, 10))
+
+interface Iterator { x: T }
+>Iterator : Symbol(Iterator, Decl(privacyCheckAnonymousFunctionParameter2.ts, 0, 17))
+>T : Symbol(T, Decl(privacyCheckAnonymousFunctionParameter2.ts, 1, 19))
+>x : Symbol(Iterator.x, Decl(privacyCheckAnonymousFunctionParameter2.ts, 1, 23))
+>T : Symbol(T, Decl(privacyCheckAnonymousFunctionParameter2.ts, 1, 19))
+
+namespace Q {
+>Q : Symbol(Q, Decl(privacyCheckAnonymousFunctionParameter2.ts, 1, 30), Decl(privacyCheckAnonymousFunctionParameter2.ts, 7, 1))
+
+ export function foo(x: (a: Iterator) => number) {
+>foo : Symbol(foo, Decl(privacyCheckAnonymousFunctionParameter2.ts, 3, 13))
+>T : Symbol(T, Decl(privacyCheckAnonymousFunctionParameter2.ts, 4, 24))
+>x : Symbol(x, Decl(privacyCheckAnonymousFunctionParameter2.ts, 4, 27))
+>a : Symbol(a, Decl(privacyCheckAnonymousFunctionParameter2.ts, 4, 31))
+>Iterator : Symbol(Iterator, Decl(privacyCheckAnonymousFunctionParameter2.ts, 0, 17))
+>T : Symbol(T, Decl(privacyCheckAnonymousFunctionParameter2.ts, 4, 24))
+
+ return x;
+>x : Symbol(x, Decl(privacyCheckAnonymousFunctionParameter2.ts, 4, 27))
+ }
+}
+
+namespace Q {
+>Q : Symbol(Q, Decl(privacyCheckAnonymousFunctionParameter2.ts, 1, 30), Decl(privacyCheckAnonymousFunctionParameter2.ts, 7, 1))
+
+ function bar() {
+>bar : Symbol(bar, Decl(privacyCheckAnonymousFunctionParameter2.ts, 9, 13))
+
+ foo(null);
+>foo : Symbol(foo, Decl(privacyCheckAnonymousFunctionParameter2.ts, 3, 13))
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckAnonymousFunctionParameter2.types b/tsc/testdata/baselines/reference/compiler/privacyCheckAnonymousFunctionParameter2.types
new file mode 100644
index 0000000000000..8e134d8cff5d8
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckAnonymousFunctionParameter2.types
@@ -0,0 +1,34 @@
+//// [tests/cases/compiler/privacyCheckAnonymousFunctionParameter2.ts] ////
+
+=== privacyCheckAnonymousFunctionParameter2.ts ===
+export var x = 1; // Makes this an external module
+>x : number
+>1 : 1
+
+interface Iterator { x: T }
+>x : T
+
+namespace Q {
+>Q : typeof Q
+
+ export function foo(x: (a: Iterator) => number) {
+>foo : (x: (a: Iterator) => number) => (a: Iterator) => number
+>x : (a: Iterator) => number
+>a : Iterator
+
+ return x;
+>x : (a: Iterator) => number
+ }
+}
+
+namespace Q {
+>Q : typeof Q
+
+ function bar() {
+>bar : () => void
+
+ foo(null);
+>foo(null) : (a: Iterator) => number
+>foo : (x: (a: Iterator) => number) => (a: Iterator) => number
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckCallbackOfInterfaceMethodWithTypeParameter.js b/tsc/testdata/baselines/reference/compiler/privacyCheckCallbackOfInterfaceMethodWithTypeParameter.js
new file mode 100644
index 0000000000000..a64d40ee18716
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckCallbackOfInterfaceMethodWithTypeParameter.js
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts] ////
+
+//// [privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts]
+export interface A {
+ f1(callback: (p: T) => any);
+}
+
+export interface B extends A {
+}
+
+
+//// [privacyCheckCallbackOfInterfaceMethodWithTypeParameter.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+
+
+//// [privacyCheckCallbackOfInterfaceMethodWithTypeParameter.d.ts]
+export interface A {
+ f1(callback: (p: T) => any): any;
+}
+export interface B extends A {
+}
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckCallbackOfInterfaceMethodWithTypeParameter.symbols b/tsc/testdata/baselines/reference/compiler/privacyCheckCallbackOfInterfaceMethodWithTypeParameter.symbols
new file mode 100644
index 0000000000000..897ad24f7f499
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckCallbackOfInterfaceMethodWithTypeParameter.symbols
@@ -0,0 +1,21 @@
+//// [tests/cases/compiler/privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts] ////
+
+=== privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts ===
+export interface A {
+>A : Symbol(A, Decl(privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts, 0, 0))
+>T : Symbol(T, Decl(privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts, 0, 19))
+
+ f1(callback: (p: T) => any);
+>f1 : Symbol(A.f1, Decl(privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts, 0, 23))
+>callback : Symbol(callback, Decl(privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts, 1, 7))
+>p : Symbol(p, Decl(privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts, 1, 18))
+>T : Symbol(T, Decl(privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts, 0, 19))
+}
+
+export interface B extends A {
+>B : Symbol(B, Decl(privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts, 2, 1))
+>T : Symbol(T, Decl(privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts, 4, 19))
+>A : Symbol(A, Decl(privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts, 0, 0))
+>T : Symbol(T, Decl(privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts, 4, 19))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckCallbackOfInterfaceMethodWithTypeParameter.types b/tsc/testdata/baselines/reference/compiler/privacyCheckCallbackOfInterfaceMethodWithTypeParameter.types
new file mode 100644
index 0000000000000..f090e08b898d5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckCallbackOfInterfaceMethodWithTypeParameter.types
@@ -0,0 +1,13 @@
+//// [tests/cases/compiler/privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts] ////
+
+=== privacyCheckCallbackOfInterfaceMethodWithTypeParameter.ts ===
+export interface A {
+ f1(callback: (p: T) => any);
+>f1 : (callback: (p: T) => any) => any
+>callback : (p: T) => any
+>p : T
+}
+
+export interface B extends A {
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.errors.txt b/tsc/testdata/baselines/reference/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.errors.txt
new file mode 100644
index 0000000000000..cb985b36aef01
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.errors.txt
@@ -0,0 +1,19 @@
+privacyCheckExportAssignmentOnExportedGenericInterface2.ts(7,5): error TS2322: Type 'undefined' is not assignable to type 'Foo'.
+
+
+==== privacyCheckExportAssignmentOnExportedGenericInterface2.ts (1 errors) ====
+ export = Foo;
+
+ interface Foo {
+ }
+
+ function Foo(array: T[]): Foo {
+ return undefined;
+ ~~~~~~
+!!! error TS2322: Type 'undefined' is not assignable to type 'Foo'.
+ }
+
+ namespace Foo {
+ export var x = "hello";
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.js b/tsc/testdata/baselines/reference/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.js
new file mode 100644
index 0000000000000..6b7aa3b159fb1
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.js
@@ -0,0 +1,36 @@
+//// [tests/cases/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.ts] ////
+
+//// [privacyCheckExportAssignmentOnExportedGenericInterface2.ts]
+export = Foo;
+
+interface Foo {
+}
+
+function Foo(array: T[]): Foo {
+ return undefined;
+}
+
+namespace Foo {
+ export var x = "hello";
+}
+
+
+//// [privacyCheckExportAssignmentOnExportedGenericInterface2.js]
+"use strict";
+function Foo(array) {
+ return undefined;
+}
+(function (Foo) {
+ Foo.x = "hello";
+})(Foo || (Foo = {}));
+module.exports = Foo;
+
+
+//// [privacyCheckExportAssignmentOnExportedGenericInterface2.d.ts]
+export = Foo;
+interface Foo {
+}
+declare function Foo(array: T[]): Foo;
+declare namespace Foo {
+ var x: string;
+}
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.symbols b/tsc/testdata/baselines/reference/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.symbols
new file mode 100644
index 0000000000000..ad665c94ae16c
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.symbols
@@ -0,0 +1,30 @@
+//// [tests/cases/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.ts] ////
+
+=== privacyCheckExportAssignmentOnExportedGenericInterface2.ts ===
+export = Foo;
+>Foo : Symbol(Foo, Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 3, 1), Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 0, 13), Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 7, 1))
+
+interface Foo {
+>Foo : Symbol(Foo, Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 3, 1), Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 0, 13), Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 7, 1))
+>T : Symbol(T, Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 2, 14))
+}
+
+function Foo(array: T[]): Foo {
+>Foo : Symbol(Foo, Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 3, 1), Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 0, 13), Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 7, 1))
+>T : Symbol(T, Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 5, 13))
+>array : Symbol(array, Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 5, 16))
+>T : Symbol(T, Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 5, 13))
+>Foo : Symbol(Foo, Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 3, 1), Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 0, 13), Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 7, 1))
+>T : Symbol(T, Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 5, 13))
+
+ return undefined;
+>undefined : Symbol(undefined)
+}
+
+namespace Foo {
+>Foo : Symbol(Foo, Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 3, 1), Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 0, 13), Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 7, 1))
+
+ export var x = "hello";
+>x : Symbol(x, Decl(privacyCheckExportAssignmentOnExportedGenericInterface2.ts, 10, 14))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.types b/tsc/testdata/baselines/reference/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.types
new file mode 100644
index 0000000000000..b5d25529cde54
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.types
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/privacyCheckExportAssignmentOnExportedGenericInterface2.ts] ////
+
+=== privacyCheckExportAssignmentOnExportedGenericInterface2.ts ===
+export = Foo;
+>Foo : Foo
+
+interface Foo {
+}
+
+function Foo(array: T[]): Foo {
+>Foo : typeof Foo
+>array : T[]
+
+ return undefined;
+>undefined : undefined
+}
+
+namespace Foo {
+>Foo : typeof Foo
+
+ export var x = "hello";
+>x : string
+>"hello" : "hello"
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckOnTypeParameterReferenceInConstructorParameter.js b/tsc/testdata/baselines/reference/compiler/privacyCheckOnTypeParameterReferenceInConstructorParameter.js
new file mode 100644
index 0000000000000..f19955f44ca06
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckOnTypeParameterReferenceInConstructorParameter.js
@@ -0,0 +1,37 @@
+//// [tests/cases/compiler/privacyCheckOnTypeParameterReferenceInConstructorParameter.ts] ////
+
+//// [privacyCheckOnTypeParameterReferenceInConstructorParameter.ts]
+export class A{
+ constructor(callback: (self: A) => void) {
+ var child = new B(this);
+ }
+}
+
+export class B {
+ constructor(parent: T2) { }
+}
+
+
+//// [privacyCheckOnTypeParameterReferenceInConstructorParameter.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.B = exports.A = void 0;
+class A {
+ constructor(callback) {
+ var child = new B(this);
+ }
+}
+exports.A = A;
+class B {
+ constructor(parent) { }
+}
+exports.B = B;
+
+
+//// [privacyCheckOnTypeParameterReferenceInConstructorParameter.d.ts]
+export declare class A {
+ constructor(callback: (self: A) => void);
+}
+export declare class B {
+ constructor(parent: T2);
+}
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckOnTypeParameterReferenceInConstructorParameter.symbols b/tsc/testdata/baselines/reference/compiler/privacyCheckOnTypeParameterReferenceInConstructorParameter.symbols
new file mode 100644
index 0000000000000..af16f431efc53
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckOnTypeParameterReferenceInConstructorParameter.symbols
@@ -0,0 +1,29 @@
+//// [tests/cases/compiler/privacyCheckOnTypeParameterReferenceInConstructorParameter.ts] ////
+
+=== privacyCheckOnTypeParameterReferenceInConstructorParameter.ts ===
+export class A{
+>A : Symbol(A, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 0, 0))
+>T1 : Symbol(T1, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 0, 15))
+
+ constructor(callback: (self: A) => void) {
+>callback : Symbol(callback, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 1, 16))
+>self : Symbol(self, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 1, 27))
+>A : Symbol(A, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 0, 0))
+>T1 : Symbol(T1, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 0, 15))
+
+ var child = new B(this);
+>child : Symbol(child, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 2, 11))
+>B : Symbol(B, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 4, 1))
+>this : Symbol(A, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 0, 0))
+ }
+}
+
+export class B {
+>B : Symbol(B, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 4, 1))
+>T2 : Symbol(T2, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 6, 15))
+
+ constructor(parent: T2) { }
+>parent : Symbol(parent, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 7, 16))
+>T2 : Symbol(T2, Decl(privacyCheckOnTypeParameterReferenceInConstructorParameter.ts, 6, 15))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/privacyCheckOnTypeParameterReferenceInConstructorParameter.types b/tsc/testdata/baselines/reference/compiler/privacyCheckOnTypeParameterReferenceInConstructorParameter.types
new file mode 100644
index 0000000000000..59a78e0d9f4ba
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyCheckOnTypeParameterReferenceInConstructorParameter.types
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/privacyCheckOnTypeParameterReferenceInConstructorParameter.ts] ////
+
+=== privacyCheckOnTypeParameterReferenceInConstructorParameter.ts ===
+export class A{
+>A : A
+
+ constructor(callback: (self: A) => void) {
+>callback : (self: A) => void
+>self : A
+
+ var child = new B(this);
+>child : B
+>new B(this) : B
+>B : typeof B
+>this : this
+ }
+}
+
+export class B {
+>B : B
+
+ constructor(parent: T2) { }
+>parent : T2
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/privacyGetter(target=es2015).js b/tsc/testdata/baselines/reference/compiler/privacyGetter(target=es2015).js
new file mode 100644
index 0000000000000..5c8ed5bfec7bf
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyGetter(target=es2015).js
@@ -0,0 +1,377 @@
+//// [tests/cases/compiler/privacyGetter.ts] ////
+
+//// [privacyGetter.ts]
+export namespace m1 {
+ export class C1_public {
+ private f1() {
+ }
+ }
+
+ class C2_private {
+ }
+
+ export class C3_public {
+ private get p1_private() {
+ return new C1_public();
+ }
+
+ private set p1_private(m1_c3_p1_arg: C1_public) {
+ }
+
+ private get p2_private() {
+ return new C1_public();
+ }
+
+ private set p2_private(m1_c3_p2_arg: C1_public) {
+ }
+
+ private get p3_private() {
+ return new C2_private();
+ }
+
+ private set p3_private(m1_c3_p3_arg: C2_private) {
+ }
+
+ public get p4_public(): C2_private { // error
+ return new C2_private(); //error
+ }
+
+ public set p4_public(m1_c3_p4_arg: C2_private) { // error
+ }
+ }
+
+ class C4_private {
+ private get p1_private() {
+ return new C1_public();
+ }
+
+ private set p1_private(m1_c3_p1_arg: C1_public) {
+ }
+
+ private get p2_private() {
+ return new C1_public();
+ }
+
+ private set p2_private(m1_c3_p2_arg: C1_public) {
+ }
+
+ private get p3_private() {
+ return new C2_private();
+ }
+
+ private set p3_private(m1_c3_p3_arg: C2_private) {
+ }
+
+ public get p4_public(): C2_private {
+ return new C2_private();
+ }
+
+ public set p4_public(m1_c3_p4_arg: C2_private) {
+ }
+ }
+}
+
+namespace m2 {
+ export class m2_C1_public {
+ private f1() {
+ }
+ }
+
+ class m2_C2_private {
+ }
+
+ export class m2_C3_public {
+ private get p1_private() {
+ return new m2_C1_public();
+ }
+
+ private set p1_private(m2_c3_p1_arg: m2_C1_public) {
+ }
+
+ private get p2_private() {
+ return new m2_C1_public();
+ }
+
+ private set p2_private(m2_c3_p2_arg: m2_C1_public) {
+ }
+
+ private get p3_private() {
+ return new m2_C2_private();
+ }
+
+ private set p3_private(m2_c3_p3_arg: m2_C2_private) {
+ }
+
+ public get p4_public(): m2_C2_private {
+ return new m2_C2_private();
+ }
+
+ public set p4_public(m2_c3_p4_arg: m2_C2_private) {
+ }
+ }
+
+ class m2_C4_private {
+ private get p1_private() {
+ return new m2_C1_public();
+ }
+
+ private set p1_private(m2_c3_p1_arg: m2_C1_public) {
+ }
+
+ private get p2_private() {
+ return new m2_C1_public();
+ }
+
+ private set p2_private(m2_c3_p2_arg: m2_C1_public) {
+ }
+
+ private get p3_private() {
+ return new m2_C2_private();
+ }
+
+ private set p3_private(m2_c3_p3_arg: m2_C2_private) {
+ }
+
+ public get p4_public(): m2_C2_private {
+ return new m2_C2_private();
+ }
+
+ public set p4_public(m2_c3_p4_arg: m2_C2_private) {
+ }
+ }
+}
+
+class C5_private {
+ private f() {
+ }
+}
+
+export class C6_public {
+}
+
+export class C7_public {
+ private get p1_private() {
+ return new C6_public();
+ }
+
+ private set p1_private(m1_c3_p1_arg: C6_public) {
+ }
+
+ private get p2_private() {
+ return new C6_public();
+ }
+
+ private set p2_private(m1_c3_p2_arg: C6_public) {
+ }
+
+ private get p3_private() {
+ return new C5_private();
+ }
+
+ private set p3_private(m1_c3_p3_arg: C5_private) {
+ }
+
+ public get p4_public(): C5_private { // error
+ return new C5_private(); //error
+ }
+
+ public set p4_public(m1_c3_p4_arg: C5_private) { // error
+ }
+}
+
+class C8_private {
+ private get p1_private() {
+ return new C6_public();
+ }
+
+ private set p1_private(m1_c3_p1_arg: C6_public) {
+ }
+
+ private get p2_private() {
+ return new C6_public();
+ }
+
+ private set p2_private(m1_c3_p2_arg: C6_public) {
+ }
+
+ private get p3_private() {
+ return new C5_private();
+ }
+
+ private set p3_private(m1_c3_p3_arg: C5_private) {
+ }
+
+ public get p4_public(): C5_private {
+ return new C5_private();
+ }
+
+ public set p4_public(m1_c3_p4_arg: C5_private) {
+ }
+}
+
+//// [privacyGetter.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.C7_public = exports.C6_public = exports.m1 = void 0;
+var m1;
+(function (m1) {
+ class C1_public {
+ f1() {
+ }
+ }
+ m1.C1_public = C1_public;
+ class C2_private {
+ }
+ class C3_public {
+ get p1_private() {
+ return new C1_public();
+ }
+ set p1_private(m1_c3_p1_arg) {
+ }
+ get p2_private() {
+ return new C1_public();
+ }
+ set p2_private(m1_c3_p2_arg) {
+ }
+ get p3_private() {
+ return new C2_private();
+ }
+ set p3_private(m1_c3_p3_arg) {
+ }
+ get p4_public() {
+ return new C2_private(); //error
+ }
+ set p4_public(m1_c3_p4_arg) {
+ }
+ }
+ m1.C3_public = C3_public;
+ class C4_private {
+ get p1_private() {
+ return new C1_public();
+ }
+ set p1_private(m1_c3_p1_arg) {
+ }
+ get p2_private() {
+ return new C1_public();
+ }
+ set p2_private(m1_c3_p2_arg) {
+ }
+ get p3_private() {
+ return new C2_private();
+ }
+ set p3_private(m1_c3_p3_arg) {
+ }
+ get p4_public() {
+ return new C2_private();
+ }
+ set p4_public(m1_c3_p4_arg) {
+ }
+ }
+})(m1 || (exports.m1 = m1 = {}));
+var m2;
+(function (m2) {
+ class m2_C1_public {
+ f1() {
+ }
+ }
+ m2.m2_C1_public = m2_C1_public;
+ class m2_C2_private {
+ }
+ class m2_C3_public {
+ get p1_private() {
+ return new m2_C1_public();
+ }
+ set p1_private(m2_c3_p1_arg) {
+ }
+ get p2_private() {
+ return new m2_C1_public();
+ }
+ set p2_private(m2_c3_p2_arg) {
+ }
+ get p3_private() {
+ return new m2_C2_private();
+ }
+ set p3_private(m2_c3_p3_arg) {
+ }
+ get p4_public() {
+ return new m2_C2_private();
+ }
+ set p4_public(m2_c3_p4_arg) {
+ }
+ }
+ m2.m2_C3_public = m2_C3_public;
+ class m2_C4_private {
+ get p1_private() {
+ return new m2_C1_public();
+ }
+ set p1_private(m2_c3_p1_arg) {
+ }
+ get p2_private() {
+ return new m2_C1_public();
+ }
+ set p2_private(m2_c3_p2_arg) {
+ }
+ get p3_private() {
+ return new m2_C2_private();
+ }
+ set p3_private(m2_c3_p3_arg) {
+ }
+ get p4_public() {
+ return new m2_C2_private();
+ }
+ set p4_public(m2_c3_p4_arg) {
+ }
+ }
+})(m2 || (m2 = {}));
+class C5_private {
+ f() {
+ }
+}
+class C6_public {
+}
+exports.C6_public = C6_public;
+class C7_public {
+ get p1_private() {
+ return new C6_public();
+ }
+ set p1_private(m1_c3_p1_arg) {
+ }
+ get p2_private() {
+ return new C6_public();
+ }
+ set p2_private(m1_c3_p2_arg) {
+ }
+ get p3_private() {
+ return new C5_private();
+ }
+ set p3_private(m1_c3_p3_arg) {
+ }
+ get p4_public() {
+ return new C5_private(); //error
+ }
+ set p4_public(m1_c3_p4_arg) {
+ }
+}
+exports.C7_public = C7_public;
+class C8_private {
+ get p1_private() {
+ return new C6_public();
+ }
+ set p1_private(m1_c3_p1_arg) {
+ }
+ get p2_private() {
+ return new C6_public();
+ }
+ set p2_private(m1_c3_p2_arg) {
+ }
+ get p3_private() {
+ return new C5_private();
+ }
+ set p3_private(m1_c3_p3_arg) {
+ }
+ get p4_public() {
+ return new C5_private();
+ }
+ set p4_public(m1_c3_p4_arg) {
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/privacyGetter(target=es2015).symbols b/tsc/testdata/baselines/reference/compiler/privacyGetter(target=es2015).symbols
new file mode 100644
index 0000000000000..b66717922bf1e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyGetter(target=es2015).symbols
@@ -0,0 +1,388 @@
+//// [tests/cases/compiler/privacyGetter.ts] ////
+
+=== privacyGetter.ts ===
+export namespace m1 {
+>m1 : Symbol(m1, Decl(privacyGetter.ts, 0, 0))
+
+ export class C1_public {
+>C1_public : Symbol(C1_public, Decl(privacyGetter.ts, 0, 21))
+
+ private f1() {
+>f1 : Symbol(C1_public.f1, Decl(privacyGetter.ts, 1, 28))
+ }
+ }
+
+ class C2_private {
+>C2_private : Symbol(C2_private, Decl(privacyGetter.ts, 4, 5))
+ }
+
+ export class C3_public {
+>C3_public : Symbol(C3_public, Decl(privacyGetter.ts, 7, 5))
+
+ private get p1_private() {
+>p1_private : Symbol(C3_public.p1_private, Decl(privacyGetter.ts, 9, 28), Decl(privacyGetter.ts, 12, 9))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGetter.ts, 0, 21))
+ }
+
+ private set p1_private(m1_c3_p1_arg: C1_public) {
+>p1_private : Symbol(C3_public.p1_private, Decl(privacyGetter.ts, 9, 28), Decl(privacyGetter.ts, 12, 9))
+>m1_c3_p1_arg : Symbol(m1_c3_p1_arg, Decl(privacyGetter.ts, 14, 31))
+>C1_public : Symbol(C1_public, Decl(privacyGetter.ts, 0, 21))
+ }
+
+ private get p2_private() {
+>p2_private : Symbol(C3_public.p2_private, Decl(privacyGetter.ts, 15, 9), Decl(privacyGetter.ts, 19, 9))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGetter.ts, 0, 21))
+ }
+
+ private set p2_private(m1_c3_p2_arg: C1_public) {
+>p2_private : Symbol(C3_public.p2_private, Decl(privacyGetter.ts, 15, 9), Decl(privacyGetter.ts, 19, 9))
+>m1_c3_p2_arg : Symbol(m1_c3_p2_arg, Decl(privacyGetter.ts, 21, 31))
+>C1_public : Symbol(C1_public, Decl(privacyGetter.ts, 0, 21))
+ }
+
+ private get p3_private() {
+>p3_private : Symbol(C3_public.p3_private, Decl(privacyGetter.ts, 22, 9), Decl(privacyGetter.ts, 26, 9))
+
+ return new C2_private();
+>C2_private : Symbol(C2_private, Decl(privacyGetter.ts, 4, 5))
+ }
+
+ private set p3_private(m1_c3_p3_arg: C2_private) {
+>p3_private : Symbol(C3_public.p3_private, Decl(privacyGetter.ts, 22, 9), Decl(privacyGetter.ts, 26, 9))
+>m1_c3_p3_arg : Symbol(m1_c3_p3_arg, Decl(privacyGetter.ts, 28, 31))
+>C2_private : Symbol(C2_private, Decl(privacyGetter.ts, 4, 5))
+ }
+
+ public get p4_public(): C2_private { // error
+>p4_public : Symbol(C3_public.p4_public, Decl(privacyGetter.ts, 29, 9), Decl(privacyGetter.ts, 33, 9))
+>C2_private : Symbol(C2_private, Decl(privacyGetter.ts, 4, 5))
+
+ return new C2_private(); //error
+>C2_private : Symbol(C2_private, Decl(privacyGetter.ts, 4, 5))
+ }
+
+ public set p4_public(m1_c3_p4_arg: C2_private) { // error
+>p4_public : Symbol(C3_public.p4_public, Decl(privacyGetter.ts, 29, 9), Decl(privacyGetter.ts, 33, 9))
+>m1_c3_p4_arg : Symbol(m1_c3_p4_arg, Decl(privacyGetter.ts, 35, 29))
+>C2_private : Symbol(C2_private, Decl(privacyGetter.ts, 4, 5))
+ }
+ }
+
+ class C4_private {
+>C4_private : Symbol(C4_private, Decl(privacyGetter.ts, 37, 5))
+
+ private get p1_private() {
+>p1_private : Symbol(C4_private.p1_private, Decl(privacyGetter.ts, 39, 22), Decl(privacyGetter.ts, 42, 9))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGetter.ts, 0, 21))
+ }
+
+ private set p1_private(m1_c3_p1_arg: C1_public) {
+>p1_private : Symbol(C4_private.p1_private, Decl(privacyGetter.ts, 39, 22), Decl(privacyGetter.ts, 42, 9))
+>m1_c3_p1_arg : Symbol(m1_c3_p1_arg, Decl(privacyGetter.ts, 44, 31))
+>C1_public : Symbol(C1_public, Decl(privacyGetter.ts, 0, 21))
+ }
+
+ private get p2_private() {
+>p2_private : Symbol(C4_private.p2_private, Decl(privacyGetter.ts, 45, 9), Decl(privacyGetter.ts, 49, 9))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGetter.ts, 0, 21))
+ }
+
+ private set p2_private(m1_c3_p2_arg: C1_public) {
+>p2_private : Symbol(C4_private.p2_private, Decl(privacyGetter.ts, 45, 9), Decl(privacyGetter.ts, 49, 9))
+>m1_c3_p2_arg : Symbol(m1_c3_p2_arg, Decl(privacyGetter.ts, 51, 31))
+>C1_public : Symbol(C1_public, Decl(privacyGetter.ts, 0, 21))
+ }
+
+ private get p3_private() {
+>p3_private : Symbol(C4_private.p3_private, Decl(privacyGetter.ts, 52, 9), Decl(privacyGetter.ts, 56, 9))
+
+ return new C2_private();
+>C2_private : Symbol(C2_private, Decl(privacyGetter.ts, 4, 5))
+ }
+
+ private set p3_private(m1_c3_p3_arg: C2_private) {
+>p3_private : Symbol(C4_private.p3_private, Decl(privacyGetter.ts, 52, 9), Decl(privacyGetter.ts, 56, 9))
+>m1_c3_p3_arg : Symbol(m1_c3_p3_arg, Decl(privacyGetter.ts, 58, 31))
+>C2_private : Symbol(C2_private, Decl(privacyGetter.ts, 4, 5))
+ }
+
+ public get p4_public(): C2_private {
+>p4_public : Symbol(C4_private.p4_public, Decl(privacyGetter.ts, 59, 9), Decl(privacyGetter.ts, 63, 9))
+>C2_private : Symbol(C2_private, Decl(privacyGetter.ts, 4, 5))
+
+ return new C2_private();
+>C2_private : Symbol(C2_private, Decl(privacyGetter.ts, 4, 5))
+ }
+
+ public set p4_public(m1_c3_p4_arg: C2_private) {
+>p4_public : Symbol(C4_private.p4_public, Decl(privacyGetter.ts, 59, 9), Decl(privacyGetter.ts, 63, 9))
+>m1_c3_p4_arg : Symbol(m1_c3_p4_arg, Decl(privacyGetter.ts, 65, 29))
+>C2_private : Symbol(C2_private, Decl(privacyGetter.ts, 4, 5))
+ }
+ }
+}
+
+namespace m2 {
+>m2 : Symbol(m2, Decl(privacyGetter.ts, 68, 1))
+
+ export class m2_C1_public {
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGetter.ts, 70, 14))
+
+ private f1() {
+>f1 : Symbol(m2_C1_public.f1, Decl(privacyGetter.ts, 71, 31))
+ }
+ }
+
+ class m2_C2_private {
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGetter.ts, 74, 5))
+ }
+
+ export class m2_C3_public {
+>m2_C3_public : Symbol(m2_C3_public, Decl(privacyGetter.ts, 77, 5))
+
+ private get p1_private() {
+>p1_private : Symbol(m2_C3_public.p1_private, Decl(privacyGetter.ts, 79, 31), Decl(privacyGetter.ts, 82, 9))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGetter.ts, 70, 14))
+ }
+
+ private set p1_private(m2_c3_p1_arg: m2_C1_public) {
+>p1_private : Symbol(m2_C3_public.p1_private, Decl(privacyGetter.ts, 79, 31), Decl(privacyGetter.ts, 82, 9))
+>m2_c3_p1_arg : Symbol(m2_c3_p1_arg, Decl(privacyGetter.ts, 84, 31))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGetter.ts, 70, 14))
+ }
+
+ private get p2_private() {
+>p2_private : Symbol(m2_C3_public.p2_private, Decl(privacyGetter.ts, 85, 9), Decl(privacyGetter.ts, 89, 9))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGetter.ts, 70, 14))
+ }
+
+ private set p2_private(m2_c3_p2_arg: m2_C1_public) {
+>p2_private : Symbol(m2_C3_public.p2_private, Decl(privacyGetter.ts, 85, 9), Decl(privacyGetter.ts, 89, 9))
+>m2_c3_p2_arg : Symbol(m2_c3_p2_arg, Decl(privacyGetter.ts, 91, 31))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGetter.ts, 70, 14))
+ }
+
+ private get p3_private() {
+>p3_private : Symbol(m2_C3_public.p3_private, Decl(privacyGetter.ts, 92, 9), Decl(privacyGetter.ts, 96, 9))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGetter.ts, 74, 5))
+ }
+
+ private set p3_private(m2_c3_p3_arg: m2_C2_private) {
+>p3_private : Symbol(m2_C3_public.p3_private, Decl(privacyGetter.ts, 92, 9), Decl(privacyGetter.ts, 96, 9))
+>m2_c3_p3_arg : Symbol(m2_c3_p3_arg, Decl(privacyGetter.ts, 98, 31))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGetter.ts, 74, 5))
+ }
+
+ public get p4_public(): m2_C2_private {
+>p4_public : Symbol(m2_C3_public.p4_public, Decl(privacyGetter.ts, 99, 9), Decl(privacyGetter.ts, 103, 9))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGetter.ts, 74, 5))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGetter.ts, 74, 5))
+ }
+
+ public set p4_public(m2_c3_p4_arg: m2_C2_private) {
+>p4_public : Symbol(m2_C3_public.p4_public, Decl(privacyGetter.ts, 99, 9), Decl(privacyGetter.ts, 103, 9))
+>m2_c3_p4_arg : Symbol(m2_c3_p4_arg, Decl(privacyGetter.ts, 105, 29))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGetter.ts, 74, 5))
+ }
+ }
+
+ class m2_C4_private {
+>m2_C4_private : Symbol(m2_C4_private, Decl(privacyGetter.ts, 107, 5))
+
+ private get p1_private() {
+>p1_private : Symbol(m2_C4_private.p1_private, Decl(privacyGetter.ts, 109, 25), Decl(privacyGetter.ts, 112, 9))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGetter.ts, 70, 14))
+ }
+
+ private set p1_private(m2_c3_p1_arg: m2_C1_public) {
+>p1_private : Symbol(m2_C4_private.p1_private, Decl(privacyGetter.ts, 109, 25), Decl(privacyGetter.ts, 112, 9))
+>m2_c3_p1_arg : Symbol(m2_c3_p1_arg, Decl(privacyGetter.ts, 114, 31))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGetter.ts, 70, 14))
+ }
+
+ private get p2_private() {
+>p2_private : Symbol(m2_C4_private.p2_private, Decl(privacyGetter.ts, 115, 9), Decl(privacyGetter.ts, 119, 9))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGetter.ts, 70, 14))
+ }
+
+ private set p2_private(m2_c3_p2_arg: m2_C1_public) {
+>p2_private : Symbol(m2_C4_private.p2_private, Decl(privacyGetter.ts, 115, 9), Decl(privacyGetter.ts, 119, 9))
+>m2_c3_p2_arg : Symbol(m2_c3_p2_arg, Decl(privacyGetter.ts, 121, 31))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGetter.ts, 70, 14))
+ }
+
+ private get p3_private() {
+>p3_private : Symbol(m2_C4_private.p3_private, Decl(privacyGetter.ts, 122, 9), Decl(privacyGetter.ts, 126, 9))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGetter.ts, 74, 5))
+ }
+
+ private set p3_private(m2_c3_p3_arg: m2_C2_private) {
+>p3_private : Symbol(m2_C4_private.p3_private, Decl(privacyGetter.ts, 122, 9), Decl(privacyGetter.ts, 126, 9))
+>m2_c3_p3_arg : Symbol(m2_c3_p3_arg, Decl(privacyGetter.ts, 128, 31))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGetter.ts, 74, 5))
+ }
+
+ public get p4_public(): m2_C2_private {
+>p4_public : Symbol(m2_C4_private.p4_public, Decl(privacyGetter.ts, 129, 9), Decl(privacyGetter.ts, 133, 9))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGetter.ts, 74, 5))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGetter.ts, 74, 5))
+ }
+
+ public set p4_public(m2_c3_p4_arg: m2_C2_private) {
+>p4_public : Symbol(m2_C4_private.p4_public, Decl(privacyGetter.ts, 129, 9), Decl(privacyGetter.ts, 133, 9))
+>m2_c3_p4_arg : Symbol(m2_c3_p4_arg, Decl(privacyGetter.ts, 135, 29))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGetter.ts, 74, 5))
+ }
+ }
+}
+
+class C5_private {
+>C5_private : Symbol(C5_private, Decl(privacyGetter.ts, 138, 1))
+
+ private f() {
+>f : Symbol(C5_private.f, Decl(privacyGetter.ts, 140, 18))
+ }
+}
+
+export class C6_public {
+>C6_public : Symbol(C6_public, Decl(privacyGetter.ts, 143, 1))
+}
+
+export class C7_public {
+>C7_public : Symbol(C7_public, Decl(privacyGetter.ts, 146, 1))
+
+ private get p1_private() {
+>p1_private : Symbol(C7_public.p1_private, Decl(privacyGetter.ts, 148, 24), Decl(privacyGetter.ts, 151, 5))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGetter.ts, 143, 1))
+ }
+
+ private set p1_private(m1_c3_p1_arg: C6_public) {
+>p1_private : Symbol(C7_public.p1_private, Decl(privacyGetter.ts, 148, 24), Decl(privacyGetter.ts, 151, 5))
+>m1_c3_p1_arg : Symbol(m1_c3_p1_arg, Decl(privacyGetter.ts, 153, 27))
+>C6_public : Symbol(C6_public, Decl(privacyGetter.ts, 143, 1))
+ }
+
+ private get p2_private() {
+>p2_private : Symbol(C7_public.p2_private, Decl(privacyGetter.ts, 154, 5), Decl(privacyGetter.ts, 158, 5))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGetter.ts, 143, 1))
+ }
+
+ private set p2_private(m1_c3_p2_arg: C6_public) {
+>p2_private : Symbol(C7_public.p2_private, Decl(privacyGetter.ts, 154, 5), Decl(privacyGetter.ts, 158, 5))
+>m1_c3_p2_arg : Symbol(m1_c3_p2_arg, Decl(privacyGetter.ts, 160, 27))
+>C6_public : Symbol(C6_public, Decl(privacyGetter.ts, 143, 1))
+ }
+
+ private get p3_private() {
+>p3_private : Symbol(C7_public.p3_private, Decl(privacyGetter.ts, 161, 5), Decl(privacyGetter.ts, 165, 5))
+
+ return new C5_private();
+>C5_private : Symbol(C5_private, Decl(privacyGetter.ts, 138, 1))
+ }
+
+ private set p3_private(m1_c3_p3_arg: C5_private) {
+>p3_private : Symbol(C7_public.p3_private, Decl(privacyGetter.ts, 161, 5), Decl(privacyGetter.ts, 165, 5))
+>m1_c3_p3_arg : Symbol(m1_c3_p3_arg, Decl(privacyGetter.ts, 167, 27))
+>C5_private : Symbol(C5_private, Decl(privacyGetter.ts, 138, 1))
+ }
+
+ public get p4_public(): C5_private { // error
+>p4_public : Symbol(C7_public.p4_public, Decl(privacyGetter.ts, 168, 5), Decl(privacyGetter.ts, 172, 5))
+>C5_private : Symbol(C5_private, Decl(privacyGetter.ts, 138, 1))
+
+ return new C5_private(); //error
+>C5_private : Symbol(C5_private, Decl(privacyGetter.ts, 138, 1))
+ }
+
+ public set p4_public(m1_c3_p4_arg: C5_private) { // error
+>p4_public : Symbol(C7_public.p4_public, Decl(privacyGetter.ts, 168, 5), Decl(privacyGetter.ts, 172, 5))
+>m1_c3_p4_arg : Symbol(m1_c3_p4_arg, Decl(privacyGetter.ts, 174, 25))
+>C5_private : Symbol(C5_private, Decl(privacyGetter.ts, 138, 1))
+ }
+}
+
+class C8_private {
+>C8_private : Symbol(C8_private, Decl(privacyGetter.ts, 176, 1))
+
+ private get p1_private() {
+>p1_private : Symbol(C8_private.p1_private, Decl(privacyGetter.ts, 178, 18), Decl(privacyGetter.ts, 181, 5))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGetter.ts, 143, 1))
+ }
+
+ private set p1_private(m1_c3_p1_arg: C6_public) {
+>p1_private : Symbol(C8_private.p1_private, Decl(privacyGetter.ts, 178, 18), Decl(privacyGetter.ts, 181, 5))
+>m1_c3_p1_arg : Symbol(m1_c3_p1_arg, Decl(privacyGetter.ts, 183, 27))
+>C6_public : Symbol(C6_public, Decl(privacyGetter.ts, 143, 1))
+ }
+
+ private get p2_private() {
+>p2_private : Symbol(C8_private.p2_private, Decl(privacyGetter.ts, 184, 5), Decl(privacyGetter.ts, 188, 5))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGetter.ts, 143, 1))
+ }
+
+ private set p2_private(m1_c3_p2_arg: C6_public) {
+>p2_private : Symbol(C8_private.p2_private, Decl(privacyGetter.ts, 184, 5), Decl(privacyGetter.ts, 188, 5))
+>m1_c3_p2_arg : Symbol(m1_c3_p2_arg, Decl(privacyGetter.ts, 190, 27))
+>C6_public : Symbol(C6_public, Decl(privacyGetter.ts, 143, 1))
+ }
+
+ private get p3_private() {
+>p3_private : Symbol(C8_private.p3_private, Decl(privacyGetter.ts, 191, 5), Decl(privacyGetter.ts, 195, 5))
+
+ return new C5_private();
+>C5_private : Symbol(C5_private, Decl(privacyGetter.ts, 138, 1))
+ }
+
+ private set p3_private(m1_c3_p3_arg: C5_private) {
+>p3_private : Symbol(C8_private.p3_private, Decl(privacyGetter.ts, 191, 5), Decl(privacyGetter.ts, 195, 5))
+>m1_c3_p3_arg : Symbol(m1_c3_p3_arg, Decl(privacyGetter.ts, 197, 27))
+>C5_private : Symbol(C5_private, Decl(privacyGetter.ts, 138, 1))
+ }
+
+ public get p4_public(): C5_private {
+>p4_public : Symbol(C8_private.p4_public, Decl(privacyGetter.ts, 198, 5), Decl(privacyGetter.ts, 202, 5))
+>C5_private : Symbol(C5_private, Decl(privacyGetter.ts, 138, 1))
+
+ return new C5_private();
+>C5_private : Symbol(C5_private, Decl(privacyGetter.ts, 138, 1))
+ }
+
+ public set p4_public(m1_c3_p4_arg: C5_private) {
+>p4_public : Symbol(C8_private.p4_public, Decl(privacyGetter.ts, 198, 5), Decl(privacyGetter.ts, 202, 5))
+>m1_c3_p4_arg : Symbol(m1_c3_p4_arg, Decl(privacyGetter.ts, 204, 25))
+>C5_private : Symbol(C5_private, Decl(privacyGetter.ts, 138, 1))
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/privacyGetter(target=es2015).types b/tsc/testdata/baselines/reference/compiler/privacyGetter(target=es2015).types
new file mode 100644
index 0000000000000..a279522c6aeed
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyGetter(target=es2015).types
@@ -0,0 +1,382 @@
+//// [tests/cases/compiler/privacyGetter.ts] ////
+
+=== privacyGetter.ts ===
+export namespace m1 {
+>m1 : typeof m1
+
+ export class C1_public {
+>C1_public : C1_public
+
+ private f1() {
+>f1 : () => void
+ }
+ }
+
+ class C2_private {
+>C2_private : C2_private
+ }
+
+ export class C3_public {
+>C3_public : C3_public
+
+ private get p1_private() {
+>p1_private : C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ private set p1_private(m1_c3_p1_arg: C1_public) {
+>p1_private : C1_public
+>m1_c3_p1_arg : C1_public
+ }
+
+ private get p2_private() {
+>p2_private : C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ private set p2_private(m1_c3_p2_arg: C1_public) {
+>p2_private : C1_public
+>m1_c3_p2_arg : C1_public
+ }
+
+ private get p3_private() {
+>p3_private : C2_private
+
+ return new C2_private();
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+ private set p3_private(m1_c3_p3_arg: C2_private) {
+>p3_private : C2_private
+>m1_c3_p3_arg : C2_private
+ }
+
+ public get p4_public(): C2_private { // error
+>p4_public : C2_private
+
+ return new C2_private(); //error
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+ public set p4_public(m1_c3_p4_arg: C2_private) { // error
+>p4_public : C2_private
+>m1_c3_p4_arg : C2_private
+ }
+ }
+
+ class C4_private {
+>C4_private : C4_private
+
+ private get p1_private() {
+>p1_private : C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ private set p1_private(m1_c3_p1_arg: C1_public) {
+>p1_private : C1_public
+>m1_c3_p1_arg : C1_public
+ }
+
+ private get p2_private() {
+>p2_private : C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ private set p2_private(m1_c3_p2_arg: C1_public) {
+>p2_private : C1_public
+>m1_c3_p2_arg : C1_public
+ }
+
+ private get p3_private() {
+>p3_private : C2_private
+
+ return new C2_private();
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+ private set p3_private(m1_c3_p3_arg: C2_private) {
+>p3_private : C2_private
+>m1_c3_p3_arg : C2_private
+ }
+
+ public get p4_public(): C2_private {
+>p4_public : C2_private
+
+ return new C2_private();
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+ public set p4_public(m1_c3_p4_arg: C2_private) {
+>p4_public : C2_private
+>m1_c3_p4_arg : C2_private
+ }
+ }
+}
+
+namespace m2 {
+>m2 : typeof m2
+
+ export class m2_C1_public {
+>m2_C1_public : m2_C1_public
+
+ private f1() {
+>f1 : () => void
+ }
+ }
+
+ class m2_C2_private {
+>m2_C2_private : m2_C2_private
+ }
+
+ export class m2_C3_public {
+>m2_C3_public : m2_C3_public
+
+ private get p1_private() {
+>p1_private : m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ private set p1_private(m2_c3_p1_arg: m2_C1_public) {
+>p1_private : m2_C1_public
+>m2_c3_p1_arg : m2_C1_public
+ }
+
+ private get p2_private() {
+>p2_private : m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ private set p2_private(m2_c3_p2_arg: m2_C1_public) {
+>p2_private : m2_C1_public
+>m2_c3_p2_arg : m2_C1_public
+ }
+
+ private get p3_private() {
+>p3_private : m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+ private set p3_private(m2_c3_p3_arg: m2_C2_private) {
+>p3_private : m2_C2_private
+>m2_c3_p3_arg : m2_C2_private
+ }
+
+ public get p4_public(): m2_C2_private {
+>p4_public : m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+ public set p4_public(m2_c3_p4_arg: m2_C2_private) {
+>p4_public : m2_C2_private
+>m2_c3_p4_arg : m2_C2_private
+ }
+ }
+
+ class m2_C4_private {
+>m2_C4_private : m2_C4_private
+
+ private get p1_private() {
+>p1_private : m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ private set p1_private(m2_c3_p1_arg: m2_C1_public) {
+>p1_private : m2_C1_public
+>m2_c3_p1_arg : m2_C1_public
+ }
+
+ private get p2_private() {
+>p2_private : m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ private set p2_private(m2_c3_p2_arg: m2_C1_public) {
+>p2_private : m2_C1_public
+>m2_c3_p2_arg : m2_C1_public
+ }
+
+ private get p3_private() {
+>p3_private : m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+ private set p3_private(m2_c3_p3_arg: m2_C2_private) {
+>p3_private : m2_C2_private
+>m2_c3_p3_arg : m2_C2_private
+ }
+
+ public get p4_public(): m2_C2_private {
+>p4_public : m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+ public set p4_public(m2_c3_p4_arg: m2_C2_private) {
+>p4_public : m2_C2_private
+>m2_c3_p4_arg : m2_C2_private
+ }
+ }
+}
+
+class C5_private {
+>C5_private : C5_private
+
+ private f() {
+>f : () => void
+ }
+}
+
+export class C6_public {
+>C6_public : C6_public
+}
+
+export class C7_public {
+>C7_public : C7_public
+
+ private get p1_private() {
+>p1_private : C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+ }
+
+ private set p1_private(m1_c3_p1_arg: C6_public) {
+>p1_private : C6_public
+>m1_c3_p1_arg : C6_public
+ }
+
+ private get p2_private() {
+>p2_private : C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+ }
+
+ private set p2_private(m1_c3_p2_arg: C6_public) {
+>p2_private : C6_public
+>m1_c3_p2_arg : C6_public
+ }
+
+ private get p3_private() {
+>p3_private : C5_private
+
+ return new C5_private();
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+ }
+
+ private set p3_private(m1_c3_p3_arg: C5_private) {
+>p3_private : C5_private
+>m1_c3_p3_arg : C5_private
+ }
+
+ public get p4_public(): C5_private { // error
+>p4_public : C5_private
+
+ return new C5_private(); //error
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+ }
+
+ public set p4_public(m1_c3_p4_arg: C5_private) { // error
+>p4_public : C5_private
+>m1_c3_p4_arg : C5_private
+ }
+}
+
+class C8_private {
+>C8_private : C8_private
+
+ private get p1_private() {
+>p1_private : C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+ }
+
+ private set p1_private(m1_c3_p1_arg: C6_public) {
+>p1_private : C6_public
+>m1_c3_p1_arg : C6_public
+ }
+
+ private get p2_private() {
+>p2_private : C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+ }
+
+ private set p2_private(m1_c3_p2_arg: C6_public) {
+>p2_private : C6_public
+>m1_c3_p2_arg : C6_public
+ }
+
+ private get p3_private() {
+>p3_private : C5_private
+
+ return new C5_private();
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+ }
+
+ private set p3_private(m1_c3_p3_arg: C5_private) {
+>p3_private : C5_private
+>m1_c3_p3_arg : C5_private
+ }
+
+ public get p4_public(): C5_private {
+>p4_public : C5_private
+
+ return new C5_private();
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+ }
+
+ public set p4_public(m1_c3_p4_arg: C5_private) {
+>p4_public : C5_private
+>m1_c3_p4_arg : C5_private
+ }
+}
diff --git a/tsc/testdata/baselines/reference/compiler/privacyGloFunc.js b/tsc/testdata/baselines/reference/compiler/privacyGloFunc.js
new file mode 100644
index 0000000000000..9670fdddec1fb
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyGloFunc.js
@@ -0,0 +1,952 @@
+//// [tests/cases/compiler/privacyGloFunc.ts] ////
+
+//// [privacyGloFunc.ts]
+export namespace m1 {
+ export class C1_public {
+ private f1() {
+ }
+ }
+
+ class C2_private {
+ }
+
+ export class C3_public {
+ constructor (m1_c3_c1: C1_public);
+ constructor (m1_c3_c2: C2_private); //error
+ constructor (m1_c3_c1_2: any) {
+ }
+
+ private f1_private(m1_c3_f1_arg: C1_public) {
+ }
+
+ public f2_public(m1_c3_f2_arg: C1_public) {
+ }
+
+ private f3_private(m1_c3_f3_arg: C2_private) {
+ }
+
+ public f4_public(m1_c3_f4_arg: C2_private) { // error
+ }
+
+ private f5_private() {
+ return new C1_public();
+ }
+
+ public f6_public() {
+ return new C1_public();
+ }
+
+ private f7_private() {
+ return new C2_private();
+ }
+
+ public f8_public() {
+ return new C2_private(); // error
+ }
+
+ private f9_private(): C1_public {
+ return new C1_public();
+ }
+
+ public f10_public(): C1_public {
+ return new C1_public();
+ }
+
+ private f11_private(): C2_private {
+ return new C2_private();
+ }
+
+ public f12_public(): C2_private { // error
+ return new C2_private(); //error
+ }
+ }
+
+ class C4_private {
+ constructor (m1_c4_c1: C1_public);
+ constructor (m1_c4_c2: C2_private);
+ constructor (m1_c4_c1_2: any) {
+ }
+ private f1_private(m1_c4_f1_arg: C1_public) {
+ }
+
+ public f2_public(m1_c4_f2_arg: C1_public) {
+ }
+
+ private f3_private(m1_c4_f3_arg: C2_private) {
+ }
+
+ public f4_public(m1_c4_f4_arg: C2_private) {
+ }
+
+
+ private f5_private() {
+ return new C1_public();
+ }
+
+ public f6_public() {
+ return new C1_public();
+ }
+
+ private f7_private() {
+ return new C2_private();
+ }
+
+ public f8_public() {
+ return new C2_private();
+ }
+
+
+ private f9_private(): C1_public {
+ return new C1_public();
+ }
+
+ public f10_public(): C1_public {
+ return new C1_public();
+ }
+
+ private f11_private(): C2_private {
+ return new C2_private();
+ }
+
+ public f12_public(): C2_private {
+ return new C2_private();
+ }
+ }
+
+ export class C5_public {
+ constructor (m1_c5_c: C1_public) {
+ }
+ }
+
+ class C6_private {
+ constructor (m1_c6_c: C1_public) {
+ }
+ }
+ export class C7_public {
+ constructor (m1_c7_c: C2_private) { // error
+ }
+ }
+
+ class C8_private {
+ constructor (m1_c8_c: C2_private) {
+ }
+ }
+
+ function f1_public(m1_f1_arg: C1_public) {
+ }
+
+ export function f2_public(m1_f2_arg: C1_public) {
+ }
+
+ function f3_public(m1_f3_arg: C2_private) {
+ }
+
+ export function f4_public(m1_f4_arg: C2_private) { // error
+ }
+
+
+ function f5_public() {
+ return new C1_public();
+ }
+
+ export function f6_public() {
+ return new C1_public();
+ }
+
+ function f7_public() {
+ return new C2_private();
+ }
+
+ export function f8_public() {
+ return new C2_private(); // error
+ }
+
+
+ function f9_private(): C1_public {
+ return new C1_public();
+ }
+
+ export function f10_public(): C1_public {
+ return new C1_public();
+ }
+
+ function f11_private(): C2_private {
+ return new C2_private();
+ }
+
+ export function f12_public(): C2_private { // error
+ return new C2_private(); //error
+ }
+}
+
+namespace m2 {
+ export class m2_C1_public {
+ private f() {
+ }
+ }
+
+ class m2_C2_private {
+ }
+
+ export class m2_C3_public {
+ constructor (m2_c3_c1: m2_C1_public);
+ constructor (m2_c3_c2: m2_C2_private);
+ constructor (m2_c3_c1_2: any) {
+ }
+
+ private f1_private(m2_c3_f1_arg: m2_C1_public) {
+ }
+
+ public f2_public(m2_c3_f2_arg: m2_C1_public) {
+ }
+
+ private f3_private(m2_c3_f3_arg: m2_C2_private) {
+ }
+
+ public f4_public(m2_c3_f4_arg: m2_C2_private) {
+ }
+
+ private f5_private() {
+ return new m2_C1_public();
+ }
+
+ public f6_public() {
+ return new m2_C1_public();
+ }
+
+ private f7_private() {
+ return new m2_C2_private();
+ }
+
+ public f8_public() {
+ return new m2_C2_private();
+ }
+
+ private f9_private(): m2_C1_public {
+ return new m2_C1_public();
+ }
+
+ public f10_public(): m2_C1_public {
+ return new m2_C1_public();
+ }
+
+ private f11_private(): m2_C2_private {
+ return new m2_C2_private();
+ }
+
+ public f12_public(): m2_C2_private {
+ return new m2_C2_private();
+ }
+ }
+
+ class m2_C4_private {
+ constructor (m2_c4_c1: m2_C1_public);
+ constructor (m2_c4_c2: m2_C2_private);
+ constructor (m2_c4_c1_2: any) {
+ }
+
+ private f1_private(m2_c4_f1_arg: m2_C1_public) {
+ }
+
+ public f2_public(m2_c4_f2_arg: m2_C1_public) {
+ }
+
+ private f3_private(m2_c4_f3_arg: m2_C2_private) {
+ }
+
+ public f4_public(m2_c4_f4_arg: m2_C2_private) {
+ }
+
+
+ private f5_private() {
+ return new m2_C1_public();
+ }
+
+ public f6_public() {
+ return new m2_C1_public();
+ }
+
+ private f7_private() {
+ return new m2_C2_private();
+ }
+
+ public f8_public() {
+ return new m2_C2_private();
+ }
+
+
+ private f9_private(): m2_C1_public {
+ return new m2_C1_public();
+ }
+
+ public f10_public(): m2_C1_public {
+ return new m2_C1_public();
+ }
+
+ private f11_private(): m2_C2_private {
+ return new m2_C2_private();
+ }
+
+ public f12_public(): m2_C2_private {
+ return new m2_C2_private();
+ }
+ }
+
+ export class m2_C5_public {
+ constructor (m2_c5_c: m2_C1_public) {
+ }
+ }
+
+ class m2_C6_private {
+ constructor (m2_c6_c: m2_C1_public) {
+ }
+ }
+ export class m2_C7_public {
+ constructor (m2_c7_c: m2_C2_private) {
+ }
+ }
+
+ class m2_C8_private {
+ constructor (m2_c8_c: m2_C2_private) {
+ }
+ }
+
+ function f1_public(m2_f1_arg: m2_C1_public) {
+ }
+
+ export function f2_public(m2_f2_arg: m2_C1_public) {
+ }
+
+ function f3_public(m2_f3_arg: m2_C2_private) {
+ }
+
+ export function f4_public(m2_f4_arg: m2_C2_private) {
+ }
+
+
+ function f5_public() {
+ return new m2_C1_public();
+ }
+
+ export function f6_public() {
+ return new m2_C1_public();
+ }
+
+ function f7_public() {
+ return new m2_C2_private();
+ }
+
+ export function f8_public() {
+ return new m2_C2_private();
+ }
+
+
+ function f9_private(): m2_C1_public {
+ return new m2_C1_public();
+ }
+
+ export function f10_public(): m2_C1_public {
+ return new m2_C1_public();
+ }
+
+ function f11_private(): m2_C2_private {
+ return new m2_C2_private();
+ }
+
+ export function f12_public(): m2_C2_private {
+ return new m2_C2_private();
+ }
+}
+
+class C5_private {
+ private f() {
+ }
+}
+
+export class C6_public {
+}
+
+export class C7_public {
+ constructor (c7_c1: C5_private); // error
+ constructor (c7_c2: C6_public);
+ constructor (c7_c1_2: any) {
+ }
+ private f1_private(c7_f1_arg: C6_public) {
+ }
+
+ public f2_public(c7_f2_arg: C6_public) {
+ }
+
+ private f3_private(c7_f3_arg: C5_private) {
+ }
+
+ public f4_public(c7_f4_arg: C5_private) { //error
+ }
+
+ private f5_private() {
+ return new C6_public();
+ }
+
+ public f6_public() {
+ return new C6_public();
+ }
+
+ private f7_private() {
+ return new C5_private();
+ }
+
+ public f8_public() {
+ return new C5_private(); //error
+ }
+
+ private f9_private(): C6_public {
+ return new C6_public();
+ }
+
+ public f10_public(): C6_public {
+ return new C6_public();
+ }
+
+ private f11_private(): C5_private {
+ return new C5_private();
+ }
+
+ public f12_public(): C5_private { //error
+ return new C5_private(); //error
+ }
+}
+
+class C8_private {
+ constructor (c8_c1: C5_private);
+ constructor (c8_c2: C6_public);
+ constructor (c8_c1_2: any) {
+ }
+
+ private f1_private(c8_f1_arg: C6_public) {
+ }
+
+ public f2_public(c8_f2_arg: C6_public) {
+ }
+
+ private f3_private(c8_f3_arg: C5_private) {
+ }
+
+ public f4_public(c8_f4_arg: C5_private) {
+ }
+
+ private f5_private() {
+ return new C6_public();
+ }
+
+ public f6_public() {
+ return new C6_public();
+ }
+
+ private f7_private() {
+ return new C5_private();
+ }
+
+ public f8_public() {
+ return new C5_private();
+ }
+
+ private f9_private(): C6_public {
+ return new C6_public();
+ }
+
+ public f10_public(): C6_public {
+ return new C6_public();
+ }
+
+ private f11_private(): C5_private {
+ return new C5_private();
+ }
+
+ public f12_public(): C5_private {
+ return new C5_private();
+ }
+}
+
+
+export class C9_public {
+ constructor (c9_c: C6_public) {
+ }
+}
+
+class C10_private {
+ constructor (c10_c: C6_public) {
+ }
+}
+export class C11_public {
+ constructor (c11_c: C5_private) { // error
+ }
+}
+
+class C12_private {
+ constructor (c12_c: C5_private) {
+ }
+}
+
+function f1_private(f1_arg: C5_private) {
+}
+
+export function f2_public(f2_arg: C5_private) { // error
+}
+
+function f3_private(f3_arg: C6_public) {
+}
+
+export function f4_public(f4_arg: C6_public) {
+}
+
+function f5_private() {
+ return new C6_public();
+}
+
+export function f6_public() {
+ return new C6_public();
+}
+
+function f7_private() {
+ return new C5_private();
+}
+
+export function f8_public() {
+ return new C5_private(); //error
+}
+
+function f9_private(): C6_public {
+ return new C6_public();
+}
+
+export function f10_public(): C6_public {
+ return new C6_public();
+}
+
+function f11_private(): C5_private {
+ return new C5_private();
+}
+
+export function f12_public(): C5_private { //error
+ return new C5_private(); //error
+}
+
+
+//// [privacyGloFunc.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.C11_public = exports.C9_public = exports.C7_public = exports.C6_public = exports.m1 = void 0;
+exports.f2_public = f2_public;
+exports.f4_public = f4_public;
+exports.f6_public = f6_public;
+exports.f8_public = f8_public;
+exports.f10_public = f10_public;
+exports.f12_public = f12_public;
+var m1;
+(function (m1) {
+ class C1_public {
+ f1() {
+ }
+ }
+ m1.C1_public = C1_public;
+ class C2_private {
+ }
+ class C3_public {
+ constructor(m1_c3_c1_2) {
+ }
+ f1_private(m1_c3_f1_arg) {
+ }
+ f2_public(m1_c3_f2_arg) {
+ }
+ f3_private(m1_c3_f3_arg) {
+ }
+ f4_public(m1_c3_f4_arg) {
+ }
+ f5_private() {
+ return new C1_public();
+ }
+ f6_public() {
+ return new C1_public();
+ }
+ f7_private() {
+ return new C2_private();
+ }
+ f8_public() {
+ return new C2_private(); // error
+ }
+ f9_private() {
+ return new C1_public();
+ }
+ f10_public() {
+ return new C1_public();
+ }
+ f11_private() {
+ return new C2_private();
+ }
+ f12_public() {
+ return new C2_private(); //error
+ }
+ }
+ m1.C3_public = C3_public;
+ class C4_private {
+ constructor(m1_c4_c1_2) {
+ }
+ f1_private(m1_c4_f1_arg) {
+ }
+ f2_public(m1_c4_f2_arg) {
+ }
+ f3_private(m1_c4_f3_arg) {
+ }
+ f4_public(m1_c4_f4_arg) {
+ }
+ f5_private() {
+ return new C1_public();
+ }
+ f6_public() {
+ return new C1_public();
+ }
+ f7_private() {
+ return new C2_private();
+ }
+ f8_public() {
+ return new C2_private();
+ }
+ f9_private() {
+ return new C1_public();
+ }
+ f10_public() {
+ return new C1_public();
+ }
+ f11_private() {
+ return new C2_private();
+ }
+ f12_public() {
+ return new C2_private();
+ }
+ }
+ class C5_public {
+ constructor(m1_c5_c) {
+ }
+ }
+ m1.C5_public = C5_public;
+ class C6_private {
+ constructor(m1_c6_c) {
+ }
+ }
+ class C7_public {
+ constructor(m1_c7_c) {
+ }
+ }
+ m1.C7_public = C7_public;
+ class C8_private {
+ constructor(m1_c8_c) {
+ }
+ }
+ function f1_public(m1_f1_arg) {
+ }
+ function f2_public(m1_f2_arg) {
+ }
+ m1.f2_public = f2_public;
+ function f3_public(m1_f3_arg) {
+ }
+ function f4_public(m1_f4_arg) {
+ }
+ m1.f4_public = f4_public;
+ function f5_public() {
+ return new C1_public();
+ }
+ function f6_public() {
+ return new C1_public();
+ }
+ m1.f6_public = f6_public;
+ function f7_public() {
+ return new C2_private();
+ }
+ function f8_public() {
+ return new C2_private(); // error
+ }
+ m1.f8_public = f8_public;
+ function f9_private() {
+ return new C1_public();
+ }
+ function f10_public() {
+ return new C1_public();
+ }
+ m1.f10_public = f10_public;
+ function f11_private() {
+ return new C2_private();
+ }
+ function f12_public() {
+ return new C2_private(); //error
+ }
+ m1.f12_public = f12_public;
+})(m1 || (exports.m1 = m1 = {}));
+var m2;
+(function (m2) {
+ class m2_C1_public {
+ f() {
+ }
+ }
+ m2.m2_C1_public = m2_C1_public;
+ class m2_C2_private {
+ }
+ class m2_C3_public {
+ constructor(m2_c3_c1_2) {
+ }
+ f1_private(m2_c3_f1_arg) {
+ }
+ f2_public(m2_c3_f2_arg) {
+ }
+ f3_private(m2_c3_f3_arg) {
+ }
+ f4_public(m2_c3_f4_arg) {
+ }
+ f5_private() {
+ return new m2_C1_public();
+ }
+ f6_public() {
+ return new m2_C1_public();
+ }
+ f7_private() {
+ return new m2_C2_private();
+ }
+ f8_public() {
+ return new m2_C2_private();
+ }
+ f9_private() {
+ return new m2_C1_public();
+ }
+ f10_public() {
+ return new m2_C1_public();
+ }
+ f11_private() {
+ return new m2_C2_private();
+ }
+ f12_public() {
+ return new m2_C2_private();
+ }
+ }
+ m2.m2_C3_public = m2_C3_public;
+ class m2_C4_private {
+ constructor(m2_c4_c1_2) {
+ }
+ f1_private(m2_c4_f1_arg) {
+ }
+ f2_public(m2_c4_f2_arg) {
+ }
+ f3_private(m2_c4_f3_arg) {
+ }
+ f4_public(m2_c4_f4_arg) {
+ }
+ f5_private() {
+ return new m2_C1_public();
+ }
+ f6_public() {
+ return new m2_C1_public();
+ }
+ f7_private() {
+ return new m2_C2_private();
+ }
+ f8_public() {
+ return new m2_C2_private();
+ }
+ f9_private() {
+ return new m2_C1_public();
+ }
+ f10_public() {
+ return new m2_C1_public();
+ }
+ f11_private() {
+ return new m2_C2_private();
+ }
+ f12_public() {
+ return new m2_C2_private();
+ }
+ }
+ class m2_C5_public {
+ constructor(m2_c5_c) {
+ }
+ }
+ m2.m2_C5_public = m2_C5_public;
+ class m2_C6_private {
+ constructor(m2_c6_c) {
+ }
+ }
+ class m2_C7_public {
+ constructor(m2_c7_c) {
+ }
+ }
+ m2.m2_C7_public = m2_C7_public;
+ class m2_C8_private {
+ constructor(m2_c8_c) {
+ }
+ }
+ function f1_public(m2_f1_arg) {
+ }
+ function f2_public(m2_f2_arg) {
+ }
+ m2.f2_public = f2_public;
+ function f3_public(m2_f3_arg) {
+ }
+ function f4_public(m2_f4_arg) {
+ }
+ m2.f4_public = f4_public;
+ function f5_public() {
+ return new m2_C1_public();
+ }
+ function f6_public() {
+ return new m2_C1_public();
+ }
+ m2.f6_public = f6_public;
+ function f7_public() {
+ return new m2_C2_private();
+ }
+ function f8_public() {
+ return new m2_C2_private();
+ }
+ m2.f8_public = f8_public;
+ function f9_private() {
+ return new m2_C1_public();
+ }
+ function f10_public() {
+ return new m2_C1_public();
+ }
+ m2.f10_public = f10_public;
+ function f11_private() {
+ return new m2_C2_private();
+ }
+ function f12_public() {
+ return new m2_C2_private();
+ }
+ m2.f12_public = f12_public;
+})(m2 || (m2 = {}));
+class C5_private {
+ f() {
+ }
+}
+class C6_public {
+}
+exports.C6_public = C6_public;
+class C7_public {
+ constructor(c7_c1_2) {
+ }
+ f1_private(c7_f1_arg) {
+ }
+ f2_public(c7_f2_arg) {
+ }
+ f3_private(c7_f3_arg) {
+ }
+ f4_public(c7_f4_arg) {
+ }
+ f5_private() {
+ return new C6_public();
+ }
+ f6_public() {
+ return new C6_public();
+ }
+ f7_private() {
+ return new C5_private();
+ }
+ f8_public() {
+ return new C5_private(); //error
+ }
+ f9_private() {
+ return new C6_public();
+ }
+ f10_public() {
+ return new C6_public();
+ }
+ f11_private() {
+ return new C5_private();
+ }
+ f12_public() {
+ return new C5_private(); //error
+ }
+}
+exports.C7_public = C7_public;
+class C8_private {
+ constructor(c8_c1_2) {
+ }
+ f1_private(c8_f1_arg) {
+ }
+ f2_public(c8_f2_arg) {
+ }
+ f3_private(c8_f3_arg) {
+ }
+ f4_public(c8_f4_arg) {
+ }
+ f5_private() {
+ return new C6_public();
+ }
+ f6_public() {
+ return new C6_public();
+ }
+ f7_private() {
+ return new C5_private();
+ }
+ f8_public() {
+ return new C5_private();
+ }
+ f9_private() {
+ return new C6_public();
+ }
+ f10_public() {
+ return new C6_public();
+ }
+ f11_private() {
+ return new C5_private();
+ }
+ f12_public() {
+ return new C5_private();
+ }
+}
+class C9_public {
+ constructor(c9_c) {
+ }
+}
+exports.C9_public = C9_public;
+class C10_private {
+ constructor(c10_c) {
+ }
+}
+class C11_public {
+ constructor(c11_c) {
+ }
+}
+exports.C11_public = C11_public;
+class C12_private {
+ constructor(c12_c) {
+ }
+}
+function f1_private(f1_arg) {
+}
+function f2_public(f2_arg) {
+}
+function f3_private(f3_arg) {
+}
+function f4_public(f4_arg) {
+}
+function f5_private() {
+ return new C6_public();
+}
+function f6_public() {
+ return new C6_public();
+}
+function f7_private() {
+ return new C5_private();
+}
+function f8_public() {
+ return new C5_private(); //error
+}
+function f9_private() {
+ return new C6_public();
+}
+function f10_public() {
+ return new C6_public();
+}
+function f11_private() {
+ return new C5_private();
+}
+function f12_public() {
+ return new C5_private(); //error
+}
diff --git a/tsc/testdata/baselines/reference/compiler/privacyGloFunc.symbols b/tsc/testdata/baselines/reference/compiler/privacyGloFunc.symbols
new file mode 100644
index 0000000000000..ee72df3d5066a
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyGloFunc.symbols
@@ -0,0 +1,1011 @@
+//// [tests/cases/compiler/privacyGloFunc.ts] ////
+
+=== privacyGloFunc.ts ===
+export namespace m1 {
+>m1 : Symbol(m1, Decl(privacyGloFunc.ts, 0, 0))
+
+ export class C1_public {
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+
+ private f1() {
+>f1 : Symbol(C1_public.f1, Decl(privacyGloFunc.ts, 1, 28))
+ }
+ }
+
+ class C2_private {
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+ export class C3_public {
+>C3_public : Symbol(C3_public, Decl(privacyGloFunc.ts, 7, 5))
+
+ constructor (m1_c3_c1: C1_public);
+>m1_c3_c1 : Symbol(m1_c3_c1, Decl(privacyGloFunc.ts, 10, 21))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+
+ constructor (m1_c3_c2: C2_private); //error
+>m1_c3_c2 : Symbol(m1_c3_c2, Decl(privacyGloFunc.ts, 11, 21))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+
+ constructor (m1_c3_c1_2: any) {
+>m1_c3_c1_2 : Symbol(m1_c3_c1_2, Decl(privacyGloFunc.ts, 12, 21))
+ }
+
+ private f1_private(m1_c3_f1_arg: C1_public) {
+>f1_private : Symbol(C3_public.f1_private, Decl(privacyGloFunc.ts, 13, 9))
+>m1_c3_f1_arg : Symbol(m1_c3_f1_arg, Decl(privacyGloFunc.ts, 15, 27))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ public f2_public(m1_c3_f2_arg: C1_public) {
+>f2_public : Symbol(C3_public.f2_public, Decl(privacyGloFunc.ts, 16, 9))
+>m1_c3_f2_arg : Symbol(m1_c3_f2_arg, Decl(privacyGloFunc.ts, 18, 25))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ private f3_private(m1_c3_f3_arg: C2_private) {
+>f3_private : Symbol(C3_public.f3_private, Decl(privacyGloFunc.ts, 19, 9))
+>m1_c3_f3_arg : Symbol(m1_c3_f3_arg, Decl(privacyGloFunc.ts, 21, 27))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+ public f4_public(m1_c3_f4_arg: C2_private) { // error
+>f4_public : Symbol(C3_public.f4_public, Decl(privacyGloFunc.ts, 22, 9))
+>m1_c3_f4_arg : Symbol(m1_c3_f4_arg, Decl(privacyGloFunc.ts, 24, 25))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+ private f5_private() {
+>f5_private : Symbol(C3_public.f5_private, Decl(privacyGloFunc.ts, 25, 9))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ public f6_public() {
+>f6_public : Symbol(C3_public.f6_public, Decl(privacyGloFunc.ts, 29, 9))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ private f7_private() {
+>f7_private : Symbol(C3_public.f7_private, Decl(privacyGloFunc.ts, 33, 9))
+
+ return new C2_private();
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+ public f8_public() {
+>f8_public : Symbol(C3_public.f8_public, Decl(privacyGloFunc.ts, 37, 9))
+
+ return new C2_private(); // error
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+ private f9_private(): C1_public {
+>f9_private : Symbol(C3_public.f9_private, Decl(privacyGloFunc.ts, 41, 9))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ public f10_public(): C1_public {
+>f10_public : Symbol(C3_public.f10_public, Decl(privacyGloFunc.ts, 45, 9))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ private f11_private(): C2_private {
+>f11_private : Symbol(C3_public.f11_private, Decl(privacyGloFunc.ts, 49, 9))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+
+ return new C2_private();
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+ public f12_public(): C2_private { // error
+>f12_public : Symbol(C3_public.f12_public, Decl(privacyGloFunc.ts, 53, 9))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+
+ return new C2_private(); //error
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+ }
+
+ class C4_private {
+>C4_private : Symbol(C4_private, Decl(privacyGloFunc.ts, 58, 5))
+
+ constructor (m1_c4_c1: C1_public);
+>m1_c4_c1 : Symbol(m1_c4_c1, Decl(privacyGloFunc.ts, 61, 21))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+
+ constructor (m1_c4_c2: C2_private);
+>m1_c4_c2 : Symbol(m1_c4_c2, Decl(privacyGloFunc.ts, 62, 21))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+
+ constructor (m1_c4_c1_2: any) {
+>m1_c4_c1_2 : Symbol(m1_c4_c1_2, Decl(privacyGloFunc.ts, 63, 21))
+ }
+ private f1_private(m1_c4_f1_arg: C1_public) {
+>f1_private : Symbol(C4_private.f1_private, Decl(privacyGloFunc.ts, 64, 9))
+>m1_c4_f1_arg : Symbol(m1_c4_f1_arg, Decl(privacyGloFunc.ts, 65, 27))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ public f2_public(m1_c4_f2_arg: C1_public) {
+>f2_public : Symbol(C4_private.f2_public, Decl(privacyGloFunc.ts, 66, 9))
+>m1_c4_f2_arg : Symbol(m1_c4_f2_arg, Decl(privacyGloFunc.ts, 68, 25))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ private f3_private(m1_c4_f3_arg: C2_private) {
+>f3_private : Symbol(C4_private.f3_private, Decl(privacyGloFunc.ts, 69, 9))
+>m1_c4_f3_arg : Symbol(m1_c4_f3_arg, Decl(privacyGloFunc.ts, 71, 27))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+ public f4_public(m1_c4_f4_arg: C2_private) {
+>f4_public : Symbol(C4_private.f4_public, Decl(privacyGloFunc.ts, 72, 9))
+>m1_c4_f4_arg : Symbol(m1_c4_f4_arg, Decl(privacyGloFunc.ts, 74, 25))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+
+ private f5_private() {
+>f5_private : Symbol(C4_private.f5_private, Decl(privacyGloFunc.ts, 75, 9))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ public f6_public() {
+>f6_public : Symbol(C4_private.f6_public, Decl(privacyGloFunc.ts, 80, 9))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ private f7_private() {
+>f7_private : Symbol(C4_private.f7_private, Decl(privacyGloFunc.ts, 84, 9))
+
+ return new C2_private();
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+ public f8_public() {
+>f8_public : Symbol(C4_private.f8_public, Decl(privacyGloFunc.ts, 88, 9))
+
+ return new C2_private();
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+
+ private f9_private(): C1_public {
+>f9_private : Symbol(C4_private.f9_private, Decl(privacyGloFunc.ts, 92, 9))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ public f10_public(): C1_public {
+>f10_public : Symbol(C4_private.f10_public, Decl(privacyGloFunc.ts, 97, 9))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ private f11_private(): C2_private {
+>f11_private : Symbol(C4_private.f11_private, Decl(privacyGloFunc.ts, 101, 9))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+
+ return new C2_private();
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+ public f12_public(): C2_private {
+>f12_public : Symbol(C4_private.f12_public, Decl(privacyGloFunc.ts, 105, 9))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+
+ return new C2_private();
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+ }
+
+ export class C5_public {
+>C5_public : Symbol(C5_public, Decl(privacyGloFunc.ts, 110, 5))
+
+ constructor (m1_c5_c: C1_public) {
+>m1_c5_c : Symbol(m1_c5_c, Decl(privacyGloFunc.ts, 113, 21))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+ }
+
+ class C6_private {
+>C6_private : Symbol(C6_private, Decl(privacyGloFunc.ts, 115, 5))
+
+ constructor (m1_c6_c: C1_public) {
+>m1_c6_c : Symbol(m1_c6_c, Decl(privacyGloFunc.ts, 118, 21))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+ }
+ export class C7_public {
+>C7_public : Symbol(C7_public, Decl(privacyGloFunc.ts, 120, 5))
+
+ constructor (m1_c7_c: C2_private) { // error
+>m1_c7_c : Symbol(m1_c7_c, Decl(privacyGloFunc.ts, 122, 21))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+ }
+
+ class C8_private {
+>C8_private : Symbol(C8_private, Decl(privacyGloFunc.ts, 124, 5))
+
+ constructor (m1_c8_c: C2_private) {
+>m1_c8_c : Symbol(m1_c8_c, Decl(privacyGloFunc.ts, 127, 21))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+ }
+
+ function f1_public(m1_f1_arg: C1_public) {
+>f1_public : Symbol(f1_public, Decl(privacyGloFunc.ts, 129, 5))
+>m1_f1_arg : Symbol(m1_f1_arg, Decl(privacyGloFunc.ts, 131, 23))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ export function f2_public(m1_f2_arg: C1_public) {
+>f2_public : Symbol(f2_public, Decl(privacyGloFunc.ts, 132, 5))
+>m1_f2_arg : Symbol(m1_f2_arg, Decl(privacyGloFunc.ts, 134, 30))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ function f3_public(m1_f3_arg: C2_private) {
+>f3_public : Symbol(f3_public, Decl(privacyGloFunc.ts, 135, 5))
+>m1_f3_arg : Symbol(m1_f3_arg, Decl(privacyGloFunc.ts, 137, 23))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+ export function f4_public(m1_f4_arg: C2_private) { // error
+>f4_public : Symbol(f4_public, Decl(privacyGloFunc.ts, 138, 5))
+>m1_f4_arg : Symbol(m1_f4_arg, Decl(privacyGloFunc.ts, 140, 30))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+
+ function f5_public() {
+>f5_public : Symbol(f5_public, Decl(privacyGloFunc.ts, 141, 5))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ export function f6_public() {
+>f6_public : Symbol(f6_public, Decl(privacyGloFunc.ts, 146, 5))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ function f7_public() {
+>f7_public : Symbol(f7_public, Decl(privacyGloFunc.ts, 150, 5))
+
+ return new C2_private();
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+ export function f8_public() {
+>f8_public : Symbol(f8_public, Decl(privacyGloFunc.ts, 154, 5))
+
+ return new C2_private(); // error
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+
+ function f9_private(): C1_public {
+>f9_private : Symbol(f9_private, Decl(privacyGloFunc.ts, 158, 5))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ export function f10_public(): C1_public {
+>f10_public : Symbol(f10_public, Decl(privacyGloFunc.ts, 163, 5))
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+
+ return new C1_public();
+>C1_public : Symbol(C1_public, Decl(privacyGloFunc.ts, 0, 21))
+ }
+
+ function f11_private(): C2_private {
+>f11_private : Symbol(f11_private, Decl(privacyGloFunc.ts, 167, 5))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+
+ return new C2_private();
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+
+ export function f12_public(): C2_private { // error
+>f12_public : Symbol(f12_public, Decl(privacyGloFunc.ts, 171, 5))
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+
+ return new C2_private(); //error
+>C2_private : Symbol(C2_private, Decl(privacyGloFunc.ts, 4, 5))
+ }
+}
+
+namespace m2 {
+>m2 : Symbol(m2, Decl(privacyGloFunc.ts, 176, 1))
+
+ export class m2_C1_public {
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+
+ private f() {
+>f : Symbol(m2_C1_public.f, Decl(privacyGloFunc.ts, 179, 31))
+ }
+ }
+
+ class m2_C2_private {
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+ export class m2_C3_public {
+>m2_C3_public : Symbol(m2_C3_public, Decl(privacyGloFunc.ts, 185, 5))
+
+ constructor (m2_c3_c1: m2_C1_public);
+>m2_c3_c1 : Symbol(m2_c3_c1, Decl(privacyGloFunc.ts, 188, 21))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+
+ constructor (m2_c3_c2: m2_C2_private);
+>m2_c3_c2 : Symbol(m2_c3_c2, Decl(privacyGloFunc.ts, 189, 21))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+
+ constructor (m2_c3_c1_2: any) {
+>m2_c3_c1_2 : Symbol(m2_c3_c1_2, Decl(privacyGloFunc.ts, 190, 21))
+ }
+
+ private f1_private(m2_c3_f1_arg: m2_C1_public) {
+>f1_private : Symbol(m2_C3_public.f1_private, Decl(privacyGloFunc.ts, 191, 9))
+>m2_c3_f1_arg : Symbol(m2_c3_f1_arg, Decl(privacyGloFunc.ts, 193, 27))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ public f2_public(m2_c3_f2_arg: m2_C1_public) {
+>f2_public : Symbol(m2_C3_public.f2_public, Decl(privacyGloFunc.ts, 194, 9))
+>m2_c3_f2_arg : Symbol(m2_c3_f2_arg, Decl(privacyGloFunc.ts, 196, 25))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ private f3_private(m2_c3_f3_arg: m2_C2_private) {
+>f3_private : Symbol(m2_C3_public.f3_private, Decl(privacyGloFunc.ts, 197, 9))
+>m2_c3_f3_arg : Symbol(m2_c3_f3_arg, Decl(privacyGloFunc.ts, 199, 27))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+ public f4_public(m2_c3_f4_arg: m2_C2_private) {
+>f4_public : Symbol(m2_C3_public.f4_public, Decl(privacyGloFunc.ts, 200, 9))
+>m2_c3_f4_arg : Symbol(m2_c3_f4_arg, Decl(privacyGloFunc.ts, 202, 25))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+ private f5_private() {
+>f5_private : Symbol(m2_C3_public.f5_private, Decl(privacyGloFunc.ts, 203, 9))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ public f6_public() {
+>f6_public : Symbol(m2_C3_public.f6_public, Decl(privacyGloFunc.ts, 207, 9))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ private f7_private() {
+>f7_private : Symbol(m2_C3_public.f7_private, Decl(privacyGloFunc.ts, 211, 9))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+ public f8_public() {
+>f8_public : Symbol(m2_C3_public.f8_public, Decl(privacyGloFunc.ts, 215, 9))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+ private f9_private(): m2_C1_public {
+>f9_private : Symbol(m2_C3_public.f9_private, Decl(privacyGloFunc.ts, 219, 9))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ public f10_public(): m2_C1_public {
+>f10_public : Symbol(m2_C3_public.f10_public, Decl(privacyGloFunc.ts, 223, 9))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ private f11_private(): m2_C2_private {
+>f11_private : Symbol(m2_C3_public.f11_private, Decl(privacyGloFunc.ts, 227, 9))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+ public f12_public(): m2_C2_private {
+>f12_public : Symbol(m2_C3_public.f12_public, Decl(privacyGloFunc.ts, 231, 9))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+ }
+
+ class m2_C4_private {
+>m2_C4_private : Symbol(m2_C4_private, Decl(privacyGloFunc.ts, 236, 5))
+
+ constructor (m2_c4_c1: m2_C1_public);
+>m2_c4_c1 : Symbol(m2_c4_c1, Decl(privacyGloFunc.ts, 239, 21))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+
+ constructor (m2_c4_c2: m2_C2_private);
+>m2_c4_c2 : Symbol(m2_c4_c2, Decl(privacyGloFunc.ts, 240, 21))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+
+ constructor (m2_c4_c1_2: any) {
+>m2_c4_c1_2 : Symbol(m2_c4_c1_2, Decl(privacyGloFunc.ts, 241, 21))
+ }
+
+ private f1_private(m2_c4_f1_arg: m2_C1_public) {
+>f1_private : Symbol(m2_C4_private.f1_private, Decl(privacyGloFunc.ts, 242, 9))
+>m2_c4_f1_arg : Symbol(m2_c4_f1_arg, Decl(privacyGloFunc.ts, 244, 27))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ public f2_public(m2_c4_f2_arg: m2_C1_public) {
+>f2_public : Symbol(m2_C4_private.f2_public, Decl(privacyGloFunc.ts, 245, 9))
+>m2_c4_f2_arg : Symbol(m2_c4_f2_arg, Decl(privacyGloFunc.ts, 247, 25))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ private f3_private(m2_c4_f3_arg: m2_C2_private) {
+>f3_private : Symbol(m2_C4_private.f3_private, Decl(privacyGloFunc.ts, 248, 9))
+>m2_c4_f3_arg : Symbol(m2_c4_f3_arg, Decl(privacyGloFunc.ts, 250, 27))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+ public f4_public(m2_c4_f4_arg: m2_C2_private) {
+>f4_public : Symbol(m2_C4_private.f4_public, Decl(privacyGloFunc.ts, 251, 9))
+>m2_c4_f4_arg : Symbol(m2_c4_f4_arg, Decl(privacyGloFunc.ts, 253, 25))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+
+ private f5_private() {
+>f5_private : Symbol(m2_C4_private.f5_private, Decl(privacyGloFunc.ts, 254, 9))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ public f6_public() {
+>f6_public : Symbol(m2_C4_private.f6_public, Decl(privacyGloFunc.ts, 259, 9))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ private f7_private() {
+>f7_private : Symbol(m2_C4_private.f7_private, Decl(privacyGloFunc.ts, 263, 9))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+ public f8_public() {
+>f8_public : Symbol(m2_C4_private.f8_public, Decl(privacyGloFunc.ts, 267, 9))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+
+ private f9_private(): m2_C1_public {
+>f9_private : Symbol(m2_C4_private.f9_private, Decl(privacyGloFunc.ts, 271, 9))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ public f10_public(): m2_C1_public {
+>f10_public : Symbol(m2_C4_private.f10_public, Decl(privacyGloFunc.ts, 276, 9))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ private f11_private(): m2_C2_private {
+>f11_private : Symbol(m2_C4_private.f11_private, Decl(privacyGloFunc.ts, 280, 9))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+ public f12_public(): m2_C2_private {
+>f12_public : Symbol(m2_C4_private.f12_public, Decl(privacyGloFunc.ts, 284, 9))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+ }
+
+ export class m2_C5_public {
+>m2_C5_public : Symbol(m2_C5_public, Decl(privacyGloFunc.ts, 289, 5))
+
+ constructor (m2_c5_c: m2_C1_public) {
+>m2_c5_c : Symbol(m2_c5_c, Decl(privacyGloFunc.ts, 292, 21))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+ }
+
+ class m2_C6_private {
+>m2_C6_private : Symbol(m2_C6_private, Decl(privacyGloFunc.ts, 294, 5))
+
+ constructor (m2_c6_c: m2_C1_public) {
+>m2_c6_c : Symbol(m2_c6_c, Decl(privacyGloFunc.ts, 297, 21))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+ }
+ export class m2_C7_public {
+>m2_C7_public : Symbol(m2_C7_public, Decl(privacyGloFunc.ts, 299, 5))
+
+ constructor (m2_c7_c: m2_C2_private) {
+>m2_c7_c : Symbol(m2_c7_c, Decl(privacyGloFunc.ts, 301, 21))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+ }
+
+ class m2_C8_private {
+>m2_C8_private : Symbol(m2_C8_private, Decl(privacyGloFunc.ts, 303, 5))
+
+ constructor (m2_c8_c: m2_C2_private) {
+>m2_c8_c : Symbol(m2_c8_c, Decl(privacyGloFunc.ts, 306, 21))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+ }
+
+ function f1_public(m2_f1_arg: m2_C1_public) {
+>f1_public : Symbol(f1_public, Decl(privacyGloFunc.ts, 308, 5))
+>m2_f1_arg : Symbol(m2_f1_arg, Decl(privacyGloFunc.ts, 310, 23))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ export function f2_public(m2_f2_arg: m2_C1_public) {
+>f2_public : Symbol(f2_public, Decl(privacyGloFunc.ts, 311, 5))
+>m2_f2_arg : Symbol(m2_f2_arg, Decl(privacyGloFunc.ts, 313, 30))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ function f3_public(m2_f3_arg: m2_C2_private) {
+>f3_public : Symbol(f3_public, Decl(privacyGloFunc.ts, 314, 5))
+>m2_f3_arg : Symbol(m2_f3_arg, Decl(privacyGloFunc.ts, 316, 23))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+ export function f4_public(m2_f4_arg: m2_C2_private) {
+>f4_public : Symbol(f4_public, Decl(privacyGloFunc.ts, 317, 5))
+>m2_f4_arg : Symbol(m2_f4_arg, Decl(privacyGloFunc.ts, 319, 30))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+
+ function f5_public() {
+>f5_public : Symbol(f5_public, Decl(privacyGloFunc.ts, 320, 5))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ export function f6_public() {
+>f6_public : Symbol(f6_public, Decl(privacyGloFunc.ts, 325, 5))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ function f7_public() {
+>f7_public : Symbol(f7_public, Decl(privacyGloFunc.ts, 329, 5))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+ export function f8_public() {
+>f8_public : Symbol(f8_public, Decl(privacyGloFunc.ts, 333, 5))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+
+ function f9_private(): m2_C1_public {
+>f9_private : Symbol(f9_private, Decl(privacyGloFunc.ts, 337, 5))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ export function f10_public(): m2_C1_public {
+>f10_public : Symbol(f10_public, Decl(privacyGloFunc.ts, 342, 5))
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+
+ return new m2_C1_public();
+>m2_C1_public : Symbol(m2_C1_public, Decl(privacyGloFunc.ts, 178, 14))
+ }
+
+ function f11_private(): m2_C2_private {
+>f11_private : Symbol(f11_private, Decl(privacyGloFunc.ts, 346, 5))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+
+ export function f12_public(): m2_C2_private {
+>f12_public : Symbol(f12_public, Decl(privacyGloFunc.ts, 350, 5))
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+
+ return new m2_C2_private();
+>m2_C2_private : Symbol(m2_C2_private, Decl(privacyGloFunc.ts, 182, 5))
+ }
+}
+
+class C5_private {
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+
+ private f() {
+>f : Symbol(C5_private.f, Decl(privacyGloFunc.ts, 357, 18))
+ }
+}
+
+export class C6_public {
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+}
+
+export class C7_public {
+>C7_public : Symbol(C7_public, Decl(privacyGloFunc.ts, 363, 1))
+
+ constructor (c7_c1: C5_private); // error
+>c7_c1 : Symbol(c7_c1, Decl(privacyGloFunc.ts, 366, 17))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+
+ constructor (c7_c2: C6_public);
+>c7_c2 : Symbol(c7_c2, Decl(privacyGloFunc.ts, 367, 17))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+
+ constructor (c7_c1_2: any) {
+>c7_c1_2 : Symbol(c7_c1_2, Decl(privacyGloFunc.ts, 368, 17))
+ }
+ private f1_private(c7_f1_arg: C6_public) {
+>f1_private : Symbol(C7_public.f1_private, Decl(privacyGloFunc.ts, 369, 5))
+>c7_f1_arg : Symbol(c7_f1_arg, Decl(privacyGloFunc.ts, 370, 23))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+
+ public f2_public(c7_f2_arg: C6_public) {
+>f2_public : Symbol(C7_public.f2_public, Decl(privacyGloFunc.ts, 371, 5))
+>c7_f2_arg : Symbol(c7_f2_arg, Decl(privacyGloFunc.ts, 373, 21))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+
+ private f3_private(c7_f3_arg: C5_private) {
+>f3_private : Symbol(C7_public.f3_private, Decl(privacyGloFunc.ts, 374, 5))
+>c7_f3_arg : Symbol(c7_f3_arg, Decl(privacyGloFunc.ts, 376, 23))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+
+ public f4_public(c7_f4_arg: C5_private) { //error
+>f4_public : Symbol(C7_public.f4_public, Decl(privacyGloFunc.ts, 377, 5))
+>c7_f4_arg : Symbol(c7_f4_arg, Decl(privacyGloFunc.ts, 379, 21))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+
+ private f5_private() {
+>f5_private : Symbol(C7_public.f5_private, Decl(privacyGloFunc.ts, 380, 5))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+
+ public f6_public() {
+>f6_public : Symbol(C7_public.f6_public, Decl(privacyGloFunc.ts, 384, 5))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+
+ private f7_private() {
+>f7_private : Symbol(C7_public.f7_private, Decl(privacyGloFunc.ts, 388, 5))
+
+ return new C5_private();
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+
+ public f8_public() {
+>f8_public : Symbol(C7_public.f8_public, Decl(privacyGloFunc.ts, 392, 5))
+
+ return new C5_private(); //error
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+
+ private f9_private(): C6_public {
+>f9_private : Symbol(C7_public.f9_private, Decl(privacyGloFunc.ts, 396, 5))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+
+ public f10_public(): C6_public {
+>f10_public : Symbol(C7_public.f10_public, Decl(privacyGloFunc.ts, 400, 5))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+
+ private f11_private(): C5_private {
+>f11_private : Symbol(C7_public.f11_private, Decl(privacyGloFunc.ts, 404, 5))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+
+ return new C5_private();
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+
+ public f12_public(): C5_private { //error
+>f12_public : Symbol(C7_public.f12_public, Decl(privacyGloFunc.ts, 408, 5))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+
+ return new C5_private(); //error
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+}
+
+class C8_private {
+>C8_private : Symbol(C8_private, Decl(privacyGloFunc.ts, 413, 1))
+
+ constructor (c8_c1: C5_private);
+>c8_c1 : Symbol(c8_c1, Decl(privacyGloFunc.ts, 416, 17))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+
+ constructor (c8_c2: C6_public);
+>c8_c2 : Symbol(c8_c2, Decl(privacyGloFunc.ts, 417, 17))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+
+ constructor (c8_c1_2: any) {
+>c8_c1_2 : Symbol(c8_c1_2, Decl(privacyGloFunc.ts, 418, 17))
+ }
+
+ private f1_private(c8_f1_arg: C6_public) {
+>f1_private : Symbol(C8_private.f1_private, Decl(privacyGloFunc.ts, 419, 5))
+>c8_f1_arg : Symbol(c8_f1_arg, Decl(privacyGloFunc.ts, 421, 23))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+
+ public f2_public(c8_f2_arg: C6_public) {
+>f2_public : Symbol(C8_private.f2_public, Decl(privacyGloFunc.ts, 422, 5))
+>c8_f2_arg : Symbol(c8_f2_arg, Decl(privacyGloFunc.ts, 424, 21))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+
+ private f3_private(c8_f3_arg: C5_private) {
+>f3_private : Symbol(C8_private.f3_private, Decl(privacyGloFunc.ts, 425, 5))
+>c8_f3_arg : Symbol(c8_f3_arg, Decl(privacyGloFunc.ts, 427, 23))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+
+ public f4_public(c8_f4_arg: C5_private) {
+>f4_public : Symbol(C8_private.f4_public, Decl(privacyGloFunc.ts, 428, 5))
+>c8_f4_arg : Symbol(c8_f4_arg, Decl(privacyGloFunc.ts, 430, 21))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+
+ private f5_private() {
+>f5_private : Symbol(C8_private.f5_private, Decl(privacyGloFunc.ts, 431, 5))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+
+ public f6_public() {
+>f6_public : Symbol(C8_private.f6_public, Decl(privacyGloFunc.ts, 435, 5))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+
+ private f7_private() {
+>f7_private : Symbol(C8_private.f7_private, Decl(privacyGloFunc.ts, 439, 5))
+
+ return new C5_private();
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+
+ public f8_public() {
+>f8_public : Symbol(C8_private.f8_public, Decl(privacyGloFunc.ts, 443, 5))
+
+ return new C5_private();
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+
+ private f9_private(): C6_public {
+>f9_private : Symbol(C8_private.f9_private, Decl(privacyGloFunc.ts, 447, 5))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+
+ public f10_public(): C6_public {
+>f10_public : Symbol(C8_private.f10_public, Decl(privacyGloFunc.ts, 451, 5))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+
+ private f11_private(): C5_private {
+>f11_private : Symbol(C8_private.f11_private, Decl(privacyGloFunc.ts, 455, 5))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+
+ return new C5_private();
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+
+ public f12_public(): C5_private {
+>f12_public : Symbol(C8_private.f12_public, Decl(privacyGloFunc.ts, 459, 5))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+
+ return new C5_private();
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+}
+
+
+export class C9_public {
+>C9_public : Symbol(C9_public, Decl(privacyGloFunc.ts, 464, 1))
+
+ constructor (c9_c: C6_public) {
+>c9_c : Symbol(c9_c, Decl(privacyGloFunc.ts, 468, 17))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+}
+
+class C10_private {
+>C10_private : Symbol(C10_private, Decl(privacyGloFunc.ts, 470, 1))
+
+ constructor (c10_c: C6_public) {
+>c10_c : Symbol(c10_c, Decl(privacyGloFunc.ts, 473, 17))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+ }
+}
+export class C11_public {
+>C11_public : Symbol(C11_public, Decl(privacyGloFunc.ts, 475, 1))
+
+ constructor (c11_c: C5_private) { // error
+>c11_c : Symbol(c11_c, Decl(privacyGloFunc.ts, 477, 17))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+}
+
+class C12_private {
+>C12_private : Symbol(C12_private, Decl(privacyGloFunc.ts, 479, 1))
+
+ constructor (c12_c: C5_private) {
+>c12_c : Symbol(c12_c, Decl(privacyGloFunc.ts, 482, 17))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+ }
+}
+
+function f1_private(f1_arg: C5_private) {
+>f1_private : Symbol(f1_private, Decl(privacyGloFunc.ts, 484, 1))
+>f1_arg : Symbol(f1_arg, Decl(privacyGloFunc.ts, 486, 20))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+}
+
+export function f2_public(f2_arg: C5_private) { // error
+>f2_public : Symbol(f2_public, Decl(privacyGloFunc.ts, 487, 1))
+>f2_arg : Symbol(f2_arg, Decl(privacyGloFunc.ts, 489, 26))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+}
+
+function f3_private(f3_arg: C6_public) {
+>f3_private : Symbol(f3_private, Decl(privacyGloFunc.ts, 490, 1))
+>f3_arg : Symbol(f3_arg, Decl(privacyGloFunc.ts, 492, 20))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+}
+
+export function f4_public(f4_arg: C6_public) {
+>f4_public : Symbol(f4_public, Decl(privacyGloFunc.ts, 493, 1))
+>f4_arg : Symbol(f4_arg, Decl(privacyGloFunc.ts, 495, 26))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+}
+
+function f5_private() {
+>f5_private : Symbol(f5_private, Decl(privacyGloFunc.ts, 496, 1))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+}
+
+export function f6_public() {
+>f6_public : Symbol(f6_public, Decl(privacyGloFunc.ts, 500, 1))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+}
+
+function f7_private() {
+>f7_private : Symbol(f7_private, Decl(privacyGloFunc.ts, 504, 1))
+
+ return new C5_private();
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+}
+
+export function f8_public() {
+>f8_public : Symbol(f8_public, Decl(privacyGloFunc.ts, 508, 1))
+
+ return new C5_private(); //error
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+}
+
+function f9_private(): C6_public {
+>f9_private : Symbol(f9_private, Decl(privacyGloFunc.ts, 512, 1))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+}
+
+export function f10_public(): C6_public {
+>f10_public : Symbol(f10_public, Decl(privacyGloFunc.ts, 516, 1))
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+
+ return new C6_public();
+>C6_public : Symbol(C6_public, Decl(privacyGloFunc.ts, 360, 1))
+}
+
+function f11_private(): C5_private {
+>f11_private : Symbol(f11_private, Decl(privacyGloFunc.ts, 520, 1))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+
+ return new C5_private();
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+}
+
+export function f12_public(): C5_private { //error
+>f12_public : Symbol(f12_public, Decl(privacyGloFunc.ts, 524, 1))
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+
+ return new C5_private(); //error
+>C5_private : Symbol(C5_private, Decl(privacyGloFunc.ts, 355, 1))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/privacyGloFunc.types b/tsc/testdata/baselines/reference/compiler/privacyGloFunc.types
new file mode 100644
index 0000000000000..6c7142c6953ca
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyGloFunc.types
@@ -0,0 +1,987 @@
+//// [tests/cases/compiler/privacyGloFunc.ts] ////
+
+=== privacyGloFunc.ts ===
+export namespace m1 {
+>m1 : typeof m1
+
+ export class C1_public {
+>C1_public : C1_public
+
+ private f1() {
+>f1 : () => void
+ }
+ }
+
+ class C2_private {
+>C2_private : C2_private
+ }
+
+ export class C3_public {
+>C3_public : C3_public
+
+ constructor (m1_c3_c1: C1_public);
+>m1_c3_c1 : C1_public
+
+ constructor (m1_c3_c2: C2_private); //error
+>m1_c3_c2 : C2_private
+
+ constructor (m1_c3_c1_2: any) {
+>m1_c3_c1_2 : any
+ }
+
+ private f1_private(m1_c3_f1_arg: C1_public) {
+>f1_private : (m1_c3_f1_arg: C1_public) => void
+>m1_c3_f1_arg : C1_public
+ }
+
+ public f2_public(m1_c3_f2_arg: C1_public) {
+>f2_public : (m1_c3_f2_arg: C1_public) => void
+>m1_c3_f2_arg : C1_public
+ }
+
+ private f3_private(m1_c3_f3_arg: C2_private) {
+>f3_private : (m1_c3_f3_arg: C2_private) => void
+>m1_c3_f3_arg : C2_private
+ }
+
+ public f4_public(m1_c3_f4_arg: C2_private) { // error
+>f4_public : (m1_c3_f4_arg: C2_private) => void
+>m1_c3_f4_arg : C2_private
+ }
+
+ private f5_private() {
+>f5_private : () => C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ public f6_public() {
+>f6_public : () => C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ private f7_private() {
+>f7_private : () => C2_private
+
+ return new C2_private();
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+ public f8_public() {
+>f8_public : () => C2_private
+
+ return new C2_private(); // error
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+ private f9_private(): C1_public {
+>f9_private : () => C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ public f10_public(): C1_public {
+>f10_public : () => C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ private f11_private(): C2_private {
+>f11_private : () => C2_private
+
+ return new C2_private();
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+ public f12_public(): C2_private { // error
+>f12_public : () => C2_private
+
+ return new C2_private(); //error
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+ }
+
+ class C4_private {
+>C4_private : C4_private
+
+ constructor (m1_c4_c1: C1_public);
+>m1_c4_c1 : C1_public
+
+ constructor (m1_c4_c2: C2_private);
+>m1_c4_c2 : C2_private
+
+ constructor (m1_c4_c1_2: any) {
+>m1_c4_c1_2 : any
+ }
+ private f1_private(m1_c4_f1_arg: C1_public) {
+>f1_private : (m1_c4_f1_arg: C1_public) => void
+>m1_c4_f1_arg : C1_public
+ }
+
+ public f2_public(m1_c4_f2_arg: C1_public) {
+>f2_public : (m1_c4_f2_arg: C1_public) => void
+>m1_c4_f2_arg : C1_public
+ }
+
+ private f3_private(m1_c4_f3_arg: C2_private) {
+>f3_private : (m1_c4_f3_arg: C2_private) => void
+>m1_c4_f3_arg : C2_private
+ }
+
+ public f4_public(m1_c4_f4_arg: C2_private) {
+>f4_public : (m1_c4_f4_arg: C2_private) => void
+>m1_c4_f4_arg : C2_private
+ }
+
+
+ private f5_private() {
+>f5_private : () => C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ public f6_public() {
+>f6_public : () => C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ private f7_private() {
+>f7_private : () => C2_private
+
+ return new C2_private();
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+ public f8_public() {
+>f8_public : () => C2_private
+
+ return new C2_private();
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+
+ private f9_private(): C1_public {
+>f9_private : () => C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ public f10_public(): C1_public {
+>f10_public : () => C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ private f11_private(): C2_private {
+>f11_private : () => C2_private
+
+ return new C2_private();
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+ public f12_public(): C2_private {
+>f12_public : () => C2_private
+
+ return new C2_private();
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+ }
+
+ export class C5_public {
+>C5_public : C5_public
+
+ constructor (m1_c5_c: C1_public) {
+>m1_c5_c : C1_public
+ }
+ }
+
+ class C6_private {
+>C6_private : C6_private
+
+ constructor (m1_c6_c: C1_public) {
+>m1_c6_c : C1_public
+ }
+ }
+ export class C7_public {
+>C7_public : C7_public
+
+ constructor (m1_c7_c: C2_private) { // error
+>m1_c7_c : C2_private
+ }
+ }
+
+ class C8_private {
+>C8_private : C8_private
+
+ constructor (m1_c8_c: C2_private) {
+>m1_c8_c : C2_private
+ }
+ }
+
+ function f1_public(m1_f1_arg: C1_public) {
+>f1_public : (m1_f1_arg: C1_public) => void
+>m1_f1_arg : C1_public
+ }
+
+ export function f2_public(m1_f2_arg: C1_public) {
+>f2_public : (m1_f2_arg: C1_public) => void
+>m1_f2_arg : C1_public
+ }
+
+ function f3_public(m1_f3_arg: C2_private) {
+>f3_public : (m1_f3_arg: C2_private) => void
+>m1_f3_arg : C2_private
+ }
+
+ export function f4_public(m1_f4_arg: C2_private) { // error
+>f4_public : (m1_f4_arg: C2_private) => void
+>m1_f4_arg : C2_private
+ }
+
+
+ function f5_public() {
+>f5_public : () => C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ export function f6_public() {
+>f6_public : () => C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ function f7_public() {
+>f7_public : () => C2_private
+
+ return new C2_private();
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+ export function f8_public() {
+>f8_public : () => C2_private
+
+ return new C2_private(); // error
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+
+ function f9_private(): C1_public {
+>f9_private : () => C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ export function f10_public(): C1_public {
+>f10_public : () => C1_public
+
+ return new C1_public();
+>new C1_public() : C1_public
+>C1_public : typeof C1_public
+ }
+
+ function f11_private(): C2_private {
+>f11_private : () => C2_private
+
+ return new C2_private();
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+
+ export function f12_public(): C2_private { // error
+>f12_public : () => C2_private
+
+ return new C2_private(); //error
+>new C2_private() : C2_private
+>C2_private : typeof C2_private
+ }
+}
+
+namespace m2 {
+>m2 : typeof m2
+
+ export class m2_C1_public {
+>m2_C1_public : m2_C1_public
+
+ private f() {
+>f : () => void
+ }
+ }
+
+ class m2_C2_private {
+>m2_C2_private : m2_C2_private
+ }
+
+ export class m2_C3_public {
+>m2_C3_public : m2_C3_public
+
+ constructor (m2_c3_c1: m2_C1_public);
+>m2_c3_c1 : m2_C1_public
+
+ constructor (m2_c3_c2: m2_C2_private);
+>m2_c3_c2 : m2_C2_private
+
+ constructor (m2_c3_c1_2: any) {
+>m2_c3_c1_2 : any
+ }
+
+ private f1_private(m2_c3_f1_arg: m2_C1_public) {
+>f1_private : (m2_c3_f1_arg: m2_C1_public) => void
+>m2_c3_f1_arg : m2_C1_public
+ }
+
+ public f2_public(m2_c3_f2_arg: m2_C1_public) {
+>f2_public : (m2_c3_f2_arg: m2_C1_public) => void
+>m2_c3_f2_arg : m2_C1_public
+ }
+
+ private f3_private(m2_c3_f3_arg: m2_C2_private) {
+>f3_private : (m2_c3_f3_arg: m2_C2_private) => void
+>m2_c3_f3_arg : m2_C2_private
+ }
+
+ public f4_public(m2_c3_f4_arg: m2_C2_private) {
+>f4_public : (m2_c3_f4_arg: m2_C2_private) => void
+>m2_c3_f4_arg : m2_C2_private
+ }
+
+ private f5_private() {
+>f5_private : () => m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ public f6_public() {
+>f6_public : () => m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ private f7_private() {
+>f7_private : () => m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+ public f8_public() {
+>f8_public : () => m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+ private f9_private(): m2_C1_public {
+>f9_private : () => m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ public f10_public(): m2_C1_public {
+>f10_public : () => m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ private f11_private(): m2_C2_private {
+>f11_private : () => m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+ public f12_public(): m2_C2_private {
+>f12_public : () => m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+ }
+
+ class m2_C4_private {
+>m2_C4_private : m2_C4_private
+
+ constructor (m2_c4_c1: m2_C1_public);
+>m2_c4_c1 : m2_C1_public
+
+ constructor (m2_c4_c2: m2_C2_private);
+>m2_c4_c2 : m2_C2_private
+
+ constructor (m2_c4_c1_2: any) {
+>m2_c4_c1_2 : any
+ }
+
+ private f1_private(m2_c4_f1_arg: m2_C1_public) {
+>f1_private : (m2_c4_f1_arg: m2_C1_public) => void
+>m2_c4_f1_arg : m2_C1_public
+ }
+
+ public f2_public(m2_c4_f2_arg: m2_C1_public) {
+>f2_public : (m2_c4_f2_arg: m2_C1_public) => void
+>m2_c4_f2_arg : m2_C1_public
+ }
+
+ private f3_private(m2_c4_f3_arg: m2_C2_private) {
+>f3_private : (m2_c4_f3_arg: m2_C2_private) => void
+>m2_c4_f3_arg : m2_C2_private
+ }
+
+ public f4_public(m2_c4_f4_arg: m2_C2_private) {
+>f4_public : (m2_c4_f4_arg: m2_C2_private) => void
+>m2_c4_f4_arg : m2_C2_private
+ }
+
+
+ private f5_private() {
+>f5_private : () => m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ public f6_public() {
+>f6_public : () => m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ private f7_private() {
+>f7_private : () => m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+ public f8_public() {
+>f8_public : () => m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+
+ private f9_private(): m2_C1_public {
+>f9_private : () => m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ public f10_public(): m2_C1_public {
+>f10_public : () => m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ private f11_private(): m2_C2_private {
+>f11_private : () => m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+ public f12_public(): m2_C2_private {
+>f12_public : () => m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+ }
+
+ export class m2_C5_public {
+>m2_C5_public : m2_C5_public
+
+ constructor (m2_c5_c: m2_C1_public) {
+>m2_c5_c : m2_C1_public
+ }
+ }
+
+ class m2_C6_private {
+>m2_C6_private : m2_C6_private
+
+ constructor (m2_c6_c: m2_C1_public) {
+>m2_c6_c : m2_C1_public
+ }
+ }
+ export class m2_C7_public {
+>m2_C7_public : m2_C7_public
+
+ constructor (m2_c7_c: m2_C2_private) {
+>m2_c7_c : m2_C2_private
+ }
+ }
+
+ class m2_C8_private {
+>m2_C8_private : m2_C8_private
+
+ constructor (m2_c8_c: m2_C2_private) {
+>m2_c8_c : m2_C2_private
+ }
+ }
+
+ function f1_public(m2_f1_arg: m2_C1_public) {
+>f1_public : (m2_f1_arg: m2_C1_public) => void
+>m2_f1_arg : m2_C1_public
+ }
+
+ export function f2_public(m2_f2_arg: m2_C1_public) {
+>f2_public : (m2_f2_arg: m2_C1_public) => void
+>m2_f2_arg : m2_C1_public
+ }
+
+ function f3_public(m2_f3_arg: m2_C2_private) {
+>f3_public : (m2_f3_arg: m2_C2_private) => void
+>m2_f3_arg : m2_C2_private
+ }
+
+ export function f4_public(m2_f4_arg: m2_C2_private) {
+>f4_public : (m2_f4_arg: m2_C2_private) => void
+>m2_f4_arg : m2_C2_private
+ }
+
+
+ function f5_public() {
+>f5_public : () => m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ export function f6_public() {
+>f6_public : () => m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ function f7_public() {
+>f7_public : () => m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+ export function f8_public() {
+>f8_public : () => m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+
+ function f9_private(): m2_C1_public {
+>f9_private : () => m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ export function f10_public(): m2_C1_public {
+>f10_public : () => m2_C1_public
+
+ return new m2_C1_public();
+>new m2_C1_public() : m2_C1_public
+>m2_C1_public : typeof m2_C1_public
+ }
+
+ function f11_private(): m2_C2_private {
+>f11_private : () => m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+
+ export function f12_public(): m2_C2_private {
+>f12_public : () => m2_C2_private
+
+ return new m2_C2_private();
+>new m2_C2_private() : m2_C2_private
+>m2_C2_private : typeof m2_C2_private
+ }
+}
+
+class C5_private {
+>C5_private : C5_private
+
+ private f() {
+>f : () => void
+ }
+}
+
+export class C6_public {
+>C6_public : C6_public
+}
+
+export class C7_public {
+>C7_public : C7_public
+
+ constructor (c7_c1: C5_private); // error
+>c7_c1 : C5_private
+
+ constructor (c7_c2: C6_public);
+>c7_c2 : C6_public
+
+ constructor (c7_c1_2: any) {
+>c7_c1_2 : any
+ }
+ private f1_private(c7_f1_arg: C6_public) {
+>f1_private : (c7_f1_arg: C6_public) => void
+>c7_f1_arg : C6_public
+ }
+
+ public f2_public(c7_f2_arg: C6_public) {
+>f2_public : (c7_f2_arg: C6_public) => void
+>c7_f2_arg : C6_public
+ }
+
+ private f3_private(c7_f3_arg: C5_private) {
+>f3_private : (c7_f3_arg: C5_private) => void
+>c7_f3_arg : C5_private
+ }
+
+ public f4_public(c7_f4_arg: C5_private) { //error
+>f4_public : (c7_f4_arg: C5_private) => void
+>c7_f4_arg : C5_private
+ }
+
+ private f5_private() {
+>f5_private : () => C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+ }
+
+ public f6_public() {
+>f6_public : () => C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+ }
+
+ private f7_private() {
+>f7_private : () => C5_private
+
+ return new C5_private();
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+ }
+
+ public f8_public() {
+>f8_public : () => C5_private
+
+ return new C5_private(); //error
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+ }
+
+ private f9_private(): C6_public {
+>f9_private : () => C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+ }
+
+ public f10_public(): C6_public {
+>f10_public : () => C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+ }
+
+ private f11_private(): C5_private {
+>f11_private : () => C5_private
+
+ return new C5_private();
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+ }
+
+ public f12_public(): C5_private { //error
+>f12_public : () => C5_private
+
+ return new C5_private(); //error
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+ }
+}
+
+class C8_private {
+>C8_private : C8_private
+
+ constructor (c8_c1: C5_private);
+>c8_c1 : C5_private
+
+ constructor (c8_c2: C6_public);
+>c8_c2 : C6_public
+
+ constructor (c8_c1_2: any) {
+>c8_c1_2 : any
+ }
+
+ private f1_private(c8_f1_arg: C6_public) {
+>f1_private : (c8_f1_arg: C6_public) => void
+>c8_f1_arg : C6_public
+ }
+
+ public f2_public(c8_f2_arg: C6_public) {
+>f2_public : (c8_f2_arg: C6_public) => void
+>c8_f2_arg : C6_public
+ }
+
+ private f3_private(c8_f3_arg: C5_private) {
+>f3_private : (c8_f3_arg: C5_private) => void
+>c8_f3_arg : C5_private
+ }
+
+ public f4_public(c8_f4_arg: C5_private) {
+>f4_public : (c8_f4_arg: C5_private) => void
+>c8_f4_arg : C5_private
+ }
+
+ private f5_private() {
+>f5_private : () => C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+ }
+
+ public f6_public() {
+>f6_public : () => C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+ }
+
+ private f7_private() {
+>f7_private : () => C5_private
+
+ return new C5_private();
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+ }
+
+ public f8_public() {
+>f8_public : () => C5_private
+
+ return new C5_private();
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+ }
+
+ private f9_private(): C6_public {
+>f9_private : () => C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+ }
+
+ public f10_public(): C6_public {
+>f10_public : () => C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+ }
+
+ private f11_private(): C5_private {
+>f11_private : () => C5_private
+
+ return new C5_private();
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+ }
+
+ public f12_public(): C5_private {
+>f12_public : () => C5_private
+
+ return new C5_private();
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+ }
+}
+
+
+export class C9_public {
+>C9_public : C9_public
+
+ constructor (c9_c: C6_public) {
+>c9_c : C6_public
+ }
+}
+
+class C10_private {
+>C10_private : C10_private
+
+ constructor (c10_c: C6_public) {
+>c10_c : C6_public
+ }
+}
+export class C11_public {
+>C11_public : C11_public
+
+ constructor (c11_c: C5_private) { // error
+>c11_c : C5_private
+ }
+}
+
+class C12_private {
+>C12_private : C12_private
+
+ constructor (c12_c: C5_private) {
+>c12_c : C5_private
+ }
+}
+
+function f1_private(f1_arg: C5_private) {
+>f1_private : (f1_arg: C5_private) => void
+>f1_arg : C5_private
+}
+
+export function f2_public(f2_arg: C5_private) { // error
+>f2_public : (f2_arg: C5_private) => void
+>f2_arg : C5_private
+}
+
+function f3_private(f3_arg: C6_public) {
+>f3_private : (f3_arg: C6_public) => void
+>f3_arg : C6_public
+}
+
+export function f4_public(f4_arg: C6_public) {
+>f4_public : (f4_arg: C6_public) => void
+>f4_arg : C6_public
+}
+
+function f5_private() {
+>f5_private : () => C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+}
+
+export function f6_public() {
+>f6_public : () => C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+}
+
+function f7_private() {
+>f7_private : () => C5_private
+
+ return new C5_private();
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+}
+
+export function f8_public() {
+>f8_public : () => C5_private
+
+ return new C5_private(); //error
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+}
+
+function f9_private(): C6_public {
+>f9_private : () => C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+}
+
+export function f10_public(): C6_public {
+>f10_public : () => C6_public
+
+ return new C6_public();
+>new C6_public() : C6_public
+>C6_public : typeof C6_public
+}
+
+function f11_private(): C5_private {
+>f11_private : () => C5_private
+
+ return new C5_private();
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+}
+
+export function f12_public(): C5_private { //error
+>f12_public : () => C5_private
+
+ return new C5_private(); //error
+>new C5_private() : C5_private
+>C5_private : typeof C5_private
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/privacyLocalInternalReferenceImportWithoutExport.js b/tsc/testdata/baselines/reference/compiler/privacyLocalInternalReferenceImportWithoutExport.js
new file mode 100644
index 0000000000000..8befacfee689e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyLocalInternalReferenceImportWithoutExport.js
@@ -0,0 +1,358 @@
+//// [tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts] ////
+
+//// [privacyLocalInternalReferenceImportWithoutExport.ts]
+// private elements
+namespace m_private {
+ export class c_private {
+ }
+ export enum e_private {
+ Happy,
+ Grumpy
+ }
+ export function f_private() {
+ return new c_private();
+ }
+ export var v_private = new c_private();
+ export interface i_private {
+ }
+ export namespace mi_private {
+ export class c {
+ }
+ }
+ export namespace mu_private {
+ export interface i {
+ }
+ }
+}
+
+// Public elements
+export namespace m_public {
+ export class c_public {
+ }
+ export enum e_public {
+ Happy,
+ Grumpy
+ }
+ export function f_public() {
+ return new c_public();
+ }
+ export var v_public = 10;
+ export interface i_public {
+ }
+ export namespace mi_public {
+ export class c {
+ }
+ }
+ export namespace mu_public {
+ export interface i {
+ }
+ }
+}
+
+export namespace import_public {
+ // No Privacy errors - importing private elements
+ import im_private_c_private = m_private.c_private;
+ import im_private_e_private = m_private.e_private;
+ import im_private_f_private = m_private.f_private;
+ import im_private_v_private = m_private.v_private;
+ import im_private_i_private = m_private.i_private;
+ import im_private_mi_private = m_private.mi_private;
+ import im_private_mu_private = m_private.mu_private;
+
+ // Usage of above decls
+ var privateUse_im_private_c_private = new im_private_c_private();
+ export var publicUse_im_private_c_private = new im_private_c_private();
+ var privateUse_im_private_e_private = im_private_e_private.Happy;
+ export var publicUse_im_private_e_private = im_private_e_private.Grumpy;
+ var privateUse_im_private_f_private = im_private_f_private();
+ export var publicUse_im_private_f_private = im_private_f_private();
+ var privateUse_im_private_v_private = im_private_v_private;
+ export var publicUse_im_private_v_private = im_private_v_private;
+ var privateUse_im_private_i_private: im_private_i_private;
+ export var publicUse_im_private_i_private: im_private_i_private;
+ var privateUse_im_private_mi_private = new im_private_mi_private.c();
+ export var publicUse_im_private_mi_private = new im_private_mi_private.c();
+ var privateUse_im_private_mu_private: im_private_mu_private.i;
+ export var publicUse_im_private_mu_private: im_private_mu_private.i;
+
+
+ // No Privacy errors - importing public elements
+ import im_private_c_public = m_public.c_public;
+ import im_private_e_public = m_public.e_public;
+ import im_private_f_public = m_public.f_public;
+ import im_private_v_public = m_public.v_public;
+ import im_private_i_public = m_public.i_public;
+ import im_private_mi_public = m_public.mi_public;
+ import im_private_mu_public = m_public.mu_public;
+
+ // Usage of above decls
+ var privateUse_im_private_c_public = new im_private_c_public();
+ export var publicUse_im_private_c_public = new im_private_c_public();
+ var privateUse_im_private_e_public = im_private_e_public.Happy;
+ export var publicUse_im_private_e_public = im_private_e_public.Grumpy;
+ var privateUse_im_private_f_public = im_private_f_public();
+ export var publicUse_im_private_f_public = im_private_f_public();
+ var privateUse_im_private_v_public = im_private_v_public;
+ export var publicUse_im_private_v_public = im_private_v_public;
+ var privateUse_im_private_i_public: im_private_i_public;
+ export var publicUse_im_private_i_public: im_private_i_public;
+ var privateUse_im_private_mi_public = new im_private_mi_public.c();
+ export var publicUse_im_private_mi_public = new im_private_mi_public.c();
+ var privateUse_im_private_mu_public: im_private_mu_public.i;
+ export var publicUse_im_private_mu_public: im_private_mu_public.i;
+}
+
+namespace import_private {
+ // No Privacy errors - importing private elements
+ import im_private_c_private = m_private.c_private;
+ import im_private_e_private = m_private.e_private;
+ import im_private_f_private = m_private.f_private;
+ import im_private_v_private = m_private.v_private;
+ import im_private_i_private = m_private.i_private;
+ import im_private_mi_private = m_private.mi_private;
+ import im_private_mu_private = m_private.mu_private;
+
+ // Usage of above decls
+ var privateUse_im_private_c_private = new im_private_c_private();
+ export var publicUse_im_private_c_private = new im_private_c_private();
+ var privateUse_im_private_e_private = im_private_e_private.Happy;
+ export var publicUse_im_private_e_private = im_private_e_private.Grumpy;
+ var privateUse_im_private_f_private = im_private_f_private();
+ export var publicUse_im_private_f_private = im_private_f_private();
+ var privateUse_im_private_v_private = im_private_v_private;
+ export var publicUse_im_private_v_private = im_private_v_private;
+ var privateUse_im_private_i_private: im_private_i_private;
+ export var publicUse_im_private_i_private: im_private_i_private;
+ var privateUse_im_private_mi_private = new im_private_mi_private.c();
+ export var publicUse_im_private_mi_private = new im_private_mi_private.c();
+ var privateUse_im_private_mu_private: im_private_mu_private.i;
+ export var publicUse_im_private_mu_private: im_private_mu_private.i;
+
+ // No privacy Error - importing public elements
+ import im_private_c_public = m_public.c_public;
+ import im_private_e_public = m_public.e_public;
+ import im_private_f_public = m_public.f_public;
+ import im_private_v_public = m_public.v_public;
+ import im_private_i_public = m_public.i_public;
+ import im_private_mi_public = m_public.mi_public;
+ import im_private_mu_public = m_public.mu_public;
+
+ // Usage of above decls
+ var privateUse_im_private_c_public = new im_private_c_public();
+ export var publicUse_im_private_c_public = new im_private_c_public();
+ var privateUse_im_private_e_public = im_private_e_public.Happy;
+ export var publicUse_im_private_e_public = im_private_e_public.Grumpy;
+ var privateUse_im_private_f_public = im_private_f_public();
+ export var publicUse_im_private_f_public = im_private_f_public();
+ var privateUse_im_private_v_public = im_private_v_public;
+ export var publicUse_im_private_v_public = im_private_v_public;
+ var privateUse_im_private_i_public: im_private_i_public;
+ export var publicUse_im_private_i_public: im_private_i_public;
+ var privateUse_im_private_mi_public = new im_private_mi_public.c();
+ export var publicUse_im_private_mi_public = new im_private_mi_public.c();
+ var privateUse_im_private_mu_public: im_private_mu_public.i;
+ export var publicUse_im_private_mu_public: im_private_mu_public.i;
+}
+
+//// [privacyLocalInternalReferenceImportWithoutExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.import_public = exports.m_public = void 0;
+// private elements
+var m_private;
+(function (m_private) {
+ class c_private {
+ }
+ m_private.c_private = c_private;
+ let e_private;
+ (function (e_private) {
+ e_private[e_private["Happy"] = 0] = "Happy";
+ e_private[e_private["Grumpy"] = 1] = "Grumpy";
+ })(e_private = m_private.e_private || (m_private.e_private = {}));
+ function f_private() {
+ return new c_private();
+ }
+ m_private.f_private = f_private;
+ m_private.v_private = new c_private();
+ let mi_private;
+ (function (mi_private) {
+ class c {
+ }
+ mi_private.c = c;
+ })(mi_private = m_private.mi_private || (m_private.mi_private = {}));
+})(m_private || (m_private = {}));
+// Public elements
+var m_public;
+(function (m_public) {
+ class c_public {
+ }
+ m_public.c_public = c_public;
+ let e_public;
+ (function (e_public) {
+ e_public[e_public["Happy"] = 0] = "Happy";
+ e_public[e_public["Grumpy"] = 1] = "Grumpy";
+ })(e_public = m_public.e_public || (m_public.e_public = {}));
+ function f_public() {
+ return new c_public();
+ }
+ m_public.f_public = f_public;
+ m_public.v_public = 10;
+ let mi_public;
+ (function (mi_public) {
+ class c {
+ }
+ mi_public.c = c;
+ })(mi_public = m_public.mi_public || (m_public.mi_public = {}));
+})(m_public || (exports.m_public = m_public = {}));
+var import_public;
+(function (import_public) {
+ // No Privacy errors - importing private elements
+ var im_private_c_private = m_private.c_private;
+ var im_private_e_private = m_private.e_private;
+ var im_private_f_private = m_private.f_private;
+ var im_private_v_private = m_private.v_private;
+ var im_private_mi_private = m_private.mi_private;
+ // Usage of above decls
+ var privateUse_im_private_c_private = new im_private_c_private();
+ import_public.publicUse_im_private_c_private = new im_private_c_private();
+ var privateUse_im_private_e_private = im_private_e_private.Happy;
+ import_public.publicUse_im_private_e_private = im_private_e_private.Grumpy;
+ var privateUse_im_private_f_private = im_private_f_private();
+ import_public.publicUse_im_private_f_private = im_private_f_private();
+ var privateUse_im_private_v_private = im_private_v_private;
+ import_public.publicUse_im_private_v_private = im_private_v_private;
+ var privateUse_im_private_i_private;
+ var privateUse_im_private_mi_private = new im_private_mi_private.c();
+ import_public.publicUse_im_private_mi_private = new im_private_mi_private.c();
+ var privateUse_im_private_mu_private;
+ // No Privacy errors - importing public elements
+ var im_private_c_public = m_public.c_public;
+ var im_private_e_public = m_public.e_public;
+ var im_private_f_public = m_public.f_public;
+ var im_private_v_public = m_public.v_public;
+ var im_private_mi_public = m_public.mi_public;
+ // Usage of above decls
+ var privateUse_im_private_c_public = new im_private_c_public();
+ import_public.publicUse_im_private_c_public = new im_private_c_public();
+ var privateUse_im_private_e_public = im_private_e_public.Happy;
+ import_public.publicUse_im_private_e_public = im_private_e_public.Grumpy;
+ var privateUse_im_private_f_public = im_private_f_public();
+ import_public.publicUse_im_private_f_public = im_private_f_public();
+ var privateUse_im_private_v_public = im_private_v_public;
+ import_public.publicUse_im_private_v_public = im_private_v_public;
+ var privateUse_im_private_i_public;
+ var privateUse_im_private_mi_public = new im_private_mi_public.c();
+ import_public.publicUse_im_private_mi_public = new im_private_mi_public.c();
+ var privateUse_im_private_mu_public;
+})(import_public || (exports.import_public = import_public = {}));
+var import_private;
+(function (import_private) {
+ // No Privacy errors - importing private elements
+ var im_private_c_private = m_private.c_private;
+ var im_private_e_private = m_private.e_private;
+ var im_private_f_private = m_private.f_private;
+ var im_private_v_private = m_private.v_private;
+ var im_private_mi_private = m_private.mi_private;
+ // Usage of above decls
+ var privateUse_im_private_c_private = new im_private_c_private();
+ import_private.publicUse_im_private_c_private = new im_private_c_private();
+ var privateUse_im_private_e_private = im_private_e_private.Happy;
+ import_private.publicUse_im_private_e_private = im_private_e_private.Grumpy;
+ var privateUse_im_private_f_private = im_private_f_private();
+ import_private.publicUse_im_private_f_private = im_private_f_private();
+ var privateUse_im_private_v_private = im_private_v_private;
+ import_private.publicUse_im_private_v_private = im_private_v_private;
+ var privateUse_im_private_i_private;
+ var privateUse_im_private_mi_private = new im_private_mi_private.c();
+ import_private.publicUse_im_private_mi_private = new im_private_mi_private.c();
+ var privateUse_im_private_mu_private;
+ // No privacy Error - importing public elements
+ var im_private_c_public = m_public.c_public;
+ var im_private_e_public = m_public.e_public;
+ var im_private_f_public = m_public.f_public;
+ var im_private_v_public = m_public.v_public;
+ var im_private_mi_public = m_public.mi_public;
+ // Usage of above decls
+ var privateUse_im_private_c_public = new im_private_c_public();
+ import_private.publicUse_im_private_c_public = new im_private_c_public();
+ var privateUse_im_private_e_public = im_private_e_public.Happy;
+ import_private.publicUse_im_private_e_public = im_private_e_public.Grumpy;
+ var privateUse_im_private_f_public = im_private_f_public();
+ import_private.publicUse_im_private_f_public = im_private_f_public();
+ var privateUse_im_private_v_public = im_private_v_public;
+ import_private.publicUse_im_private_v_public = im_private_v_public;
+ var privateUse_im_private_i_public;
+ var privateUse_im_private_mi_public = new im_private_mi_public.c();
+ import_private.publicUse_im_private_mi_public = new im_private_mi_public.c();
+ var privateUse_im_private_mu_public;
+})(import_private || (import_private = {}));
+
+
+//// [privacyLocalInternalReferenceImportWithoutExport.d.ts]
+declare namespace m_private {
+ class c_private {
+ }
+ enum e_private {
+ Happy = 0,
+ Grumpy = 1
+ }
+ function f_private(): c_private;
+ var v_private: c_private;
+ interface i_private {
+ }
+ namespace mi_private {
+ class c {
+ }
+ }
+ namespace mu_private {
+ interface i {
+ }
+ }
+}
+export declare namespace m_public {
+ class c_public {
+ }
+ enum e_public {
+ Happy = 0,
+ Grumpy = 1
+ }
+ function f_public(): c_public;
+ var v_public: number;
+ interface i_public {
+ }
+ namespace mi_public {
+ class c {
+ }
+ }
+ namespace mu_public {
+ interface i {
+ }
+ }
+}
+export declare namespace import_public {
+ import im_private_c_private = m_private.c_private;
+ import im_private_e_private = m_private.e_private;
+ import im_private_i_private = m_private.i_private;
+ import im_private_mi_private = m_private.mi_private;
+ import im_private_mu_private = m_private.mu_private;
+ var publicUse_im_private_c_private: im_private_c_private;
+ var publicUse_im_private_e_private: im_private_e_private;
+ var publicUse_im_private_f_private: im_private_c_private;
+ var publicUse_im_private_v_private: im_private_c_private;
+ var publicUse_im_private_i_private: im_private_i_private;
+ var publicUse_im_private_mi_private: im_private_mi_private.c;
+ var publicUse_im_private_mu_private: im_private_mu_private.i;
+ import im_private_c_public = m_public.c_public;
+ import im_private_e_public = m_public.e_public;
+ import im_private_i_public = m_public.i_public;
+ import im_private_mi_public = m_public.mi_public;
+ import im_private_mu_public = m_public.mu_public;
+ var publicUse_im_private_c_public: im_private_c_public;
+ var publicUse_im_private_e_public: im_private_e_public;
+ var publicUse_im_private_f_public: im_private_c_public;
+ var publicUse_im_private_v_public: number;
+ var publicUse_im_private_i_public: im_private_i_public;
+ var publicUse_im_private_mi_public: im_private_mi_public.c;
+ var publicUse_im_private_mu_public: im_private_mu_public.i;
+}
+export {};
diff --git a/tsc/testdata/baselines/reference/compiler/privacyLocalInternalReferenceImportWithoutExport.symbols b/tsc/testdata/baselines/reference/compiler/privacyLocalInternalReferenceImportWithoutExport.symbols
new file mode 100644
index 0000000000000..43349f58e578d
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyLocalInternalReferenceImportWithoutExport.symbols
@@ -0,0 +1,512 @@
+//// [tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts] ////
+
+=== privacyLocalInternalReferenceImportWithoutExport.ts ===
+// private elements
+namespace m_private {
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+
+ export class c_private {
+>c_private : Symbol(c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 1, 21))
+ }
+ export enum e_private {
+>e_private : Symbol(e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 3, 5))
+
+ Happy,
+>Happy : Symbol(e_private.Happy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 4, 27))
+
+ Grumpy
+>Grumpy : Symbol(e_private.Grumpy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 5, 14))
+ }
+ export function f_private() {
+>f_private : Symbol(f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 7, 5))
+
+ return new c_private();
+>c_private : Symbol(c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 1, 21))
+ }
+ export var v_private = new c_private();
+>v_private : Symbol(v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 11, 14))
+>c_private : Symbol(c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 1, 21))
+
+ export interface i_private {
+>i_private : Symbol(i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 11, 43))
+ }
+ export namespace mi_private {
+>mi_private : Symbol(mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 13, 5))
+
+ export class c {
+>c : Symbol(c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 14, 33))
+ }
+ }
+ export namespace mu_private {
+>mu_private : Symbol(mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 17, 5))
+
+ export interface i {
+>i : Symbol(i, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 18, 33))
+ }
+ }
+}
+
+// Public elements
+export namespace m_public {
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+
+ export class c_public {
+>c_public : Symbol(c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 25, 27))
+ }
+ export enum e_public {
+>e_public : Symbol(e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 27, 5))
+
+ Happy,
+>Happy : Symbol(e_public.Happy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 28, 26))
+
+ Grumpy
+>Grumpy : Symbol(e_public.Grumpy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 29, 14))
+ }
+ export function f_public() {
+>f_public : Symbol(f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 31, 5))
+
+ return new c_public();
+>c_public : Symbol(c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 25, 27))
+ }
+ export var v_public = 10;
+>v_public : Symbol(v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 35, 14))
+
+ export interface i_public {
+>i_public : Symbol(i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 35, 29))
+ }
+ export namespace mi_public {
+>mi_public : Symbol(mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 37, 5))
+
+ export class c {
+>c : Symbol(c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 38, 32))
+ }
+ }
+ export namespace mu_public {
+>mu_public : Symbol(mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 41, 5))
+
+ export interface i {
+>i : Symbol(i, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 42, 32))
+ }
+ }
+}
+
+export namespace import_public {
+>import_public : Symbol(import_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 46, 1))
+
+ // No Privacy errors - importing private elements
+ import im_private_c_private = m_private.c_private;
+>im_private_c_private : Symbol(im_private_c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 48, 32))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>c_private : Symbol(im_private_c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 1, 21))
+
+ import im_private_e_private = m_private.e_private;
+>im_private_e_private : Symbol(im_private_e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 50, 54))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>e_private : Symbol(im_private_e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 3, 5))
+
+ import im_private_f_private = m_private.f_private;
+>im_private_f_private : Symbol(im_private_f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 51, 54))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>f_private : Symbol(im_private_f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 7, 5))
+
+ import im_private_v_private = m_private.v_private;
+>im_private_v_private : Symbol(im_private_v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 52, 54))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>v_private : Symbol(im_private_v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 11, 14))
+
+ import im_private_i_private = m_private.i_private;
+>im_private_i_private : Symbol(im_private_i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 53, 54))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>i_private : Symbol(im_private_i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 11, 43))
+
+ import im_private_mi_private = m_private.mi_private;
+>im_private_mi_private : Symbol(im_private_mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 54, 54))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>mi_private : Symbol(im_private_mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 13, 5))
+
+ import im_private_mu_private = m_private.mu_private;
+>im_private_mu_private : Symbol(im_private_mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 55, 56))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>mu_private : Symbol(im_private_mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 17, 5))
+
+ // Usage of above decls
+ var privateUse_im_private_c_private = new im_private_c_private();
+>privateUse_im_private_c_private : Symbol(privateUse_im_private_c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 59, 7))
+>im_private_c_private : Symbol(im_private_c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 48, 32))
+
+ export var publicUse_im_private_c_private = new im_private_c_private();
+>publicUse_im_private_c_private : Symbol(publicUse_im_private_c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 60, 14))
+>im_private_c_private : Symbol(im_private_c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 48, 32))
+
+ var privateUse_im_private_e_private = im_private_e_private.Happy;
+>privateUse_im_private_e_private : Symbol(privateUse_im_private_e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 61, 7))
+>im_private_e_private.Happy : Symbol(im_private_e_private.Happy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 4, 27))
+>im_private_e_private : Symbol(im_private_e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 50, 54))
+>Happy : Symbol(im_private_e_private.Happy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 4, 27))
+
+ export var publicUse_im_private_e_private = im_private_e_private.Grumpy;
+>publicUse_im_private_e_private : Symbol(publicUse_im_private_e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 62, 14))
+>im_private_e_private.Grumpy : Symbol(im_private_e_private.Grumpy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 5, 14))
+>im_private_e_private : Symbol(im_private_e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 50, 54))
+>Grumpy : Symbol(im_private_e_private.Grumpy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 5, 14))
+
+ var privateUse_im_private_f_private = im_private_f_private();
+>privateUse_im_private_f_private : Symbol(privateUse_im_private_f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 63, 7))
+>im_private_f_private : Symbol(im_private_f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 51, 54))
+
+ export var publicUse_im_private_f_private = im_private_f_private();
+>publicUse_im_private_f_private : Symbol(publicUse_im_private_f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 64, 14))
+>im_private_f_private : Symbol(im_private_f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 51, 54))
+
+ var privateUse_im_private_v_private = im_private_v_private;
+>privateUse_im_private_v_private : Symbol(privateUse_im_private_v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 65, 7))
+>im_private_v_private : Symbol(im_private_v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 52, 54))
+
+ export var publicUse_im_private_v_private = im_private_v_private;
+>publicUse_im_private_v_private : Symbol(publicUse_im_private_v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 66, 14))
+>im_private_v_private : Symbol(im_private_v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 52, 54))
+
+ var privateUse_im_private_i_private: im_private_i_private;
+>privateUse_im_private_i_private : Symbol(privateUse_im_private_i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 67, 7))
+>im_private_i_private : Symbol(im_private_i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 53, 54))
+
+ export var publicUse_im_private_i_private: im_private_i_private;
+>publicUse_im_private_i_private : Symbol(publicUse_im_private_i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 68, 14))
+>im_private_i_private : Symbol(im_private_i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 53, 54))
+
+ var privateUse_im_private_mi_private = new im_private_mi_private.c();
+>privateUse_im_private_mi_private : Symbol(privateUse_im_private_mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 69, 7))
+>im_private_mi_private.c : Symbol(im_private_mi_private.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 14, 33))
+>im_private_mi_private : Symbol(im_private_mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 54, 54))
+>c : Symbol(im_private_mi_private.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 14, 33))
+
+ export var publicUse_im_private_mi_private = new im_private_mi_private.c();
+>publicUse_im_private_mi_private : Symbol(publicUse_im_private_mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 70, 14))
+>im_private_mi_private.c : Symbol(im_private_mi_private.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 14, 33))
+>im_private_mi_private : Symbol(im_private_mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 54, 54))
+>c : Symbol(im_private_mi_private.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 14, 33))
+
+ var privateUse_im_private_mu_private: im_private_mu_private.i;
+>privateUse_im_private_mu_private : Symbol(privateUse_im_private_mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 71, 7))
+>im_private_mu_private : Symbol(im_private_mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 55, 56))
+>i : Symbol(im_private_mu_private.i, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 18, 33))
+
+ export var publicUse_im_private_mu_private: im_private_mu_private.i;
+>publicUse_im_private_mu_private : Symbol(publicUse_im_private_mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 72, 14))
+>im_private_mu_private : Symbol(im_private_mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 55, 56))
+>i : Symbol(im_private_mu_private.i, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 18, 33))
+
+
+ // No Privacy errors - importing public elements
+ import im_private_c_public = m_public.c_public;
+>im_private_c_public : Symbol(im_private_c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 72, 72))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>c_public : Symbol(im_private_c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 25, 27))
+
+ import im_private_e_public = m_public.e_public;
+>im_private_e_public : Symbol(im_private_e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 76, 51))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>e_public : Symbol(im_private_e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 27, 5))
+
+ import im_private_f_public = m_public.f_public;
+>im_private_f_public : Symbol(im_private_f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 77, 51))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>f_public : Symbol(im_private_f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 31, 5))
+
+ import im_private_v_public = m_public.v_public;
+>im_private_v_public : Symbol(im_private_v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 78, 51))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>v_public : Symbol(im_private_v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 35, 14))
+
+ import im_private_i_public = m_public.i_public;
+>im_private_i_public : Symbol(im_private_i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 79, 51))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>i_public : Symbol(im_private_i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 35, 29))
+
+ import im_private_mi_public = m_public.mi_public;
+>im_private_mi_public : Symbol(im_private_mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 80, 51))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>mi_public : Symbol(im_private_mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 37, 5))
+
+ import im_private_mu_public = m_public.mu_public;
+>im_private_mu_public : Symbol(im_private_mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 81, 53))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>mu_public : Symbol(im_private_mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 41, 5))
+
+ // Usage of above decls
+ var privateUse_im_private_c_public = new im_private_c_public();
+>privateUse_im_private_c_public : Symbol(privateUse_im_private_c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 85, 7))
+>im_private_c_public : Symbol(im_private_c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 72, 72))
+
+ export var publicUse_im_private_c_public = new im_private_c_public();
+>publicUse_im_private_c_public : Symbol(publicUse_im_private_c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 86, 14))
+>im_private_c_public : Symbol(im_private_c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 72, 72))
+
+ var privateUse_im_private_e_public = im_private_e_public.Happy;
+>privateUse_im_private_e_public : Symbol(privateUse_im_private_e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 87, 7))
+>im_private_e_public.Happy : Symbol(im_private_e_public.Happy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 28, 26))
+>im_private_e_public : Symbol(im_private_e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 76, 51))
+>Happy : Symbol(im_private_e_public.Happy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 28, 26))
+
+ export var publicUse_im_private_e_public = im_private_e_public.Grumpy;
+>publicUse_im_private_e_public : Symbol(publicUse_im_private_e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 88, 14))
+>im_private_e_public.Grumpy : Symbol(im_private_e_public.Grumpy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 29, 14))
+>im_private_e_public : Symbol(im_private_e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 76, 51))
+>Grumpy : Symbol(im_private_e_public.Grumpy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 29, 14))
+
+ var privateUse_im_private_f_public = im_private_f_public();
+>privateUse_im_private_f_public : Symbol(privateUse_im_private_f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 89, 7))
+>im_private_f_public : Symbol(im_private_f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 77, 51))
+
+ export var publicUse_im_private_f_public = im_private_f_public();
+>publicUse_im_private_f_public : Symbol(publicUse_im_private_f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 90, 14))
+>im_private_f_public : Symbol(im_private_f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 77, 51))
+
+ var privateUse_im_private_v_public = im_private_v_public;
+>privateUse_im_private_v_public : Symbol(privateUse_im_private_v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 91, 7))
+>im_private_v_public : Symbol(im_private_v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 78, 51))
+
+ export var publicUse_im_private_v_public = im_private_v_public;
+>publicUse_im_private_v_public : Symbol(publicUse_im_private_v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 92, 14))
+>im_private_v_public : Symbol(im_private_v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 78, 51))
+
+ var privateUse_im_private_i_public: im_private_i_public;
+>privateUse_im_private_i_public : Symbol(privateUse_im_private_i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 93, 7))
+>im_private_i_public : Symbol(im_private_i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 79, 51))
+
+ export var publicUse_im_private_i_public: im_private_i_public;
+>publicUse_im_private_i_public : Symbol(publicUse_im_private_i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 94, 14))
+>im_private_i_public : Symbol(im_private_i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 79, 51))
+
+ var privateUse_im_private_mi_public = new im_private_mi_public.c();
+>privateUse_im_private_mi_public : Symbol(privateUse_im_private_mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 95, 7))
+>im_private_mi_public.c : Symbol(im_private_mi_public.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 38, 32))
+>im_private_mi_public : Symbol(im_private_mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 80, 51))
+>c : Symbol(im_private_mi_public.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 38, 32))
+
+ export var publicUse_im_private_mi_public = new im_private_mi_public.c();
+>publicUse_im_private_mi_public : Symbol(publicUse_im_private_mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 96, 14))
+>im_private_mi_public.c : Symbol(im_private_mi_public.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 38, 32))
+>im_private_mi_public : Symbol(im_private_mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 80, 51))
+>c : Symbol(im_private_mi_public.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 38, 32))
+
+ var privateUse_im_private_mu_public: im_private_mu_public.i;
+>privateUse_im_private_mu_public : Symbol(privateUse_im_private_mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 97, 7))
+>im_private_mu_public : Symbol(im_private_mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 81, 53))
+>i : Symbol(im_private_mu_public.i, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 42, 32))
+
+ export var publicUse_im_private_mu_public: im_private_mu_public.i;
+>publicUse_im_private_mu_public : Symbol(publicUse_im_private_mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 98, 14))
+>im_private_mu_public : Symbol(im_private_mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 81, 53))
+>i : Symbol(im_private_mu_public.i, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 42, 32))
+}
+
+namespace import_private {
+>import_private : Symbol(import_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 99, 1))
+
+ // No Privacy errors - importing private elements
+ import im_private_c_private = m_private.c_private;
+>im_private_c_private : Symbol(im_private_c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 101, 26))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>c_private : Symbol(im_private_c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 1, 21))
+
+ import im_private_e_private = m_private.e_private;
+>im_private_e_private : Symbol(im_private_e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 103, 54))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>e_private : Symbol(im_private_e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 3, 5))
+
+ import im_private_f_private = m_private.f_private;
+>im_private_f_private : Symbol(im_private_f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 104, 54))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>f_private : Symbol(im_private_f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 7, 5))
+
+ import im_private_v_private = m_private.v_private;
+>im_private_v_private : Symbol(im_private_v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 105, 54))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>v_private : Symbol(im_private_v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 11, 14))
+
+ import im_private_i_private = m_private.i_private;
+>im_private_i_private : Symbol(im_private_i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 106, 54))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>i_private : Symbol(im_private_i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 11, 43))
+
+ import im_private_mi_private = m_private.mi_private;
+>im_private_mi_private : Symbol(im_private_mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 107, 54))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>mi_private : Symbol(im_private_mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 13, 5))
+
+ import im_private_mu_private = m_private.mu_private;
+>im_private_mu_private : Symbol(im_private_mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 108, 56))
+>m_private : Symbol(m_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 0, 0))
+>mu_private : Symbol(im_private_mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 17, 5))
+
+ // Usage of above decls
+ var privateUse_im_private_c_private = new im_private_c_private();
+>privateUse_im_private_c_private : Symbol(privateUse_im_private_c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 112, 7))
+>im_private_c_private : Symbol(im_private_c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 101, 26))
+
+ export var publicUse_im_private_c_private = new im_private_c_private();
+>publicUse_im_private_c_private : Symbol(publicUse_im_private_c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 113, 14))
+>im_private_c_private : Symbol(im_private_c_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 101, 26))
+
+ var privateUse_im_private_e_private = im_private_e_private.Happy;
+>privateUse_im_private_e_private : Symbol(privateUse_im_private_e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 114, 7))
+>im_private_e_private.Happy : Symbol(im_private_e_private.Happy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 4, 27))
+>im_private_e_private : Symbol(im_private_e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 103, 54))
+>Happy : Symbol(im_private_e_private.Happy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 4, 27))
+
+ export var publicUse_im_private_e_private = im_private_e_private.Grumpy;
+>publicUse_im_private_e_private : Symbol(publicUse_im_private_e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 115, 14))
+>im_private_e_private.Grumpy : Symbol(im_private_e_private.Grumpy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 5, 14))
+>im_private_e_private : Symbol(im_private_e_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 103, 54))
+>Grumpy : Symbol(im_private_e_private.Grumpy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 5, 14))
+
+ var privateUse_im_private_f_private = im_private_f_private();
+>privateUse_im_private_f_private : Symbol(privateUse_im_private_f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 116, 7))
+>im_private_f_private : Symbol(im_private_f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 104, 54))
+
+ export var publicUse_im_private_f_private = im_private_f_private();
+>publicUse_im_private_f_private : Symbol(publicUse_im_private_f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 117, 14))
+>im_private_f_private : Symbol(im_private_f_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 104, 54))
+
+ var privateUse_im_private_v_private = im_private_v_private;
+>privateUse_im_private_v_private : Symbol(privateUse_im_private_v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 118, 7))
+>im_private_v_private : Symbol(im_private_v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 105, 54))
+
+ export var publicUse_im_private_v_private = im_private_v_private;
+>publicUse_im_private_v_private : Symbol(publicUse_im_private_v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 119, 14))
+>im_private_v_private : Symbol(im_private_v_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 105, 54))
+
+ var privateUse_im_private_i_private: im_private_i_private;
+>privateUse_im_private_i_private : Symbol(privateUse_im_private_i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 120, 7))
+>im_private_i_private : Symbol(im_private_i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 106, 54))
+
+ export var publicUse_im_private_i_private: im_private_i_private;
+>publicUse_im_private_i_private : Symbol(publicUse_im_private_i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 121, 14))
+>im_private_i_private : Symbol(im_private_i_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 106, 54))
+
+ var privateUse_im_private_mi_private = new im_private_mi_private.c();
+>privateUse_im_private_mi_private : Symbol(privateUse_im_private_mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 122, 7))
+>im_private_mi_private.c : Symbol(im_private_mi_private.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 14, 33))
+>im_private_mi_private : Symbol(im_private_mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 107, 54))
+>c : Symbol(im_private_mi_private.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 14, 33))
+
+ export var publicUse_im_private_mi_private = new im_private_mi_private.c();
+>publicUse_im_private_mi_private : Symbol(publicUse_im_private_mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 123, 14))
+>im_private_mi_private.c : Symbol(im_private_mi_private.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 14, 33))
+>im_private_mi_private : Symbol(im_private_mi_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 107, 54))
+>c : Symbol(im_private_mi_private.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 14, 33))
+
+ var privateUse_im_private_mu_private: im_private_mu_private.i;
+>privateUse_im_private_mu_private : Symbol(privateUse_im_private_mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 124, 7))
+>im_private_mu_private : Symbol(im_private_mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 108, 56))
+>i : Symbol(im_private_mu_private.i, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 18, 33))
+
+ export var publicUse_im_private_mu_private: im_private_mu_private.i;
+>publicUse_im_private_mu_private : Symbol(publicUse_im_private_mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 125, 14))
+>im_private_mu_private : Symbol(im_private_mu_private, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 108, 56))
+>i : Symbol(im_private_mu_private.i, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 18, 33))
+
+ // No privacy Error - importing public elements
+ import im_private_c_public = m_public.c_public;
+>im_private_c_public : Symbol(im_private_c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 125, 72))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>c_public : Symbol(im_private_c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 25, 27))
+
+ import im_private_e_public = m_public.e_public;
+>im_private_e_public : Symbol(im_private_e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 128, 51))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>e_public : Symbol(im_private_e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 27, 5))
+
+ import im_private_f_public = m_public.f_public;
+>im_private_f_public : Symbol(im_private_f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 129, 51))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>f_public : Symbol(im_private_f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 31, 5))
+
+ import im_private_v_public = m_public.v_public;
+>im_private_v_public : Symbol(im_private_v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 130, 51))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>v_public : Symbol(im_private_v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 35, 14))
+
+ import im_private_i_public = m_public.i_public;
+>im_private_i_public : Symbol(im_private_i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 131, 51))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>i_public : Symbol(im_private_i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 35, 29))
+
+ import im_private_mi_public = m_public.mi_public;
+>im_private_mi_public : Symbol(im_private_mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 132, 51))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>mi_public : Symbol(im_private_mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 37, 5))
+
+ import im_private_mu_public = m_public.mu_public;
+>im_private_mu_public : Symbol(im_private_mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 133, 53))
+>m_public : Symbol(m_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 22, 1))
+>mu_public : Symbol(im_private_mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 41, 5))
+
+ // Usage of above decls
+ var privateUse_im_private_c_public = new im_private_c_public();
+>privateUse_im_private_c_public : Symbol(privateUse_im_private_c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 137, 7))
+>im_private_c_public : Symbol(im_private_c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 125, 72))
+
+ export var publicUse_im_private_c_public = new im_private_c_public();
+>publicUse_im_private_c_public : Symbol(publicUse_im_private_c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 138, 14))
+>im_private_c_public : Symbol(im_private_c_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 125, 72))
+
+ var privateUse_im_private_e_public = im_private_e_public.Happy;
+>privateUse_im_private_e_public : Symbol(privateUse_im_private_e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 139, 7))
+>im_private_e_public.Happy : Symbol(im_private_e_public.Happy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 28, 26))
+>im_private_e_public : Symbol(im_private_e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 128, 51))
+>Happy : Symbol(im_private_e_public.Happy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 28, 26))
+
+ export var publicUse_im_private_e_public = im_private_e_public.Grumpy;
+>publicUse_im_private_e_public : Symbol(publicUse_im_private_e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 140, 14))
+>im_private_e_public.Grumpy : Symbol(im_private_e_public.Grumpy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 29, 14))
+>im_private_e_public : Symbol(im_private_e_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 128, 51))
+>Grumpy : Symbol(im_private_e_public.Grumpy, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 29, 14))
+
+ var privateUse_im_private_f_public = im_private_f_public();
+>privateUse_im_private_f_public : Symbol(privateUse_im_private_f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 141, 7))
+>im_private_f_public : Symbol(im_private_f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 129, 51))
+
+ export var publicUse_im_private_f_public = im_private_f_public();
+>publicUse_im_private_f_public : Symbol(publicUse_im_private_f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 142, 14))
+>im_private_f_public : Symbol(im_private_f_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 129, 51))
+
+ var privateUse_im_private_v_public = im_private_v_public;
+>privateUse_im_private_v_public : Symbol(privateUse_im_private_v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 143, 7))
+>im_private_v_public : Symbol(im_private_v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 130, 51))
+
+ export var publicUse_im_private_v_public = im_private_v_public;
+>publicUse_im_private_v_public : Symbol(publicUse_im_private_v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 144, 14))
+>im_private_v_public : Symbol(im_private_v_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 130, 51))
+
+ var privateUse_im_private_i_public: im_private_i_public;
+>privateUse_im_private_i_public : Symbol(privateUse_im_private_i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 145, 7))
+>im_private_i_public : Symbol(im_private_i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 131, 51))
+
+ export var publicUse_im_private_i_public: im_private_i_public;
+>publicUse_im_private_i_public : Symbol(publicUse_im_private_i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 146, 14))
+>im_private_i_public : Symbol(im_private_i_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 131, 51))
+
+ var privateUse_im_private_mi_public = new im_private_mi_public.c();
+>privateUse_im_private_mi_public : Symbol(privateUse_im_private_mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 147, 7))
+>im_private_mi_public.c : Symbol(im_private_mi_public.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 38, 32))
+>im_private_mi_public : Symbol(im_private_mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 132, 51))
+>c : Symbol(im_private_mi_public.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 38, 32))
+
+ export var publicUse_im_private_mi_public = new im_private_mi_public.c();
+>publicUse_im_private_mi_public : Symbol(publicUse_im_private_mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 148, 14))
+>im_private_mi_public.c : Symbol(im_private_mi_public.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 38, 32))
+>im_private_mi_public : Symbol(im_private_mi_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 132, 51))
+>c : Symbol(im_private_mi_public.c, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 38, 32))
+
+ var privateUse_im_private_mu_public: im_private_mu_public.i;
+>privateUse_im_private_mu_public : Symbol(privateUse_im_private_mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 149, 7))
+>im_private_mu_public : Symbol(im_private_mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 133, 53))
+>i : Symbol(im_private_mu_public.i, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 42, 32))
+
+ export var publicUse_im_private_mu_public: im_private_mu_public.i;
+>publicUse_im_private_mu_public : Symbol(publicUse_im_private_mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 150, 14))
+>im_private_mu_public : Symbol(im_private_mu_public, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 133, 53))
+>i : Symbol(im_private_mu_public.i, Decl(privacyLocalInternalReferenceImportWithoutExport.ts, 42, 32))
+}
diff --git a/tsc/testdata/baselines/reference/compiler/privacyLocalInternalReferenceImportWithoutExport.types b/tsc/testdata/baselines/reference/compiler/privacyLocalInternalReferenceImportWithoutExport.types
new file mode 100644
index 0000000000000..c46648ff6c408
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyLocalInternalReferenceImportWithoutExport.types
@@ -0,0 +1,516 @@
+//// [tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts] ////
+
+=== privacyLocalInternalReferenceImportWithoutExport.ts ===
+// private elements
+namespace m_private {
+>m_private : typeof m_private
+
+ export class c_private {
+>c_private : c_private
+ }
+ export enum e_private {
+>e_private : e_private
+
+ Happy,
+>Happy : e_private.Happy
+
+ Grumpy
+>Grumpy : e_private.Grumpy
+ }
+ export function f_private() {
+>f_private : () => c_private
+
+ return new c_private();
+>new c_private() : c_private
+>c_private : typeof c_private
+ }
+ export var v_private = new c_private();
+>v_private : c_private
+>new c_private() : c_private
+>c_private : typeof c_private
+
+ export interface i_private {
+ }
+ export namespace mi_private {
+>mi_private : typeof mi_private
+
+ export class c {
+>c : c
+ }
+ }
+ export namespace mu_private {
+ export interface i {
+ }
+ }
+}
+
+// Public elements
+export namespace m_public {
+>m_public : typeof m_public
+
+ export class c_public {
+>c_public : c_public
+ }
+ export enum e_public {
+>e_public : e_public
+
+ Happy,
+>Happy : e_public.Happy
+
+ Grumpy
+>Grumpy : e_public.Grumpy
+ }
+ export function f_public() {
+>f_public : () => c_public
+
+ return new c_public();
+>new c_public() : c_public
+>c_public : typeof c_public
+ }
+ export var v_public = 10;
+>v_public : number
+>10 : 10
+
+ export interface i_public {
+ }
+ export namespace mi_public {
+>mi_public : typeof mi_public
+
+ export class c {
+>c : c
+ }
+ }
+ export namespace mu_public {
+ export interface i {
+ }
+ }
+}
+
+export namespace import_public {
+>import_public : typeof import_public
+
+ // No Privacy errors - importing private elements
+ import im_private_c_private = m_private.c_private;
+>im_private_c_private : typeof im_private_c_private
+>m_private : typeof m_private
+>c_private : im_private_c_private
+
+ import im_private_e_private = m_private.e_private;
+>im_private_e_private : typeof im_private_e_private
+>m_private : typeof m_private
+>e_private : im_private_e_private
+
+ import im_private_f_private = m_private.f_private;
+>im_private_f_private : () => im_private_c_private
+>m_private : typeof m_private
+>f_private : () => im_private_c_private
+
+ import im_private_v_private = m_private.v_private;
+>im_private_v_private : im_private_c_private
+>m_private : typeof m_private
+>v_private : im_private_c_private
+
+ import im_private_i_private = m_private.i_private;
+>im_private_i_private : any
+>m_private : typeof m_private
+>i_private : im_private_i_private
+
+ import im_private_mi_private = m_private.mi_private;
+>im_private_mi_private : typeof im_private_mi_private
+>m_private : typeof m_private
+>mi_private : typeof im_private_mi_private
+
+ import im_private_mu_private = m_private.mu_private;
+>im_private_mu_private : any
+>m_private : typeof m_private
+>mu_private : any
+
+ // Usage of above decls
+ var privateUse_im_private_c_private = new im_private_c_private();
+>privateUse_im_private_c_private : im_private_c_private
+>new im_private_c_private() : im_private_c_private
+>im_private_c_private : typeof im_private_c_private
+
+ export var publicUse_im_private_c_private = new im_private_c_private();
+>publicUse_im_private_c_private : im_private_c_private
+>new im_private_c_private() : im_private_c_private
+>im_private_c_private : typeof im_private_c_private
+
+ var privateUse_im_private_e_private = im_private_e_private.Happy;
+>privateUse_im_private_e_private : im_private_e_private
+>im_private_e_private.Happy : im_private_e_private.Happy
+>im_private_e_private : typeof im_private_e_private
+>Happy : im_private_e_private.Happy
+
+ export var publicUse_im_private_e_private = im_private_e_private.Grumpy;
+>publicUse_im_private_e_private : im_private_e_private
+>im_private_e_private.Grumpy : im_private_e_private.Grumpy
+>im_private_e_private : typeof im_private_e_private
+>Grumpy : im_private_e_private.Grumpy
+
+ var privateUse_im_private_f_private = im_private_f_private();
+>privateUse_im_private_f_private : im_private_c_private
+>im_private_f_private() : im_private_c_private
+>im_private_f_private : () => im_private_c_private
+
+ export var publicUse_im_private_f_private = im_private_f_private();
+>publicUse_im_private_f_private : im_private_c_private
+>im_private_f_private() : im_private_c_private
+>im_private_f_private : () => im_private_c_private
+
+ var privateUse_im_private_v_private = im_private_v_private;
+>privateUse_im_private_v_private : im_private_c_private
+>im_private_v_private : im_private_c_private
+
+ export var publicUse_im_private_v_private = im_private_v_private;
+>publicUse_im_private_v_private : im_private_c_private
+>im_private_v_private : im_private_c_private
+
+ var privateUse_im_private_i_private: im_private_i_private;
+>privateUse_im_private_i_private : im_private_i_private
+
+ export var publicUse_im_private_i_private: im_private_i_private;
+>publicUse_im_private_i_private : im_private_i_private
+
+ var privateUse_im_private_mi_private = new im_private_mi_private.c();
+>privateUse_im_private_mi_private : im_private_mi_private.c
+>new im_private_mi_private.c() : im_private_mi_private.c
+>im_private_mi_private.c : typeof im_private_mi_private.c
+>im_private_mi_private : typeof im_private_mi_private
+>c : typeof im_private_mi_private.c
+
+ export var publicUse_im_private_mi_private = new im_private_mi_private.c();
+>publicUse_im_private_mi_private : im_private_mi_private.c
+>new im_private_mi_private.c() : im_private_mi_private.c
+>im_private_mi_private.c : typeof im_private_mi_private.c
+>im_private_mi_private : typeof im_private_mi_private
+>c : typeof im_private_mi_private.c
+
+ var privateUse_im_private_mu_private: im_private_mu_private.i;
+>privateUse_im_private_mu_private : im_private_mu_private.i
+>im_private_mu_private : any
+
+ export var publicUse_im_private_mu_private: im_private_mu_private.i;
+>publicUse_im_private_mu_private : im_private_mu_private.i
+>im_private_mu_private : any
+
+
+ // No Privacy errors - importing public elements
+ import im_private_c_public = m_public.c_public;
+>im_private_c_public : typeof im_private_c_public
+>m_public : typeof m_public
+>c_public : im_private_c_public
+
+ import im_private_e_public = m_public.e_public;
+>im_private_e_public : typeof im_private_e_public
+>m_public : typeof m_public
+>e_public : im_private_e_public
+
+ import im_private_f_public = m_public.f_public;
+>im_private_f_public : () => im_private_c_public
+>m_public : typeof m_public
+>f_public : () => im_private_c_public
+
+ import im_private_v_public = m_public.v_public;
+>im_private_v_public : number
+>m_public : typeof m_public
+>v_public : number
+
+ import im_private_i_public = m_public.i_public;
+>im_private_i_public : any
+>m_public : typeof m_public
+>i_public : im_private_i_public
+
+ import im_private_mi_public = m_public.mi_public;
+>im_private_mi_public : typeof im_private_mi_public
+>m_public : typeof m_public
+>mi_public : typeof im_private_mi_public
+
+ import im_private_mu_public = m_public.mu_public;
+>im_private_mu_public : any
+>m_public : typeof m_public
+>mu_public : any
+
+ // Usage of above decls
+ var privateUse_im_private_c_public = new im_private_c_public();
+>privateUse_im_private_c_public : im_private_c_public
+>new im_private_c_public() : im_private_c_public
+>im_private_c_public : typeof im_private_c_public
+
+ export var publicUse_im_private_c_public = new im_private_c_public();
+>publicUse_im_private_c_public : im_private_c_public
+>new im_private_c_public() : im_private_c_public
+>im_private_c_public : typeof im_private_c_public
+
+ var privateUse_im_private_e_public = im_private_e_public.Happy;
+>privateUse_im_private_e_public : im_private_e_public
+>im_private_e_public.Happy : im_private_e_public.Happy
+>im_private_e_public : typeof im_private_e_public
+>Happy : im_private_e_public.Happy
+
+ export var publicUse_im_private_e_public = im_private_e_public.Grumpy;
+>publicUse_im_private_e_public : im_private_e_public
+>im_private_e_public.Grumpy : im_private_e_public.Grumpy
+>im_private_e_public : typeof im_private_e_public
+>Grumpy : im_private_e_public.Grumpy
+
+ var privateUse_im_private_f_public = im_private_f_public();
+>privateUse_im_private_f_public : im_private_c_public
+>im_private_f_public() : im_private_c_public
+>im_private_f_public : () => im_private_c_public
+
+ export var publicUse_im_private_f_public = im_private_f_public();
+>publicUse_im_private_f_public : im_private_c_public
+>im_private_f_public() : im_private_c_public
+>im_private_f_public : () => im_private_c_public
+
+ var privateUse_im_private_v_public = im_private_v_public;
+>privateUse_im_private_v_public : number
+>im_private_v_public : number
+
+ export var publicUse_im_private_v_public = im_private_v_public;
+>publicUse_im_private_v_public : number
+>im_private_v_public : number
+
+ var privateUse_im_private_i_public: im_private_i_public;
+>privateUse_im_private_i_public : im_private_i_public
+
+ export var publicUse_im_private_i_public: im_private_i_public;
+>publicUse_im_private_i_public : im_private_i_public
+
+ var privateUse_im_private_mi_public = new im_private_mi_public.c();
+>privateUse_im_private_mi_public : im_private_mi_public.c
+>new im_private_mi_public.c() : im_private_mi_public.c
+>im_private_mi_public.c : typeof im_private_mi_public.c
+>im_private_mi_public : typeof im_private_mi_public
+>c : typeof im_private_mi_public.c
+
+ export var publicUse_im_private_mi_public = new im_private_mi_public.c();
+>publicUse_im_private_mi_public : im_private_mi_public.c
+>new im_private_mi_public.c() : im_private_mi_public.c
+>im_private_mi_public.c : typeof im_private_mi_public.c
+>im_private_mi_public : typeof im_private_mi_public
+>c : typeof im_private_mi_public.c
+
+ var privateUse_im_private_mu_public: im_private_mu_public.i;
+>privateUse_im_private_mu_public : im_private_mu_public.i
+>im_private_mu_public : any
+
+ export var publicUse_im_private_mu_public: im_private_mu_public.i;
+>publicUse_im_private_mu_public : im_private_mu_public.i
+>im_private_mu_public : any
+}
+
+namespace import_private {
+>import_private : typeof import_private
+
+ // No Privacy errors - importing private elements
+ import im_private_c_private = m_private.c_private;
+>im_private_c_private : typeof im_private_c_private
+>m_private : typeof m_private
+>c_private : im_private_c_private
+
+ import im_private_e_private = m_private.e_private;
+>im_private_e_private : typeof im_private_e_private
+>m_private : typeof m_private
+>e_private : im_private_e_private
+
+ import im_private_f_private = m_private.f_private;
+>im_private_f_private : () => im_private_c_private
+>m_private : typeof m_private
+>f_private : () => im_private_c_private
+
+ import im_private_v_private = m_private.v_private;
+>im_private_v_private : im_private_c_private
+>m_private : typeof m_private
+>v_private : im_private_c_private
+
+ import im_private_i_private = m_private.i_private;
+>im_private_i_private : any
+>m_private : typeof m_private
+>i_private : im_private_i_private
+
+ import im_private_mi_private = m_private.mi_private;
+>im_private_mi_private : typeof im_private_mi_private
+>m_private : typeof m_private
+>mi_private : typeof im_private_mi_private
+
+ import im_private_mu_private = m_private.mu_private;
+>im_private_mu_private : any
+>m_private : typeof m_private
+>mu_private : any
+
+ // Usage of above decls
+ var privateUse_im_private_c_private = new im_private_c_private();
+>privateUse_im_private_c_private : im_private_c_private
+>new im_private_c_private() : im_private_c_private
+>im_private_c_private : typeof im_private_c_private
+
+ export var publicUse_im_private_c_private = new im_private_c_private();
+>publicUse_im_private_c_private : im_private_c_private
+>new im_private_c_private() : im_private_c_private
+>im_private_c_private : typeof im_private_c_private
+
+ var privateUse_im_private_e_private = im_private_e_private.Happy;
+>privateUse_im_private_e_private : im_private_e_private
+>im_private_e_private.Happy : im_private_e_private.Happy
+>im_private_e_private : typeof im_private_e_private
+>Happy : im_private_e_private.Happy
+
+ export var publicUse_im_private_e_private = im_private_e_private.Grumpy;
+>publicUse_im_private_e_private : im_private_e_private
+>im_private_e_private.Grumpy : im_private_e_private.Grumpy
+>im_private_e_private : typeof im_private_e_private
+>Grumpy : im_private_e_private.Grumpy
+
+ var privateUse_im_private_f_private = im_private_f_private();
+>privateUse_im_private_f_private : im_private_c_private
+>im_private_f_private() : im_private_c_private
+>im_private_f_private : () => im_private_c_private
+
+ export var publicUse_im_private_f_private = im_private_f_private();
+>publicUse_im_private_f_private : im_private_c_private
+>im_private_f_private() : im_private_c_private
+>im_private_f_private : () => im_private_c_private
+
+ var privateUse_im_private_v_private = im_private_v_private;
+>privateUse_im_private_v_private : im_private_c_private
+>im_private_v_private : im_private_c_private
+
+ export var publicUse_im_private_v_private = im_private_v_private;
+>publicUse_im_private_v_private : im_private_c_private
+>im_private_v_private : im_private_c_private
+
+ var privateUse_im_private_i_private: im_private_i_private;
+>privateUse_im_private_i_private : im_private_i_private
+
+ export var publicUse_im_private_i_private: im_private_i_private;
+>publicUse_im_private_i_private : im_private_i_private
+
+ var privateUse_im_private_mi_private = new im_private_mi_private.c();
+>privateUse_im_private_mi_private : im_private_mi_private.c
+>new im_private_mi_private.c() : im_private_mi_private.c
+>im_private_mi_private.c : typeof im_private_mi_private.c
+>im_private_mi_private : typeof im_private_mi_private
+>c : typeof im_private_mi_private.c
+
+ export var publicUse_im_private_mi_private = new im_private_mi_private.c();
+>publicUse_im_private_mi_private : im_private_mi_private.c
+>new im_private_mi_private.c() : im_private_mi_private.c
+>im_private_mi_private.c : typeof im_private_mi_private.c
+>im_private_mi_private : typeof im_private_mi_private
+>c : typeof im_private_mi_private.c
+
+ var privateUse_im_private_mu_private: im_private_mu_private.i;
+>privateUse_im_private_mu_private : im_private_mu_private.i
+>im_private_mu_private : any
+
+ export var publicUse_im_private_mu_private: im_private_mu_private.i;
+>publicUse_im_private_mu_private : im_private_mu_private.i
+>im_private_mu_private : any
+
+ // No privacy Error - importing public elements
+ import im_private_c_public = m_public.c_public;
+>im_private_c_public : typeof im_private_c_public
+>m_public : typeof m_public
+>c_public : im_private_c_public
+
+ import im_private_e_public = m_public.e_public;
+>im_private_e_public : typeof im_private_e_public
+>m_public : typeof m_public
+>e_public : im_private_e_public
+
+ import im_private_f_public = m_public.f_public;
+>im_private_f_public : () => im_private_c_public
+>m_public : typeof m_public
+>f_public : () => im_private_c_public
+
+ import im_private_v_public = m_public.v_public;
+>im_private_v_public : number
+>m_public : typeof m_public
+>v_public : number
+
+ import im_private_i_public = m_public.i_public;
+>im_private_i_public : any
+>m_public : typeof m_public
+>i_public : im_private_i_public
+
+ import im_private_mi_public = m_public.mi_public;
+>im_private_mi_public : typeof im_private_mi_public
+>m_public : typeof m_public
+>mi_public : typeof im_private_mi_public
+
+ import im_private_mu_public = m_public.mu_public;
+>im_private_mu_public : any
+>m_public : typeof m_public
+>mu_public : any
+
+ // Usage of above decls
+ var privateUse_im_private_c_public = new im_private_c_public();
+>privateUse_im_private_c_public : im_private_c_public
+>new im_private_c_public() : im_private_c_public
+>im_private_c_public : typeof im_private_c_public
+
+ export var publicUse_im_private_c_public = new im_private_c_public();
+>publicUse_im_private_c_public : im_private_c_public
+>new im_private_c_public() : im_private_c_public
+>im_private_c_public : typeof im_private_c_public
+
+ var privateUse_im_private_e_public = im_private_e_public.Happy;
+>privateUse_im_private_e_public : im_private_e_public
+>im_private_e_public.Happy : im_private_e_public.Happy
+>im_private_e_public : typeof im_private_e_public
+>Happy : im_private_e_public.Happy
+
+ export var publicUse_im_private_e_public = im_private_e_public.Grumpy;
+>publicUse_im_private_e_public : im_private_e_public
+>im_private_e_public.Grumpy : im_private_e_public.Grumpy
+>im_private_e_public : typeof im_private_e_public
+>Grumpy : im_private_e_public.Grumpy
+
+ var privateUse_im_private_f_public = im_private_f_public();
+>privateUse_im_private_f_public : im_private_c_public
+>im_private_f_public() : im_private_c_public
+>im_private_f_public : () => im_private_c_public
+
+ export var publicUse_im_private_f_public = im_private_f_public();
+>publicUse_im_private_f_public : im_private_c_public
+>im_private_f_public() : im_private_c_public
+>im_private_f_public : () => im_private_c_public
+
+ var privateUse_im_private_v_public = im_private_v_public;
+>privateUse_im_private_v_public : number
+>im_private_v_public : number
+
+ export var publicUse_im_private_v_public = im_private_v_public;
+>publicUse_im_private_v_public : number
+>im_private_v_public : number
+
+ var privateUse_im_private_i_public: im_private_i_public;
+>privateUse_im_private_i_public : im_private_i_public
+
+ export var publicUse_im_private_i_public: im_private_i_public;
+>publicUse_im_private_i_public : im_private_i_public
+
+ var privateUse_im_private_mi_public = new im_private_mi_public.c();
+>privateUse_im_private_mi_public : im_private_mi_public.c
+>new im_private_mi_public.c() : im_private_mi_public.c
+>im_private_mi_public.c : typeof im_private_mi_public.c
+>im_private_mi_public : typeof im_private_mi_public
+>c : typeof im_private_mi_public.c
+
+ export var publicUse_im_private_mi_public = new im_private_mi_public.c();
+>publicUse_im_private_mi_public : im_private_mi_public.c
+>new im_private_mi_public.c() : im_private_mi_public.c
+>im_private_mi_public.c : typeof im_private_mi_public.c
+>im_private_mi_public : typeof im_private_mi_public
+>c : typeof im_private_mi_public.c
+
+ var privateUse_im_private_mu_public: im_private_mu_public.i;
+>privateUse_im_private_mu_public : im_private_mu_public.i
+>im_private_mu_public : any
+
+ export var publicUse_im_private_mu_public: im_private_mu_public.i;
+>publicUse_im_private_mu_public : im_private_mu_public.i
+>im_private_mu_public : any
+}
diff --git a/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithExport.js b/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithExport.js
new file mode 100644
index 0000000000000..40f5e263000d5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithExport.js
@@ -0,0 +1,263 @@
+//// [tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts] ////
+
+//// [privacyTopLevelInternalReferenceImportWithExport.ts]
+// private elements
+namespace m_private {
+ export class c_private {
+ }
+ export enum e_private {
+ Happy,
+ Grumpy
+ }
+ export function f_private() {
+ return new c_private();
+ }
+ export var v_private = new c_private();
+ export interface i_private {
+ }
+ export namespace mi_private {
+ export class c {
+ }
+ }
+ export namespace mu_private {
+ export interface i {
+ }
+ }
+}
+
+// Public elements
+export namespace m_public {
+ export class c_public {
+ }
+ export enum e_public {
+ Happy,
+ Grumpy
+ }
+ export function f_public() {
+ return new c_public();
+ }
+ export var v_public = 10;
+ export interface i_public {
+ }
+ export namespace mi_public {
+ export class c {
+ }
+ }
+ export namespace mu_public {
+ export interface i {
+ }
+ }
+}
+
+// Privacy errors - importing private elements
+export import im_public_c_private = m_private.c_private;
+export import im_public_e_private = m_private.e_private;
+export import im_public_f_private = m_private.f_private;
+export import im_public_v_private = m_private.v_private;
+export import im_public_i_private = m_private.i_private;
+export import im_public_mi_private = m_private.mi_private;
+export import im_public_mu_private = m_private.mu_private;
+
+// Usage of privacy error imports
+var privateUse_im_public_c_private = new im_public_c_private();
+export var publicUse_im_public_c_private = new im_public_c_private();
+var privateUse_im_public_e_private = im_public_e_private.Happy;
+export var publicUse_im_public_e_private = im_public_e_private.Grumpy;
+var privateUse_im_public_f_private = im_public_f_private();
+export var publicUse_im_public_f_private = im_public_f_private();
+var privateUse_im_public_v_private = im_public_v_private;
+export var publicUse_im_public_v_private = im_public_v_private;
+var privateUse_im_public_i_private: im_public_i_private;
+export var publicUse_im_public_i_private: im_public_i_private;
+var privateUse_im_public_mi_private = new im_public_mi_private.c();
+export var publicUse_im_public_mi_private = new im_public_mi_private.c();
+var privateUse_im_public_mu_private: im_public_mu_private.i;
+export var publicUse_im_public_mu_private: im_public_mu_private.i;
+
+
+// No Privacy errors - importing public elements
+export import im_public_c_public = m_public.c_public;
+export import im_public_e_public = m_public.e_public;
+export import im_public_f_public = m_public.f_public;
+export import im_public_v_public = m_public.v_public;
+export import im_public_i_public = m_public.i_public;
+export import im_public_mi_public = m_public.mi_public;
+export import im_public_mu_public = m_public.mu_public;
+
+// Usage of above decls
+var privateUse_im_public_c_public = new im_public_c_public();
+export var publicUse_im_public_c_public = new im_public_c_public();
+var privateUse_im_public_e_public = im_public_e_public.Happy;
+export var publicUse_im_public_e_public = im_public_e_public.Grumpy;
+var privateUse_im_public_f_public = im_public_f_public();
+export var publicUse_im_public_f_public = im_public_f_public();
+var privateUse_im_public_v_public = im_public_v_public;
+export var publicUse_im_public_v_public = im_public_v_public;
+var privateUse_im_public_i_public: im_public_i_public;
+export var publicUse_im_public_i_public: im_public_i_public;
+var privateUse_im_public_mi_public = new im_public_mi_public.c();
+export var publicUse_im_public_mi_public = new im_public_mi_public.c();
+var privateUse_im_public_mu_public: im_public_mu_public.i;
+export var publicUse_im_public_mu_public: im_public_mu_public.i;
+
+
+//// [privacyTopLevelInternalReferenceImportWithExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.publicUse_im_public_mu_public = exports.publicUse_im_public_mi_public = exports.publicUse_im_public_i_public = exports.publicUse_im_public_v_public = exports.publicUse_im_public_f_public = exports.publicUse_im_public_e_public = exports.publicUse_im_public_c_public = exports.im_public_mi_public = exports.im_public_v_public = exports.im_public_f_public = exports.im_public_e_public = exports.im_public_c_public = exports.publicUse_im_public_mu_private = exports.publicUse_im_public_mi_private = exports.publicUse_im_public_i_private = exports.publicUse_im_public_v_private = exports.publicUse_im_public_f_private = exports.publicUse_im_public_e_private = exports.publicUse_im_public_c_private = exports.im_public_mi_private = exports.im_public_v_private = exports.im_public_f_private = exports.im_public_e_private = exports.im_public_c_private = exports.m_public = void 0;
+// private elements
+var m_private;
+(function (m_private) {
+ class c_private {
+ }
+ m_private.c_private = c_private;
+ let e_private;
+ (function (e_private) {
+ e_private[e_private["Happy"] = 0] = "Happy";
+ e_private[e_private["Grumpy"] = 1] = "Grumpy";
+ })(e_private = m_private.e_private || (m_private.e_private = {}));
+ function f_private() {
+ return new c_private();
+ }
+ m_private.f_private = f_private;
+ m_private.v_private = new c_private();
+ let mi_private;
+ (function (mi_private) {
+ class c {
+ }
+ mi_private.c = c;
+ })(mi_private = m_private.mi_private || (m_private.mi_private = {}));
+})(m_private || (m_private = {}));
+// Public elements
+var m_public;
+(function (m_public) {
+ class c_public {
+ }
+ m_public.c_public = c_public;
+ let e_public;
+ (function (e_public) {
+ e_public[e_public["Happy"] = 0] = "Happy";
+ e_public[e_public["Grumpy"] = 1] = "Grumpy";
+ })(e_public = m_public.e_public || (m_public.e_public = {}));
+ function f_public() {
+ return new c_public();
+ }
+ m_public.f_public = f_public;
+ m_public.v_public = 10;
+ let mi_public;
+ (function (mi_public) {
+ class c {
+ }
+ mi_public.c = c;
+ })(mi_public = m_public.mi_public || (m_public.mi_public = {}));
+})(m_public || (exports.m_public = m_public = {}));
+// Privacy errors - importing private elements
+exports.im_public_c_private = m_private.c_private;
+exports.im_public_e_private = m_private.e_private;
+exports.im_public_f_private = m_private.f_private;
+exports.im_public_v_private = m_private.v_private;
+exports.im_public_mi_private = m_private.mi_private;
+// Usage of privacy error imports
+var privateUse_im_public_c_private = new exports.im_public_c_private();
+exports.publicUse_im_public_c_private = new exports.im_public_c_private();
+var privateUse_im_public_e_private = exports.im_public_e_private.Happy;
+exports.publicUse_im_public_e_private = exports.im_public_e_private.Grumpy;
+var privateUse_im_public_f_private = (0, exports.im_public_f_private)();
+exports.publicUse_im_public_f_private = (0, exports.im_public_f_private)();
+var privateUse_im_public_v_private = exports.im_public_v_private;
+exports.publicUse_im_public_v_private = exports.im_public_v_private;
+var privateUse_im_public_i_private;
+var privateUse_im_public_mi_private = new exports.im_public_mi_private.c();
+exports.publicUse_im_public_mi_private = new exports.im_public_mi_private.c();
+var privateUse_im_public_mu_private;
+// No Privacy errors - importing public elements
+exports.im_public_c_public = m_public.c_public;
+exports.im_public_e_public = m_public.e_public;
+exports.im_public_f_public = m_public.f_public;
+exports.im_public_v_public = m_public.v_public;
+exports.im_public_mi_public = m_public.mi_public;
+// Usage of above decls
+var privateUse_im_public_c_public = new exports.im_public_c_public();
+exports.publicUse_im_public_c_public = new exports.im_public_c_public();
+var privateUse_im_public_e_public = exports.im_public_e_public.Happy;
+exports.publicUse_im_public_e_public = exports.im_public_e_public.Grumpy;
+var privateUse_im_public_f_public = (0, exports.im_public_f_public)();
+exports.publicUse_im_public_f_public = (0, exports.im_public_f_public)();
+var privateUse_im_public_v_public = exports.im_public_v_public;
+exports.publicUse_im_public_v_public = exports.im_public_v_public;
+var privateUse_im_public_i_public;
+var privateUse_im_public_mi_public = new exports.im_public_mi_public.c();
+exports.publicUse_im_public_mi_public = new exports.im_public_mi_public.c();
+var privateUse_im_public_mu_public;
+
+
+//// [privacyTopLevelInternalReferenceImportWithExport.d.ts]
+declare namespace m_private {
+ class c_private {
+ }
+ enum e_private {
+ Happy = 0,
+ Grumpy = 1
+ }
+ function f_private(): c_private;
+ var v_private: c_private;
+ interface i_private {
+ }
+ namespace mi_private {
+ class c {
+ }
+ }
+ namespace mu_private {
+ interface i {
+ }
+ }
+}
+export declare namespace m_public {
+ class c_public {
+ }
+ enum e_public {
+ Happy = 0,
+ Grumpy = 1
+ }
+ function f_public(): c_public;
+ var v_public: number;
+ interface i_public {
+ }
+ namespace mi_public {
+ class c {
+ }
+ }
+ namespace mu_public {
+ interface i {
+ }
+ }
+}
+export import im_public_c_private = m_private.c_private;
+export import im_public_e_private = m_private.e_private;
+export import im_public_f_private = m_private.f_private;
+export import im_public_v_private = m_private.v_private;
+export import im_public_i_private = m_private.i_private;
+export import im_public_mi_private = m_private.mi_private;
+export import im_public_mu_private = m_private.mu_private;
+export declare var publicUse_im_public_c_private: im_public_c_private;
+export declare var publicUse_im_public_e_private: im_public_e_private;
+export declare var publicUse_im_public_f_private: im_public_c_private;
+export declare var publicUse_im_public_v_private: im_public_c_private;
+export declare var publicUse_im_public_i_private: im_public_i_private;
+export declare var publicUse_im_public_mi_private: im_public_mi_private.c;
+export declare var publicUse_im_public_mu_private: im_public_mu_private.i;
+export import im_public_c_public = m_public.c_public;
+export import im_public_e_public = m_public.e_public;
+export import im_public_f_public = m_public.f_public;
+export import im_public_v_public = m_public.v_public;
+export import im_public_i_public = m_public.i_public;
+export import im_public_mi_public = m_public.mi_public;
+export import im_public_mu_public = m_public.mu_public;
+export declare var publicUse_im_public_c_public: im_public_c_public;
+export declare var publicUse_im_public_e_public: im_public_e_public;
+export declare var publicUse_im_public_f_public: im_public_c_public;
+export declare var publicUse_im_public_v_public: number;
+export declare var publicUse_im_public_i_public: im_public_i_public;
+export declare var publicUse_im_public_mi_public: im_public_mi_public.c;
+export declare var publicUse_im_public_mu_public: im_public_mu_public.i;
+export {};
diff --git a/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithExport.symbols b/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithExport.symbols
new file mode 100644
index 0000000000000..e3e53fca8aab1
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithExport.symbols
@@ -0,0 +1,299 @@
+//// [tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts] ////
+
+=== privacyTopLevelInternalReferenceImportWithExport.ts ===
+// private elements
+namespace m_private {
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 0, 0))
+
+ export class c_private {
+>c_private : Symbol(c_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 1, 21))
+ }
+ export enum e_private {
+>e_private : Symbol(e_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 3, 5))
+
+ Happy,
+>Happy : Symbol(im_public_e_private.Happy, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 4, 27))
+
+ Grumpy
+>Grumpy : Symbol(im_public_e_private.Grumpy, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 5, 14))
+ }
+ export function f_private() {
+>f_private : Symbol(f_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 7, 5))
+
+ return new c_private();
+>c_private : Symbol(c_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 1, 21))
+ }
+ export var v_private = new c_private();
+>v_private : Symbol(v_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 11, 14))
+>c_private : Symbol(c_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 1, 21))
+
+ export interface i_private {
+>i_private : Symbol(i_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 11, 43))
+ }
+ export namespace mi_private {
+>mi_private : Symbol(mi_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 13, 5))
+
+ export class c {
+>c : Symbol(c, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 14, 33))
+ }
+ }
+ export namespace mu_private {
+>mu_private : Symbol(mu_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 17, 5))
+
+ export interface i {
+>i : Symbol(i, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 18, 33))
+ }
+ }
+}
+
+// Public elements
+export namespace m_public {
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 22, 1))
+
+ export class c_public {
+>c_public : Symbol(c_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 25, 27))
+ }
+ export enum e_public {
+>e_public : Symbol(e_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 27, 5))
+
+ Happy,
+>Happy : Symbol(im_public_e_public.Happy, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 28, 26))
+
+ Grumpy
+>Grumpy : Symbol(im_public_e_public.Grumpy, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 29, 14))
+ }
+ export function f_public() {
+>f_public : Symbol(f_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 31, 5))
+
+ return new c_public();
+>c_public : Symbol(c_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 25, 27))
+ }
+ export var v_public = 10;
+>v_public : Symbol(v_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 35, 14))
+
+ export interface i_public {
+>i_public : Symbol(i_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 35, 29))
+ }
+ export namespace mi_public {
+>mi_public : Symbol(mi_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 37, 5))
+
+ export class c {
+>c : Symbol(c, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 38, 32))
+ }
+ }
+ export namespace mu_public {
+>mu_public : Symbol(mu_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 41, 5))
+
+ export interface i {
+>i : Symbol(i, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 42, 32))
+ }
+ }
+}
+
+// Privacy errors - importing private elements
+export import im_public_c_private = m_private.c_private;
+>im_public_c_private : Symbol(im_public_c_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 46, 1))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 0, 0))
+>c_private : Symbol(im_public_c_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 1, 21))
+
+export import im_public_e_private = m_private.e_private;
+>im_public_e_private : Symbol(im_public_e_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 49, 56))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 0, 0))
+>e_private : Symbol(im_public_e_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 3, 5))
+
+export import im_public_f_private = m_private.f_private;
+>im_public_f_private : Symbol(im_public_f_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 50, 56))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 0, 0))
+>f_private : Symbol(im_public_f_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 7, 5))
+
+export import im_public_v_private = m_private.v_private;
+>im_public_v_private : Symbol(im_public_v_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 51, 56))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 0, 0))
+>v_private : Symbol(im_public_v_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 11, 14))
+
+export import im_public_i_private = m_private.i_private;
+>im_public_i_private : Symbol(im_public_i_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 52, 56))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 0, 0))
+>i_private : Symbol(im_public_i_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 11, 43))
+
+export import im_public_mi_private = m_private.mi_private;
+>im_public_mi_private : Symbol(im_public_mi_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 53, 56))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 0, 0))
+>mi_private : Symbol(im_public_mi_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 13, 5))
+
+export import im_public_mu_private = m_private.mu_private;
+>im_public_mu_private : Symbol(im_public_mu_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 54, 58))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 0, 0))
+>mu_private : Symbol(im_public_mu_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 17, 5))
+
+// Usage of privacy error imports
+var privateUse_im_public_c_private = new im_public_c_private();
+>privateUse_im_public_c_private : Symbol(privateUse_im_public_c_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 58, 3))
+>im_public_c_private : Symbol(im_public_c_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 46, 1))
+
+export var publicUse_im_public_c_private = new im_public_c_private();
+>publicUse_im_public_c_private : Symbol(publicUse_im_public_c_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 59, 10))
+>im_public_c_private : Symbol(im_public_c_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 46, 1))
+
+var privateUse_im_public_e_private = im_public_e_private.Happy;
+>privateUse_im_public_e_private : Symbol(privateUse_im_public_e_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 60, 3))
+>im_public_e_private.Happy : Symbol(im_public_e_private.Happy, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 4, 27))
+>im_public_e_private : Symbol(im_public_e_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 49, 56))
+>Happy : Symbol(im_public_e_private.Happy, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 4, 27))
+
+export var publicUse_im_public_e_private = im_public_e_private.Grumpy;
+>publicUse_im_public_e_private : Symbol(publicUse_im_public_e_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 61, 10))
+>im_public_e_private.Grumpy : Symbol(im_public_e_private.Grumpy, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 5, 14))
+>im_public_e_private : Symbol(im_public_e_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 49, 56))
+>Grumpy : Symbol(im_public_e_private.Grumpy, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 5, 14))
+
+var privateUse_im_public_f_private = im_public_f_private();
+>privateUse_im_public_f_private : Symbol(privateUse_im_public_f_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 62, 3))
+>im_public_f_private : Symbol(im_public_f_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 50, 56))
+
+export var publicUse_im_public_f_private = im_public_f_private();
+>publicUse_im_public_f_private : Symbol(publicUse_im_public_f_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 63, 10))
+>im_public_f_private : Symbol(im_public_f_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 50, 56))
+
+var privateUse_im_public_v_private = im_public_v_private;
+>privateUse_im_public_v_private : Symbol(privateUse_im_public_v_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 64, 3))
+>im_public_v_private : Symbol(im_public_v_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 51, 56))
+
+export var publicUse_im_public_v_private = im_public_v_private;
+>publicUse_im_public_v_private : Symbol(publicUse_im_public_v_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 65, 10))
+>im_public_v_private : Symbol(im_public_v_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 51, 56))
+
+var privateUse_im_public_i_private: im_public_i_private;
+>privateUse_im_public_i_private : Symbol(privateUse_im_public_i_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 66, 3))
+>im_public_i_private : Symbol(im_public_i_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 52, 56))
+
+export var publicUse_im_public_i_private: im_public_i_private;
+>publicUse_im_public_i_private : Symbol(publicUse_im_public_i_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 67, 10))
+>im_public_i_private : Symbol(im_public_i_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 52, 56))
+
+var privateUse_im_public_mi_private = new im_public_mi_private.c();
+>privateUse_im_public_mi_private : Symbol(privateUse_im_public_mi_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 68, 3))
+>im_public_mi_private.c : Symbol(im_public_mi_private.c, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 14, 33))
+>im_public_mi_private : Symbol(im_public_mi_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 53, 56))
+>c : Symbol(im_public_mi_private.c, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 14, 33))
+
+export var publicUse_im_public_mi_private = new im_public_mi_private.c();
+>publicUse_im_public_mi_private : Symbol(publicUse_im_public_mi_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 69, 10))
+>im_public_mi_private.c : Symbol(im_public_mi_private.c, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 14, 33))
+>im_public_mi_private : Symbol(im_public_mi_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 53, 56))
+>c : Symbol(im_public_mi_private.c, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 14, 33))
+
+var privateUse_im_public_mu_private: im_public_mu_private.i;
+>privateUse_im_public_mu_private : Symbol(privateUse_im_public_mu_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 70, 3))
+>im_public_mu_private : Symbol(im_public_mu_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 54, 58))
+>i : Symbol(im_public_mu_private.i, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 18, 33))
+
+export var publicUse_im_public_mu_private: im_public_mu_private.i;
+>publicUse_im_public_mu_private : Symbol(publicUse_im_public_mu_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 71, 10))
+>im_public_mu_private : Symbol(im_public_mu_private, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 54, 58))
+>i : Symbol(im_public_mu_private.i, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 18, 33))
+
+
+// No Privacy errors - importing public elements
+export import im_public_c_public = m_public.c_public;
+>im_public_c_public : Symbol(im_public_c_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 71, 66))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 22, 1))
+>c_public : Symbol(im_public_c_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 25, 27))
+
+export import im_public_e_public = m_public.e_public;
+>im_public_e_public : Symbol(im_public_e_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 75, 53))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 22, 1))
+>e_public : Symbol(im_public_e_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 27, 5))
+
+export import im_public_f_public = m_public.f_public;
+>im_public_f_public : Symbol(im_public_f_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 76, 53))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 22, 1))
+>f_public : Symbol(im_public_f_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 31, 5))
+
+export import im_public_v_public = m_public.v_public;
+>im_public_v_public : Symbol(im_public_v_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 77, 53))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 22, 1))
+>v_public : Symbol(im_public_v_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 35, 14))
+
+export import im_public_i_public = m_public.i_public;
+>im_public_i_public : Symbol(im_public_i_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 78, 53))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 22, 1))
+>i_public : Symbol(im_public_i_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 35, 29))
+
+export import im_public_mi_public = m_public.mi_public;
+>im_public_mi_public : Symbol(im_public_mi_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 79, 53))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 22, 1))
+>mi_public : Symbol(im_public_mi_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 37, 5))
+
+export import im_public_mu_public = m_public.mu_public;
+>im_public_mu_public : Symbol(im_public_mu_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 80, 55))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 22, 1))
+>mu_public : Symbol(im_public_mu_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 41, 5))
+
+// Usage of above decls
+var privateUse_im_public_c_public = new im_public_c_public();
+>privateUse_im_public_c_public : Symbol(privateUse_im_public_c_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 84, 3))
+>im_public_c_public : Symbol(im_public_c_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 71, 66))
+
+export var publicUse_im_public_c_public = new im_public_c_public();
+>publicUse_im_public_c_public : Symbol(publicUse_im_public_c_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 85, 10))
+>im_public_c_public : Symbol(im_public_c_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 71, 66))
+
+var privateUse_im_public_e_public = im_public_e_public.Happy;
+>privateUse_im_public_e_public : Symbol(privateUse_im_public_e_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 86, 3))
+>im_public_e_public.Happy : Symbol(im_public_e_public.Happy, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 28, 26))
+>im_public_e_public : Symbol(im_public_e_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 75, 53))
+>Happy : Symbol(im_public_e_public.Happy, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 28, 26))
+
+export var publicUse_im_public_e_public = im_public_e_public.Grumpy;
+>publicUse_im_public_e_public : Symbol(publicUse_im_public_e_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 87, 10))
+>im_public_e_public.Grumpy : Symbol(im_public_e_public.Grumpy, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 29, 14))
+>im_public_e_public : Symbol(im_public_e_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 75, 53))
+>Grumpy : Symbol(im_public_e_public.Grumpy, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 29, 14))
+
+var privateUse_im_public_f_public = im_public_f_public();
+>privateUse_im_public_f_public : Symbol(privateUse_im_public_f_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 88, 3))
+>im_public_f_public : Symbol(im_public_f_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 76, 53))
+
+export var publicUse_im_public_f_public = im_public_f_public();
+>publicUse_im_public_f_public : Symbol(publicUse_im_public_f_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 89, 10))
+>im_public_f_public : Symbol(im_public_f_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 76, 53))
+
+var privateUse_im_public_v_public = im_public_v_public;
+>privateUse_im_public_v_public : Symbol(privateUse_im_public_v_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 90, 3))
+>im_public_v_public : Symbol(im_public_v_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 77, 53))
+
+export var publicUse_im_public_v_public = im_public_v_public;
+>publicUse_im_public_v_public : Symbol(publicUse_im_public_v_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 91, 10))
+>im_public_v_public : Symbol(im_public_v_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 77, 53))
+
+var privateUse_im_public_i_public: im_public_i_public;
+>privateUse_im_public_i_public : Symbol(privateUse_im_public_i_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 92, 3))
+>im_public_i_public : Symbol(im_public_i_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 78, 53))
+
+export var publicUse_im_public_i_public: im_public_i_public;
+>publicUse_im_public_i_public : Symbol(publicUse_im_public_i_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 93, 10))
+>im_public_i_public : Symbol(im_public_i_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 78, 53))
+
+var privateUse_im_public_mi_public = new im_public_mi_public.c();
+>privateUse_im_public_mi_public : Symbol(privateUse_im_public_mi_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 94, 3))
+>im_public_mi_public.c : Symbol(im_public_mi_public.c, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 38, 32))
+>im_public_mi_public : Symbol(im_public_mi_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 79, 53))
+>c : Symbol(im_public_mi_public.c, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 38, 32))
+
+export var publicUse_im_public_mi_public = new im_public_mi_public.c();
+>publicUse_im_public_mi_public : Symbol(publicUse_im_public_mi_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 95, 10))
+>im_public_mi_public.c : Symbol(im_public_mi_public.c, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 38, 32))
+>im_public_mi_public : Symbol(im_public_mi_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 79, 53))
+>c : Symbol(im_public_mi_public.c, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 38, 32))
+
+var privateUse_im_public_mu_public: im_public_mu_public.i;
+>privateUse_im_public_mu_public : Symbol(privateUse_im_public_mu_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 96, 3))
+>im_public_mu_public : Symbol(im_public_mu_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 80, 55))
+>i : Symbol(im_public_mu_public.i, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 42, 32))
+
+export var publicUse_im_public_mu_public: im_public_mu_public.i;
+>publicUse_im_public_mu_public : Symbol(publicUse_im_public_mu_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 97, 10))
+>im_public_mu_public : Symbol(im_public_mu_public, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 80, 55))
+>i : Symbol(im_public_mu_public.i, Decl(privacyTopLevelInternalReferenceImportWithExport.ts, 42, 32))
+
diff --git a/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithExport.types b/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithExport.types
new file mode 100644
index 0000000000000..4d3649e85d461
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithExport.types
@@ -0,0 +1,299 @@
+//// [tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts] ////
+
+=== privacyTopLevelInternalReferenceImportWithExport.ts ===
+// private elements
+namespace m_private {
+>m_private : typeof m_private
+
+ export class c_private {
+>c_private : c_private
+ }
+ export enum e_private {
+>e_private : e_private
+
+ Happy,
+>Happy : e_private.Happy
+
+ Grumpy
+>Grumpy : e_private.Grumpy
+ }
+ export function f_private() {
+>f_private : () => c_private
+
+ return new c_private();
+>new c_private() : c_private
+>c_private : typeof c_private
+ }
+ export var v_private = new c_private();
+>v_private : c_private
+>new c_private() : c_private
+>c_private : typeof c_private
+
+ export interface i_private {
+ }
+ export namespace mi_private {
+>mi_private : typeof mi_private
+
+ export class c {
+>c : c
+ }
+ }
+ export namespace mu_private {
+ export interface i {
+ }
+ }
+}
+
+// Public elements
+export namespace m_public {
+>m_public : typeof m_public
+
+ export class c_public {
+>c_public : c_public
+ }
+ export enum e_public {
+>e_public : e_public
+
+ Happy,
+>Happy : e_public.Happy
+
+ Grumpy
+>Grumpy : e_public.Grumpy
+ }
+ export function f_public() {
+>f_public : () => c_public
+
+ return new c_public();
+>new c_public() : c_public
+>c_public : typeof c_public
+ }
+ export var v_public = 10;
+>v_public : number
+>10 : 10
+
+ export interface i_public {
+ }
+ export namespace mi_public {
+>mi_public : typeof mi_public
+
+ export class c {
+>c : c
+ }
+ }
+ export namespace mu_public {
+ export interface i {
+ }
+ }
+}
+
+// Privacy errors - importing private elements
+export import im_public_c_private = m_private.c_private;
+>im_public_c_private : typeof im_public_c_private
+>m_private : typeof m_private
+>c_private : im_public_c_private
+
+export import im_public_e_private = m_private.e_private;
+>im_public_e_private : typeof im_public_e_private
+>m_private : typeof m_private
+>e_private : im_public_e_private
+
+export import im_public_f_private = m_private.f_private;
+>im_public_f_private : () => im_public_c_private
+>m_private : typeof m_private
+>f_private : () => im_public_c_private
+
+export import im_public_v_private = m_private.v_private;
+>im_public_v_private : im_public_c_private
+>m_private : typeof m_private
+>v_private : im_public_c_private
+
+export import im_public_i_private = m_private.i_private;
+>im_public_i_private : any
+>m_private : typeof m_private
+>i_private : im_public_i_private
+
+export import im_public_mi_private = m_private.mi_private;
+>im_public_mi_private : typeof im_public_mi_private
+>m_private : typeof m_private
+>mi_private : typeof im_public_mi_private
+
+export import im_public_mu_private = m_private.mu_private;
+>im_public_mu_private : any
+>m_private : typeof m_private
+>mu_private : any
+
+// Usage of privacy error imports
+var privateUse_im_public_c_private = new im_public_c_private();
+>privateUse_im_public_c_private : im_public_c_private
+>new im_public_c_private() : im_public_c_private
+>im_public_c_private : typeof im_public_c_private
+
+export var publicUse_im_public_c_private = new im_public_c_private();
+>publicUse_im_public_c_private : im_public_c_private
+>new im_public_c_private() : im_public_c_private
+>im_public_c_private : typeof im_public_c_private
+
+var privateUse_im_public_e_private = im_public_e_private.Happy;
+>privateUse_im_public_e_private : im_public_e_private
+>im_public_e_private.Happy : im_public_e_private.Happy
+>im_public_e_private : typeof im_public_e_private
+>Happy : im_public_e_private.Happy
+
+export var publicUse_im_public_e_private = im_public_e_private.Grumpy;
+>publicUse_im_public_e_private : im_public_e_private
+>im_public_e_private.Grumpy : im_public_e_private.Grumpy
+>im_public_e_private : typeof im_public_e_private
+>Grumpy : im_public_e_private.Grumpy
+
+var privateUse_im_public_f_private = im_public_f_private();
+>privateUse_im_public_f_private : im_public_c_private
+>im_public_f_private() : im_public_c_private
+>im_public_f_private : () => im_public_c_private
+
+export var publicUse_im_public_f_private = im_public_f_private();
+>publicUse_im_public_f_private : im_public_c_private
+>im_public_f_private() : im_public_c_private
+>im_public_f_private : () => im_public_c_private
+
+var privateUse_im_public_v_private = im_public_v_private;
+>privateUse_im_public_v_private : im_public_c_private
+>im_public_v_private : im_public_c_private
+
+export var publicUse_im_public_v_private = im_public_v_private;
+>publicUse_im_public_v_private : im_public_c_private
+>im_public_v_private : im_public_c_private
+
+var privateUse_im_public_i_private: im_public_i_private;
+>privateUse_im_public_i_private : im_public_i_private
+
+export var publicUse_im_public_i_private: im_public_i_private;
+>publicUse_im_public_i_private : im_public_i_private
+
+var privateUse_im_public_mi_private = new im_public_mi_private.c();
+>privateUse_im_public_mi_private : im_public_mi_private.c
+>new im_public_mi_private.c() : im_public_mi_private.c
+>im_public_mi_private.c : typeof im_public_mi_private.c
+>im_public_mi_private : typeof im_public_mi_private
+>c : typeof im_public_mi_private.c
+
+export var publicUse_im_public_mi_private = new im_public_mi_private.c();
+>publicUse_im_public_mi_private : im_public_mi_private.c
+>new im_public_mi_private.c() : im_public_mi_private.c
+>im_public_mi_private.c : typeof im_public_mi_private.c
+>im_public_mi_private : typeof im_public_mi_private
+>c : typeof im_public_mi_private.c
+
+var privateUse_im_public_mu_private: im_public_mu_private.i;
+>privateUse_im_public_mu_private : im_public_mu_private.i
+>im_public_mu_private : any
+
+export var publicUse_im_public_mu_private: im_public_mu_private.i;
+>publicUse_im_public_mu_private : im_public_mu_private.i
+>im_public_mu_private : any
+
+
+// No Privacy errors - importing public elements
+export import im_public_c_public = m_public.c_public;
+>im_public_c_public : typeof im_public_c_public
+>m_public : typeof m_public
+>c_public : im_public_c_public
+
+export import im_public_e_public = m_public.e_public;
+>im_public_e_public : typeof im_public_e_public
+>m_public : typeof m_public
+>e_public : im_public_e_public
+
+export import im_public_f_public = m_public.f_public;
+>im_public_f_public : () => im_public_c_public
+>m_public : typeof m_public
+>f_public : () => im_public_c_public
+
+export import im_public_v_public = m_public.v_public;
+>im_public_v_public : number
+>m_public : typeof m_public
+>v_public : number
+
+export import im_public_i_public = m_public.i_public;
+>im_public_i_public : any
+>m_public : typeof m_public
+>i_public : im_public_i_public
+
+export import im_public_mi_public = m_public.mi_public;
+>im_public_mi_public : typeof im_public_mi_public
+>m_public : typeof m_public
+>mi_public : typeof im_public_mi_public
+
+export import im_public_mu_public = m_public.mu_public;
+>im_public_mu_public : any
+>m_public : typeof m_public
+>mu_public : any
+
+// Usage of above decls
+var privateUse_im_public_c_public = new im_public_c_public();
+>privateUse_im_public_c_public : im_public_c_public
+>new im_public_c_public() : im_public_c_public
+>im_public_c_public : typeof im_public_c_public
+
+export var publicUse_im_public_c_public = new im_public_c_public();
+>publicUse_im_public_c_public : im_public_c_public
+>new im_public_c_public() : im_public_c_public
+>im_public_c_public : typeof im_public_c_public
+
+var privateUse_im_public_e_public = im_public_e_public.Happy;
+>privateUse_im_public_e_public : im_public_e_public
+>im_public_e_public.Happy : im_public_e_public.Happy
+>im_public_e_public : typeof im_public_e_public
+>Happy : im_public_e_public.Happy
+
+export var publicUse_im_public_e_public = im_public_e_public.Grumpy;
+>publicUse_im_public_e_public : im_public_e_public
+>im_public_e_public.Grumpy : im_public_e_public.Grumpy
+>im_public_e_public : typeof im_public_e_public
+>Grumpy : im_public_e_public.Grumpy
+
+var privateUse_im_public_f_public = im_public_f_public();
+>privateUse_im_public_f_public : im_public_c_public
+>im_public_f_public() : im_public_c_public
+>im_public_f_public : () => im_public_c_public
+
+export var publicUse_im_public_f_public = im_public_f_public();
+>publicUse_im_public_f_public : im_public_c_public
+>im_public_f_public() : im_public_c_public
+>im_public_f_public : () => im_public_c_public
+
+var privateUse_im_public_v_public = im_public_v_public;
+>privateUse_im_public_v_public : number
+>im_public_v_public : number
+
+export var publicUse_im_public_v_public = im_public_v_public;
+>publicUse_im_public_v_public : number
+>im_public_v_public : number
+
+var privateUse_im_public_i_public: im_public_i_public;
+>privateUse_im_public_i_public : im_public_i_public
+
+export var publicUse_im_public_i_public: im_public_i_public;
+>publicUse_im_public_i_public : im_public_i_public
+
+var privateUse_im_public_mi_public = new im_public_mi_public.c();
+>privateUse_im_public_mi_public : im_public_mi_public.c
+>new im_public_mi_public.c() : im_public_mi_public.c
+>im_public_mi_public.c : typeof im_public_mi_public.c
+>im_public_mi_public : typeof im_public_mi_public
+>c : typeof im_public_mi_public.c
+
+export var publicUse_im_public_mi_public = new im_public_mi_public.c();
+>publicUse_im_public_mi_public : im_public_mi_public.c
+>new im_public_mi_public.c() : im_public_mi_public.c
+>im_public_mi_public.c : typeof im_public_mi_public.c
+>im_public_mi_public : typeof im_public_mi_public
+>c : typeof im_public_mi_public.c
+
+var privateUse_im_public_mu_public: im_public_mu_public.i;
+>privateUse_im_public_mu_public : im_public_mu_public.i
+>im_public_mu_public : any
+
+export var publicUse_im_public_mu_public: im_public_mu_public.i;
+>publicUse_im_public_mu_public : im_public_mu_public.i
+>im_public_mu_public : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithoutExport.js b/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithoutExport.js
new file mode 100644
index 0000000000000..7f19f32197984
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithoutExport.js
@@ -0,0 +1,259 @@
+//// [tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts] ////
+
+//// [privacyTopLevelInternalReferenceImportWithoutExport.ts]
+// private elements
+namespace m_private {
+ export class c_private {
+ }
+ export enum e_private {
+ Happy,
+ Grumpy
+ }
+ export function f_private() {
+ return new c_private();
+ }
+ export var v_private = new c_private();
+ export interface i_private {
+ }
+ export namespace mi_private {
+ export class c {
+ }
+ }
+ export namespace mu_private {
+ export interface i {
+ }
+ }
+}
+
+// Public elements
+export namespace m_public {
+ export class c_public {
+ }
+ export enum e_public {
+ Happy,
+ Grumpy
+ }
+ export function f_public() {
+ return new c_public();
+ }
+ export var v_public = 10;
+ export interface i_public {
+ }
+ export namespace mi_public {
+ export class c {
+ }
+ }
+ export namespace mu_public {
+ export interface i {
+ }
+ }
+}
+
+// No Privacy errors - importing private elements
+import im_private_c_private = m_private.c_private;
+import im_private_e_private = m_private.e_private;
+import im_private_f_private = m_private.f_private;
+import im_private_v_private = m_private.v_private;
+import im_private_i_private = m_private.i_private;
+import im_private_mi_private = m_private.mi_private;
+import im_private_mu_private = m_private.mu_private;
+
+// Usage of above decls
+var privateUse_im_private_c_private = new im_private_c_private();
+export var publicUse_im_private_c_private = new im_private_c_private();
+var privateUse_im_private_e_private = im_private_e_private.Happy;
+export var publicUse_im_private_e_private = im_private_e_private.Grumpy;
+var privateUse_im_private_f_private = im_private_f_private();
+export var publicUse_im_private_f_private = im_private_f_private();
+var privateUse_im_private_v_private = im_private_v_private;
+export var publicUse_im_private_v_private = im_private_v_private;
+var privateUse_im_private_i_private: im_private_i_private;
+export var publicUse_im_private_i_private: im_private_i_private;
+var privateUse_im_private_mi_private = new im_private_mi_private.c();
+export var publicUse_im_private_mi_private = new im_private_mi_private.c();
+var privateUse_im_private_mu_private: im_private_mu_private.i;
+export var publicUse_im_private_mu_private: im_private_mu_private.i;
+
+
+// No Privacy errors - importing public elements
+import im_private_c_public = m_public.c_public;
+import im_private_e_public = m_public.e_public;
+import im_private_f_public = m_public.f_public;
+import im_private_v_public = m_public.v_public;
+import im_private_i_public = m_public.i_public;
+import im_private_mi_public = m_public.mi_public;
+import im_private_mu_public = m_public.mu_public;
+
+// Usage of above decls
+var privateUse_im_private_c_public = new im_private_c_public();
+export var publicUse_im_private_c_public = new im_private_c_public();
+var privateUse_im_private_e_public = im_private_e_public.Happy;
+export var publicUse_im_private_e_public = im_private_e_public.Grumpy;
+var privateUse_im_private_f_public = im_private_f_public();
+export var publicUse_im_private_f_public = im_private_f_public();
+var privateUse_im_private_v_public = im_private_v_public;
+export var publicUse_im_private_v_public = im_private_v_public;
+var privateUse_im_private_i_public: im_private_i_public;
+export var publicUse_im_private_i_public: im_private_i_public;
+var privateUse_im_private_mi_public = new im_private_mi_public.c();
+export var publicUse_im_private_mi_public = new im_private_mi_public.c();
+var privateUse_im_private_mu_public: im_private_mu_public.i;
+export var publicUse_im_private_mu_public: im_private_mu_public.i;
+
+
+//// [privacyTopLevelInternalReferenceImportWithoutExport.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.publicUse_im_private_mu_public = exports.publicUse_im_private_mi_public = exports.publicUse_im_private_i_public = exports.publicUse_im_private_v_public = exports.publicUse_im_private_f_public = exports.publicUse_im_private_e_public = exports.publicUse_im_private_c_public = exports.publicUse_im_private_mu_private = exports.publicUse_im_private_mi_private = exports.publicUse_im_private_i_private = exports.publicUse_im_private_v_private = exports.publicUse_im_private_f_private = exports.publicUse_im_private_e_private = exports.publicUse_im_private_c_private = exports.m_public = void 0;
+// private elements
+var m_private;
+(function (m_private) {
+ class c_private {
+ }
+ m_private.c_private = c_private;
+ let e_private;
+ (function (e_private) {
+ e_private[e_private["Happy"] = 0] = "Happy";
+ e_private[e_private["Grumpy"] = 1] = "Grumpy";
+ })(e_private = m_private.e_private || (m_private.e_private = {}));
+ function f_private() {
+ return new c_private();
+ }
+ m_private.f_private = f_private;
+ m_private.v_private = new c_private();
+ let mi_private;
+ (function (mi_private) {
+ class c {
+ }
+ mi_private.c = c;
+ })(mi_private = m_private.mi_private || (m_private.mi_private = {}));
+})(m_private || (m_private = {}));
+// Public elements
+var m_public;
+(function (m_public) {
+ class c_public {
+ }
+ m_public.c_public = c_public;
+ let e_public;
+ (function (e_public) {
+ e_public[e_public["Happy"] = 0] = "Happy";
+ e_public[e_public["Grumpy"] = 1] = "Grumpy";
+ })(e_public = m_public.e_public || (m_public.e_public = {}));
+ function f_public() {
+ return new c_public();
+ }
+ m_public.f_public = f_public;
+ m_public.v_public = 10;
+ let mi_public;
+ (function (mi_public) {
+ class c {
+ }
+ mi_public.c = c;
+ })(mi_public = m_public.mi_public || (m_public.mi_public = {}));
+})(m_public || (exports.m_public = m_public = {}));
+// No Privacy errors - importing private elements
+var im_private_c_private = m_private.c_private;
+var im_private_e_private = m_private.e_private;
+var im_private_f_private = m_private.f_private;
+var im_private_v_private = m_private.v_private;
+var im_private_mi_private = m_private.mi_private;
+// Usage of above decls
+var privateUse_im_private_c_private = new im_private_c_private();
+exports.publicUse_im_private_c_private = new im_private_c_private();
+var privateUse_im_private_e_private = im_private_e_private.Happy;
+exports.publicUse_im_private_e_private = im_private_e_private.Grumpy;
+var privateUse_im_private_f_private = im_private_f_private();
+exports.publicUse_im_private_f_private = im_private_f_private();
+var privateUse_im_private_v_private = im_private_v_private;
+exports.publicUse_im_private_v_private = im_private_v_private;
+var privateUse_im_private_i_private;
+var privateUse_im_private_mi_private = new im_private_mi_private.c();
+exports.publicUse_im_private_mi_private = new im_private_mi_private.c();
+var privateUse_im_private_mu_private;
+// No Privacy errors - importing public elements
+var im_private_c_public = m_public.c_public;
+var im_private_e_public = m_public.e_public;
+var im_private_f_public = m_public.f_public;
+var im_private_v_public = m_public.v_public;
+var im_private_mi_public = m_public.mi_public;
+// Usage of above decls
+var privateUse_im_private_c_public = new im_private_c_public();
+exports.publicUse_im_private_c_public = new im_private_c_public();
+var privateUse_im_private_e_public = im_private_e_public.Happy;
+exports.publicUse_im_private_e_public = im_private_e_public.Grumpy;
+var privateUse_im_private_f_public = im_private_f_public();
+exports.publicUse_im_private_f_public = im_private_f_public();
+var privateUse_im_private_v_public = im_private_v_public;
+exports.publicUse_im_private_v_public = im_private_v_public;
+var privateUse_im_private_i_public;
+var privateUse_im_private_mi_public = new im_private_mi_public.c();
+exports.publicUse_im_private_mi_public = new im_private_mi_public.c();
+var privateUse_im_private_mu_public;
+
+
+//// [privacyTopLevelInternalReferenceImportWithoutExport.d.ts]
+declare namespace m_private {
+ class c_private {
+ }
+ enum e_private {
+ Happy = 0,
+ Grumpy = 1
+ }
+ function f_private(): c_private;
+ var v_private: c_private;
+ interface i_private {
+ }
+ namespace mi_private {
+ class c {
+ }
+ }
+ namespace mu_private {
+ interface i {
+ }
+ }
+}
+export declare namespace m_public {
+ class c_public {
+ }
+ enum e_public {
+ Happy = 0,
+ Grumpy = 1
+ }
+ function f_public(): c_public;
+ var v_public: number;
+ interface i_public {
+ }
+ namespace mi_public {
+ class c {
+ }
+ }
+ namespace mu_public {
+ interface i {
+ }
+ }
+}
+import im_private_c_private = m_private.c_private;
+import im_private_e_private = m_private.e_private;
+import im_private_i_private = m_private.i_private;
+import im_private_mi_private = m_private.mi_private;
+import im_private_mu_private = m_private.mu_private;
+export declare var publicUse_im_private_c_private: im_private_c_private;
+export declare var publicUse_im_private_e_private: im_private_e_private;
+export declare var publicUse_im_private_f_private: im_private_c_private;
+export declare var publicUse_im_private_v_private: im_private_c_private;
+export declare var publicUse_im_private_i_private: im_private_i_private;
+export declare var publicUse_im_private_mi_private: im_private_mi_private.c;
+export declare var publicUse_im_private_mu_private: im_private_mu_private.i;
+import im_private_c_public = m_public.c_public;
+import im_private_e_public = m_public.e_public;
+import im_private_i_public = m_public.i_public;
+import im_private_mi_public = m_public.mi_public;
+import im_private_mu_public = m_public.mu_public;
+export declare var publicUse_im_private_c_public: im_private_c_public;
+export declare var publicUse_im_private_e_public: im_private_e_public;
+export declare var publicUse_im_private_f_public: im_private_c_public;
+export declare var publicUse_im_private_v_public: number;
+export declare var publicUse_im_private_i_public: im_private_i_public;
+export declare var publicUse_im_private_mi_public: im_private_mi_public.c;
+export declare var publicUse_im_private_mu_public: im_private_mu_public.i;
+export {};
diff --git a/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithoutExport.symbols b/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithoutExport.symbols
new file mode 100644
index 0000000000000..f67b722355304
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithoutExport.symbols
@@ -0,0 +1,299 @@
+//// [tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts] ////
+
+=== privacyTopLevelInternalReferenceImportWithoutExport.ts ===
+// private elements
+namespace m_private {
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 0, 0))
+
+ export class c_private {
+>c_private : Symbol(c_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 1, 21))
+ }
+ export enum e_private {
+>e_private : Symbol(e_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 3, 5))
+
+ Happy,
+>Happy : Symbol(im_private_e_private.Happy, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 4, 27))
+
+ Grumpy
+>Grumpy : Symbol(im_private_e_private.Grumpy, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 5, 14))
+ }
+ export function f_private() {
+>f_private : Symbol(f_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 7, 5))
+
+ return new c_private();
+>c_private : Symbol(c_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 1, 21))
+ }
+ export var v_private = new c_private();
+>v_private : Symbol(v_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 11, 14))
+>c_private : Symbol(c_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 1, 21))
+
+ export interface i_private {
+>i_private : Symbol(i_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 11, 43))
+ }
+ export namespace mi_private {
+>mi_private : Symbol(mi_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 13, 5))
+
+ export class c {
+>c : Symbol(c, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 14, 33))
+ }
+ }
+ export namespace mu_private {
+>mu_private : Symbol(mu_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 17, 5))
+
+ export interface i {
+>i : Symbol(i, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 18, 33))
+ }
+ }
+}
+
+// Public elements
+export namespace m_public {
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 22, 1))
+
+ export class c_public {
+>c_public : Symbol(c_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 25, 27))
+ }
+ export enum e_public {
+>e_public : Symbol(e_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 27, 5))
+
+ Happy,
+>Happy : Symbol(im_private_e_public.Happy, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 28, 26))
+
+ Grumpy
+>Grumpy : Symbol(im_private_e_public.Grumpy, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 29, 14))
+ }
+ export function f_public() {
+>f_public : Symbol(f_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 31, 5))
+
+ return new c_public();
+>c_public : Symbol(c_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 25, 27))
+ }
+ export var v_public = 10;
+>v_public : Symbol(v_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 35, 14))
+
+ export interface i_public {
+>i_public : Symbol(i_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 35, 29))
+ }
+ export namespace mi_public {
+>mi_public : Symbol(mi_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 37, 5))
+
+ export class c {
+>c : Symbol(c, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 38, 32))
+ }
+ }
+ export namespace mu_public {
+>mu_public : Symbol(mu_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 41, 5))
+
+ export interface i {
+>i : Symbol(i, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 42, 32))
+ }
+ }
+}
+
+// No Privacy errors - importing private elements
+import im_private_c_private = m_private.c_private;
+>im_private_c_private : Symbol(im_private_c_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 46, 1))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 0, 0))
+>c_private : Symbol(im_private_c_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 1, 21))
+
+import im_private_e_private = m_private.e_private;
+>im_private_e_private : Symbol(im_private_e_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 49, 50))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 0, 0))
+>e_private : Symbol(im_private_e_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 3, 5))
+
+import im_private_f_private = m_private.f_private;
+>im_private_f_private : Symbol(im_private_f_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 50, 50))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 0, 0))
+>f_private : Symbol(im_private_f_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 7, 5))
+
+import im_private_v_private = m_private.v_private;
+>im_private_v_private : Symbol(im_private_v_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 51, 50))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 0, 0))
+>v_private : Symbol(im_private_v_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 11, 14))
+
+import im_private_i_private = m_private.i_private;
+>im_private_i_private : Symbol(im_private_i_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 52, 50))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 0, 0))
+>i_private : Symbol(im_private_i_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 11, 43))
+
+import im_private_mi_private = m_private.mi_private;
+>im_private_mi_private : Symbol(im_private_mi_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 53, 50))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 0, 0))
+>mi_private : Symbol(im_private_mi_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 13, 5))
+
+import im_private_mu_private = m_private.mu_private;
+>im_private_mu_private : Symbol(im_private_mu_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 54, 52))
+>m_private : Symbol(m_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 0, 0))
+>mu_private : Symbol(im_private_mu_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 17, 5))
+
+// Usage of above decls
+var privateUse_im_private_c_private = new im_private_c_private();
+>privateUse_im_private_c_private : Symbol(privateUse_im_private_c_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 58, 3))
+>im_private_c_private : Symbol(im_private_c_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 46, 1))
+
+export var publicUse_im_private_c_private = new im_private_c_private();
+>publicUse_im_private_c_private : Symbol(publicUse_im_private_c_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 59, 10))
+>im_private_c_private : Symbol(im_private_c_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 46, 1))
+
+var privateUse_im_private_e_private = im_private_e_private.Happy;
+>privateUse_im_private_e_private : Symbol(privateUse_im_private_e_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 60, 3))
+>im_private_e_private.Happy : Symbol(im_private_e_private.Happy, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 4, 27))
+>im_private_e_private : Symbol(im_private_e_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 49, 50))
+>Happy : Symbol(im_private_e_private.Happy, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 4, 27))
+
+export var publicUse_im_private_e_private = im_private_e_private.Grumpy;
+>publicUse_im_private_e_private : Symbol(publicUse_im_private_e_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 61, 10))
+>im_private_e_private.Grumpy : Symbol(im_private_e_private.Grumpy, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 5, 14))
+>im_private_e_private : Symbol(im_private_e_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 49, 50))
+>Grumpy : Symbol(im_private_e_private.Grumpy, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 5, 14))
+
+var privateUse_im_private_f_private = im_private_f_private();
+>privateUse_im_private_f_private : Symbol(privateUse_im_private_f_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 62, 3))
+>im_private_f_private : Symbol(im_private_f_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 50, 50))
+
+export var publicUse_im_private_f_private = im_private_f_private();
+>publicUse_im_private_f_private : Symbol(publicUse_im_private_f_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 63, 10))
+>im_private_f_private : Symbol(im_private_f_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 50, 50))
+
+var privateUse_im_private_v_private = im_private_v_private;
+>privateUse_im_private_v_private : Symbol(privateUse_im_private_v_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 64, 3))
+>im_private_v_private : Symbol(im_private_v_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 51, 50))
+
+export var publicUse_im_private_v_private = im_private_v_private;
+>publicUse_im_private_v_private : Symbol(publicUse_im_private_v_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 65, 10))
+>im_private_v_private : Symbol(im_private_v_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 51, 50))
+
+var privateUse_im_private_i_private: im_private_i_private;
+>privateUse_im_private_i_private : Symbol(privateUse_im_private_i_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 66, 3))
+>im_private_i_private : Symbol(im_private_i_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 52, 50))
+
+export var publicUse_im_private_i_private: im_private_i_private;
+>publicUse_im_private_i_private : Symbol(publicUse_im_private_i_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 67, 10))
+>im_private_i_private : Symbol(im_private_i_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 52, 50))
+
+var privateUse_im_private_mi_private = new im_private_mi_private.c();
+>privateUse_im_private_mi_private : Symbol(privateUse_im_private_mi_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 68, 3))
+>im_private_mi_private.c : Symbol(im_private_mi_private.c, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 14, 33))
+>im_private_mi_private : Symbol(im_private_mi_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 53, 50))
+>c : Symbol(im_private_mi_private.c, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 14, 33))
+
+export var publicUse_im_private_mi_private = new im_private_mi_private.c();
+>publicUse_im_private_mi_private : Symbol(publicUse_im_private_mi_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 69, 10))
+>im_private_mi_private.c : Symbol(im_private_mi_private.c, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 14, 33))
+>im_private_mi_private : Symbol(im_private_mi_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 53, 50))
+>c : Symbol(im_private_mi_private.c, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 14, 33))
+
+var privateUse_im_private_mu_private: im_private_mu_private.i;
+>privateUse_im_private_mu_private : Symbol(privateUse_im_private_mu_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 70, 3))
+>im_private_mu_private : Symbol(im_private_mu_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 54, 52))
+>i : Symbol(im_private_mu_private.i, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 18, 33))
+
+export var publicUse_im_private_mu_private: im_private_mu_private.i;
+>publicUse_im_private_mu_private : Symbol(publicUse_im_private_mu_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 71, 10))
+>im_private_mu_private : Symbol(im_private_mu_private, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 54, 52))
+>i : Symbol(im_private_mu_private.i, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 18, 33))
+
+
+// No Privacy errors - importing public elements
+import im_private_c_public = m_public.c_public;
+>im_private_c_public : Symbol(im_private_c_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 71, 68))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 22, 1))
+>c_public : Symbol(im_private_c_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 25, 27))
+
+import im_private_e_public = m_public.e_public;
+>im_private_e_public : Symbol(im_private_e_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 75, 47))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 22, 1))
+>e_public : Symbol(im_private_e_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 27, 5))
+
+import im_private_f_public = m_public.f_public;
+>im_private_f_public : Symbol(im_private_f_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 76, 47))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 22, 1))
+>f_public : Symbol(im_private_f_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 31, 5))
+
+import im_private_v_public = m_public.v_public;
+>im_private_v_public : Symbol(im_private_v_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 77, 47))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 22, 1))
+>v_public : Symbol(im_private_v_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 35, 14))
+
+import im_private_i_public = m_public.i_public;
+>im_private_i_public : Symbol(im_private_i_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 78, 47))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 22, 1))
+>i_public : Symbol(im_private_i_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 35, 29))
+
+import im_private_mi_public = m_public.mi_public;
+>im_private_mi_public : Symbol(im_private_mi_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 79, 47))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 22, 1))
+>mi_public : Symbol(im_private_mi_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 37, 5))
+
+import im_private_mu_public = m_public.mu_public;
+>im_private_mu_public : Symbol(im_private_mu_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 80, 49))
+>m_public : Symbol(m_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 22, 1))
+>mu_public : Symbol(im_private_mu_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 41, 5))
+
+// Usage of above decls
+var privateUse_im_private_c_public = new im_private_c_public();
+>privateUse_im_private_c_public : Symbol(privateUse_im_private_c_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 84, 3))
+>im_private_c_public : Symbol(im_private_c_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 71, 68))
+
+export var publicUse_im_private_c_public = new im_private_c_public();
+>publicUse_im_private_c_public : Symbol(publicUse_im_private_c_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 85, 10))
+>im_private_c_public : Symbol(im_private_c_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 71, 68))
+
+var privateUse_im_private_e_public = im_private_e_public.Happy;
+>privateUse_im_private_e_public : Symbol(privateUse_im_private_e_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 86, 3))
+>im_private_e_public.Happy : Symbol(im_private_e_public.Happy, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 28, 26))
+>im_private_e_public : Symbol(im_private_e_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 75, 47))
+>Happy : Symbol(im_private_e_public.Happy, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 28, 26))
+
+export var publicUse_im_private_e_public = im_private_e_public.Grumpy;
+>publicUse_im_private_e_public : Symbol(publicUse_im_private_e_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 87, 10))
+>im_private_e_public.Grumpy : Symbol(im_private_e_public.Grumpy, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 29, 14))
+>im_private_e_public : Symbol(im_private_e_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 75, 47))
+>Grumpy : Symbol(im_private_e_public.Grumpy, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 29, 14))
+
+var privateUse_im_private_f_public = im_private_f_public();
+>privateUse_im_private_f_public : Symbol(privateUse_im_private_f_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 88, 3))
+>im_private_f_public : Symbol(im_private_f_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 76, 47))
+
+export var publicUse_im_private_f_public = im_private_f_public();
+>publicUse_im_private_f_public : Symbol(publicUse_im_private_f_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 89, 10))
+>im_private_f_public : Symbol(im_private_f_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 76, 47))
+
+var privateUse_im_private_v_public = im_private_v_public;
+>privateUse_im_private_v_public : Symbol(privateUse_im_private_v_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 90, 3))
+>im_private_v_public : Symbol(im_private_v_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 77, 47))
+
+export var publicUse_im_private_v_public = im_private_v_public;
+>publicUse_im_private_v_public : Symbol(publicUse_im_private_v_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 91, 10))
+>im_private_v_public : Symbol(im_private_v_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 77, 47))
+
+var privateUse_im_private_i_public: im_private_i_public;
+>privateUse_im_private_i_public : Symbol(privateUse_im_private_i_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 92, 3))
+>im_private_i_public : Symbol(im_private_i_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 78, 47))
+
+export var publicUse_im_private_i_public: im_private_i_public;
+>publicUse_im_private_i_public : Symbol(publicUse_im_private_i_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 93, 10))
+>im_private_i_public : Symbol(im_private_i_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 78, 47))
+
+var privateUse_im_private_mi_public = new im_private_mi_public.c();
+>privateUse_im_private_mi_public : Symbol(privateUse_im_private_mi_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 94, 3))
+>im_private_mi_public.c : Symbol(im_private_mi_public.c, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 38, 32))
+>im_private_mi_public : Symbol(im_private_mi_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 79, 47))
+>c : Symbol(im_private_mi_public.c, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 38, 32))
+
+export var publicUse_im_private_mi_public = new im_private_mi_public.c();
+>publicUse_im_private_mi_public : Symbol(publicUse_im_private_mi_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 95, 10))
+>im_private_mi_public.c : Symbol(im_private_mi_public.c, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 38, 32))
+>im_private_mi_public : Symbol(im_private_mi_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 79, 47))
+>c : Symbol(im_private_mi_public.c, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 38, 32))
+
+var privateUse_im_private_mu_public: im_private_mu_public.i;
+>privateUse_im_private_mu_public : Symbol(privateUse_im_private_mu_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 96, 3))
+>im_private_mu_public : Symbol(im_private_mu_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 80, 49))
+>i : Symbol(im_private_mu_public.i, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 42, 32))
+
+export var publicUse_im_private_mu_public: im_private_mu_public.i;
+>publicUse_im_private_mu_public : Symbol(publicUse_im_private_mu_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 97, 10))
+>im_private_mu_public : Symbol(im_private_mu_public, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 80, 49))
+>i : Symbol(im_private_mu_public.i, Decl(privacyTopLevelInternalReferenceImportWithoutExport.ts, 42, 32))
+
diff --git a/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithoutExport.types b/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithoutExport.types
new file mode 100644
index 0000000000000..675eba6e64449
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privacyTopLevelInternalReferenceImportWithoutExport.types
@@ -0,0 +1,299 @@
+//// [tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts] ////
+
+=== privacyTopLevelInternalReferenceImportWithoutExport.ts ===
+// private elements
+namespace m_private {
+>m_private : typeof m_private
+
+ export class c_private {
+>c_private : c_private
+ }
+ export enum e_private {
+>e_private : e_private
+
+ Happy,
+>Happy : e_private.Happy
+
+ Grumpy
+>Grumpy : e_private.Grumpy
+ }
+ export function f_private() {
+>f_private : () => c_private
+
+ return new c_private();
+>new c_private() : c_private
+>c_private : typeof c_private
+ }
+ export var v_private = new c_private();
+>v_private : c_private
+>new c_private() : c_private
+>c_private : typeof c_private
+
+ export interface i_private {
+ }
+ export namespace mi_private {
+>mi_private : typeof mi_private
+
+ export class c {
+>c : c
+ }
+ }
+ export namespace mu_private {
+ export interface i {
+ }
+ }
+}
+
+// Public elements
+export namespace m_public {
+>m_public : typeof m_public
+
+ export class c_public {
+>c_public : c_public
+ }
+ export enum e_public {
+>e_public : e_public
+
+ Happy,
+>Happy : e_public.Happy
+
+ Grumpy
+>Grumpy : e_public.Grumpy
+ }
+ export function f_public() {
+>f_public : () => c_public
+
+ return new c_public();
+>new c_public() : c_public
+>c_public : typeof c_public
+ }
+ export var v_public = 10;
+>v_public : number
+>10 : 10
+
+ export interface i_public {
+ }
+ export namespace mi_public {
+>mi_public : typeof mi_public
+
+ export class c {
+>c : c
+ }
+ }
+ export namespace mu_public {
+ export interface i {
+ }
+ }
+}
+
+// No Privacy errors - importing private elements
+import im_private_c_private = m_private.c_private;
+>im_private_c_private : typeof im_private_c_private
+>m_private : typeof m_private
+>c_private : im_private_c_private
+
+import im_private_e_private = m_private.e_private;
+>im_private_e_private : typeof im_private_e_private
+>m_private : typeof m_private
+>e_private : im_private_e_private
+
+import im_private_f_private = m_private.f_private;
+>im_private_f_private : () => im_private_c_private
+>m_private : typeof m_private
+>f_private : () => im_private_c_private
+
+import im_private_v_private = m_private.v_private;
+>im_private_v_private : im_private_c_private
+>m_private : typeof m_private
+>v_private : im_private_c_private
+
+import im_private_i_private = m_private.i_private;
+>im_private_i_private : any
+>m_private : typeof m_private
+>i_private : im_private_i_private
+
+import im_private_mi_private = m_private.mi_private;
+>im_private_mi_private : typeof im_private_mi_private
+>m_private : typeof m_private
+>mi_private : typeof im_private_mi_private
+
+import im_private_mu_private = m_private.mu_private;
+>im_private_mu_private : any
+>m_private : typeof m_private
+>mu_private : any
+
+// Usage of above decls
+var privateUse_im_private_c_private = new im_private_c_private();
+>privateUse_im_private_c_private : im_private_c_private
+>new im_private_c_private() : im_private_c_private
+>im_private_c_private : typeof im_private_c_private
+
+export var publicUse_im_private_c_private = new im_private_c_private();
+>publicUse_im_private_c_private : im_private_c_private
+>new im_private_c_private() : im_private_c_private
+>im_private_c_private : typeof im_private_c_private
+
+var privateUse_im_private_e_private = im_private_e_private.Happy;
+>privateUse_im_private_e_private : im_private_e_private
+>im_private_e_private.Happy : im_private_e_private.Happy
+>im_private_e_private : typeof im_private_e_private
+>Happy : im_private_e_private.Happy
+
+export var publicUse_im_private_e_private = im_private_e_private.Grumpy;
+>publicUse_im_private_e_private : im_private_e_private
+>im_private_e_private.Grumpy : im_private_e_private.Grumpy
+>im_private_e_private : typeof im_private_e_private
+>Grumpy : im_private_e_private.Grumpy
+
+var privateUse_im_private_f_private = im_private_f_private();
+>privateUse_im_private_f_private : im_private_c_private
+>im_private_f_private() : im_private_c_private
+>im_private_f_private : () => im_private_c_private
+
+export var publicUse_im_private_f_private = im_private_f_private();
+>publicUse_im_private_f_private : im_private_c_private
+>im_private_f_private() : im_private_c_private
+>im_private_f_private : () => im_private_c_private
+
+var privateUse_im_private_v_private = im_private_v_private;
+>privateUse_im_private_v_private : im_private_c_private
+>im_private_v_private : im_private_c_private
+
+export var publicUse_im_private_v_private = im_private_v_private;
+>publicUse_im_private_v_private : im_private_c_private
+>im_private_v_private : im_private_c_private
+
+var privateUse_im_private_i_private: im_private_i_private;
+>privateUse_im_private_i_private : im_private_i_private
+
+export var publicUse_im_private_i_private: im_private_i_private;
+>publicUse_im_private_i_private : im_private_i_private
+
+var privateUse_im_private_mi_private = new im_private_mi_private.c();
+>privateUse_im_private_mi_private : im_private_mi_private.c
+>new im_private_mi_private.c() : im_private_mi_private.c
+>im_private_mi_private.c : typeof im_private_mi_private.c
+>im_private_mi_private : typeof im_private_mi_private
+>c : typeof im_private_mi_private.c
+
+export var publicUse_im_private_mi_private = new im_private_mi_private.c();
+>publicUse_im_private_mi_private : im_private_mi_private.c
+>new im_private_mi_private.c() : im_private_mi_private.c
+>im_private_mi_private.c : typeof im_private_mi_private.c
+>im_private_mi_private : typeof im_private_mi_private
+>c : typeof im_private_mi_private.c
+
+var privateUse_im_private_mu_private: im_private_mu_private.i;
+>privateUse_im_private_mu_private : im_private_mu_private.i
+>im_private_mu_private : any
+
+export var publicUse_im_private_mu_private: im_private_mu_private.i;
+>publicUse_im_private_mu_private : im_private_mu_private.i
+>im_private_mu_private : any
+
+
+// No Privacy errors - importing public elements
+import im_private_c_public = m_public.c_public;
+>im_private_c_public : typeof im_private_c_public
+>m_public : typeof m_public
+>c_public : im_private_c_public
+
+import im_private_e_public = m_public.e_public;
+>im_private_e_public : typeof im_private_e_public
+>m_public : typeof m_public
+>e_public : im_private_e_public
+
+import im_private_f_public = m_public.f_public;
+>im_private_f_public : () => im_private_c_public
+>m_public : typeof m_public
+>f_public : () => im_private_c_public
+
+import im_private_v_public = m_public.v_public;
+>im_private_v_public : number
+>m_public : typeof m_public
+>v_public : number
+
+import im_private_i_public = m_public.i_public;
+>im_private_i_public : any
+>m_public : typeof m_public
+>i_public : im_private_i_public
+
+import im_private_mi_public = m_public.mi_public;
+>im_private_mi_public : typeof im_private_mi_public
+>m_public : typeof m_public
+>mi_public : typeof im_private_mi_public
+
+import im_private_mu_public = m_public.mu_public;
+>im_private_mu_public : any
+>m_public : typeof m_public
+>mu_public : any
+
+// Usage of above decls
+var privateUse_im_private_c_public = new im_private_c_public();
+>privateUse_im_private_c_public : im_private_c_public
+>new im_private_c_public() : im_private_c_public
+>im_private_c_public : typeof im_private_c_public
+
+export var publicUse_im_private_c_public = new im_private_c_public();
+>publicUse_im_private_c_public : im_private_c_public
+>new im_private_c_public() : im_private_c_public
+>im_private_c_public : typeof im_private_c_public
+
+var privateUse_im_private_e_public = im_private_e_public.Happy;
+>privateUse_im_private_e_public : im_private_e_public
+>im_private_e_public.Happy : im_private_e_public.Happy
+>im_private_e_public : typeof im_private_e_public
+>Happy : im_private_e_public.Happy
+
+export var publicUse_im_private_e_public = im_private_e_public.Grumpy;
+>publicUse_im_private_e_public : im_private_e_public
+>im_private_e_public.Grumpy : im_private_e_public.Grumpy
+>im_private_e_public : typeof im_private_e_public
+>Grumpy : im_private_e_public.Grumpy
+
+var privateUse_im_private_f_public = im_private_f_public();
+>privateUse_im_private_f_public : im_private_c_public
+>im_private_f_public() : im_private_c_public
+>im_private_f_public : () => im_private_c_public
+
+export var publicUse_im_private_f_public = im_private_f_public();
+>publicUse_im_private_f_public : im_private_c_public
+>im_private_f_public() : im_private_c_public
+>im_private_f_public : () => im_private_c_public
+
+var privateUse_im_private_v_public = im_private_v_public;
+>privateUse_im_private_v_public : number
+>im_private_v_public : number
+
+export var publicUse_im_private_v_public = im_private_v_public;
+>publicUse_im_private_v_public : number
+>im_private_v_public : number
+
+var privateUse_im_private_i_public: im_private_i_public;
+>privateUse_im_private_i_public : im_private_i_public
+
+export var publicUse_im_private_i_public: im_private_i_public;
+>publicUse_im_private_i_public : im_private_i_public
+
+var privateUse_im_private_mi_public = new im_private_mi_public.c();
+>privateUse_im_private_mi_public : im_private_mi_public.c
+>new im_private_mi_public.c() : im_private_mi_public.c
+>im_private_mi_public.c : typeof im_private_mi_public.c
+>im_private_mi_public : typeof im_private_mi_public
+>c : typeof im_private_mi_public.c
+
+export var publicUse_im_private_mi_public = new im_private_mi_public.c();
+>publicUse_im_private_mi_public : im_private_mi_public.c
+>new im_private_mi_public.c() : im_private_mi_public.c
+>im_private_mi_public.c : typeof im_private_mi_public.c
+>im_private_mi_public : typeof im_private_mi_public
+>c : typeof im_private_mi_public.c
+
+var privateUse_im_private_mu_public: im_private_mu_public.i;
+>privateUse_im_private_mu_public : im_private_mu_public.i
+>im_private_mu_public : any
+
+export var publicUse_im_private_mu_public: im_private_mu_public.i;
+>publicUse_im_private_mu_public : im_private_mu_public.i
+>im_private_mu_public : any
+
diff --git a/tsc/testdata/baselines/reference/compiler/privatePropertyUsingObjectType.errors.txt b/tsc/testdata/baselines/reference/compiler/privatePropertyUsingObjectType.errors.txt
new file mode 100644
index 0000000000000..e93038b53488e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privatePropertyUsingObjectType.errors.txt
@@ -0,0 +1,24 @@
+privatePropertyUsingObjectType.ts(2,13): error TS2564: Property '_filterProviders' has no initializer and is not definitely assigned in the constructor.
+privatePropertyUsingObjectType.ts(3,13): error TS2564: Property '_filterProviders2' has no initializer and is not definitely assigned in the constructor.
+privatePropertyUsingObjectType.ts(4,13): error TS2564: Property '_filterProviders3' has no initializer and is not definitely assigned in the constructor.
+privatePropertyUsingObjectType.ts(5,13): error TS2564: Property '_filterProviders4' has no initializer and is not definitely assigned in the constructor.
+
+
+==== privatePropertyUsingObjectType.ts (4 errors) ====
+ export class FilterManager {
+ private _filterProviders: { index: IFilterProvider; };
+ ~~~~~~~~~~~~~~~~
+!!! error TS2564: Property '_filterProviders' has no initializer and is not definitely assigned in the constructor.
+ private _filterProviders2: { [index: number]: IFilterProvider; };
+ ~~~~~~~~~~~~~~~~~
+!!! error TS2564: Property '_filterProviders2' has no initializer and is not definitely assigned in the constructor.
+ private _filterProviders3: { (index: number): IFilterProvider; };
+ ~~~~~~~~~~~~~~~~~
+!!! error TS2564: Property '_filterProviders3' has no initializer and is not definitely assigned in the constructor.
+ private _filterProviders4: (index: number) => IFilterProvider;
+ ~~~~~~~~~~~~~~~~~
+!!! error TS2564: Property '_filterProviders4' has no initializer and is not definitely assigned in the constructor.
+ }
+ export interface IFilterProvider {
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/privatePropertyUsingObjectType.js b/tsc/testdata/baselines/reference/compiler/privatePropertyUsingObjectType.js
new file mode 100644
index 0000000000000..31dd304c9608b
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privatePropertyUsingObjectType.js
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/privatePropertyUsingObjectType.ts] ////
+
+//// [privatePropertyUsingObjectType.ts]
+export class FilterManager {
+ private _filterProviders: { index: IFilterProvider; };
+ private _filterProviders2: { [index: number]: IFilterProvider; };
+ private _filterProviders3: { (index: number): IFilterProvider; };
+ private _filterProviders4: (index: number) => IFilterProvider;
+}
+export interface IFilterProvider {
+}
+
+
+//// [privatePropertyUsingObjectType.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FilterManager = void 0;
+class FilterManager {
+}
+exports.FilterManager = FilterManager;
diff --git a/tsc/testdata/baselines/reference/compiler/privatePropertyUsingObjectType.symbols b/tsc/testdata/baselines/reference/compiler/privatePropertyUsingObjectType.symbols
new file mode 100644
index 0000000000000..bab59221db894
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privatePropertyUsingObjectType.symbols
@@ -0,0 +1,30 @@
+//// [tests/cases/compiler/privatePropertyUsingObjectType.ts] ////
+
+=== privatePropertyUsingObjectType.ts ===
+export class FilterManager {
+>FilterManager : Symbol(FilterManager, Decl(privatePropertyUsingObjectType.ts, 0, 0))
+
+ private _filterProviders: { index: IFilterProvider; };
+>_filterProviders : Symbol(FilterManager._filterProviders, Decl(privatePropertyUsingObjectType.ts, 0, 28))
+>index : Symbol(index, Decl(privatePropertyUsingObjectType.ts, 1, 31))
+>IFilterProvider : Symbol(IFilterProvider, Decl(privatePropertyUsingObjectType.ts, 5, 1))
+
+ private _filterProviders2: { [index: number]: IFilterProvider; };
+>_filterProviders2 : Symbol(FilterManager._filterProviders2, Decl(privatePropertyUsingObjectType.ts, 1, 58))
+>index : Symbol(index, Decl(privatePropertyUsingObjectType.ts, 2, 34))
+>IFilterProvider : Symbol(IFilterProvider, Decl(privatePropertyUsingObjectType.ts, 5, 1))
+
+ private _filterProviders3: { (index: number): IFilterProvider; };
+>_filterProviders3 : Symbol(FilterManager._filterProviders3, Decl(privatePropertyUsingObjectType.ts, 2, 69))
+>index : Symbol(index, Decl(privatePropertyUsingObjectType.ts, 3, 34))
+>IFilterProvider : Symbol(IFilterProvider, Decl(privatePropertyUsingObjectType.ts, 5, 1))
+
+ private _filterProviders4: (index: number) => IFilterProvider;
+>_filterProviders4 : Symbol(FilterManager._filterProviders4, Decl(privatePropertyUsingObjectType.ts, 3, 69))
+>index : Symbol(index, Decl(privatePropertyUsingObjectType.ts, 4, 32))
+>IFilterProvider : Symbol(IFilterProvider, Decl(privatePropertyUsingObjectType.ts, 5, 1))
+}
+export interface IFilterProvider {
+>IFilterProvider : Symbol(IFilterProvider, Decl(privatePropertyUsingObjectType.ts, 5, 1))
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/privatePropertyUsingObjectType.types b/tsc/testdata/baselines/reference/compiler/privatePropertyUsingObjectType.types
new file mode 100644
index 0000000000000..3c3816b5962d7
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/privatePropertyUsingObjectType.types
@@ -0,0 +1,25 @@
+//// [tests/cases/compiler/privatePropertyUsingObjectType.ts] ////
+
+=== privatePropertyUsingObjectType.ts ===
+export class FilterManager {
+>FilterManager : FilterManager
+
+ private _filterProviders: { index: IFilterProvider; };
+>_filterProviders : { index: IFilterProvider; }
+>index : IFilterProvider
+
+ private _filterProviders2: { [index: number]: IFilterProvider; };
+>_filterProviders2 : { [index: number]: IFilterProvider; }
+>index : number
+
+ private _filterProviders3: { (index: number): IFilterProvider; };
+>_filterProviders3 : (index: number) => IFilterProvider
+>index : number
+
+ private _filterProviders4: (index: number) => IFilterProvider;
+>_filterProviders4 : (index: number) => IFilterProvider
+>index : number
+}
+export interface IFilterProvider {
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/relativeNamesInClassicResolution.errors.txt b/tsc/testdata/baselines/reference/compiler/relativeNamesInClassicResolution.errors.txt
new file mode 100644
index 0000000000000..51c3a0168cf11
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/relativeNamesInClassicResolution.errors.txt
@@ -0,0 +1,10 @@
+somefolder/a.ts(1,17): error TS2307: Cannot find module './b' or its corresponding type declarations.
+
+
+==== somefolder/a.ts (1 errors) ====
+ import {x} from "./b"
+ ~~~~~
+!!! error TS2307: Cannot find module './b' or its corresponding type declarations.
+
+==== b.ts (0 errors) ====
+ export let x = 1;
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/relativeNamesInClassicResolution.js b/tsc/testdata/baselines/reference/compiler/relativeNamesInClassicResolution.js
new file mode 100644
index 0000000000000..ee773ef421435
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/relativeNamesInClassicResolution.js
@@ -0,0 +1,16 @@
+//// [tests/cases/compiler/relativeNamesInClassicResolution.ts] ////
+
+//// [a.ts]
+import {x} from "./b"
+
+//// [b.ts]
+export let x = 1;
+
+//// [a.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//// [b.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+exports.x = 1;
diff --git a/tsc/testdata/baselines/reference/compiler/relativeNamesInClassicResolution.symbols b/tsc/testdata/baselines/reference/compiler/relativeNamesInClassicResolution.symbols
new file mode 100644
index 0000000000000..776bcc6302ca5
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/relativeNamesInClassicResolution.symbols
@@ -0,0 +1,10 @@
+//// [tests/cases/compiler/relativeNamesInClassicResolution.ts] ////
+
+=== somefolder/a.ts ===
+import {x} from "./b"
+>x : Symbol(x, Decl(a.ts, 0, 8))
+
+=== b.ts ===
+export let x = 1;
+>x : Symbol(x, Decl(b.ts, 0, 10))
+
diff --git a/tsc/testdata/baselines/reference/compiler/relativeNamesInClassicResolution.types b/tsc/testdata/baselines/reference/compiler/relativeNamesInClassicResolution.types
new file mode 100644
index 0000000000000..4e8d753c930b9
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/relativeNamesInClassicResolution.types
@@ -0,0 +1,11 @@
+//// [tests/cases/compiler/relativeNamesInClassicResolution.ts] ////
+
+=== somefolder/a.ts ===
+import {x} from "./b"
+>x : any
+
+=== b.ts ===
+export let x = 1;
+>x : number
+>1 : 1
+
diff --git a/tsc/testdata/baselines/reference/compiler/requireEmitSemicolon.errors.txt b/tsc/testdata/baselines/reference/compiler/requireEmitSemicolon.errors.txt
new file mode 100644
index 0000000000000..ef87e8aeae4a2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/requireEmitSemicolon.errors.txt
@@ -0,0 +1,23 @@
+requireEmitSemicolon_1.ts(2,20): error TS2307: Cannot find module 'requireEmitSemicolon_0' or its corresponding type declarations.
+
+
+==== requireEmitSemicolon_1.ts (1 errors) ====
+ ///
+ import P = require("requireEmitSemicolon_0"); // bug was we were not emitting a ; here and causing runtime failures in node
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS2307: Cannot find module 'requireEmitSemicolon_0' or its corresponding type declarations.
+
+ export namespace Database {
+ export class DB {
+ public findPerson(id: number): P.Models.Person {
+ return new P.Models.Person("Rock");
+ }
+ }
+ }
+==== requireEmitSemicolon_0.ts (0 errors) ====
+ export namespace Models {
+ export class Person {
+ constructor(name: string) { }
+ }
+ }
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/requireEmitSemicolon.js b/tsc/testdata/baselines/reference/compiler/requireEmitSemicolon.js
new file mode 100644
index 0000000000000..f4dc0fe616ba3
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/requireEmitSemicolon.js
@@ -0,0 +1,47 @@
+//// [tests/cases/compiler/requireEmitSemicolon.ts] ////
+
+//// [requireEmitSemicolon_0.ts]
+export namespace Models {
+ export class Person {
+ constructor(name: string) { }
+ }
+}
+
+//// [requireEmitSemicolon_1.ts]
+///
+import P = require("requireEmitSemicolon_0"); // bug was we were not emitting a ; here and causing runtime failures in node
+
+export namespace Database {
+ export class DB {
+ public findPerson(id: number): P.Models.Person {
+ return new P.Models.Person("Rock");
+ }
+ }
+}
+
+//// [requireEmitSemicolon_0.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Models = void 0;
+var Models;
+(function (Models) {
+ class Person {
+ constructor(name) { }
+ }
+ Models.Person = Person;
+})(Models || (exports.Models = Models = {}));
+//// [requireEmitSemicolon_1.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Database = void 0;
+///
+const P = require("requireEmitSemicolon_0"); // bug was we were not emitting a ; here and causing runtime failures in node
+var Database;
+(function (Database) {
+ class DB {
+ findPerson(id) {
+ return new P.Models.Person("Rock");
+ }
+ }
+ Database.DB = DB;
+})(Database || (exports.Database = Database = {}));
diff --git a/tsc/testdata/baselines/reference/compiler/requireEmitSemicolon.symbols b/tsc/testdata/baselines/reference/compiler/requireEmitSemicolon.symbols
new file mode 100644
index 0000000000000..718014af1cba2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/requireEmitSemicolon.symbols
@@ -0,0 +1,37 @@
+//// [tests/cases/compiler/requireEmitSemicolon.ts] ////
+
+=== requireEmitSemicolon_1.ts ===
+///
+import P = require("requireEmitSemicolon_0"); // bug was we were not emitting a ; here and causing runtime failures in node
+>P : Symbol(P, Decl(requireEmitSemicolon_1.ts, 0, 0))
+
+export namespace Database {
+>Database : Symbol(Database, Decl(requireEmitSemicolon_1.ts, 1, 45))
+
+ export class DB {
+>DB : Symbol(DB, Decl(requireEmitSemicolon_1.ts, 3, 27))
+
+ public findPerson(id: number): P.Models.Person {
+>findPerson : Symbol(DB.findPerson, Decl(requireEmitSemicolon_1.ts, 4, 18))
+>id : Symbol(id, Decl(requireEmitSemicolon_1.ts, 5, 23))
+>P : Symbol(P, Decl(requireEmitSemicolon_1.ts, 0, 0))
+>Models : Symbol(P.Models)
+>Person : Symbol(P.Models.Person)
+
+ return new P.Models.Person("Rock");
+>P : Symbol(P, Decl(requireEmitSemicolon_1.ts, 0, 0))
+ }
+ }
+}
+=== requireEmitSemicolon_0.ts ===
+export namespace Models {
+>Models : Symbol(Models, Decl(requireEmitSemicolon_0.ts, 0, 0))
+
+ export class Person {
+>Person : Symbol(Person, Decl(requireEmitSemicolon_0.ts, 0, 25))
+
+ constructor(name: string) { }
+>name : Symbol(name, Decl(requireEmitSemicolon_0.ts, 2, 20))
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/requireEmitSemicolon.types b/tsc/testdata/baselines/reference/compiler/requireEmitSemicolon.types
new file mode 100644
index 0000000000000..a18da29ad875e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/requireEmitSemicolon.types
@@ -0,0 +1,42 @@
+//// [tests/cases/compiler/requireEmitSemicolon.ts] ////
+
+=== requireEmitSemicolon_1.ts ===
+///
+import P = require("requireEmitSemicolon_0"); // bug was we were not emitting a ; here and causing runtime failures in node
+>P : any
+
+export namespace Database {
+>Database : typeof Database
+
+ export class DB {
+>DB : DB
+
+ public findPerson(id: number): P.Models.Person {
+>findPerson : (id: number) => P.Models.Person
+>id : number
+>P : any
+>Models : any
+
+ return new P.Models.Person("Rock");
+>new P.Models.Person("Rock") : any
+>P.Models.Person : any
+>P.Models : any
+>P : any
+>Models : any
+>Person : any
+>"Rock" : "Rock"
+ }
+ }
+}
+=== requireEmitSemicolon_0.ts ===
+export namespace Models {
+>Models : typeof Models
+
+ export class Person {
+>Person : Person
+
+ constructor(name: string) { }
+>name : string
+ }
+}
+
diff --git a/tsc/testdata/baselines/reference/compiler/signaturesUseJSDocForOptionalParameters.js b/tsc/testdata/baselines/reference/compiler/signaturesUseJSDocForOptionalParameters.js
new file mode 100644
index 0000000000000..c8622126557e0
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/signaturesUseJSDocForOptionalParameters.js
@@ -0,0 +1,35 @@
+//// [tests/cases/compiler/signaturesUseJSDocForOptionalParameters.ts] ////
+
+//// [jsDocOptionality.js]
+function MyClass() {
+ this.prop = null;
+}
+/**
+ * @param {string} required
+ * @param {string} [notRequired]
+ * @returns {MyClass}
+ */
+MyClass.prototype.optionalParam = function(required, notRequired) {
+ return this;
+};
+let pInst = new MyClass();
+let c1 = pInst.optionalParam('hello')
+let c2 = pInst.optionalParam('hello', null)
+
+
+//// [jsDocOptionality.js]
+"use strict";
+function MyClass() {
+ this.prop = null;
+}
+/**
+ * @param {string} required
+ * @param {string} [notRequired]
+ * @returns {MyClass}
+ */
+MyClass.prototype.optionalParam = function (required, notRequired) {
+ return this;
+};
+let pInst = new MyClass();
+let c1 = pInst.optionalParam('hello');
+let c2 = pInst.optionalParam('hello', null);
diff --git a/tsc/testdata/baselines/reference/compiler/signaturesUseJSDocForOptionalParameters.symbols b/tsc/testdata/baselines/reference/compiler/signaturesUseJSDocForOptionalParameters.symbols
new file mode 100644
index 0000000000000..8d03715858c42
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/signaturesUseJSDocForOptionalParameters.symbols
@@ -0,0 +1,34 @@
+//// [tests/cases/compiler/signaturesUseJSDocForOptionalParameters.ts] ////
+
+=== jsDocOptionality.js ===
+function MyClass() {
+>MyClass : Symbol(MyClass, Decl(jsDocOptionality.js, 0, 0))
+
+ this.prop = null;
+}
+/**
+ * @param {string} required
+ * @param {string} [notRequired]
+ * @returns {MyClass}
+ */
+MyClass.prototype.optionalParam = function(required, notRequired) {
+>MyClass.prototype : Symbol(Function.prototype, Decl(lib.es5.d.ts, --, --))
+>MyClass : Symbol(MyClass, Decl(jsDocOptionality.js, 0, 0))
+>prototype : Symbol(Function.prototype, Decl(lib.es5.d.ts, --, --))
+>required : Symbol(required, Decl(jsDocOptionality.js, 8, 43))
+>notRequired : Symbol(notRequired, Decl(jsDocOptionality.js, 8, 52))
+
+ return this;
+};
+let pInst = new MyClass();
+>pInst : Symbol(pInst, Decl(jsDocOptionality.js, 11, 3))
+>MyClass : Symbol(MyClass, Decl(jsDocOptionality.js, 0, 0))
+
+let c1 = pInst.optionalParam('hello')
+>c1 : Symbol(c1, Decl(jsDocOptionality.js, 12, 3))
+>pInst : Symbol(pInst, Decl(jsDocOptionality.js, 11, 3))
+
+let c2 = pInst.optionalParam('hello', null)
+>c2 : Symbol(c2, Decl(jsDocOptionality.js, 13, 3))
+>pInst : Symbol(pInst, Decl(jsDocOptionality.js, 11, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/signaturesUseJSDocForOptionalParameters.types b/tsc/testdata/baselines/reference/compiler/signaturesUseJSDocForOptionalParameters.types
new file mode 100644
index 0000000000000..6bd3ffd6268f4
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/signaturesUseJSDocForOptionalParameters.types
@@ -0,0 +1,53 @@
+//// [tests/cases/compiler/signaturesUseJSDocForOptionalParameters.ts] ////
+
+=== jsDocOptionality.js ===
+function MyClass() {
+>MyClass : () => void
+
+ this.prop = null;
+>this.prop = null : null
+>this.prop : any
+>this : any
+>prop : any
+}
+/**
+ * @param {string} required
+ * @param {string} [notRequired]
+ * @returns {MyClass}
+ */
+MyClass.prototype.optionalParam = function(required, notRequired) {
+>MyClass.prototype.optionalParam = function(required, notRequired) { return this;} : (required: string, notRequired?: string) => MyClass
+>MyClass.prototype.optionalParam : any
+>MyClass.prototype : any
+>MyClass : () => void
+>prototype : any
+>optionalParam : any
+>function(required, notRequired) { return this;} : (required: string, notRequired?: string) => MyClass
+>required : string
+>notRequired : string | undefined
+
+ return this;
+>this : any
+
+};
+let pInst = new MyClass();
+>pInst : any
+>new MyClass() : any
+>MyClass : () => void
+
+let c1 = pInst.optionalParam('hello')
+>c1 : any
+>pInst.optionalParam('hello') : any
+>pInst.optionalParam : any
+>pInst : any
+>optionalParam : any
+>'hello' : "hello"
+
+let c2 = pInst.optionalParam('hello', null)
+>c2 : any
+>pInst.optionalParam('hello', null) : any
+>pInst.optionalParam : any
+>pInst : any
+>optionalParam : any
+>'hello' : "hello"
+
diff --git a/tsc/testdata/baselines/reference/compiler/topLevelExports.js b/tsc/testdata/baselines/reference/compiler/topLevelExports.js
new file mode 100644
index 0000000000000..7ef7f94e9b1d8
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/topLevelExports.js
@@ -0,0 +1,16 @@
+//// [tests/cases/compiler/topLevelExports.ts] ////
+
+//// [topLevelExports.ts]
+export var foo = 3;
+
+function log(n:number) { return n;}
+
+void log(foo).toString();
+
+//// [topLevelExports.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.foo = void 0;
+exports.foo = 3;
+function log(n) { return n; }
+void log(exports.foo).toString();
diff --git a/tsc/testdata/baselines/reference/compiler/topLevelExports.symbols b/tsc/testdata/baselines/reference/compiler/topLevelExports.symbols
new file mode 100644
index 0000000000000..b65af27114134
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/topLevelExports.symbols
@@ -0,0 +1,17 @@
+//// [tests/cases/compiler/topLevelExports.ts] ////
+
+=== topLevelExports.ts ===
+export var foo = 3;
+>foo : Symbol(foo, Decl(topLevelExports.ts, 0, 10))
+
+function log(n:number) { return n;}
+>log : Symbol(log, Decl(topLevelExports.ts, 0, 19))
+>n : Symbol(n, Decl(topLevelExports.ts, 2, 13))
+>n : Symbol(n, Decl(topLevelExports.ts, 2, 13))
+
+void log(foo).toString();
+>log(foo).toString : Symbol(Number.toString, Decl(lib.es5.d.ts, --, --))
+>log : Symbol(log, Decl(topLevelExports.ts, 0, 19))
+>foo : Symbol(foo, Decl(topLevelExports.ts, 0, 10))
+>toString : Symbol(Number.toString, Decl(lib.es5.d.ts, --, --))
+
diff --git a/tsc/testdata/baselines/reference/compiler/topLevelExports.types b/tsc/testdata/baselines/reference/compiler/topLevelExports.types
new file mode 100644
index 0000000000000..cb22a7327c379
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/topLevelExports.types
@@ -0,0 +1,21 @@
+//// [tests/cases/compiler/topLevelExports.ts] ////
+
+=== topLevelExports.ts ===
+export var foo = 3;
+>foo : number
+>3 : 3
+
+function log(n:number) { return n;}
+>log : (n: number) => number
+>n : number
+>n : number
+
+void log(foo).toString();
+>void log(foo).toString() : undefined
+>log(foo).toString() : string
+>log(foo).toString : (radix?: number) => string
+>log(foo) : number
+>log : (n: number) => number
+>foo : number
+>toString : (radix?: number) => string
+
diff --git a/tsc/testdata/baselines/reference/compiler/tsconfigMapOptionsAreCaseInsensitive.js b/tsc/testdata/baselines/reference/compiler/tsconfigMapOptionsAreCaseInsensitive.js
new file mode 100644
index 0000000000000..0e4d3347df8ad
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/tsconfigMapOptionsAreCaseInsensitive.js
@@ -0,0 +1,27 @@
+//// [tests/cases/compiler/tsconfigMapOptionsAreCaseInsensitive.ts] ////
+
+//// [other.ts]
+export default 42;
+
+//// [index.ts]
+import Answer from "./other.js";
+const x = 10 + Answer;
+export {
+ x
+};
+
+
+//// [other.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = 42;
+//// [index.js]
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x = void 0;
+const other_js_1 = __importDefault(require("./other.js"));
+const x = 10 + other_js_1.default;
+exports.x = x;
diff --git a/tsc/testdata/baselines/reference/compiler/tsconfigMapOptionsAreCaseInsensitive.symbols b/tsc/testdata/baselines/reference/compiler/tsconfigMapOptionsAreCaseInsensitive.symbols
new file mode 100644
index 0000000000000..a1c344770933e
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/tsconfigMapOptionsAreCaseInsensitive.symbols
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/tsconfigMapOptionsAreCaseInsensitive.ts] ////
+
+=== other.ts ===
+
+export default 42;
+
+=== index.ts ===
+import Answer from "./other.js";
+>Answer : Symbol(Answer, Decl(index.ts, 0, 6))
+
+const x = 10 + Answer;
+>x : Symbol(x, Decl(index.ts, 1, 5))
+>Answer : Symbol(Answer, Decl(index.ts, 0, 6))
+
+export {
+ x
+>x : Symbol(x, Decl(index.ts, 2, 8))
+
+};
+
diff --git a/tsc/testdata/baselines/reference/compiler/tsconfigMapOptionsAreCaseInsensitive.types b/tsc/testdata/baselines/reference/compiler/tsconfigMapOptionsAreCaseInsensitive.types
new file mode 100644
index 0000000000000..ca95a71d8bdcf
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/tsconfigMapOptionsAreCaseInsensitive.types
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/tsconfigMapOptionsAreCaseInsensitive.ts] ////
+
+=== other.ts ===
+
+export default 42;
+
+=== index.ts ===
+import Answer from "./other.js";
+>Answer : 42
+
+const x = 10 + Answer;
+>x : number
+>10 + Answer : number
+>10 : 10
+>Answer : 42
+
+export {
+ x
+>x : number
+
+};
+
diff --git a/tsc/testdata/baselines/reference/compiler/typeAliasDeclarationEmit2(target=es2015).js b/tsc/testdata/baselines/reference/compiler/typeAliasDeclarationEmit2(target=es2015).js
new file mode 100644
index 0000000000000..8353679ace7d2
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/typeAliasDeclarationEmit2(target=es2015).js
@@ -0,0 +1,14 @@
+//// [tests/cases/compiler/typeAliasDeclarationEmit2.ts] ////
+
+//// [typeAliasDeclarationEmit2.ts]
+export type A = { value: a };
+
+//// [typeAliasDeclarationEmit2.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+
+
+//// [typeAliasDeclarationEmit2.d.ts]
+export type A = {
+ value: a;
+};
diff --git a/tsc/testdata/baselines/reference/compiler/typeAliasDeclarationEmit2(target=es2015).symbols b/tsc/testdata/baselines/reference/compiler/typeAliasDeclarationEmit2(target=es2015).symbols
new file mode 100644
index 0000000000000..b39aa15995452
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/typeAliasDeclarationEmit2(target=es2015).symbols
@@ -0,0 +1,9 @@
+//// [tests/cases/compiler/typeAliasDeclarationEmit2.ts] ////
+
+=== typeAliasDeclarationEmit2.ts ===
+export type A = { value: a };
+>A : Symbol(A, Decl(typeAliasDeclarationEmit2.ts, 0, 0))
+>a : Symbol(a, Decl(typeAliasDeclarationEmit2.ts, 0, 14))
+>value : Symbol(value, Decl(typeAliasDeclarationEmit2.ts, 0, 20))
+>a : Symbol(a, Decl(typeAliasDeclarationEmit2.ts, 0, 14))
+
diff --git a/tsc/testdata/baselines/reference/compiler/typeAliasDeclarationEmit2(target=es2015).types b/tsc/testdata/baselines/reference/compiler/typeAliasDeclarationEmit2(target=es2015).types
new file mode 100644
index 0000000000000..bfb594968918f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/typeAliasDeclarationEmit2(target=es2015).types
@@ -0,0 +1,7 @@
+//// [tests/cases/compiler/typeAliasDeclarationEmit2.ts] ////
+
+=== typeAliasDeclarationEmit2.ts ===
+export type A = { value: a };
+>A : A
+>value : a
+
diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterCompatibilityAccrossDeclarations.errors.txt b/tsc/testdata/baselines/reference/compiler/typeParameterCompatibilityAccrossDeclarations.errors.txt
new file mode 100644
index 0000000000000..5a20b3aee5f92
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/typeParameterCompatibilityAccrossDeclarations.errors.txt
@@ -0,0 +1,36 @@
+typeParameterCompatibilityAccrossDeclarations.ts(2,31): error TS2322: Type 'null' is not assignable to type 'T'.
+ 'T' could be instantiated with an arbitrary type which could be unrelated to 'null'.
+typeParameterCompatibilityAccrossDeclarations.ts(17,5): error TS2454: Variable 'i' is used before being assigned.
+typeParameterCompatibilityAccrossDeclarations.ts(20,6): error TS2454: Variable 'i2' is used before being assigned.
+
+
+==== typeParameterCompatibilityAccrossDeclarations.ts (3 errors) ====
+ var a = {
+ x: function (y: T): T { return null; }
+ ~~~~~~
+!!! error TS2322: Type 'null' is not assignable to type 'T'.
+!!! error TS2322: 'T' could be instantiated with an arbitrary type which could be unrelated to 'null'.
+ }
+ var a2 = {
+ x: function (y: any): any { return null; }
+ }
+ export interface I {
+ x(y: T): T;
+ }
+ export interface I2 {
+ x(y: any): any;
+ }
+
+ var i: I;
+ var i2: I2;
+
+ a = i; // error
+ ~
+!!! error TS2454: Variable 'i' is used before being assigned.
+ i = a; // error
+
+ a2 = i2; // no error
+ ~~
+!!! error TS2454: Variable 'i2' is used before being assigned.
+ i2 = a2; // no error
+
\ No newline at end of file
diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterCompatibilityAccrossDeclarations.js b/tsc/testdata/baselines/reference/compiler/typeParameterCompatibilityAccrossDeclarations.js
new file mode 100644
index 0000000000000..ac750279a27c4
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/typeParameterCompatibilityAccrossDeclarations.js
@@ -0,0 +1,41 @@
+//// [tests/cases/compiler/typeParameterCompatibilityAccrossDeclarations.ts] ////
+
+//// [typeParameterCompatibilityAccrossDeclarations.ts]
+var a = {
+ x: function (y: T): T { return null; }
+}
+var a2 = {
+ x: function (y: any): any { return null; }
+}
+export interface I {
+ x(y: T): T;
+}
+export interface I2 {
+ x(y: any): any;
+}
+
+var i: I;
+var i2: I2;
+
+a = i; // error
+i = a; // error
+
+a2 = i2; // no error
+i2 = a2; // no error
+
+
+//// [typeParameterCompatibilityAccrossDeclarations.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var a = {
+ x: function (y) { return null; }
+};
+var a2 = {
+ x: function (y) { return null; }
+};
+var i;
+var i2;
+a = i; // error
+i = a; // error
+a2 = i2; // no error
+i2 = a2; // no error
diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterCompatibilityAccrossDeclarations.symbols b/tsc/testdata/baselines/reference/compiler/typeParameterCompatibilityAccrossDeclarations.symbols
new file mode 100644
index 0000000000000..fada6064e1c83
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/typeParameterCompatibilityAccrossDeclarations.symbols
@@ -0,0 +1,62 @@
+//// [tests/cases/compiler/typeParameterCompatibilityAccrossDeclarations.ts] ////
+
+=== typeParameterCompatibilityAccrossDeclarations.ts ===
+var a = {
+>a : Symbol(a, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 0, 3))
+
+ x: function (y: T): T { return null; }
+>x : Symbol(x, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 0, 9))
+>T : Symbol(T, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 1, 16))
+>y : Symbol(y, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 1, 19))
+>T : Symbol(T, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 1, 16))
+>T : Symbol(T, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 1, 16))
+}
+var a2 = {
+>a2 : Symbol(a2, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 3, 3))
+
+ x: function (y: any): any { return null; }
+>x : Symbol(x, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 3, 10))
+>y : Symbol(y, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 4, 16))
+}
+export interface I {
+>I : Symbol(I, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 5, 1))
+
+ x(y: T): T;
+>x : Symbol(I.x, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 6, 20))
+>T : Symbol(T, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 7, 5))
+>y : Symbol(y, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 7, 8))
+>T : Symbol(T, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 7, 5))
+>T : Symbol(T, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 7, 5))
+}
+export interface I2 {
+>I2 : Symbol(I2, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 8, 1))
+
+ x(y: any): any;
+>x : Symbol(I2.x, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 9, 21))
+>y : Symbol(y, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 10, 5))
+}
+
+var i: I;
+>i : Symbol(i, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 13, 3))
+>I : Symbol(I, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 5, 1))
+
+var i2: I2;
+>i2 : Symbol(i2, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 14, 3))
+>I2 : Symbol(I2, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 8, 1))
+
+a = i; // error
+>a : Symbol(a, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 0, 3))
+>i : Symbol(i, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 13, 3))
+
+i = a; // error
+>i : Symbol(i, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 13, 3))
+>a : Symbol(a, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 0, 3))
+
+a2 = i2; // no error
+>a2 : Symbol(a2, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 3, 3))
+>i2 : Symbol(i2, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 14, 3))
+
+i2 = a2; // no error
+>i2 : Symbol(i2, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 14, 3))
+>a2 : Symbol(a2, Decl(typeParameterCompatibilityAccrossDeclarations.ts, 3, 3))
+
diff --git a/tsc/testdata/baselines/reference/compiler/typeParameterCompatibilityAccrossDeclarations.types b/tsc/testdata/baselines/reference/compiler/typeParameterCompatibilityAccrossDeclarations.types
new file mode 100644
index 0000000000000..7c36eb8a1334f
--- /dev/null
+++ b/tsc/testdata/baselines/reference/compiler/typeParameterCompatibilityAccrossDeclarations.types
@@ -0,0 +1,58 @@
+//// [tests/cases/compiler/typeParameterCompatibilityAccrossDeclarations.ts] ////
+
+=== typeParameterCompatibilityAccrossDeclarations.ts ===
+var a = {
+>a : { x: