diff --git a/ci/remove-deps-4-old-node.js b/ci/remove-deps-4-old-node.js index 4cf9deefe..e8ff6f617 100644 --- a/ci/remove-deps-4-old-node.js +++ b/ci/remove-deps-4-old-node.js @@ -1,5 +1,5 @@ -const fs = require('fs'); -const path = require('path'); +const fs = require('node:fs'); +const path = require('node:path'); const package = require('../package.json'); const UNSUPPORT_DEPS_4_OLD = new Set([ diff --git a/package.json b/package.json index 4631c72b3..84aff4b96 100644 --- a/package.json +++ b/package.json @@ -27,27 +27,27 @@ "formidable": "^2.1.2", "methods": "^1.1.2", "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" + "qs": "^6.11.2", + "semver": "^7.5.4" }, "devDependencies": { - "@babel/cli": "^7.20.7", - "@babel/core": "^7.20.12", - "@babel/plugin-transform-runtime": "^7.19.6", - "@babel/preset-env": "^7.20.2", - "@babel/runtime": "^7.20.13", + "@babel/cli": "^7.22.10", + "@babel/core": "^7.22.10", + "@babel/plugin-transform-runtime": "^7.22.10", + "@babel/preset-env": "^7.22.10", + "@babel/runtime": "^7.22.10", "@commitlint/cli": "17", "@commitlint/config-conventional": "17", - "Base64": "^1.1.0", + "Base64": "^1.2.0", "babelify": "^10.0.0", "basic-auth-connect": "^1.0.0", - "body-parser": "^1.20.1", + "body-parser": "^1.20.2", "browserify": "^17.0.0", "cookie-parser": "^1.4.6", "cross-env": "^7.0.3", - "eslint": "^8.32.0", + "eslint": "^8.47.0", "eslint-config-xo-lass": "2", - "eslint-plugin-compat": "4.0.2", + "eslint-plugin-compat": "4.1.4", "eslint-plugin-node": "^11.1.0", "express": "^4.18.2", "express-session": "^1.17.3", @@ -65,7 +65,7 @@ "should": "^13.2.3", "should-http": "^0.1.1", "tinyify": "3.0.0", - "xo": "^0.53.1", + "xo": "^0.56.0", "zuul": "^3.12.0" }, "engines": { diff --git a/src/client.js b/src/client.js index 9260bcbea..b632bf626 100644 --- a/src/client.js +++ b/src/client.js @@ -75,7 +75,9 @@ request.getXHR = () => { * @api private */ -const trim = ''.trim ? (s) => s.trim() : (s) => s.replace(/(^\s*|\s*$)/g, ''); +const trim = ''.trim + ? (s) => s.trim() + : (s) => s.replaceAll(/(^\s*|\s*$)/g, ''); /** * Serialize the given `obj`. @@ -310,7 +312,7 @@ function Response(request_) { this.text = (this.req.method !== 'HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text')) || - typeof this.xhr.responseType === 'undefined' + this.xhr.responseType === undefined ? this.xhr.responseText : null; this.statusText = this.req.xhr.statusText; @@ -423,7 +425,7 @@ function Request(method, url) { if (self.xhr) { // ie9 doesn't have 'response' property error.rawResponse = - typeof self.xhr.responseType === 'undefined' + self.xhr.responseType === undefined ? self.xhr.responseText : self.xhr.response; // issue #876: return the http status code if the response parsing fails @@ -867,7 +869,7 @@ Request.prototype._end = function () { // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing) // We need null here if data is undefined - xhr.send(typeof data === 'undefined' ? null : data); + xhr.send(data === undefined ? null : data); }; request.agent = () => new Agent(); diff --git a/src/node/agent.js b/src/node/agent.js index 0761dc689..67556a507 100644 --- a/src/node/agent.js +++ b/src/node/agent.js @@ -3,7 +3,7 @@ */ // eslint-disable-next-line node/no-deprecated-api -const { parse } = require('url'); +const { parse } = require('node:url'); const { CookieJar } = require('cookiejar'); const { CookieAccessInfo } = require('cookiejar'); const methods = require('methods'); @@ -66,7 +66,7 @@ Agent.prototype = Object.create(AgentBase.prototype); Agent.prototype._saveCookies = function (res) { const cookies = res.headers['set-cookie']; if (cookies) { - const url = parse(res.request?.url || '') + const url = parse(res.request?.url || ''); this.jar.setCookies(cookies, url.hostname, url.pathname); } }; diff --git a/src/node/http2wrapper.js b/src/node/http2wrapper.js index 4141692c7..d742390f9 100644 --- a/src/node/http2wrapper.js +++ b/src/node/http2wrapper.js @@ -1,14 +1,14 @@ -const Stream = require('stream'); -const net = require('net'); -const tls = require('tls'); +const Stream = require('node:stream'); +const net = require('node:net'); +const tls = require('node:tls'); // eslint-disable-next-line node/no-deprecated-api -const { parse } = require('url'); -const process = require('process'); +const { parse } = require('node:url'); +const process = require('node:process'); const semverGte = require('semver/functions/gte'); let http2; -if (semverGte(process.version, 'v10.10.0')) http2 = require('http2'); +if (semverGte(process.version, 'v10.10.0')) http2 = require('node:http2'); else throw new Error('superagent: this version of Node.js does not support http2'); @@ -70,15 +70,20 @@ class Request extends Stream { createUnixConnection(authority, options) { switch (this.protocol) { - case 'http:': + case 'http:': { return net.connect(options.socketPath); - case 'https:': + } + + case 'https:': { options.ALPNProtocols = ['h2']; options.servername = this.host; options.allowHalfOpen = true; return tls.connect(options.socketPath, options); - default: + } + + default: { throw new Error('Unsupported protocol', this.protocol); + } } } @@ -129,11 +134,14 @@ class Request extends Stream { let value = headers[key]; key = key.toLowerCase(); switch (key) { - case HTTP2_HEADER_SET_COOKIE: + case HTTP2_HEADER_SET_COOKIE: { value = Array.isArray(value) ? value : [value]; break; - default: + } + + default: { break; + } } http2Headers[key] = value; @@ -149,14 +157,17 @@ class Request extends Stream { let value = headers[key]; key = key.toLowerCase(); switch (key) { - case HTTP2_HEADER_HOST: + case HTTP2_HEADER_HOST: { key = HTTP2_HEADER_AUTHORITY; value = /^http:\/\/|^https:\/\//.test(value) ? parse(value).host : value; break; - default: + } + + default: { break; + } } http2Headers[key] = value; diff --git a/src/node/index.js b/src/node/index.js index e6dc73cc9..4cc23b379 100644 --- a/src/node/index.js +++ b/src/node/index.js @@ -3,13 +3,13 @@ */ // eslint-disable-next-line node/no-deprecated-api -const { parse, format, resolve } = require('url'); -const Stream = require('stream'); -const https = require('https'); -const http = require('http'); -const fs = require('fs'); -const zlib = require('zlib'); -const util = require('util'); +const { parse, format, resolve } = require('node:url'); +const Stream = require('node:stream'); +const https = require('node:https'); +const http = require('node:http'); +const fs = require('node:fs'); +const zlib = require('node:zlib'); +const util = require('node:util'); const qs = require('qs'); const mime = require('mime'); let methods = require('methods'); @@ -19,7 +19,6 @@ const debug = require('debug')('superagent'); const CookieJar = require('cookiejar'); const semverGte = require('semver/functions/gte'); const safeStringify = require('fast-safe-stringify'); - const utils = require('../utils'); const RequestBase = require('../request-base'); const { unzip } = require('./unzip'); @@ -469,7 +468,6 @@ Request.prototype._pipeContinue = function (stream, options) { res.pipe(stream, options); res.once('end', () => this.emit('end')); } - }); return stream; }; @@ -719,7 +717,7 @@ Request.prototype.request = function () { // See https://github.com/ladjs/superagent/issues/1367 if (queryStringBackticks) { let i = 0; - url.query = url.query.replace(/%60/g, () => queryStringBackticks[i++]); + url.query = url.query.replaceAll('%60', () => queryStringBackticks[i++]); url.search = `?${url.query}`; url.path = url.pathname + url.search; } @@ -731,7 +729,7 @@ Request.prototype.request = function () { // get the socket, path const unixParts = url.path.match(/^([^/]+)(.+)$/); - options.socketPath = unixParts[1].replace(/%2F/g, '/'); + options.socketPath = unixParts[1].replaceAll('%2F', '/'); url.path = unixParts[2]; } diff --git a/src/node/response.js b/src/node/response.js index af1abc0bd..5c5fbd447 100644 --- a/src/node/response.js +++ b/src/node/response.js @@ -2,8 +2,8 @@ * Module dependencies. */ -const util = require('util'); -const Stream = require('stream'); +const util = require('node:util'); +const Stream = require('node:stream'); const ResponseBase = require('../response-base'); const { mixin } = require('../utils'); @@ -51,11 +51,11 @@ function Response(request) { // https://github.com/nodejs/node/pull/39520#issuecomment-889697136 Object.defineProperty(Response.prototype, 'body', { get() { - return this._body !== undefined - ? this._body - : this.res.body !== undefined - ? this.res.body - : {}; + return this._body === undefined + ? this.res.body === undefined + ? {} + : this.res.body + : this._body; }, set(value) { this._body = value; diff --git a/src/node/unzip.js b/src/node/unzip.js index 46182f4da..232a3eb00 100644 --- a/src/node/unzip.js +++ b/src/node/unzip.js @@ -2,9 +2,9 @@ * Module dependencies. */ -const { StringDecoder } = require('string_decoder'); -const Stream = require('stream'); -const zlib = require('zlib'); +const { StringDecoder } = require('node:string_decoder'); +const Stream = require('node:stream'); +const zlib = require('node:zlib'); /** * Buffers response data events and re-emits when they're unzipped. diff --git a/src/request-base.js b/src/request-base.js index cd6020bbf..8bf544900 100644 --- a/src/request-base.js +++ b/src/request-base.js @@ -112,17 +112,24 @@ RequestBase.prototype.timeout = function (options) { for (const option in options) { if (hasOwn(options, option)) { switch (option) { - case 'deadline': + case 'deadline': { this._timeout = options.deadline; break; - case 'response': + } + + case 'response': { this._responseTimeout = options.response; break; - case 'upload': + } + + case 'upload': { this._uploadTimeout = options.upload; break; - default: + } + + default: { console.warn('Unknown timeout option', option); + } } } } @@ -513,20 +520,26 @@ RequestBase.prototype.abort = function () { RequestBase.prototype._auth = function (user, pass, options, base64Encoder) { switch (options.type) { - case 'basic': + case 'basic': { this.set('Authorization', `Basic ${base64Encoder(`${user}:${pass}`)}`); break; + } - case 'auto': + case 'auto': { this.username = user; this.password = pass; break; + } - case 'bearer': // usage would be .auth(accessToken, { type: 'bearer' }) + case 'bearer': { + // usage would be .auth(accessToken, { type: 'bearer' }) this.set('Authorization', `Bearer ${user}`); break; - default: + } + + default: { break; + } } return this; @@ -662,11 +675,12 @@ RequestBase.prototype.send = function (data) { // merge if (isObject_ && isObject(this._data)) { for (const key in data) { - if (typeof data[key] == "bigint") throw new Error("Cannot serialize BigInt value to json"); + if (typeof data[key] === 'bigint') + throw new Error('Cannot serialize BigInt value to json'); if (hasOwn(data, key)) this._data[key] = data[key]; } - } - else if (typeof data === 'bigint') throw new Error("Cannot send value of type BigInt"); + } else if (typeof data === 'bigint') + throw new Error('Cannot send value of type BigInt'); else if (typeof data === 'string') { // default to x-www-form-urlencoded if (!type) this.type('form'); @@ -720,7 +734,7 @@ RequestBase.prototype.send = function (data) { RequestBase.prototype.sortQuery = function (sort) { // _sort default to true but otherwise can be a function or boolean - this._sort = typeof sort === 'undefined' ? true : sort; + this._sort = sort === undefined ? true : sort; return this; }; diff --git a/test/agent-base.js b/test/agent-base.js index 592f996e8..b493daf91 100644 --- a/test/agent-base.js +++ b/test/agent-base.js @@ -1,6 +1,5 @@ -const assert = require('assert'); +const assert = require('node:assert'); const getSetup = require('./support/setup'); - const request = require('./support/client'); describe('Agent', () => { diff --git a/test/basic.js b/test/basic.js index ab6b5703a..3fbe4b450 100644 --- a/test/basic.js +++ b/test/basic.js @@ -1,6 +1,5 @@ -const assert = require('assert'); +const assert = require('node:assert'); const getSetup = require('./support/setup'); - const request = require('./support/client'); describe('request', function () { diff --git a/test/client/request.js b/test/client/request.js index 3263bddb7..290041a3a 100644 --- a/test/client/request.js +++ b/test/client/request.js @@ -1,4 +1,4 @@ -const assert = require('assert'); +const assert = require('node:assert'); const request = require('../support/client'); describe('request', function () { diff --git a/test/client/serialize.js b/test/client/serialize.js index fe4ec91d8..c3970fabf 100644 --- a/test/client/serialize.js +++ b/test/client/serialize.js @@ -1,5 +1,4 @@ -const assert = require('assert'); - +const assert = require('node:assert'); const request = require('../support/client'); function serialize(object, res) { diff --git a/test/client/xdomain.js b/test/client/xdomain.js index 477338aa9..2eccc0abe 100644 --- a/test/client/xdomain.js +++ b/test/client/xdomain.js @@ -1,4 +1,4 @@ -const assert = require('assert'); +const assert = require('node:assert'); const request = require('../support/client'); describe('xdomain', function () { diff --git a/test/content-type.js b/test/content-type.js index 097b93850..c16587919 100644 --- a/test/content-type.js +++ b/test/content-type.js @@ -1,6 +1,5 @@ -const assert = require('assert'); +const assert = require('node:assert'); const getSetup = require('./support/setup'); - const request = require('./support/client'); describe('req.set("Content-Type", contentType)', function () { diff --git a/test/form.js b/test/form.js index 6c9fc5f2b..b83031fc4 100644 --- a/test/form.js +++ b/test/form.js @@ -1,6 +1,5 @@ -const assert = require('assert'); +const assert = require('node:assert'); const should = require('should'); - const getSetup = require('./support/setup'); const request = require('./support/client'); diff --git a/test/json.js b/test/json.js index 3d10d7b4b..7ad6450f6 100644 --- a/test/json.js +++ b/test/json.js @@ -2,7 +2,7 @@ const getSetup = require('./support/setup'); const doesntWorkInHttp2 = !process.env.HTTP2_TEST; -const assert = require('assert'); +const assert = require('node:assert'); const request = require('./support/client'); describe('req.send(Object) as "json"', function () { @@ -99,7 +99,7 @@ describe('req.send(Object) as "json"', function () { try { res.should.be.json(); res.text.should.equal('{"tobi":"ferret"}'); - ({ tobi: 'ferret' }.should.eql(res.body)); + ({ tobi: 'ferret' }).should.eql(res.body); done(); } catch (err) { done(err); @@ -114,34 +114,30 @@ describe('req.send(Object) as "json"', function () { .send({ name: 'vendor' }) .end((error, res) => { res.text.should.equal('{"name":"vendor"}'); - ({ name: 'vendor' }.should.eql(res.body)); + ({ name: 'vendor' }).should.eql(res.body); done(); }); }); it('should error for BigInt object', (done) => { try { - request - .post(`${uri}/echo`) - .type('json') - .send({number: 1n}) - throw new Error('Should have thrown error for object with BigInt') - } catch (error) { - assert.strictEqual(error.message, 'Cannot serialize BigInt value to json'); + request.post(`${uri}/echo`).type('json').send({ number: 1n }); + throw new Error('Should have thrown error for object with BigInt'); + } catch (err) { + assert.strictEqual(err.message, 'Cannot serialize BigInt value to json'); } + done(); }); it('should error for BigInt primitive', (done) => { try { - request - .post(`${uri}/echo`) - .type('json') - .send(1n) - throw new Error('Should have thrown error for BigInt primitive') - } catch (error) { - assert.strictEqual(error.message, 'Cannot send value of type BigInt'); + request.post(`${uri}/echo`).type('json').send(1n); + throw new Error('Should have thrown error for BigInt primitive'); + } catch (err) { + assert.strictEqual(err.message, 'Cannot send value of type BigInt'); } + done(); }); @@ -154,7 +150,7 @@ describe('req.send(Object) as "json"', function () { .end((error, res) => { res.should.be.json(); res.text.should.equal('{"name":"tobi","age":1}'); - ({ name: 'tobi', age: 1 }.should.eql(res.body)); + ({ name: 'tobi', age: 1 }).should.eql(res.body); done(); }); }); diff --git a/test/node/agency.js b/test/node/agency.js index dbe8fa958..85127de05 100644 --- a/test/node/agency.js +++ b/test/node/agency.js @@ -2,19 +2,19 @@ require('should-http'); -const express = require('../support/express'); - -const app = express(); -const request = require('../support/client'); -const assert = require('assert'); +let http = require('node:http'); +const assert = require('node:assert'); const should = require('should'); const cookieParser = require('cookie-parser'); const cookiejar = require('cookiejar'); const session = require('express-session'); -let http = require('http'); +const request = require('../support/client'); +const express = require('../support/express'); + +const app = express(); if (process.env.HTTP2_TEST) { - http = require('http2'); + http = require('node:http2'); http.Http2ServerResponse.prototype._implicitHeader = function () { this.writeHead(this.statusCode); }; @@ -134,19 +134,26 @@ describe('request', () => { assert.deepStrictEqual(cookiePairs, [ 'first_cookie=dummy', 'cookie=jar', - `connect.sid=${agent4.jar.getCookie('connect.sid', cookiejar.CookieAccessInfo.All).value}`, + `connect.sid=${ + agent4.jar.getCookie( + 'connect.sid', + cookiejar.CookieAccessInfo.All + ).value + }` ]); done(); }); }); it('should not share cookies between domains', () => { - assert.equal(agent4.get('https://google.com').cookies, ""); + assert.equal(agent4.get('https://google.com').cookies, ''); }); it('should send cookies to allowed domain with a different path', () => { - const postRequest = agent4.post(`${base}/x/y/z`) - const cookiesNames = postRequest.cookies.split(';').map(cookie => cookie.split('=')[0]) + const postRequest = agent4.post(`${base}/x/y/z`); + const cookiesNames = postRequest.cookies + .split(';') + .map((cookie) => cookie.split('=')[0]); cookiesNames.should.eql(['cookie', ' connect.sid']); }); diff --git a/test/node/basic-auth.js b/test/node/basic-auth.js index 90d015b04..cef15c4a5 100644 --- a/test/node/basic-auth.js +++ b/test/node/basic-auth.js @@ -1,5 +1,5 @@ 'use strict'; -const URL = require('url'); +const URL = require('node:url'); const request = require('../support/client'); const getSetup = require('../support/setup'); diff --git a/test/node/basic.js b/test/node/basic.js index f208dc884..809cb76f3 100644 --- a/test/node/basic.js +++ b/test/node/basic.js @@ -1,10 +1,10 @@ 'use strict'; -const assert = require('assert'); -const fs = require('fs'); -const { EventEmitter } = require('events'); -const { StringDecoder } = require('string_decoder'); -const url = require('url'); +const assert = require('node:assert'); +const fs = require('node:fs'); +const { EventEmitter } = require('node:events'); +const { StringDecoder } = require('node:string_decoder'); +const url = require('node:url'); const getSetup = require('../support/setup'); const request = require('../support/client'); @@ -247,7 +247,7 @@ describe('[node] request', () => { describe('.agent(new http.Agent())', () => { it('should set passed agent', (done) => { - const http = require('http'); + const http = require('node:http'); const request_ = request.get(`${base}/echo`); const agent = new http.Agent(); const returnValue = request_.agent(agent); diff --git a/test/node/buffers.js b/test/node/buffers.js index 607d7b2fc..2c47f1451 100644 --- a/test/node/buffers.js +++ b/test/node/buffers.js @@ -1,5 +1,5 @@ 'use strict'; -const assert = require('assert'); +const assert = require('node:assert'); const request = require('../support/client'); const getSetup = require('../support/setup'); diff --git a/test/node/flags.js b/test/node/flags.js index a29200157..4d1ada4e1 100644 --- a/test/node/flags.js +++ b/test/node/flags.js @@ -1,6 +1,6 @@ 'use strict'; -const assert = require('assert'); +const assert = require('node:assert'); const request = require('../support/client'); const getSetup = require('../support/setup'); diff --git a/test/node/form.js b/test/node/form.js index f24634133..1af79bb02 100644 --- a/test/node/form.js +++ b/test/node/form.js @@ -1,6 +1,6 @@ 'use strict'; -const assert = require('assert'); +const assert = require('node:assert'); const request = require('../support/client'); const getSetup = require('../support/setup'); diff --git a/test/node/http2.js b/test/node/http2.js index 24e32da20..f6529d419 100644 --- a/test/node/http2.js +++ b/test/node/http2.js @@ -3,8 +3,8 @@ if (!process.env.HTTP2_TEST) { return; } -const assert = require('assert'); -const url = require('url'); +const assert = require('node:assert'); +const url = require('node:url'); const request = require('../..'); const getSetup = require('../support/setup'); diff --git a/test/node/https.js b/test/node/https.js index e485723b8..c5f1f5736 100644 --- a/test/node/https.js +++ b/test/node/https.js @@ -1,10 +1,9 @@ 'use strict'; -const assert = require('assert'); - -const url = require('url'); -const https = require('https'); -const fs = require('fs'); +const assert = require('node:assert'); +const url = require('node:url'); +const https = require('node:https'); +const fs = require('node:fs'); const express = require('../support/express'); const request = require('../support/client'); @@ -32,7 +31,7 @@ openssl pkcs12 -export -in cert.pem -inkey key.pem -out passcert.pfx # password */ let http2; if (process.env.HTTP2_TEST) { - http2 = require('http2'); + http2 = require('node:http2'); } let server; diff --git a/test/node/image.js b/test/node/image.js index 2b66b499f..e59e1a082 100644 --- a/test/node/image.js +++ b/test/node/image.js @@ -1,6 +1,6 @@ 'use strict'; -const fs = require('fs'); +const fs = require('node:fs'); const request = require('../support/client'); const getSetup = require('../support/setup'); diff --git a/test/node/inflate.js b/test/node/inflate.js index 1a849e440..08bc4e3e1 100644 --- a/test/node/inflate.js +++ b/test/node/inflate.js @@ -2,15 +2,15 @@ require('should'); require('should-http'); -const assert = require('assert'); -const zlib = require('zlib'); -let http = require('http'); +const assert = require('node:assert'); +const zlib = require('node:zlib'); +let http = require('node:http'); const getPort = require('get-port'); const express = require('../support/express'); const request = require('../support/client'); if (process.env.HTTP2_TEST) { - http = require('http2'); + http = require('node:http2'); } const app = express(); diff --git a/test/node/lookup.js b/test/node/lookup.js index 0eafef210..c3d72c24e 100644 --- a/test/node/lookup.js +++ b/test/node/lookup.js @@ -1,6 +1,6 @@ 'use strict'; -const assert = require('assert'); -const dns = require('dns'); +const assert = require('node:assert'); +const dns = require('node:dns'); const request = require('../support/client'); const getSetup = require('../support/setup'); diff --git a/test/node/multipart.js b/test/node/multipart.js index bf992b382..4b82a449d 100644 --- a/test/node/multipart.js +++ b/test/node/multipart.js @@ -1,13 +1,13 @@ 'use strict'; -const assert = require('assert'); -const fs = require('fs'); -const path = require('path'); +const assert = require('node:assert'); +const fs = require('node:fs'); +const path = require('node:path'); const should = require('should'); const getPort = require('get-port'); const request = require('../support/client'); const getSetup = require('../support/setup'); -const IS_WINDOWS = require('os').platform() === 'win32'; +const IS_WINDOWS = require('node:os').platform() === 'win32'; function read(file) { return fs.readFileSync(file, 'utf8'); diff --git a/test/node/network-error.js b/test/node/network-error.js index 3828590ea..a71a43c03 100644 --- a/test/node/network-error.js +++ b/test/node/network-error.js @@ -1,6 +1,6 @@ 'use strict'; -const assert = require('assert'); -const net = require('net'); +const assert = require('node:assert'); +const net = require('node:net'); const request = require('../support/client'); const express = require('../support/express'); diff --git a/test/node/parsers.js b/test/node/parsers.js index 924628982..01753f61f 100644 --- a/test/node/parsers.js +++ b/test/node/parsers.js @@ -1,5 +1,5 @@ 'use strict'; -const assert = require('assert'); +const assert = require('node:assert'); const request = require('../support/client'); const getSetup = require('../support/setup'); diff --git a/test/node/pipe-redirect.js b/test/node/pipe-redirect.js index 3b7525f74..8a91e661d 100644 --- a/test/node/pipe-redirect.js +++ b/test/node/pipe-redirect.js @@ -1,5 +1,5 @@ 'use strict'; -const fs = require('fs'); +const fs = require('node:fs'); const request = require('../support/client'); const getSetup = require('../support/setup'); diff --git a/test/node/pipe.js b/test/node/pipe.js index c6f11222c..d1d9df66b 100644 --- a/test/node/pipe.js +++ b/test/node/pipe.js @@ -3,14 +3,14 @@ const request = require('../support/client'); const express = require('../support/express'); const app = express(); -const fs = require('fs'); +const fs = require('node:fs'); +let http = require('node:http'); +const zlib = require('node:zlib'); +const { pipeline } = require('node:stream'); const bodyParser = require('body-parser'); -let http = require('http'); -const zlib = require('zlib'); -const { pipeline } = require('stream'); if (process.env.HTTP2_TEST) { - http = require('http2'); + http = require('node:http2'); } app.use(bodyParser.json()); @@ -23,7 +23,9 @@ app.get('/gzip', (request_, res) => { res.writeHead(200, { 'Content-Encoding': 'gzip' }); - fs.createReadStream('test/node/fixtures/user.json').pipe(new zlib.createGzip()).pipe(res); + fs.createReadStream('test/node/fixtures/user.json') + .pipe(new zlib.createGzip()) + .pipe(res); }); app.get('/redirect', (request_, res) => { @@ -147,7 +149,7 @@ describe('request pipe', () => { // not monitored by pipeline, we need to make sure request_ does not emit 'end' until the unzip step // has finished writing data. Otherwise, we'll either end up with truncated data or a 'write after end' error. pipeline(request_, stream, function (err) { - (!!err).should.be.false(); + Boolean(err).should.be.false(); responseCalled.should.be.true(); JSON.parse(fs.readFileSync(destinationPath)).should.eql({ diff --git a/test/node/query.js b/test/node/query.js index dfa0efd75..9ba6adc7b 100644 --- a/test/node/query.js +++ b/test/node/query.js @@ -1,14 +1,14 @@ 'use strict'; -let http = require('http'); -const assert = require('assert'); -const fs = require('fs'); +let http = require('node:http'); +const assert = require('node:assert'); +const fs = require('node:fs'); const request = require('../support/client'); const express = require('../support/express'); const app = express(); if (process.env.HTTP2_TEST) { - http = require('http2'); + http = require('node:http2'); } app.get('/raw-query', (request_, res) => { diff --git a/test/node/redirects-other-host.js b/test/node/redirects-other-host.js index 067866e17..4fccca198 100644 --- a/test/node/redirects-other-host.js +++ b/test/node/redirects-other-host.js @@ -1,15 +1,15 @@ 'use strict'; -const assert = require('assert'); +const assert = require('node:assert'); const request = require('../support/client'); const express = require('../support/express'); const app = express(); const app2 = express(); const should = require('should'); -let http = require('http'); +let http = require('node:http'); if (process.env.HTTP2_TEST) { - http = require('http2'); + http = require('node:http2'); } let base = 'http://localhost'; diff --git a/test/node/redirects.js b/test/node/redirects.js index b1d5d9260..b6d9f99de 100644 --- a/test/node/redirects.js +++ b/test/node/redirects.js @@ -1,7 +1,7 @@ 'use strict'; -const URL = require('url'); -const assert = require('assert'); +const URL = require('node:url'); +const assert = require('node:assert'); const getSetup = require('../support/setup'); const request = require('../support/client'); @@ -88,7 +88,7 @@ describe('request', () => { } }); }); - }) + }); it('should follow Location', (done) => { const redirects = []; diff --git a/test/node/response-readable-stream.js b/test/node/response-readable-stream.js index fdd076781..47841dceb 100644 --- a/test/node/response-readable-stream.js +++ b/test/node/response-readable-stream.js @@ -3,11 +3,11 @@ const request = require('../support/client'); const express = require('../support/express'); const app = express(); -const fs = require('fs'); -let http = require('http'); +const fs = require('node:fs'); +let http = require('node:http'); if (process.env.HTTP2_TEST) { - http = require('http2'); + http = require('node:http2'); } app.get('/', (request_, res) => { diff --git a/test/node/serialize.js b/test/node/serialize.js index 0d01c6911..0fc0316bb 100644 --- a/test/node/serialize.js +++ b/test/node/serialize.js @@ -1,6 +1,6 @@ 'use strict'; -const assert = require('assert'); +const assert = require('node:assert'); const request = require('../support/client'); const getSetup = require('../support/setup'); diff --git a/test/node/set-host.js b/test/node/set-host.js index 6bd58f1b3..7c06f96e3 100644 --- a/test/node/set-host.js +++ b/test/node/set-host.js @@ -3,8 +3,8 @@ const request = require('../support/client'); const express = require('../support/express'); const app = express(); -const http = require('http'); -const assert = require('assert'); +const http = require('node:http'); +const assert = require('node:assert'); describe('request.get().set()', () => { if (process.env.HTTP2_TEST) { diff --git a/test/node/toError.js b/test/node/toError.js index 300100fdf..fd49ae6f3 100644 --- a/test/node/toError.js +++ b/test/node/toError.js @@ -1,13 +1,13 @@ 'use strict'; -const assert = require('assert'); +const assert = require('node:assert'); const request = require('../support/client'); const express = require('../support/express'); const app = express(); -let http = require('http'); +let http = require('node:http'); if (process.env.HTTP2_TEST) { - http = require('http2'); + http = require('node:http2'); } app.get('/', (request_, res) => { diff --git a/test/node/unix-sockets.js b/test/node/unix-sockets.js index a443079af..15ccf6e19 100644 --- a/test/node/unix-sockets.js +++ b/test/node/unix-sockets.js @@ -1,10 +1,9 @@ 'use strict'; -const assert = require('assert'); - -let http = require('http'); -let https = require('https'); -const os = require('os'); -const fs = require('fs'); +const assert = require('node:assert'); +let http = require('node:http'); +let https = require('node:https'); +const os = require('node:os'); +const fs = require('node:fs'); const express = require('../support/express'); const request = require('../support/client'); @@ -19,7 +18,7 @@ let httpServer; let httpsServer; if (process.env.HTTP2_TEST) { - http = https = require('http2'); + http = https = require('node:http2'); } app.get('/', (request_, res) => { @@ -45,7 +44,7 @@ describe('[unix-sockets] http', () => { httpServer.listen(httpSockPath, done); }); - const base = `http+unix://${httpSockPath.replace(/\//g, '%2F')}`; + const base = `http+unix://${httpSockPath.replaceAll('/', '%2F')}`; describe('request', () => { it('path: / (root)', (done) => { @@ -90,7 +89,7 @@ describe('[unix-sockets] https', () => { httpsServer.listen(httpsSockPath, done); }); - const base = `https+unix://${httpsSockPath.replace(/\//g, '%2F')}`; + const base = `https+unix://${httpsSockPath.replaceAll('/', '%2F')}`; describe('request', () => { it('path: / (root)', (done) => { diff --git a/test/node/user-agent.js b/test/node/user-agent.js index 3e0f008ac..449c92ded 100644 --- a/test/node/user-agent.js +++ b/test/node/user-agent.js @@ -1,5 +1,5 @@ 'use strict'; -const assert = require('assert'); +const assert = require('node:assert'); const request = require('../support/client'); const getSetup = require('../support/setup'); diff --git a/test/node/utils.js b/test/node/utils.js index e0ba5e57d..7260f47a7 100644 --- a/test/node/utils.js +++ b/test/node/utils.js @@ -1,5 +1,5 @@ 'use strict'; -const assert = require('assert'); +const assert = require('node:assert'); const utils = process.env.OLD_NODE_TEST === '1' ? // eslint-disable-next-line node/no-missing-require diff --git a/test/redirects.js b/test/redirects.js index 7cba5f46a..c81bbb53c 100644 --- a/test/redirects.js +++ b/test/redirects.js @@ -1,5 +1,4 @@ -const assert = require('assert'); - +const assert = require('node:assert'); const getSetup = require('./support/setup'); const request = require('./support/client'); diff --git a/test/request.js b/test/request.js index e4ec3b739..6a5937431 100644 --- a/test/request.js +++ b/test/request.js @@ -1,8 +1,6 @@ -const fs = require('fs'); - -const assert = require('assert'); +const fs = require('node:fs'); +const assert = require('node:assert'); const getSetup = require('./support/setup'); - const request = require('./support/client'); const binData = fs.readFileSync(`${__dirname}/node/fixtures/test.aac`); diff --git a/test/retry.js b/test/retry.js index 52c023418..cbfbdd38c 100644 --- a/test/retry.js +++ b/test/retry.js @@ -1,6 +1,5 @@ -const assert = require('assert'); +const assert = require('node:assert'); const getSetup = require('./support/setup'); - const request = require('./support/client'); function uniqid() { diff --git a/test/support/express/index.js b/test/support/express/index.js index fed7e8632..ec5cf228d 100644 --- a/test/support/express/index.js +++ b/test/support/express/index.js @@ -1,10 +1,10 @@ -const process = require('process'); +const process = require('node:process'); const express = require('express'); let http2Request; let http2Res; if (process.env.HTTP2_TEST) { - const http2 = require('http2'); + const http2 = require('node:http2'); const requestDecorator = require('./requestDecorator'); const resDecorator = require('./responseDecorator'); http2Request = requestDecorator( diff --git a/test/support/express/requestDecorator.js b/test/support/express/requestDecorator.js index 196406b9c..8580a38ed 100644 --- a/test/support/express/requestDecorator.js +++ b/test/support/express/requestDecorator.js @@ -13,7 +13,7 @@ * @private */ -const { isIP } = require('net'); +const { isIP } = require('node:net'); const accepts = require('accepts'); const typeis = require('type-is'); const fresh = require('fresh'); @@ -71,10 +71,13 @@ function setMethods(request) { switch (lc) { case 'referer': - case 'referrer': + case 'referrer': { return this.headers.referrer || this.headers.referer; - default: + } + + default: { return this.headers[lc]; + } } }; @@ -291,7 +294,7 @@ function setMethods(request) { const header = this.get('X-Forwarded-Proto') || proto; const index = header.indexOf(','); - return index !== -1 ? header.slice(0, index).trim() : header.trim(); + return index === -1 ? header.trim() : header.slice(0, index).trim(); }); /** @@ -366,9 +369,9 @@ function setMethods(request) { if (!hostname) return []; const offset = this.app.get('subdomain offset'); - const subdomains = !isIP(hostname) - ? hostname.split('.').reverse() - : [hostname]; + const subdomains = isIP(hostname) + ? [hostname] + : hostname.split('.').reverse(); return subdomains.slice(offset); }); @@ -426,7 +429,7 @@ function setMethods(request) { const offset = host[0] === '[' ? host.indexOf(']') + 1 : 0; const index = host.indexOf(':', offset); - return index !== -1 ? host.slice(0, index) : host; + return index === -1 ? host : host.slice(0, index); }); /** diff --git a/test/support/express/responseDecorator.js b/test/support/express/responseDecorator.js index 26535e879..04823fec8 100644 --- a/test/support/express/responseDecorator.js +++ b/test/support/express/responseDecorator.js @@ -12,7 +12,7 @@ * @private */ -const path = require('path'); +const path = require('node:path'); const { Buffer } = require('safe-buffer'); const contentDisposition = require('content-disposition'); const encodeUrl = require('encodeurl'); @@ -113,15 +113,17 @@ function setMethods(res) { switch (typeof chunk) { // string defaulting to html - case 'string': + case 'string': { if (!this.get('Content-Type')) { this.type('html'); } break; + } + case 'boolean': case 'number': - case 'object': + case 'object': { if (chunk === null) { chunk = ''; } else if (Buffer.isBuffer(chunk)) { @@ -133,6 +135,7 @@ function setMethods(res) { } break; + } } // write strings in utf-8 @@ -267,10 +270,12 @@ function setMethods(res) { this.set('Content-Type', 'text/javascript'); // restrict callback charset - callback = callback.replace(/[^[\]\w$.]/g, ''); + callback = callback.replaceAll(/[^[\]\w$.]/g, ''); // replace chars not allowed in JavaScript that are in JSON - body = body.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029'); + body = body + .replaceAll('\u2028', '\\u2028') + .replaceAll('\u2029', '\\u2029'); // the /**/ is a specific security mitigation for "Rosetta Flash JSONP abuse" // the typeof check is just to reduce client error noise @@ -468,7 +473,7 @@ function setMethods(res) { */ res.contentType = res.type = function contentType(type) { - const ct = !type.includes('/') ? mime.lookup(type) : type; + const ct = type.includes('/') ? type : mime.lookup(type); return this.set('Content-Type', ct); }; @@ -999,16 +1004,23 @@ function stringify(value, replacer, spaces, escape) { : JSON.stringify(value); if (escape) { - json = json.replace(/[<>&]/g, (c) => { + json = json.replaceAll(/[<>&]/g, (c) => { switch (c.charCodeAt(0)) { - case 0x3c: + case 0x3c: { return '\\u003c'; - case 0x3e: + } + + case 0x3e: { return '\\u003e'; - case 0x26: + } + + case 0x26: { return '\\u0026'; - default: + } + + default: { return c; + } } }); } diff --git a/test/support/express/utils.js b/test/support/express/utils.js index b3dbc7a65..8c21ab76c 100644 --- a/test/support/express/utils.js +++ b/test/support/express/utils.js @@ -12,7 +12,7 @@ * @api private */ -const querystring = require('querystring'); +const querystring = require('node:querystring'); const { Buffer } = require('safe-buffer'); const contentType = require('content-type'); const { mime } = require('send'); @@ -27,7 +27,7 @@ let isHttp2Supported = true; * @api private */ try { - require('http2'); + require('node:http2'); } catch { isHttp2Supported = false; } @@ -132,19 +132,28 @@ exports.compileETag = function (value) { } switch (value) { - case true: + case true: { fn = exports.wetag; break; - case false: + } + + case false: { break; - case 'strong': + } + + case 'strong': { fn = exports.etag; break; - case 'weak': + } + + case 'weak': { fn = exports.wetag; break; - default: + } + + default: { throw new TypeError('unknown value for etag function: ' + value); + } } return fn; @@ -166,19 +175,28 @@ exports.compileQueryParser = function compileQueryParser(value) { } switch (value) { - case true: + case true: { fn = querystring.parse; break; - case false: + } + + case false: { break; - case 'extended': + } + + case 'extended': { fn = parseExtendedQueryString; break; - case 'simple': + } + + case 'simple': { fn = querystring.parse; break; - default: + } + + default: { throw new TypeError('unknown value for query parser function: ' + value); + } } return fn; @@ -256,7 +274,7 @@ exports.setCharset = function setCharset(type, charset) { function createETagGenerator(options) { return function generateETag(body, encoding) { - const buf = !Buffer.isBuffer(body) ? Buffer.from(body, encoding) : body; + const buf = Buffer.isBuffer(body) ? body : Buffer.from(body, encoding); return etag(buf, options); }; diff --git a/test/support/server.js b/test/support/server.js index a219c0d15..0ebb55b85 100644 --- a/test/support/server.js +++ b/test/support/server.js @@ -1,6 +1,6 @@ -const fs = require('fs'); -const path = require('path'); -let http = require('http'); +const fs = require('node:fs'); +const path = require('node:path'); +let http = require('node:http'); const multer = require('multer'); const bodyParser = require('body-parser'); const cookieParser = require('cookie-parser'); @@ -10,7 +10,7 @@ const express = require('./express'); let isPseudoHeader; if (process.env.HTTP2_TEST) { - http = require('http2'); + http = require('node:http2'); const { HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_METHOD, @@ -24,10 +24,14 @@ if (process.env.HTTP2_TEST) { case HTTP2_HEADER_METHOD: // :method case HTTP2_HEADER_PATH: // :path case HTTP2_HEADER_AUTHORITY: // :authority - case HTTP2_HEADER_SCHEME: // :scheme + case HTTP2_HEADER_SCHEME: { + // :scheme return true; - default: + } + + default: { return false; + } } }; } @@ -419,7 +423,7 @@ app.get('/cookie-redirect', (request, res) => { }); app.get('/set-cookie', (request, res) => { - res.cookie('replaced', 'no') + res.cookie('replaced', 'no'); res.cookie('persist', '123'); res.send('ok'); }); @@ -542,48 +546,48 @@ app.get('/error/ok/:id', (request, res) => { } const { id } = request.params; - if (!called[id]) { - called[id] = true; - res.status(500).send('boom'); - } else { + if (called[id]) { res.send(request.headers); delete called[id]; + } else { + called[id] = true; + res.status(500).send('boom'); } }); app.get('/delay/:ms/ok/:id', (request, res) => { const { id } = request.params; - if (!called[id]) { + if (called[id]) { + res.send(`ok = ${request.url}`); + delete called[id]; + } else { called[id] = true; const ms = Math.trunc(request.params.ms); setTimeout(() => { res.sendStatus(200); }, ms); - } else { - res.send(`ok = ${request.url}`); - delete called[id]; } }); app.get('/error/redirect/:id', (request, res) => { const { id } = request.params; - if (!called[id]) { - called[id] = true; - res.status(500).send('boom'); - } else { + if (called[id]) { res.redirect('/movies'); delete called[id]; + } else { + called[id] = true; + res.status(500).send('boom'); } }); app.get('/error/redirect-error:id', (request, res) => { const { id } = request.params; - if (!called[id]) { - called[id] = true; - res.status(500).send('boom'); - } else { + if (called[id]) { res.redirect('/error'); delete called[id]; + } else { + called[id] = true; + res.status(500).send('boom'); } }); diff --git a/test/support/setup.js b/test/support/setup.js index ee251837f..938746d01 100644 --- a/test/support/setup.js +++ b/test/support/setup.js @@ -12,10 +12,7 @@ async function getSetup() { } NODE = true; - if (typeof window !== 'undefined') { - NODE = false; - uri = `//${window.location.host}`; - } else { + if (typeof window === 'undefined') { try { const port = await getPort(); @@ -28,6 +25,9 @@ async function getSetup() { } catch (err) { console.error(err); } + } else { + NODE = false; + uri = `//${window.location.host}`; } return { NODE, uri }; diff --git a/test/timeout.js b/test/timeout.js index 7acf39b5c..4a77a28ec 100644 --- a/test/timeout.js +++ b/test/timeout.js @@ -1,6 +1,5 @@ -const assert = require('assert'); +const assert = require('node:assert'); const getSetup = require('./support/setup'); - const request = require('./support/client'); describe('.timeout(ms)', function () { diff --git a/test/use.js b/test/use.js index 59598f00a..8606208e3 100644 --- a/test/use.js +++ b/test/use.js @@ -1,6 +1,5 @@ -const assert = require('assert'); +const assert = require('node:assert'); const getSetup = require('./support/setup'); - const request = require('./support/client'); describe('request', function () {