diff --git a/src/compiler/transformers/declarations.ts b/src/compiler/transformers/declarations.ts index f2db89ae507..fdf730489ce 100644 --- a/src/compiler/transformers/declarations.ts +++ b/src/compiler/transformers/declarations.ts @@ -154,7 +154,7 @@ namespace ts { if (node.kind === SyntaxKind.Bundle) { isBundledEmit = true; - const refs = createMap(); + refs = createMap(); let hasNoDefaultLib = false; const bundle = createBundle(map(node.sourceFiles, sourceFile => { diff --git a/tests/baselines/reference/declarationEmitBundleWithAmbientReferences.js b/tests/baselines/reference/declarationEmitBundleWithAmbientReferences.js new file mode 100644 index 00000000000..6c42a82967e --- /dev/null +++ b/tests/baselines/reference/declarationEmitBundleWithAmbientReferences.js @@ -0,0 +1,45 @@ +//// [tests/cases/compiler/declarationEmitBundleWithAmbientReferences.ts] //// + +//// [lib.d.ts] +declare module "lib/result" { + export type Result = (E & Failure) | (T & Success); + export interface Failure { } + export interface Success { } +} + +//// [datastore_result.ts] +import { Result } from "lib/result"; + +export type T = Result; + +//// [conditional_directive_field.ts] +import * as DatastoreResult from "src/datastore_result"; + +export const build = (): DatastoreResult.T => { + return null; +}; + + +//// [datastore.bundle.js] +define("datastore_result", ["require", "exports"], function (require, exports) { + "use strict"; + exports.__esModule = true; +}); +define("conditional_directive_field", ["require", "exports"], function (require, exports) { + "use strict"; + exports.__esModule = true; + exports.build = function () { + return null; + }; +}); + + +//// [datastore.bundle.d.ts] +/// +declare module "datastore_result" { + import { Result } from "lib/result"; + export type T = Result; +} +declare module "conditional_directive_field" { + export const build: () => import("lib/result").Result; +} diff --git a/tests/baselines/reference/declarationEmitBundleWithAmbientReferences.symbols b/tests/baselines/reference/declarationEmitBundleWithAmbientReferences.symbols new file mode 100644 index 00000000000..080857f9e74 --- /dev/null +++ b/tests/baselines/reference/declarationEmitBundleWithAmbientReferences.symbols @@ -0,0 +1,49 @@ +=== tests/cases/compiler/lib/lib.d.ts === +declare module "lib/result" { +>"lib/result" : Symbol("lib/result", Decl(lib.d.ts, --, --)) + + export type Result = (E & Failure) | (T & Success); +>Result : Symbol(Result, Decl(lib.d.ts, --, --)) +>E : Symbol(E, Decl(lib.d.ts, --, --)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>T : Symbol(T, Decl(lib.d.ts, --, --)) +>E : Symbol(E, Decl(lib.d.ts, --, --)) +>Failure : Symbol(Failure, Decl(lib.d.ts, --, --)) +>E : Symbol(E, Decl(lib.d.ts, --, --)) +>T : Symbol(T, Decl(lib.d.ts, --, --)) +>Success : Symbol(Success, Decl(lib.d.ts, --, --)) +>T : Symbol(T, Decl(lib.d.ts, --, --)) + + export interface Failure { } +>Failure : Symbol(Failure, Decl(lib.d.ts, --, --)) +>E : Symbol(E, Decl(lib.d.ts, --, --)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) + + export interface Success { } +>Success : Symbol(Success, Decl(lib.d.ts, --, --)) +>T : Symbol(T, Decl(lib.d.ts, --, --)) +} + +=== tests/cases/compiler/src/datastore_result.ts === +import { Result } from "lib/result"; +>Result : Symbol(Result, Decl(datastore_result.ts, 0, 8)) + +export type T = Result; +>T : Symbol(T, Decl(datastore_result.ts, 0, 36)) +>T : Symbol(T, Decl(datastore_result.ts, 2, 14)) +>Result : Symbol(Result, Decl(datastore_result.ts, 0, 8)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>T : Symbol(T, Decl(datastore_result.ts, 2, 14)) + +=== tests/cases/compiler/src/conditional_directive_field.ts === +import * as DatastoreResult from "src/datastore_result"; +>DatastoreResult : Symbol(DatastoreResult, Decl(conditional_directive_field.ts, 0, 6)) + +export const build = (): DatastoreResult.T => { +>build : Symbol(build, Decl(conditional_directive_field.ts, 2, 12)) +>DatastoreResult : Symbol(DatastoreResult, Decl(conditional_directive_field.ts, 0, 6)) +>T : Symbol(DatastoreResult.T, Decl(datastore_result.ts, 0, 36)) + + return null; +}; + diff --git a/tests/baselines/reference/declarationEmitBundleWithAmbientReferences.types b/tests/baselines/reference/declarationEmitBundleWithAmbientReferences.types new file mode 100644 index 00000000000..25b1ca12db8 --- /dev/null +++ b/tests/baselines/reference/declarationEmitBundleWithAmbientReferences.types @@ -0,0 +1,52 @@ +=== tests/cases/compiler/lib/lib.d.ts === +declare module "lib/result" { +>"lib/result" : typeof import("lib/result") + + export type Result = (E & Failure) | (T & Success); +>Result : Result +>E : E +>Error : Error +>T : T +>E : E +>Failure : Failure +>E : E +>T : T +>Success : Success +>T : T + + export interface Failure { } +>Failure : Failure +>E : E +>Error : Error + + export interface Success { } +>Success : Success +>T : T +} + +=== tests/cases/compiler/src/datastore_result.ts === +import { Result } from "lib/result"; +>Result : any + +export type T = Result; +>T : Result +>T : T +>Result : Result +>Error : Error +>T : T + +=== tests/cases/compiler/src/conditional_directive_field.ts === +import * as DatastoreResult from "src/datastore_result"; +>DatastoreResult : typeof DatastoreResult + +export const build = (): DatastoreResult.T => { +>build : () => import("lib/result").Result +>(): DatastoreResult.T => { return null;} : () => import("lib/result").Result +>DatastoreResult : any +>T : import("lib/result").Result + + return null; +>null : null + +}; + diff --git a/tests/cases/compiler/declarationEmitBundleWithAmbientReferences.ts b/tests/cases/compiler/declarationEmitBundleWithAmbientReferences.ts new file mode 100644 index 00000000000..58fae79a613 --- /dev/null +++ b/tests/cases/compiler/declarationEmitBundleWithAmbientReferences.ts @@ -0,0 +1,22 @@ +// @noResolve: true +// @declaration: true +// @module: amd +// @outFile: tests/cases/compiler/out/datastore.bundle.js +// @filename: lib/lib.d.ts +declare module "lib/result" { + export type Result = (E & Failure) | (T & Success); + export interface Failure { } + export interface Success { } +} + +// @filename: src/datastore_result.ts +import { Result } from "lib/result"; + +export type T = Result; + +// @filename: src/conditional_directive_field.ts +import * as DatastoreResult from "src/datastore_result"; + +export const build = (): DatastoreResult.T => { + return null; +};