From 6778c9e374d0bf4b368dbbe710aebb1c951cffdc Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 2 Jul 2018 16:26:22 -0700 Subject: [PATCH] Change import type determination to not use a RE on the symbol name --- src/compiler/checker.ts | 84 ++++++++++--------- .../aliasDoesNotDuplicateSignatures.types | 2 +- .../reference/ambientDeclarations.types | 2 +- .../ambientDeclarationsExternal.types | 4 +- tests/baselines/reference/ambientErrors.types | 6 +- ...lModuleWithInternalImportDeclaration.types | 2 +- ...ExternalModuleWithRelativeModuleName.types | 2 +- ...duleWithoutInternalImportDeclaration.types | 2 +- .../reference/augmentExportEquals3.types | 4 +- .../reference/augmentExportEquals3_1.types | 4 +- .../reference/augmentExportEquals4.types | 4 +- .../reference/augmentExportEquals4_1.types | 4 +- .../reference/augmentExportEquals5.types | 6 +- .../reference/augmentExportEquals6.types | 4 +- .../reference/augmentExportEquals6_1.types | 4 +- .../reference/bangInModuleName.types | 2 +- ...FileImportedTypeUseInTypeArgPosition.types | 4 +- ...nEmitCrossFileImportTypeOfAmbientModule.js | 24 ++++++ ...CrossFileImportTypeOfAmbientModule.symbols | 23 +++++ ...itCrossFileImportTypeOfAmbientModule.types | 23 +++++ .../reference/declaredExternalModule.types | 2 +- ...edExternalModuleWithExportAssignment.types | 2 +- ...signmentMembersVisibleInAugmentation.types | 2 +- .../reference/exportDefaultVariable.types | 2 +- .../reference/exportEqualsOfModule.types | 8 +- ...rnalModuleReferenceDoubleUnderscore1.types | 4 +- .../reference/mergedDeclarations7.types | 2 +- ...mentationDuringSyntheticDefaultCheck.types | 6 +- ...mbientExternalModuleImportWithExport.types | 4 +- ...entExternalModuleImportWithoutExport.types | 4 +- .../propertyIdentityWithPrivacyMismatch.types | 4 +- .../quotedModuleNameMustBeAmbient.types | 4 +- .../reference/spellingSuggestionModule.types | 2 +- .../reference/tsxDynamicTagName5.types | 2 +- .../reference/tsxDynamicTagName7.types | 2 +- .../reference/tsxDynamicTagName8.types | 2 +- .../reference/tsxDynamicTagName9.types | 2 +- .../reference/tsxElementResolution17.types | 4 +- .../reference/tsxExternalModuleEmit1.types | 2 +- .../reference/tsxExternalModuleEmit2.types | 2 +- .../reference/tsxPreserveEmit1.types | 4 +- .../reference/umd-augmentation-3.types | 4 +- .../reference/umd-augmentation-4.types | 4 +- ...nEmitCrossFileImportTypeOfAmbientModule.ts | 11 +++ 44 files changed, 189 insertions(+), 106 deletions(-) create mode 100644 tests/baselines/reference/declarationEmitCrossFileImportTypeOfAmbientModule.js create mode 100644 tests/baselines/reference/declarationEmitCrossFileImportTypeOfAmbientModule.symbols create mode 100644 tests/baselines/reference/declarationEmitCrossFileImportTypeOfAmbientModule.types create mode 100644 tests/cases/compiler/declarationEmitCrossFileImportTypeOfAmbientModule.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8fe87324a0afe..bff1ab9cf66eb 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3733,19 +3733,56 @@ namespace ts { return top; } + function getSpecifierForModuleSymbol(symbol: Symbol, context: NodeBuilderContext) { + const file = getDeclarationOfKind(symbol, SyntaxKind.SourceFile); + if (file && file.moduleName !== undefined) { + // Use the amd name if it is available + return file.moduleName; + } + if (!file) { + if (context.tracker.trackReferencedAmbientModule) { + const ambientDecls = filter(symbol.declarations, isAmbientModule); + if (length(ambientDecls)) { + for (const decl of ambientDecls) { + context.tracker.trackReferencedAmbientModule(decl); + } + } + } + return (symbol.escapedName as string).substring(1, (symbol.escapedName as string).length - 1); + } + else { + if (!context.enclosingDeclaration || !context.tracker.moduleResolverHost) { + // If there's no context declaration, we can't lookup a non-ambient specifier, so we just use the symbol name + return (symbol.escapedName as string).substring(1, (symbol.escapedName as string).length - 1); + } + const contextFile = getSourceFileOfNode(getOriginalNode(context.enclosingDeclaration)); + const links = getSymbolLinks(symbol); + let specifier = links.specifierCache && links.specifierCache.get(contextFile.path); + if (!specifier) { + specifier = flatten(moduleSpecifiers.getModuleSpecifiers( + symbol, + compilerOptions, + contextFile, + context.tracker.moduleResolverHost, + context.tracker.moduleResolverHost.getSourceFiles!(), // TODO: GH#18217 + { importModuleSpecifierPreference: "non-relative" } + ))[0]; + links.specifierCache = links.specifierCache || createMap(); + links.specifierCache.set(contextFile.path, specifier); + } + return specifier; + } + } + function symbolToTypeNode(symbol: Symbol, context: NodeBuilderContext, meaning: SymbolFlags, overrideTypeArguments?: ReadonlyArray): TypeNode { const chain = lookupSymbolChain(symbol, context, meaning, !(context.flags & NodeBuilderFlags.UseAliasDefinedOutsideCurrentScope)); // If we're using aliases outside the current scope, dont bother with the module - context.flags |= NodeBuilderFlags.InInitialEntityName; - const rootName = getNameOfSymbolAsWritten(chain[0], context); - context.flags ^= NodeBuilderFlags.InInitialEntityName; - const isTypeOf = meaning === SymbolFlags.Value; - if (ambientModuleSymbolRegex.test(rootName)) { + if (some(chain[0].declarations, hasNonGlobalAugmentationExternalModuleSymbol)) { // module is root, must use `ImportTypeNode` const nonRootParts = chain.length > 1 ? createAccessFromSymbolChain(chain, chain.length - 1, 1) : undefined; const typeParameterNodes = overrideTypeArguments || lookupTypeParameterNodes(chain, 0, context); - const lit = createLiteralTypeNode(createLiteral(rootName.substring(1, rootName.length - 1))); + const lit = createLiteralTypeNode(createLiteral(getSpecifierForModuleSymbol(chain[0], context))); if (!nonRootParts || isEntityName(nonRootParts)) { if (nonRootParts) { const lastId = isIdentifier(nonRootParts) ? nonRootParts : nonRootParts.right; @@ -3990,41 +4027,6 @@ namespace ts { return "default"; } if (symbol.declarations && symbol.declarations.length) { - if (some(symbol.declarations, hasExternalModuleSymbol) && context!.enclosingDeclaration) { // TODO: GH#18217 - const file = getDeclarationOfKind(symbol, SyntaxKind.SourceFile); - if (!file || !context!.tracker.moduleResolverHost) { - if (context!.tracker.trackReferencedAmbientModule) { - const ambientDecls = filter(symbol.declarations, isAmbientModule); - if (length(ambientDecls)) { - for (const decl of ambientDecls) { - context!.tracker.trackReferencedAmbientModule!(decl); // TODO: GH#18217 - } - } - } - // ambient module, just use declaration/symbol name (fallthrough) - } - else { - if (file.moduleName) { - return `"${file.moduleName}"`; - } - const contextFile = getSourceFileOfNode(getOriginalNode(context!.enclosingDeclaration))!; - const links = getSymbolLinks(symbol); - let specifier = links.specifierCache && links.specifierCache.get(contextFile.path); - if (!specifier) { - specifier = flatten(moduleSpecifiers.getModuleSpecifiers( - symbol, - compilerOptions, - contextFile, - context!.tracker.moduleResolverHost!, - context!.tracker.moduleResolverHost!.getSourceFiles!(), - { importModuleSpecifierPreference: "non-relative" } - ))[0]; - links.specifierCache = links.specifierCache || createMap(); - links.specifierCache.set(contextFile.path, specifier); - } - return `"${specifier}"`; - } - } const declaration = symbol.declarations[0]; const name = getNameOfDeclaration(declaration); if (name) { diff --git a/tests/baselines/reference/aliasDoesNotDuplicateSignatures.types b/tests/baselines/reference/aliasDoesNotDuplicateSignatures.types index ada54494a831e..da8e7f3b8b6ea 100644 --- a/tests/baselines/reference/aliasDoesNotDuplicateSignatures.types +++ b/tests/baselines/reference/aliasDoesNotDuplicateSignatures.types @@ -6,7 +6,7 @@ declare namespace demoNS { >f : () => void } declare module 'demoModule' { ->'demoModule' : typeof 'demoModule' +>'demoModule' : typeof import("demoModule") import alias = demoNS; >alias : typeof alias diff --git a/tests/baselines/reference/ambientDeclarations.types b/tests/baselines/reference/ambientDeclarations.types index 3d0b53ee19d2d..2c1df08edb8ea 100644 --- a/tests/baselines/reference/ambientDeclarations.types +++ b/tests/baselines/reference/ambientDeclarations.types @@ -163,7 +163,7 @@ var q = M1.fn(); // Ambient external module in the global module // Ambient external module with a string literal name that is a top level external module name declare module 'external1' { ->'external1' : typeof 'external1' +>'external1' : typeof import("external1") var q; >q : any diff --git a/tests/baselines/reference/ambientDeclarationsExternal.types b/tests/baselines/reference/ambientDeclarationsExternal.types index 522c9bd1442db..be62a31835475 100644 --- a/tests/baselines/reference/ambientDeclarationsExternal.types +++ b/tests/baselines/reference/ambientDeclarationsExternal.types @@ -20,7 +20,7 @@ var n: number; === tests/cases/conformance/ambient/decls.ts === // Ambient external module with export assignment declare module 'equ' { ->'equ' : typeof 'equ' +>'equ' : typeof import("equ") var x; >x : any @@ -30,7 +30,7 @@ declare module 'equ' { } declare module 'equ2' { ->'equ2' : typeof 'equ2' +>'equ2' : typeof import("equ2") var x: number; >x : number diff --git a/tests/baselines/reference/ambientErrors.types b/tests/baselines/reference/ambientErrors.types index bd4033e93976a..84914d8d645b2 100644 --- a/tests/baselines/reference/ambientErrors.types +++ b/tests/baselines/reference/ambientErrors.types @@ -97,16 +97,16 @@ module M2 { >M2 : any declare module 'nope' { } ->'nope' : typeof 'nope' +>'nope' : typeof import("nope") } // Ambient external module with a string literal name that isn't a top level external module name declare module '../foo' { } ->'../foo' : typeof '../foo' +>'../foo' : typeof import("../foo") // Ambient external module with export assignment and other exported members declare module 'bar' { ->'bar' : typeof 'bar' +>'bar' : typeof import("bar") var n; >n : any diff --git a/tests/baselines/reference/ambientExternalModuleWithInternalImportDeclaration.types b/tests/baselines/reference/ambientExternalModuleWithInternalImportDeclaration.types index 1737229413118..27a6610fcd568 100644 --- a/tests/baselines/reference/ambientExternalModuleWithInternalImportDeclaration.types +++ b/tests/baselines/reference/ambientExternalModuleWithInternalImportDeclaration.types @@ -10,7 +10,7 @@ var c = new A(); === tests/cases/compiler/ambientExternalModuleWithInternalImportDeclaration_0.ts === declare module 'M' { ->'M' : typeof 'M' +>'M' : typeof import("M") module C { >C : typeof C diff --git a/tests/baselines/reference/ambientExternalModuleWithRelativeModuleName.types b/tests/baselines/reference/ambientExternalModuleWithRelativeModuleName.types index f061663aac8ad..2646b9ea0077c 100644 --- a/tests/baselines/reference/ambientExternalModuleWithRelativeModuleName.types +++ b/tests/baselines/reference/ambientExternalModuleWithRelativeModuleName.types @@ -7,7 +7,7 @@ declare module "./relativeModule" { } declare module ".\\relativeModule" { ->".\\relativeModule" : typeof import(".\\\\relativeModule") +>".\\relativeModule" : typeof import(".\\relativeModule") var x: string; >x : string diff --git a/tests/baselines/reference/ambientExternalModuleWithoutInternalImportDeclaration.types b/tests/baselines/reference/ambientExternalModuleWithoutInternalImportDeclaration.types index c943603fb52ee..fc2eb77491a64 100644 --- a/tests/baselines/reference/ambientExternalModuleWithoutInternalImportDeclaration.types +++ b/tests/baselines/reference/ambientExternalModuleWithoutInternalImportDeclaration.types @@ -10,7 +10,7 @@ var c = new A(); === tests/cases/compiler/ambientExternalModuleWithoutInternalImportDeclaration_0.ts === declare module 'M' { ->'M' : typeof 'M' +>'M' : typeof import("M") module C { >C : typeof C diff --git a/tests/baselines/reference/augmentExportEquals3.types b/tests/baselines/reference/augmentExportEquals3.types index 67aa8399af349..d66b166c5abfe 100644 --- a/tests/baselines/reference/augmentExportEquals3.types +++ b/tests/baselines/reference/augmentExportEquals3.types @@ -1,9 +1,9 @@ === tests/cases/compiler/file1.ts === function foo() {} ->foo : typeof foo +>foo : typeof import("o") namespace foo { ->foo : typeof foo +>foo : typeof import("o") export var v = 1; >v : number diff --git a/tests/baselines/reference/augmentExportEquals3_1.types b/tests/baselines/reference/augmentExportEquals3_1.types index b0c0e806f57b5..08e21c6172c8b 100644 --- a/tests/baselines/reference/augmentExportEquals3_1.types +++ b/tests/baselines/reference/augmentExportEquals3_1.types @@ -3,10 +3,10 @@ declare module "file1" { >"file1" : typeof import("file1") function foo(): void; ->foo : typeof foo +>foo : typeof import("o") namespace foo { ->foo : typeof foo +>foo : typeof import("o") export var v: number; >v : number diff --git a/tests/baselines/reference/augmentExportEquals4.types b/tests/baselines/reference/augmentExportEquals4.types index c2823d794e0eb..ebdacceae2b5f 100644 --- a/tests/baselines/reference/augmentExportEquals4.types +++ b/tests/baselines/reference/augmentExportEquals4.types @@ -1,9 +1,9 @@ === tests/cases/compiler/file1.ts === class foo {} ->foo : foo +>foo : import("o") namespace foo { ->foo : typeof foo +>foo : typeof import("o") export var v = 1; >v : number diff --git a/tests/baselines/reference/augmentExportEquals4_1.types b/tests/baselines/reference/augmentExportEquals4_1.types index dbb36c39e4217..7f28d24d64e29 100644 --- a/tests/baselines/reference/augmentExportEquals4_1.types +++ b/tests/baselines/reference/augmentExportEquals4_1.types @@ -3,10 +3,10 @@ declare module "file1" { >"file1" : typeof import("file1") class foo {} ->foo : foo +>foo : import("o") namespace foo { ->foo : typeof foo +>foo : typeof import("o") export var v: number; >v : number diff --git a/tests/baselines/reference/augmentExportEquals5.types b/tests/baselines/reference/augmentExportEquals5.types index f9cc2bfeae95a..fd5bb168f805f 100644 --- a/tests/baselines/reference/augmentExportEquals5.types +++ b/tests/baselines/reference/augmentExportEquals5.types @@ -16,12 +16,12 @@ declare module "express" { >"express" : typeof import("express") function e(): e.Express; ->e : typeof e +>e : typeof import("e") >e : any ->Express : e.Express +>Express : import("e").Express namespace e { ->e : typeof e +>e : typeof import("e") interface IRoute { >IRoute : IRoute diff --git a/tests/baselines/reference/augmentExportEquals6.types b/tests/baselines/reference/augmentExportEquals6.types index 6948535c6da02..a8e9c36a4ee40 100644 --- a/tests/baselines/reference/augmentExportEquals6.types +++ b/tests/baselines/reference/augmentExportEquals6.types @@ -1,9 +1,9 @@ === tests/cases/compiler/file1.ts === class foo {} ->foo : foo +>foo : import("o") namespace foo { ->foo : typeof foo +>foo : typeof import("o") export class A {} >A : A diff --git a/tests/baselines/reference/augmentExportEquals6_1.types b/tests/baselines/reference/augmentExportEquals6_1.types index 3e7c2596df48e..3bde1ec600caf 100644 --- a/tests/baselines/reference/augmentExportEquals6_1.types +++ b/tests/baselines/reference/augmentExportEquals6_1.types @@ -3,10 +3,10 @@ declare module "file1" { >"file1" : typeof import("file1") class foo {} ->foo : foo +>foo : import("o") namespace foo { ->foo : typeof foo +>foo : typeof import("o") class A {} >A : A diff --git a/tests/baselines/reference/bangInModuleName.types b/tests/baselines/reference/bangInModuleName.types index cb1a66f986d4e..b475bdd903cd5 100644 --- a/tests/baselines/reference/bangInModuleName.types +++ b/tests/baselines/reference/bangInModuleName.types @@ -10,7 +10,7 @@ declare module "http" { } declare module 'intern/dojo/node!http' { ->'intern/dojo/node!http' : typeof 'intern/dojo/node!http' +>'intern/dojo/node!http' : typeof import("intern/dojo/node!http") import http = require('http'); >http : typeof http diff --git a/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.types b/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.types index 705cb99417d6d..61b175fc47860 100644 --- a/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.types +++ b/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.types @@ -4,7 +4,7 @@ class List { } >T : T declare module 'mod1' { ->'mod1' : typeof 'mod1' +>'mod1' : typeof import("mod1") class Foo { >Foo : Foo @@ -12,7 +12,7 @@ declare module 'mod1' { } declare module 'moo' { ->'moo' : typeof 'moo' +>'moo' : typeof import("moo") import x = require('mod1'); >x : typeof x diff --git a/tests/baselines/reference/declarationEmitCrossFileImportTypeOfAmbientModule.js b/tests/baselines/reference/declarationEmitCrossFileImportTypeOfAmbientModule.js new file mode 100644 index 0000000000000..ede9906598625 --- /dev/null +++ b/tests/baselines/reference/declarationEmitCrossFileImportTypeOfAmbientModule.js @@ -0,0 +1,24 @@ +//// [tests/cases/compiler/declarationEmitCrossFileImportTypeOfAmbientModule.ts] //// + +//// [component.d.ts] +declare module '@namespace/component' { + export class Foo {} +} +//// [index.d.ts] +import { Foo } from "@namespace/component"; +export declare const item: typeof Foo; +//// [index.ts] +import { item } from "../somepackage"; +export const reeexported = item; + + +//// [index.js] +"use strict"; +exports.__esModule = true; +var somepackage_1 = require("../somepackage"); +exports.reeexported = somepackage_1.item; + + +//// [index.d.ts] +/// +export declare const reeexported: typeof import("@namespace/component").Foo; diff --git a/tests/baselines/reference/declarationEmitCrossFileImportTypeOfAmbientModule.symbols b/tests/baselines/reference/declarationEmitCrossFileImportTypeOfAmbientModule.symbols new file mode 100644 index 0000000000000..368ebcf365093 --- /dev/null +++ b/tests/baselines/reference/declarationEmitCrossFileImportTypeOfAmbientModule.symbols @@ -0,0 +1,23 @@ +=== tests/cases/compiler/types/component.d.ts === +declare module '@namespace/component' { +>'@namespace/component' : Symbol('@namespace/component', Decl(component.d.ts, 0, 0)) + + export class Foo {} +>Foo : Symbol(Foo, Decl(component.d.ts, 0, 39)) +} +=== tests/cases/compiler/packages/somepackage/index.d.ts === +import { Foo } from "@namespace/component"; +>Foo : Symbol(Foo, Decl(index.d.ts, 0, 8)) + +export declare const item: typeof Foo; +>item : Symbol(item, Decl(index.d.ts, 1, 20)) +>Foo : Symbol(Foo, Decl(index.d.ts, 0, 8)) + +=== tests/cases/compiler/packages/secondpackage/index.ts === +import { item } from "../somepackage"; +>item : Symbol(item, Decl(index.ts, 0, 8)) + +export const reeexported = item; +>reeexported : Symbol(reeexported, Decl(index.ts, 1, 12)) +>item : Symbol(item, Decl(index.ts, 0, 8)) + diff --git a/tests/baselines/reference/declarationEmitCrossFileImportTypeOfAmbientModule.types b/tests/baselines/reference/declarationEmitCrossFileImportTypeOfAmbientModule.types new file mode 100644 index 0000000000000..10077e2e96ac8 --- /dev/null +++ b/tests/baselines/reference/declarationEmitCrossFileImportTypeOfAmbientModule.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/types/component.d.ts === +declare module '@namespace/component' { +>'@namespace/component' : typeof import("@namespace/component") + + export class Foo {} +>Foo : Foo +} +=== tests/cases/compiler/packages/somepackage/index.d.ts === +import { Foo } from "@namespace/component"; +>Foo : typeof Foo + +export declare const item: typeof Foo; +>item : typeof Foo +>Foo : typeof Foo + +=== tests/cases/compiler/packages/secondpackage/index.ts === +import { item } from "../somepackage"; +>item : typeof import("@namespace/component").Foo + +export const reeexported = item; +>reeexported : typeof import("@namespace/component").Foo +>item : typeof import("@namespace/component").Foo + diff --git a/tests/baselines/reference/declaredExternalModule.types b/tests/baselines/reference/declaredExternalModule.types index 4ac6fcb8be58b..d899c9fc64d8b 100644 --- a/tests/baselines/reference/declaredExternalModule.types +++ b/tests/baselines/reference/declaredExternalModule.types @@ -1,6 +1,6 @@ === tests/cases/compiler/declaredExternalModule.ts === declare module 'connect' { ->'connect' : typeof 'connect' +>'connect' : typeof import("connect") interface connectModule { >connectModule : connectModule diff --git a/tests/baselines/reference/declaredExternalModuleWithExportAssignment.types b/tests/baselines/reference/declaredExternalModuleWithExportAssignment.types index b020c11ab624b..ddda19ade108f 100644 --- a/tests/baselines/reference/declaredExternalModuleWithExportAssignment.types +++ b/tests/baselines/reference/declaredExternalModuleWithExportAssignment.types @@ -1,6 +1,6 @@ === tests/cases/compiler/declaredExternalModuleWithExportAssignment.ts === declare module 'connect' { ->'connect' : typeof 'connect' +>'connect' : typeof import("connect") interface connectModule { >connectModule : connectModule diff --git a/tests/baselines/reference/exportAssignmentMembersVisibleInAugmentation.types b/tests/baselines/reference/exportAssignmentMembersVisibleInAugmentation.types index 74efa10e4d28e..9a5d3b5bc65e7 100644 --- a/tests/baselines/reference/exportAssignmentMembersVisibleInAugmentation.types +++ b/tests/baselines/reference/exportAssignmentMembersVisibleInAugmentation.types @@ -3,7 +3,7 @@ export = foo; >foo : any declare namespace foo { ->foo : typeof foo +>foo : typeof import("o") export type T = number; >T : number diff --git a/tests/baselines/reference/exportDefaultVariable.types b/tests/baselines/reference/exportDefaultVariable.types index 109ff9e0f93ce..5a0a34eb4c962 100644 --- a/tests/baselines/reference/exportDefaultVariable.types +++ b/tests/baselines/reference/exportDefaultVariable.types @@ -5,7 +5,7 @@ declare var io: any; >io : any declare module 'module' { ->'module' : typeof 'module' +>'module' : typeof import("module") export default io; >io : any diff --git a/tests/baselines/reference/exportEqualsOfModule.types b/tests/baselines/reference/exportEqualsOfModule.types index 8356742f0e57c..bb7ba762c2265 100644 --- a/tests/baselines/reference/exportEqualsOfModule.types +++ b/tests/baselines/reference/exportEqualsOfModule.types @@ -1,13 +1,13 @@ === tests/cases/compiler/exportEqualsOfModule.ts === declare module '~popsicle/dist/request' { ->'~popsicle/dist/request' : typeof '~popsicle/dist/request' +>'~popsicle/dist/request' : typeof import("~popsicle/dist/request") export class Request {} >Request : Request } declare module '~popsicle/dist/common' { ->'~popsicle/dist/common' : typeof '~popsicle/dist/common' +>'~popsicle/dist/common' : typeof import("~popsicle/dist/common") import { Request } from '~popsicle/dist/request'; >Request : typeof Request @@ -17,7 +17,7 @@ declare module '~popsicle/dist/common' { } declare module 'popsicle' { ->'popsicle' : typeof 'popsicle' +>'popsicle' : typeof import("popsicle") import alias = require('~popsicle/dist/common'); >alias : typeof alias @@ -27,7 +27,7 @@ declare module 'popsicle' { } declare module 'popsicle-proxy-agent' { ->'popsicle-proxy-agent' : typeof 'popsicle-proxy-agent' +>'popsicle-proxy-agent' : typeof import("popsicle-proxy-agent") import { Request } from 'popsicle'; >Request : typeof Request diff --git a/tests/baselines/reference/externalModuleReferenceDoubleUnderscore1.types b/tests/baselines/reference/externalModuleReferenceDoubleUnderscore1.types index 5452c6afcbb44..ec4e07af5e055 100644 --- a/tests/baselines/reference/externalModuleReferenceDoubleUnderscore1.types +++ b/tests/baselines/reference/externalModuleReferenceDoubleUnderscore1.types @@ -1,6 +1,6 @@ === tests/cases/compiler/externalModuleReferenceDoubleUnderscore1.ts === declare module 'timezonecomplete' { ->'timezonecomplete' : typeof 'timezonecomplete' +>'timezonecomplete' : typeof import("timezonecomplete") import basics = require("__timezonecomplete/basics"); >basics : typeof basics @@ -12,7 +12,7 @@ declare module 'timezonecomplete' { } declare module '__timezonecomplete/basics' { ->'__timezonecomplete/basics' : typeof '__timezonecomplete/basics' +>'__timezonecomplete/basics' : typeof import("__timezonecomplete/basics") export enum TimeUnit { >TimeUnit : TimeUnit diff --git a/tests/baselines/reference/mergedDeclarations7.types b/tests/baselines/reference/mergedDeclarations7.types index 416b5e1221fd3..c02c96e342533 100644 --- a/tests/baselines/reference/mergedDeclarations7.types +++ b/tests/baselines/reference/mergedDeclarations7.types @@ -1,6 +1,6 @@ === tests/cases/compiler/passport.d.ts === declare module 'passport' { ->'passport' : typeof 'passport' +>'passport' : typeof import("passport") namespace passport { >passport : PassportStatic diff --git a/tests/baselines/reference/moduleAugmentationDuringSyntheticDefaultCheck.types b/tests/baselines/reference/moduleAugmentationDuringSyntheticDefaultCheck.types index 3c3875e80fc43..2d67f511a794d 100644 --- a/tests/baselines/reference/moduleAugmentationDuringSyntheticDefaultCheck.types +++ b/tests/baselines/reference/moduleAugmentationDuringSyntheticDefaultCheck.types @@ -6,9 +6,9 @@ import moment = require("moment-timezone"); === tests/cases/compiler/node_modules/moment/index.d.ts === declare function moment(): moment.Moment; ->moment : () => moment.Moment +>moment : () => import("omen").Moment >moment : any ->Moment : moment.Moment +>Moment : import("omen").Moment declare namespace moment { >moment : () => Moment @@ -22,7 +22,7 @@ declare namespace moment { } } export = moment; ->moment : () => moment.Moment +>moment : () => import("omen").Moment === tests/cases/compiler/node_modules/moment-timezone/index.d.ts === import * as moment from 'moment'; diff --git a/tests/baselines/reference/privacyTopLevelAmbientExternalModuleImportWithExport.types b/tests/baselines/reference/privacyTopLevelAmbientExternalModuleImportWithExport.types index cf210da33e9f6..28963821f0d0e 100644 --- a/tests/baselines/reference/privacyTopLevelAmbientExternalModuleImportWithExport.types +++ b/tests/baselines/reference/privacyTopLevelAmbientExternalModuleImportWithExport.types @@ -92,7 +92,7 @@ export class c_public { // private elements // Export - Error ambient modules allowed only in global declare module 'm' { ->'m' : typeof 'm' +>'m' : typeof import("m") export class c_private { >c_private : c_private @@ -105,7 +105,7 @@ declare module 'm' { === tests/cases/compiler/privacyTopLevelAmbientExternalModuleImportWithExport_require3.ts === declare module 'm2' { ->'m2' : typeof 'm2' +>'m2' : typeof import("m2") export class c_private { >c_private : c_private diff --git a/tests/baselines/reference/privacyTopLevelAmbientExternalModuleImportWithoutExport.types b/tests/baselines/reference/privacyTopLevelAmbientExternalModuleImportWithoutExport.types index a69bd3373d105..5d424bb557af1 100644 --- a/tests/baselines/reference/privacyTopLevelAmbientExternalModuleImportWithoutExport.types +++ b/tests/baselines/reference/privacyTopLevelAmbientExternalModuleImportWithoutExport.types @@ -92,7 +92,7 @@ export class c_public { // private elements // Export - Error ambient modules allowed only in global declare module 'm' { ->'m' : typeof 'm' +>'m' : typeof import("m") export class c_private { >c_private : c_private @@ -104,7 +104,7 @@ declare module 'm' { === tests/cases/compiler/privacyTopLevelAmbientExternalModuleImportWithoutExport_require3.ts === declare module 'm2' { ->'m2' : typeof 'm2' +>'m2' : typeof import("m2") export class c_private { >c_private : c_private diff --git a/tests/baselines/reference/propertyIdentityWithPrivacyMismatch.types b/tests/baselines/reference/propertyIdentityWithPrivacyMismatch.types index 12eb94ec188d4..08f086413681b 100644 --- a/tests/baselines/reference/propertyIdentityWithPrivacyMismatch.types +++ b/tests/baselines/reference/propertyIdentityWithPrivacyMismatch.types @@ -38,7 +38,7 @@ var y: Foo2; === tests/cases/compiler/propertyIdentityWithPrivacyMismatch_0.ts === declare module 'mod1' { ->'mod1' : typeof 'mod1' +>'mod1' : typeof import("mod1") class Foo { >Foo : Foo @@ -48,7 +48,7 @@ declare module 'mod1' { } } declare module 'mod2' { ->'mod2' : typeof 'mod2' +>'mod2' : typeof import("mod2") class Foo { >Foo : Foo diff --git a/tests/baselines/reference/quotedModuleNameMustBeAmbient.types b/tests/baselines/reference/quotedModuleNameMustBeAmbient.types index 2ab8ffc3a8d31..646ea4b4108b7 100644 --- a/tests/baselines/reference/quotedModuleNameMustBeAmbient.types +++ b/tests/baselines/reference/quotedModuleNameMustBeAmbient.types @@ -1,7 +1,7 @@ === tests/cases/compiler/quotedModuleNameMustBeAmbient.ts === module 'M' {} ->'M' : typeof 'M' +>'M' : typeof import("M") declare module 'M2' {} ->'M2' : typeof 'M2' +>'M2' : typeof import("M2") diff --git a/tests/baselines/reference/spellingSuggestionModule.types b/tests/baselines/reference/spellingSuggestionModule.types index 85f8b62fb6bd0..036f2b39d9d99 100644 --- a/tests/baselines/reference/spellingSuggestionModule.types +++ b/tests/baselines/reference/spellingSuggestionModule.types @@ -7,7 +7,7 @@ foobar; >foobar : any declare module 'barfoo' { export const x: number; } ->'barfoo' : typeof 'barfoo' +>'barfoo' : typeof import("barfoo") >x : number barfoo; diff --git a/tests/baselines/reference/tsxDynamicTagName5.types b/tests/baselines/reference/tsxDynamicTagName5.types index 962b7bfebd659..6135bf6087988 100644 --- a/tests/baselines/reference/tsxDynamicTagName5.types +++ b/tests/baselines/reference/tsxDynamicTagName5.types @@ -1,6 +1,6 @@ === tests/cases/conformance/jsx/react.d.ts === declare module 'react' { ->'react' : typeof 'react' +>'react' : typeof import("react") class Component { } >Component : Component diff --git a/tests/baselines/reference/tsxDynamicTagName7.types b/tests/baselines/reference/tsxDynamicTagName7.types index c6e44fe45c329..e5a1424374dbb 100644 --- a/tests/baselines/reference/tsxDynamicTagName7.types +++ b/tests/baselines/reference/tsxDynamicTagName7.types @@ -1,6 +1,6 @@ === tests/cases/conformance/jsx/react.d.ts === declare module 'react' { ->'react' : typeof 'react' +>'react' : typeof import("react") class Component { } >Component : Component diff --git a/tests/baselines/reference/tsxDynamicTagName8.types b/tests/baselines/reference/tsxDynamicTagName8.types index ca00d88fe1daf..0ff3deef89032 100644 --- a/tests/baselines/reference/tsxDynamicTagName8.types +++ b/tests/baselines/reference/tsxDynamicTagName8.types @@ -1,6 +1,6 @@ === tests/cases/conformance/jsx/react.d.ts === declare module 'react' { ->'react' : typeof 'react' +>'react' : typeof import("react") class Component { } >Component : Component diff --git a/tests/baselines/reference/tsxDynamicTagName9.types b/tests/baselines/reference/tsxDynamicTagName9.types index 8118589e7dc45..c16a6de99687d 100644 --- a/tests/baselines/reference/tsxDynamicTagName9.types +++ b/tests/baselines/reference/tsxDynamicTagName9.types @@ -1,6 +1,6 @@ === tests/cases/conformance/jsx/react.d.ts === declare module 'react' { ->'react' : typeof 'react' +>'react' : typeof import("react") class Component { } >Component : Component diff --git a/tests/baselines/reference/tsxElementResolution17.types b/tests/baselines/reference/tsxElementResolution17.types index 8ab3290ecebd0..3ba141729341c 100644 --- a/tests/baselines/reference/tsxElementResolution17.types +++ b/tests/baselines/reference/tsxElementResolution17.types @@ -25,7 +25,7 @@ declare module JSX { } declare module 'elements1' { ->'elements1' : typeof 'elements1' +>'elements1' : typeof import("elements1") class MyElement { >MyElement : MyElement @@ -34,7 +34,7 @@ declare module 'elements1' { } declare module 'elements2' { ->'elements2' : typeof 'elements2' +>'elements2' : typeof import("elements2") class MyElement { >MyElement : MyElement diff --git a/tests/baselines/reference/tsxExternalModuleEmit1.types b/tests/baselines/reference/tsxExternalModuleEmit1.types index fa22a5ec49ff7..55cd297161d6c 100644 --- a/tests/baselines/reference/tsxExternalModuleEmit1.types +++ b/tests/baselines/reference/tsxExternalModuleEmit1.types @@ -1,6 +1,6 @@ === tests/cases/conformance/jsx/react.d.ts === declare module 'react' { ->'react' : typeof 'react' +>'react' : typeof import("react") class Component { } >Component : Component diff --git a/tests/baselines/reference/tsxExternalModuleEmit2.types b/tests/baselines/reference/tsxExternalModuleEmit2.types index 5d397b517af8f..3324fcc1c8bbc 100644 --- a/tests/baselines/reference/tsxExternalModuleEmit2.types +++ b/tests/baselines/reference/tsxExternalModuleEmit2.types @@ -1,6 +1,6 @@ === tests/cases/conformance/jsx/modules.d.ts === declare module 'mod' { ->'mod' : typeof 'mod' +>'mod' : typeof import("mod") var y: any; >y : any diff --git a/tests/baselines/reference/tsxPreserveEmit1.types b/tests/baselines/reference/tsxPreserveEmit1.types index a5a7a0efaca26..658fe991fd32d 100644 --- a/tests/baselines/reference/tsxPreserveEmit1.types +++ b/tests/baselines/reference/tsxPreserveEmit1.types @@ -35,7 +35,7 @@ module M { === tests/cases/conformance/jsx/react.d.ts === declare module 'react' { ->'react' : typeof 'react' +>'react' : typeof import("react") var x: any; >x : any @@ -54,7 +54,7 @@ declare module ReactRouter { >Thing : Thing } declare module 'react-router' { ->'react-router' : typeof 'react-router' +>'react-router' : typeof import("react-router") export = ReactRouter; >ReactRouter : typeof ReactRouter diff --git a/tests/baselines/reference/umd-augmentation-3.types b/tests/baselines/reference/umd-augmentation-3.types index 8c329eaf6d4f8..e705b4ca988ea 100644 --- a/tests/baselines/reference/umd-augmentation-3.types +++ b/tests/baselines/reference/umd-augmentation-3.types @@ -47,13 +47,13 @@ var t = p.x; === tests/cases/conformance/externalModules/node_modules/math2d/index.d.ts === export as namespace Math2d; ->Math2d : typeof M2D +>Math2d : typeof import("2") export = M2D; >M2D : typeof M2D declare namespace M2D { ->M2D : typeof M2D +>M2D : typeof import("2") interface Point { >Point : Point diff --git a/tests/baselines/reference/umd-augmentation-4.types b/tests/baselines/reference/umd-augmentation-4.types index 901ae2f637473..a5b7538bcae03 100644 --- a/tests/baselines/reference/umd-augmentation-4.types +++ b/tests/baselines/reference/umd-augmentation-4.types @@ -45,13 +45,13 @@ var t = p.x; === tests/cases/conformance/externalModules/node_modules/math2d/index.d.ts === export as namespace Math2d; ->Math2d : typeof M2D +>Math2d : typeof import("2") export = M2D; >M2D : typeof M2D declare namespace M2D { ->M2D : typeof M2D +>M2D : typeof import("2") interface Point { >Point : Point diff --git a/tests/cases/compiler/declarationEmitCrossFileImportTypeOfAmbientModule.ts b/tests/cases/compiler/declarationEmitCrossFileImportTypeOfAmbientModule.ts new file mode 100644 index 0000000000000..9f9461314edf8 --- /dev/null +++ b/tests/cases/compiler/declarationEmitCrossFileImportTypeOfAmbientModule.ts @@ -0,0 +1,11 @@ +// @declaration: true +// @filename: types/component.d.ts +declare module '@namespace/component' { + export class Foo {} +} +// @filename: packages/somepackage/index.d.ts +import { Foo } from "@namespace/component"; +export declare const item: typeof Foo; +// @filename: packages/secondpackage/index.ts +import { item } from "../somepackage"; +export const reeexported = item;