Keep user options intact in transformFile (#6890)

* Preserve user options in transformFile

* Improve tests for transformFile user opts handling
This commit is contained in:
Nicolas Marien 2017-11-25 19:13:56 +01:00 committed by Logan Smyth
parent 66ee192a7f
commit cf62908bbd
3 changed files with 29 additions and 20 deletions

View File

@ -8,13 +8,14 @@ export default function transformFileSync(
filename: string,
opts: ?InputOptions,
): FileResult | null {
let options;
if (opts == null) {
opts = { filename };
options = { filename };
} else if (opts && typeof opts === "object") {
opts = Object.assign(opts, { filename });
options = Object.assign({}, opts, { filename });
}
const config = loadConfig(opts);
const config = loadConfig(options);
if (config === null) return null;
return runSync(config, fs.readFileSync(filename, "utf8"));

View File

@ -10,21 +10,22 @@ type TransformFile = {
};
export default ((function transformFile(filename, opts, callback) {
let options;
if (typeof opts === "function") {
callback = opts;
opts = undefined;
}
if (opts == null) {
opts = { filename };
options = { filename };
} else if (opts && typeof opts === "object") {
opts = Object.assign(opts, { filename });
options = Object.assign({}, opts, { filename });
}
process.nextTick(() => {
let cfg;
try {
cfg = loadConfig(opts);
cfg = loadConfig(options);
if (cfg === null) return callback(null, null);
} catch (err) {
return callback(err);

View File

@ -118,26 +118,33 @@ describe("api", function() {
});
it("transformFile", function(done) {
babel.transformFile(
__dirname + "/fixtures/api/file.js",
{
const options = {
babelrc: false,
},
function(err, res) {
};
Object.freeze(options);
babel.transformFile(__dirname + "/fixtures/api/file.js", options, function(
err,
res,
) {
if (err) return done(err);
assert.equal(res.code, "foo();");
// keep user options untouched
assert.deepEqual(options, { babelrc: false });
done();
},
);
});
});
it("transformFileSync", function() {
assert.equal(
babel.transformFileSync(__dirname + "/fixtures/api/file.js", {
const options = {
babelrc: false,
}).code,
};
Object.freeze(options);
assert.equal(
babel.transformFileSync(__dirname + "/fixtures/api/file.js", options)
.code,
"foo();",
);
assert.deepEqual(options, { babelrc: false });
});
it("options throw on falsy true", function() {