UNPKG

nufatfs

Version:

A new async-friendly library for accessing FAT16 and FAT32 filesystems

36 lines (35 loc) 1.42 kB
"use strict"; 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;