support export statements properly (#2126)
- mangle & compress correctly with `toplevel`
- retain non-toplevel import/export
- parse & output `export { variable as name }`
- remove extraneous spaces from `beautify`
fixes #2038
fixes #2124
This commit is contained in:
97
test/compress/export.js
Normal file
97
test/compress/export.js
Normal file
@@ -0,0 +1,97 @@
|
||||
issue_2038_1: {
|
||||
options = {
|
||||
toplevel: true,
|
||||
unused: true,
|
||||
}
|
||||
mangle = {
|
||||
toplevel: true,
|
||||
}
|
||||
input: {
|
||||
export var V = 1;
|
||||
export let L = 2;
|
||||
export const C = 3;
|
||||
}
|
||||
expect: {
|
||||
export var V = 1;
|
||||
export let L = 2;
|
||||
export const C = 3;
|
||||
}
|
||||
}
|
||||
|
||||
issue_2038_2: {
|
||||
options = {
|
||||
toplevel: true,
|
||||
unused: true,
|
||||
}
|
||||
mangle = {
|
||||
toplevel: true,
|
||||
}
|
||||
input: {
|
||||
let LET = 1;
|
||||
const CONST = 2;
|
||||
var VAR = 3;
|
||||
export { LET, CONST, VAR };
|
||||
}
|
||||
expect: {
|
||||
let a = 1;
|
||||
const c = 2;
|
||||
var n = 3;
|
||||
export { a as LET, c as CONST, n as VAR };
|
||||
}
|
||||
}
|
||||
|
||||
issue_2124: {
|
||||
options = {
|
||||
unused: true,
|
||||
}
|
||||
input: {
|
||||
{
|
||||
export var V = 1;
|
||||
}
|
||||
{
|
||||
export let L = 2;
|
||||
}
|
||||
{
|
||||
export const C = 3;
|
||||
}
|
||||
}
|
||||
expect: {
|
||||
{
|
||||
export var V = 1;
|
||||
}
|
||||
{
|
||||
export let L = 2;
|
||||
}
|
||||
{
|
||||
export const C = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
issue_2126: {
|
||||
mangle = {
|
||||
toplevel: true,
|
||||
}
|
||||
input: {
|
||||
import { foo as bar, cat as dog } from "stuff";
|
||||
console.log(bar, dog);
|
||||
export { bar as qux };
|
||||
export { dog };
|
||||
}
|
||||
expect: {
|
||||
import { foo as o, cat as f } from "stuff";
|
||||
console.log(o, f);
|
||||
export { o as qux };
|
||||
export { f as dog };
|
||||
}
|
||||
}
|
||||
|
||||
beautify: {
|
||||
beautify = {
|
||||
beautify: true,
|
||||
}
|
||||
input: {
|
||||
export { A as B, C as D };
|
||||
}
|
||||
expect_exact: "export { A as B, C as D };"
|
||||
}
|
||||
@@ -2,8 +2,7 @@ var assert = require("assert");
|
||||
var uglify = require("../node");
|
||||
|
||||
describe("Export", function() {
|
||||
it ("Should parse export directives", function() {
|
||||
|
||||
it("Should parse export directives", function() {
|
||||
var inputs = [
|
||||
['export * from "a.js"', ['*'], "a.js"],
|
||||
['export {A} from "a.js"', ['A'], "a.js"],
|
||||
@@ -12,17 +11,17 @@ describe("Export", function() {
|
||||
['export {A, B} from "a.js"', ['A', 'B'], "a.js"],
|
||||
];
|
||||
|
||||
var test = function(code) {
|
||||
function test(code) {
|
||||
return uglify.parse(code);
|
||||
};
|
||||
}
|
||||
|
||||
var extractNames = function(symbols) {
|
||||
function extractNames(symbols) {
|
||||
var ret = [];
|
||||
for (var i = 0; i < symbols.length; i++) {
|
||||
ret.push(symbols[i].name.name)
|
||||
ret.push(symbols[i].foreign_name.name);
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
|
||||
for (var i = 0; i < inputs.length; i++) {
|
||||
var ast = test(inputs[i][0]);
|
||||
@@ -34,7 +33,7 @@ describe("Export", function() {
|
||||
assert(st instanceof uglify.AST_Export);
|
||||
var actualNames = extractNames(st.exported_names);
|
||||
assert.deepEqual(actualNames, names);
|
||||
assert.equal(st.module_name.value, filename)
|
||||
assert.equal(st.module_name.value, filename);
|
||||
}
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user