diff options
author | Chocobozzz <florian.bigard@gmail.com> | 2017-07-05 13:26:25 +0200 |
---|---|---|
committer | Chocobozzz <florian.bigard@gmail.com> | 2017-07-05 14:14:16 +0200 |
commit | 6fcd19ba737f1f5614a56c6925adb882dea43b8d (patch) | |
tree | 3365a96d82bc7f00ae504a568725c8e914150cf8 /server/helpers/core-utils.ts | |
parent | 5fe7e898316e18369c3e1aba307b55077adc7bfb (diff) | |
download | PeerTube-6fcd19ba737f1f5614a56c6925adb882dea43b8d.tar.gz PeerTube-6fcd19ba737f1f5614a56c6925adb882dea43b8d.tar.zst PeerTube-6fcd19ba737f1f5614a56c6925adb882dea43b8d.zip |
Move to promises
Closes https://github.com/Chocobozzz/PeerTube/issues/74
Diffstat (limited to 'server/helpers/core-utils.ts')
-rw-r--r-- | server/helpers/core-utils.ts | 89 |
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 | ||
6 | import { join } from 'path' | 6 | import { join } from 'path' |
7 | import { pseudoRandomBytes } from 'crypto' | ||
8 | import { | ||
9 | readdir, | ||
10 | readFile, | ||
11 | rename, | ||
12 | unlink, | ||
13 | writeFile, | ||
14 | access | ||
15 | } from 'fs' | ||
16 | import * as mkdirp from 'mkdirp' | ||
17 | import * as bcrypt from 'bcrypt' | ||
18 | import * as createTorrent from 'create-torrent' | ||
19 | import * as openssl from 'openssl-wrapper' | ||
20 | import * as Promise from 'bluebird' | ||
7 | 21 | ||
8 | function isTestInstance () { | 22 | function 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 | ||
31 | function 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 | ||
40 | function 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 | |||
48 | function 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 | |||
56 | function 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 | |||
64 | function 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 | |||
72 | const readFilePromise = promisify2<string, string, string>(readFile) | ||
73 | const readFileBufferPromise = promisify1<string, Buffer>(readFile) | ||
74 | const unlinkPromise = promisify1WithVoid<string>(unlink) | ||
75 | const renamePromise = promisify2WithVoid<string, string>(rename) | ||
76 | const writeFilePromise = promisify2<string, any, void>(writeFile) | ||
77 | const readdirPromise = promisify1<string, string[]>(readdir) | ||
78 | const mkdirpPromise = promisify1<string, string>(mkdirp) | ||
79 | const pseudoRandomBytesPromise = promisify1<number, Buffer>(pseudoRandomBytes) | ||
80 | const accessPromise = promisify1WithVoid<string|Buffer>(access) | ||
81 | const opensslExecPromise = promisify2WithVoid<string, any>(openssl.exec) | ||
82 | const bcryptComparePromise = promisify2<any, string, boolean>(bcrypt.compare) | ||
83 | const bcryptGenSaltPromise = promisify1<number, string>(bcrypt.genSalt) | ||
84 | const bcryptHashPromise = promisify2<any, string|number, string>(bcrypt.hash) | ||
85 | const createTorrentPromise = promisify2<string, any, any>(createTorrent) | ||
86 | |||
17 | // --------------------------------------------------------------------------- | 87 | // --------------------------------------------------------------------------- |
18 | 88 | ||
19 | export { | 89 | export { |
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 | } |