From deb77789a83e54b15d22f9816d70267136263d51 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Sun, 24 Mar 2019 01:00:07 +0200 Subject: [PATCH 1/2] process: make global.process, global.Buffer getters --- lib/internal/bootstrap/pre_execution.js | 28 +++++++++++++++++++++++++ test/parallel/test-global-setters.js | 21 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 test/parallel/test-global-setters.js diff --git a/lib/internal/bootstrap/pre_execution.js b/lib/internal/bootstrap/pre_execution.js index c38822bd8967e5..233ab4f879cf97 100644 --- a/lib/internal/bootstrap/pre_execution.js +++ b/lib/internal/bootstrap/pre_execution.js @@ -1,6 +1,7 @@ 'use strict'; const { getOptionValue } = require('internal/options'); +const { Buffer } = require('buffer'); function prepareMainThreadExecution() { // Patch the process object with legacy properties and normalizations @@ -221,6 +222,33 @@ function initializeDeprecations() { 'process.binding() is deprecated. ' + 'Please use public APIs instead.', 'DEP0111'); } + + // Create global.process and global.Buffer as getters so that we have a + // deprecation path for these in ES Modules. + // See https://github.com/nodejs/node/pull/26334. + let _process = process; + Object.defineProperty(global, 'process', { + get() { + return _process; + }, + set(value) { + _process = value; + }, + enumerable: false, + configurable: true + }); + + let _Buffer = Buffer; + Object.defineProperty(global, 'Buffer', { + get() { + return _Buffer; + }, + set(value) { + _Buffer = value; + }, + enumerable: false, + configurable: true + }); } function setupChildProcessIpcChannel() { diff --git a/test/parallel/test-global-setters.js b/test/parallel/test-global-setters.js new file mode 100644 index 00000000000000..9aac5aa64e18bb --- /dev/null +++ b/test/parallel/test-global-setters.js @@ -0,0 +1,21 @@ +/* eslint-disable strict */ +require('../common'); +const assert = require('assert'); +const _process = require('process'); +const { Buffer: _Buffer } = require('buffer'); + +assert.strictEqual(process, _process); +// eslint-disable-next-line no-global-assign +process = 'asdf'; +assert.strictEqual(process, 'asdf'); +assert.strictEqual(global.process, 'asdf'); +global.process = _process; +assert.strictEqual(process, _process); + +assert.strictEqual(Buffer, _Buffer); +// eslint-disable-next-line no-global-assign +Buffer = 'asdf'; +assert.strictEqual(Buffer, 'asdf'); +assert.strictEqual(global.Buffer, 'asdf'); +global.Buffer = _Buffer; +assert.strictEqual(Buffer, _Buffer); From 6043216087979297805de70272b08dcae4a23fef Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Tue, 26 Mar 2019 15:25:33 +0200 Subject: [PATCH 2/2] fixup: add getter test --- test/parallel/test-global-setters.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/parallel/test-global-setters.js b/test/parallel/test-global-setters.js index 9aac5aa64e18bb..7fd070ed8e1c4e 100644 --- a/test/parallel/test-global-setters.js +++ b/test/parallel/test-global-setters.js @@ -11,6 +11,9 @@ assert.strictEqual(process, 'asdf'); assert.strictEqual(global.process, 'asdf'); global.process = _process; assert.strictEqual(process, _process); +assert.strictEqual( + typeof Object.getOwnPropertyDescriptor(global, 'process').get, + 'function'); assert.strictEqual(Buffer, _Buffer); // eslint-disable-next-line no-global-assign @@ -19,3 +22,6 @@ assert.strictEqual(Buffer, 'asdf'); assert.strictEqual(global.Buffer, 'asdf'); global.Buffer = _Buffer; assert.strictEqual(Buffer, _Buffer); +assert.strictEqual( + typeof Object.getOwnPropertyDescriptor(global, 'Buffer').get, + 'function');