Passed
Pull Request — master (#164)
by Jan
03:39 queued 01:45
created

util-file.ts ➔ getNextBufferSubarrayAsync   A

Complexity

Conditions 1

Size

Total Lines 10
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 9
dl 0
loc 10
rs 9.95
c 0
b 0
f 0
cc 1
1
import * as fs from 'fs'
2
import { promisify } from 'util'
3
4
export const fsOpenPromise = promisify(fs.open)
5
export const fsReadPromise = promisify(fs.read)
6
export const fsClosePromise = promisify(fs.close)
7
export const fsWritePromise = promisify(fs.write)
8
export const fsUnlinkPromise = promisify(fs.unlink)
9
export const fsRenamePromise = promisify(fs.rename)
10
11
export function processFile<T>(
12
    filepath: string,
13
    flags: string,
14
    process: (fileDescriptor: number) => T
15
) {
16
    const fileDescriptor = fs.openSync(filepath, flags)
17
    try {
18
        return process(fileDescriptor)
19
    }
20
    finally {
21
        fs.closeSync(fileDescriptor)
22
    }
23
}
24
25
export async function processFileAsync<T>(
26
    filepath: string,
27
    flags: string,
28
    process: (fileDescriptor: number) => Promise<T>
29
): Promise<T> {
30
    const fileDescriptor = await fsOpenPromise(filepath, flags)
31
    try {
32
        return await process(fileDescriptor)
33
    }
34
    finally {
35
        await fsClosePromise(fileDescriptor)
36
    }
37
}
38
39
export function getNextBufferSubarraySync(fileDescriptor: number, buffer: Buffer, offset: number = 0): Buffer {
40
    const bytesRead = fs.readSync(
41
        fileDescriptor,
42
        buffer,
43
        offset,
44
        buffer.length - offset,
45
        null
46
    )
47
    return buffer.subarray(0, bytesRead + offset)
48
}
49
50
export async function getNextBufferSubarrayAsync(fileDescriptor: number, buffer: Buffer, offset: number = 0): Promise<Buffer> {
51
    const bytesRead = (await fsReadPromise(
52
        fileDescriptor,
53
        buffer,
54
        offset,
55
        buffer.length - offset,
56
        null
57
    )).bytesRead
58
    return buffer.subarray(0, bytesRead + offset)
59
}