Prefer using Object.values

This commit is contained in:
Chocobozzz 2022-08-17 15:36:03 +02:00
parent bbd5aa7ead
commit 690bb8f9f3
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
17 changed files with 48 additions and 48 deletions

View File

@ -18,7 +18,7 @@ function sortBy (obj: any[], key1: string, key2?: string) {
})
}
function intoArray (value: any) {
function splitIntoArray (value: any) {
if (!value) return undefined
if (Array.isArray(value)) return value
@ -42,6 +42,6 @@ export {
sortBy,
immutableAssign,
removeElementFromArray,
intoArray,
splitIntoArray,
toBoolean
}

View File

@ -1,4 +1,4 @@
import { intoArray } from '@app/helpers'
import { splitIntoArray } from '@app/helpers'
import {
BooleanBothQuery,
BooleanQuery,
@ -76,8 +76,8 @@ export class AdvancedSearch {
this.categoryOneOf = options.categoryOneOf || undefined
this.licenceOneOf = options.licenceOneOf || undefined
this.languageOneOf = options.languageOneOf || undefined
this.tagsOneOf = intoArray(options.tagsOneOf)
this.tagsAllOf = intoArray(options.tagsAllOf)
this.tagsOneOf = splitIntoArray(options.tagsOneOf)
this.tagsAllOf = splitIntoArray(options.tagsAllOf)
this.durationMin = options.durationMin ? parseInt(options.durationMin, 10) : undefined
this.durationMax = options.durationMax ? parseInt(options.durationMax, 10) : undefined
@ -152,9 +152,9 @@ export class AdvancedSearch {
originallyPublishedStartDate: this.originallyPublishedStartDate,
originallyPublishedEndDate: this.originallyPublishedEndDate,
nsfw: this.nsfw,
categoryOneOf: intoArray(this.categoryOneOf),
licenceOneOf: intoArray(this.licenceOneOf),
languageOneOf: intoArray(this.languageOneOf),
categoryOneOf: splitIntoArray(this.categoryOneOf),
licenceOneOf: splitIntoArray(this.licenceOneOf),
languageOneOf: splitIntoArray(this.languageOneOf),
tagsOneOf: this.tagsOneOf,
tagsAllOf: this.tagsAllOf,
durationMin: this.durationMin,

View File

@ -1,4 +1,4 @@
import { intoArray, toBoolean } from '@app/helpers'
import { splitIntoArray, toBoolean } from '@app/helpers'
import { getAllPrivacies } from '@shared/core-utils'
import { AttributesOnly } from '@shared/typescript-utils'
import { BooleanBothQuery, NSFWPolicyType, VideoInclude, VideoPrivacy, VideoSortField } from '@shared/models'
@ -94,8 +94,8 @@ export class VideoFilters {
if (obj.nsfw !== undefined) this.nsfw = obj.nsfw
if (obj.languageOneOf !== undefined) this.languageOneOf = intoArray(obj.languageOneOf)
if (obj.categoryOneOf !== undefined) this.categoryOneOf = intoArray(obj.categoryOneOf)
if (obj.languageOneOf !== undefined) this.languageOneOf = splitIntoArray(obj.languageOneOf)
if (obj.categoryOneOf !== undefined) this.categoryOneOf = splitIntoArray(obj.categoryOneOf)
if (obj.scope !== undefined) this.scope = obj.scope
if (obj.allVideos !== undefined) this.allVideos = toBoolean(obj.allVideos)

View File

@ -1,5 +1,4 @@
import { writeJSON } from 'fs-extra'
import { values } from 'lodash'
import { join } from 'path'
import { root } from '@shared/core-utils'
import {
@ -65,13 +64,13 @@ Object.assign(playerKeys, videojs)
// Server keys
const serverKeys: any = {}
values(VIDEO_CATEGORIES)
.concat(values(VIDEO_LICENCES))
.concat(values(VIDEO_PRIVACIES))
.concat(values(VIDEO_STATES))
.concat(values(VIDEO_IMPORT_STATES))
.concat(values(VIDEO_PLAYLIST_PRIVACIES))
.concat(values(VIDEO_PLAYLIST_TYPES))
Object.values(VIDEO_CATEGORIES)
.concat(Object.values(VIDEO_LICENCES))
.concat(Object.values(VIDEO_PRIVACIES))
.concat(Object.values(VIDEO_STATES))
.concat(Object.values(VIDEO_IMPORT_STATES))
.concat(Object.values(VIDEO_PLAYLIST_PRIVACIES))
.concat(Object.values(VIDEO_PLAYLIST_TYPES))
.concat([
'This video does not exist.',
'We cannot fetch the video. Please try again later.',

View File

@ -1,11 +1,11 @@
import { map } from 'bluebird'
import { readdir, remove, stat } from 'fs-extra'
import { uniq, values } from 'lodash'
import { basename, join } from 'path'
import { get, start } from 'prompt'
import { HLS_REDUNDANCY_DIRECTORY, HLS_STREAMING_PLAYLIST_DIRECTORY } from '@server/initializers/constants'
import { VideoFileModel } from '@server/models/video/video-file'
import { VideoStreamingPlaylistModel } from '@server/models/video/video-streaming-playlist'
import { uniqify } from '@shared/core-utils'
import { ThumbnailType } from '@shared/models'
import { getUUIDFromFilename } from '../server/helpers/utils'
import { CONFIG } from '../server/initializers/config'
@ -23,9 +23,9 @@ run()
})
async function run () {
const dirs = values(CONFIG.STORAGE)
const dirs = Object.values(CONFIG.STORAGE)
if (uniq(dirs).length !== dirs.length) {
if (uniqify(dirs).length !== dirs.length) {
console.error('Cannot prune storage because you put multiple storage keys in the same directory.')
process.exit(0)
}

View File

@ -1,4 +1,3 @@
import { values } from 'lodash'
import validator from 'validator'
import { UserRole } from '@shared/models'
import { isEmailEnabled } from '../../initializers/config'
@ -44,9 +43,9 @@ function isUserEmailVerifiedValid (value: any) {
return isBooleanValid(value)
}
const nsfwPolicies = values(NSFW_POLICY_TYPES)
const nsfwPolicies = new Set(Object.values(NSFW_POLICY_TYPES))
function isUserNSFWPolicyValid (value: any) {
return exists(value) && nsfwPolicies.includes(value)
return exists(value) && nsfwPolicies.has(value)
}
function isUserP2PEnabledValid (value: any) {

View File

@ -1,5 +1,4 @@
import { UploadFilesForCheck } from 'express'
import { values } from 'lodash'
import magnetUtil from 'magnet-uri'
import validator from 'validator'
import { VideoFilter, VideoInclude, VideoPrivacy, VideoRateType } from '@shared/models'
@ -78,8 +77,9 @@ function isVideoViewsValid (value: string) {
return exists(value) && validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.VIEWS)
}
const ratingTypes = new Set(Object.values(VIDEO_RATE_TYPES))
function isVideoRatingTypeValid (value: string) {
return value === 'none' || values(VIDEO_RATE_TYPES).includes(value as VideoRateType)
return value === 'none' || ratingTypes.has(value as VideoRateType)
}
function isVideoFileExtnameValid (value: string) {

View File

@ -1,7 +1,7 @@
import config from 'config'
import { uniq } from 'lodash'
import { URL } from 'url'
import { getFFmpegVersion } from '@server/helpers/ffmpeg'
import { uniqify } from '@shared/core-utils'
import { VideoRedundancyConfigFilter } from '@shared/models/redundancy/video-redundancy-config-filter.type'
import { RecentlyAddedStrategy } from '../../shared/models/redundancy'
import { isProdInstance, parseSemVersion } from '../helpers/core-utils'
@ -141,7 +141,7 @@ function checkLocalRedundancyConfig () {
}
}
const filtered = uniq(redundancyVideos.map(r => r.strategy))
const filtered = uniqify(redundancyVideos.map(r => r.strategy))
if (filtered.length !== redundancyVideos.length) {
throw new Error('Redundancy video entries should have unique strategies')
}

View File

@ -2,8 +2,7 @@ import { readFileSync } from 'fs-extra'
import { merge } from 'lodash'
import { createTransport, Transporter } from 'nodemailer'
import { join } from 'path'
import { toArray } from '@server/helpers/custom-validators/misc'
import { root } from '@shared/core-utils'
import { arrayify, root } from '@shared/core-utils'
import { EmailPayload } from '@shared/models'
import { SendEmailDefaultOptions } from '../../shared/models/server/emailer.model'
import { isTestOrDevInstance } from '../helpers/core-utils'
@ -159,7 +158,7 @@ class Emailer {
subjectPrefix: CONFIG.EMAIL.SUBJECT.PREFIX
})
const toEmails = toArray(options.to)
const toEmails = arrayify(options.to)
for (const to of toEmails) {
const baseOptions: SendEmailDefaultOptions = {

View File

@ -1,8 +1,9 @@
import { close, ensureDir, move, open, outputJSON, read, readFile, remove, stat, writeFile } from 'fs-extra'
import { flatten, uniq } from 'lodash'
import { flatten } from 'lodash'
import PQueue from 'p-queue'
import { basename, dirname, join } from 'path'
import { MStreamingPlaylist, MStreamingPlaylistFilesVideo, MVideo } from '@server/types/models'
import { uniqify } from '@shared/core-utils'
import { sha256 } from '@shared/extra-utils'
import { VideoStorage } from '@shared/models'
import { getAudioStreamCodec, getVideoStreamCodec, getVideoStreamDimensionsInfo } from '../helpers/ffmpeg'
@ -182,7 +183,7 @@ function downloadPlaylistSegments (playlistUrl: string, destinationDir: string,
const subPlaylistUrls = await fetchUniqUrls(playlistUrl)
const subRequests = subPlaylistUrls.map(u => fetchUniqUrls(u))
const fileUrls = uniq(flatten(await Promise.all(subRequests)))
const fileUrls = uniqify(flatten(await Promise.all(subRequests)))
logger.debug('Will download %d HLS files.', fileUrls.length, { fileUrls })
@ -227,7 +228,7 @@ function downloadPlaylistSegments (playlistUrl: string, destinationDir: string,
return `${dirname(playlistUrl)}/${url}`
})
return uniq(urls)
return uniqify(urls)
}
}

View File

@ -1,4 +1,3 @@
import { values } from 'lodash'
import { FindOptions, Op, QueryTypes, Transaction } from 'sequelize'
import { AllowNull, BelongsTo, Column, CreatedAt, DataType, ForeignKey, Is, Model, Table, UpdatedAt } from 'sequelize-typescript'
import {
@ -45,7 +44,7 @@ import { AccountModel } from './account'
export class AccountVideoRateModel extends Model<Partial<AttributesOnly<AccountVideoRateModel>>> {
@AllowNull(false)
@Column(DataType.ENUM(...values(VIDEO_RATE_TYPES)))
@Column(DataType.ENUM(...Object.values(VIDEO_RATE_TYPES)))
type: VideoRateType
@AllowNull(false)

View File

@ -1,4 +1,4 @@
import { difference, values } from 'lodash'
import { difference } from 'lodash'
import { Attributes, FindOptions, Includeable, IncludeOptions, Op, QueryTypes, Transaction, WhereAttributeHash } from 'sequelize'
import {
AfterCreate,
@ -69,7 +69,7 @@ import { InstanceListFollowingQueryBuilder, ListFollowingOptions } from './sql/i
export class ActorFollowModel extends Model<Partial<AttributesOnly<ActorFollowModel>>> {
@AllowNull(false)
@Column(DataType.ENUM(...values(FOLLOW_STATES)))
@Column(DataType.ENUM(...Object.values(FOLLOW_STATES)))
state: FollowState
@AllowNull(false)

View File

@ -1,4 +1,3 @@
import { values } from 'lodash'
import { literal, Op, QueryTypes, Transaction } from 'sequelize'
import {
AllowNull,
@ -163,7 +162,7 @@ export const unusedActorAttributesForAPI = [
export class ActorModel extends Model<Partial<AttributesOnly<ActorModel>>> {
@AllowNull(false)
@Column(DataType.ENUM(...values(ACTIVITY_PUB_ACTOR_TYPES)))
@Column(DataType.ENUM(...Object.values(ACTIVITY_PUB_ACTOR_TYPES)))
type: ActivityPubActorType
@AllowNull(false)

View File

@ -1,4 +1,3 @@
import { values } from 'lodash'
import { col, FindOptions, fn, literal, Op, QueryTypes, where, WhereOptions } from 'sequelize'
import {
AfterDestroy,
@ -283,7 +282,7 @@ export class UserModel extends Model<Partial<AttributesOnly<UserModel>>> {
@AllowNull(false)
@Is('UserNSFWPolicy', value => throwIfNotValid(value, isUserNSFWPolicyValid, 'NSFW policy'))
@Column(DataType.ENUM(...values(NSFW_POLICY_TYPES)))
@Column(DataType.ENUM(...Object.values(NSFW_POLICY_TYPES)))
nsfwPolicy: NSFWPolicyType
@AllowNull(false)

View File

@ -1,4 +1,3 @@
import { uniq } from 'lodash'
import { FindOptions, Op, Order, QueryTypes, ScopeOptions, Sequelize, Transaction, WhereOptions } from 'sequelize'
import {
AllowNull,
@ -17,6 +16,7 @@ import {
import { exists } from '@server/helpers/custom-validators/misc'
import { getServerActor } from '@server/models/application/application'
import { MAccount, MAccountId, MUserAccountId } from '@server/types/models'
import { uniqify } from '@shared/core-utils'
import { VideoPrivacy } from '@shared/models'
import { AttributesOnly } from '@shared/typescript-utils'
import { ActivityTagObject, ActivityTombstoneObject } from '../../../shared/models/activitypub/objects/common-objects'
@ -802,7 +802,7 @@ export class VideoCommentModel extends Model<Partial<AttributesOnly<VideoComment
)
}
return uniq(result)
return uniqify(result)
}
toFormattedJSON (this: MCommentFormattable) {

View File

@ -1,13 +1,12 @@
import CliTable3 from 'cli-table3'
import { Command, program } from 'commander'
import { uniq } from 'lodash'
import { URL } from 'url'
import validator from 'validator'
import { uniqify } from '@shared/core-utils'
import { HttpStatusCode, VideoRedundanciesTarget } from '@shared/models'
import { assignToken, buildServer, getServerCredentials } from './cli'
import bytes = require('bytes')
program
.name('redundancy')
.usage('[command] [options]')
@ -77,7 +76,7 @@ async function listRedundanciesCLI (target: VideoRedundanciesTarget) {
totalSize = bytes(tmp)
}
const instances = uniq(
const instances = uniqify(
webtorrentFiles.concat(streamingPlaylists)
.map(r => r.fileUrl)
.map(u => new URL(u).host)

View File

@ -15,7 +15,13 @@ function arrayify <T> (element: T | T[]) {
return [ element ]
}
// Avoid conflict with other uniq() functions
function uniqify <T> (elements: T[]) {
return Array.from(new Set(elements))
}
export {
uniqify,
findCommonElement,
arrayify
}