From 2bdc222c0bbba1a161dcd406dd9d58ade1927259 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 2 Nov 2015 19:21:24 +0000 Subject: [PATCH] wWhen merging options, take precedence over the current array - fixes #2648 --- packages/babel-core/src/helpers/merge.js | 12 +++++++----- packages/babel-core/test/api.js | 9 +++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) 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);