From df073cdda4d9f3afb5ae7a5dd0bd153537b66181 Mon Sep 17 00:00:00 2001
From: cjihrig <cjihrig@gmail.com>
Date: Thu, 23 Aug 2018 10:20:12 -0400
Subject: [PATCH] tty: make process.binding('tty_wrap') internal
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

PR-URL: https://github.com/nodejs/node/pull/22477
Refs: https://github.com/nodejs/node/issues/22160
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
---
 lib/internal/bootstrap/node.js                              | 1 +
 lib/internal/child_process.js                               | 2 +-
 lib/internal/dgram.js                                       | 4 ++--
 lib/internal/process/stdio.js                               | 6 ++++--
 lib/net.js                                                  | 2 +-
 lib/tty.js                                                  | 3 ++-
 src/tty_wrap.cc                                             | 2 +-
 test/parallel/test-accessor-properties.js                   | 4 +++-
 .../test-stream-base-prototype-accessors-enumerability.js   | 4 +++-
 test/parallel/test-tty-backwards-api.js                     | 4 +++-
 test/pseudo-tty/ref_keeps_node_running.js                   | 4 +++-
 test/pseudo-tty/test-async-wrap-getasyncid-tty.js           | 2 +-
 test/pseudo-tty/test-handle-wrap-isrefed-tty.js             | 4 +++-
 test/pseudo-tty/test-tty-window-size.js                     | 4 +++-
 test/pseudo-tty/test-tty-wrap.js                            | 2 +-
 15 files changed, 32 insertions(+), 16 deletions(-)

diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js
index 96b620d057c5ca..d65e12cc78d600 100644
--- a/lib/internal/bootstrap/node.js
+++ b/lib/internal/bootstrap/node.js
@@ -353,6 +353,7 @@
         'http_parser',
         'process_wrap',
         'v8',
+        'tty_wrap',
         'stream_wrap',
         'signal_wrap',
         'crypto',
diff --git a/lib/internal/child_process.js b/lib/internal/child_process.js
index 8aad6bcd6f8e07..6c46aaf34dc5aa 100644
--- a/lib/internal/child_process.js
+++ b/lib/internal/child_process.js
@@ -26,8 +26,8 @@ const { internalBinding } = require('internal/bootstrap/loaders');
 const { Process } = internalBinding('process_wrap');
 const { WriteWrap } = internalBinding('stream_wrap');
 const { Pipe, constants: PipeConstants } = process.binding('pipe_wrap');
-const { TTY } = process.binding('tty_wrap');
 const { TCP } = internalBinding('tcp_wrap');
+const { TTY } = internalBinding('tty_wrap');
 const { UDP } = process.binding('udp_wrap');
 const SocketList = require('internal/socket_list');
 const { owner_symbol } = require('internal/async_hooks').symbols;
diff --git a/lib/internal/dgram.js b/lib/internal/dgram.js
index e01b0d782fdab6..f4a1c4e7b89936 100644
--- a/lib/internal/dgram.js
+++ b/lib/internal/dgram.js
@@ -1,9 +1,9 @@
 'use strict';
 const { codes } = require('internal/errors');
+const { internalBinding } = require('internal/bootstrap/loaders');
 const { UDP } = process.binding('udp_wrap');
 const { isInt32 } = require('internal/validators');
-const TTYWrap = process.binding('tty_wrap');
-const { internalBinding } = require('internal/bootstrap/loaders');
+const TTYWrap = internalBinding('tty_wrap');
 const { UV_EINVAL } = internalBinding('uv');
 const { ERR_INVALID_ARG_TYPE, ERR_SOCKET_BAD_TYPE } = codes;
 const kStateSymbol = Symbol('state symbol');
diff --git a/lib/internal/process/stdio.js b/lib/internal/process/stdio.js
index e4207a1aa768bd..57969324a99efd 100644
--- a/lib/internal/process/stdio.js
+++ b/lib/internal/process/stdio.js
@@ -47,7 +47,8 @@ function getMainThreadStdio() {
 
   function getStdin() {
     if (stdin) return stdin;
-    const tty_wrap = process.binding('tty_wrap');
+    const { internalBinding } = require('internal/bootstrap/loaders');
+    const tty_wrap = internalBinding('tty_wrap');
     const fd = 0;
 
     switch (tty_wrap.guessHandleType(fd)) {
@@ -163,7 +164,8 @@ function setupProcessStdio({ getStdout, getStdin, getStderr }) {
 
 function createWritableStdioStream(fd) {
   var stream;
-  const tty_wrap = process.binding('tty_wrap');
+  const { internalBinding } = require('internal/bootstrap/loaders');
+  const tty_wrap = internalBinding('tty_wrap');
 
   // Note stream._type is used for test-module-load-list.js
 
diff --git a/lib/net.js b/lib/net.js
index 2700a54a0780ce..c489353b660a3b 100644
--- a/lib/net.js
+++ b/lib/net.js
@@ -42,7 +42,7 @@ const {
 } = internalBinding('uv');
 
 const { Buffer } = require('buffer');
-const TTYWrap = process.binding('tty_wrap');
+const TTYWrap = internalBinding('tty_wrap');
 const { ShutdownWrap } = internalBinding('stream_wrap');
 const {
   TCP,
diff --git a/lib/tty.js b/lib/tty.js
index 5e0e528c7e4593..62eb8719b114b9 100644
--- a/lib/tty.js
+++ b/lib/tty.js
@@ -23,7 +23,8 @@
 
 const { inherits, _extend } = require('util');
 const net = require('net');
-const { TTY, isTTY } = process.binding('tty_wrap');
+const { internalBinding } = require('internal/bootstrap/loaders');
+const { TTY, isTTY } = internalBinding('tty_wrap');
 const errors = require('internal/errors');
 const {
   ERR_INVALID_FD,
diff --git a/src/tty_wrap.cc b/src/tty_wrap.cc
index 39d7ca1474ff8a..f1cfa300f8f215 100644
--- a/src/tty_wrap.cc
+++ b/src/tty_wrap.cc
@@ -173,4 +173,4 @@ TTYWrap::TTYWrap(Environment* env,
 
 }  // namespace node
 
-NODE_BUILTIN_MODULE_CONTEXT_AWARE(tty_wrap, node::TTYWrap::Initialize)
+NODE_MODULE_CONTEXT_AWARE_INTERNAL(tty_wrap, node::TTYWrap::Initialize)
diff --git a/test/parallel/test-accessor-properties.js b/test/parallel/test-accessor-properties.js
index 064ef844c38e6c..4cb84e0f12ae91 100644
--- a/test/parallel/test-accessor-properties.js
+++ b/test/parallel/test-accessor-properties.js
@@ -1,3 +1,4 @@
+// Flags: --expose-internals
 'use strict';
 
 require('../common');
@@ -9,7 +10,8 @@ const assert = require('assert');
 
 // Objects that call StreamBase::AddMethods, when setting up
 // their prototype
-const TTY = process.binding('tty_wrap').TTY;
+const { internalBinding } = require('internal/test/binding');
+const TTY = internalBinding('tty_wrap').TTY;
 const UDP = process.binding('udp_wrap').UDP;
 
 {
diff --git a/test/parallel/test-stream-base-prototype-accessors-enumerability.js b/test/parallel/test-stream-base-prototype-accessors-enumerability.js
index f59aced197c515..d060a0cb84ce50 100644
--- a/test/parallel/test-stream-base-prototype-accessors-enumerability.js
+++ b/test/parallel/test-stream-base-prototype-accessors-enumerability.js
@@ -1,3 +1,4 @@
+// Flags: --expose-internals
 'use strict';
 
 require('../common');
@@ -9,7 +10,8 @@ require('../common');
 const assert = require('assert');
 
 // Or anything that calls StreamBase::AddMethods when setting up its prototype
-const TTY = process.binding('tty_wrap').TTY;
+const { internalBinding } = require('internal/test/binding');
+const TTY = internalBinding('tty_wrap').TTY;
 
 {
   assert.strictEqual(TTY.prototype.propertyIsEnumerable('bytesRead'), false);
diff --git a/test/parallel/test-tty-backwards-api.js b/test/parallel/test-tty-backwards-api.js
index 547184728ebaf8..7b6dc3c09257bf 100644
--- a/test/parallel/test-tty-backwards-api.js
+++ b/test/parallel/test-tty-backwards-api.js
@@ -1,8 +1,10 @@
+// Flags: --expose-internals
 'use strict';
 const common = require('../common');
 
 const noop = () => {};
-const TTY = process.binding('tty_wrap').TTY = function() {};
+const { internalBinding } = require('internal/test/binding');
+const TTY = internalBinding('tty_wrap').TTY = function() {};
 
 TTY.prototype = {
   setBlocking: noop,
diff --git a/test/pseudo-tty/ref_keeps_node_running.js b/test/pseudo-tty/ref_keeps_node_running.js
index 7832e9ee21ba26..52761c140eddac 100644
--- a/test/pseudo-tty/ref_keeps_node_running.js
+++ b/test/pseudo-tty/ref_keeps_node_running.js
@@ -1,8 +1,10 @@
+// Flags: --expose-internals --no-warnings
 'use strict';
 
 require('../common');
 
-const { TTY, isTTY } = process.binding('tty_wrap');
+const { internalBinding } = require('internal/test/binding');
+const { TTY, isTTY } = internalBinding('tty_wrap');
 const strictEqual = require('assert').strictEqual;
 
 strictEqual(isTTY(0), true, 'fd 0 is not a TTY');
diff --git a/test/pseudo-tty/test-async-wrap-getasyncid-tty.js b/test/pseudo-tty/test-async-wrap-getasyncid-tty.js
index 030ae9fdff5543..80ffe9e7cce303 100644
--- a/test/pseudo-tty/test-async-wrap-getasyncid-tty.js
+++ b/test/pseudo-tty/test-async-wrap-getasyncid-tty.js
@@ -5,9 +5,9 @@
 
 const common = require('../common');
 const assert = require('assert');
-const tty_wrap = process.binding('tty_wrap');
 const { internalBinding } = require('internal/test/binding');
 const { TTYWRAP } = internalBinding('async_wrap').Providers;
+const tty_wrap = internalBinding('tty_wrap');
 const providers = { TTYWRAP };
 
 // Make sure that the TTYWRAP Provider is tested.
diff --git a/test/pseudo-tty/test-handle-wrap-isrefed-tty.js b/test/pseudo-tty/test-handle-wrap-isrefed-tty.js
index 33b59b3f1a335e..3654d4a15f0a7c 100644
--- a/test/pseudo-tty/test-handle-wrap-isrefed-tty.js
+++ b/test/pseudo-tty/test-handle-wrap-isrefed-tty.js
@@ -1,3 +1,4 @@
+// Flags: --expose-internals --no-warnings
 'use strict';
 
 // see also test/parallel/test-handle-wrap-isrefed.js
@@ -6,7 +7,8 @@ const common = require('../common');
 const strictEqual = require('assert').strictEqual;
 const ReadStream = require('tty').ReadStream;
 const tty = new ReadStream(0);
-const isTTY = process.binding('tty_wrap').isTTY;
+const { internalBinding } = require('internal/test/binding');
+const isTTY = internalBinding('tty_wrap').isTTY;
 strictEqual(isTTY(0), true, 'tty_wrap: stdin is not a TTY');
 strictEqual(Object.getPrototypeOf(tty._handle).hasOwnProperty('hasRef'),
             true, 'tty_wrap: hasRef() missing');
diff --git a/test/pseudo-tty/test-tty-window-size.js b/test/pseudo-tty/test-tty-window-size.js
index 782b66802e3ada..2a9891bd19e68e 100644
--- a/test/pseudo-tty/test-tty-window-size.js
+++ b/test/pseudo-tty/test-tty-window-size.js
@@ -1,8 +1,10 @@
+// Flags: --expose-internals --no-warnings
 'use strict';
 const common = require('../common');
 const assert = require('assert');
 const { WriteStream } = require('tty');
-const { TTY } = process.binding('tty_wrap');
+const { internalBinding } = require('internal/test/binding');
+const { TTY } = internalBinding('tty_wrap');
 const getWindowSize = TTY.prototype.getWindowSize;
 
 function monkeyPatchGetWindowSize(fn) {
diff --git a/test/pseudo-tty/test-tty-wrap.js b/test/pseudo-tty/test-tty-wrap.js
index cb961d04033b6b..917f04869ab5fe 100644
--- a/test/pseudo-tty/test-tty-wrap.js
+++ b/test/pseudo-tty/test-tty-wrap.js
@@ -3,7 +3,7 @@
 require('../common');
 
 const { internalBinding } = require('internal/test/binding');
-const { TTY } = process.binding('tty_wrap');
+const { TTY } = internalBinding('tty_wrap');
 const { WriteWrap } = internalBinding('stream_wrap');
 
 const handle = new TTY(1);