From d158a48945a08591ab6b9e746540e3fca78f6509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Thu, 6 Jan 2022 18:37:45 +0100 Subject: [PATCH] Don't mutate `@babel/register` options (#14107) --- packages/babel-register/src/node.js | 5 ++- packages/babel-register/test/index.js | 54 ++++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/packages/babel-register/src/node.js b/packages/babel-register/src/node.js index 8457f228f732..5ab5a712d95e 100644 --- a/packages/babel-register/src/node.js +++ b/packages/babel-register/src/node.js @@ -5,7 +5,10 @@ const hook = require("./hook"); const { LocalClient } = require("./worker-client"); -const register = hook.register.bind(null, new LocalClient()); +const client = new LocalClient(); +function register(opts = {}) { + return hook.register(client, { ...opts }); +} module.exports = Object.assign(register, { revert: hook.revert, diff --git a/packages/babel-register/test/index.js b/packages/babel-register/test/index.js index ba4b0250a1c2..99ea1749ed9f 100644 --- a/packages/babel-register/test/index.js +++ b/packages/babel-register/test/index.js @@ -118,7 +118,33 @@ describe("@babel/register", function () { }); } - buildTests(require.resolve("..")); + const { setupRegister } = buildTests(require.resolve("..")); + + it("does not mutate options", () => { + const proxyHandler = { + defineProperty: jest.fn(Reflect.defineProperty), + deleteProperty: jest.fn(Reflect.deleteProperty), + set: jest.fn(Reflect.set), + }; + + setupRegister( + new Proxy( + { + babelrc: true, + sourceMaps: false, + cwd: path.dirname(testFileMjs), + extensions: [".js"], + }, + proxyHandler, + ), + ); + + currentHook(testFileContent, testFile); + + expect(proxyHandler.defineProperty).not.toHaveBeenCalled(); + expect(proxyHandler.deleteProperty).not.toHaveBeenCalled(); + expect(proxyHandler.set).not.toHaveBeenCalled(); + }); }); } @@ -344,6 +370,32 @@ describe("@babel/register", function () { expect(convertSourceMap).toMatch("/* transformed */"); }); + test("does not mutate options", () => { + const proxyHandler = { + defineProperty: jest.fn(Reflect.defineProperty), + deleteProperty: jest.fn(Reflect.deleteProperty), + set: jest.fn(Reflect.set), + }; + + setupRegister( + new Proxy( + { + babelrc: true, + sourceMaps: false, + cwd: path.dirname(testFileMjs), + extensions: [".js"], + }, + proxyHandler, + ), + ); + + currentHook(testFileContent, testFile); + + expect(proxyHandler.defineProperty).not.toHaveBeenCalled(); + expect(proxyHandler.deleteProperty).not.toHaveBeenCalled(); + expect(proxyHandler.set).not.toHaveBeenCalled(); + }); + return { setupRegister, revertRegister }; } });