diff --git a/packages/babel-core/src/helpers/merge.js b/packages/babel-core/src/helpers/merge.js index 71eacdbf2c..962f255926 100644 --- a/packages/babel-core/src/helpers/merge.js +++ b/packages/babel-core/src/helpers/merge.js @@ -7,13 +7,15 @@ export default function (dest?: Object, src?: Object): ?Object { return merge(dest, src, function (a, b) { if (b && Array.isArray(a)) { - let c = a.slice(0); - for (let v of b) { - if (a.indexOf(v) < 0) { - c.push(v); + let newArray = b.slice(0); + + for (let item of a) { + if (newArray.indexOf(item) < 0) { + newArray.push(item); } } - return c; + + return newArray; } }); } diff --git a/packages/babel-core/test/api.js b/packages/babel-core/test/api.js index c4e615de7a..f781bab8bf 100644 --- a/packages/babel-core/test/api.js +++ b/packages/babel-core/test/api.js @@ -24,6 +24,15 @@ function transformAsync(code, opts) { } suite("api", function () { + test("options merge backwards", function () { + return transformAsync("", { + presets: [__dirname + "/../../babel-preset-es2015"], + plugins: [__dirname + "/../../babel-plugin-syntax-jsx"] + }).then(function (result) { + assert.ok(result.options.plugins[0][0].manipulateOptions.toString().indexOf("jsx") >= 0); + }); + }); + test("code option false", function () { return transformAsync("foo('bar');", { code: false }).then(function (result) { assert.ok(!result.code);