diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b7d54a55df5..57147e49bc8 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -661,38 +661,52 @@ module ts { return callback(globals); } - function getAccessibleSymbol(symbol: Symbol, enclosingDeclaration: Node, meaning: SymbolFlags) { - function getAccessibleSymbolFromSymbolTable(symbols: SymbolTable) { + function getAccessibleSymbolChain(symbol: Symbol, enclosingDeclaration: Node, meaning: SymbolFlags): Symbol[] { + function getAccessibleSymbolChainFromSymbolTable(symbols: SymbolTable): Symbol[]{ + function canQualifySymbol(symbolFromSymbolTable: Symbol, meaning: SymbolFlags) { + // If the symbol is equivalent and doesnt need futher qualification, this symbol is accessible + if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { + return true; + } + + // If symbol needs qualification, make sure that parent is accessible, if it is then this symbol is accessible too + var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, SymbolFlags.Namespace); + return !!accessibleParent; + } + function isAccessible(symbolFromSymbolTable: Symbol, resolvedAliasSymbol?: Symbol) { if (symbol === (resolvedAliasSymbol || symbolFromSymbolTable)) { - // If the symbol is equivalent and doesnt need futher qualification, this symbol is accessible - if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { - return true; - } - - // If symbol needs qualification, make sure that parent is accessible, if it is then this symbol is accessible too - var accessibleParent = getAccessibleSymbol(symbolFromSymbolTable.parent, enclosingDeclaration, SymbolFlags.Namespace); - return !!accessibleParent; + // if symbolfrom symbolTable or alias resolution matches the symbol, + // check the symbol can be qualified, it is only then this symbol is accessible + return canQualifySymbol(symbolFromSymbolTable, meaning); } } // If symbol is directly available by its name in the symbol table if (isAccessible(lookUp(symbols, symbol.name))) { - return symbol; + return [symbol]; } // Check if symbol is any of the alias return forEachValue(symbols, symbolFromSymbolTable => { if (symbolFromSymbolTable.flags & SymbolFlags.Import) { + var resolvedImportedSymbol = resolveImport(symbolFromSymbolTable); if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) { - return symbolFromSymbolTable; + return [symbolFromSymbolTable]; + } + + // Look in the exported members, if we can find accessibleSymbolChain, symbol is accessible using this chain + // but only if the symbolFromSymbolTable can be qualified + var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports): undefined; + if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, SymbolFlags.Namespace)) { + return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports); } } }); } if (symbol) { - return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolFromSymbolTable); + return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable); } } @@ -732,9 +746,9 @@ module ts { var meaningToLook = meaning; while (symbol) { // Symbol is accessible if it by itself is accessible - var accessibleSymbol = getAccessibleSymbol(symbol, enclosingDeclaration, meaningToLook); - if (accessibleSymbol) { - if (forEach(accessibleSymbol.declarations, declaration => !getIsDeclarationVisible(declaration))) { + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook); + if (accessibleSymbolChain) { + if (forEach(accessibleSymbolChain[0].declarations, declaration => !getIsDeclarationVisible(declaration))) { return { accessibility: SymbolAccessibility.NotAccessible, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), @@ -819,12 +833,13 @@ module ts { while (symbol) { var isFirstName = !symbolName; var meaningToLook = isFirstName ? meaning : SymbolFlags.Namespace; - var accessibleSymbol = getAccessibleSymbol(symbol, enclosingDeclaration, meaningToLook); - symbolName = getSymbolName(accessibleSymbol || symbol) + (isFirstName ? "" : ("." + symbolName)); - if (accessibleSymbol && !needsQualification(accessibleSymbol, enclosingDeclaration, meaningToLook)) { + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook); + var currentSymbolName = accessibleSymbolChain ? ts.map(accessibleSymbolChain, accessibleSymbol => getSymbolName(accessibleSymbol)).join(".") : getSymbolName(symbol); + symbolName = currentSymbolName + (isFirstName ? "" : ("." + symbolName)); + if (accessibleSymbolChain && !needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaningToLook : SymbolFlags.Namespace)) { break; } - symbol = accessibleSymbol ? accessibleSymbol.parent : symbol.parent; + symbol = accessibleSymbolChain ? accessibleSymbolChain[0].parent : symbol.parent; } return symbolName; diff --git a/tests/baselines/reference/declFileExportImportChain.errors.txt b/tests/baselines/reference/declFileExportImportChain.errors.txt deleted file mode 100644 index ab59f2319ed..00000000000 --- a/tests/baselines/reference/declFileExportImportChain.errors.txt +++ /dev/null @@ -1,25 +0,0 @@ -==== tests/cases/compiler/declFileExportImportChain_d.ts (1 errors) ==== - import c = require("declFileExportImportChain_c"); - export var x: c.b1.a.m2.c1; - ~ -!!! Exported variable 'x' has or is using private name 'm1.m2.c1'. -==== tests/cases/compiler/declFileExportImportChain_a.ts (0 errors) ==== - - module m1 { - export module m2 { - export class c1 { - } - } - } - export = m1; - -==== tests/cases/compiler/declFileExportImportChain_b.ts (0 errors) ==== - export import a = require("declFileExportImportChain_a"); - -==== tests/cases/compiler/declFileExportImportChain_b1.ts (0 errors) ==== - import b = require("declFileExportImportChain_b"); - export = b; - -==== tests/cases/compiler/declFileExportImportChain_c.ts (0 errors) ==== - export import b1 = require("declFileExportImportChain_b1"); - \ No newline at end of file diff --git a/tests/baselines/reference/declFileExportImportChain.js b/tests/baselines/reference/declFileExportImportChain.js index 740aabb166a..bac4bdadbda 100644 --- a/tests/baselines/reference/declFileExportImportChain.js +++ b/tests/baselines/reference/declFileExportImportChain.js @@ -73,3 +73,6 @@ import b = require("declFileExportImportChain_b"); export = b; //// [declFileExportImportChain_c.d.ts] export import b1 = require("declFileExportImportChain_b1"); +//// [declFileExportImportChain_d.d.ts] +import c = require("declFileExportImportChain_c"); +export declare var x: c.b1.a.m2.c1; diff --git a/tests/baselines/reference/declFileExportImportChain2.errors.txt b/tests/baselines/reference/declFileExportImportChain2.errors.txt deleted file mode 100644 index 64d55f28fad..00000000000 --- a/tests/baselines/reference/declFileExportImportChain2.errors.txt +++ /dev/null @@ -1,22 +0,0 @@ -==== tests/cases/compiler/declFileExportImportChain2_d.ts (1 errors) ==== - import c = require("declFileExportImportChain2_c"); - export var x: c.b.m2.c1; - ~ -!!! Exported variable 'x' has or is using private name 'm1.m2.c1'. -==== tests/cases/compiler/declFileExportImportChain2_a.ts (0 errors) ==== - - module m1 { - export module m2 { - export class c1 { - } - } - } - export = m1; - -==== tests/cases/compiler/declFileExportImportChain2_b.ts (0 errors) ==== - import a = require("declFileExportImportChain2_a"); - export = a; - -==== tests/cases/compiler/declFileExportImportChain2_c.ts (0 errors) ==== - export import b = require("declFileExportImportChain2_b"); - \ No newline at end of file diff --git a/tests/baselines/reference/declFileExportImportChain2.js b/tests/baselines/reference/declFileExportImportChain2.js index bb303f232b3..9a739056c3d 100644 --- a/tests/baselines/reference/declFileExportImportChain2.js +++ b/tests/baselines/reference/declFileExportImportChain2.js @@ -64,3 +64,6 @@ import a = require("declFileExportImportChain2_a"); export = a; //// [declFileExportImportChain2_c.d.ts] export import b = require("declFileExportImportChain2_b"); +//// [declFileExportImportChain2_d.d.ts] +import c = require("declFileExportImportChain2_c"); +export declare var x: c.b.m2.c1; diff --git a/tests/baselines/reference/declarationEmit_nameConflicts.js b/tests/baselines/reference/declarationEmit_nameConflicts.js index 0f34f789abc..56693b03cd4 100644 --- a/tests/baselines/reference/declarationEmit_nameConflicts.js +++ b/tests/baselines/reference/declarationEmit_nameConflicts.js @@ -186,10 +186,10 @@ export declare module M.Q { } interface b extends M.C { } - interface I extends M.N.I { + interface I extends M.c.I { } module c { - interface I extends M.N.I { + interface I extends M.c.I { } } } @@ -242,10 +242,10 @@ export declare module M.Q { } interface b extends M.C { } - interface I extends M.N.I { + interface I extends M.c.I { } module c { - interface I extends M.N.I { + interface I extends M.c.I { } } } diff --git a/tests/baselines/reference/exportImport.errors.txt b/tests/baselines/reference/exportImport.errors.txt deleted file mode 100644 index f9697857bc5..00000000000 --- a/tests/baselines/reference/exportImport.errors.txt +++ /dev/null @@ -1,16 +0,0 @@ -==== tests/cases/compiler/consumer.ts (1 errors) ==== - import e = require('./exporter'); - - export function w(): e.w { // Should be OK - ~ -!!! Return type of exported function has or is using private name 'Widget1'. - return new e.w(); - } -==== tests/cases/compiler/w1.ts (0 errors) ==== - - export = Widget1 - class Widget1 { name = 'one'; } - -==== tests/cases/compiler/exporter.ts (0 errors) ==== - export import w = require('./w1'); - \ No newline at end of file diff --git a/tests/baselines/reference/exportImport.js b/tests/baselines/reference/exportImport.js index 413d0b37999..6d8748516ae 100644 --- a/tests/baselines/reference/exportImport.js +++ b/tests/baselines/reference/exportImport.js @@ -45,3 +45,6 @@ declare class Widget1 { } //// [exporter.d.ts] export import w = require('./w1'); +//// [consumer.d.ts] +import e = require('./exporter'); +export declare function w(): e.w; diff --git a/tests/baselines/reference/exportImportNonInstantiatedModule2.errors.txt b/tests/baselines/reference/exportImportNonInstantiatedModule2.errors.txt deleted file mode 100644 index 198e3e2369f..00000000000 --- a/tests/baselines/reference/exportImportNonInstantiatedModule2.errors.txt +++ /dev/null @@ -1,16 +0,0 @@ -==== tests/cases/compiler/consumer.ts (1 errors) ==== - import e = require('./exporter'); - - export function w(): e.w { // Should be OK - ~ -!!! Return type of exported function has or is using private name 'Widget1'. - return {name: 'value' }; - } -==== tests/cases/compiler/w1.ts (0 errors) ==== - - export = Widget1 - interface Widget1 { name: string; } - -==== tests/cases/compiler/exporter.ts (0 errors) ==== - export import w = require('./w1'); - \ No newline at end of file diff --git a/tests/baselines/reference/exportImportNonInstantiatedModule2.js b/tests/baselines/reference/exportImportNonInstantiatedModule2.js index 4c3c54da31c..2782a6f6f67 100644 --- a/tests/baselines/reference/exportImportNonInstantiatedModule2.js +++ b/tests/baselines/reference/exportImportNonInstantiatedModule2.js @@ -37,3 +37,6 @@ interface Widget1 { } //// [exporter.d.ts] export import w = require('./w1'); +//// [consumer.d.ts] +import e = require('./exporter'); +export declare function w(): e.w; diff --git a/tests/baselines/reference/privacyGloImport.errors.txt b/tests/baselines/reference/privacyGloImport.errors.txt deleted file mode 100644 index 049d8ee640c..00000000000 --- a/tests/baselines/reference/privacyGloImport.errors.txt +++ /dev/null @@ -1,161 +0,0 @@ -==== tests/cases/compiler/privacyGloImport.ts (4 errors) ==== - module m1 { - export module m1_M1_public { - export class c1 { - } - export function f1() { - return new c1; - } - export var v1 = c1; - export var v2: c1; - } - - module m1_M2_private { - export class c1 { - } - export function f1() { - return new c1; - } - export var v1 = c1; - export var v2: c1; - } - - //export declare module "m1_M3_public" { - // export function f1(); - // export class c1 { - // } - // export var v1: { new (): c1; }; - // export var v2: c1; - //} - - //declare module "m1_M4_private" { - // export function f1(); - // export class c1 { - // } - // export var v1: { new (): c1; }; - // export var v2: c1; - //} - - import m1_im1_private = m1_M1_public; - export var m1_im1_private_v1_public = m1_im1_private.c1; - export var m1_im1_private_v2_public = new m1_im1_private.c1(); - export var m1_im1_private_v3_public = m1_im1_private.f1; - export var m1_im1_private_v4_public = m1_im1_private.f1(); - var m1_im1_private_v1_private = m1_im1_private.c1; - var m1_im1_private_v2_private = new m1_im1_private.c1(); - var m1_im1_private_v3_private = m1_im1_private.f1; - var m1_im1_private_v4_private = m1_im1_private.f1(); - - - import m1_im2_private = m1_M2_private; - export var m1_im2_private_v1_public = m1_im2_private.c1; - ~~~~~~~~~~~~~~~~~~~~~~~~ -!!! Exported variable 'm1_im2_private_v1_public' has or is using name 'm1_M2_private.c1' from private module 'm1_M2_private'. - export var m1_im2_private_v2_public = new m1_im2_private.c1(); - ~~~~~~~~~~~~~~~~~~~~~~~~ -!!! Exported variable 'm1_im2_private_v2_public' has or is using name 'm1_M2_private.c1' from private module 'm1_M2_private'. - export var m1_im2_private_v3_public = m1_im2_private.f1; - ~~~~~~~~~~~~~~~~~~~~~~~~ -!!! Exported variable 'm1_im2_private_v3_public' has or is using name 'm1_M2_private.c1' from private module 'm1_M2_private'. - export var m1_im2_private_v4_public = m1_im2_private.f1(); - ~~~~~~~~~~~~~~~~~~~~~~~~ -!!! Exported variable 'm1_im2_private_v4_public' has or is using name 'm1_M2_private.c1' from private module 'm1_M2_private'. - var m1_im2_private_v1_private = m1_im2_private.c1; - var m1_im2_private_v2_private = new m1_im2_private.c1(); - var m1_im2_private_v3_private = m1_im2_private.f1; - var m1_im2_private_v4_private = m1_im2_private.f1(); - - //import m1_im3_private = require("m1_M3_public"); - //export var m1_im3_private_v1_public = m1_im3_private.c1; - //export var m1_im3_private_v2_public = new m1_im3_private.c1(); - //export var m1_im3_private_v3_public = m1_im3_private.f1; - //export var m1_im3_private_v4_public = m1_im3_private.f1(); - //var m1_im3_private_v1_private = m1_im3_private.c1; - //var m1_im3_private_v2_private = new m1_im3_private.c1(); - //var m1_im3_private_v3_private = m1_im3_private.f1; - //var m1_im3_private_v4_private = m1_im3_private.f1(); - - //import m1_im4_private = require("m1_M4_private"); - //export var m1_im4_private_v1_public = m1_im4_private.c1; - //export var m1_im4_private_v2_public = new m1_im4_private.c1(); - //export var m1_im4_private_v3_public = m1_im4_private.f1; - //export var m1_im4_private_v4_public = m1_im4_private.f1(); - //var m1_im4_private_v1_private = m1_im4_private.c1; - //var m1_im4_private_v2_private = new m1_im4_private.c1(); - //var m1_im4_private_v3_private = m1_im4_private.f1; - //var m1_im4_private_v4_private = m1_im4_private.f1(); - - export import m1_im1_public = m1_M1_public; - export import m1_im2_public = m1_M2_private; - //export import m1_im3_public = require("m1_M3_public"); - //export import m1_im4_public = require("m1_M4_private"); - } - - module glo_M1_public { - export class c1 { - } - export function f1() { - return new c1; - } - export var v1 = c1; - export var v2: c1; - } - - declare module "glo_M2_public" { - export function f1(); - export class c1 { - } - export var v1: { new (): c1; }; - export var v2: c1; - } - - declare module "use_glo_M1_public" { - import use_glo_M1_public = glo_M1_public; - export var use_glo_M1_public_v1_public: { new (): use_glo_M1_public.c1; }; - export var use_glo_M1_public_v2_public: typeof use_glo_M1_public; - export var use_glo_M1_public_v3_public: ()=> use_glo_M1_public.c1; - var use_glo_M1_public_v1_private: { new (): use_glo_M1_public.c1; }; - var use_glo_M1_public_v2_private: typeof use_glo_M1_public; - var use_glo_M1_public_v3_private: () => use_glo_M1_public.c1; - - import use_glo_M2_public = require("glo_M2_public"); - export var use_glo_M2_public_v1_public: { new (): use_glo_M2_public.c1; }; - export var use_glo_M2_public_v2_public: typeof use_glo_M2_public; - export var use_glo_M2_public_v3_public: () => use_glo_M2_public.c1; - var use_glo_M2_public_v1_private: { new (): use_glo_M2_public.c1; }; - var use_glo_M2_public_v2_private: typeof use_glo_M2_public; - var use_glo_M2_public_v3_private: () => use_glo_M2_public.c1; - - module m2 { - //import errorImport = require("glo_M2_public"); - import nonerrorImport = glo_M1_public; - - module m5 { - //import m5_errorImport = require("glo_M2_public"); - import m5_nonerrorImport = glo_M1_public; - } - } - } - - declare module "anotherParseError" { - module m2 { - //declare module "abc" { - //} - } - - module m2 { - //module "abc2" { - //} - } - //module "abc3" { - //} - } - - module m2 { - //import m3 = require("use_glo_M1_public"); - module m4 { - var a = 10; - //import m2 = require("use_glo_M1_public"); - } - - } \ No newline at end of file diff --git a/tests/baselines/reference/privacyGloImport.js b/tests/baselines/reference/privacyGloImport.js index 537e1eb43fa..483101dc5ef 100644 --- a/tests/baselines/reference/privacyGloImport.js +++ b/tests/baselines/reference/privacyGloImport.js @@ -228,3 +228,143 @@ var m2; var a = 10; })(m4 || (m4 = {})); })(m2 || (m2 = {})); + + +//// [privacyGloImport.d.ts] +declare module m1 { + module m1_M1_public { + class c1 { + } + function f1(): c1; + var v1: typeof c1; + var v2: c1; + } + import m1_im1_private = m1_M1_public; + var m1_im1_private_v1_public: typeof m1_im1_private.c1; + var m1_im1_private_v2_public: m1_im1_private.c1; + var m1_im1_private_v3_public: () => m1_im1_private.c1; + var m1_im1_private_v4_public: m1_im1_private.c1; + import m1_im2_private = m1_M2_private; + var m1_im2_private_v1_public: typeof m1_im2_private.c1; + var m1_im2_private_v2_public: m1_im2_private.c1; + var m1_im2_private_v3_public: () => m1_im2_private.c1; + var m1_im2_private_v4_public: m1_im2_private.c1; + export import m1_im1_public = m1_M1_public; + export import m1_im2_public = m1_M2_private; +} +declare module glo_M1_public { + class c1 { + } + function f1(): c1; + var v1: typeof c1; + var v2: c1; +} +declare module "glo_M2_public" { + function f1(): any; + class c1 { + } + var v1: new () => c1; + var v2: c1; +} +declare module "use_glo_M1_public" { + import use_glo_M1_public = glo_M1_public; + var use_glo_M1_public_v1_public: new () => use_glo_M1_public.c1; + var use_glo_M1_public_v2_public: typeof use_glo_M1_public; + var use_glo_M1_public_v3_public: () => use_glo_M1_public.c1; + var use_glo_M1_public_v1_private: new () => use_glo_M1_public.c1; + var use_glo_M1_public_v2_private: typeof use_glo_M1_public; + var use_glo_M1_public_v3_private: () => use_glo_M1_public.c1; + import use_glo_M2_public = require("glo_M2_public"); + var use_glo_M2_public_v1_public: new () => use_glo_M2_public.c1; + var use_glo_M2_public_v2_public: typeof use_glo_M2_public; + var use_glo_M2_public_v3_public: () => use_glo_M2_public.c1; + var use_glo_M2_public_v1_private: new () => use_glo_M2_public.c1; + var use_glo_M2_public_v2_private: typeof use_glo_M2_public; + var use_glo_M2_public_v3_private: () => use_glo_M2_public.c1; + module m2 { + module m5 { + } + } +} +declare module "anotherParseError" { + module m2 { + } + module m2 { + } +} +declare module m2 { +} + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/privacyGloImport.d.ts (2 errors) ==== + declare module m1 { + module m1_M1_public { + class c1 { + } + function f1(): c1; + var v1: typeof c1; + var v2: c1; + } + import m1_im1_private = m1_M1_public; + var m1_im1_private_v1_public: typeof m1_im1_private.c1; + var m1_im1_private_v2_public: m1_im1_private.c1; + var m1_im1_private_v3_public: () => m1_im1_private.c1; + var m1_im1_private_v4_public: m1_im1_private.c1; + import m1_im2_private = m1_M2_private; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! Cannot find name 'm1_M2_private'. + var m1_im2_private_v1_public: typeof m1_im2_private.c1; + var m1_im2_private_v2_public: m1_im2_private.c1; + var m1_im2_private_v3_public: () => m1_im2_private.c1; + var m1_im2_private_v4_public: m1_im2_private.c1; + export import m1_im1_public = m1_M1_public; + export import m1_im2_public = m1_M2_private; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! Cannot find name 'm1_M2_private'. + } + declare module glo_M1_public { + class c1 { + } + function f1(): c1; + var v1: typeof c1; + var v2: c1; + } + declare module "glo_M2_public" { + function f1(): any; + class c1 { + } + var v1: new () => c1; + var v2: c1; + } + declare module "use_glo_M1_public" { + import use_glo_M1_public = glo_M1_public; + var use_glo_M1_public_v1_public: new () => use_glo_M1_public.c1; + var use_glo_M1_public_v2_public: typeof use_glo_M1_public; + var use_glo_M1_public_v3_public: () => use_glo_M1_public.c1; + var use_glo_M1_public_v1_private: new () => use_glo_M1_public.c1; + var use_glo_M1_public_v2_private: typeof use_glo_M1_public; + var use_glo_M1_public_v3_private: () => use_glo_M1_public.c1; + import use_glo_M2_public = require("glo_M2_public"); + var use_glo_M2_public_v1_public: new () => use_glo_M2_public.c1; + var use_glo_M2_public_v2_public: typeof use_glo_M2_public; + var use_glo_M2_public_v3_public: () => use_glo_M2_public.c1; + var use_glo_M2_public_v1_private: new () => use_glo_M2_public.c1; + var use_glo_M2_public_v2_private: typeof use_glo_M2_public; + var use_glo_M2_public_v3_private: () => use_glo_M2_public.c1; + module m2 { + module m5 { + } + } + } + declare module "anotherParseError" { + module m2 { + } + module m2 { + } + } + declare module m2 { + } + \ No newline at end of file diff --git a/tests/baselines/reference/privacyImport.errors.txt b/tests/baselines/reference/privacyImport.errors.txt deleted file mode 100644 index 7264b4f306f..00000000000 --- a/tests/baselines/reference/privacyImport.errors.txt +++ /dev/null @@ -1,365 +0,0 @@ -==== tests/cases/compiler/privacyImport.ts (4 errors) ==== - export module m1 { - export module m1_M1_public { - export class c1 { - } - export function f1() { - return new c1; - } - export var v1 = c1; - export var v2: c1; - } - - module m1_M2_private { - export class c1 { - } - export function f1() { - return new c1; - } - export var v1 = c1; - export var v2: c1; - } - - //export declare module "m1_M3_public" { - // export function f1(); - // export class c1 { - // } - // export var v1: { new (): c1; }; - // export var v2: c1; - //} - - //declare module "m1_M4_private" { - // export function f1(); - // export class c1 { - // } - // export var v1: { new (): c1; }; - // export var v2: c1; - //} - - import m1_im1_private = m1_M1_public; - export var m1_im1_private_v1_public = m1_im1_private.c1; - export var m1_im1_private_v2_public = new m1_im1_private.c1(); - export var m1_im1_private_v3_public = m1_im1_private.f1; - export var m1_im1_private_v4_public = m1_im1_private.f1(); - var m1_im1_private_v1_private = m1_im1_private.c1; - var m1_im1_private_v2_private = new m1_im1_private.c1(); - var m1_im1_private_v3_private = m1_im1_private.f1; - var m1_im1_private_v4_private = m1_im1_private.f1(); - - - import m1_im2_private = m1_M2_private; - export var m1_im2_private_v1_public = m1_im2_private.c1; - ~~~~~~~~~~~~~~~~~~~~~~~~ -!!! Exported variable 'm1_im2_private_v1_public' has or is using name 'm1_M2_private.c1' from private module 'm1_M2_private'. - export var m1_im2_private_v2_public = new m1_im2_private.c1(); - ~~~~~~~~~~~~~~~~~~~~~~~~ -!!! Exported variable 'm1_im2_private_v2_public' has or is using name 'm1_M2_private.c1' from private module 'm1_M2_private'. - export var m1_im2_private_v3_public = m1_im2_private.f1; - ~~~~~~~~~~~~~~~~~~~~~~~~ -!!! Exported variable 'm1_im2_private_v3_public' has or is using name 'm1_M2_private.c1' from private module 'm1_M2_private'. - export var m1_im2_private_v4_public = m1_im2_private.f1(); - ~~~~~~~~~~~~~~~~~~~~~~~~ -!!! Exported variable 'm1_im2_private_v4_public' has or is using name 'm1_M2_private.c1' from private module 'm1_M2_private'. - var m1_im2_private_v1_private = m1_im2_private.c1; - var m1_im2_private_v2_private = new m1_im2_private.c1(); - var m1_im2_private_v3_private = m1_im2_private.f1; - var m1_im2_private_v4_private = m1_im2_private.f1(); - - //import m1_im3_private = require("m1_M3_public"); - //export var m1_im3_private_v1_public = m1_im3_private.c1; - //export var m1_im3_private_v2_public = new m1_im3_private.c1(); - //export var m1_im3_private_v3_public = m1_im3_private.f1; - //export var m1_im3_private_v4_public = m1_im3_private.f1(); - //var m1_im3_private_v1_private = m1_im3_private.c1; - //var m1_im3_private_v2_private = new m1_im3_private.c1(); - //var m1_im3_private_v3_private = m1_im3_private.f1; - //var m1_im3_private_v4_private = m1_im3_private.f1(); - - //import m1_im4_private = require("m1_M4_private"); - //export var m1_im4_private_v1_public = m1_im4_private.c1; - //export var m1_im4_private_v2_public = new m1_im4_private.c1(); - //export var m1_im4_private_v3_public = m1_im4_private.f1; - //export var m1_im4_private_v4_public = m1_im4_private.f1(); - //var m1_im4_private_v1_private = m1_im4_private.c1; - //var m1_im4_private_v2_private = new m1_im4_private.c1(); - //var m1_im4_private_v3_private = m1_im4_private.f1; - //var m1_im4_private_v4_private = m1_im4_private.f1(); - - export import m1_im1_public = m1_M1_public; - export import m1_im2_public = m1_M2_private; - //export import m1_im3_public = require("m1_M3_public"); - //export import m1_im4_public = require("m1_M4_private"); - } - - module m2 { - export module m2_M1_public { - export class c1 { - } - export function f1() { - return new c1; - } - export var v1 = c1; - export var v2: c1; - } - - module m2_M2_private { - export class c1 { - } - export function f1() { - return new c1; - } - export var v1 = c1; - export var v2: c1; - } - - //export declare module "m2_M3_public" { - // export function f1(); - // export class c1 { - // } - // export var v1: { new (): c1; }; - // export var v2: c1; - //} - - //declare module "m2_M4_private" { - // export function f1(); - // export class c1 { - // } - // export var v1: { new (): c1; }; - // export var v2: c1; - //} - - import m1_im1_private = m2_M1_public; - export var m1_im1_private_v1_public = m1_im1_private.c1; - export var m1_im1_private_v2_public = new m1_im1_private.c1(); - export var m1_im1_private_v3_public = m1_im1_private.f1; - export var m1_im1_private_v4_public = m1_im1_private.f1(); - var m1_im1_private_v1_private = m1_im1_private.c1; - var m1_im1_private_v2_private = new m1_im1_private.c1(); - var m1_im1_private_v3_private = m1_im1_private.f1; - var m1_im1_private_v4_private = m1_im1_private.f1(); - - - import m1_im2_private = m2_M2_private; - export var m1_im2_private_v1_public = m1_im2_private.c1; - export var m1_im2_private_v2_public = new m1_im2_private.c1(); - export var m1_im2_private_v3_public = m1_im2_private.f1; - export var m1_im2_private_v4_public = m1_im2_private.f1(); - var m1_im2_private_v1_private = m1_im2_private.c1; - var m1_im2_private_v2_private = new m1_im2_private.c1(); - var m1_im2_private_v3_private = m1_im2_private.f1; - var m1_im2_private_v4_private = m1_im2_private.f1(); - - //import m1_im3_private = require("m2_M3_public"); - //export var m1_im3_private_v1_public = m1_im3_private.c1; - //export var m1_im3_private_v2_public = new m1_im3_private.c1(); - //export var m1_im3_private_v3_public = m1_im3_private.f1; - //export var m1_im3_private_v4_public = m1_im3_private.f1(); - //var m1_im3_private_v1_private = m1_im3_private.c1; - //var m1_im3_private_v2_private = new m1_im3_private.c1(); - //var m1_im3_private_v3_private = m1_im3_private.f1; - //var m1_im3_private_v4_private = m1_im3_private.f1(); - - //import m1_im4_private = require("m2_M4_private"); - //export var m1_im4_private_v1_public = m1_im4_private.c1; - //export var m1_im4_private_v2_public = new m1_im4_private.c1(); - //export var m1_im4_private_v3_public = m1_im4_private.f1; - //export var m1_im4_private_v4_public = m1_im4_private.f1(); - //var m1_im4_private_v1_private = m1_im4_private.c1; - //var m1_im4_private_v2_private = new m1_im4_private.c1(); - //var m1_im4_private_v3_private = m1_im4_private.f1; - //var m1_im4_private_v4_private = m1_im4_private.f1(); - - // Parse error to export module - export import m1_im1_public = m2_M1_public; - export import m1_im2_public = m2_M2_private; - //export import m1_im3_public = require("m2_M3_public"); - //export import m1_im4_public = require("m2_M4_private"); - } - - export module glo_M1_public { - export class c1 { - } - export function f1() { - return new c1; - } - export var v1 = c1; - export var v2: c1; - } - - //export declare module "glo_M2_public" { - // export function f1(); - // export class c1 { - // } - // export var v1: { new (): c1; }; - // export var v2: c1; - //} - - export module glo_M3_private { - export class c1 { - } - export function f1() { - return new c1; - } - export var v1 = c1; - export var v2: c1; - } - - //export declare module "glo_M4_private" { - // export function f1(); - // export class c1 { - // } - // export var v1: { new (): c1; }; - // export var v2: c1; - //} - - - import glo_im1_private = glo_M1_public; - export var glo_im1_private_v1_public = glo_im1_private.c1; - export var glo_im1_private_v2_public = new glo_im1_private.c1(); - export var glo_im1_private_v3_public = glo_im1_private.f1; - export var glo_im1_private_v4_public = glo_im1_private.f1(); - var glo_im1_private_v1_private = glo_im1_private.c1; - var glo_im1_private_v2_private = new glo_im1_private.c1(); - var glo_im1_private_v3_private = glo_im1_private.f1; - var glo_im1_private_v4_private = glo_im1_private.f1(); - - - //import glo_im2_private = require("glo_M2_public"); - //export var glo_im2_private_v1_public = glo_im2_private.c1; - //export var glo_im2_private_v2_public = new glo_im2_private.c1(); - //export var glo_im2_private_v3_public = glo_im2_private.f1; - //export var glo_im2_private_v4_public = glo_im2_private.f1(); - //var glo_im2_private_v1_private = glo_im2_private.c1; - //var glo_im2_private_v2_private = new glo_im2_private.c1(); - //var glo_im2_private_v3_private = glo_im2_private.f1; - //var glo_im2_private_v4_private = glo_im2_private.f1(); - - import glo_im3_private = glo_M3_private; - export var glo_im3_private_v1_public = glo_im3_private.c1; - export var glo_im3_private_v2_public = new glo_im3_private.c1(); - export var glo_im3_private_v3_public = glo_im3_private.f1; - export var glo_im3_private_v4_public = glo_im3_private.f1(); - var glo_im3_private_v1_private = glo_im3_private.c1; - var glo_im3_private_v2_private = new glo_im3_private.c1(); - var glo_im3_private_v3_private = glo_im3_private.f1; - var glo_im3_private_v4_private = glo_im3_private.f1(); - - //import glo_im4_private = require("glo_M4_private"); - //export var glo_im4_private_v1_public = glo_im4_private.c1; - //export var glo_im4_private_v2_public = new glo_im4_private.c1(); - //export var glo_im4_private_v3_public = glo_im4_private.f1; - //export var glo_im4_private_v4_public = glo_im4_private.f1(); - //var glo_im4_private_v1_private = glo_im4_private.c1; - //var glo_im4_private_v2_private = new glo_im4_private.c1(); - //var glo_im4_private_v3_private = glo_im4_private.f1; - //var glo_im4_private_v4_private = glo_im4_private.f1(); - - // Parse error to export module - export import glo_im1_public = glo_M1_public; - export import glo_im2_public = glo_M3_private; - //export import glo_im3_public = require("glo_M2_public"); - //export import glo_im4_public = require("glo_M4_private"); - - - //export declare module "use_glo_M1_public" { - // import use_glo_M1_public = glo_M1_public; - // export var use_glo_M1_public_v1_public: { new (): use_glo_M1_public.c1; }; - // export var use_glo_M1_public_v2_public: use_glo_M1_public; - // export var use_glo_M1_public_v3_public: () => use_glo_M1_public.c1; - // var use_glo_M1_public_v1_private: { new (): use_glo_M1_public.c1; }; - // var use_glo_M1_public_v2_private: use_glo_M1_public; - // var use_glo_M1_public_v3_private: () => use_glo_M1_public.c1; - - // import use_glo_M2_public = require("glo_M2_public"); - // export var use_glo_M2_public_v1_public: { new (): use_glo_M2_public.c1; }; - // export var use_glo_M2_public_v2_public: use_glo_M2_public; - // export var use_glo_M2_public_v3_public: () => use_glo_M2_public.c1; - // var use_glo_M2_public_v1_private: { new (): use_glo_M2_public.c1; }; - // var use_glo_M2_public_v2_private: use_glo_M2_public; - // var use_glo_M2_public_v3_private: () => use_glo_M2_public.c1; - - // module m2 { - // import errorImport = require("glo_M2_public"); - // import nonerrorImport = glo_M1_public; - - // module m5 { - // import m5_errorImport = require("glo_M2_public"); - // import m5_nonerrorImport = glo_M1_public; - // } - // } - //} - - - //declare module "use_glo_M3_private" { - // import use_glo_M3_private = glo_M3_private; - // export var use_glo_M3_private_v1_public: { new (): use_glo_M3_private.c1; }; - // export var use_glo_M3_private_v2_public: use_glo_M3_private; - // export var use_glo_M3_private_v3_public: () => use_glo_M3_private.c1; - // var use_glo_M3_private_v1_private: { new (): use_glo_M3_private.c1; }; - // var use_glo_M3_private_v2_private: use_glo_M3_private; - // var use_glo_M3_private_v3_private: () => use_glo_M3_private.c1; - - // import use_glo_M4_private = require("glo_M4_private"); - // export var use_glo_M4_private_v1_public: { new (): use_glo_M4_private.c1; }; - // export var use_glo_M4_private_v2_public: use_glo_M4_private; - // export var use_glo_M4_private_v3_public: () => use_glo_M4_private.c1; - // var use_glo_M4_private_v1_private: { new (): use_glo_M4_private.c1; }; - // var use_glo_M4_private_v2_private: use_glo_M4_private; - // var use_glo_M4_private_v3_private: () => use_glo_M4_private.c1; - - // module m2 { - // import errorImport = require("glo_M4_private"); - // import nonerrorImport = glo_M3_private; - - // module m5 { - // import m5_errorImport = require("glo_M4_private"); - // import m5_nonerrorImport = glo_M3_private; - // } - // } - //} - - //declare module "anotherParseError" { - // module m2 { - // declare module "abc" { - // } - // } - - // module m2 { - // module "abc2" { - // } - // } - // module "abc3" { - // } - //} - - //declare export module "anotherParseError2" { - // module m2 { - // declare module "abc" { - // } - // } - - // module m2 { - // module "abc2" { - // } - // } - // module "abc3" { - // } - //} - - module m2 { - //import m3 = require("use_glo_M1_public"); - module m4 { - var a = 10; - //import m2 = require("use_glo_M1_public"); - } - - } - - export module m3 { - //import m3 = require("use_glo_M1_public"); - module m4 { - var a = 10; - //import m2 = require("use_glo_M1_public"); - } - - } \ No newline at end of file diff --git a/tests/baselines/reference/privacyImport.js b/tests/baselines/reference/privacyImport.js index 7b7e4c4977f..68f2af90c05 100644 --- a/tests/baselines/reference/privacyImport.js +++ b/tests/baselines/reference/privacyImport.js @@ -527,3 +527,115 @@ var m2; })(m4 || (m4 = {})); })(exports.m3 || (exports.m3 = {})); var m3 = exports.m3; + + +//// [privacyImport.d.ts] +export declare module m1 { + module m1_M1_public { + class c1 { + } + function f1(): c1; + var v1: typeof c1; + var v2: c1; + } + import m1_im1_private = m1_M1_public; + var m1_im1_private_v1_public: typeof m1_im1_private.c1; + var m1_im1_private_v2_public: m1_im1_private.c1; + var m1_im1_private_v3_public: () => m1_im1_private.c1; + var m1_im1_private_v4_public: m1_im1_private.c1; + import m1_im2_private = m1_M2_private; + var m1_im2_private_v1_public: typeof m1_im2_private.c1; + var m1_im2_private_v2_public: m1_im2_private.c1; + var m1_im2_private_v3_public: () => m1_im2_private.c1; + var m1_im2_private_v4_public: m1_im2_private.c1; + export import m1_im1_public = m1_M1_public; + export import m1_im2_public = m1_M2_private; +} +export declare module glo_M1_public { + class c1 { + } + function f1(): c1; + var v1: typeof c1; + var v2: c1; +} +export declare module glo_M3_private { + class c1 { + } + function f1(): c1; + var v1: typeof c1; + var v2: c1; +} +import glo_im1_private = glo_M1_public; +export declare var glo_im1_private_v1_public: typeof glo_im1_private.c1; +export declare var glo_im1_private_v2_public: glo_im1_private.c1; +export declare var glo_im1_private_v3_public: () => glo_im1_private.c1; +export declare var glo_im1_private_v4_public: glo_im1_private.c1; +import glo_im3_private = glo_M3_private; +export declare var glo_im3_private_v1_public: typeof glo_im3_private.c1; +export declare var glo_im3_private_v2_public: glo_im3_private.c1; +export declare var glo_im3_private_v3_public: () => glo_im3_private.c1; +export declare var glo_im3_private_v4_public: glo_im3_private.c1; +export import glo_im1_public = glo_M1_public; +export import glo_im2_public = glo_M3_private; +export declare module m3 { +} + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/privacyImport.d.ts (2 errors) ==== + export declare module m1 { + module m1_M1_public { + class c1 { + } + function f1(): c1; + var v1: typeof c1; + var v2: c1; + } + import m1_im1_private = m1_M1_public; + var m1_im1_private_v1_public: typeof m1_im1_private.c1; + var m1_im1_private_v2_public: m1_im1_private.c1; + var m1_im1_private_v3_public: () => m1_im1_private.c1; + var m1_im1_private_v4_public: m1_im1_private.c1; + import m1_im2_private = m1_M2_private; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! Cannot find name 'm1_M2_private'. + var m1_im2_private_v1_public: typeof m1_im2_private.c1; + var m1_im2_private_v2_public: m1_im2_private.c1; + var m1_im2_private_v3_public: () => m1_im2_private.c1; + var m1_im2_private_v4_public: m1_im2_private.c1; + export import m1_im1_public = m1_M1_public; + export import m1_im2_public = m1_M2_private; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! Cannot find name 'm1_M2_private'. + } + export declare module glo_M1_public { + class c1 { + } + function f1(): c1; + var v1: typeof c1; + var v2: c1; + } + export declare module glo_M3_private { + class c1 { + } + function f1(): c1; + var v1: typeof c1; + var v2: c1; + } + import glo_im1_private = glo_M1_public; + export declare var glo_im1_private_v1_public: typeof glo_im1_private.c1; + export declare var glo_im1_private_v2_public: glo_im1_private.c1; + export declare var glo_im1_private_v3_public: () => glo_im1_private.c1; + export declare var glo_im1_private_v4_public: glo_im1_private.c1; + import glo_im3_private = glo_M3_private; + export declare var glo_im3_private_v1_public: typeof glo_im3_private.c1; + export declare var glo_im3_private_v2_public: glo_im3_private.c1; + export declare var glo_im3_private_v3_public: () => glo_im3_private.c1; + export declare var glo_im3_private_v4_public: glo_im3_private.c1; + export import glo_im1_public = glo_M1_public; + export import glo_im2_public = glo_M3_private; + export declare module m3 { + } + \ No newline at end of file