import { stat } from 'fs-extra'
-import { omit } from 'lodash'
import { join } from 'path'
import { format as sqlFormat } from 'sql-formatter'
import { createLogger, format, transports } from 'winston'
import { FileTransportOptions } from 'winston/lib/winston/transports'
import { context } from '@opentelemetry/api'
import { getSpanContext } from '@opentelemetry/api/build/src/trace/context-utils'
+import { omit } from '@shared/core-utils'
import { CONFIG } from '../initializers/config'
import { LOG_FILENAME } from '../initializers/constants'
function getAdditionalInfo (info: any) {
const toOmit = [ 'label', 'timestamp', 'level', 'message', 'sql', 'tags' ]
- return omit(info, ...toOmit)
+ return omit(info, toOmit)
}
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
-
-import 'mocha'
-import { merge, omit } from 'lodash'
+import { merge } from 'lodash'
+import { omit } from '@shared/core-utils'
import { CustomConfig, HttpStatusCode } from '@shared/models'
import {
cleanupTests,
})
it('Should fail if it misses a key', async function () {
- const newUpdateParams = omit(updateParams, 'admin.email')
+ const newUpdateParams = { ...updateParams, admin: omit(updateParams.admin, [ 'email' ]) }
await makePutBodyRequest({
url: server.url,
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
-import 'mocha'
import { expect } from 'chai'
-import { omit } from 'lodash'
-import { buildAbsoluteFixturePath } from '@shared/core-utils'
+import { buildAbsoluteFixturePath, omit } from '@shared/core-utils'
import { HttpStatusCode, LiveVideoLatencyMode, VideoCreateResult, VideoPrivacy } from '@shared/models'
import {
cleanupTests,
})
it('Should fail without a channel', async function () {
- const fields = omit(baseCorrectParams, 'channelId')
+ const fields = omit(baseCorrectParams, [ 'channelId' ])
await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
})
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
-import 'mocha'
-import { omit } from 'lodash'
+import { omit } from '@shared/core-utils'
import { HttpStatusCode, PlaybackMetricCreate, VideoResolution } from '@shared/models'
import { cleanupTests, createSingleServer, makePostBodyRequest, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands'
await makePostBodyRequest({
url: server.url,
path,
- fields: omit(baseParams, 'playerMode')
+ fields: omit(baseParams, [ 'playerMode' ])
})
await makePostBodyRequest({
await makePostBodyRequest({
url: server.url,
path,
- fields: omit(baseParams, 'resolutionChanges')
+ fields: omit(baseParams, [ 'resolutionChanges' ])
})
await makePostBodyRequest({
await makePostBodyRequest({
url: server.url,
path,
- fields: omit(baseParams, 'errors')
+ fields: omit(baseParams, [ 'errors' ])
})
await makePostBodyRequest({
await makePostBodyRequest({
url: server.url,
path,
- fields: omit(baseParams, 'downloadedBytesP2P')
+ fields: omit(baseParams, [ 'downloadedBytesP2P' ])
})
await makePostBodyRequest({
await makePostBodyRequest({
url: server.url,
path,
- fields: omit(baseParams, 'downloadedBytesHTTP')
+ fields: omit(baseParams, [ 'downloadedBytesHTTP' ])
})
await makePostBodyRequest({
await makePostBodyRequest({
url: server.url,
path,
- fields: omit(baseParams, 'uploadedBytesP2P')
+ fields: omit(baseParams, [ 'uploadedBytesP2P' ])
})
await makePostBodyRequest({
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
-import 'mocha'
-import { omit } from 'lodash'
import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination, MockSmtpServer } from '@server/tests/shared'
+import { omit } from '@shared/core-utils'
import { HttpStatusCode, UserAdminFlag, UserRole } from '@shared/models'
import {
cleanupTests,
})
it('Should fail with a missing email', async function () {
- const fields = omit(baseCorrectParams, 'email')
+ const fields = omit(baseCorrectParams, [ 'email' ])
await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
})
})
it('Should fail without a videoQuota', async function () {
- const fields = omit(baseCorrectParams, 'videoQuota')
+ const fields = omit(baseCorrectParams, [ 'videoQuota' ])
await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
})
it('Should fail without a videoQuotaDaily', async function () {
- const fields = omit(baseCorrectParams, 'videoQuotaDaily')
+ const fields = omit(baseCorrectParams, [ 'videoQuotaDaily' ])
await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
})
})
it('Should fail without a user role', async function () {
- const fields = omit(baseCorrectParams, 'role')
+ const fields = omit(baseCorrectParams, [ 'role' ])
await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
})
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
-
-import 'mocha'
-import { omit } from 'lodash'
import { MockSmtpServer } from '@server/tests/shared'
+import { omit } from '@shared/core-utils'
import { HttpStatusCode, UserRole } from '@shared/models'
import { cleanupTests, createSingleServer, makePostBodyRequest, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands'
})
it('Should fail with a missing email', async function () {
- const fields = omit(baseCorrectParams, 'email')
+ const fields = omit(baseCorrectParams, [ 'email' ])
await makePostBodyRequest({ url: server.url, path: registrationPath, token: server.accessToken, fields })
})
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
-import 'mocha'
-import * as chai from 'chai'
-import { omit } from 'lodash'
+import { expect } from 'chai'
import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination } from '@server/tests/shared'
-import { buildAbsoluteFixturePath } from '@shared/core-utils'
+import { buildAbsoluteFixturePath, omit } from '@shared/core-utils'
import { HttpStatusCode, VideoChannelUpdate } from '@shared/models'
import {
ChannelsCommand,
setAccessTokensToServers
} from '@shared/server-commands'
-const expect = chai.expect
-
describe('Test video channels API validator', function () {
const videoChannelPath = '/api/v1/video-channels'
let server: PeerTubeServer
})
it('Should fail without a name', async function () {
- const fields = omit(baseCorrectParams, 'name')
+ const fields = omit(baseCorrectParams, [ 'name' ])
await makePostBodyRequest({ url: server.url, path: videoChannelPath, token: server.accessToken, fields })
})
})
it('Should fail without a name', async function () {
- const fields = omit(baseCorrectParams, 'displayName')
+ const fields = omit(baseCorrectParams, [ 'displayName' ])
await makePostBodyRequest({ url: server.url, path: videoChannelPath, token: server.accessToken, fields })
})
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
-import 'mocha'
-import { omit } from 'lodash'
import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination, FIXTURE_URLS } from '@server/tests/shared'
-import { buildAbsoluteFixturePath } from '@shared/core-utils'
+import { buildAbsoluteFixturePath, omit } from '@shared/core-utils'
import { HttpStatusCode, VideoPrivacy } from '@shared/models'
import {
cleanupTests,
})
it('Should fail without a target url', async function () {
- const fields = omit(baseCorrectParams, 'targetUrl')
+ const fields = omit(baseCorrectParams, [ 'targetUrl' ])
await makePostBodyRequest({
url: server.url,
path,
})
it('Should fail without a channel', async function () {
- const fields = omit(baseCorrectParams, 'channelId')
+ const fields = omit(baseCorrectParams, [ 'channelId' ])
await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
})
})
it('Should fail with an invalid torrent file', async function () {
- const fields = omit(baseCorrectParams, 'targetUrl')
+ const fields = omit(baseCorrectParams, [ 'targetUrl' ])
const attaches = {
torrentfile: buildAbsoluteFixturePath('avatar-big.png')
}
})
it('Should fail with an invalid magnet URI', async function () {
- let fields = omit(baseCorrectParams, 'targetUrl')
+ let fields = omit(baseCorrectParams, [ 'targetUrl' ])
fields = { ...fields, magnetUri: 'blabla' }
await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
}
})
- let fields = omit(baseCorrectParams, 'targetUrl')
+ let fields = omit(baseCorrectParams, [ 'targetUrl' ])
fields = { ...fields, magnetUri: FIXTURE_URLS.magnet }
await makePostBodyRequest({
expectedStatus: HttpStatusCode.CONFLICT_409
})
- fields = omit(fields, 'magnetUri')
+ fields = omit(fields, [ 'magnetUri' ])
const attaches = {
torrentfile: buildAbsoluteFixturePath('video-720p.torrent')
}
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
-import 'mocha'
-import * as chai from 'chai'
-import { omit } from 'lodash'
+import { expect } from 'chai'
import { join } from 'path'
import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination, checkUploadVideoParam } from '@server/tests/shared'
-import { randomInt, root } from '@shared/core-utils'
+import { omit, randomInt, root } from '@shared/core-utils'
import { HttpStatusCode, PeerTubeProblemDocument, VideoCreateResult, VideoPrivacy } from '@shared/models'
import {
cleanupTests,
setAccessTokensToServers
} from '@shared/server-commands'
-const expect = chai.expect
-
describe('Test videos API validator', function () {
const path = '/api/v1/videos/'
let server: PeerTubeServer
})
it('Should fail without name', async function () {
- const fields = omit(baseCorrectParams, 'name')
+ const fields = omit(baseCorrectParams, [ 'name' ])
const attaches = baseCorrectAttaches
await checkUploadVideoParam(server, server.accessToken, { ...fields, ...attaches }, HttpStatusCode.BAD_REQUEST_400, mode)
})
it('Should fail without a channel', async function () {
- const fields = omit(baseCorrectParams, 'channelId')
+ const fields = omit(baseCorrectParams, [ 'channelId' ])
const attaches = baseCorrectAttaches
await checkUploadVideoParam(server, server.accessToken, { ...fields, ...attaches }, HttpStatusCode.BAD_REQUEST_400, mode)
import 'mocha'
import * as chai from 'chai'
-import { orderBy } from 'lodash'
import { FIXTURE_URLS } from '@server/tests/shared'
+import { sortObjectComparator } from '@shared/core-utils'
import { UserAdminFlag, UserRole, VideoBlacklist, VideoBlacklistType } from '@shared/models'
import {
BlacklistCommand,
expect(blacklistedVideos).to.be.an('array')
expect(blacklistedVideos.length).to.equal(2)
- const result = orderBy(body.data, [ 'id' ], [ 'desc' ])
+ const result = [ ...body.data ].sort(sortObjectComparator('id', 'desc'))
expect(blacklistedVideos).to.deep.equal(result)
})
expect(blacklistedVideos).to.be.an('array')
expect(blacklistedVideos.length).to.equal(2)
- const result = orderBy(body.data, [ 'name' ], [ 'desc' ])
+ const result = [ ...body.data ].sort(sortObjectComparator('name', 'desc'))
expect(blacklistedVideos).to.deep.equal(result)
})
expect(blacklistedVideos).to.be.an('array')
expect(blacklistedVideos.length).to.equal(2)
- const result = orderBy(body.data, [ 'createdAt' ])
+ const result = [ ...body.data ].sort(sortObjectComparator('createdAt', 'asc'))
expect(blacklistedVideos).to.deep.equal(result)
})
})
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
-import 'mocha'
-import * as chai from 'chai'
-import { omit } from 'lodash'
+import { expect } from 'chai'
import { canDoQuickTranscode } from '@server/helpers/ffmpeg'
import { generateHighBitrateVideo, generateVideoWithFramerate, getAllFiles } from '@server/tests/shared'
-import { buildAbsoluteFixturePath, getMaxBitrate, getMinLimitBitrate } from '@shared/core-utils'
+import { buildAbsoluteFixturePath, getMaxBitrate, getMinLimitBitrate, omit } from '@shared/core-utils'
import {
buildFileMetadata,
getAudioStream,
webtorrentAdd
} from '@shared/server-commands'
-const expect = chai.expect
-
function updateConfigForTranscoding (server: PeerTubeServer) {
return server.config.updateCustomSubConfig({
newConfig: {
import 'mocha'
import * as chai from 'chai'
-import { omit } from 'lodash'
+import { omit } from '@shared/core-utils'
import {
Account,
HTMLServerConfig,
expect(html).to.contain('<meta name="description" content="' + description + '" />')
expect(html).to.contain('<style class="custom-css-style">' + css + '</style>')
- const htmlConfig: HTMLServerConfig = omit(config, 'signup')
+ const htmlConfig: HTMLServerConfig = omit(config, [ 'signup' ])
const configObjectString = JSON.stringify(htmlConfig)
const configEscapedString = JSON.stringify(configObjectString)
return result
}
+function omit <O extends object, K extends keyof O> (object: O, keys: K[]): Exclude<O, K> {
+ const result: any = {}
+ const keysSet = new Set(keys) as Set<string>
+
+ for (const [ key, value ] of Object.entries(object)) {
+ if (keysSet.has(key)) continue
+
+ result[key] = value
+ }
+
+ return result
+}
+
function getKeys <O extends object, K extends keyof O> (object: O, keys: K[]): K[] {
return (Object.keys(object) as K[]).filter(k => keys.includes(k))
}
export {
pick,
+ omit,
getKeys,
sortObjectComparator
}
-import { omit } from 'lodash'
-import { pick } from '@shared/core-utils'
+import { omit, pick } from '@shared/core-utils'
import {
HttpStatusCode,
MyUser,
updateMe (options: OverrideCommandOptions & UserUpdateMe) {
const path = '/api/v1/users/me'
- const toSend: UserUpdateMe = omit(options, 'url', 'accessToken')
+ const toSend: UserUpdateMe = omit(options, [ 'expectedStatus', 'token' ])
return this.putBodyRequest({
...options,
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
import { readdir } from 'fs-extra'
-import { omit } from 'lodash'
import { join } from 'path'
-import { wait } from '@shared/core-utils'
+import { omit, wait } from '@shared/core-utils'
import {
HttpStatusCode,
LiveVideo,
path,
attaches,
- fields: omit(fields, 'thumbnailfile', 'previewfile'),
+ fields: omit(fields, [ 'thumbnailfile', 'previewfile' ]),
implicitToken: true,
defaultExpectedStatus: HttpStatusCode.OK_200
}))
-import { omit } from 'lodash'
-import { pick } from '@shared/core-utils'
+import { omit, pick } from '@shared/core-utils'
import {
BooleanBothQuery,
HttpStatusCode,
}) {
const path = '/api/v1/video-playlists'
- const fields = omit(options.attributes, 'thumbnailfile')
+ const fields = omit(options.attributes, [ 'thumbnailfile' ])
const attaches = options.attributes.thumbnailfile
? { thumbnailfile: options.attributes.thumbnailfile }
}) {
const path = '/api/v1/video-playlists/' + options.playlistId
- const fields = omit(options.attributes, 'thumbnailfile')
+ const fields = omit(options.attributes, [ 'thumbnailfile' ])
const attaches = options.attributes.thumbnailfile
? { thumbnailfile: options.attributes.thumbnailfile }
import { expect } from 'chai'
import { createReadStream, stat } from 'fs-extra'
import got, { Response as GotResponse } from 'got'
-import { omit } from 'lodash'
import validator from 'validator'
-import { buildAbsoluteFixturePath, pick, wait } from '@shared/core-utils'
+import { buildAbsoluteFixturePath, omit, pick, wait } from '@shared/core-utils'
import { buildUUID } from '@shared/extra-utils'
import {
HttpStatusCode,
},
// Fixture will be sent later
- attaches: this.buildUploadAttaches(omit(options.attributes, 'fixture')),
+ attaches: this.buildUploadAttaches(omit(options.attributes, [ 'fixture' ])),
implicitToken: true,
defaultExpectedStatus: null