Browse Source

Update dependencies

Chocobozzz 4 years ago
parent
commit
bdd428a6d9

+ 2 - 0
.eslintrc.json

@@ -63,11 +63,13 @@
         "allowNumber": "true"
       }
     ],
+
     "@typescript-eslint/quotes": "off",
     "@typescript-eslint/no-var-requires": "off",
     "@typescript-eslint/explicit-function-return-type": "off",
     "@typescript-eslint/promise-function-async": "off",
     "@typescript-eslint/no-dynamic-delete": "off",
+    "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off",
     "@typescript-eslint/strict-boolean-expressions": "off",
     "@typescript-eslint/consistent-type-definitions": "off",
     "@typescript-eslint/no-misused-promises": "off",

+ 9 - 9
package.json

@@ -82,7 +82,7 @@
     "apicache": "^1.4.0",
     "async": "^3.0.1",
     "async-lru": "^1.1.1",
-    "bcrypt": "3.0.7",
+    "bcrypt": "4.0.0",
     "bittorrent-tracker": "^9.0.0",
     "bluebird": "^3.5.0",
     "body-parser": "^1.12.4",
@@ -102,7 +102,7 @@
     "fluent-ffmpeg": "^2.1.0",
     "fs-extra": "^8.0.1",
     "helmet": "^3.12.1",
-    "http-signature": "1.3.1",
+    "http-signature": "1.3.2",
     "ip-anonymize": "^0.1.0",
     "ipaddr.js": "1.9.1",
     "is-cidr": "^3.0.0",
@@ -122,11 +122,11 @@
     "pfeed": "1.1.11",
     "pg": "^7.4.1",
     "prompt": "^1.0.0",
-    "redis": "^2.8.0",
+    "redis": "^3.0.2",
     "reflect-metadata": "^0.1.12",
     "request": "^2.81.0",
     "scripty": "^1.5.0",
-    "sequelize": "5.21.3",
+    "sequelize": "5.21.5",
     "sequelize-typescript": "^1.0.0-beta.4",
     "sharp": "^0.24.0",
     "sitemap": "^5.0.0",
@@ -134,7 +134,7 @@
     "srt-to-vtt": "^1.1.2",
     "tsconfig-paths": "^3.9.0",
     "useragent": "^2.3.0",
-    "uuid": "^3.1.0",
+    "uuid": "^7.0.1",
     "validator": "^12.1.0",
     "webfinger.js": "^2.6.6",
     "webtorrent": "^0.107.16",
@@ -150,14 +150,14 @@
     "@types/bcrypt": "^3.0.0",
     "@types/bluebird": "3.5.29",
     "@types/body-parser": "^1.16.3",
-    "@types/bull": "3.12.0",
+    "@types/bull": "3.12.1",
     "@types/bytes": "^3.0.0",
     "@types/chai": "^4.0.4",
     "@types/chai-json-schema": "^1.4.3",
     "@types/chai-xml": "^0.3.1",
     "@types/config": "^0.0.36",
     "@types/express": "^4.0.35",
-    "@types/express-rate-limit": "^3.3.0",
+    "@types/express-rate-limit": "^5.0.0",
     "@types/fluent-ffmpeg": "^2.1.8",
     "@types/fs-extra": "^8.0.0",
     "@types/libxmljs": "^0.18.0",
@@ -166,7 +166,7 @@
     "@types/magnet-uri": "^5.1.1",
     "@types/maildev": "^0.0.1",
     "@types/memoizee": "^0.4.2",
-    "@types/mkdirp": "^0.5.1",
+    "@types/mkdirp": "^1.0.0",
     "@types/mocha": "^7.0.1",
     "@types/morgan": "^1.7.32",
     "@types/multer": "^1.3.3",
@@ -188,7 +188,7 @@
     "chai-xml": "^0.3.2",
     "concurrently": "^5.0.0",
     "eslint": "^6.8.0",
-    "eslint-config-standard-with-typescript": "^12.0.1",
+    "eslint-config-standard-with-typescript": "^14.0.0",
     "eslint-plugin-import": "^2.20.1",
     "eslint-plugin-node": "^11.0.0",
     "eslint-plugin-promise": "^4.2.1",

+ 2 - 2
server/controllers/activitypub/inbox.ts

@@ -56,9 +56,9 @@ function inboxController (req: express.Request, res: express.Response) {
   const rootActivity: RootActivity = req.body
   let activities: Activity[]
 
-  if ([ 'Collection', 'CollectionPage' ].indexOf(rootActivity.type) !== -1) {
+  if ([ 'Collection', 'CollectionPage' ].includes(rootActivity.type)) {
     activities = (rootActivity as ActivityPubCollection).items
-  } else if ([ 'OrderedCollection', 'OrderedCollectionPage' ].indexOf(rootActivity.type) !== -1) {
+  } else if ([ 'OrderedCollection', 'OrderedCollectionPage' ].includes(rootActivity.type)) {
     activities = (rootActivity as ActivityPubOrderedCollection<Activity>).orderedItems
   } else {
     activities = [ rootActivity as Activity ]

+ 1 - 1
server/controllers/api/search.ts

@@ -60,7 +60,7 @@ function searchVideoChannels (req: express.Request, res: express.Response) {
 
   // Handle strings like @toto@example.com
   if (parts.length === 3 && parts[0].length === 0) parts.shift()
-  const isWebfingerSearch = parts.length === 2 && parts.every(p => p && p.indexOf(' ') === -1)
+  const isWebfingerSearch = parts.length === 2 && parts.every(p => p && !p.includes(' '))
 
   if (isURISearch || isWebfingerSearch) return searchVideoChannelURI(search, isWebfingerSearch, res)
 

+ 1 - 1
server/controllers/client.ts

@@ -76,7 +76,7 @@ function serveServerTranslations (req: express.Request, res: express.Response) {
   const locale = req.params.locale
   const file = req.params.file
 
-  if (is18nLocale(locale) && LOCALE_FILES.indexOf(file) !== -1) {
+  if (is18nLocale(locale) && LOCALE_FILES.includes(file)) {
     const completeLocale = getCompleteLocale(locale)
     const completeFileLocale = buildFileLocale(completeLocale)
 

+ 2 - 2
server/helpers/custom-validators/activitypub/actor.ts

@@ -28,7 +28,7 @@ function isActorPublicKeyValid (publicKey: string) {
   return exists(publicKey) &&
     typeof publicKey === 'string' &&
     publicKey.startsWith('-----BEGIN PUBLIC KEY-----') &&
-    publicKey.indexOf('-----END PUBLIC KEY-----') !== -1 &&
+    publicKey.includes('-----END PUBLIC KEY-----') &&
     validator.isLength(publicKey, CONSTRAINTS_FIELDS.ACTORS.PUBLIC_KEY)
 }
 
@@ -43,7 +43,7 @@ function isActorPrivateKeyValid (privateKey: string) {
     typeof privateKey === 'string' &&
     privateKey.startsWith('-----BEGIN RSA PRIVATE KEY-----') &&
     // Sometimes there is a \n at the end, so just assert the string contains the end mark
-    privateKey.indexOf('-----END RSA PRIVATE KEY-----') !== -1 &&
+    privateKey.includes('-----END RSA PRIVATE KEY-----') &&
     validator.isLength(privateKey, CONSTRAINTS_FIELDS.ACTORS.PRIVATE_KEY)
 }
 

+ 3 - 3
server/helpers/custom-validators/activitypub/videos.ts

@@ -84,19 +84,19 @@ function sanitizeAndCheckVideoTorrentObject (video: any) {
 function isRemoteVideoUrlValid (url: any) {
   return url.type === 'Link' &&
     (
-      ACTIVITY_PUB.URL_MIME_TYPES.VIDEO.indexOf(url.mediaType) !== -1 &&
+      ACTIVITY_PUB.URL_MIME_TYPES.VIDEO.includes(url.mediaType) &&
       isActivityPubUrlValid(url.href) &&
       validator.isInt(url.height + '', { min: 0 }) &&
       validator.isInt(url.size + '', { min: 0 }) &&
       (!url.fps || validator.isInt(url.fps + '', { min: -1 }))
     ) ||
     (
-      ACTIVITY_PUB.URL_MIME_TYPES.TORRENT.indexOf(url.mediaType) !== -1 &&
+      ACTIVITY_PUB.URL_MIME_TYPES.TORRENT.includes(url.mediaType) &&
       isActivityPubUrlValid(url.href) &&
       validator.isInt(url.height + '', { min: 0 })
     ) ||
     (
-      ACTIVITY_PUB.URL_MIME_TYPES.MAGNET.indexOf(url.mediaType) !== -1 &&
+      ACTIVITY_PUB.URL_MIME_TYPES.MAGNET.includes(url.mediaType) &&
       validator.isLength(url.href, { min: 5 }) &&
       validator.isInt(url.height + '', { min: 0 })
     ) ||

+ 1 - 1
server/helpers/custom-validators/feeds.ts

@@ -13,7 +13,7 @@ function isValidRSSFeed (value: string) {
     'atom1'
   ]
 
-  return feedExtensions.indexOf(value) !== -1
+  return feedExtensions.includes(value)
 }
 
 // ---------------------------------------------------------------------------

+ 1 - 1
server/helpers/custom-validators/logs.ts

@@ -4,7 +4,7 @@ import { LogLevel } from '../../../shared/models/server/log-level.type'
 const logLevels: LogLevel[] = [ 'debug', 'info', 'warn', 'error' ]
 
 function isValidLogLevel (value: any) {
-  return exists(value) && logLevels.indexOf(value) !== -1
+  return exists(value) && logLevels.includes(value)
 }
 
 // ---------------------------------------------------------------------------

+ 1 - 1
server/helpers/custom-validators/users.ts

@@ -46,7 +46,7 @@ function isUserEmailVerifiedValid (value: any) {
 
 const nsfwPolicies = values(NSFW_POLICY_TYPES)
 function isUserNSFWPolicyValid (value: any) {
-  return exists(value) && nsfwPolicies.indexOf(value) !== -1
+  return exists(value) && nsfwPolicies.includes(value)
 }
 
 function isUserWebTorrentEnabledValid (value: any) {

+ 1 - 1
server/helpers/custom-validators/videos.ts

@@ -73,7 +73,7 @@ function isVideoViewsValid (value: string) {
 }
 
 function isVideoRatingTypeValid (value: string) {
-  return value === 'none' || values(VIDEO_RATE_TYPES).indexOf(value as VideoRateType) !== -1
+  return value === 'none' || values(VIDEO_RATE_TYPES).includes(value as VideoRateType)
 }
 
 function isVideoFileExtnameValid (value: string) {

+ 1 - 1
server/helpers/youtube-dl.ts

@@ -257,7 +257,7 @@ function getTags (tags: any) {
 function getLicence (licence: string) {
   if (!licence) return undefined
 
-  if (licence.indexOf('Creative Commons Attribution') !== -1) return 1
+  if (licence.includes('Creative Commons Attribution')) return 1
 
   return undefined
 }

+ 2 - 2
server/initializers/checker-after-init.ts

@@ -54,7 +54,7 @@ function checkConfig () {
   const defaultNSFWPolicy = CONFIG.INSTANCE.DEFAULT_NSFW_POLICY
   {
     const available = [ 'do_not_list', 'blur', 'display' ]
-    if (available.indexOf(defaultNSFWPolicy) === -1) {
+    if (available.includes(defaultNSFWPolicy) === false) {
       return 'NSFW policy setting should be ' + available.join(' or ') + ' instead of ' + defaultNSFWPolicy
     }
   }
@@ -64,7 +64,7 @@ function checkConfig () {
   if (isArray(redundancyVideos)) {
     const available = [ 'most-views', 'trending', 'recently-added' ]
     for (const r of redundancyVideos) {
-      if (available.indexOf(r.strategy) === -1) {
+      if (available.includes(r.strategy) === false) {
         return 'Videos redundancy should have ' + available.join(' or ') + ' strategy instead of ' + r.strategy
       }
 

+ 1 - 1
server/initializers/config.ts

@@ -335,7 +335,7 @@ export function reloadConfig () {
 
   function purge () {
     for (const fileName in require.cache) {
-      if (fileName.indexOf(directory()) === -1) {
+      if (fileName.includes(directory()) === false) {
         continue
       }
 

+ 1 - 1
server/initializers/migrations/0080-video-channels.ts

@@ -1,5 +1,5 @@
 import * as Sequelize from 'sequelize'
-import * as uuidv4 from 'uuid/v4'
+import { v4 as uuidv4 } from 'uuid'
 
 async function up (utils: {
   transaction: Sequelize.Transaction

+ 1 - 1
server/initializers/migrations/0345-video-playlists.ts

@@ -1,6 +1,6 @@
 import * as Sequelize from 'sequelize'
 import { VideoPlaylistPrivacy, VideoPlaylistType } from '../../../shared/models/videos'
-import * as uuidv4 from 'uuid/v4'
+import { v4 as uuidv4 } from 'uuid'
 import { WEBSERVER } from '../constants'
 
 async function up (utils: {

+ 3 - 3
server/lib/activitypub/actor.ts

@@ -1,8 +1,8 @@
 import * as Bluebird from 'bluebird'
 import { Transaction } from 'sequelize'
 import { URL } from 'url'
-import * as uuidv4 from 'uuid/v4'
-import { ActivityPubActor, ActivityPubActorType } from '../../../shared/models/activitypub'
+import { v4 as uuidv4 } from 'uuid'
+import { ActivityPubActor, ActivityPubActorType, ActivityPubOrderedCollection } from '../../../shared/models/activitypub'
 import { ActivityPubAttributedTo } from '../../../shared/models/activitypub/objects'
 import { checkUrlsSameHost, getAPId } from '../../helpers/activitypub'
 import { sanitizeAndCheckActorObject } from '../../helpers/custom-validators/activitypub/actor'
@@ -207,7 +207,7 @@ async function fetchActorTotalItems (url: string) {
   }
 
   try {
-    const { body } = await doRequest(options)
+    const { body } = await doRequest<ActivityPubOrderedCollection<unknown>>(options)
     return body.totalItems ? body.totalItems : 0
   } catch (err) {
     logger.warn('Cannot fetch remote actor count %s.', url, { err })

+ 4 - 2
server/lib/activitypub/playlist.ts

@@ -20,7 +20,9 @@ import { MAccountDefault, MAccountId, MVideoId } from '../../typings/models'
 import { MVideoPlaylist, MVideoPlaylistId, MVideoPlaylistOwner } from '../../typings/models/video/video-playlist'
 
 function playlistObjectToDBAttributes (playlistObject: PlaylistObject, byAccount: MAccountId, to: string[]) {
-  const privacy = to.indexOf(ACTIVITY_PUB.PUBLIC) !== -1 ? VideoPlaylistPrivacy.PUBLIC : VideoPlaylistPrivacy.UNLISTED
+  const privacy = to.includes(ACTIVITY_PUB.PUBLIC)
+    ? VideoPlaylistPrivacy.PUBLIC
+    : VideoPlaylistPrivacy.UNLISTED
 
   return {
     name: playlistObject.name,
@@ -205,7 +207,7 @@ async function fetchRemoteVideoPlaylist (playlistUrl: string): Promise<{ statusC
 
   logger.info('Fetching remote playlist %s.', playlistUrl)
 
-  const { response, body } = await doRequest(options)
+  const { response, body } = await doRequest<any>(options)
 
   if (isPlaylistObjectValid(body) === false || checkUrlsSameHost(body.id, playlistUrl) !== true) {
     logger.debug('Remote video playlist JSON is not valid.', { body })

+ 3 - 3
server/lib/activitypub/send/utils.ts

@@ -44,7 +44,7 @@ async function sendVideoRelatedActivity (activityBuilder: (audience: ActivityAud
 async function forwardVideoRelatedActivity (
   activity: Activity,
   t: Transaction,
-  followersException: MActorWithInboxes[] = [],
+  followersException: MActorWithInboxes[],
   video: MVideoId
 ) {
   // Mastodon does not add our announces in audience, so we forward to them manually
@@ -161,7 +161,7 @@ async function computeFollowerUris (toFollowersOf: MActorId[], actorsException:
   const result = await ActorFollowModel.listAcceptedFollowerSharedInboxUrls(toActorFollowerIds, t)
   const sharedInboxesException = await buildSharedInboxesException(actorsException)
 
-  return result.data.filter(sharedInbox => sharedInboxesException.indexOf(sharedInbox) === -1)
+  return result.data.filter(sharedInbox => sharedInboxesException.includes(sharedInbox) === false)
 }
 
 async function computeUris (toActors: MActor[], actorsException: MActorWithInboxes[] = []) {
@@ -174,7 +174,7 @@ async function computeUris (toActors: MActor[], actorsException: MActorWithInbox
 
   const sharedInboxesException = await buildSharedInboxesException(actorsException)
   return Array.from(toActorSharedInboxesSet)
-              .filter(sharedInbox => sharedInboxesException.indexOf(sharedInbox) === -1)
+              .filter(sharedInbox => sharedInboxesException.includes(sharedInbox) === false)
 }
 
 async function buildSharedInboxesException (actorsException: MActorWithInboxes[]) {

+ 7 - 5
server/lib/activitypub/videos.ts

@@ -111,7 +111,7 @@ async function fetchRemoteVideo (videoUrl: string): Promise<{ response: request.
 
   logger.info('Fetching remote video %s.', videoUrl)
 
-  const { response, body } = await doRequest(options)
+  const { response, body } = await doRequest<any>(options)
 
   if (sanitizeAndCheckVideoTorrentObject(body) === false || checkUrlsSameHost(body.id, videoUrl) !== true) {
     logger.debug('Remote video JSON is not valid.', { body })
@@ -129,7 +129,7 @@ async function fetchRemoteVideoDescription (video: MVideoAccountLight) {
     json: true
   }
 
-  const { body } = await doRequest(options)
+  const { body } = await doRequest<any>(options)
   return body.description ? body.description : ''
 }
 
@@ -507,7 +507,7 @@ function isAPVideoUrlObject (url: any): url is ActivityVideoUrlObject {
   const mimeTypes = Object.keys(MIMETYPES.VIDEO.MIMETYPE_EXT)
 
   const urlMediaType = url.mediaType
-  return mimeTypes.indexOf(urlMediaType) !== -1 && urlMediaType.startsWith('video/')
+  return mimeTypes.includes(urlMediaType) && urlMediaType.startsWith('video/')
 }
 
 function isAPStreamingPlaylistUrlObject (url: ActivityUrlObject): url is ActivityPlaylistUrlObject {
@@ -623,9 +623,11 @@ async function createVideo (videoObject: VideoTorrentObject, channel: MChannelAc
 }
 
 function videoActivityObjectToDBAttributes (videoChannel: MChannelId, videoObject: VideoTorrentObject, to: string[] = []) {
-  const privacy = to.indexOf(ACTIVITY_PUB.PUBLIC) !== -1 ? VideoPrivacy.PUBLIC : VideoPrivacy.UNLISTED
-  const duration = videoObject.duration.replace(/[^\d]+/, '')
+  const privacy = to.includes(ACTIVITY_PUB.PUBLIC)
+    ? VideoPrivacy.PUBLIC
+    : VideoPrivacy.UNLISTED
 
+  const duration = videoObject.duration.replace(/[^\d]+/, '')
   const language = videoObject.language?.identifier
 
   const category = videoObject.category

+ 1 - 1
server/lib/avatar.ts

@@ -5,7 +5,7 @@ import { updateActorAvatarInstance } from './activitypub'
 import { processImage } from '../helpers/image-utils'
 import { extname, join } from 'path'
 import { retryTransactionWrapper } from '../helpers/database-utils'
-import * as uuidv4 from 'uuid/v4'
+import { v4 as uuidv4 } from 'uuid'
 import { CONFIG } from '../initializers/config'
 import { sequelizeTypescript } from '../initializers/database'
 import * as LRUCache from 'lru-cache'

+ 1 - 1
server/lib/user.ts

@@ -1,4 +1,4 @@
-import * as uuidv4 from 'uuid/v4'
+import { v4 as uuidv4 } from 'uuid'
 import { ActivityPubActorType } from '../../shared/models/activitypub'
 import { SERVER_ACTOR_NAME, WEBSERVER } from '../initializers/constants'
 import { AccountModel } from '../models/account/account'

+ 1 - 1
server/lib/video-channel.ts

@@ -1,5 +1,5 @@
 import * as Sequelize from 'sequelize'
-import * as uuidv4 from 'uuid/v4'
+import { v4 as uuidv4 } from 'uuid'
 import { VideoChannelCreate } from '../../shared/models'
 import { VideoChannelModel } from '../models/video/video-channel'
 import { buildActorInstance, federateVideoIfNeeded, getVideoChannelActivityPubUrl } from './activitypub'

+ 1 - 1
server/middlewares/activitypub.ts

@@ -38,7 +38,7 @@ async function checkSignature (req: Request, res: Response, next: NextFunction)
 
 function executeIfActivityPub (req: Request, res: Response, next: NextFunction) {
   const accepted = req.accepts(ACCEPT_HEADERS)
-  if (accepted === false || ACTIVITY_PUB.POTENTIAL_ACCEPT_HEADERS.indexOf(accepted) === -1) {
+  if (accepted === false || ACTIVITY_PUB.POTENTIAL_ACCEPT_HEADERS.includes(accepted) === false) {
     // Bypass this route
     return next('route')
   }

+ 1 - 1
server/tests/api/notifications/user-notifications.ts

@@ -63,7 +63,7 @@ import { addUserSubscription, removeUserSubscription } from '../../../../shared/
 import { VideoPrivacy } from '../../../../shared/models/videos'
 import { getBadVideoUrl, getYoutubeVideoUrl, importVideo } from '../../../../shared/extra-utils/videos/video-imports'
 import { addVideoCommentReply, addVideoCommentThread } from '../../../../shared/extra-utils/videos/video-comments'
-import * as uuidv4 from 'uuid/v4'
+import { v4 as uuidv4 } from 'uuid'
 import { addAccountToAccountBlocklist, removeAccountFromAccountBlocklist } from '../../../../shared/extra-utils/users/blocklist'
 import { CustomConfig } from '../../../../shared/models/server'
 import { VideoCommentThreadTree } from '../../../../shared/models/videos/video-comment.model'

+ 3 - 3
server/tests/api/server/tracker.ts

@@ -49,7 +49,7 @@ describe('Test tracker', function () {
     torrent.on('error', done)
     torrent.on('warning', warn => {
       const message = typeof warn === 'string' ? warn : warn.message
-      if (message.indexOf('Unknown infoHash ') !== -1) return done()
+      if (message.includes('Unknown infoHash ')) return done()
     })
 
     torrent.on('done', () => done(new Error('No error on infohash')))
@@ -64,7 +64,7 @@ describe('Test tracker', function () {
     torrent.on('error', done)
     torrent.on('warning', warn => {
       const message = typeof warn === 'string' ? warn : warn.message
-      if (message.indexOf('Unknown infoHash ') !== -1) return done(new Error('Error on infohash'))
+      if (message.includes('Unknown infoHash ')) return done(new Error('Error on infohash'))
     })
 
     torrent.on('done', done)
@@ -83,7 +83,7 @@ describe('Test tracker', function () {
         torrent.on('error', done)
         torrent.on('warning', warn => {
           const message = typeof warn === 'string' ? warn : warn.message
-          if (message.indexOf('disabled ') !== -1) return done()
+          if (message.includes('disabled ')) return done()
         })
 
         torrent.on('done', () => done(new Error('Tracker is enabled')))

+ 1 - 1
server/tests/cli/prune-storage.ts

@@ -22,7 +22,7 @@ import {
 } from '../../../shared/extra-utils'
 import { Account, VideoPlaylistPrivacy } from '../../../shared/models'
 import { createFile, readdir } from 'fs-extra'
-import * as uuidv4 from 'uuid/v4'
+import { v4 as uuidv4 } from 'uuid'
 import { join } from 'path'
 
 const expect = chai.expect

+ 1 - 1
server/tools/peertube-auth.ts

@@ -133,7 +133,7 @@ program
   .description('set an existing entry as default')
   .action(async url => {
     const settings = await getSettings()
-    const instanceExists = settings.remotes.indexOf(url) !== -1
+    const instanceExists = settings.remotes.includes(url)
 
     if (instanceExists) {
       settings.default = settings.remotes.indexOf(url)

+ 1 - 1
server/tools/peertube-import-videos.ts

@@ -274,7 +274,7 @@ async function getCategory (categories: string[], url: string) {
 function getLicence (licence: string) {
   if (!licence) return undefined
 
-  if (licence.indexOf('Creative Commons Attribution licence') !== -1) return 1
+  if (licence.includes('Creative Commons Attribution licence')) return 1
 
   return undefined
 }

+ 1 - 4
server/tools/peertube-repl.ts

@@ -2,10 +2,7 @@ import { registerTSPaths } from '../helpers/register-ts-paths'
 import * as repl from 'repl'
 import * as path from 'path'
 import * as _ from 'lodash'
-import * as uuidv1 from 'uuid/v1'
-import * as uuidv3 from 'uuid/v3'
-import * as uuidv4 from 'uuid/v4'
-import * as uuidv5 from 'uuid/v5'
+import { uuidv1, uuidv3, uuidv4, uuidv5 } from 'uuid'
 import * as Sequelize from 'sequelize'
 import * as YoutubeDL from 'youtube-dl'
 

+ 3 - 3
shared/models/i18n/i18n.ts

@@ -69,11 +69,11 @@ export function peertubeTranslate (str: string, translations?: { [ id: string ]:
 
 const possiblePaths = POSSIBLE_LOCALES.map(l => '/' + l)
 export function is18nPath (path: string) {
-  return possiblePaths.indexOf(path) !== -1
+  return possiblePaths.includes(path)
 }
 
 export function is18nLocale (locale: string) {
-  return POSSIBLE_LOCALES.indexOf(locale) !== -1
+  return POSSIBLE_LOCALES.includes(locale)
 }
 
 export function getCompleteLocale (locale: string) {
@@ -85,7 +85,7 @@ export function getCompleteLocale (locale: string) {
 }
 
 export function getShortLocale (locale: string) {
-  if (locale.indexOf('-') === -1) return locale
+  if (locale.includes('-') === false) return locale
 
   return locale.split('-')[0]
 }

+ 1 - 1
shared/models/users/user-role.ts

@@ -38,5 +38,5 @@ const userRoleRights: { [ id in UserRole ]: UserRight[] } = {
 export function hasUserRight (userRole: UserRole, userRight: UserRight) {
   const userRights = userRoleRights[userRole]
 
-  return userRights.indexOf(UserRight.ALL) !== -1 || userRights.indexOf(userRight) !== -1
+  return userRights.includes(UserRight.ALL) || userRights.includes(userRight)
 }

File diff suppressed because it is too large
+ 242 - 246
yarn.lock


Some files were not shown because too many files changed in this diff