summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/internal/bootstrap/pre_execution.js28
-rw-r--r--test/parallel/test-global-setters.js27
2 files changed, 55 insertions, 0 deletions
diff --git a/lib/internal/bootstrap/pre_execution.js b/lib/internal/bootstrap/pre_execution.js
index c38822bd89..233ab4f879 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 0000000000..7fd070ed8e
--- /dev/null
+++ b/test/parallel/test-global-setters.js
@@ -0,0 +1,27 @@
+/* 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(
+ typeof Object.getOwnPropertyDescriptor(global, 'process').get,
+ 'function');
+
+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);
+assert.strictEqual(
+ typeof Object.getOwnPropertyDescriptor(global, 'Buffer').get,
+ 'function');