Add prefer-node-protocol ESLint rule (#21532)

* Add `unicorn/prefer-node-protocol`

* Fix `unicorn/prefer-node-protocol` ESLint errors

* Run `npm run format:fix`

* Add sandboxed-module sourceTransformers in mocha setups

Fix `no such file or directory, open 'node:fs'` in `sandboxed-module`

* Remove `node:` in the SandboxedModule requires

* Fix new linting errors with `node:`

GitOrigin-RevId: 68f6e31e2191fcff4cb8058dd0a6914c14f59926
This commit is contained in:
Antoine Clausse
2024-11-08 11:21:56 +01:00
committed by Copybot
parent 4563273396
commit 7f48c67512
217 changed files with 461 additions and 381 deletions

View File

@@ -1,5 +1,5 @@
const { promisify } = require('util')
const crypto = require('crypto')
const { promisify } = require('node:util')
const crypto = require('node:crypto')
const ALGORITHM = 'aes-256-ctr'

View File

@@ -1,4 +1,13 @@
const chai = require('chai')
const chaiAsPromised = require('chai-as-promised')
const SandboxedModule = require('sandboxed-module')
chai.use(chaiAsPromised)
SandboxedModule.configure({
sourceTransformers: {
removeNodePrefix: function (source) {
return source.replace(/require\(['"]node:/g, "require('")
},
},
})

View File

@@ -1,9 +1,9 @@
const _ = require('lodash')
const { Readable } = require('stream')
const { Readable } = require('node:stream')
const OError = require('@overleaf/o-error')
const fetch = require('node-fetch')
const http = require('http')
const https = require('https')
const http = require('node:http')
const https = require('node:https')
/**
* @import { Response } from 'node-fetch'

View File

@@ -1,7 +1,7 @@
const { expect } = require('chai')
const { FetchError, AbortError } = require('node-fetch')
const { Readable } = require('stream')
const { once } = require('events')
const { Readable } = require('node:stream')
const { once } = require('node:events')
const { TestServer } = require('./helpers/TestServer')
const selfsigned = require('selfsigned')
const {
@@ -24,7 +24,7 @@ const pems = selfsigned.generate(attrs, { days: 365 })
const PRIVATE_KEY = pems.private
const PUBLIC_CERT = pems.cert
const dns = require('dns')
const dns = require('node:dns')
const _originalLookup = dns.lookup
// Custom DNS resolver function
dns.lookup = (hostname, options, callback) => {

View File

@@ -1,9 +1,9 @@
const express = require('express')
const bodyParser = require('body-parser')
const { EventEmitter } = require('events')
const http = require('http')
const https = require('https')
const { promisify } = require('util')
const { EventEmitter } = require('node:events')
const http = require('node:http')
const https = require('node:https')
const { promisify } = require('node:util')
class TestServer {
constructor() {

View File

@@ -1,5 +1,5 @@
const { fetchString } = require('@overleaf/fetch-utils')
const fs = require('fs')
const fs = require('node:fs')
class LogLevelChecker {
constructor(logger, defaultLevel) {

View File

@@ -1,4 +1,4 @@
const Stream = require('stream')
const Stream = require('node:stream')
const bunyan = require('bunyan')
const GCPManager = require('./gcp-manager')
const SentryManager = require('./sentry-manager')

View File

@@ -8,4 +8,9 @@ chai.use(sinonChai)
SandboxedModule.configure({
globals: { Buffer, JSON, console, process },
sourceTransformers: {
removeNodePrefix: function (source) {
return source.replace(/require\(['"]node:/g, "require('")
},
},
})

View File

@@ -1,5 +1,5 @@
const Path = require('path')
const { promisify } = require('util')
const Path = require('node:path')
const { promisify } = require('node:util')
const SandboxedModule = require('sandboxed-module')
const sinon = require('sinon')
const { expect } = require('chai')

View File

@@ -1,7 +1,7 @@
const SandboxedModule = require('sandboxed-module')
const bunyan = require('bunyan')
const { expect } = require('chai')
const path = require('path')
const path = require('node:path')
const sinon = require('sinon')
const MODULE_PATH = path.join(__dirname, '../../logging-manager.js')

View File

@@ -1,4 +1,4 @@
const Path = require('path')
const Path = require('node:path')
const SandboxedModule = require('sandboxed-module')
const { expect } = require('chai')
const sinon = require('sinon')

View File

@@ -88,7 +88,7 @@ function initializeProfileAgent() {
}
function initializePrometheus() {
const os = require('os')
const os = require('node:os')
const promClient = require('prom-client')
promClient.register.setDefaultLabels({ app: APP_NAME, host: os.hostname() })
promClient.collectDefaultMetrics({ timeout: 5000, prefix: '' })

View File

@@ -6,8 +6,8 @@
* logged along with the corresponding information from /proc/net/tcp.
*/
const fs = require('fs')
const diagnosticsChannel = require('diagnostics_channel')
const fs = require('node:fs')
const diagnosticsChannel = require('node:diagnostics_channel')
const SOCKET_MONITOR_INTERVAL = 60 * 1000
// set the threshold for logging leaked sockets in minutes, defaults to 15

View File

@@ -11,13 +11,13 @@ const seconds = 1000
// In Node 0.10 the default is 5, which means only 5 open connections at one.
// Node 0.12 has a default of Infinity. Make sure we have no limit set,
// regardless of Node version.
require('http').globalAgent.maxSockets = Infinity
require('https').globalAgent.maxSockets = Infinity
require('node:http').globalAgent.maxSockets = Infinity
require('node:https').globalAgent.maxSockets = Infinity
const SOCKETS_HTTP = require('http').globalAgent.sockets
const SOCKETS_HTTPS = require('https').globalAgent.sockets
const FREE_SOCKETS_HTTP = require('http').globalAgent.freeSockets
const FREE_SOCKETS_HTTPS = require('https').globalAgent.freeSockets
const SOCKETS_HTTP = require('node:http').globalAgent.sockets
const SOCKETS_HTTPS = require('node:https').globalAgent.sockets
const FREE_SOCKETS_HTTP = require('node:http').globalAgent.freeSockets
const FREE_SOCKETS_HTTPS = require('node:https').globalAgent.freeSockets
// keep track of set gauges and reset them in the next collection cycle
const SEEN_HOSTS_HTTP = new Set()

View File

@@ -1,6 +1,6 @@
const { promisify } = require('util')
const os = require('os')
const http = require('http')
const { promisify } = require('node:util')
const os = require('node:os')
const http = require('node:http')
const { expect } = require('chai')
const Metrics = require('../..')

View File

@@ -5,7 +5,7 @@
*/
const chai = require('chai')
const { expect } = chai
const path = require('path')
const path = require('node:path')
const modulePath = path.join(__dirname, '../../../event_loop.js')
const SandboxedModule = require('sandboxed-module')
const sinon = require('sinon')

View File

@@ -1,4 +1,4 @@
const Path = require('path')
const Path = require('node:path')
const SandboxedModule = require('sandboxed-module')
const sinon = require('sinon')

View File

@@ -70,7 +70,7 @@ sayHi3(43, (err, result) => {
}
})
const promisify = require('util').promisify
const promisify = require('node:util').promisify
demoDatabase.findUserAsync = promisify(demoDatabase.findUser)
async function sayHi4NoHandling(userId) {

View File

@@ -1,5 +1,5 @@
const { expect } = require('chai')
const { promisify } = require('util')
const { promisify } = require('node:util')
const OError = require('..')

View File

@@ -23,7 +23,7 @@ exports.expectError = function OErrorExpectError(e, expected) {
).to.be.true
expect(
require('util').types.isNativeError(e),
require('node:util').types.isNativeError(e),
'error should be recognised by util.types.isNativeError'
).to.be.true

View File

@@ -1,11 +1,11 @@
const crypto = require('crypto')
const fs = require('fs')
const fsPromises = require('fs/promises')
const crypto = require('node:crypto')
const fs = require('node:fs')
const fsPromises = require('node:fs/promises')
const globCallbacks = require('glob')
const Path = require('path')
const { PassThrough } = require('stream')
const { pipeline } = require('stream/promises')
const { promisify } = require('util')
const Path = require('node:path')
const { PassThrough } = require('node:stream')
const { pipeline } = require('node:stream/promises')
const { promisify } = require('node:util')
const AbstractPersistor = require('./AbstractPersistor')
const { ReadError, WriteError, NotImplementedError } = require('./Errors')

View File

@@ -1,6 +1,6 @@
const fs = require('fs')
const { pipeline } = require('stream/promises')
const { PassThrough } = require('stream')
const fs = require('node:fs')
const { pipeline } = require('node:stream/promises')
const { PassThrough } = require('node:stream')
const { Storage, IdempotencyStrategy } = require('@google-cloud/storage')
const { WriteError, ReadError, NotFoundError } = require('./Errors')
const asyncPool = require('tiny-async-pool')

View File

@@ -1,8 +1,8 @@
const AbstractPersistor = require('./AbstractPersistor')
const Logger = require('@overleaf/logger')
const Metrics = require('@overleaf/metrics')
const Stream = require('stream')
const { pipeline } = require('stream/promises')
const Stream = require('node:stream')
const { pipeline } = require('node:stream/promises')
const { NotFoundError, WriteError } = require('./Errors')
// Persistor that wraps two other persistors. Talks to the 'primary' by default,

View File

@@ -1,8 +1,8 @@
// @ts-check
const Crypto = require('crypto')
const Stream = require('stream')
const fs = require('fs')
const { promisify } = require('util')
const Crypto = require('node:crypto')
const Stream = require('node:stream')
const fs = require('node:fs')
const { promisify } = require('node:util')
const { WritableBuffer } = require('@overleaf/stream-utils')
const { S3Persistor, SSECOptions } = require('./S3Persistor.js')
const {
@@ -13,7 +13,7 @@ const {
ReadError,
} = require('./Errors')
const logger = require('@overleaf/logger')
const Path = require('path')
const Path = require('node:path')
const generateKey = promisify(Crypto.generateKey)
const hkdf = promisify(Crypto.hkdf)

View File

@@ -1,6 +1,6 @@
const Crypto = require('crypto')
const Stream = require('stream')
const { pipeline } = require('stream/promises')
const Crypto = require('node:crypto')
const Stream = require('node:stream')
const { pipeline } = require('node:stream/promises')
const Logger = require('@overleaf/logger')
const Metrics = require('@overleaf/metrics')
const { WriteError, NotFoundError, AlreadyWrittenError } = require('./Errors')

View File

@@ -1,6 +1,6 @@
// @ts-check
const http = require('http')
const https = require('https')
const http = require('node:http')
const https = require('node:https')
if (http.globalAgent.maxSockets < 300) {
http.globalAgent.maxSockets = 300
}
@@ -8,15 +8,15 @@ if (https.globalAgent.maxSockets < 300) {
https.globalAgent.maxSockets = 300
}
const Crypto = require('crypto')
const Crypto = require('node:crypto')
const Metrics = require('@overleaf/metrics')
const AbstractPersistor = require('./AbstractPersistor')
const PersistorHelper = require('./PersistorHelper')
const { pipeline, PassThrough } = require('stream')
const fs = require('fs')
const { pipeline, PassThrough } = require('node:stream')
const fs = require('node:fs')
const S3 = require('aws-sdk/clients/s3')
const { URL } = require('url')
const { URL } = require('node:url')
const { WriteError, ReadError, NotFoundError } = require('./Errors')
/**

View File

@@ -25,4 +25,9 @@ SandboxedModule.configure({
},
},
globals: { Buffer, Math, console, process, URL },
sourceTransformers: {
removeNodePrefix: function (source) {
return source.replace(/require\(['"]node:/g, "require('")
},
},
})

View File

@@ -1,10 +1,10 @@
const crypto = require('crypto')
const crypto = require('node:crypto')
const { expect } = require('chai')
const mockFs = require('mock-fs')
const fs = require('fs')
const fsPromises = require('fs/promises')
const Path = require('path')
const StreamPromises = require('stream/promises')
const fs = require('node:fs')
const fsPromises = require('node:fs/promises')
const Path = require('node:path')
const StreamPromises = require('node:stream/promises')
const SandboxedModule = require('sandboxed-module')
const Errors = require('../../src/Errors')

View File

@@ -1,4 +1,4 @@
const { EventEmitter } = require('events')
const { EventEmitter } = require('node:events')
const sinon = require('sinon')
const chai = require('chai')
const { expect } = chai

View File

@@ -1,7 +1,7 @@
const chai = require('chai')
const { expect } = chai
const SandboxedModule = require('sandboxed-module')
const StreamPromises = require('stream/promises')
const StreamPromises = require('node:stream/promises')
const MODULE_PATH = '../../src/PersistorFactory.js'

View File

@@ -3,7 +3,7 @@ const chai = require('chai')
const { expect } = chai
const SandboxedModule = require('sandboxed-module')
const Errors = require('../../src/Errors')
const { EventEmitter } = require('events')
const { EventEmitter } = require('node:events')
const MODULE_PATH = '../../src/S3Persistor.js'

View File

@@ -1,4 +1,4 @@
const { promisify, callbackify } = require('util')
const { promisify, callbackify } = require('node:util')
const pLimit = require('p-limit')
module.exports = {

View File

@@ -0,0 +1,3 @@
{
"require": "test/setup.js"
}

View File

@@ -1,8 +1,8 @@
const { promisify } = require('util')
const { promisify } = require('node:util')
const metrics = require('@overleaf/metrics')
const logger = require('@overleaf/logger')
const os = require('os')
const crypto = require('crypto')
const os = require('node:os')
const crypto = require('node:crypto')
const HOST = os.hostname()
const PID = process.pid

View File

@@ -1,8 +1,8 @@
const { callbackify, promisify } = require('util')
const { callbackify, promisify } = require('node:util')
const metrics = require('@overleaf/metrics')
const logger = require('@overleaf/logger')
const os = require('os')
const crypto = require('crypto')
const os = require('node:os')
const crypto = require('node:crypto')
const async = require('async')
const HOST = os.hostname()

View File

@@ -1,6 +1,6 @@
const crypto = require('crypto')
const os = require('os')
const { promisify } = require('util')
const crypto = require('node:crypto')
const os = require('node:os')
const { promisify } = require('node:util')
const Redis = require('ioredis')

View File

@@ -0,0 +1,9 @@
const SandboxedModule = require('sandboxed-module')
SandboxedModule.configure({
sourceTransformers: {
removeNodePrefix: function (source) {
return source.replace(/require\(['"]node:/g, "require('")
},
},
})

View File

@@ -6,8 +6,8 @@
*/
require('chai').should()
const SandboxedModule = require('sandboxed-module')
const assert = require('assert')
const path = require('path')
const assert = require('node:assert')
const path = require('node:path')
const sinon = require('sinon')
const modulePath = path.join(__dirname, './../../../index.js')
const redisLockerModulePath = path.join(__dirname, './../../../RedisLocker.js')

View File

@@ -1,6 +1,6 @@
/* eslint-disable no-console */
const fs = require('fs')
const Path = require('path')
const fs = require('node:fs')
const Path = require('node:path')
const { merge } = require('./merge')
const CWD = process.cwd()

View File

@@ -1,4 +1,4 @@
const { Writable, Readable, PassThrough, Transform } = require('stream')
const { Writable, Readable, PassThrough, Transform } = require('node:stream')
/**
* A writable stream that stores all data written to it in a node Buffer.