UNPKG

taglib-wasm

Version:

TagLib-Wasm is the universal tagging library for TypeScript/JavaScript platforms: Browsers, Node.js, Deno, Bun, Cloudflare Workers, and Electron apps

67 lines (66 loc) 1.65 kB
import { FileOperationError } from "../errors/classes.js"; function mapOpenFlags(options) { if (options.create && options.truncate) return "w+"; if (options.create) return "a+"; if (options.write) return "r+"; return "r"; } function createNodeFileHandle(fs, fd) { let position = 0; return { readSync(target) { const n = fs.readSync(fd, target, 0, target.length, position); if (n === 0) return null; position += n; return n; }, writeSync(data) { const n = fs.writeSync(fd, data, 0, data.length, position); position += n; return n; }, seekSync(offset, whence) { if (whence === 0) { position = offset; } else if (whence === 1) { position += offset; } else { const stat = fs.fstatSync(fd); position = stat.size + offset; } if (position < 0) { throw new FileOperationError( "read", `Invalid seek position: ${position}` ); } return position; }, truncateSync(size) { fs.ftruncateSync(fd, size); }, close() { fs.closeSync(fd); } }; } async function createNodeFsProvider() { const fs = await import("node:fs"); const fsp = await import("node:fs/promises"); return { openSync(path, options) { const flags = mapOpenFlags(options); const fd = fs.openSync(path, flags); return createNodeFileHandle(fs, fd); }, async readFile(path) { return new Uint8Array(await fsp.readFile(path)); }, isNotFoundError(error) { return error?.code === "ENOENT"; } }; } export { createNodeFsProvider };