mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-05 16:38:05 -06:00
Export * and export { names } emit in es6 format
Conflicts: src/compiler/emitter.ts tests/baselines/reference/es6ExportAll.js tests/baselines/reference/es6ExportClause.js tests/baselines/reference/es6ExportClauseWithoutModuleSpecifier.js
This commit is contained in:
parent
680cf6d844
commit
fe9fff506d
@ -5108,7 +5108,7 @@ module ts {
|
||||
}
|
||||
}
|
||||
|
||||
function emitImportSpecifier(node: ImportSpecifier) {
|
||||
function emitImportOrExportSpecifier(node: ImportSpecifier) {
|
||||
Debug.assert(languageVersion >= ScriptTarget.ES6);
|
||||
if (node.propertyName) {
|
||||
emit(node.propertyName);
|
||||
@ -5186,42 +5186,61 @@ module ts {
|
||||
}
|
||||
|
||||
function emitExportDeclaration(node: ExportDeclaration) {
|
||||
if (node.moduleSpecifier) {
|
||||
emitStart(node);
|
||||
var generatedName = resolver.getGeneratedNameForNode(node);
|
||||
if (compilerOptions.module !== ModuleKind.AMD) {
|
||||
write("var ");
|
||||
write(generatedName);
|
||||
write(" = ");
|
||||
emitRequire(getExternalModuleName(node));
|
||||
if (languageVersion < ScriptTarget.ES6) {
|
||||
if (node.moduleSpecifier) {
|
||||
emitStart(node);
|
||||
var generatedName = resolver.getGeneratedNameForNode(node);
|
||||
if (compilerOptions.module !== ModuleKind.AMD) {
|
||||
write("var ");
|
||||
write(generatedName);
|
||||
write(" = ");
|
||||
emitRequire(getExternalModuleName(node));
|
||||
}
|
||||
if (node.exportClause) {
|
||||
// export { x, y, ... }
|
||||
forEach(node.exportClause.elements, specifier => {
|
||||
writeLine();
|
||||
emitStart(specifier);
|
||||
emitContainingModuleName(specifier);
|
||||
write(".");
|
||||
emitNodeWithoutSourceMap(specifier.name);
|
||||
write(" = ");
|
||||
write(generatedName);
|
||||
write(".");
|
||||
emitNodeWithoutSourceMap(specifier.propertyName || specifier.name);
|
||||
write(";");
|
||||
emitEnd(specifier);
|
||||
});
|
||||
}
|
||||
else {
|
||||
// export *
|
||||
var tempName = createTempVariable(node).text;
|
||||
writeLine();
|
||||
write("for (var " + tempName + " in " + generatedName + ") if (!");
|
||||
emitContainingModuleName(node);
|
||||
write(".hasOwnProperty(" + tempName + ")) ");
|
||||
emitContainingModuleName(node);
|
||||
write("[" + tempName + "] = " + generatedName + "[" + tempName + "];");
|
||||
}
|
||||
emitEnd(node);
|
||||
}
|
||||
}
|
||||
else {
|
||||
write("export ");
|
||||
if (node.exportClause) {
|
||||
// export { x, y, ... }
|
||||
forEach(node.exportClause.elements, specifier => {
|
||||
writeLine();
|
||||
emitStart(specifier);
|
||||
emitContainingModuleName(specifier);
|
||||
write(".");
|
||||
emitNodeWithoutSourceMap(specifier.name);
|
||||
write(" = ");
|
||||
write(generatedName);
|
||||
write(".");
|
||||
emitNodeWithoutSourceMap(specifier.propertyName || specifier.name);
|
||||
write(";");
|
||||
emitEnd(specifier);
|
||||
});
|
||||
write("{ ");
|
||||
emitCommaList(node.exportClause.elements);
|
||||
write(" }");
|
||||
}
|
||||
else {
|
||||
// export *
|
||||
var tempName = createTempVariable(node).text;
|
||||
writeLine();
|
||||
write("for (var " + tempName + " in " + generatedName + ") if (!");
|
||||
emitContainingModuleName(node);
|
||||
write(".hasOwnProperty(" + tempName + ")) ");
|
||||
emitContainingModuleName(node);
|
||||
write("[" + tempName + "] = " + generatedName + "[" + tempName + "];");
|
||||
write("*");
|
||||
}
|
||||
emitEnd(node);
|
||||
if (node.moduleSpecifier) {
|
||||
write(" from ");
|
||||
emit(node.moduleSpecifier);
|
||||
}
|
||||
write(";");
|
||||
}
|
||||
}
|
||||
|
||||
@ -5689,7 +5708,8 @@ module ts {
|
||||
case SyntaxKind.ImportDeclaration:
|
||||
return emitImportDeclaration(<ImportDeclaration>node);
|
||||
case SyntaxKind.ImportSpecifier:
|
||||
return emitImportSpecifier(<ImportSpecifier>node);
|
||||
case SyntaxKind.ExportSpecifier:
|
||||
return emitImportOrExportSpecifier(<ImportOrExportSpecifier>node);
|
||||
case SyntaxKind.ImportEqualsDeclaration:
|
||||
return emitImportEqualsDeclaration(<ImportEqualsDeclaration>node);
|
||||
case SyntaxKind.ExportDeclaration:
|
||||
|
||||
47
tests/baselines/reference/es6ExportAll.js
Normal file
47
tests/baselines/reference/es6ExportAll.js
Normal file
@ -0,0 +1,47 @@
|
||||
//// [tests/cases/compiler/es6ExportAll.ts] ////
|
||||
|
||||
//// [server.ts]
|
||||
|
||||
export class c {
|
||||
}
|
||||
export interface i {
|
||||
}
|
||||
export module m {
|
||||
export var x = 10;
|
||||
}
|
||||
export var x = 10;
|
||||
export module uninstantiated {
|
||||
}
|
||||
|
||||
//// [client.ts]
|
||||
export * from "server";
|
||||
|
||||
//// [server.js]
|
||||
var c = (function () {
|
||||
function c() {
|
||||
}
|
||||
return c;
|
||||
})();
|
||||
export { c };
|
||||
var m;
|
||||
(function (m) {
|
||||
m.x = 10;
|
||||
})(m || (m = {}));
|
||||
export { m };
|
||||
export var x = 10;
|
||||
//// [client.js]
|
||||
export * from "server";
|
||||
|
||||
|
||||
//// [server.d.ts]
|
||||
export declare class c {
|
||||
}
|
||||
export interface i {
|
||||
}
|
||||
export declare module m {
|
||||
var x: number;
|
||||
}
|
||||
export declare var x: number;
|
||||
export declare module uninstantiated {
|
||||
}
|
||||
//// [client.d.ts]
|
||||
24
tests/baselines/reference/es6ExportAll.types
Normal file
24
tests/baselines/reference/es6ExportAll.types
Normal file
@ -0,0 +1,24 @@
|
||||
=== tests/cases/compiler/server.ts ===
|
||||
|
||||
export class c {
|
||||
>c : c
|
||||
}
|
||||
export interface i {
|
||||
>i : i
|
||||
}
|
||||
export module m {
|
||||
>m : typeof m
|
||||
|
||||
export var x = 10;
|
||||
>x : number
|
||||
}
|
||||
export var x = 10;
|
||||
>x : number
|
||||
|
||||
export module uninstantiated {
|
||||
>uninstantiated : unknown
|
||||
}
|
||||
|
||||
=== tests/cases/compiler/client.ts ===
|
||||
export * from "server";
|
||||
No type information for this code.
|
||||
47
tests/baselines/reference/es6ExportAllInEs5.js
Normal file
47
tests/baselines/reference/es6ExportAllInEs5.js
Normal file
@ -0,0 +1,47 @@
|
||||
//// [tests/cases/compiler/es6ExportAllInEs5.ts] ////
|
||||
|
||||
//// [server.ts]
|
||||
|
||||
export class c {
|
||||
}
|
||||
export interface i {
|
||||
}
|
||||
export module m {
|
||||
export var x = 10;
|
||||
}
|
||||
export var x = 10;
|
||||
export module uninstantiated {
|
||||
}
|
||||
|
||||
//// [client.ts]
|
||||
export * from "server";
|
||||
|
||||
//// [server.js]
|
||||
var c = (function () {
|
||||
function c() {
|
||||
}
|
||||
return c;
|
||||
})();
|
||||
exports.c = c;
|
||||
var m;
|
||||
(function (m) {
|
||||
m.x = 10;
|
||||
})(m = exports.m || (exports.m = {}));
|
||||
exports.x = 10;
|
||||
//// [client.js]
|
||||
var _server = require("server");
|
||||
for (var _a in _server) if (!exports.hasOwnProperty(_a)) exports[_a] = _server[_a];
|
||||
|
||||
|
||||
//// [server.d.ts]
|
||||
export declare class c {
|
||||
}
|
||||
export interface i {
|
||||
}
|
||||
export declare module m {
|
||||
var x: number;
|
||||
}
|
||||
export declare var x: number;
|
||||
export declare module uninstantiated {
|
||||
}
|
||||
//// [client.d.ts]
|
||||
24
tests/baselines/reference/es6ExportAllInEs5.types
Normal file
24
tests/baselines/reference/es6ExportAllInEs5.types
Normal file
@ -0,0 +1,24 @@
|
||||
=== tests/cases/compiler/server.ts ===
|
||||
|
||||
export class c {
|
||||
>c : c
|
||||
}
|
||||
export interface i {
|
||||
>i : i
|
||||
}
|
||||
export module m {
|
||||
>m : typeof m
|
||||
|
||||
export var x = 10;
|
||||
>x : number
|
||||
}
|
||||
export var x = 10;
|
||||
>x : number
|
||||
|
||||
export module uninstantiated {
|
||||
>uninstantiated : unknown
|
||||
}
|
||||
|
||||
=== tests/cases/compiler/client.ts ===
|
||||
export * from "server";
|
||||
No type information for this code.
|
||||
37
tests/baselines/reference/es6ExportClause.js
Normal file
37
tests/baselines/reference/es6ExportClause.js
Normal file
@ -0,0 +1,37 @@
|
||||
//// [es6ExportClause.ts]
|
||||
|
||||
class c {
|
||||
}
|
||||
interface i {
|
||||
}
|
||||
module m {
|
||||
export var x = 10;
|
||||
}
|
||||
var x = 10;
|
||||
module uninstantiated {
|
||||
}
|
||||
export { c };
|
||||
export { c as c2 };
|
||||
export { i, m as instantiatedModule };
|
||||
export { uninstantiated };
|
||||
export { x };
|
||||
|
||||
//// [es6ExportClause.js]
|
||||
var c = (function () {
|
||||
function c() {
|
||||
}
|
||||
return c;
|
||||
})();
|
||||
var m;
|
||||
(function (m) {
|
||||
m.x = 10;
|
||||
})(m || (m = {}));
|
||||
var x = 10;
|
||||
export { c };
|
||||
export { c as c2 };
|
||||
export { i, m as instantiatedModule };
|
||||
export { uninstantiated };
|
||||
export { x };
|
||||
|
||||
|
||||
//// [es6ExportClause.d.ts]
|
||||
38
tests/baselines/reference/es6ExportClause.types
Normal file
38
tests/baselines/reference/es6ExportClause.types
Normal file
@ -0,0 +1,38 @@
|
||||
=== tests/cases/compiler/es6ExportClause.ts ===
|
||||
|
||||
class c {
|
||||
>c : c
|
||||
}
|
||||
interface i {
|
||||
>i : i
|
||||
}
|
||||
module m {
|
||||
>m : typeof m
|
||||
|
||||
export var x = 10;
|
||||
>x : number
|
||||
}
|
||||
var x = 10;
|
||||
>x : number
|
||||
|
||||
module uninstantiated {
|
||||
>uninstantiated : unknown
|
||||
}
|
||||
export { c };
|
||||
>c : typeof c
|
||||
|
||||
export { c as c2 };
|
||||
>c : typeof c
|
||||
>c2 : typeof c
|
||||
|
||||
export { i, m as instantiatedModule };
|
||||
>i : unknown
|
||||
>m : typeof m
|
||||
>instantiatedModule : typeof m
|
||||
|
||||
export { uninstantiated };
|
||||
>uninstantiated : unknown
|
||||
|
||||
export { x };
|
||||
>x : number
|
||||
|
||||
@ -0,0 +1,55 @@
|
||||
//// [tests/cases/compiler/es6ExportClauseWithoutModuleSpecifier.ts] ////
|
||||
|
||||
//// [server.ts]
|
||||
|
||||
export class c {
|
||||
}
|
||||
export interface i {
|
||||
}
|
||||
export module m {
|
||||
export var x = 10;
|
||||
}
|
||||
export var x = 10;
|
||||
export module uninstantiated {
|
||||
}
|
||||
|
||||
//// [client.ts]
|
||||
export { c } from "server";
|
||||
export { c as c2 } from "server";
|
||||
export { i, m as instantiatedModule } from "server";
|
||||
export { uninstantiated } from "server";
|
||||
export { x } from "server";
|
||||
|
||||
//// [server.js]
|
||||
var c = (function () {
|
||||
function c() {
|
||||
}
|
||||
return c;
|
||||
})();
|
||||
export { c };
|
||||
var m;
|
||||
(function (m) {
|
||||
m.x = 10;
|
||||
})(m || (m = {}));
|
||||
export { m };
|
||||
export var x = 10;
|
||||
//// [client.js]
|
||||
export { c } from "server";
|
||||
export { c as c2 } from "server";
|
||||
export { i, m as instantiatedModule } from "server";
|
||||
export { uninstantiated } from "server";
|
||||
export { x } from "server";
|
||||
|
||||
|
||||
//// [server.d.ts]
|
||||
export declare class c {
|
||||
}
|
||||
export interface i {
|
||||
}
|
||||
export declare module m {
|
||||
var x: number;
|
||||
}
|
||||
export declare var x: number;
|
||||
export declare module uninstantiated {
|
||||
}
|
||||
//// [client.d.ts]
|
||||
@ -0,0 +1,40 @@
|
||||
=== tests/cases/compiler/server.ts ===
|
||||
|
||||
export class c {
|
||||
>c : c
|
||||
}
|
||||
export interface i {
|
||||
>i : i
|
||||
}
|
||||
export module m {
|
||||
>m : typeof m
|
||||
|
||||
export var x = 10;
|
||||
>x : number
|
||||
}
|
||||
export var x = 10;
|
||||
>x : number
|
||||
|
||||
export module uninstantiated {
|
||||
>uninstantiated : unknown
|
||||
}
|
||||
|
||||
=== tests/cases/compiler/client.ts ===
|
||||
export { c } from "server";
|
||||
>c : typeof c
|
||||
|
||||
export { c as c2 } from "server";
|
||||
>c : typeof c
|
||||
>c2 : typeof c
|
||||
|
||||
export { i, m as instantiatedModule } from "server";
|
||||
>i : unknown
|
||||
>m : typeof instantiatedModule
|
||||
>instantiatedModule : typeof instantiatedModule
|
||||
|
||||
export { uninstantiated } from "server";
|
||||
>uninstantiated : unknown
|
||||
|
||||
export { x } from "server";
|
||||
>x : number
|
||||
|
||||
17
tests/cases/compiler/es6ExportAll.ts
Normal file
17
tests/cases/compiler/es6ExportAll.ts
Normal file
@ -0,0 +1,17 @@
|
||||
// @target: es6
|
||||
// @declaration: true
|
||||
|
||||
// @filename: server.ts
|
||||
export class c {
|
||||
}
|
||||
export interface i {
|
||||
}
|
||||
export module m {
|
||||
export var x = 10;
|
||||
}
|
||||
export var x = 10;
|
||||
export module uninstantiated {
|
||||
}
|
||||
|
||||
// @filename: client.ts
|
||||
export * from "server";
|
||||
18
tests/cases/compiler/es6ExportAllInEs5.ts
Normal file
18
tests/cases/compiler/es6ExportAllInEs5.ts
Normal file
@ -0,0 +1,18 @@
|
||||
// @target: es5
|
||||
// @module: commonjs
|
||||
// @declaration: true
|
||||
|
||||
// @filename: server.ts
|
||||
export class c {
|
||||
}
|
||||
export interface i {
|
||||
}
|
||||
export module m {
|
||||
export var x = 10;
|
||||
}
|
||||
export var x = 10;
|
||||
export module uninstantiated {
|
||||
}
|
||||
|
||||
// @filename: client.ts
|
||||
export * from "server";
|
||||
19
tests/cases/compiler/es6ExportClause.ts
Normal file
19
tests/cases/compiler/es6ExportClause.ts
Normal file
@ -0,0 +1,19 @@
|
||||
// @target: es6
|
||||
// @declaration: true
|
||||
|
||||
// @filename: server.ts
|
||||
class c {
|
||||
}
|
||||
interface i {
|
||||
}
|
||||
module m {
|
||||
export var x = 10;
|
||||
}
|
||||
var x = 10;
|
||||
module uninstantiated {
|
||||
}
|
||||
export { c };
|
||||
export { c as c2 };
|
||||
export { i, m as instantiatedModule };
|
||||
export { uninstantiated };
|
||||
export { x };
|
||||
@ -0,0 +1,21 @@
|
||||
// @target: es6
|
||||
// @declaration: true
|
||||
|
||||
// @filename: server.ts
|
||||
export class c {
|
||||
}
|
||||
export interface i {
|
||||
}
|
||||
export module m {
|
||||
export var x = 10;
|
||||
}
|
||||
export var x = 10;
|
||||
export module uninstantiated {
|
||||
}
|
||||
|
||||
// @filename: client.ts
|
||||
export { c } from "server";
|
||||
export { c as c2 } from "server";
|
||||
export { i, m as instantiatedModule } from "server";
|
||||
export { uninstantiated } from "server";
|
||||
export { x } from "server";
|
||||
Loading…
x
Reference in New Issue
Block a user