molstar
Version:
A comprehensive macromolecular library.
65 lines • 2.62 kB
JavaScript
/**
* Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
* @author David Sehnal <david.sehnal@gmail.com>
*/
import * as fs from 'fs';
import { SimpleBuffer } from '../../mol-io/common/simple-buffer';
import { defaults, noop } from '../../mol-util';
export function fileHandleFromDescriptor(file, name) {
if (fs === undefined)
throw new Error('fs module not available');
return {
name: name,
readBuffer: function (position, sizeOrBuffer, length, byteOffset) {
return new Promise(function (res, rej) {
var outBuffer;
if (typeof sizeOrBuffer === 'number') {
byteOffset = defaults(byteOffset, 0);
length = defaults(length, sizeOrBuffer);
outBuffer = SimpleBuffer.fromArrayBuffer(new ArrayBuffer(sizeOrBuffer));
}
else {
byteOffset = defaults(byteOffset, 0);
length = defaults(length, sizeOrBuffer.length);
outBuffer = sizeOrBuffer;
}
fs.read(file, outBuffer, byteOffset, length, position, function (err, bytesRead, buffer) {
if (err) {
rej(err);
return;
}
if (length !== bytesRead) {
console.warn("byteCount " + length + " and bytesRead " + bytesRead + " differ");
}
res({ bytesRead: bytesRead, buffer: buffer });
});
});
},
writeBuffer: function (position, buffer, length) {
length = defaults(length, buffer.length);
return new Promise(function (res, rej) {
fs.write(file, buffer, 0, length, position, function (err, written) {
if (err)
rej(err);
else
res(written);
});
});
},
writeBufferSync: function (position, buffer, length) {
length = defaults(length, buffer.length);
return fs.writeSync(file, buffer, 0, length, position);
},
close: function () {
try {
if (file !== void 0)
fs.close(file, noop);
}
catch (e) {
}
}
};
}
//# sourceMappingURL=file-handle.js.map