Просмотр исходного кода

meta: use `node:` protocol when using Node.js built-in core modules (#3871)

`node:` protocol is available as of Node.js 14.18.0 LTS. Since we are
dropping support for all Node.js versions below that, we can take
advantage of this prefix to help differentiate built-in modules from npm
modules.
Antoine du Hamel 2 лет назад
Родитель
Сommit
7b0db7d3a0
50 измененных файлов с 184 добавлено и 102 удалено
  1. 2 0
      .eslintrc.js
  2. 3 3
      bin/build-css.js
  3. 3 3
      bin/build-lib.js
  4. 3 3
      bin/upload-to-cdn.js
  5. 1 1
      examples/angular-example/e2e/protractor.conf.js
  6. 1 1
      examples/angular-example/karma.conf.js
  7. 2 2
      examples/aws-companion/server.js
  8. 2 2
      examples/digitalocean-spaces/server.js
  9. 1 1
      examples/node-xhr/server.js
  10. 1 1
      examples/svelte-example/rollup.config.js
  11. 1 1
      examples/transloadit/main.js
  12. 2 2
      examples/transloadit/server.js
  13. 1 0
      package.json
  14. 1 1
      packages/@uppy/companion/package.json
  15. 1 1
      packages/@uppy/companion/src/config/companion.js
  16. 4 4
      packages/@uppy/companion/src/server/Uploader.js
  17. 2 2
      packages/@uppy/companion/src/server/controllers/oauth-redirect.js
  18. 1 1
      packages/@uppy/companion/src/server/controllers/send-token.js
  19. 1 1
      packages/@uppy/companion/src/server/controllers/url.js
  20. 1 1
      packages/@uppy/companion/src/server/emitter/default-emitter.js
  21. 1 1
      packages/@uppy/companion/src/server/helpers/oauth-state.js
  22. 4 4
      packages/@uppy/companion/src/server/helpers/request.js
  23. 1 1
      packages/@uppy/companion/src/server/helpers/utils.js
  24. 3 3
      packages/@uppy/companion/src/server/jobs.js
  25. 1 1
      packages/@uppy/companion/src/server/logger.js
  26. 1 1
      packages/@uppy/companion/src/server/provider/box/adapter.js
  27. 1 1
      packages/@uppy/companion/src/server/provider/box/index.js
  28. 1 1
      packages/@uppy/companion/src/server/provider/drive/adapter.js
  29. 1 1
      packages/@uppy/companion/src/server/provider/drive/index.js
  30. 1 1
      packages/@uppy/companion/src/server/provider/dropbox/adapter.js
  31. 1 1
      packages/@uppy/companion/src/server/provider/dropbox/index.js
  32. 1 1
      packages/@uppy/companion/src/server/provider/facebook/adapter.js
  33. 1 1
      packages/@uppy/companion/src/server/provider/facebook/index.js
  34. 1 1
      packages/@uppy/companion/src/server/provider/instagram/graph/adapter.js
  35. 1 1
      packages/@uppy/companion/src/server/provider/instagram/graph/index.js
  36. 1 1
      packages/@uppy/companion/src/server/provider/onedrive/adapter.js
  37. 1 1
      packages/@uppy/companion/src/server/provider/onedrive/index.js
  38. 1 1
      packages/@uppy/companion/src/server/provider/unsplash/adapter.js
  39. 1 1
      packages/@uppy/companion/src/server/provider/unsplash/index.js
  40. 1 1
      packages/@uppy/companion/src/server/provider/zoom/index.js
  41. 2 2
      packages/@uppy/companion/src/standalone/helper.js
  42. 2 2
      packages/@uppy/companion/src/standalone/index.js
  43. 2 2
      packages/@uppy/companion/test/__mocks__/purest.js
  44. 2 2
      packages/@uppy/companion/test/__tests__/http-agent.js
  45. 1 1
      packages/@uppy/companion/test/__tests__/uploader.js
  46. 1 1
      website/build-examples.js
  47. 4 4
      website/inject.js
  48. 3 3
      website/private_modules/hexo-renderer-uppyexamples/index.js
  49. 2 2
      website/scripts/highlight.js
  50. 106 27
      yarn.lock

+ 2 - 0
.eslintrc.js

@@ -32,6 +32,7 @@ module.exports = {
     // extra:
     'compat',
     'jsdoc',
+    'unicorn',
   ],
   parser: '@babel/eslint-parser',
   parserOptions: {
@@ -73,6 +74,7 @@ module.exports = {
     'node/handle-callback-err': 'error',
     'prefer-destructuring': 'error',
     'prefer-spread': 'error',
+    'unicorn/prefer-node-protocol': 'error',
 
     // transloadit rules we would like to enforce in the future
     // but will require separate PRs to gradually get there

+ 3 - 3
bin/build-css.js

@@ -5,9 +5,9 @@ const postcssLogical = require('postcss-logical')
 const postcssDirPseudoClass = require('postcss-dir-pseudo-class')
 const cssnano = require('cssnano')
 const chalk = require('chalk')
-const { promisify } = require('util')
-const fs = require('fs')
-const path = require('path')
+const { promisify } = require('node:util')
+const fs = require('node:fs')
+const path = require('node:path')
 const resolve = require('resolve')
 const glob = promisify(require('glob'))
 

+ 3 - 3
bin/build-lib.js

@@ -1,10 +1,10 @@
 const chalk = require('chalk')
 const babel = require('@babel/core')
 const t = require('@babel/types')
-const { promisify } = require('util')
+const { promisify } = require('node:util')
 const glob = promisify(require('glob'))
-const fs = require('fs')
-const path = require('path')
+const fs = require('node:fs')
+const path = require('node:path')
 
 const { mkdir, stat, writeFile } = fs.promises
 

+ 3 - 3
bin/upload-to-cdn.js

@@ -21,9 +21,9 @@
 //
 //  - Kevin van Zonneveld <kevin@transloadit.com>
 
-const path = require('path')
-const { pipeline, finished } = require('stream/promises')
-const { readFile } = require('fs/promises')
+const path = require('node:path')
+const { pipeline, finished } = require('node:stream/promises')
+const { readFile } = require('node:fs/promises')
 const AWS = require('aws-sdk')
 const packlist = require('npm-packlist')
 const tar = require('tar')

+ 1 - 1
examples/angular-example/e2e/protractor.conf.js

@@ -26,7 +26,7 @@ exports.config = {
   },
   onPrepare () {
     require('ts-node').register({
-      project: require('path').join(__dirname, './tsconfig.json'),
+      project: require('node:path').join(__dirname, './tsconfig.json'),
     })
     // eslint-disable-next-line no-undef
     jasmine.getEnv().addReporter(new SpecReporter({

+ 1 - 1
examples/angular-example/karma.conf.js

@@ -25,7 +25,7 @@ module.exports = function karma (config) {
       suppressAll: true, // removes the duplicated traces
     },
     coverageReporter: {
-      dir: require('path').join(__dirname, './coverage/angular-example'),
+      dir: require('node:path').join(__dirname, './coverage/angular-example'),
       subdir: '.',
       reporters: [
         { type: 'html' },

+ 2 - 2
examples/aws-companion/server.js

@@ -1,5 +1,5 @@
-const fs = require('fs')
-const path = require('path')
+const fs = require('node:fs')
+const path = require('node:path')
 const companion = require('../../packages/@uppy/companion')
 const app = require('express')()
 

+ 2 - 2
examples/digitalocean-spaces/server.js

@@ -1,5 +1,5 @@
-const fs = require('fs')
-const path = require('path')
+const fs = require('node:fs')
+const path = require('node:path')
 const budo = require('budo')
 const router = require('router')
 const companion = require('../../packages/@uppy/companion')

+ 1 - 1
examples/node-xhr/server.js

@@ -1,5 +1,5 @@
 const formidable = require('formidable')
-const http = require('http')
+const http = require('node:http')
 
 http.createServer((req, res) => {
   const headers = {

+ 1 - 1
examples/svelte-example/rollup.config.js

@@ -19,7 +19,7 @@ function serve () {
   return {
     writeBundle () {
       if (server) return
-      server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], {
+      server = require('node:child_process').spawn('npm', ['run', 'start', '--', '--dev'], {
         stdio: ['ignore', 'inherit', 'inherit'],
         shell: true,
       })

+ 1 - 1
examples/transloadit/main.js

@@ -1,4 +1,4 @@
-const { inspect } = require('util')
+const { inspect } = require('node:util')
 const robodog = require('@uppy/robodog')
 
 const TRANSLOADIT_KEY = '35c1aed03f5011e982b6afe82599b6a0'

+ 2 - 2
examples/transloadit/server.js

@@ -1,6 +1,6 @@
 /* eslint-disable compat/compat */
-const http = require('http')
-const qs = require('querystring')
+const http = require('node:http')
+const qs = require('node:querystring')
 const e = require('he').encode
 
 /**

+ 1 - 0
package.json

@@ -86,6 +86,7 @@
     "eslint-plugin-promise": "^5.1.1",
     "eslint-plugin-react": "^7.22.0",
     "eslint-plugin-react-hooks": "^4.2.0",
+    "eslint-plugin-unicorn": "^43.0.0",
     "events.once": "^2.0.2",
     "exorcist": "^2.0.0",
     "fakefile": "^1.0.0",

+ 1 - 1
packages/@uppy/companion/package.json

@@ -79,7 +79,7 @@
     "@types/lodash.merge": "4.6.6",
     "@types/morgan": "1.7.37",
     "@types/ms": "0.7.31",
-    "@types/node": "18.0.3",
+    "@types/node": "^18.0.3",
     "@types/react": "^17.0.13",
     "@types/request": "2.48.4",
     "@types/webpack": "^5.28.0",

+ 1 - 1
packages/@uppy/companion/src/config/companion.js

@@ -1,5 +1,5 @@
 const ms = require('ms')
-const fs = require('fs')
+const fs = require('node:fs')
 const { isURL } = require('validator')
 const logger = require('../server/logger')
 

+ 4 - 4
packages/@uppy/companion/src/server/Uploader.js

@@ -4,10 +4,10 @@ const { randomUUID } = require('node:crypto')
 const isObject = require('isobject')
 const validator = require('validator')
 const request = require('request')
-const { pipeline: pipelineCb } = require('stream')
-const { join } = require('path')
-const fs = require('fs')
-const { promisify } = require('util')
+const { pipeline: pipelineCb } = require('node:stream')
+const { join } = require('node:path')
+const fs = require('node:fs')
+const { promisify } = require('node:util')
 
 // TODO move to `require('streams/promises').pipeline` when dropping support for Node.js 14.x.
 const pipeline = promisify(pipelineCb)

+ 2 - 2
packages/@uppy/companion/src/server/controllers/oauth-redirect.js

@@ -1,5 +1,5 @@
-const qs = require('querystring')
-const { URL } = require('url')
+const qs = require('node:querystring')
+const { URL } = require('node:url')
 const { hasMatch } = require('../helpers/utils')
 const oAuthState = require('../helpers/oauth-state')
 

+ 1 - 1
packages/@uppy/companion/src/server/controllers/send-token.js

@@ -1,4 +1,4 @@
-const { URL } = require('url')
+const { URL } = require('node:url')
 const serialize = require('serialize-javascript')
 
 const tokenService = require('../helpers/jwt')

+ 1 - 1
packages/@uppy/companion/src/server/controllers/url.js

@@ -1,6 +1,6 @@
 const router = require('express').Router
 const request = require('request')
-const { URL } = require('url')
+const { URL } = require('node:url')
 const validator = require('validator')
 
 const { startDownUpload } = require('../helpers/upload')

+ 1 - 1
packages/@uppy/companion/src/server/emitter/default-emitter.js

@@ -1,4 +1,4 @@
-const { EventEmitter } = require('events')
+const { EventEmitter } = require('node:events')
 
 module.exports = () => {
   return new EventEmitter()

+ 1 - 1
packages/@uppy/companion/src/server/helpers/oauth-state.js

@@ -1,4 +1,4 @@
-const crypto = require('crypto')
+const crypto = require('node:crypto')
 // @ts-ignore
 const atob = require('atob')
 const { encrypt, decrypt } = require('./utils')

+ 4 - 4
packages/@uppy/companion/src/server/helpers/request.js

@@ -1,8 +1,8 @@
 // eslint-disable-next-line max-classes-per-file
-const http = require('http')
-const https = require('https')
-const { URL } = require('url')
-const dns = require('dns')
+const http = require('node:http')
+const https = require('node:https')
+const { URL } = require('node:url')
+const dns = require('node:dns')
 const request = require('request')
 const ipaddr = require('ipaddr.js')
 

+ 1 - 1
packages/@uppy/companion/src/server/helpers/utils.js

@@ -1,4 +1,4 @@
-const crypto = require('crypto')
+const crypto = require('node:crypto')
 
 /**
  *

+ 3 - 3
packages/@uppy/companion/src/server/jobs.js

@@ -1,7 +1,7 @@
 const schedule = require('node-schedule')
-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 request = require('request')
 
 const { FILE_NAME_PREFIX } = require('./Uploader')

+ 1 - 1
packages/@uppy/companion/src/server/logger.js

@@ -1,6 +1,6 @@
 const chalk = require('chalk')
 const escapeStringRegexp = require('escape-string-regexp')
-const util = require('util')
+const util = require('node:util')
 const { ProviderApiError, ProviderAuthError } = require('./provider/error')
 
 const valuesToMask = []

+ 1 - 1
packages/@uppy/companion/src/server/provider/box/adapter.js

@@ -1,5 +1,5 @@
 const mime = require('mime-types')
-const querystring = require('querystring')
+const querystring = require('node:querystring')
 
 exports.isFolder = (item) => {
   return item.type === 'folder'

+ 1 - 1
packages/@uppy/companion/src/server/provider/box/index.js

@@ -1,6 +1,6 @@
 const request = require('request')
 const purest = require('purest')({ request })
-const { promisify } = require('util')
+const { promisify } = require('node:util')
 
 const Provider = require('../Provider')
 const logger = require('../../logger')

+ 1 - 1
packages/@uppy/companion/src/server/provider/drive/adapter.js

@@ -1,4 +1,4 @@
-const querystring = require('querystring')
+const querystring = require('node:querystring')
 
 // @todo use the "about" endpoint to get the username instead
 // see: https://developers.google.com/drive/api/v2/reference/about/get

+ 1 - 1
packages/@uppy/companion/src/server/provider/drive/index.js

@@ -1,7 +1,7 @@
 /* eslint-disable no-underscore-dangle */
 const request = require('request')
 const purest = require('purest')({ request })
-const { promisify } = require('util')
+const { promisify } = require('node:util')
 
 const Provider = require('../Provider')
 const logger = require('../../logger')

+ 1 - 1
packages/@uppy/companion/src/server/provider/dropbox/adapter.js

@@ -1,5 +1,5 @@
 const mime = require('mime-types')
-const querystring = require('querystring')
+const querystring = require('node:querystring')
 
 exports.getUsername = (data) => {
   return data.user_email

+ 1 - 1
packages/@uppy/companion/src/server/provider/dropbox/index.js

@@ -1,6 +1,6 @@
 const request = require('request')
 const purest = require('purest')({ request })
-const { promisify } = require('util')
+const { promisify } = require('node:util')
 
 const Provider = require('../Provider')
 const logger = require('../../logger')

+ 1 - 1
packages/@uppy/companion/src/server/provider/facebook/adapter.js

@@ -1,4 +1,4 @@
-const querystring = require('querystring')
+const querystring = require('node:querystring')
 
 exports.isFolder = (item) => {
   return !!item.type

+ 1 - 1
packages/@uppy/companion/src/server/provider/facebook/index.js

@@ -1,6 +1,6 @@
 const request = require('request')
 const purest = require('purest')({ request })
-const { promisify } = require('util')
+const { promisify } = require('node:util')
 
 const Provider = require('../Provider')
 const { getURLMeta } = require('../../helpers/request')

+ 1 - 1
packages/@uppy/companion/src/server/provider/instagram/graph/adapter.js

@@ -1,4 +1,4 @@
-const querystring = require('querystring')
+const querystring = require('node:querystring')
 
 const MEDIA_TYPES = Object.freeze({
   video: 'VIDEO',

+ 1 - 1
packages/@uppy/companion/src/server/provider/instagram/graph/index.js

@@ -1,6 +1,6 @@
 const request = require('request')
 const purest = require('purest')({ request })
-const { promisify } = require('util')
+const { promisify } = require('node:util')
 
 const Provider = require('../../Provider')
 const { getURLMeta } = require('../../../helpers/request')

+ 1 - 1
packages/@uppy/companion/src/server/provider/onedrive/adapter.js

@@ -1,4 +1,4 @@
-const querystring = require('querystring')
+const querystring = require('node:querystring')
 
 exports.isFolder = (item) => {
   if (item.remoteItem) {

+ 1 - 1
packages/@uppy/companion/src/server/provider/onedrive/index.js

@@ -1,6 +1,6 @@
 const request = require('request')
 const purest = require('purest')({ request })
-const { promisify } = require('util')
+const { promisify } = require('node:util')
 
 const Provider = require('../Provider')
 const logger = require('../../logger')

+ 1 - 1
packages/@uppy/companion/src/server/provider/unsplash/adapter.js

@@ -1,4 +1,4 @@
-const querystring = require('querystring')
+const querystring = require('node:querystring')
 
 exports.isFolder = (item) => { // eslint-disable-line no-unused-vars
   return false

+ 1 - 1
packages/@uppy/companion/src/server/provider/unsplash/index.js

@@ -1,5 +1,5 @@
 const request = require('request')
-const { promisify } = require('util')
+const { promisify } = require('node:util')
 
 const SearchProvider = require('../SearchProvider')
 const { getURLMeta } = require('../../helpers/request')

+ 1 - 1
packages/@uppy/companion/src/server/provider/zoom/index.js

@@ -1,4 +1,4 @@
-const { promisify } = require('util')
+const { promisify } = require('node:util')
 const request = require('request')
 const moment = require('moment-timezone')
 const purest = require('purest')({ request })

+ 2 - 2
packages/@uppy/companion/src/standalone/helper.js

@@ -1,7 +1,7 @@
-const fs = require('fs')
+const fs = require('node:fs')
 const merge = require('lodash.merge')
 const stripIndent = require('common-tags/lib/stripIndent')
-const crypto = require('crypto')
+const crypto = require('node:crypto')
 
 const utils = require('../server/helpers/utils')
 const logger = require('../server/logger')

+ 2 - 2
packages/@uppy/companion/src/standalone/index.js

@@ -1,9 +1,9 @@
 const express = require('express')
-const qs = require('querystring')
+const qs = require('node:querystring')
 const helmet = require('helmet')
 const morgan = require('morgan')
 const bodyParser = require('body-parser')
-const { URL } = require('url')
+const { URL } = require('node:url')
 const session = require('express-session')
 const addRequestId = require('express-request-id')()
 const connectRedis = require('connect-redis')

+ 2 - 2
packages/@uppy/companion/test/__mocks__/purest.js

@@ -1,5 +1,5 @@
-const fs = require('fs')
-const qs = require('querystring')
+const fs = require('node:fs')
+const qs = require('node:querystring')
 
 const fixtures = require('../fixtures').providers
 

+ 2 - 2
packages/@uppy/companion/test/__tests__/http-agent.js

@@ -1,8 +1,8 @@
 /* global test:false, expect:false, describe:false, */
 
 const request = require('request')
-const http = require('http')
-const https = require('https')
+const http = require('node:http')
+const https = require('node:https')
 const { getProtectedHttpAgent, getRedirectEvaluator, FORBIDDEN_IP_ADDRESS } = require('../../src/server/helpers/request')
 
 describe('test getRedirectEvaluator', () => {

+ 1 - 1
packages/@uppy/companion/test/__tests__/uploader.js

@@ -3,7 +3,7 @@
 jest.mock('tus-js-client')
 
 const intoStream = require('into-stream')
-const fs = require('fs')
+const fs = require('node:fs')
 const nock = require('nock')
 
 const Uploader = require('../../src/server/Uploader')

+ 1 - 1
website/build-examples.js

@@ -23,7 +23,7 @@
 
 const { glob } = require('multi-glob')
 const chalk = require('chalk')
-const path = require('path')
+const path = require('node:path')
 const notifier = require('node-notifier')
 
 const esbuild = require('esbuild')

+ 4 - 4
website/inject.js

@@ -1,8 +1,8 @@
-const fs = require('fs')
-const path = require('path')
+const fs = require('node:fs')
+const path = require('node:path')
 const chalk = require('chalk')
-const { spawn } = require('child_process')
-const readline = require('readline')
+const { spawn } = require('node:child_process')
+const readline = require('node:readline')
 const YAML = require('js-yaml')
 const gzipSize = require('gzip-size')
 const prettierBytes = require('@transloadit/prettier-bytes')

+ 3 - 3
website/private_modules/hexo-renderer-uppyexamples/index.js

@@ -2,9 +2,9 @@
 // We fire our own build-examples.js and tell it which example to build -
 // that script then writes temporary js files
 // which we return via the callback.
-const { exec } = require('child_process')
-const path = require('path')
-const fs = require('fs')
+const { exec } = require('node:child_process')
+const path = require('node:path')
+const fs = require('node:fs')
 const uuid = require('uuid')
 
 const webRoot = path.dirname(path.dirname(__dirname))

+ 2 - 2
website/scripts/highlight.js

@@ -1,7 +1,7 @@
 const Prism = require('prismjs')
 const entities = require('he')
-const { readFile } = require('fs/promises')
-const path = require('path')
+const { readFile } = require('node:fs/promises')
+const path = require('node:path')
 
 // oof
 // I think this is the way to add Prism components that it doesn't include

+ 106 - 27
yarn.lock

@@ -1395,6 +1395,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@babel/helper-validator-identifier@npm:^7.18.6":
+  version: 7.18.6
+  resolution: "@babel/helper-validator-identifier@npm:7.18.6"
+  checksum: e295254d616bbe26e48c196a198476ab4d42a73b90478c9842536cf910ead887f5af6b5c4df544d3052a25ccb3614866fa808dc1e3a5a4291acd444e243c0648
+  languageName: node
+  linkType: hard
+
 "@babel/helper-validator-option@npm:^7.12.17, @babel/helper-validator-option@npm:^7.14.5":
   version: 7.14.5
   resolution: "@babel/helper-validator-option@npm:7.14.5"
@@ -8835,45 +8842,31 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/node@npm:*, @types/node@npm:>= 8, @types/node@npm:>=10.0.0, @types/node@npm:^16.0.0":
-  version: 16.11.12
-  resolution: "@types/node@npm:16.11.12"
-  checksum: a3feb346d61a56f5a137c29bb8c63cfa3cc02e184b9dffdc18ef1528dcce55596e570575215a2e39e6ce69343eeb2a5ba71c271938f1dc8db4cc393902855412
-  languageName: node
-  linkType: hard
-
-"@types/node@npm:18.0.3":
+"@types/node@npm:*, @types/node@npm:>= 8, @types/node@npm:>=10.0.0, @types/node@npm:^18.0.3":
   version: 18.0.3
   resolution: "@types/node@npm:18.0.3"
   checksum: 5dec59fbbc1186c808b53df1ca717dad034dbd6a901c75f5b052c845618b531b05f27217122c6254db99529a68618e4cfc534ae3dbf4e88754e9e572df80defa
   languageName: node
   linkType: hard
 
-"@types/node@npm:^12.11.1":
-  version: 12.20.37
-  resolution: "@types/node@npm:12.20.37"
-  checksum: 8c8b12f802678b3b87c5344b6c84082be08561dda81dc161d42be8cd327330d1a5227cef039c45a5e63a6d4a01ef5ef215dccc42d06100f59f6a8814b4f91cdd
-  languageName: node
-  linkType: hard
-
-"@types/node@npm:^12.20.15":
-  version: 12.20.42
-  resolution: "@types/node@npm:12.20.42"
-  checksum: 395b561315cffbffb57bedbdf69cf575cea6439b1f25307062356d8a1c21c0d07bc4483f480470030cd22ea1de35b909642bde52b309d9bd72ddeb3e1fecc64f
+"@types/node@npm:^12.11.1, @types/node@npm:^12.20.15":
+  version: 12.20.55
+  resolution: "@types/node@npm:12.20.55"
+  checksum: e4f86785f4092706e0d3b0edff8dca5a13b45627e4b36700acd8dfe6ad53db71928c8dee914d4276c7fd3b6ccd829aa919811c9eb708a2c8e4c6eb3701178c37
   languageName: node
   linkType: hard
 
-"@types/node@npm:^14.0.10 || ^16.0.0, @types/node@npm:^14.14.20 || ^16.0.0":
-  version: 16.11.26
-  resolution: "@types/node@npm:16.11.26"
-  checksum: 57757caaba3f0d95de82198cb276a1002c49b710108c932a1d02d7c91ff2fa57cfe2dd19fde60853b6dd90b0964b3cf35557981d2628e20aed6a909057aedfe6
+"@types/node@npm:^14.0.10 || ^16.0.0, @types/node@npm:^14.14.20 || ^16.0.0, @types/node@npm:^16.0.0":
+  version: 16.11.43
+  resolution: "@types/node@npm:16.11.43"
+  checksum: 96d09e68347c49ebf84fe1443360edc3f98336f0794256abc8e4f29ef3070546357cae17083d6fd9767b631239367c4f245fe64accff4af057d17bd6694f0b2b
   languageName: node
   linkType: hard
 
 "@types/node@npm:^14.14.31":
-  version: 14.18.10
-  resolution: "@types/node@npm:14.18.10"
-  checksum: e722eec37be85dd7dddc4cfd26c501c66f1f2a7e0f603f57ff925348e65a5db603b06363fa27489cbecff44f0ae59812f22509923c4c45ffa5958604cc002401
+  version: 14.18.21
+  resolution: "@types/node@npm:14.18.21"
+  checksum: 4ed35b76609647a4e36a194702e31cdda9ed42174ddaf7937bc5498984e98a99e8a42ea895ea17dd9c5ec18080112c29ab670c34f90eb9f7a4703b85b31e34fa
   languageName: node
   linkType: hard
 
@@ -9494,6 +9487,7 @@ __metadata:
     eslint-plugin-promise: ^5.1.1
     eslint-plugin-react: ^7.22.0
     eslint-plugin-react-hooks: ^4.2.0
+    eslint-plugin-unicorn: ^43.0.0
     events.once: ^2.0.2
     exorcist: ^2.0.0
     fakefile: ^1.0.0
@@ -10026,7 +10020,7 @@ __metadata:
     "@types/lodash.merge": 4.6.6
     "@types/morgan": 1.7.37
     "@types/ms": 0.7.31
-    "@types/node": 18.0.3
+    "@types/node": ^18.0.3
     "@types/react": ^17.0.13
     "@types/request": 2.48.4
     "@types/webpack": ^5.28.0
@@ -14102,6 +14096,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"builtin-modules@npm:^3.0.0":
+  version: 3.3.0
+  resolution: "builtin-modules@npm:3.3.0"
+  checksum: db021755d7ed8be048f25668fe2117620861ef6703ea2c65ed2779c9e3636d5c3b82325bd912244293959ff3ae303afa3471f6a15bf5060c103e4cc3a839749d
+  languageName: node
+  linkType: hard
+
 "builtin-modules@npm:^3.1.0":
   version: 3.2.0
   resolution: "builtin-modules@npm:3.2.0"
@@ -14770,6 +14771,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"ci-info@npm:^3.3.2":
+  version: 3.3.2
+  resolution: "ci-info@npm:3.3.2"
+  checksum: fd81f1edd2d3b0f6cb077b2e84365136d87b9db8c055928c1ad69da8a76c2c2f19cba8ea51b90238302157ca927f91f92b653e933f2398dde4867500f08d6e62
+  languageName: node
+  linkType: hard
+
 "ci-job-number@npm:^1.2.2":
   version: 1.2.2
   resolution: "ci-job-number@npm:1.2.2"
@@ -14840,6 +14848,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"clean-regexp@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "clean-regexp@npm:1.0.0"
+  dependencies:
+    escape-string-regexp: ^1.0.5
+  checksum: 0b1ce281b07da2463c6882ea2e8409119b6cabbd9f687cdbdcee942c45b2b9049a2084f7b5f228c63ef9f21e722963ae0bfe56a735dbdbdd92512867625a7e40
+  languageName: node
+  linkType: hard
+
 "clean-stack@npm:^2.0.0":
   version: 2.2.0
   resolution: "clean-stack@npm:2.2.0"
@@ -19079,6 +19096,30 @@ __metadata:
   languageName: node
   linkType: hard
 
+"eslint-plugin-unicorn@npm:^43.0.0":
+  version: 43.0.0
+  resolution: "eslint-plugin-unicorn@npm:43.0.0"
+  dependencies:
+    "@babel/helper-validator-identifier": ^7.18.6
+    ci-info: ^3.3.2
+    clean-regexp: ^1.0.0
+    eslint-utils: ^3.0.0
+    esquery: ^1.4.0
+    indent-string: ^4.0.0
+    is-builtin-module: ^3.1.0
+    lodash: ^4.17.21
+    pluralize: ^8.0.0
+    read-pkg-up: ^7.0.1
+    regexp-tree: ^0.1.24
+    safe-regex: ^2.1.1
+    semver: ^7.3.7
+    strip-indent: ^3.0.0
+  peerDependencies:
+    eslint: ">=8.18.0"
+  checksum: 5e9da1a37922483f8e945878d870bcc617b2c6a5fd3d1a453ccc327c33a0f56206968bc702dc08b3e3098b9ae0b13a55842c8516f79509bc212eba7256f57438
+  languageName: node
+  linkType: hard
+
 "eslint-rule-composer@npm:^0.3.0":
   version: 0.3.0
   resolution: "eslint-rule-composer@npm:0.3.0"
@@ -23366,6 +23407,15 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis:
   languageName: node
   linkType: hard
 
+"is-builtin-module@npm:^3.1.0":
+  version: 3.1.0
+  resolution: "is-builtin-module@npm:3.1.0"
+  dependencies:
+    builtin-modules: ^3.0.0
+  checksum: f1e5dd2cd5f252d4d799b20a0c8c4f7e9c399c4d141749af76ca0121058d4062c3015d026f1b1409dd3d2a4ddfb9b15cf6eb9c370fed53fea8652ce35b5e95cb
+  languageName: node
+  linkType: hard
+
 "is-callable@npm:^1.1.4, is-callable@npm:^1.2.4":
   version: 1.2.4
   resolution: "is-callable@npm:1.2.4"
@@ -33607,6 +33657,15 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis:
   languageName: node
   linkType: hard
 
+"regexp-tree@npm:^0.1.24, regexp-tree@npm:~0.1.1":
+  version: 0.1.24
+  resolution: "regexp-tree@npm:0.1.24"
+  bin:
+    regexp-tree: bin/regexp-tree
+  checksum: 5807013289d9205288d665e0f8d8cff94843dfd55fdedd1833eb9d9bbd07188a37dfa02942ec5cdc671180037f715148fac1ba6f18fd6be4268e5a8feb49d340
+  languageName: node
+  linkType: hard
+
 "regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.3.1":
   version: 1.3.1
   resolution: "regexp.prototype.flags@npm:1.3.1"
@@ -35129,6 +35188,15 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis:
   languageName: node
   linkType: hard
 
+"safe-regex@npm:^2.1.1":
+  version: 2.1.1
+  resolution: "safe-regex@npm:2.1.1"
+  dependencies:
+    regexp-tree: ~0.1.1
+  checksum: 5d734e2193c63ef0cb00f60c0244e0f8a30ecb31923633cd34636808d6a7c4c206d650017953ae1db8bc33967c2f06af33488dea6f038f4e38212beb7bed77b4
+  languageName: node
+  linkType: hard
+
 "safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:^2.1.2, safer-buffer@npm:~2.1.0":
   version: 2.1.2
   resolution: "safer-buffer@npm:2.1.2"
@@ -35470,6 +35538,17 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis:
   languageName: node
   linkType: hard
 
+"semver@npm:^7.3.7":
+  version: 7.3.7
+  resolution: "semver@npm:7.3.7"
+  dependencies:
+    lru-cache: ^6.0.0
+  bin:
+    semver: bin/semver.js
+  checksum: 2fa3e877568cd6ce769c75c211beaed1f9fce80b28338cadd9d0b6c40f2e2862bafd62c19a6cff42f3d54292b7c623277bcab8816a2b5521cf15210d43e75232
+  languageName: node
+  linkType: hard
+
 "send@npm:0.16.2":
   version: 0.16.2
   resolution: "send@npm:0.16.2"