]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/core-utils.ts
Video blacklist refractoring
[github/Chocobozzz/PeerTube.git] / server / helpers / core-utils.ts
CommitLineData
1840c2f7
C
1/*
2 Different from 'utils' because we don't not import other PeerTube modules.
3 Useful to avoid circular dependencies.
4*/
5
6import { join } from 'path'
6fcd19ba
C
7import { pseudoRandomBytes } from 'crypto'
8import {
9 readdir,
10 readFile,
11 rename,
12 unlink,
13 writeFile,
40298b02
C
14 access,
15 stat,
16 Stats
6fcd19ba
C
17} from 'fs'
18import * as mkdirp from 'mkdirp'
19import * as bcrypt from 'bcrypt'
20import * as createTorrent from 'create-torrent'
f981dae8 21import * as rimraf from 'rimraf'
6fcd19ba
C
22import * as openssl from 'openssl-wrapper'
23import * as Promise from 'bluebird'
1840c2f7
C
24
25function isTestInstance () {
26 return process.env.NODE_ENV === 'test'
27}
28
29function root () {
fdbda9e3
C
30 // We are in /helpers/utils.js
31 const paths = [ __dirname, '..', '..' ]
32
33 // We are under /dist directory
34 if (process.mainModule.filename.endsWith('.ts') === false) {
35 paths.push('..')
36 }
37
38 return join.apply(null, paths)
1840c2f7
C
39}
40
6fcd19ba
C
41function promisify0<A> (func: (cb: (err: any, result: A) => void) => void): () => Promise<A> {
42 return function promisified (): Promise<A> {
43 return new Promise<A>((resolve: (arg: A) => void, reject: (err: any) => void) => {
44 func.apply(null, [ (err: any, res: A) => err ? reject(err) : resolve(res) ])
45 })
46 }
47}
48
49// Thanks to https://gist.github.com/kumasento/617daa7e46f13ecdd9b2
50function promisify1<T, A> (func: (arg: T, cb: (err: any, result: A) => void) => void): (arg: T) => Promise<A> {
51 return function promisified (arg: T): Promise<A> {
52 return new Promise<A>((resolve: (arg: A) => void, reject: (err: any) => void) => {
53 func.apply(null, [ arg, (err: any, res: A) => err ? reject(err) : resolve(res) ])
54 })
55 }
56}
57
58function promisify1WithVoid<T> (func: (arg: T, cb: (err: any) => void) => void): (arg: T) => Promise<void> {
59 return function promisified (arg: T): Promise<void> {
60 return new Promise<void>((resolve: () => void, reject: (err: any) => void) => {
61 func.apply(null, [ arg, (err: any) => err ? reject(err) : resolve() ])
62 })
63 }
64}
65
66function promisify2<T, U, A> (func: (arg1: T, arg2: U, cb: (err: any, result: A) => void) => void): (arg1: T, arg2: U) => Promise<A> {
67 return function promisified (arg1: T, arg2: U): Promise<A> {
68 return new Promise<A>((resolve: (arg: A) => void, reject: (err: any) => void) => {
69 func.apply(null, [ arg1, arg2, (err: any, res: A) => err ? reject(err) : resolve(res) ])
70 })
71 }
72}
73
74function promisify2WithVoid<T, U> (func: (arg1: T, arg2: U, cb: (err: any) => void) => void): (arg1: T, arg2: U) => Promise<void> {
75 return function promisified (arg1: T, arg2: U): Promise<void> {
76 return new Promise<void>((resolve: () => void, reject: (err: any) => void) => {
77 func.apply(null, [ arg1, arg2, (err: any) => err ? reject(err) : resolve() ])
78 })
79 }
80}
81
82const readFilePromise = promisify2<string, string, string>(readFile)
83const readFileBufferPromise = promisify1<string, Buffer>(readFile)
84const unlinkPromise = promisify1WithVoid<string>(unlink)
85const renamePromise = promisify2WithVoid<string, string>(rename)
556ddc31 86const writeFilePromise = promisify2WithVoid<string, any>(writeFile)
6fcd19ba
C
87const readdirPromise = promisify1<string, string[]>(readdir)
88const mkdirpPromise = promisify1<string, string>(mkdirp)
89const pseudoRandomBytesPromise = promisify1<number, Buffer>(pseudoRandomBytes)
90const accessPromise = promisify1WithVoid<string|Buffer>(access)
91const opensslExecPromise = promisify2WithVoid<string, any>(openssl.exec)
92const bcryptComparePromise = promisify2<any, string, boolean>(bcrypt.compare)
93const bcryptGenSaltPromise = promisify1<number, string>(bcrypt.genSalt)
94const bcryptHashPromise = promisify2<any, string|number, string>(bcrypt.hash)
95const createTorrentPromise = promisify2<string, any, any>(createTorrent)
f981dae8 96const rimrafPromise = promisify1WithVoid<string>(rimraf)
40298b02 97const statPromise = promisify1<string, Stats>(stat)
6fcd19ba 98
1840c2f7
C
99// ---------------------------------------------------------------------------
100
101export {
102 isTestInstance,
6fcd19ba
C
103 root,
104
105 promisify0,
106 promisify1,
107 readdirPromise,
108 readFilePromise,
109 readFileBufferPromise,
110 unlinkPromise,
111 renamePromise,
112 writeFilePromise,
113 mkdirpPromise,
114 pseudoRandomBytesPromise,
115 accessPromise,
116 opensslExecPromise,
117 bcryptComparePromise,
118 bcryptGenSaltPromise,
119 bcryptHashPromise,
f981dae8 120 createTorrentPromise,
40298b02
C
121 rimrafPromise,
122 statPromise
1840c2f7 123}