aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/helpers/core-utils.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/helpers/core-utils.ts')
-rw-r--r--server/helpers/core-utils.ts89
1 files changed, 88 insertions, 1 deletions
diff --git a/server/helpers/core-utils.ts b/server/helpers/core-utils.ts
index 32b89b6dd..1e92049f1 100644
--- a/server/helpers/core-utils.ts
+++ b/server/helpers/core-utils.ts
@@ -4,6 +4,20 @@
4*/ 4*/
5 5
6import { join } from 'path' 6import { join } from 'path'
7import { pseudoRandomBytes } from 'crypto'
8import {
9 readdir,
10 readFile,
11 rename,
12 unlink,
13 writeFile,
14 access
15} from 'fs'
16import * as mkdirp from 'mkdirp'
17import * as bcrypt from 'bcrypt'
18import * as createTorrent from 'create-torrent'
19import * as openssl from 'openssl-wrapper'
20import * as Promise from 'bluebird'
7 21
8function isTestInstance () { 22function isTestInstance () {
9 return process.env.NODE_ENV === 'test' 23 return process.env.NODE_ENV === 'test'
@@ -14,9 +28,82 @@ function root () {
14 return join(__dirname, '..', '..', '..') 28 return join(__dirname, '..', '..', '..')
15} 29}
16 30
31function promisify0<A> (func: (cb: (err: any, result: A) => void) => void): () => Promise<A> {
32 return function promisified (): Promise<A> {
33 return new Promise<A>((resolve: (arg: A) => void, reject: (err: any) => void) => {
34 func.apply(null, [ (err: any, res: A) => err ? reject(err) : resolve(res) ])
35 })
36 }
37}
38
39// Thanks to https://gist.github.com/kumasento/617daa7e46f13ecdd9b2
40function promisify1<T, A> (func: (arg: T, cb: (err: any, result: A) => void) => void): (arg: T) => Promise<A> {
41 return function promisified (arg: T): Promise<A> {
42 return new Promise<A>((resolve: (arg: A) => void, reject: (err: any) => void) => {
43 func.apply(null, [ arg, (err: any, res: A) => err ? reject(err) : resolve(res) ])
44 })
45 }
46}
47
48function promisify1WithVoid<T> (func: (arg: T, cb: (err: any) => void) => void): (arg: T) => Promise<void> {
49 return function promisified (arg: T): Promise<void> {
50 return new Promise<void>((resolve: () => void, reject: (err: any) => void) => {
51 func.apply(null, [ arg, (err: any) => err ? reject(err) : resolve() ])
52 })
53 }
54}
55
56function promisify2<T, U, A> (func: (arg1: T, arg2: U, cb: (err: any, result: A) => void) => void): (arg1: T, arg2: U) => Promise<A> {
57 return function promisified (arg1: T, arg2: U): Promise<A> {
58 return new Promise<A>((resolve: (arg: A) => void, reject: (err: any) => void) => {
59 func.apply(null, [ arg1, arg2, (err: any, res: A) => err ? reject(err) : resolve(res) ])
60 })
61 }
62}
63
64function promisify2WithVoid<T, U> (func: (arg1: T, arg2: U, cb: (err: any) => void) => void): (arg1: T, arg2: U) => Promise<void> {
65 return function promisified (arg1: T, arg2: U): Promise<void> {
66 return new Promise<void>((resolve: () => void, reject: (err: any) => void) => {
67 func.apply(null, [ arg1, arg2, (err: any) => err ? reject(err) : resolve() ])
68 })
69 }
70}
71
72const readFilePromise = promisify2<string, string, string>(readFile)
73const readFileBufferPromise = promisify1<string, Buffer>(readFile)
74const unlinkPromise = promisify1WithVoid<string>(unlink)
75const renamePromise = promisify2WithVoid<string, string>(rename)
76const writeFilePromise = promisify2<string, any, void>(writeFile)
77const readdirPromise = promisify1<string, string[]>(readdir)
78const mkdirpPromise = promisify1<string, string>(mkdirp)
79const pseudoRandomBytesPromise = promisify1<number, Buffer>(pseudoRandomBytes)
80const accessPromise = promisify1WithVoid<string|Buffer>(access)
81const opensslExecPromise = promisify2WithVoid<string, any>(openssl.exec)
82const bcryptComparePromise = promisify2<any, string, boolean>(bcrypt.compare)
83const bcryptGenSaltPromise = promisify1<number, string>(bcrypt.genSalt)
84const bcryptHashPromise = promisify2<any, string|number, string>(bcrypt.hash)
85const createTorrentPromise = promisify2<string, any, any>(createTorrent)
86
17// --------------------------------------------------------------------------- 87// ---------------------------------------------------------------------------
18 88
19export { 89export {
20 isTestInstance, 90 isTestInstance,
21 root 91 root,
92
93 promisify0,
94 promisify1,
95 readdirPromise,
96 readFilePromise,
97 readFileBufferPromise,
98 unlinkPromise,
99 renamePromise,
100 writeFilePromise,
101 mkdirpPromise,
102 pseudoRandomBytesPromise,
103 accessPromise,
104 opensslExecPromise,
105 bcryptComparePromise,
106 bcryptGenSaltPromise,
107 bcryptHashPromise,
108 createTorrentPromise
22} 109}