Kaynağa Gözat

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
Antoine Clausse 1 yıl önce
ebeveyn
işleme
7f48c67512
100 değiştirilmiş dosya ile 245 ekleme ve 198 silme
  1. 2 2
      libraries/access-token-encryptor/lib/js/AccessTokenEncryptor.js
  2. 9 0
      libraries/access-token-encryptor/test/setup.js
  3. 3 3
      libraries/fetch-utils/index.js
  4. 3 3
      libraries/fetch-utils/test/unit/FetchUtilsTests.js
  5. 4 4
      libraries/fetch-utils/test/unit/helpers/TestServer.js
  6. 1 1
      libraries/logger/log-level-checker.js
  7. 1 1
      libraries/logger/logging-manager.js
  8. 5 0
      libraries/logger/test/setup.js
  9. 2 2
      libraries/logger/test/unit/log-level-checker-tests.js
  10. 1 1
      libraries/logger/test/unit/logging-manager-tests.js
  11. 1 1
      libraries/logger/test/unit/sentry-manager-tests.js
  12. 1 1
      libraries/metrics/initialize.js
  13. 2 2
      libraries/metrics/leaked_sockets.js
  14. 6 6
      libraries/metrics/open_sockets.js
  15. 3 3
      libraries/metrics/test/acceptance/metrics_tests.js
  16. 1 1
      libraries/metrics/test/unit/js/event_loop.js
  17. 1 1
      libraries/metrics/test/unit/js/http.js
  18. 1 1
      libraries/o-error/doc/demo.js
  19. 1 1
      libraries/o-error/test/o-error-util.test.js
  20. 1 1
      libraries/o-error/test/support/index.js
  21. 7 7
      libraries/object-persistor/src/FSPersistor.js
  22. 3 3
      libraries/object-persistor/src/GcsPersistor.js
  23. 2 2
      libraries/object-persistor/src/MigrationPersistor.js
  24. 5 5
      libraries/object-persistor/src/PerProjectEncryptedS3Persistor.js
  25. 3 3
      libraries/object-persistor/src/PersistorHelper.js
  26. 6 6
      libraries/object-persistor/src/S3Persistor.js
  27. 5 0
      libraries/object-persistor/test/Init.js
  28. 5 5
      libraries/object-persistor/test/unit/FSPersistorTests.js
  29. 1 1
      libraries/object-persistor/test/unit/GcsPersistorTests.js
  30. 1 1
      libraries/object-persistor/test/unit/PersistorFactoryTests.js
  31. 1 1
      libraries/object-persistor/test/unit/S3PersistorTests.js
  32. 1 1
      libraries/promise-utils/index.js
  33. 3 0
      libraries/redis-wrapper/.mocharc.json
  34. 3 3
      libraries/redis-wrapper/RedisLocker.js
  35. 3 3
      libraries/redis-wrapper/RedisWebLocker.js
  36. 3 3
      libraries/redis-wrapper/index.js
  37. 9 0
      libraries/redis-wrapper/test/setup.js
  38. 2 2
      libraries/redis-wrapper/test/unit/src/test.js
  39. 2 2
      libraries/settings/Settings.js
  40. 1 1
      libraries/stream-utils/index.js
  41. 3 0
      package-lock.json
  42. 1 0
      package.json
  43. 5 1
      server-ce/.eslintrc
  44. 3 3
      services/chat/app/js/server.js
  45. 1 1
      services/chat/test/acceptance/js/helpers/ChatApp.js
  46. 3 3
      services/clsi/app.js
  47. 4 4
      services/clsi/app/js/CompileManager.js
  48. 4 4
      services/clsi/app/js/ContentCacheManager.js
  49. 1 1
      services/clsi/app/js/ContentCacheMetrics.js
  50. 1 1
      services/clsi/app/js/ContentController.js
  51. 1 1
      services/clsi/app/js/ContentTypeMapper.js
  52. 4 4
      services/clsi/app/js/DockerRunner.js
  53. 2 2
      services/clsi/app/js/DraftModeManager.js
  54. 3 3
      services/clsi/app/js/LatexRunner.js
  55. 2 2
      services/clsi/app/js/LocalCommandRunner.js
  56. 4 4
      services/clsi/app/js/OutputCacheManager.js
  57. 2 2
      services/clsi/app/js/OutputFileFinder.js
  58. 3 3
      services/clsi/app/js/OutputFileOptimiser.js
  59. 3 3
      services/clsi/app/js/ProjectPersistenceManager.js
  60. 2 2
      services/clsi/app/js/ResourceStateManager.js
  61. 3 3
      services/clsi/app/js/ResourceWriter.js
  62. 1 1
      services/clsi/app/js/SafeReader.js
  63. 2 2
      services/clsi/app/js/StaticServerForbidSymlinks.js
  64. 1 1
      services/clsi/app/js/SynctexOutputParser.js
  65. 3 3
      services/clsi/app/js/TikzManager.js
  66. 3 3
      services/clsi/app/js/UrlCache.js
  67. 3 3
      services/clsi/app/js/UrlFetcher.js
  68. 1 1
      services/clsi/app/js/XrefParser.js
  69. 3 3
      services/clsi/config/settings.defaults.js
  70. 1 1
      services/clsi/scripts/demo-pdfjs-Xref.js
  71. 5 5
      services/clsi/test/acceptance/js/ExampleDocumentTests.js
  72. 1 1
      services/clsi/test/acceptance/js/SynctexTests.js
  73. 1 1
      services/clsi/test/acceptance/js/UrlCachingTests.js
  74. 2 2
      services/clsi/test/acceptance/js/WordcountTests.js
  75. 1 1
      services/clsi/test/acceptance/js/helpers/Client.js
  76. 4 4
      services/clsi/test/bench/hashbench.js
  77. 1 1
      services/clsi/test/load/js/loadTest.js
  78. 5 0
      services/clsi/test/setup.js
  79. 1 1
      services/clsi/test/unit/js/CompileControllerTests.js
  80. 2 2
      services/clsi/test/unit/js/CompileManagerTests.js
  81. 2 2
      services/clsi/test/unit/js/ContentCacheManagerTests.js
  82. 1 1
      services/clsi/test/unit/js/ContentTypeMapperTests.js
  83. 1 1
      services/clsi/test/unit/js/DockerLockManagerTests.js
  84. 2 2
      services/clsi/test/unit/js/DockerRunnerTests.js
  85. 2 2
      services/clsi/test/unit/js/DraftModeManagerTests.js
  86. 1 1
      services/clsi/test/unit/js/LatexRunnerTests.js
  87. 1 1
      services/clsi/test/unit/js/LockManagerTests.js
  88. 2 2
      services/clsi/test/unit/js/OutputControllerTests.js
  89. 2 2
      services/clsi/test/unit/js/OutputFileArchiveManagerTests.js
  90. 1 1
      services/clsi/test/unit/js/OutputFileFinderTests.js
  91. 3 3
      services/clsi/test/unit/js/OutputFileOptimiserTests.js
  92. 1 1
      services/clsi/test/unit/js/ProjectPersistenceManagerTests.js
  93. 1 1
      services/clsi/test/unit/js/RequestParserTests.js
  94. 2 2
      services/clsi/test/unit/js/ResourceStateManagerTests.js
  95. 2 2
      services/clsi/test/unit/js/ResourceWriterTests.js
  96. 2 2
      services/clsi/test/unit/js/StaticServerForbidSymlinksTests.js
  97. 1 1
      services/clsi/test/unit/js/SynctexOutputParserTests.js
  98. 1 1
      services/clsi/test/unit/js/TikzManager.js
  99. 4 1
      services/clsi/test/unit/js/UrlCacheTests.js
  100. 2 2
      services/clsi/test/unit/js/pdfjsTests.js

+ 2 - 2
libraries/access-token-encryptor/lib/js/AccessTokenEncryptor.js

@@ -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'
 const ALGORITHM = 'aes-256-ctr'
 
 

+ 9 - 0
libraries/access-token-encryptor/test/setup.js

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

+ 3 - 3
libraries/fetch-utils/index.js

@@ -1,9 +1,9 @@
 const _ = require('lodash')
 const _ = require('lodash')
-const { Readable } = require('stream')
+const { Readable } = require('node:stream')
 const OError = require('@overleaf/o-error')
 const OError = require('@overleaf/o-error')
 const fetch = require('node-fetch')
 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'
  * @import { Response } from 'node-fetch'

+ 3 - 3
libraries/fetch-utils/test/unit/FetchUtilsTests.js

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

+ 4 - 4
libraries/fetch-utils/test/unit/helpers/TestServer.js

@@ -1,9 +1,9 @@
 const express = require('express')
 const express = require('express')
 const bodyParser = require('body-parser')
 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 {
 class TestServer {
   constructor() {
   constructor() {

+ 1 - 1
libraries/logger/log-level-checker.js

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

+ 1 - 1
libraries/logger/logging-manager.js

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

+ 5 - 0
libraries/logger/test/setup.js

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

+ 2 - 2
libraries/logger/test/unit/log-level-checker-tests.js

@@ -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 SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
 const { expect } = require('chai')
 const { expect } = require('chai')

+ 1 - 1
libraries/logger/test/unit/logging-manager-tests.js

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

+ 1 - 1
libraries/logger/test/unit/sentry-manager-tests.js

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

+ 1 - 1
libraries/metrics/initialize.js

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

+ 2 - 2
libraries/metrics/leaked_sockets.js

@@ -6,8 +6,8 @@
  * logged along with the corresponding information from /proc/net/tcp.
  * 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
 const SOCKET_MONITOR_INTERVAL = 60 * 1000
 // set the threshold for logging leaked sockets in minutes, defaults to 15
 // set the threshold for logging leaked sockets in minutes, defaults to 15

+ 6 - 6
libraries/metrics/open_sockets.js

@@ -11,13 +11,13 @@ const seconds = 1000
 // In Node 0.10 the default is 5, which means only 5 open connections at one.
 // 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,
 // Node 0.12 has a default of Infinity. Make sure we have no limit set,
 // regardless of Node version.
 // 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
 // keep track of set gauges and reset them in the next collection cycle
 const SEEN_HOSTS_HTTP = new Set()
 const SEEN_HOSTS_HTTP = new Set()

+ 3 - 3
libraries/metrics/test/acceptance/metrics_tests.js

@@ -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 { expect } = require('chai')
 const Metrics = require('../..')
 const Metrics = require('../..')
 
 

+ 1 - 1
libraries/metrics/test/unit/js/event_loop.js

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

+ 1 - 1
libraries/metrics/test/unit/js/http.js

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

+ 1 - 1
libraries/o-error/doc/demo.js

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

+ 1 - 1
libraries/o-error/test/o-error-util.test.js

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

+ 1 - 1
libraries/o-error/test/support/index.js

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

+ 7 - 7
libraries/object-persistor/src/FSPersistor.js

@@ -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 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 AbstractPersistor = require('./AbstractPersistor')
 const { ReadError, WriteError, NotImplementedError } = require('./Errors')
 const { ReadError, WriteError, NotImplementedError } = require('./Errors')

+ 3 - 3
libraries/object-persistor/src/GcsPersistor.js

@@ -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 { Storage, IdempotencyStrategy } = require('@google-cloud/storage')
 const { WriteError, ReadError, NotFoundError } = require('./Errors')
 const { WriteError, ReadError, NotFoundError } = require('./Errors')
 const asyncPool = require('tiny-async-pool')
 const asyncPool = require('tiny-async-pool')

+ 2 - 2
libraries/object-persistor/src/MigrationPersistor.js

@@ -1,8 +1,8 @@
 const AbstractPersistor = require('./AbstractPersistor')
 const AbstractPersistor = require('./AbstractPersistor')
 const Logger = require('@overleaf/logger')
 const Logger = require('@overleaf/logger')
 const Metrics = require('@overleaf/metrics')
 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')
 const { NotFoundError, WriteError } = require('./Errors')
 
 
 // Persistor that wraps two other persistors. Talks to the 'primary' by default,
 // Persistor that wraps two other persistors. Talks to the 'primary' by default,

+ 5 - 5
libraries/object-persistor/src/PerProjectEncryptedS3Persistor.js

@@ -1,8 +1,8 @@
 // @ts-check
 // @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 { WritableBuffer } = require('@overleaf/stream-utils')
 const { S3Persistor, SSECOptions } = require('./S3Persistor.js')
 const { S3Persistor, SSECOptions } = require('./S3Persistor.js')
 const {
 const {
@@ -13,7 +13,7 @@ const {
   ReadError,
   ReadError,
 } = require('./Errors')
 } = require('./Errors')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
-const Path = require('path')
+const Path = require('node:path')
 
 
 const generateKey = promisify(Crypto.generateKey)
 const generateKey = promisify(Crypto.generateKey)
 const hkdf = promisify(Crypto.hkdf)
 const hkdf = promisify(Crypto.hkdf)

+ 3 - 3
libraries/object-persistor/src/PersistorHelper.js

@@ -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 Logger = require('@overleaf/logger')
 const Metrics = require('@overleaf/metrics')
 const Metrics = require('@overleaf/metrics')
 const { WriteError, NotFoundError, AlreadyWrittenError } = require('./Errors')
 const { WriteError, NotFoundError, AlreadyWrittenError } = require('./Errors')

+ 6 - 6
libraries/object-persistor/src/S3Persistor.js

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

+ 5 - 0
libraries/object-persistor/test/Init.js

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

+ 5 - 5
libraries/object-persistor/test/unit/FSPersistorTests.js

@@ -1,10 +1,10 @@
-const crypto = require('crypto')
+const crypto = require('node:crypto')
 const { expect } = require('chai')
 const { expect } = require('chai')
 const mockFs = require('mock-fs')
 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 SandboxedModule = require('sandboxed-module')
 const Errors = require('../../src/Errors')
 const Errors = require('../../src/Errors')
 
 

+ 1 - 1
libraries/object-persistor/test/unit/GcsPersistorTests.js

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

+ 1 - 1
libraries/object-persistor/test/unit/PersistorFactoryTests.js

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

+ 1 - 1
libraries/object-persistor/test/unit/S3PersistorTests.js

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

+ 1 - 1
libraries/promise-utils/index.js

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

+ 3 - 0
libraries/redis-wrapper/.mocharc.json

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

+ 3 - 3
libraries/redis-wrapper/RedisLocker.js

@@ -1,8 +1,8 @@
-const { promisify } = require('util')
+const { promisify } = require('node:util')
 const metrics = require('@overleaf/metrics')
 const metrics = require('@overleaf/metrics')
 const logger = require('@overleaf/logger')
 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 HOST = os.hostname()
 const PID = process.pid
 const PID = process.pid

+ 3 - 3
libraries/redis-wrapper/RedisWebLocker.js

@@ -1,8 +1,8 @@
-const { callbackify, promisify } = require('util')
+const { callbackify, promisify } = require('node:util')
 const metrics = require('@overleaf/metrics')
 const metrics = require('@overleaf/metrics')
 const logger = require('@overleaf/logger')
 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 async = require('async')
 
 
 const HOST = os.hostname()
 const HOST = os.hostname()

+ 3 - 3
libraries/redis-wrapper/index.js

@@ -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')
 const Redis = require('ioredis')
 
 

+ 9 - 0
libraries/redis-wrapper/test/setup.js

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

+ 2 - 2
libraries/redis-wrapper/test/unit/src/test.js

@@ -6,8 +6,8 @@
  */
  */
 require('chai').should()
 require('chai').should()
 const SandboxedModule = require('sandboxed-module')
 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 sinon = require('sinon')
 const modulePath = path.join(__dirname, './../../../index.js')
 const modulePath = path.join(__dirname, './../../../index.js')
 const redisLockerModulePath = path.join(__dirname, './../../../RedisLocker.js')
 const redisLockerModulePath = path.join(__dirname, './../../../RedisLocker.js')

+ 2 - 2
libraries/settings/Settings.js

@@ -1,6 +1,6 @@
 /* eslint-disable no-console */
 /* 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 { merge } = require('./merge')
 
 
 const CWD = process.cwd()
 const CWD = process.cwd()

+ 1 - 1
libraries/stream-utils/index.js

@@ -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.
  * A writable stream that stores all data written to it in a node Buffer.

+ 3 - 0
package-lock.json

@@ -51,6 +51,7 @@
         "eslint-plugin-node": "^11.1.0",
         "eslint-plugin-node": "^11.1.0",
         "eslint-plugin-prettier": "^4.0.0",
         "eslint-plugin-prettier": "^4.0.0",
         "eslint-plugin-promise": "^6.0.0",
         "eslint-plugin-promise": "^6.0.0",
+        "eslint-plugin-unicorn": "^56.0.0",
         "prettier": "3.3.3",
         "prettier": "3.3.3",
         "typescript": "^5.5.4"
         "typescript": "^5.5.4"
       }
       }
@@ -39877,6 +39878,7 @@
         "eslint-config-prettier": "^8.5.0",
         "eslint-config-prettier": "^8.5.0",
         "eslint-config-standard": "^16.0.3",
         "eslint-config-standard": "^16.0.3",
         "eslint-plugin-react": "^7.32.2",
         "eslint-plugin-react": "^7.32.2",
+        "eslint-plugin-unicorn": "^56.0.0",
         "expect": "^1.15.2",
         "expect": "^1.15.2",
         "file-loader": "^6.2.0",
         "file-loader": "^6.2.0",
         "jsdom": "^20.0.0",
         "jsdom": "^20.0.0",
@@ -66149,6 +66151,7 @@
         "eslint-config-prettier": "^8.5.0",
         "eslint-config-prettier": "^8.5.0",
         "eslint-config-standard": "^16.0.3",
         "eslint-config-standard": "^16.0.3",
         "eslint-plugin-react": "^7.32.2",
         "eslint-plugin-react": "^7.32.2",
+        "eslint-plugin-unicorn": "^56.0.0",
         "expect": "^1.15.2",
         "expect": "^1.15.2",
         "express": "^4.21.0",
         "express": "^4.21.0",
         "express-basic-auth": "^1.2.0",
         "express-basic-auth": "^1.2.0",

+ 1 - 0
package.json

@@ -19,6 +19,7 @@
     "eslint-plugin-node": "^11.1.0",
     "eslint-plugin-node": "^11.1.0",
     "eslint-plugin-prettier": "^4.0.0",
     "eslint-plugin-prettier": "^4.0.0",
     "eslint-plugin-promise": "^6.0.0",
     "eslint-plugin-promise": "^6.0.0",
+    "eslint-plugin-unicorn": "^56.0.0",
     "prettier": "3.3.3",
     "prettier": "3.3.3",
     "typescript": "^5.5.4"
     "typescript": "^5.5.4"
   },
   },

+ 5 - 1
server-ce/.eslintrc

@@ -4,6 +4,9 @@
     "standard",
     "standard",
     "prettier"
     "prettier"
   ],
   ],
+  "plugins": [
+    "unicorn"
+  ],
   "parserOptions": {
   "parserOptions": {
     "ecmaVersion": 2020
     "ecmaVersion": 2020
   },
   },
@@ -12,7 +15,8 @@
   },
   },
   "rules": {
   "rules": {
     // Do not allow importing of implicit dependencies.
     // Do not allow importing of implicit dependencies.
-    "import/no-extraneous-dependencies": "error"
+    "import/no-extraneous-dependencies": "error",
+    "unicorn/prefer-node-protocol": "error"
   },
   },
   "overrides": [
   "overrides": [
     // Extra rules for Cypress tests
     // Extra rules for Cypress tests

+ 3 - 3
services/chat/app/js/server.js

@@ -1,10 +1,10 @@
-import http from 'http'
+import http from 'node:http'
 import metrics from '@overleaf/metrics'
 import metrics from '@overleaf/metrics'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import express from 'express'
 import express from 'express'
 import exegesisExpress from 'exegesis-express'
 import exegesisExpress from 'exegesis-express'
-import path from 'path'
-import { fileURLToPath } from 'url'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
 import * as messagesController from './Features/Messages/MessageHttpController.js'
 import * as messagesController from './Features/Messages/MessageHttpController.js'
 
 
 const __dirname = fileURLToPath(new URL('.', import.meta.url))
 const __dirname = fileURLToPath(new URL('.', import.meta.url))

+ 1 - 1
services/chat/test/acceptance/js/helpers/ChatApp.js

@@ -1,5 +1,5 @@
 import { createServer } from '../../../../app/js/server.js'
 import { createServer } from '../../../../app/js/server.js'
-import { promisify } from 'util'
+import { promisify } from 'node:util'
 
 
 export { db } from '../../../../app/js/mongodb.js'
 export { db } from '../../../../app/js/mongodb.js'
 
 

+ 3 - 3
services/clsi/app.js

@@ -16,7 +16,7 @@ const ContentTypeMapper = require('./app/js/ContentTypeMapper')
 const Errors = require('./app/js/Errors')
 const Errors = require('./app/js/Errors')
 const { createOutputZip } = require('./app/js/OutputController')
 const { createOutputZip } = require('./app/js/OutputController')
 
 
-const Path = require('path')
+const Path = require('node:path')
 
 
 Metrics.open_sockets.monitor(true)
 Metrics.open_sockets.monitor(true)
 Metrics.memory.monitor(logger)
 Metrics.memory.monitor(logger)
@@ -316,8 +316,8 @@ app.use(function (error, req, res, next) {
   }
   }
 })
 })
 
 
-const net = require('net')
-const os = require('os')
+const net = require('node:net')
+const os = require('node:os')
 
 
 let STATE = 'up'
 let STATE = 'up'
 
 

+ 4 - 4
services/clsi/app/js/CompileManager.js

@@ -1,7 +1,7 @@
-const fsPromises = require('fs/promises')
-const os = require('os')
-const Path = require('path')
-const { callbackify } = require('util')
+const fsPromises = require('node:fs/promises')
+const os = require('node:os')
+const Path = require('node:path')
+const { callbackify } = require('node:util')
 
 
 const Settings = require('@overleaf/settings')
 const Settings = require('@overleaf/settings')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')

+ 4 - 4
services/clsi/app/js/ContentCacheManager.js

@@ -2,10 +2,10 @@
  * ContentCacheManager - maintains a cache of stream hashes from a PDF file
  * ContentCacheManager - maintains a cache of stream hashes from a PDF file
  */
  */
 
 
-const { callbackify } = require('util')
-const fs = require('fs')
-const crypto = require('crypto')
-const Path = require('path')
+const { callbackify } = require('node:util')
+const fs = require('node:fs')
+const crypto = require('node:crypto')
+const Path = require('node:path')
 const Settings = require('@overleaf/settings')
 const Settings = require('@overleaf/settings')
 const OError = require('@overleaf/o-error')
 const OError = require('@overleaf/o-error')
 const pLimit = require('p-limit')
 const pLimit = require('p-limit')

+ 1 - 1
services/clsi/app/js/ContentCacheMetrics.js

@@ -1,6 +1,6 @@
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
 const Metrics = require('./Metrics')
 const Metrics = require('./Metrics')
-const os = require('os')
+const os = require('node:os')
 
 
 let CACHED_LOAD = {
 let CACHED_LOAD = {
   expires: -1,
   expires: -1,

+ 1 - 1
services/clsi/app/js/ContentController.js

@@ -1,4 +1,4 @@
-const Path = require('path')
+const Path = require('node:path')
 const send = require('send')
 const send = require('send')
 const Settings = require('@overleaf/settings')
 const Settings = require('@overleaf/settings')
 const OutputCacheManager = require('./OutputCacheManager')
 const OutputCacheManager = require('./OutputCacheManager')

+ 1 - 1
services/clsi/app/js/ContentTypeMapper.js

@@ -4,7 +4,7 @@
 // TODO: This file was created by bulk-decaffeinate.
 // TODO: This file was created by bulk-decaffeinate.
 // Fix any style issues and re-enable lint.
 // Fix any style issues and re-enable lint.
 let ContentTypeMapper
 let ContentTypeMapper
-const Path = require('path')
+const Path = require('node:path')
 
 
 // here we coerce html, css and js to text/plain,
 // here we coerce html, css and js to text/plain,
 // otherwise choose correct mime type based on file extension,
 // otherwise choose correct mime type based on file extension,

+ 4 - 4
services/clsi/app/js/DockerRunner.js

@@ -1,13 +1,13 @@
-const { promisify } = require('util')
+const { promisify } = require('node:util')
 const Settings = require('@overleaf/settings')
 const Settings = require('@overleaf/settings')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
 const Docker = require('dockerode')
 const Docker = require('dockerode')
 const dockerode = new Docker()
 const dockerode = new Docker()
-const crypto = require('crypto')
+const crypto = require('node:crypto')
 const async = require('async')
 const async = require('async')
 const LockManager = require('./DockerLockManager')
 const LockManager = require('./DockerLockManager')
-const fs = require('fs')
-const Path = require('path')
+const fs = require('node:fs')
+const Path = require('node:path')
 const _ = require('lodash')
 const _ = require('lodash')
 
 
 const ONE_HOUR_IN_MS = 60 * 60 * 1000
 const ONE_HOUR_IN_MS = 60 * 60 * 1000

+ 2 - 2
services/clsi/app/js/DraftModeManager.js

@@ -1,5 +1,5 @@
-const fsPromises = require('fs/promises')
-const { callbackify } = require('util')
+const fsPromises = require('node:fs/promises')
+const { callbackify } = require('node:util')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
 
 
 async function injectDraftMode(filename) {
 async function injectDraftMode(filename) {

+ 3 - 3
services/clsi/app/js/LatexRunner.js

@@ -1,9 +1,9 @@
-const Path = require('path')
-const { promisify } = require('util')
+const Path = require('node:path')
+const { promisify } = require('node:util')
 const Settings = require('@overleaf/settings')
 const Settings = require('@overleaf/settings')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
 const CommandRunner = require('./CommandRunner')
 const CommandRunner = require('./CommandRunner')
-const fs = require('fs')
+const fs = require('node:fs')
 
 
 const ProcessTable = {} // table of currently running jobs (pids or docker container names)
 const ProcessTable = {} // table of currently running jobs (pids or docker container names)
 
 

+ 2 - 2
services/clsi/app/js/LocalCommandRunner.js

@@ -12,8 +12,8 @@
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
  */
 let CommandRunner
 let CommandRunner
-const { spawn } = require('child_process')
-const { promisify } = require('util')
+const { spawn } = require('node:child_process')
+const { promisify } = require('node:util')
 const _ = require('lodash')
 const _ = require('lodash')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
 
 

+ 4 - 4
services/clsi/app/js/OutputCacheManager.js

@@ -1,12 +1,12 @@
 let OutputCacheManager
 let OutputCacheManager
-const { callbackify, promisify } = require('util')
+const { callbackify, promisify } = require('node:util')
 const async = require('async')
 const async = require('async')
-const fs = require('fs')
-const Path = require('path')
+const fs = require('node:fs')
+const Path = require('node:path')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
 const _ = require('lodash')
 const _ = require('lodash')
 const Settings = require('@overleaf/settings')
 const Settings = require('@overleaf/settings')
-const crypto = require('crypto')
+const crypto = require('node:crypto')
 const Metrics = require('./Metrics')
 const Metrics = require('./Metrics')
 
 
 const OutputFileOptimiser = require('./OutputFileOptimiser')
 const OutputFileOptimiser = require('./OutputFileOptimiser')

+ 2 - 2
services/clsi/app/js/OutputFileFinder.js

@@ -1,5 +1,5 @@
-const Path = require('path')
-const fs = require('fs')
+const Path = require('node:path')
+const fs = require('node:fs')
 const { callbackifyMultiResult } = require('@overleaf/promise-utils')
 const { callbackifyMultiResult } = require('@overleaf/promise-utils')
 
 
 async function walkFolder(compileDir, d, files, allEntries) {
 async function walkFolder(compileDir, d, files, allEntries) {

+ 3 - 3
services/clsi/app/js/OutputFileOptimiser.js

@@ -13,9 +13,9 @@
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
  */
 let OutputFileOptimiser
 let OutputFileOptimiser
-const fs = require('fs')
-const Path = require('path')
-const { spawn } = require('child_process')
+const fs = require('node:fs')
+const Path = require('node:path')
+const { spawn } = require('node:child_process')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
 const Metrics = require('./Metrics')
 const Metrics = require('./Metrics')
 const _ = require('lodash')
 const _ = require('lodash')

+ 3 - 3
services/clsi/app/js/ProjectPersistenceManager.js

@@ -15,9 +15,9 @@ const logger = require('@overleaf/logger')
 const oneDay = 24 * 60 * 60 * 1000
 const oneDay = 24 * 60 * 60 * 1000
 const Settings = require('@overleaf/settings')
 const Settings = require('@overleaf/settings')
 const diskusage = require('diskusage')
 const diskusage = require('diskusage')
-const { callbackify } = require('util')
-const Path = require('path')
-const fs = require('fs')
+const { callbackify } = require('node:util')
+const Path = require('node:path')
+const fs = require('node:fs')
 
 
 // projectId -> timestamp mapping.
 // projectId -> timestamp mapping.
 const LAST_ACCESS = new Map()
 const LAST_ACCESS = new Map()

+ 2 - 2
services/clsi/app/js/ResourceStateManager.js

@@ -1,5 +1,5 @@
-const Path = require('path')
-const fs = require('fs')
+const Path = require('node:path')
+const fs = require('node:fs')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
 const Errors = require('./Errors')
 const Errors = require('./Errors')
 const SafeReader = require('./SafeReader')
 const SafeReader = require('./SafeReader')

+ 3 - 3
services/clsi/app/js/ResourceWriter.js

@@ -13,10 +13,10 @@
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
  */
 let ResourceWriter
 let ResourceWriter
-const { promisify } = require('util')
+const { promisify } = require('node:util')
 const UrlCache = require('./UrlCache')
 const UrlCache = require('./UrlCache')
-const Path = require('path')
-const fs = require('fs')
+const Path = require('node:path')
+const fs = require('node:fs')
 const async = require('async')
 const async = require('async')
 const OutputFileFinder = require('./OutputFileFinder')
 const OutputFileFinder = require('./OutputFileFinder')
 const ResourceStateManager = require('./ResourceStateManager')
 const ResourceStateManager = require('./ResourceStateManager')

+ 1 - 1
services/clsi/app/js/SafeReader.js

@@ -12,7 +12,7 @@
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
  */
 let SafeReader
 let SafeReader
-const fs = require('fs')
+const fs = require('node:fs')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
 
 
 module.exports = SafeReader = {
 module.exports = SafeReader = {

+ 2 - 2
services/clsi/app/js/StaticServerForbidSymlinks.js

@@ -13,8 +13,8 @@
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
  */
 let ForbidSymlinks
 let ForbidSymlinks
-const Path = require('path')
-const fs = require('fs')
+const Path = require('node:path')
+const fs = require('node:fs')
 const Settings = require('@overleaf/settings')
 const Settings = require('@overleaf/settings')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
 
 

+ 1 - 1
services/clsi/app/js/SynctexOutputParser.js

@@ -1,4 +1,4 @@
-const Path = require('path')
+const Path = require('node:path')
 
 
 /**
 /**
  * Parse output from the `synctex view` command
  * Parse output from the `synctex view` command

+ 3 - 3
services/clsi/app/js/TikzManager.js

@@ -11,9 +11,9 @@
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
  */
 let TikzManager
 let TikzManager
-const fs = require('fs')
-const Path = require('path')
-const { promisify } = require('util')
+const fs = require('node:fs')
+const Path = require('node:path')
+const { promisify } = require('node:util')
 const ResourceWriter = require('./ResourceWriter')
 const ResourceWriter = require('./ResourceWriter')
 const SafeReader = require('./SafeReader')
 const SafeReader = require('./SafeReader')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')

+ 3 - 3
services/clsi/app/js/UrlCache.js

@@ -12,9 +12,9 @@
  */
  */
 const UrlFetcher = require('./UrlFetcher')
 const UrlFetcher = require('./UrlFetcher')
 const Settings = require('@overleaf/settings')
 const Settings = require('@overleaf/settings')
-const fs = require('fs')
-const Path = require('path')
-const { callbackify } = require('util')
+const fs = require('node:fs')
+const Path = require('node:path')
+const { callbackify } = require('node:util')
 const Metrics = require('./Metrics')
 const Metrics = require('./Metrics')
 
 
 const PENDING_DOWNLOADS = new Map()
 const PENDING_DOWNLOADS = new Map()

+ 3 - 3
services/clsi/app/js/UrlFetcher.js

@@ -1,4 +1,4 @@
-const fs = require('fs')
+const fs = require('node:fs')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
 const Settings = require('@overleaf/settings')
 const Settings = require('@overleaf/settings')
 const {
 const {
@@ -6,8 +6,8 @@ const {
   CustomHttpsAgent,
   CustomHttpsAgent,
   fetchStream,
   fetchStream,
 } = require('@overleaf/fetch-utils')
 } = require('@overleaf/fetch-utils')
-const { URL } = require('url')
-const { pipeline } = require('stream/promises')
+const { URL } = require('node:url')
+const { pipeline } = require('node:stream/promises')
 const Metrics = require('./Metrics')
 const Metrics = require('./Metrics')
 
 
 const MAX_CONNECT_TIME = 1000
 const MAX_CONNECT_TIME = 1000

+ 1 - 1
services/clsi/app/js/XrefParser.js

@@ -1,5 +1,5 @@
 const { NoXrefTableError } = require('./Errors')
 const { NoXrefTableError } = require('./Errors')
-const fs = require('fs')
+const fs = require('node:fs')
 const { O_RDONLY, O_NOFOLLOW } = fs.constants
 const { O_RDONLY, O_NOFOLLOW } = fs.constants
 const MAX_XREF_FILE_SIZE = 1024 * 1024
 const MAX_XREF_FILE_SIZE = 1024 * 1024
 
 

+ 3 - 3
services/clsi/config/settings.defaults.js

@@ -1,5 +1,5 @@
-const Path = require('path')
-const os = require('os')
+const Path = require('node:path')
+const os = require('node:os')
 
 
 const isPreEmptible = os.hostname().includes('pre-emp')
 const isPreEmptible = os.hostname().includes('pre-emp')
 
 
@@ -131,7 +131,7 @@ if (process.env.DOCKER_RUNNER) {
   try {
   try {
     seccompProfilePath = Path.resolve(__dirname, '../seccomp/clsi-profile.json')
     seccompProfilePath = Path.resolve(__dirname, '../seccomp/clsi-profile.json')
     module.exports.clsi.docker.seccomp_profile = JSON.stringify(
     module.exports.clsi.docker.seccomp_profile = JSON.stringify(
-      JSON.parse(require('fs').readFileSync(seccompProfilePath))
+      JSON.parse(require('node:fs').readFileSync(seccompProfilePath))
     )
     )
   } catch (error) {
   } catch (error) {
     console.error(
     console.error(

+ 1 - 1
services/clsi/scripts/demo-pdfjs-Xref.js

@@ -1,4 +1,4 @@
-const fs = require('fs')
+const fs = require('node:fs')
 const { parseXrefTable } = require('../app/lib/pdfjs/parseXrefTable')
 const { parseXrefTable } = require('../app/lib/pdfjs/parseXrefTable')
 
 
 const pdfPath = process.argv[2]
 const pdfPath = process.argv[2]

+ 5 - 5
services/clsi/test/acceptance/js/ExampleDocumentTests.js

@@ -14,19 +14,19 @@
  */
  */
 const Client = require('./helpers/Client')
 const Client = require('./helpers/Client')
 const fetch = require('node-fetch')
 const fetch = require('node-fetch')
-const { pipeline } = require('stream')
-const fs = require('fs')
-const ChildProcess = require('child_process')
+const { pipeline } = require('node:stream')
+const fs = require('node:fs')
+const ChildProcess = require('node:child_process')
 const ClsiApp = require('./helpers/ClsiApp')
 const ClsiApp = require('./helpers/ClsiApp')
 const logger = require('@overleaf/logger')
 const logger = require('@overleaf/logger')
-const Path = require('path')
+const Path = require('node:path')
 const fixturePath = path => {
 const fixturePath = path => {
   if (path.slice(0, 3) === 'tmp') {
   if (path.slice(0, 3) === 'tmp') {
     return '/tmp/clsi_acceptance_tests' + path.slice(3)
     return '/tmp/clsi_acceptance_tests' + path.slice(3)
   }
   }
   return Path.join(__dirname, '../fixtures/', path)
   return Path.join(__dirname, '../fixtures/', path)
 }
 }
-const process = require('process')
+const process = require('node:process')
 console.log(
 console.log(
   process.pid,
   process.pid,
   process.ppid,
   process.ppid,

+ 1 - 1
services/clsi/test/acceptance/js/SynctexTests.js

@@ -13,7 +13,7 @@ const Client = require('./helpers/Client')
 const request = require('request')
 const request = require('request')
 const { expect } = require('chai')
 const { expect } = require('chai')
 const ClsiApp = require('./helpers/ClsiApp')
 const ClsiApp = require('./helpers/ClsiApp')
-const crypto = require('crypto')
+const crypto = require('node:crypto')
 
 
 describe('Syncing', function () {
 describe('Syncing', function () {
   before(function (done) {
   before(function (done) {

+ 1 - 1
services/clsi/test/acceptance/js/UrlCachingTests.js

@@ -10,7 +10,7 @@
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
  */
 const express = require('express')
 const express = require('express')
-const Path = require('path')
+const Path = require('node:path')
 const Client = require('./helpers/Client')
 const Client = require('./helpers/Client')
 const sinon = require('sinon')
 const sinon = require('sinon')
 const ClsiApp = require('./helpers/ClsiApp')
 const ClsiApp = require('./helpers/ClsiApp')

+ 2 - 2
services/clsi/test/acceptance/js/WordcountTests.js

@@ -12,8 +12,8 @@
 const Client = require('./helpers/Client')
 const Client = require('./helpers/Client')
 const request = require('request')
 const request = require('request')
 const { expect } = require('chai')
 const { expect } = require('chai')
-const path = require('path')
-const fs = require('fs')
+const path = require('node:path')
+const fs = require('node:fs')
 const ClsiApp = require('./helpers/ClsiApp')
 const ClsiApp = require('./helpers/ClsiApp')
 
 
 describe('Syncing', function () {
 describe('Syncing', function () {

+ 1 - 1
services/clsi/test/acceptance/js/helpers/Client.js

@@ -13,7 +13,7 @@
 let Client
 let Client
 const express = require('express')
 const express = require('express')
 const request = require('request')
 const request = require('request')
-const fs = require('fs')
+const fs = require('node:fs')
 const Settings = require('@overleaf/settings')
 const Settings = require('@overleaf/settings')
 
 
 module.exports = Client = {
 module.exports = Client = {

+ 4 - 4
services/clsi/test/bench/hashbench.js

@@ -1,8 +1,8 @@
 const ContentCacheManager = require('../../app/js/ContentCacheManager')
 const ContentCacheManager = require('../../app/js/ContentCacheManager')
-const fs = require('fs')
-const crypto = require('crypto')
-const path = require('path')
-const os = require('os')
+const fs = require('node:fs')
+const crypto = require('node:crypto')
+const path = require('node:path')
+const os = require('node:os')
 const async = require('async')
 const async = require('async')
 const _createHash = crypto.createHash
 const _createHash = crypto.createHash
 
 

+ 1 - 1
services/clsi/test/load/js/loadTest.js

@@ -9,7 +9,7 @@
 const request = require('request')
 const request = require('request')
 const Settings = require('@overleaf/settings')
 const Settings = require('@overleaf/settings')
 const async = require('async')
 const async = require('async')
-const fs = require('fs')
+const fs = require('node:fs')
 const _ = require('lodash')
 const _ = require('lodash')
 const concurentCompiles = 5
 const concurentCompiles = 5
 const totalCompiles = 50
 const totalCompiles = 50

+ 5 - 0
services/clsi/test/setup.js

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

+ 1 - 1
services/clsi/test/unit/js/CompileControllerTests.js

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

+ 2 - 2
services/clsi/test/unit/js/CompileManagerTests.js

@@ -1,9 +1,9 @@
-const Path = require('path')
+const Path = require('node:path')
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')
 const { expect } = require('chai')
 const { expect } = require('chai')
 const sinon = require('sinon')
 const sinon = require('sinon')
 
 
-const MODULE_PATH = require('path').join(
+const MODULE_PATH = require('node:path').join(
   __dirname,
   __dirname,
   '../../../app/js/CompileManager'
   '../../../app/js/CompileManager'
 )
 )

+ 2 - 2
services/clsi/test/unit/js/ContentCacheManagerTests.js

@@ -1,5 +1,5 @@
-const fs = require('fs')
-const Path = require('path')
+const fs = require('node:fs')
+const Path = require('node:path')
 const { expect } = require('chai')
 const { expect } = require('chai')
 
 
 const MODULE_PATH = '../../../app/js/ContentCacheManager'
 const MODULE_PATH = '../../../app/js/ContentCacheManager'

+ 1 - 1
services/clsi/test/unit/js/ContentTypeMapperTests.js

@@ -11,7 +11,7 @@
  */
  */
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
-const modulePath = require('path').join(
+const modulePath = require('node:path').join(
   __dirname,
   __dirname,
   '../../../app/js/ContentTypeMapper'
   '../../../app/js/ContentTypeMapper'
 )
 )

+ 1 - 1
services/clsi/test/unit/js/DockerLockManagerTests.js

@@ -11,7 +11,7 @@
  */
  */
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
-const modulePath = require('path').join(
+const modulePath = require('node:path').join(
   __dirname,
   __dirname,
   '../../../app/js/DockerLockManager'
   '../../../app/js/DockerLockManager'
 )
 )

+ 2 - 2
services/clsi/test/unit/js/DockerRunnerTests.js

@@ -15,11 +15,11 @@
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
 const { expect } = require('chai')
 const { expect } = require('chai')
-const modulePath = require('path').join(
+const modulePath = require('node:path').join(
   __dirname,
   __dirname,
   '../../../app/js/DockerRunner'
   '../../../app/js/DockerRunner'
 )
 )
-const Path = require('path')
+const Path = require('node:path')
 
 
 describe('DockerRunner', function () {
 describe('DockerRunner', function () {
   beforeEach(function () {
   beforeEach(function () {

+ 2 - 2
services/clsi/test/unit/js/DraftModeManagerTests.js

@@ -1,5 +1,5 @@
-const Path = require('path')
-const fsPromises = require('fs/promises')
+const Path = require('node:path')
+const fsPromises = require('node:fs/promises')
 const { expect } = require('chai')
 const { expect } = require('chai')
 const mockFs = require('mock-fs')
 const mockFs = require('mock-fs')
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')

+ 1 - 1
services/clsi/test/unit/js/LatexRunnerTests.js

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

+ 1 - 1
services/clsi/test/unit/js/LockManagerTests.js

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

+ 2 - 2
services/clsi/test/unit/js/OutputControllerTests.js

@@ -1,6 +1,6 @@
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
-const MODULE_PATH = require('path').join(
+const MODULE_PATH = require('node:path').join(
   __dirname,
   __dirname,
   '../../../app/js/OutputController'
   '../../../app/js/OutputController'
 )
 )
@@ -19,7 +19,7 @@ describe('OutputController', function () {
           './OutputFileArchiveManager': {
           './OutputFileArchiveManager': {
             archiveFilesForBuild: this.archiveFilesForBuild,
             archiveFilesForBuild: this.archiveFilesForBuild,
           },
           },
-          'node:stream/promises': {
+          'stream/promises': {
             pipeline: this.pipeline,
             pipeline: this.pipeline,
           },
           },
         },
         },

+ 2 - 2
services/clsi/test/unit/js/OutputFileArchiveManagerTests.js

@@ -2,7 +2,7 @@ const SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
 const { assert, expect } = require('chai')
 const { assert, expect } = require('chai')
 
 
-const MODULE_PATH = require('path').join(
+const MODULE_PATH = require('node:path').join(
   __dirname,
   __dirname,
   '../../../app/js/OutputFileArchiveManager'
   '../../../app/js/OutputFileArchiveManager'
 )
 )
@@ -50,7 +50,7 @@ describe('OutputFileArchiveManager', function () {
         './OutputFileFinder': this.OutputFileFinder,
         './OutputFileFinder': this.OutputFileFinder,
         './OutputCacheManager': this.OutputCacheManger,
         './OutputCacheManager': this.OutputCacheManger,
         archiver: this.archiver,
         archiver: this.archiver,
-        'node:fs/promises': this.fs,
+        'fs/promises': this.fs,
         '@overleaf/settings': {
         '@overleaf/settings': {
           path: {
           path: {
             outputDir: this.outputDir,
             outputDir: this.outputDir,

+ 1 - 1
services/clsi/test/unit/js/OutputFileFinderTests.js

@@ -1,6 +1,6 @@
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
-const modulePath = require('path').join(
+const modulePath = require('node:path').join(
   __dirname,
   __dirname,
   '../../../app/js/OutputFileFinder'
   '../../../app/js/OutputFileFinder'
 )
 )

+ 3 - 3
services/clsi/test/unit/js/OutputFileOptimiserTests.js

@@ -12,13 +12,13 @@
  */
  */
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
-const modulePath = require('path').join(
+const modulePath = require('node:path').join(
   __dirname,
   __dirname,
   '../../../app/js/OutputFileOptimiser'
   '../../../app/js/OutputFileOptimiser'
 )
 )
-const path = require('path')
+const path = require('node:path')
 const { expect } = require('chai')
 const { expect } = require('chai')
-const { EventEmitter } = require('events')
+const { EventEmitter } = require('node:events')
 
 
 describe('OutputFileOptimiser', function () {
 describe('OutputFileOptimiser', function () {
   beforeEach(function () {
   beforeEach(function () {

+ 1 - 1
services/clsi/test/unit/js/ProjectPersistenceManagerTests.js

@@ -13,7 +13,7 @@
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
 const assert = require('chai').assert
 const assert = require('chai').assert
-const modulePath = require('path').join(
+const modulePath = require('node:path').join(
   __dirname,
   __dirname,
   '../../../app/js/ProjectPersistenceManager'
   '../../../app/js/ProjectPersistenceManager'
 )
 )

+ 1 - 1
services/clsi/test/unit/js/RequestParserTests.js

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

+ 2 - 2
services/clsi/test/unit/js/ResourceStateManagerTests.js

@@ -12,11 +12,11 @@
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
 const { expect } = require('chai')
 const { expect } = require('chai')
-const modulePath = require('path').join(
+const modulePath = require('node:path').join(
   __dirname,
   __dirname,
   '../../../app/js/ResourceStateManager'
   '../../../app/js/ResourceStateManager'
 )
 )
-const Path = require('path')
+const Path = require('node:path')
 const Errors = require('../../../app/js/Errors')
 const Errors = require('../../../app/js/Errors')
 
 
 describe('ResourceStateManager', function () {
 describe('ResourceStateManager', function () {

+ 2 - 2
services/clsi/test/unit/js/ResourceWriterTests.js

@@ -13,11 +13,11 @@
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
 const { expect } = require('chai')
 const { expect } = require('chai')
-const modulePath = require('path').join(
+const modulePath = require('node:path').join(
   __dirname,
   __dirname,
   '../../../app/js/ResourceWriter'
   '../../../app/js/ResourceWriter'
 )
 )
-const path = require('path')
+const path = require('node:path')
 
 
 describe('ResourceWriter', function () {
 describe('ResourceWriter', function () {
   beforeEach(function () {
   beforeEach(function () {

+ 2 - 2
services/clsi/test/unit/js/StaticServerForbidSymlinksTests.js

@@ -10,8 +10,8 @@
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
  */
 const SandboxedModule = require('sandboxed-module')
 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 sinon = require('sinon')
 const modulePath = path.join(
 const modulePath = path.join(
   __dirname,
   __dirname,

+ 1 - 1
services/clsi/test/unit/js/SynctexOutputParserTests.js

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

+ 1 - 1
services/clsi/test/unit/js/TikzManager.js

@@ -10,7 +10,7 @@
  */
  */
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
-const modulePath = require('path').join(
+const modulePath = require('node:path').join(
   __dirname,
   __dirname,
   '../../../app/js/TikzManager'
   '../../../app/js/TikzManager'
 )
 )

+ 4 - 1
services/clsi/test/unit/js/UrlCacheTests.js

@@ -13,7 +13,10 @@
 const SandboxedModule = require('sandboxed-module')
 const SandboxedModule = require('sandboxed-module')
 const sinon = require('sinon')
 const sinon = require('sinon')
 const { expect } = require('chai')
 const { expect } = require('chai')
-const modulePath = require('path').join(__dirname, '../../../app/js/UrlCache')
+const modulePath = require('node:path').join(
+  __dirname,
+  '../../../app/js/UrlCache'
+)
 
 
 describe('UrlCache', function () {
 describe('UrlCache', function () {
   beforeEach(function () {
   beforeEach(function () {

+ 2 - 2
services/clsi/test/unit/js/pdfjsTests.js

@@ -1,5 +1,5 @@
-const fs = require('fs')
-const Path = require('path')
+const fs = require('node:fs')
+const Path = require('node:path')
 const { expect } = require('chai')
 const { expect } = require('chai')
 const { parseXrefTable } = require('../../../app/js/XrefParser')
 const { parseXrefTable } = require('../../../app/js/XrefParser')
 const { NoXrefTableError } = require('../../../app/js/Errors')
 const { NoXrefTableError } = require('../../../app/js/Errors')

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor