nufatfs
Version:
A new async-friendly library for accessing FAT16 and FAT32 filesystems
36 lines (35 loc) • 1.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createOverlayDriver = void 0;
function createOverlayDriver(baseDriver) {
function overlap(a, b, x, y) {
const overlapStart = Math.max(a, x);
const overlapEnd = Math.min(b, y);
return overlapStart < overlapEnd ? [overlapStart, overlapEnd] : null;
}
function overlay(data, start, deltas) {
for (const delta of deltas) {
const olp = overlap(delta.at, delta.at + delta.data.length, start, start + data.length);
if (olp) {
const [olpStart, olpEnd] = olp;
const deltaOffset = olpStart - delta.at;
const dataOffset = olpStart - start;
data.set(delta.data.subarray(deltaOffset, deltaOffset + (olpEnd - olpStart)), dataOffset);
}
}
}
const newDriver = {
...baseDriver,
deltas: [],
async readSectors(startIndex, readSectors) {
const base = await baseDriver.readSectors(startIndex, readSectors);
overlay(base, startIndex * baseDriver.sectorSize, newDriver.deltas);
return base;
},
async writeSectors(startIndex, data) {
newDriver.deltas.push({ at: startIndex * baseDriver.sectorSize, data: data.slice() });
},
};
return newDriver;
}
exports.createOverlayDriver = createOverlayDriver;