diff --git a/src/babel/transformation/file/index.js b/src/babel/transformation/file/index.js index aef1cc1ee0..a3ed081aad 100644 --- a/src/babel/transformation/file/index.js +++ b/src/babel/transformation/file/index.js @@ -16,6 +16,7 @@ import Logger from "./logger"; import parse from "../../helpers/parse"; import Scope from "../../traversal/scope"; import slash from "slash"; +import clone from "lodash/lang/clone"; import * as util from "../../util"; import path from "path"; import each from "lodash/collection/each"; @@ -120,7 +121,9 @@ export default class File { throw new Error("Deprecated option " + key + ": " + option.deprecated); } - if (val == null) val = option.default || val; + if (val == null) { + val = clone(option.default); + } var optionParser = optionParsers[option.type]; if (optionParser) val = optionParser(key, val); diff --git a/src/babel/transformation/file/options.json b/src/babel/transformation/file/options.json index 513cd11528..6de2a68857 100644 --- a/src/babel/transformation/file/options.json +++ b/src/babel/transformation/file/options.json @@ -15,8 +15,9 @@ "hidden": true }, - "pluginOptions": { - "hidden": true + "extra": { + "hidden": true, + "default": {} }, "moduleId": { diff --git a/test/core/api.js b/test/core/api.js index b662cc1fe1..9662ca8cd0 100644 --- a/test/core/api.js +++ b/test/core/api.js @@ -1,3 +1,5 @@ +require("../../lib/babel/api/node"); + var buildExternalHelpers = require("../../lib/babel/tools/build-external-helpers"); var transform = require("../../lib/babel/transformation"); var assert = require("assert"); @@ -21,6 +23,15 @@ suite("api", function () { }, /Unknown helper foob/); }); + test("extra options", function () { + var file1 = new File({ extra: { foo: "bar" } }); + assert.equal(file1.opts.extra.foo, "bar"); + + var file2 = new File; + var file3 = new File; + assert.ok(file2.opts.extra !== file3.opts.extra); + }); + suite("buildExternalHelpers", function () { test("all", function () { var script = buildExternalHelpers();