@onlabsorg/stilo
Version:
Command line tool for managing olojs document packages
69 lines (58 loc) • 1.38 kB
JavaScript
const {
readlinkSync,
readdirSync,
openSync,
readSync,
closeSync,
readFileSync,
existsSync,
} = require('fs');
const tmpBufMinLen = 4096 * 2;
const tmpBufMaxLen = 4096 * 8;
let tmpBuf = Buffer.allocUnsafeSlow(tmpBufMinLen);
const read = path => {
const fd = openSync(path, 'r', 0o666);
let pos = 0;
let bytesRead;
let buf = tmpBuf;
let length = buf.length;
do {
bytesRead = readSync(fd, buf, pos, buf.length - pos, null);
pos += bytesRead;
if (pos === tmpBuf.length) {
length = length << 1;
let newBuf = Buffer.allocUnsafeSlow(length);
if (length <= tmpBufMaxLen) {
tmpBuf = newBuf;
}
buf.copy(newBuf);
buf = newBuf;
}
} while (bytesRead !== 0);
closeSync(fd);
return buf.toString('utf8', 0, pos);
};
const readIdList = path => {
let ls = readdirSync(path);
for (let i = 0; i < ls.length; i++) {
ls[i] = parseInt(ls[i]);
}
return ls;
};
const readBuffer = readFileSync;
const exists = existsSync;
const readdir = readdirSync;
const devIdGetMinor = devId => (((devId >> 20) << 8) | (devId & 0xFF));
const devIdGetMajor = devId => ((devId >> 8) & 0xFF);
const devIdFromMajorMinor = (major, minor) => (((minor >> 8) << 20) | ((major & 0xFF) << 8) | (minor & 0xFF));
module.exports = {
read,
readLink: readlinkSync,
readIdList,
readBuffer,
exists,
readdir,
devIdGetMinor,
devIdGetMajor,
devIdFromMajorMinor,
};