From 6a6fd9e0600c1052756daed431d39ef8eaad4e02 Mon Sep 17 00:00:00 2001 From: marco-ippolito Date: Mon, 29 Apr 2024 09:46:14 +0200 Subject: [PATCH 01/16] util: move util._extend to eol --- benchmark/es/spread-assign.js | 9 +----- .../misc/util-extend-vs-object-assign.js | 30 ------------------- doc/api/deprecations.md | 8 +++-- doc/api/util.md | 19 ------------ lib/util.js | 23 -------------- test/fixtures/tls-connect.js | 2 +- test/parallel/test-util.js | 9 ------ 7 files changed, 7 insertions(+), 93 deletions(-) delete mode 100644 benchmark/misc/util-extend-vs-object-assign.js diff --git a/benchmark/es/spread-assign.js b/benchmark/es/spread-assign.js index f0dcd56bb606b1..211979c710baf3 100644 --- a/benchmark/es/spread-assign.js +++ b/benchmark/es/spread-assign.js @@ -1,10 +1,9 @@ 'use strict'; const common = require('../common.js'); -const util = require('util'); const bench = common.createBenchmark(main, { - method: ['spread', 'assign', '_extend'], + method: ['spread', 'assign'], count: [5, 10, 20], n: [1e6], }); @@ -18,12 +17,6 @@ function main({ n, context, count, rest, method }) { let obj; switch (method) { - case '_extend': - bench.start(); - for (let i = 0; i < n; i++) - obj = util._extend({}, src); - bench.end(n); - break; case 'assign': bench.start(); for (let i = 0; i < n; i++) diff --git a/benchmark/misc/util-extend-vs-object-assign.js b/benchmark/misc/util-extend-vs-object-assign.js deleted file mode 100644 index e2ac0a5417e489..00000000000000 --- a/benchmark/misc/util-extend-vs-object-assign.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -const common = require('../common.js'); -const util = require('util'); - -const bench = common.createBenchmark(main, { - type: ['extend', 'assign'], - n: [10e4], -}); - -function main({ n, type }) { - let fn; - if (type === 'extend') { - fn = util._extend; - } else if (type === 'assign') { - fn = Object.assign; - } - - // Force-optimize the method to test so that the benchmark doesn't - // get disrupted by the optimizer kicking in halfway through. - for (let i = 0; i < type.length * 10; i += 1) - fn({}, process.env); - - const obj = new Proxy({}, { set: function(a, b, c) { return true; } }); - - bench.start(); - for (let j = 0; j < n; j += 1) - fn(obj, process.env); - bench.end(n); -} diff --git a/doc/api/deprecations.md b/doc/api/deprecations.md index ecdd453bae7031..1581c03f24e574 100644 --- a/doc/api/deprecations.md +++ b/doc/api/deprecations.md @@ -1363,6 +1363,9 @@ requirements and complexity of your application. -Type: Runtime +Type: End-of-Life -The [`util._extend()`][] API is deprecated because it's an unmaintained +The `util._extend()` API has been removed because it's an unmaintained legacy API that was exposed to user land by accident. Please use `target = Object.assign(target, source)` instead. @@ -3764,7 +3767,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`url.format()`]: url.md#urlformaturlobject [`url.parse()`]: url.md#urlparseurlstring-parsequerystring-slashesdenotehost [`url.resolve()`]: url.md#urlresolvefrom-to -[`util._extend()`]: util.md#util_extendtarget-source [`util.getSystemErrorName()`]: util.md#utilgetsystemerrornameerr [`util.inspect()`]: util.md#utilinspectobject-options [`util.inspect.custom`]: util.md#utilinspectcustom diff --git a/doc/api/util.md b/doc/api/util.md index 477e91f2680770..4408fb4a2737d8 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -2923,24 +2923,6 @@ util.types.isWeakSet(new WeakSet()); // Returns true The following APIs are deprecated and should no longer be used. Existing applications and modules should be updated to find alternative approaches. -### `util._extend(target, source)` - - - -> Stability: 0 - Deprecated: Use [`Object.assign()`][] instead. - -* `target` {Object} -* `source` {Object} - -The `util._extend()` method was never intended to be used outside of internal -Node.js modules. The community found and used it anyway. - -It is deprecated and should not be used in new code. JavaScript comes with very -similar built-in functionality through [`Object.assign()`][]. - ### `util.isArray(object)` -Type: Runtime +Type: End-of-Life -The [`util.isBoolean()`][] API is deprecated. Please use +The `util.isBoolean()` API has been removed. Please use `typeof arg === 'boolean'` instead. ### DEP0046: `util.isBuffer()` @@ -3771,7 +3774,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`util.inspect()`]: util.md#utilinspectobject-options [`util.inspect.custom`]: util.md#utilinspectcustom [`util.isArray()`]: util.md#utilisarrayobject -[`util.isBoolean()`]: util.md#utilisbooleanobject [`util.isBuffer()`]: util.md#utilisbufferobject [`util.isDate()`]: util.md#utilisdateobject [`util.isError()`]: util.md#utiliserrorobject diff --git a/doc/api/util.md b/doc/api/util.md index 4408fb4a2737d8..0c09cd36b70ebf 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -2950,31 +2950,6 @@ util.isArray({}); // Returns: false ``` -### `util.isBoolean(object)` - - - -> Stability: 0 - Deprecated: Use `typeof value === 'boolean'` instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is a `Boolean`. Otherwise, returns `false`. - -```js -const util = require('node:util'); - -util.isBoolean(1); -// Returns: false -util.isBoolean(0); -// Returns: false -util.isBoolean(false); -// Returns: true -``` - ### `util.isBuffer(object)` -Type: Runtime +Type: End-of-Life -The [`util.isBuffer()`][] API is deprecated. Please use +The `util.isBuffer()` API has been removed. Please use [`Buffer.isBuffer()`][] instead. ### DEP0047: `util.isDate()` @@ -3774,8 +3777,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`util.inspect()`]: util.md#utilinspectobject-options [`util.inspect.custom`]: util.md#utilinspectcustom [`util.isArray()`]: util.md#utilisarrayobject -[`util.isBuffer()`]: util.md#utilisbufferobject -[`util.isDate()`]: util.md#utilisdateobject [`util.isError()`]: util.md#utiliserrorobject [`util.isFunction()`]: util.md#utilisfunctionobject [`util.isNull()`]: util.md#utilisnullobject diff --git a/doc/api/util.md b/doc/api/util.md index 0c09cd36b70ebf..7eac4afa2c7835 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -2950,31 +2950,6 @@ util.isArray({}); // Returns: false ``` -### `util.isBuffer(object)` - - - -> Stability: 0 - Deprecated: Use [`Buffer.isBuffer()`][] instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is a `Buffer`. Otherwise, returns `false`. - -```js -const util = require('node:util'); - -util.isBuffer({ length: 0 }); -// Returns: false -util.isBuffer([]); -// Returns: false -util.isBuffer(Buffer.from('hello world')); -// Returns: true -``` - ### `util.isDate(object)` -Type: Runtime +Type: End-of-Life -The [`util.isNull()`][] API is deprecated. Please use +The `util.isNull()` API has been removed. Please use `arg === null` instead. ### DEP0051: `util.isNullOrUndefined()` @@ -3779,7 +3782,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`util.isArray()`]: util.md#utilisarrayobject [`util.isError()`]: util.md#utiliserrorobject [`util.isFunction()`]: util.md#utilisfunctionobject -[`util.isNull()`]: util.md#utilisnullobject [`util.isNullOrUndefined()`]: util.md#utilisnullorundefinedobject [`util.isNumber()`]: util.md#utilisnumberobject [`util.isObject()`]: util.md#utilisobjectobject diff --git a/doc/api/util.md b/doc/api/util.md index 7eac4afa2c7835..ec6892ebb1043a 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -3045,32 +3045,6 @@ util.isFunction(Bar); // Returns: true ``` -### `util.isNull(object)` - - - -> Stability: 0 - Deprecated: Use `value === null` instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is strictly `null`. Otherwise, returns -`false`. - -```js -const util = require('node:util'); - -util.isNull(0); -// Returns: false -util.isNull(undefined); -// Returns: false -util.isNull(null); -// Returns: true -``` - ### `util.isNullOrUndefined(object)` -Type: Runtime +Type: End-of-Life -The [`util.isNullOrUndefined()`][] API is deprecated. Please use +The `util.isNullOrUndefined()` API has been removed. Please use `arg === null || arg === undefined` instead. ### DEP0052: `util.isNumber()` @@ -3782,7 +3785,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`util.isArray()`]: util.md#utilisarrayobject [`util.isError()`]: util.md#utiliserrorobject [`util.isFunction()`]: util.md#utilisfunctionobject -[`util.isNullOrUndefined()`]: util.md#utilisnullorundefinedobject [`util.isNumber()`]: util.md#utilisnumberobject [`util.isObject()`]: util.md#utilisobjectobject [`util.isPrimitive()`]: util.md#utilisprimitiveobject diff --git a/doc/api/util.md b/doc/api/util.md index ec6892ebb1043a..a942c2447a11f4 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -3045,33 +3045,6 @@ util.isFunction(Bar); // Returns: true ``` -### `util.isNullOrUndefined(object)` - - - -> Stability: 0 - Deprecated: Use -> `value === undefined || value === null` instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is `null` or `undefined`. Otherwise, -returns `false`. - -```js -const util = require('node:util'); - -util.isNullOrUndefined(0); -// Returns: false -util.isNullOrUndefined(undefined); -// Returns: true -util.isNullOrUndefined(null); -// Returns: true -``` - ### `util.isNumber(object)` -Type: Runtime +Type: End-of-Life -The [`util.isNumber()`][] API is deprecated. Please use +The `util.isNumber()` API has been removed. Please use `typeof arg === 'number'` instead. ### DEP0053: `util.isObject()` @@ -3785,7 +3788,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`util.isArray()`]: util.md#utilisarrayobject [`util.isError()`]: util.md#utiliserrorobject [`util.isFunction()`]: util.md#utilisfunctionobject -[`util.isNumber()`]: util.md#utilisnumberobject [`util.isObject()`]: util.md#utilisobjectobject [`util.isPrimitive()`]: util.md#utilisprimitiveobject [`util.isRegExp()`]: util.md#utilisregexpobject diff --git a/doc/api/util.md b/doc/api/util.md index a942c2447a11f4..8798e39e1de80b 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -3045,33 +3045,6 @@ util.isFunction(Bar); // Returns: true ``` -### `util.isNumber(object)` - - - -> Stability: 0 - Deprecated: Use `typeof value === 'number'` instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is a `Number`. Otherwise, returns `false`. - -```js -const util = require('node:util'); - -util.isNumber(false); -// Returns: false -util.isNumber(Infinity); -// Returns: true -util.isNumber(0); -// Returns: true -util.isNumber(NaN); -// Returns: true -``` - ### `util.isObject(object)` -Type: Runtime +Type: End-of-Life -The [`util.isString()`][] API is deprecated. Please use +The `util.isString()` API has been removed. Please use `typeof arg === 'string'` instead. ### DEP0057: `util.isSymbol()` @@ -3791,7 +3794,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`util.isObject()`]: util.md#utilisobjectobject [`util.isPrimitive()`]: util.md#utilisprimitiveobject [`util.isRegExp()`]: util.md#utilisregexpobject -[`util.isString()`]: util.md#utilisstringobject [`util.isSymbol()`]: util.md#utilissymbolobject [`util.isUndefined()`]: util.md#utilisundefinedobject [`util.log()`]: util.md#utillogstring diff --git a/doc/api/util.md b/doc/api/util.md index 8798e39e1de80b..05c803c7a66b27 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -3140,33 +3140,6 @@ util.isRegExp({}); // Returns: false ``` -### `util.isString(object)` - - - -> Stability: 0 - Deprecated: Use `typeof value === 'string'` instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is a `string`. Otherwise, returns `false`. - -```js -const util = require('node:util'); - -util.isString(''); -// Returns: true -util.isString('foo'); -// Returns: true -util.isString(String('foo')); -// Returns: true -util.isString(5); -// Returns: false -``` - ### `util.isSymbol(object)` -Type: Runtime +Type: End-of-Life -The [`util.isSymbol()`][] API is deprecated. Please use +The `util.isSymbol()` API has been removed. Please use `typeof arg === 'symbol'` instead. ### DEP0058: `util.isUndefined()` @@ -3794,7 +3797,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`util.isObject()`]: util.md#utilisobjectobject [`util.isPrimitive()`]: util.md#utilisprimitiveobject [`util.isRegExp()`]: util.md#utilisregexpobject -[`util.isSymbol()`]: util.md#utilissymbolobject [`util.isUndefined()`]: util.md#utilisundefinedobject [`util.log()`]: util.md#utillogstring [`util.promisify`]: util.md#utilpromisifyoriginal diff --git a/doc/api/util.md b/doc/api/util.md index 05c803c7a66b27..b5c8f7d2cad927 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -3140,31 +3140,6 @@ util.isRegExp({}); // Returns: false ``` -### `util.isSymbol(object)` - - - -> Stability: 0 - Deprecated: Use `typeof value === 'symbol'` instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is a `Symbol`. Otherwise, returns `false`. - -```js -const util = require('node:util'); - -util.isSymbol(5); -// Returns: false -util.isSymbol('foo'); -// Returns: false -util.isSymbol(Symbol('foo')); -// Returns: true -``` - ### `util.isUndefined(object)` -Type: Runtime +Type: End-of-Life -The [`util.isUndefined()`][] API is deprecated. Please use +The `util.isUndefined()` API has been removed. Please use `arg === undefined` instead. ### DEP0059: `util.log()` @@ -3797,7 +3800,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`util.isObject()`]: util.md#utilisobjectobject [`util.isPrimitive()`]: util.md#utilisprimitiveobject [`util.isRegExp()`]: util.md#utilisregexpobject -[`util.isUndefined()`]: util.md#utilisundefinedobject [`util.log()`]: util.md#utillogstring [`util.promisify`]: util.md#utilpromisifyoriginal [`util.toUSVString()`]: util.md#utiltousvstringstring diff --git a/doc/api/util.md b/doc/api/util.md index b5c8f7d2cad927..1b2156ee927ce6 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -3140,32 +3140,6 @@ util.isRegExp({}); // Returns: false ``` -### `util.isUndefined(object)` - - - -> Stability: 0 - Deprecated: Use `value === undefined` instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is `undefined`. Otherwise, returns `false`. - -```js -const util = require('node:util'); - -const foo = undefined; -util.isUndefined(5); -// Returns: false -util.isUndefined(foo); -// Returns: true -util.isUndefined(null); -// Returns: false -``` - ### `util.log(string)` -Type: Runtime +Type: End-of-Life -The [`util.isRegExp()`][] API is deprecated. Please use +The `util.isRegExp()` API has been removed. Please use `arg instanceof RegExp` instead. ### DEP0056: `util.isString()` @@ -3799,7 +3802,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`util.isFunction()`]: util.md#utilisfunctionobject [`util.isObject()`]: util.md#utilisobjectobject [`util.isPrimitive()`]: util.md#utilisprimitiveobject -[`util.isRegExp()`]: util.md#utilisregexpobject [`util.log()`]: util.md#utillogstring [`util.promisify`]: util.md#utilpromisifyoriginal [`util.toUSVString()`]: util.md#utiltousvstringstring diff --git a/doc/api/util.md b/doc/api/util.md index 1b2156ee927ce6..cbf56074bb9945 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -3115,31 +3115,6 @@ util.isPrimitive(new Date()); // Returns: false ``` -### `util.isRegExp(object)` - - - -> Stability: 0 - Deprecated - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is a `RegExp`. Otherwise, returns `false`. - -```js -const util = require('node:util'); - -util.isRegExp(/some regexp/); -// Returns: true -util.isRegExp(new RegExp('another regexp')); -// Returns: true -util.isRegExp({}); -// Returns: false -``` - ### `util.log(string)` -Type: Runtime +Type: End-of-Life -The [`util.isObject()`][] API is deprecated. Please use +The `util.isObject()` API has been removed. Please use `arg && typeof arg === 'object'` instead. ### DEP0054: `util.isPrimitive()` @@ -3800,7 +3803,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`util.isArray()`]: util.md#utilisarrayobject [`util.isError()`]: util.md#utiliserrorobject [`util.isFunction()`]: util.md#utilisfunctionobject -[`util.isObject()`]: util.md#utilisobjectobject [`util.isPrimitive()`]: util.md#utilisprimitiveobject [`util.log()`]: util.md#utillogstring [`util.promisify`]: util.md#utilpromisifyoriginal diff --git a/doc/api/util.md b/doc/api/util.md index cbf56074bb9945..6fd5a824b43f8b 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -3045,36 +3045,6 @@ util.isFunction(Bar); // Returns: true ``` -### `util.isObject(object)` - - - -> Stability: 0 - Deprecated: -> Use `value !== null && typeof value === 'object'` instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is strictly an `Object` **and** not a -`Function` (even though functions are objects in JavaScript). -Otherwise, returns `false`. - -```js -const util = require('node:util'); - -util.isObject(5); -// Returns: false -util.isObject(null); -// Returns: false -util.isObject({}); -// Returns: true -util.isObject(() => {}); -// Returns: false -``` - ### `util.isPrimitive(object)` -Type: Runtime +Type: End-of-Life -The [`util.isDate()`][] API is deprecated. Please use +The `util.isDate()` API has been removed. Please use `arg instanceof Date` instead. ### DEP0048: `util.isError()` diff --git a/doc/api/util.md b/doc/api/util.md index 6fd5a824b43f8b..2da1963e59069b 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -2950,31 +2950,6 @@ util.isArray({}); // Returns: false ``` -### `util.isDate(object)` - - - -> Stability: 0 - Deprecated: Use [`util.types.isDate()`][] instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is a `Date`. Otherwise, returns `false`. - -```js -const util = require('node:util'); - -util.isDate(new Date()); -// Returns: true -util.isDate(Date()); -// false (without 'new' returns a String) -util.isDate({}); -// Returns: false -``` - ### `util.isError(object)` -Type: Runtime +Type: End-of-Life -The [`util.isError()`][] API is deprecated. Please use +The `util.isError()` API has been removed. Please use `Object.prototype.toString(arg) === '[object Error]' || arg instanceof Error` instead. @@ -3804,8 +3807,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`util.inspect()`]: util.md#utilinspectobject-options [`util.inspect.custom`]: util.md#utilinspectcustom [`util.isArray()`]: util.md#utilisarrayobject -[`util.isError()`]: util.md#utiliserrorobject -[`util.isFunction()`]: util.md#utilisfunctionobject [`util.isPrimitive()`]: util.md#utilisprimitiveobject [`util.log()`]: util.md#utillogstring [`util.promisify`]: util.md#utilpromisifyoriginal diff --git a/doc/api/util.md b/doc/api/util.md index 2da1963e59069b..2635a60d878bc3 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -2950,47 +2950,6 @@ util.isArray({}); // Returns: false ``` -### `util.isError(object)` - - - -> Stability: 0 - Deprecated: Use [`util.types.isNativeError()`][] instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is an [`Error`][]. Otherwise, returns -`false`. - -```js -const util = require('node:util'); - -util.isError(new Error()); -// Returns: true -util.isError(new TypeError()); -// Returns: true -util.isError({ name: 'Error', message: 'an error occurred' }); -// Returns: false -``` - -This method relies on `Object.prototype.toString()` behavior. It is -possible to obtain an incorrect result when the `object` argument manipulates -`@@toStringTag`. - -```js -const util = require('node:util'); -const obj = { name: 'Error', message: 'an error occurred' }; - -util.isError(obj); -// Returns: false -obj[Symbol.toStringTag] = 'Error'; -util.isError(obj); -// Returns: true -``` - ### `util.isFunction(object)` -Type: Runtime +Type: End-of-Life -The [`util.isFunction()`][] API is deprecated. Please use +The `util.isFunction()` API has been removed. Please use `typeof arg === 'function'` instead. ### DEP0050: `util.isNull()` diff --git a/doc/api/util.md b/doc/api/util.md index 2635a60d878bc3..da0a31256a7e7e 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -2950,35 +2950,6 @@ util.isArray({}); // Returns: false ``` -### `util.isFunction(object)` - - - -> Stability: 0 - Deprecated: Use `typeof value === 'function'` instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is a `Function`. Otherwise, returns -`false`. - -```js -const util = require('node:util'); - -function Foo() {} -const Bar = () => {}; - -util.isFunction({}); -// Returns: false -util.isFunction(Foo); -// Returns: true -util.isFunction(Bar); -// Returns: true -``` - ### `util.isPrimitive(object)` -Type: Runtime +Type: End-of-Life -The [`util.isPrimitive()`][] API is deprecated. Please use +The `util.isPrimitive()` API has been removed. Please use `arg === null || (typeof arg !=='object' && typeof arg !== 'function')` instead. @@ -3810,8 +3813,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`util.inspect()`]: util.md#utilinspectobject-options [`util.inspect.custom`]: util.md#utilinspectcustom [`util.isArray()`]: util.md#utilisarrayobject -[`util.isPrimitive()`]: util.md#utilisprimitiveobject -[`util.log()`]: util.md#utillogstring [`util.promisify`]: util.md#utilpromisifyoriginal [`util.toUSVString()`]: util.md#utiltousvstringstring [`util.types`]: util.md#utiltypes diff --git a/doc/api/util.md b/doc/api/util.md index da0a31256a7e7e..cf4ae74dcb2f04 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -2950,46 +2950,6 @@ util.isArray({}); // Returns: false ``` -### `util.isPrimitive(object)` - - - -> Stability: 0 - Deprecated: Use -> `(typeof value !== 'object' && typeof value !== 'function') || value === null` -> instead. - -* `object` {any} -* Returns: {boolean} - -Returns `true` if the given `object` is a primitive type. Otherwise, returns -`false`. - -```js -const util = require('node:util'); - -util.isPrimitive(5); -// Returns: true -util.isPrimitive('foo'); -// Returns: true -util.isPrimitive(false); -// Returns: true -util.isPrimitive(null); -// Returns: true -util.isPrimitive(undefined); -// Returns: true -util.isPrimitive({}); -// Returns: false -util.isPrimitive(() => {}); -// Returns: false -util.isPrimitive(/^$/); -// Returns: false -util.isPrimitive(new Date()); -// Returns: false -``` - ### `util.log(string)` -Type: Runtime +Type: End-of-Life -The [`util.log()`][] API has been deprecated because it's an unmaintained +The `util.log()` API has been removed because it's an unmaintained legacy API that was exposed to user land by accident. Instead, consider the following alternatives based on your specific needs: diff --git a/doc/api/util.md b/doc/api/util.md index cf4ae74dcb2f04..776b54a5a2f51d 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -2950,26 +2950,6 @@ util.isArray({}); // Returns: false ``` -### `util.log(string)` - - - -> Stability: 0 - Deprecated: Use a third party module instead. - -* `string` {string} - -The `util.log()` method prints the given `string` to `stdout` with an included -timestamp. - -```js -const util = require('node:util'); - -util.log('Timestamped message.'); -``` - [Common System Errors]: errors.md#common-system-errors [Custom inspection functions on objects]: #custom-inspection-functions-on-objects [Custom promisified functions]: #custom-promisified-functions diff --git a/lib/util.js b/lib/util.js index d9187f38baeb23..2c63152eb8bd2b 100644 --- a/lib/util.js +++ b/lib/util.js @@ -23,14 +23,7 @@ const { ArrayIsArray, - ArrayPrototypeJoin, ArrayPrototypePop, - Date, - DatePrototypeGetDate, - DatePrototypeGetHours, - DatePrototypeGetMinutes, - DatePrototypeGetMonth, - DatePrototypeGetSeconds, Error, ErrorCaptureStackTrace, FunctionPrototypeBind, @@ -42,7 +35,6 @@ const { ObjectSetPrototypeOf, ObjectValues, ReflectApply, - StringPrototypePadStart, StringPrototypeToWellFormed, } = primordials; @@ -89,14 +81,6 @@ function lazyAbortController() { let internalDeepEqual; -/** - * @param {number} n - * @returns {string} - */ -function pad(n) { - return StringPrototypePadStart(n.toString(), 2, '0'); -} - /** * @param {string} code * @returns {string} @@ -134,35 +118,6 @@ function styleText(format, text) { return `${escapeStyleCode(formatCodes[0])}${text}${escapeStyleCode(formatCodes[1])}`; } -const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; - -/** - * @returns {string} 26 Feb 16:19:34 - */ -function timestamp() { - const d = new Date(); - const t = ArrayPrototypeJoin([ - pad(DatePrototypeGetHours(d)), - pad(DatePrototypeGetMinutes(d)), - pad(DatePrototypeGetSeconds(d)), - ], ':'); - return `${DatePrototypeGetDate(d)} ${months[DatePrototypeGetMonth(d)]} ${t}`; -} - -let console; -/** - * Log is just a thin wrapper to console.log that prepends a timestamp - * @deprecated since v6.0.0 - * @type {(...args: any[]) => void} - */ -function log(...args) { - if (!console) { - console = require('internal/console/global'); - } - console.log('%s - %s', timestamp(), format(...args)); -} - /** * Inherit the prototype methods from one constructor into another. * @@ -325,10 +280,6 @@ module.exports = { } return internalDeepEqual(a, b); }, - log: deprecate(log, - 'The `util.log API is deprecated. ' + - 'Please use console.log() with a custom formatter or a third-party logger instead.', - 'DEP0059'), promisify, stripVTControlCharacters, toUSVString(input) { diff --git a/test/parallel/test-fs-write-file-buffer.js b/test/parallel/test-fs-write-file-buffer.js index ec6c60e1a46971..23dc48081a7bf0 100644 --- a/test/parallel/test-fs-write-file-buffer.js +++ b/test/parallel/test-fs-write-file-buffer.js @@ -21,7 +21,6 @@ 'use strict'; require('../common'); -const util = require('util'); const fs = require('fs'); let data = [ @@ -50,5 +49,3 @@ tmpdir.refresh(); const buf = Buffer.from(data, 'base64'); fs.writeFileSync(tmpdir.resolve('test.jpg'), buf); - -util.log('Done!'); diff --git a/test/parallel/test-util-log.js b/test/parallel/test-util-log.js deleted file mode 100644 index 838828e50f32b0..00000000000000 --- a/test/parallel/test-util-log.js +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -'use strict'; -const common = require('../common'); -const { - hijackStdout, - hijackStderr, - restoreStdout, - restoreStderr, -} = require('../common/hijackstdio'); -const assert = require('assert'); -const util = require('util'); - -assert.ok(process.stdout.writable); -assert.ok(process.stderr.writable); - -const strings = []; -hijackStdout(function(data) { - strings.push(data); -}); -hijackStderr(common.mustNotCall('stderr.write must not be called')); - -const tests = [ - { input: 'foo', output: 'foo' }, - { input: undefined, output: 'undefined' }, - { input: null, output: 'null' }, - { input: false, output: 'false' }, - { input: 42, output: '42' }, - { input: function() {}, output: '[Function: input]' }, - { input: parseInt('not a number', 10), output: 'NaN' }, - { input: { answer: 42 }, output: '{ answer: 42 }' }, - { input: [1, 2, 3], output: '[ 1, 2, 3 ]' }, -]; - -// test util.log() -const re = /[0-9]{1,2} [A-Z][a-z]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} - (.+)$/; -for (const test of tests) { - util.log(test.input); - const result = strings.shift().trim(); - const match = re.exec(result); - assert.ok(match); - assert.strictEqual(match[1], test.output); -} - -assert.strictEqual(process.stdout.writeTimes, tests.length); - -restoreStdout(); -restoreStderr();