From 27b8585f6167f8f4b2b15c24b7dbdc1e0515a2f5 Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Thu, 20 Dec 2018 17:35:40 +0100 Subject: [PATCH] lib: expose all type checks from the internal types module Combine all type checks on the internal types module and do not use the types binding anywhere else anymore. This makes sure all of those checks exist when required. PR-URL: https://github.com/nodejs/node/pull/25149 Reviewed-By: Anna Henningsen Reviewed-By: Luigi Pinca Reviewed-By: James M Snell Reviewed-By: Denys Otrishko Backport-PR-URL: https://github.com/nodejs/node/pull/25446 --- lib/buffer.js | 2 +- lib/internal/bootstrap/node.js | 2 +- lib/internal/encoding.js | 7 +++---- lib/internal/util.js | 2 +- lib/internal/util/comparisons.js | 4 ++-- lib/internal/util/inspect.js | 14 +++++++------- lib/internal/util/types.js | 1 + lib/util.js | 12 +++--------- 8 files changed, 19 insertions(+), 25 deletions(-) diff --git a/lib/buffer.js b/lib/buffer.js index 5ecf88d55b848e..343c187b09c65c 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -37,7 +37,6 @@ const { kMaxLength, kStringMaxLength } = internalBinding('buffer'); -const { isAnyArrayBuffer } = internalBinding('types'); const { getOwnNonIndexProperties, propertyFilter: { @@ -52,6 +51,7 @@ const { kIsEncodingSymbol } = require('internal/util'); const { + isAnyArrayBuffer, isArrayBufferView, isUint8Array } = require('internal/util/types'); diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index 7ebfe0b0f073b7..3f730f984ee4ae 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -178,7 +178,7 @@ function startup() { // TODO(addaleax): Turn into a full runtime deprecation. const pendingDeprecation = getOptionValue('--pending-deprecation'); const utilBinding = internalBinding('util'); - const types = internalBinding('types'); + const types = NativeModule.require('internal/util/types'); for (const name of [ 'isArrayBuffer', 'isArrayBufferView', 'isAsyncFunction', 'isDataView', 'isDate', 'isExternal', 'isMap', 'isMapIterator', diff --git a/lib/internal/encoding.js b/lib/internal/encoding.js index ad056fd0bd997f..0084c19b904a82 100644 --- a/lib/internal/encoding.js +++ b/lib/internal/encoding.js @@ -21,11 +21,10 @@ const { customInspectSymbol: inspect } = require('internal/util'); -const { isArrayBufferView } = require('internal/util/types'); - const { - isArrayBuffer -} = internalBinding('types'); + isArrayBuffer, + isArrayBufferView +} = require('internal/util/types'); const { encodeUtf8String diff --git a/lib/internal/util.js b/lib/internal/util.js index 77e8600c33e7cf..61b191c47c1d38 100644 --- a/lib/internal/util.js +++ b/lib/internal/util.js @@ -14,7 +14,7 @@ const { } = internalBinding('util'); const { isNativeError -} = internalBinding('types'); +} = require('internal/util/types'); const noCrypto = !process.versions.openssl; diff --git a/lib/internal/util/comparisons.js b/lib/internal/util/comparisons.js index 1d959f843bcbd3..d0726089063852 100644 --- a/lib/internal/util/comparisons.js +++ b/lib/internal/util/comparisons.js @@ -1,9 +1,9 @@ 'use strict'; const { compare } = internalBinding('buffer'); -const { isArrayBufferView } = require('internal/util/types'); const { isAnyArrayBuffer, + isArrayBufferView, isDate, isMap, isRegExp, @@ -15,7 +15,7 @@ const { isBooleanObject, isBigIntObject, isSymbolObject -} = internalBinding('types'); +} = require('internal/util/types'); const { getOwnNonIndexProperties, propertyFilter: { diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index c9e36b98927b8d..b23ae9438ff877 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -27,8 +27,6 @@ const { isStackOverflowError } = require('internal/errors'); -const types = internalBinding('types'); -Object.assign(types, require('internal/util/types')); const { isAnyArrayBuffer, isArrayBuffer, @@ -38,6 +36,8 @@ const { isExternal, isMap, isMapIterator, + isModuleNamespaceObject, + isNativeError, isPromise, isSet, isSetIterator, @@ -61,7 +61,7 @@ const { isFloat64Array, isBigInt64Array, isBigUint64Array -} = types; +} = require('internal/util/types'); const ReflectApply = Reflect.apply; @@ -385,9 +385,9 @@ function getKeys(value, showHidden) { try { keys = Object.keys(value); } catch (err) { - if (types.isNativeError(err) && + if (isNativeError(err) && err.name === 'ReferenceError' && - types.isModuleNamespaceObject(value)) { + isModuleNamespaceObject(value)) { keys = Object.getOwnPropertyNames(value); } else { throw err; @@ -696,7 +696,7 @@ function formatRaw(ctx, value, recurseTimes) { } else if (isWeakMap(value)) { braces[0] = `${getPrefix(constructor, tag, 'WeakMap')}{`; formatter = ctx.showHidden ? formatWeakMap : formatWeakCollection; - } else if (types.isModuleNamespaceObject(value)) { + } else if (isModuleNamespaceObject(value)) { braces[0] = `[${tag}] {`; formatter = formatNamespaceObject; skip = true; @@ -883,7 +883,7 @@ function formatNamespaceObject(ctx, value, recurseTimes, keys) { output[i] = formatProperty(ctx, value, recurseTimes, keys[i], kObjectType); } catch (err) { - if (!(types.isNativeError(err) && err.name === 'ReferenceError')) { + if (!(isNativeError(err) && err.name === 'ReferenceError')) { throw err; } // Use the existing functionality. This makes sure the indentation and diff --git a/lib/internal/util/types.js b/lib/internal/util/types.js index 182625a9716c72..865818c661b78d 100644 --- a/lib/internal/util/types.js +++ b/lib/internal/util/types.js @@ -70,6 +70,7 @@ function isBigUint64Array(value) { } module.exports = { + ...internalBinding('types'), isArrayBufferView, isTypedArray, isUint8Array, diff --git a/lib/util.js b/lib/util.js index 06ce842934505a..624f4dfb7d032b 100644 --- a/lib/util.js +++ b/lib/util.js @@ -31,13 +31,7 @@ const { const { validateNumber } = require('internal/validators'); const { TextDecoder, TextEncoder } = require('internal/encoding'); const { isBuffer } = require('buffer').Buffer; - -const types = internalBinding('types'); -Object.assign(types, require('internal/util/types')); -const { - isRegExp, - isDate, -} = types; +const types = require('internal/util/types'); const { deprecate, @@ -433,9 +427,9 @@ module.exports = exports = { isString, isSymbol, isUndefined, - isRegExp, + isRegExp: types.isRegExp, isObject, - isDate, + isDate: types.isDate, isError(e) { return objectToString(e) === '[object Error]' || e instanceof Error; },