Skip to content

Commit

Permalink
lib: switch to object spread where possible
Browse files Browse the repository at this point in the history
Use the object spread notation instead of using Object.assign.
It is not only easier to read it is also faster as of V8 6.8.

PR-URL: #25104
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Yuta Hiroto <hello@hiroppy.me>
Reviewed-By: Minwoo Jung <minwoo@nodesource.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
  • Loading branch information
BridgeAR authored and MylesBorins committed Dec 26, 2018
1 parent 54e42f0 commit 2fc43fb
Showing 12 changed files with 41 additions and 37 deletions.
1 change: 1 addition & 0 deletions lib/.eslintrc.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
rules:
prefer-object-spread: error
no-restricted-syntax:
# Config copied from .eslintrc.js
- error
2 changes: 1 addition & 1 deletion lib/_tls_wrap.js
Original file line number Diff line number Diff line change
@@ -289,7 +289,7 @@ function initRead(tls, wrapped) {
*/

function TLSSocket(socket, opts) {
const tlsOptions = Object.assign({}, opts);
const tlsOptions = { ...opts };

if (tlsOptions.ALPNProtocols)
tls.convertALPNProtocols(tlsOptions.ALPNProtocols, tlsOptions);
4 changes: 2 additions & 2 deletions lib/child_process.js
Original file line number Diff line number Diff line change
@@ -136,7 +136,7 @@ function normalizeExecArgs(command, options, callback) {
}

// Make a shallow copy so we don't clobber the user's options object.
options = Object.assign({}, options);
options = { ...options };
options.shell = typeof options.shell === 'string' ? options.shell : true;

return {
@@ -470,7 +470,7 @@ function normalizeSpawnArguments(file, args, options) {
}

// Make a shallow copy so we don't clobber the user's options object.
options = Object.assign({}, options);
options = { ...options };

if (options.shell) {
const command = [file].concat(args).join(' ');
8 changes: 5 additions & 3 deletions lib/console.js
Original file line number Diff line number Diff line change
@@ -225,9 +225,11 @@ Console.prototype.warn = function warn(...args) {
Console.prototype.error = Console.prototype.warn;

Console.prototype.dir = function dir(object, options) {
options = Object.assign({
customInspect: false
}, this[kGetInspectOptions](this._stdout), options);
options = {
customInspect: false,
...this[kGetInspectOptions](this._stdout),
...options
};
write(this._ignoreErrors,
this._stdout,
util.inspect(object, options),
2 changes: 1 addition & 1 deletion lib/internal/child_process.js
Original file line number Diff line number Diff line change
@@ -636,7 +636,7 @@ function setupChannel(target, channel) {
throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);
}

options = Object.assign({ swallowErrors: false }, options);
options = { swallowErrors: false, ...options };

if (this.connected) {
return this._send(message, handle, options, callback);
9 changes: 5 additions & 4 deletions lib/internal/console/constructor.js
Original file line number Diff line number Diff line change
@@ -271,10 +271,11 @@ Console.prototype.warn = function warn(...args) {
Console.prototype.error = Console.prototype.warn;

Console.prototype.dir = function dir(object, options) {
options = Object.assign({
customInspect: false
}, this[kGetInspectOptions](this._stdout), options);
this[kWriteToConsole](kUseStdout, util.inspect(object, options));
this[kWriteToConsole](kUseStdout, util.inspect(object, {
customInspect: false,
...this[kGetInspectOptions](this._stdout),
...options
}));
};

Console.prototype.time = function time(label = 'default') {
2 changes: 1 addition & 1 deletion lib/internal/http2/compat.js
Original file line number Diff line number Diff line change
@@ -512,7 +512,7 @@ class Http2ServerResponse extends Stream {
}

getHeaders() {
return Object.assign({}, this[kHeaders]);
return { ...this[kHeaders] };
}

hasHeader(name) {
20 changes: 10 additions & 10 deletions lib/internal/http2/core.js
Original file line number Diff line number Diff line change
@@ -790,7 +790,7 @@ function pingCallback(cb) {
// 6. enablePush must be a boolean
// All settings are optional and may be left undefined
function validateSettings(settings) {
settings = Object.assign({}, settings);
settings = { ...settings };
assertWithinRange('headerTableSize',
settings.headerTableSize,
0, kMaxInt);
@@ -1443,7 +1443,7 @@ class ClientHttp2Session extends Http2Session {
assertIsObject(options, 'options');

headers = Object.assign(Object.create(null), headers);
options = Object.assign({}, options);
options = { ...options };

if (headers[HTTP2_HEADER_METHOD] === undefined)
headers[HTTP2_HEADER_METHOD] = HTTP2_METHOD_GET;
@@ -1848,7 +1848,7 @@ class Http2Stream extends Duplex {
throw new ERR_HTTP2_INVALID_STREAM();

assertIsObject(options, 'options');
options = Object.assign({}, options);
options = { ...options };
validatePriorityOptions(options);

const priorityFn = submitPriority.bind(this, options);
@@ -2257,7 +2257,7 @@ class ServerHttp2Stream extends Http2Stream {
throw new ERR_INVALID_CALLBACK();

assertIsObject(options, 'options');
options = Object.assign({}, options);
options = { ...options };
options.endStream = !!options.endStream;

assertIsObject(headers, 'headers');
@@ -2322,7 +2322,7 @@ class ServerHttp2Stream extends Http2Stream {
const state = this[kState];

assertIsObject(options, 'options');
options = Object.assign({}, options);
options = { ...options };

const session = this[kSession];
debug(`Http2Stream ${this[kID]} [Http2Session ` +
@@ -2378,7 +2378,7 @@ class ServerHttp2Stream extends Http2Stream {
const session = this[kSession];

assertIsObject(options, 'options');
options = Object.assign({}, options);
options = { ...options };

if (options.offset !== undefined && typeof options.offset !== 'number')
throw new ERR_INVALID_OPT_VALUE('offset', options.offset);
@@ -2441,7 +2441,7 @@ class ServerHttp2Stream extends Http2Stream {
throw new ERR_HTTP2_HEADERS_SENT();

assertIsObject(options, 'options');
options = Object.assign({}, options);
options = { ...options };

if (options.offset !== undefined && typeof options.offset !== 'number')
throw new ERR_INVALID_OPT_VALUE('offset', options.offset);
@@ -2667,10 +2667,10 @@ function connectionListener(socket) {

function initializeOptions(options) {
assertIsObject(options, 'options');
options = Object.assign({}, options);
options = { ...options };
options.allowHalfOpen = true;
assertIsObject(options.settings, 'options.settings');
options.settings = Object.assign({}, options.settings);
options.settings = { ...options.settings };

// Used only with allowHTTP1
options.Http1IncomingMessage = options.Http1IncomingMessage ||
@@ -2775,7 +2775,7 @@ function connect(authority, options, listener) {
}

assertIsObject(options, 'options');
options = Object.assign({}, options);
options = { ...options };

if (typeof authority === 'string')
authority = new URL(authority);
5 changes: 2 additions & 3 deletions lib/repl.js
Original file line number Diff line number Diff line change
@@ -130,8 +130,7 @@ function hasOwnProperty(obj, prop) {
// and it can be overridden by custom print functions, such as `probe` or
// `eyes.js`.
const writer = exports.writer = (obj) => util.inspect(obj, writer.options);
writer.options =
Object.assign({}, util.inspect.defaultOptions, { showProxy: true });
writer.options = { ...util.inspect.defaultOptions, showProxy: true };

exports._builtinLibs = builtinLibs;

@@ -510,7 +509,7 @@ function REPLServer(prompt,
if (self.useColors && self.writer === writer) {
// Turn on ANSI coloring.
self.writer = (obj) => util.inspect(obj, self.writer.options);
self.writer.options = Object.assign({}, writer.options, { colors: true });
self.writer.options = { ...writer.options, colors: true };
}

function filterInternalStackFrames(structuredStack) {
10 changes: 7 additions & 3 deletions lib/tls.js
Original file line number Diff line number Diff line change
@@ -264,9 +264,13 @@ class SecurePair extends EventEmitter {
this.credentials = secureContext;

this.encrypted = socket1;
this.cleartext = new exports.TLSSocket(socket2, Object.assign({
secureContext, isServer, requestCert, rejectUnauthorized
}, options));
this.cleartext = new exports.TLSSocket(socket2, {
secureContext,
isServer,
requestCert,
rejectUnauthorized,
...options
});
this.cleartext.once('secure', () => this.emit('secure'));
}

7 changes: 4 additions & 3 deletions lib/util.js
Original file line number Diff line number Diff line change
@@ -123,11 +123,12 @@ function formatWithOptions(inspectOptions, f) {
break;
case 111: // 'o'
{
const opts = Object.assign({}, inspectOptions, {
const opts = {
showHidden: true,
showProxy: true,
depth: 4
});
depth: 4,
...inspectOptions
};
tempStr = inspect(arguments[a++], opts);
break;
}
8 changes: 2 additions & 6 deletions lib/vm.js
Original file line number Diff line number Diff line change
@@ -290,9 +290,7 @@ function runInContext(code, contextifiedSandbox, options) {
[kParsingContext]: contextifiedSandbox
};
} else {
options = Object.assign({}, options, {
[kParsingContext]: contextifiedSandbox
});
options = { ...options, [kParsingContext]: contextifiedSandbox };
}
return createScript(code, options)
.runInContext(contextifiedSandbox, options);
@@ -303,9 +301,7 @@ function runInNewContext(code, sandbox, options) {
options = { filename: options };
}
sandbox = createContext(sandbox, getContextOptions(options));
options = Object.assign({}, options, {
[kParsingContext]: sandbox
});
options = { ...options, [kParsingContext]: sandbox };
return createScript(code, options).runInNewContext(sandbox, options);
}

0 comments on commit 2fc43fb

Please sign in to comment.