@mount0/core
Advanced tools
| import { FilesystemProvider, Flock, Statfs } from "./provider"; | ||
| import { DirEntry, FileStat } from "./types"; | ||
| export declare class RouterProvider implements FilesystemProvider { | ||
| readonly providers: { | ||
| path: string; | ||
| provider: FilesystemProvider; | ||
| }[]; | ||
| private inoToProvider; | ||
| private inoToProviderIno; | ||
| private rootDirHandles; | ||
| private nextRootDirFh; | ||
| private nextRouterIno; | ||
| constructor(providers: { | ||
| path: string; | ||
| provider: FilesystemProvider; | ||
| }[]); | ||
| private rootStat; | ||
| private firstProvider; | ||
| handle(path: string, provider: FilesystemProvider): void; | ||
| unhandle(path: string): void; | ||
| private resolveProvider; | ||
| private resolve; | ||
| private mapIno; | ||
| private remapStat; | ||
| private remapEntry; | ||
| private match; | ||
| private matchProvider; | ||
| private resolveParent; | ||
| lookup(parent: number, name: string): Promise<FileStat | null>; | ||
| getattr(ino: number, fh: number): Promise<FileStat | null>; | ||
| setattr(ino: number, fh: number, to_set: number, attr: FileStat): Promise<void>; | ||
| readdir(ino: number, fh: number, size: number, off: number): Promise<DirEntry[]>; | ||
| opendir(ino: number, flags: number): Promise<number>; | ||
| releasedir(ino: number, fh: number): Promise<void>; | ||
| fsyncdir(ino: number, fh: number, datasync: number): Promise<void>; | ||
| open(ino: number, flags: number, mode?: number): Promise<number>; | ||
| read(ino: number, fh: number, buffer: Buffer, off: number, length: number): Promise<number>; | ||
| write(ino: number, fh: number, buffer: Buffer, off: number, length: number): Promise<number>; | ||
| flush(ino: number, fh: number): Promise<void>; | ||
| fsync(ino: number, fh: number, datasync: number): Promise<void>; | ||
| release(ino: number, fh: number): Promise<void>; | ||
| create(parent: number, name: string, mode: number, flags: number): Promise<{ | ||
| stat: FileStat; | ||
| fh: number; | ||
| }>; | ||
| mknod(parent: number, name: string, mode: number, rdev: number): Promise<FileStat>; | ||
| mkdir(parent: number, name: string, mode: number): Promise<FileStat>; | ||
| unlink(parent: number, name: string): Promise<void>; | ||
| rmdir(parent: number, name: string): Promise<void>; | ||
| link(ino: number, newparent: number, newname: string): Promise<FileStat>; | ||
| symlink(link: string, parent: number, name: string): Promise<FileStat>; | ||
| readlink(ino: number): Promise<string>; | ||
| rename(parent: number, name: string, newparent: number, newname: string, flags: number): Promise<void>; | ||
| setxattr(ino: number, name: string, value: Buffer, size: number, flags: number): Promise<void>; | ||
| getxattr(ino: number, name: string, size: number): Promise<Buffer | number>; | ||
| listxattr(ino: number, size: number): Promise<Buffer | number>; | ||
| removexattr(ino: number, name: string): Promise<void>; | ||
| access(ino: number, mask: number): Promise<void>; | ||
| statfs(ino: number, fh: number): Promise<Statfs>; | ||
| getlk(ino: number, fh: number, lock: Flock): Promise<Flock>; | ||
| setlk(ino: number, fh: number, lock: Flock, sleep: number): Promise<void>; | ||
| flock(ino: number, fh: number, op: number): Promise<void>; | ||
| bmap(ino: number, blocksize: number, idx: number): Promise<number>; | ||
| ioctl(ino: number, fh: number, cmd: number, in_buf: Buffer | null, in_bufsz: number, out_bufsz: number, flags: number): Promise<{ | ||
| result: number; | ||
| out_buf?: Buffer; | ||
| }>; | ||
| poll(ino: number, fh: number): Promise<number>; | ||
| fallocate(ino: number, fh: number, offset: number, length: number, mode: number): Promise<void>; | ||
| readdirplus(ino: number, fh: number, size: number, off: number): Promise<DirEntry[]>; | ||
| copy_file_range(ino_in: number, fh_in: number, off_in: number, ino_out: number, fh_out: number, off_out: number, len: number, flags: number): Promise<number>; | ||
| lseek(ino: number, fh: number, off: number, whence: number): Promise<number>; | ||
| tmpfile(parent: number, mode: number, flags: number): Promise<{ | ||
| stat: FileStat; | ||
| fh: number; | ||
| }>; | ||
| forget(ino: number, nlookup: number): Promise<void>; | ||
| forget_multi(forgets: Array<{ | ||
| ino: number; | ||
| nlookup: number; | ||
| }>): Promise<void>; | ||
| } | ||
| //# sourceMappingURL=router.d.ts.map |
| {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"} |
+373
| export class RouterProvider { | ||
| providers; | ||
| inoToProvider = new Map(); | ||
| inoToProviderIno = new Map(); | ||
| rootDirHandles = new Map(); | ||
| nextRootDirFh = 1; | ||
| nextRouterIno = 1000000; | ||
| constructor(providers) { | ||
| this.providers = providers; | ||
| } | ||
| rootStat() { | ||
| return { | ||
| mode: 0o40755, | ||
| size: 0, | ||
| mtime: Math.floor(Date.now() / 1000), | ||
| ctime: Math.floor(Date.now() / 1000), | ||
| atime: Math.floor(Date.now() / 1000), | ||
| uid: 0, | ||
| gid: 0, | ||
| dev: 0, | ||
| ino: 1, | ||
| nlink: 1, | ||
| rdev: 0, | ||
| blksize: 4096, | ||
| blocks: 0, | ||
| }; | ||
| } | ||
| firstProvider() { | ||
| if (this.providers.length === 0) | ||
| throw new Error("No provider found"); | ||
| return this.providers[0].provider; | ||
| } | ||
| handle(path, provider) { | ||
| const normalized = path === "/" ? "/" : path.replace(/\/+$/, "") || "/"; | ||
| this.providers.push({ path: normalized, provider }); | ||
| this.providers.sort((a, b) => b.path.length - a.path.length); | ||
| } | ||
| unhandle(path) { | ||
| const normalized = path === "/" ? "/" : path.replace(/\/+$/, "") || "/"; | ||
| const index = this.providers.findIndex((rp) => rp.path === normalized); | ||
| if (index !== -1) | ||
| this.providers.splice(index, 1); | ||
| } | ||
| resolveProvider(ino) { | ||
| if (ino === 1) | ||
| return this.firstProvider(); | ||
| const p = this.inoToProvider.get(ino); | ||
| if (!p) | ||
| throw new Error(`Provider not found for inode ${ino}`); | ||
| return p; | ||
| } | ||
| resolve(ino) { | ||
| if (ino === 1) | ||
| return { provider: this.firstProvider(), providerIno: 1 }; | ||
| const provider = this.inoToProvider.get(ino); | ||
| if (!provider) | ||
| throw new Error(`Provider not found for inode ${ino}`); | ||
| return { provider, providerIno: this.inoToProviderIno.get(ino) || ino }; | ||
| } | ||
| mapIno(provider, providerIno) { | ||
| const routerIno = this.nextRouterIno++; | ||
| this.inoToProvider.set(routerIno, provider); | ||
| this.inoToProviderIno.set(routerIno, providerIno); | ||
| return routerIno; | ||
| } | ||
| remapStat(provider, stat) { | ||
| const routerIno = this.mapIno(provider, stat.ino); | ||
| return { ...stat, ino: routerIno }; | ||
| } | ||
| remapEntry(provider, entry) { | ||
| const routerIno = this.mapIno(provider, entry.ino); | ||
| return { ...entry, ino: routerIno }; | ||
| } | ||
| match(path) { | ||
| const matched = this.providers | ||
| .filter((rp) => { | ||
| if (rp.path === "/") | ||
| return true; | ||
| return path === rp.path || path.startsWith(rp.path + "/"); | ||
| }) | ||
| .sort((a, b) => b.path.length - a.path.length)[0]; | ||
| return matched || null; | ||
| } | ||
| matchProvider(path) { | ||
| const m = this.match(path); | ||
| return m ? m.provider : null; | ||
| } | ||
| resolveParent(parent, name) { | ||
| if (parent === 1) { | ||
| const path = `/${name}`; | ||
| const m = this.match(path); | ||
| if (!m) | ||
| throw new Error("No provider found"); | ||
| return { provider: m.provider, providerParent: 1 }; | ||
| } | ||
| const r = this.resolve(parent); | ||
| return { provider: r.provider, providerParent: r.providerIno }; | ||
| } | ||
| async lookup(parent, name) { | ||
| if (parent === 1) { | ||
| if (name === "." || name === "..") | ||
| return this.rootStat(); | ||
| const path = `/${name}`; | ||
| const m = this.match(path); | ||
| if (!m) | ||
| throw new Error("No provider found"); | ||
| if (m.path === "/") { | ||
| const stat = await m.provider.lookup(1, name); | ||
| if (stat) | ||
| return this.remapStat(m.provider, stat); | ||
| return null; | ||
| } | ||
| const stat = await m.provider.getattr(1, 0); | ||
| if (!stat) | ||
| return null; | ||
| const routerIno = this.mapIno(m.provider, stat.ino); | ||
| return { ...stat, ino: routerIno }; | ||
| } | ||
| const { provider, providerIno } = this.resolve(parent); | ||
| const stat = await provider.lookup(providerIno, name); | ||
| if (stat) | ||
| return this.remapStat(provider, stat); | ||
| return null; | ||
| } | ||
| async getattr(ino, fh) { | ||
| if (ino === 1) | ||
| return this.rootStat(); | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| const stat = await provider.getattr(providerIno, fh); | ||
| return stat; | ||
| } | ||
| async setattr(ino, fh, to_set, attr) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.setattr(providerIno, fh, to_set, attr); | ||
| } | ||
| async readdir(ino, fh, size, off) { | ||
| if (ino === 1) { | ||
| const topLevel = new Set(); | ||
| const mountEntries = await Promise.all(this.providers | ||
| .filter((rp) => { | ||
| if (rp.path === "/") | ||
| return false; | ||
| const parts = rp.path.split("/").filter((p) => p); | ||
| const top = `/${parts[0]}`; | ||
| if (topLevel.has(top)) | ||
| return false; | ||
| topLevel.add(top); | ||
| return rp.path === top; | ||
| }) | ||
| .map(async (rp) => { | ||
| const stat = await rp.provider.getattr(1, 0); | ||
| if (stat) { | ||
| const routerIno = this.mapIno(rp.provider, stat.ino); | ||
| return { name: rp.path.slice(1), mode: stat.mode, ino: routerIno }; | ||
| } | ||
| return null; | ||
| })); | ||
| const entries = mountEntries.filter((e) => e !== null); | ||
| const rootProvider = this.providers.find((rp) => rp.path === "/"); | ||
| if (rootProvider) { | ||
| const childEntries = await rootProvider.provider.readdir(1, fh, size, off); | ||
| const mountNames = new Set(entries.map((e) => e.name)); | ||
| const filtered = childEntries.filter((e) => !mountNames.has(e.name)); | ||
| entries.push(...filtered.map((e) => this.remapEntry(rootProvider.provider, e))); | ||
| } | ||
| return entries.slice(off); | ||
| } | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| const entries = await provider.readdir(providerIno, fh, size, off); | ||
| return entries.map((e) => this.remapEntry(provider, e)); | ||
| } | ||
| async opendir(ino, flags) { | ||
| if (ino === 1) { | ||
| const fh = this.nextRootDirFh++; | ||
| this.rootDirHandles.set(fh, 1); | ||
| return fh; | ||
| } | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.opendir(providerIno, flags); | ||
| } | ||
| async releasedir(ino, fh) { | ||
| if (ino === 1) { | ||
| this.rootDirHandles.delete(fh); | ||
| return; | ||
| } | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.releasedir(providerIno, fh); | ||
| } | ||
| async fsyncdir(ino, fh, datasync) { | ||
| if (ino === 1) | ||
| return; | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.fsyncdir(providerIno, fh, datasync); | ||
| } | ||
| async open(ino, flags, mode) { | ||
| if (ino === 1) | ||
| throw new Error("Operation not supported on root"); | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.open(providerIno, flags, mode); | ||
| } | ||
| async read(ino, fh, buffer, off, length) { | ||
| if (ino === 1) | ||
| throw new Error("Cannot read root directory as file"); | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.read(providerIno, fh, buffer, off, length); | ||
| } | ||
| async write(ino, fh, buffer, off, length) { | ||
| if (ino === 1) | ||
| throw new Error("Cannot write to root directory"); | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.write(providerIno, fh, buffer, off, length); | ||
| } | ||
| async flush(ino, fh) { | ||
| if (ino === 1) | ||
| return; | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.flush(providerIno, fh); | ||
| } | ||
| async fsync(ino, fh, datasync) { | ||
| if (ino === 1) | ||
| return; | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.fsync(providerIno, fh, datasync); | ||
| } | ||
| async release(ino, fh) { | ||
| if (ino === 1) | ||
| return; | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.release(providerIno, fh); | ||
| } | ||
| async create(parent, name, mode, flags) { | ||
| const { provider, providerParent } = this.resolveParent(parent, name); | ||
| const result = await provider.create(providerParent, name, mode, flags); | ||
| return { stat: this.remapStat(provider, result.stat), fh: result.fh }; | ||
| } | ||
| async mknod(parent, name, mode, rdev) { | ||
| const { provider, providerParent } = this.resolveParent(parent, name); | ||
| const stat = await provider.mknod(providerParent, name, mode, rdev); | ||
| return this.remapStat(provider, stat); | ||
| } | ||
| async mkdir(parent, name, mode) { | ||
| const { provider, providerParent } = this.resolveParent(parent, name); | ||
| const stat = await provider.mkdir(providerParent, name, mode); | ||
| return this.remapStat(provider, stat); | ||
| } | ||
| async unlink(parent, name) { | ||
| const { provider, providerParent } = this.resolveParent(parent, name); | ||
| return provider.unlink(providerParent, name); | ||
| } | ||
| async rmdir(parent, name) { | ||
| const { provider, providerParent } = this.resolveParent(parent, name); | ||
| return provider.rmdir(providerParent, name); | ||
| } | ||
| async link(ino, newparent, newname) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| const { provider: np, providerParent: npp } = this.resolveParent(newparent, newname); | ||
| if (provider !== np) | ||
| throw new Error("Cross-provider hard links not supported"); | ||
| const stat = await provider.link(providerIno, npp, newname); | ||
| return this.remapStat(provider, stat); | ||
| } | ||
| async symlink(link, parent, name) { | ||
| const { provider, providerParent } = this.resolveParent(parent, name); | ||
| const stat = await provider.symlink(link, providerParent, name); | ||
| return this.remapStat(provider, stat); | ||
| } | ||
| async readlink(ino) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.readlink(providerIno); | ||
| } | ||
| async rename(parent, name, newparent, newname, flags) { | ||
| const { provider, providerParent } = this.resolveParent(parent, name); | ||
| const { provider: np, providerParent: npp } = this.resolveParent(newparent, newname); | ||
| if (provider !== np) | ||
| throw new Error("Cross-provider rename not supported"); | ||
| return provider.rename(providerParent, name, npp, newname, flags); | ||
| } | ||
| async setxattr(ino, name, value, size, flags) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.setxattr(providerIno, name, value, size, flags); | ||
| } | ||
| async getxattr(ino, name, size) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.getxattr(providerIno, name, size); | ||
| } | ||
| async listxattr(ino, size) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.listxattr(providerIno, size); | ||
| } | ||
| async removexattr(ino, name) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.removexattr(providerIno, name); | ||
| } | ||
| async access(ino, mask) { | ||
| if (ino === 1) | ||
| return; | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.access(providerIno, mask); | ||
| } | ||
| async statfs(ino, fh) { | ||
| if (ino === 1) | ||
| return this.firstProvider().statfs(1, fh); | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.statfs(providerIno, fh); | ||
| } | ||
| async getlk(ino, fh, lock) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.getlk(providerIno, fh, lock); | ||
| } | ||
| async setlk(ino, fh, lock, sleep) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.setlk(providerIno, fh, lock, sleep); | ||
| } | ||
| async flock(ino, fh, op) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.flock(providerIno, fh, op); | ||
| } | ||
| async bmap(ino, blocksize, idx) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.bmap(providerIno, blocksize, idx); | ||
| } | ||
| async ioctl(ino, fh, cmd, in_buf, in_bufsz, out_bufsz, flags) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.ioctl(providerIno, fh, cmd, in_buf, in_bufsz, out_bufsz, flags); | ||
| } | ||
| async poll(ino, fh) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.poll(providerIno, fh); | ||
| } | ||
| async fallocate(ino, fh, offset, length, mode) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.fallocate(providerIno, fh, offset, length, mode); | ||
| } | ||
| async readdirplus(ino, fh, size, off) { | ||
| if (ino === 1) | ||
| return this.readdir(ino, fh, size, off); | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| const entries = await provider.readdirplus(providerIno, fh, size, off); | ||
| return entries.map((e) => this.remapEntry(provider, e)); | ||
| } | ||
| async copy_file_range(ino_in, fh_in, off_in, ino_out, fh_out, off_out, len, flags) { | ||
| const { provider: p1, providerIno: pi1 } = this.resolve(ino_in); | ||
| const { provider: p2, providerIno: pi2 } = this.resolve(ino_out); | ||
| if (p1 !== p2) | ||
| throw new Error("Cross-provider copy not supported"); | ||
| return p1.copy_file_range(pi1, fh_in, off_in, pi2, fh_out, off_out, len, flags); | ||
| } | ||
| async lseek(ino, fh, off, whence) { | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| return provider.lseek(providerIno, fh, off, whence); | ||
| } | ||
| async tmpfile(parent, mode, flags) { | ||
| const { provider, providerParent } = this.resolveParent(parent, ""); | ||
| const result = await provider.tmpfile(providerParent, mode, flags); | ||
| return { stat: this.remapStat(provider, result.stat), fh: result.fh }; | ||
| } | ||
| async forget(ino, nlookup) { | ||
| if (ino === 1) | ||
| return; | ||
| const { provider, providerIno } = this.resolve(ino); | ||
| if (provider.forget) { | ||
| await provider.forget(providerIno, nlookup); | ||
| } | ||
| this.inoToProvider.delete(ino); | ||
| this.inoToProviderIno.delete(ino); | ||
| } | ||
| async forget_multi(forgets) { | ||
| for (const forget of forgets) { | ||
| await this.forget(forget.ino, forget.nlookup); | ||
| } | ||
| } | ||
| } | ||
| //# sourceMappingURL=router.js.map |
| {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"} |
+3
-3
@@ -1,6 +0,6 @@ | ||
| import { FileSystem } from './filesystem'; | ||
| import { FilesystemProvider } from "./provider"; | ||
| export declare class FuseBridge { | ||
| private fs; | ||
| private provider; | ||
| private mounted; | ||
| constructor(fs: FileSystem); | ||
| constructor(provider: FilesystemProvider); | ||
| mount(mountpoint: string, options?: Record<string, string>): Promise<void>; | ||
@@ -7,0 +7,0 @@ unmount(): Promise<void>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1C,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,OAAO,CAAkB;gBAErB,EAAE,EAAE,UAAU;IAIpB,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B9E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAMhB,eAAe;CA2F9B"} | ||
| {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKhD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,OAAO,CAAkB;gBAErB,QAAQ,EAAE,kBAAkB;IAIlC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC9E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAOhB,eAAe;CAoU9B"} |
+282
-66
@@ -1,36 +0,49 @@ | ||
| import { createRequire } from 'module'; | ||
| import { createRequire } from "module"; | ||
| const requireNative = createRequire(import.meta.url); | ||
| const mount0_fuse = requireNative('../build/Release/mount0_fuse.node'); | ||
| const mount0_fuse = requireNative("../build/Release/mount0_fuse.node"); | ||
| export class FuseBridge { | ||
| fs; | ||
| provider; | ||
| mounted = false; | ||
| constructor(fs) { | ||
| this.fs = fs; | ||
| constructor(provider) { | ||
| this.provider = provider; | ||
| } | ||
| async mount(mountpoint, options = {}) { | ||
| if (this.mounted) | ||
| throw new Error('Already mounted'); | ||
| const handler = async (id, params) => { | ||
| const op = params.op; | ||
| if (process.env.MOUNT0_DEBUG === '1') | ||
| console.log(`[${op}]`, params); | ||
| throw new Error("Already mounted"); | ||
| const handler = async (reqPtr, params) => { | ||
| try { | ||
| await this.handleOperation(id, op, params); | ||
| await this.handleOperation(reqPtr, params); | ||
| } | ||
| catch (err) { | ||
| const errnoMap = { | ||
| ENOENT: 2, | ||
| EIO: 5, | ||
| EACCES: 13, | ||
| EEXIST: 17, | ||
| ENOTDIR: 20, | ||
| EISDIR: 21, | ||
| EINVAL: 22, | ||
| ENOSPC: 28, | ||
| }; | ||
| const errno = err.errno || (err.code && errnoMap[err.code]) || 5; | ||
| mount0_fuse.reply_err(id, errno); | ||
| let errno; | ||
| if (err.errno !== undefined && err.errno !== null) { | ||
| errno = err.errno < 0 ? -err.errno : err.errno > 0 ? err.errno : 5; | ||
| } | ||
| else if (err.code === "ENOENT") { | ||
| errno = 2; | ||
| } | ||
| else if (err.code === "ENODATA" || err.code === "ENOATTR") { | ||
| errno = 61; | ||
| } | ||
| else if (err.code === "EIO") { | ||
| errno = 5; | ||
| } | ||
| else if (err.code === "ENOSYS") { | ||
| errno = 38; | ||
| } | ||
| else if (err.message && (err.message.includes("not supported") || err.message.includes("not implemented"))) { | ||
| errno = 38; | ||
| } | ||
| else { | ||
| errno = 5; | ||
| } | ||
| if (process.env.MOUNT0_DEBUG === "1") { | ||
| const op = params?.op || "unknown"; | ||
| const errMsg = err?.message || (typeof err === "string" ? err : JSON.stringify(err)); | ||
| console.error(`[FUSE:error] op=${op}, err=${errMsg}, errno=${err.errno}, code=${err.code}, final_errno=${errno}`); | ||
| } | ||
| mount0_fuse.reply_err(reqPtr, errno); | ||
| } | ||
| }; | ||
| await mount0_fuse.mount(mountpoint, { allow_other: '0', ...options }, handler); | ||
| await mount0_fuse.mount(mountpoint, { allow_other: "0", ...options }, handler); | ||
| this.mounted = true; | ||
@@ -44,72 +57,275 @@ } | ||
| } | ||
| async handleOperation(id, op, params) { | ||
| async handleOperation(reqPtr, params) { | ||
| if (!params) | ||
| throw new Error("params is undefined"); | ||
| const op = params.op; | ||
| if (op === "init" || op === "destroy") { | ||
| if (op === "init" && this.provider.init) | ||
| await this.provider.init(); | ||
| else if (op === "destroy" && this.provider.destroy) | ||
| await this.provider.destroy(); | ||
| return; | ||
| } | ||
| switch (op) { | ||
| case 'lookup': { | ||
| const stat = await this.fs.getattr(params.path); | ||
| case "forget": { | ||
| if (this.provider.forget) { | ||
| await this.provider.forget(params.ino, params.nlookup); | ||
| } | ||
| mount0_fuse.reply_none(reqPtr); | ||
| break; | ||
| } | ||
| case "forget_multi": { | ||
| if (this.provider.forget_multi) { | ||
| const forgets = []; | ||
| const inos = params.inos || []; | ||
| const nlookups = params.nlookups || []; | ||
| for (let i = 0; i < params.count && i < inos.length && i < nlookups.length; i++) { | ||
| forgets.push({ ino: inos[i], nlookup: nlookups[i] }); | ||
| } | ||
| await this.provider.forget_multi(forgets); | ||
| } | ||
| mount0_fuse.reply_none(reqPtr); | ||
| break; | ||
| } | ||
| case "retrieve_reply": { | ||
| if (this.provider.retrieve_reply) { | ||
| const buf = params.data || Buffer.alloc(0); | ||
| await this.provider.retrieve_reply(params.ino, params.cookie, params.offset, buf); | ||
| } | ||
| mount0_fuse.reply_none(reqPtr); | ||
| break; | ||
| } | ||
| case "lookup": { | ||
| const stat = await this.provider.lookup(params.parent, params.name); | ||
| if (!stat) | ||
| throw { code: 'ENOENT', errno: 2 }; | ||
| mount0_fuse.reply_lookup(id, stat); | ||
| throw { code: "ENOENT", errno: -2 }; | ||
| mount0_fuse.reply_lookup(reqPtr, stat); | ||
| break; | ||
| } | ||
| case 'getattr': { | ||
| const stat = await this.fs.getattr(params.path); | ||
| case "getattr": { | ||
| const stat = await this.provider.getattr(params.ino, params.fh); | ||
| if (!stat) | ||
| throw { code: 'ENOENT', errno: 2 }; | ||
| mount0_fuse.reply_getattr(id, stat); | ||
| throw { code: "ENOENT", errno: -2 }; | ||
| mount0_fuse.reply_getattr(reqPtr, stat); | ||
| break; | ||
| } | ||
| case 'readdir': { | ||
| const entries = await this.fs.readdir(params.path); | ||
| mount0_fuse.reply_readdir(id, entries.map((e) => e.name)); | ||
| case "setattr": { | ||
| await this.provider.setattr(params.ino, params.fh, params.to_set, params.attr); | ||
| mount0_fuse.reply_getattr(reqPtr, await this.provider.getattr(params.ino, params.fh)); | ||
| break; | ||
| } | ||
| case 'open': { | ||
| await this.fs.open(params.path, params.flags); | ||
| mount0_fuse.reply_open(id, 0); | ||
| case "readdir": { | ||
| const entries = await this.provider.readdir(params.ino, params.fh, params.size, params.off); | ||
| mount0_fuse.reply_readdir(reqPtr, entries || []); | ||
| break; | ||
| } | ||
| case 'read': { | ||
| const handle = { path: params.path, fd: 0, flags: 0 }; | ||
| case "opendir": { | ||
| const fh = await this.provider.opendir(params.ino, params.flags); | ||
| mount0_fuse.reply_opendir(reqPtr, fh); | ||
| break; | ||
| } | ||
| case "releasedir": { | ||
| await this.provider.releasedir(params.ino, params.fh); | ||
| mount0_fuse.reply_releasedir(reqPtr, 0); | ||
| break; | ||
| } | ||
| case "fsyncdir": { | ||
| await this.provider.fsyncdir(params.ino, params.fh, params.datasync); | ||
| mount0_fuse.reply_fsyncdir(reqPtr, 0); | ||
| break; | ||
| } | ||
| case "open": { | ||
| const fh = await this.provider.open(params.ino, params.flags); | ||
| mount0_fuse.reply_open(reqPtr, fh); | ||
| break; | ||
| } | ||
| case "read": { | ||
| const buf = Buffer.alloc(params.size); | ||
| const bytesRead = await this.fs.read(handle, buf, params.offset, params.size); | ||
| mount0_fuse.reply_read(id, buf.subarray(0, bytesRead).toString('binary')); | ||
| const bytesRead = await this.provider.read(params.ino, params.fh, buf, params.off, params.size); | ||
| mount0_fuse.reply_read(reqPtr, buf.subarray(0, bytesRead)); | ||
| break; | ||
| } | ||
| case 'write': { | ||
| const handle = { path: params.path, fd: 0, flags: 0 }; | ||
| const buf = Buffer.from(params.data, 'binary'); | ||
| const bytesWritten = await this.fs.write(handle, buf, params.offset, params.size); | ||
| mount0_fuse.reply_write(id, bytesWritten); | ||
| case "write": { | ||
| const buf = params.data || Buffer.alloc(0); | ||
| const bytesWritten = await this.provider.write(params.ino, params.fh, buf, params.off, params.size); | ||
| mount0_fuse.reply_write(reqPtr, bytesWritten); | ||
| break; | ||
| } | ||
| case 'create': { | ||
| await this.fs.create(params.path, params.mode); | ||
| mount0_fuse.reply_create(id, 0); | ||
| case "write_buf": { | ||
| const buf = params.data || Buffer.alloc(0); | ||
| const bytesWritten = await this.provider.write(params.ino, params.fh, buf, params.off, params.size); | ||
| mount0_fuse.reply_write(reqPtr, bytesWritten); | ||
| break; | ||
| } | ||
| case 'unlink': { | ||
| await this.fs.unlink(params.path); | ||
| mount0_fuse.reply_unlink(id, 0); | ||
| case "flush": { | ||
| await this.provider.flush(params.ino, params.fh); | ||
| mount0_fuse.reply_flush(reqPtr, 0); | ||
| break; | ||
| } | ||
| case 'mkdir': { | ||
| await this.fs.mkdir(params.path, params.mode); | ||
| mount0_fuse.reply_mkdir(id, 0); | ||
| case "fsync": { | ||
| await this.provider.fsync(params.ino, params.fh, params.datasync); | ||
| mount0_fuse.reply_fsync(reqPtr, 0); | ||
| break; | ||
| } | ||
| case 'rmdir': { | ||
| await this.fs.rmdir(params.path); | ||
| mount0_fuse.reply_rmdir(id, 0); | ||
| case "release": { | ||
| await this.provider.release(params.ino, params.fh); | ||
| mount0_fuse.reply_release(reqPtr); | ||
| break; | ||
| } | ||
| case 'rename': { | ||
| await this.fs.rename(params.oldpath, params.newpath); | ||
| mount0_fuse.reply_rename(id, 0); | ||
| case "create": { | ||
| const result = await this.provider.create(params.parent, params.name, params.mode, params.flags); | ||
| mount0_fuse.reply_create(reqPtr, result.stat, result.fh); | ||
| break; | ||
| } | ||
| case 'truncate': { | ||
| await this.fs.truncate(params.path, params.length); | ||
| mount0_fuse.reply_truncate(id, 0); | ||
| case "mknod": { | ||
| const stat = await this.provider.mknod(params.parent, params.name, params.mode, params.rdev); | ||
| mount0_fuse.reply_mknod(reqPtr, stat); | ||
| break; | ||
| } | ||
| case "mkdir": { | ||
| const stat = await this.provider.mkdir(params.parent, params.name, params.mode); | ||
| mount0_fuse.reply_lookup(reqPtr, stat); | ||
| break; | ||
| } | ||
| case "unlink": { | ||
| await this.provider.unlink(params.parent, params.name); | ||
| mount0_fuse.reply_unlink(reqPtr, 0); | ||
| break; | ||
| } | ||
| case "rmdir": { | ||
| await this.provider.rmdir(params.parent, params.name); | ||
| mount0_fuse.reply_rmdir(reqPtr, 0); | ||
| break; | ||
| } | ||
| case "link": { | ||
| const stat = await this.provider.link(params.ino, params.newparent, params.newname); | ||
| mount0_fuse.reply_link(reqPtr, stat); | ||
| break; | ||
| } | ||
| case "symlink": { | ||
| const stat = await this.provider.symlink(params.link, params.parent, params.name); | ||
| mount0_fuse.reply_symlink(reqPtr, stat); | ||
| break; | ||
| } | ||
| case "readlink": { | ||
| const link = await this.provider.readlink(params.ino); | ||
| mount0_fuse.reply_readlink(reqPtr, link); | ||
| break; | ||
| } | ||
| case "rename": { | ||
| await this.provider.rename(params.parent, params.name, params.newparent, params.newname, params.flags); | ||
| mount0_fuse.reply_rename(reqPtr, 0); | ||
| break; | ||
| } | ||
| case "setxattr": { | ||
| const value = params.value || Buffer.alloc(0); | ||
| await this.provider.setxattr(params.ino, params.name, value, params.size, params.flags); | ||
| mount0_fuse.reply_setxattr(reqPtr, 0); | ||
| break; | ||
| } | ||
| case "getxattr": { | ||
| const result = await this.provider.getxattr(params.ino, params.name, params.size); | ||
| if (typeof result === "number") { | ||
| mount0_fuse.reply_xattr(reqPtr, result); | ||
| } | ||
| else { | ||
| mount0_fuse.reply_getxattr(reqPtr, result); | ||
| } | ||
| break; | ||
| } | ||
| case "listxattr": { | ||
| const result = await this.provider.listxattr(params.ino, params.size); | ||
| if (typeof result === "number") { | ||
| mount0_fuse.reply_xattr(reqPtr, result); | ||
| } | ||
| else { | ||
| mount0_fuse.reply_listxattr(reqPtr, result); | ||
| } | ||
| break; | ||
| } | ||
| case "removexattr": { | ||
| await this.provider.removexattr(params.ino, params.name); | ||
| mount0_fuse.reply_removexattr(reqPtr, 0); | ||
| break; | ||
| } | ||
| case "access": { | ||
| await this.provider.access(params.ino, params.mask); | ||
| mount0_fuse.reply_access(reqPtr, 0); | ||
| break; | ||
| } | ||
| case "statfs": { | ||
| const statfs = await this.provider.statfs(params.ino, params.fh); | ||
| mount0_fuse.reply_statfs(reqPtr, statfs); | ||
| break; | ||
| } | ||
| case "getlk": { | ||
| const lock = await this.provider.getlk(params.ino, params.fh, params.lock); | ||
| mount0_fuse.reply_getlk(reqPtr, lock); | ||
| break; | ||
| } | ||
| case "setlk": { | ||
| await this.provider.setlk(params.ino, params.fh, params.lock, params.sleep); | ||
| mount0_fuse.reply_setlk(reqPtr, 0); | ||
| break; | ||
| } | ||
| case "flock": { | ||
| await this.provider.flock(params.ino, params.fh, params.op); | ||
| mount0_fuse.reply_flock(reqPtr, 0); | ||
| break; | ||
| } | ||
| case "bmap": { | ||
| const idx = await this.provider.bmap(params.ino, params.blocksize, params.idx); | ||
| mount0_fuse.reply_bmap(reqPtr, idx); | ||
| break; | ||
| } | ||
| case "ioctl": { | ||
| const inBuf = params.in_buf || null; | ||
| const result = await this.provider.ioctl(params.ino, params.fh, params.cmd, inBuf, params.in_bufsz, params.out_bufsz, params.flags); | ||
| mount0_fuse.reply_ioctl(reqPtr, result.result, result.out_buf); | ||
| break; | ||
| } | ||
| case "poll": { | ||
| const revents = await this.provider.poll(params.ino, params.fh); | ||
| mount0_fuse.reply_poll(reqPtr, revents); | ||
| break; | ||
| } | ||
| case "fallocate": { | ||
| await this.provider.fallocate(params.ino, params.fh, params.offset, params.length, params.mode); | ||
| mount0_fuse.reply_fallocate(reqPtr, 0); | ||
| break; | ||
| } | ||
| case "readdirplus": { | ||
| const entries = await this.provider.readdirplus(params.ino, params.fh, params.size, params.off); | ||
| mount0_fuse.reply_readdirplus(reqPtr, entries || []); | ||
| break; | ||
| } | ||
| case "statx": { | ||
| if (this.provider.statx) { | ||
| await this.provider.statx(params.ino, params.flags, params.mask); | ||
| const stat = await this.provider.getattr(params.ino, 0); | ||
| if (stat) | ||
| mount0_fuse.reply_getattr(reqPtr, stat); | ||
| else | ||
| mount0_fuse.reply_err(reqPtr, 2); | ||
| } | ||
| else { | ||
| mount0_fuse.reply_err(reqPtr, 38); | ||
| } | ||
| break; | ||
| } | ||
| case "copy_file_range": { | ||
| const bytesWritten = await this.provider.copy_file_range(params.ino_in, params.fh_in, params.off_in, params.ino_out, params.fh_out, params.off_out, params.len, params.flags); | ||
| mount0_fuse.reply_copy_file_range(reqPtr, bytesWritten); | ||
| break; | ||
| } | ||
| case "lseek": { | ||
| const off = await this.provider.lseek(params.ino, params.fh, params.off, params.whence); | ||
| mount0_fuse.reply_lseek(reqPtr, off); | ||
| break; | ||
| } | ||
| case "tmpfile": { | ||
| const result = await this.provider.tmpfile(params.parent, params.mode, params.flags); | ||
| mount0_fuse.reply_tmpfile(reqPtr, result.stat, result.fh); | ||
| break; | ||
| } | ||
| default: | ||
@@ -116,0 +332,0 @@ throw new Error(`Unknown operation: ${op}`); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"} |
+3
-3
@@ -1,4 +0,4 @@ | ||
| export { Mount0, MountOptions, mount0 } from './mount0'; | ||
| export { FilesystemProvider } from './provider'; | ||
| export { DirEntry, FileHandle, FileStat } from './types'; | ||
| export { Mount0, MountOptions, mount0 } from "./mount0"; | ||
| export { FilesystemProvider, Flock, Statfs } from "./provider"; | ||
| export { DirEntry, FileHandle, FileStat } from "./types"; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC"} |
+1
-1
@@ -1,2 +0,2 @@ | ||
| export { Mount0, mount0 } from './mount0'; | ||
| export { Mount0, mount0 } from "./mount0"; | ||
| //# sourceMappingURL=index.js.map |
+3
-2
@@ -1,2 +0,2 @@ | ||
| import { FilesystemProvider } from './provider'; | ||
| import { FilesystemProvider } from "./provider"; | ||
| export interface MountOptions { | ||
@@ -6,5 +6,6 @@ options?: Record<string, string>; | ||
| export declare class Mount0 { | ||
| private handlers; | ||
| private bridge; | ||
| private router; | ||
| handle(path: string, provider: FilesystemProvider): this; | ||
| unhandle(path: string): this; | ||
| mount(mountpoint: string, options?: MountOptions): Promise<void>; | ||
@@ -11,0 +12,0 @@ unmount(): Promise<void>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"mount0.d.ts","sourceRoot":"","sources":["../src/mount0.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,MAAM,CAA2B;IAEzC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAKlD,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B;AAED,wBAAgB,MAAM,IAAI,MAAM,CAE/B"} | ||
| {"version":3,"file":"mount0.d.ts","sourceRoot":"","sources":["../src/mount0.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,MAAM,CAA+B;IAE7C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAQxD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOtB,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAShE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAO/B;AAED,wBAAgB,MAAM,IAAI,MAAM,CAE/B"} |
+18
-6
@@ -1,13 +0,24 @@ | ||
| import { FuseBridge } from './bridge'; | ||
| import { FileSystem } from './filesystem'; | ||
| import { FuseBridge } from "./bridge"; | ||
| import { RouterProvider } from "./router"; | ||
| export class Mount0 { | ||
| handlers = new Map(); | ||
| bridge = null; | ||
| router = null; | ||
| handle(path, provider) { | ||
| this.handlers.set(path, provider); | ||
| if (!this.router) { | ||
| this.router = new RouterProvider([]); | ||
| } | ||
| this.router.handle(path, provider); | ||
| return this; | ||
| } | ||
| unhandle(path) { | ||
| if (this.router) { | ||
| this.router.unhandle(path); | ||
| } | ||
| return this; | ||
| } | ||
| async mount(mountpoint, options) { | ||
| const fs = new FileSystem(this.handlers); | ||
| this.bridge = new FuseBridge(fs); | ||
| if (!this.router || this.router.providers.length === 0) { | ||
| throw new Error("No provider set. Call handle() first."); | ||
| } | ||
| this.bridge = new FuseBridge(this.router); | ||
| await this.bridge.mount(mountpoint, options?.options || {}); | ||
@@ -19,2 +30,3 @@ } | ||
| this.bridge = null; | ||
| this.router = null; | ||
| } | ||
@@ -21,0 +33,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"mount0.js","sourceRoot":"","sources":["../src/mount0.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,MAAM,OAAO,MAAM;IACT,QAAQ,GAAoC,IAAI,GAAG,EAAE,CAAC;IACtD,MAAM,GAAsB,IAAI,CAAC;IAEzC,MAAM,CAAC,IAAY,EAAE,QAA4B;QAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,OAAsB;QACpD,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAEjC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,IAAI,MAAM,EAAE,CAAC;AACtB,CAAC"} | ||
| {"version":3,"file":"mount0.js","sourceRoot":"","sources":["../src/mount0.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM1C,MAAM,OAAO,MAAM;IACT,MAAM,GAAsB,IAAI,CAAC;IACjC,MAAM,GAA0B,IAAI,CAAC;IAE7C,MAAM,CAAC,IAAY,EAAE,QAA4B;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,OAAsB;QACpD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,IAAI,MAAM,EAAE,CAAC;AACtB,CAAC"} |
+74
-13
@@ -1,16 +0,77 @@ | ||
| import { DirEntry, FileHandle, FileStat } from './types'; | ||
| import { DirEntry, FileStat } from "./types"; | ||
| export interface Statfs { | ||
| bsize: number; | ||
| blocks: number; | ||
| bfree: number; | ||
| bavail: number; | ||
| files: number; | ||
| ffree: number; | ||
| } | ||
| export interface Flock { | ||
| type: number; | ||
| whence: number; | ||
| start: number; | ||
| len: number; | ||
| pid: number; | ||
| } | ||
| export interface FilesystemProvider { | ||
| getattr(path: string): Promise<FileStat | null>; | ||
| readdir(path: string): Promise<DirEntry[]>; | ||
| open(path: string, flags: number, mode?: number): Promise<FileHandle>; | ||
| read(handle: FileHandle, buffer: Buffer, offset: number, length: number): Promise<number>; | ||
| write(handle: FileHandle, buffer: Buffer, offset: number, length: number): Promise<number>; | ||
| create(path: string, mode: number): Promise<FileHandle>; | ||
| unlink(path: string): Promise<void>; | ||
| mkdir(path: string, mode: number): Promise<void>; | ||
| rmdir(path: string): Promise<void>; | ||
| rename(oldpath: string, newpath: string): Promise<void>; | ||
| truncate(path: string, length: number): Promise<void>; | ||
| close(handle: FileHandle): Promise<void>; | ||
| init?(): Promise<void>; | ||
| destroy?(): Promise<void>; | ||
| forget?(ino: number, nlookup: number): Promise<void>; | ||
| forget_multi?(forgets: Array<{ | ||
| ino: number; | ||
| nlookup: number; | ||
| }>): Promise<void>; | ||
| lookup(parent: number, name: string): Promise<FileStat | null>; | ||
| getattr(ino: number, fh: number): Promise<FileStat | null>; | ||
| setattr(ino: number, fh: number, to_set: number, attr: FileStat): Promise<void>; | ||
| readdir(ino: number, fh: number, size: number, off: number): Promise<DirEntry[]>; | ||
| opendir(ino: number, flags: number): Promise<number>; | ||
| releasedir(ino: number, fh: number): Promise<void>; | ||
| fsyncdir(ino: number, fh: number, datasync: number): Promise<void>; | ||
| open(ino: number, flags: number, mode?: number): Promise<number>; | ||
| read(ino: number, fh: number, buffer: Buffer, off: number, length: number): Promise<number>; | ||
| write(ino: number, fh: number, buffer: Buffer, off: number, length: number): Promise<number>; | ||
| write_buf?(ino: number, fh: number, buffer: Buffer, off: number, size: number): Promise<number>; | ||
| flush(ino: number, fh: number): Promise<void>; | ||
| fsync(ino: number, fh: number, datasync: number): Promise<void>; | ||
| release(ino: number, fh: number): Promise<void>; | ||
| create(parent: number, name: string, mode: number, flags: number): Promise<{ | ||
| stat: FileStat; | ||
| fh: number; | ||
| }>; | ||
| mknod(parent: number, name: string, mode: number, rdev: number): Promise<FileStat>; | ||
| mkdir(parent: number, name: string, mode: number): Promise<FileStat>; | ||
| unlink(parent: number, name: string): Promise<void>; | ||
| rmdir(parent: number, name: string): Promise<void>; | ||
| link(ino: number, newparent: number, newname: string): Promise<FileStat>; | ||
| symlink(link: string, parent: number, name: string): Promise<FileStat>; | ||
| readlink(ino: number): Promise<string>; | ||
| rename(parent: number, name: string, newparent: number, newname: string, flags: number): Promise<void>; | ||
| setxattr(ino: number, name: string, value: Buffer, size: number, flags: number): Promise<void>; | ||
| getxattr(ino: number, name: string, size: number): Promise<Buffer | number>; | ||
| listxattr(ino: number, size: number): Promise<Buffer | number>; | ||
| removexattr(ino: number, name: string): Promise<void>; | ||
| access(ino: number, mask: number): Promise<void>; | ||
| statfs(ino: number, fh: number): Promise<Statfs>; | ||
| getlk(ino: number, fh: number, lock: Flock): Promise<Flock>; | ||
| setlk(ino: number, fh: number, lock: Flock, sleep: number): Promise<void>; | ||
| flock(ino: number, fh: number, op: number): Promise<void>; | ||
| bmap(ino: number, blocksize: number, idx: number): Promise<number>; | ||
| ioctl(ino: number, fh: number, cmd: number, in_buf: Buffer | null, in_bufsz: number, out_bufsz: number, flags: number): Promise<{ | ||
| result: number; | ||
| out_buf?: Buffer; | ||
| }>; | ||
| poll(ino: number, fh: number): Promise<number>; | ||
| fallocate(ino: number, fh: number, offset: number, length: number, mode: number): Promise<void>; | ||
| readdirplus(ino: number, fh: number, size: number, off: number): Promise<DirEntry[]>; | ||
| retrieve_reply?(ino: number, cookie: number, offset: number, buffer: Buffer): Promise<void>; | ||
| statx?(ino: number, flags: number, mask: number): Promise<FileStat | null>; | ||
| copy_file_range(ino_in: number, fh_in: number, off_in: number, ino_out: number, fh_out: number, off_out: number, len: number, flags: number): Promise<number>; | ||
| lseek(ino: number, fh: number, off: number, whence: number): Promise<number>; | ||
| tmpfile(parent: number, mode: number, flags: number): Promise<{ | ||
| stat: FileStat; | ||
| fh: number; | ||
| }>; | ||
| } | ||
| //# sourceMappingURL=provider.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3F,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C"} | ||
| {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"} |
+1
-1
| MIT License | ||
| Copyright (c) 2025 Mens Reversa | ||
| Copyright (c) 2026 Mens Reversa | ||
@@ -5,0 +5,0 @@ Permission is hereby granted, free of charge, to any person obtaining a copy |
+14
-4
| { | ||
| "name": "@mount0/core", | ||
| "version": "0.0.1", | ||
| "version": "0.1.0", | ||
| "description": "High-performance virtual filesystem for developers", | ||
@@ -8,2 +8,12 @@ "type": "module", | ||
| "types": "dist/index.d.ts", | ||
| "exports": { | ||
| ".": { | ||
| "types": "./dist/index.d.ts", | ||
| "import": "./dist/index.js" | ||
| } | ||
| }, | ||
| "files": [ | ||
| "dist", | ||
| "build/Release/*.node" | ||
| ], | ||
| "scripts": { | ||
@@ -31,7 +41,7 @@ "build": "npm run build:ts && npm run build:native || true", | ||
| "@types/jest": "^30.0.0", | ||
| "@types/node": "^24.10.1", | ||
| "@types/node": "^25.2.3", | ||
| "jest": "^30.2.0", | ||
| "node-addon-api": "^8.5.0", | ||
| "node-gyp": "^12.0.0", | ||
| "ts-jest": "^29.4.5", | ||
| "node-gyp": "^12.2.0", | ||
| "ts-jest": "^29.4.6", | ||
| "typescript": "^5.9.3" | ||
@@ -38,0 +48,0 @@ }, |
+4
-4
@@ -14,9 +14,9 @@ # @mount0/core | ||
| ```typescript | ||
| import { mount0 } from '@mount0/core'; | ||
| import { LocalProvider } from '@mount0/local'; | ||
| import { mount0 } from "@mount0/core"; | ||
| import { LocalProvider } from "@mount0/local"; | ||
| const fs = mount0(); | ||
| fs.handle('/', new LocalProvider('/path/to/data')); | ||
| fs.handle("/", new LocalProvider("/path/to/data")); | ||
| await fs.mount('/mnt/myfs'); | ||
| await fs.mount("/mnt/myfs"); | ||
| ``` | ||
@@ -23,0 +23,0 @@ |
| import { FilesystemProvider } from './provider'; | ||
| import { DirEntry, FileHandle, FileStat } from './types'; | ||
| export declare class FileSystem { | ||
| private handlers; | ||
| private sortedPaths; | ||
| constructor(handlers: Map<string, FilesystemProvider>); | ||
| private normalizePath; | ||
| private findProvider; | ||
| getattr(filePath: string): Promise<FileStat | null>; | ||
| readdir(filePath: string): Promise<DirEntry[]>; | ||
| open(filePath: string, flags: number, mode?: number): Promise<FileHandle>; | ||
| read(handle: FileHandle, buffer: Buffer, offset: number, length: number): Promise<number>; | ||
| write(handle: FileHandle, buffer: Buffer, offset: number, length: number): Promise<number>; | ||
| create(filePath: string, mode: number): Promise<FileHandle>; | ||
| unlink(filePath: string): Promise<void>; | ||
| mkdir(filePath: string, mode: number): Promise<void>; | ||
| rmdir(filePath: string): Promise<void>; | ||
| rename(oldpath: string, newpath: string): Promise<void>; | ||
| truncate(filePath: string, length: number): Promise<void>; | ||
| close(handle: FileHandle): Promise<void>; | ||
| private getRelativePath; | ||
| } | ||
| //# sourceMappingURL=filesystem.d.ts.map |
| {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEzD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,WAAW,CAAW;gBAElB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAUrD,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,YAAY;IAkBd,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAUnD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAU9C,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAUzE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWzF,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW1F,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAU3D,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpD,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzD,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9C,OAAO,CAAC,eAAe;CAWxB"} |
| import * as path from 'path'; | ||
| export class FileSystem { | ||
| handlers; | ||
| sortedPaths; | ||
| constructor(handlers) { | ||
| this.handlers = handlers; | ||
| this.sortedPaths = Array.from(handlers.keys()).sort((a, b) => b.length - a.length); | ||
| } | ||
| normalizePath(filePath) { | ||
| return path.normalize(filePath).replace(/\\/g, '/'); | ||
| } | ||
| findProvider(filePath) { | ||
| const normalized = this.normalizePath(filePath); | ||
| for (const mountPath of this.sortedPaths) { | ||
| const normalizedMount = this.normalizePath(mountPath); | ||
| if (normalized === normalizedMount || normalized.startsWith(normalizedMount + '/')) { | ||
| const provider = this.handlers.get(mountPath); | ||
| if (provider) { | ||
| return { provider, mountPath: normalizedMount }; | ||
| } | ||
| } | ||
| } | ||
| return null; | ||
| } | ||
| async getattr(filePath) { | ||
| const result = this.findProvider(filePath); | ||
| if (!result) { | ||
| return null; | ||
| } | ||
| const relPath = this.getRelativePath(filePath, result.mountPath); | ||
| return result.provider.getattr(relPath); | ||
| } | ||
| async readdir(filePath) { | ||
| const result = this.findProvider(filePath); | ||
| if (!result) { | ||
| return []; | ||
| } | ||
| const relPath = this.getRelativePath(filePath, result.mountPath); | ||
| return result.provider.readdir(relPath); | ||
| } | ||
| async open(filePath, flags, mode) { | ||
| const result = this.findProvider(filePath); | ||
| if (!result) { | ||
| throw new Error('No provider found'); | ||
| } | ||
| const relPath = this.getRelativePath(filePath, result.mountPath); | ||
| return result.provider.open(relPath, flags, mode); | ||
| } | ||
| async read(handle, buffer, offset, length) { | ||
| const result = this.findProvider(handle.path); | ||
| if (!result) { | ||
| throw new Error('No provider found'); | ||
| } | ||
| const relPath = this.getRelativePath(handle.path, result.mountPath); | ||
| const newHandle = { ...handle, path: relPath }; | ||
| return result.provider.read(newHandle, buffer, offset, length); | ||
| } | ||
| async write(handle, buffer, offset, length) { | ||
| const result = this.findProvider(handle.path); | ||
| if (!result) { | ||
| throw new Error('No provider found'); | ||
| } | ||
| const relPath = this.getRelativePath(handle.path, result.mountPath); | ||
| const newHandle = { ...handle, path: relPath }; | ||
| return result.provider.write(newHandle, buffer, offset, length); | ||
| } | ||
| async create(filePath, mode) { | ||
| const result = this.findProvider(filePath); | ||
| if (!result) { | ||
| throw new Error('No provider found'); | ||
| } | ||
| const relPath = this.getRelativePath(filePath, result.mountPath); | ||
| return result.provider.create(relPath, mode); | ||
| } | ||
| async unlink(filePath) { | ||
| const result = this.findProvider(filePath); | ||
| if (!result) { | ||
| throw new Error('No provider found'); | ||
| } | ||
| const relPath = this.getRelativePath(filePath, result.mountPath); | ||
| return result.provider.unlink(relPath); | ||
| } | ||
| async mkdir(filePath, mode) { | ||
| const result = this.findProvider(filePath); | ||
| if (!result) { | ||
| throw new Error('No provider found'); | ||
| } | ||
| const relPath = this.getRelativePath(filePath, result.mountPath); | ||
| return result.provider.mkdir(relPath, mode); | ||
| } | ||
| async rmdir(filePath) { | ||
| const result = this.findProvider(filePath); | ||
| if (!result) { | ||
| throw new Error('No provider found'); | ||
| } | ||
| const relPath = this.getRelativePath(filePath, result.mountPath); | ||
| return result.provider.rmdir(relPath); | ||
| } | ||
| async rename(oldpath, newpath) { | ||
| const result = this.findProvider(oldpath); | ||
| if (!result) { | ||
| throw new Error('No provider found'); | ||
| } | ||
| const relOld = this.getRelativePath(oldpath, result.mountPath); | ||
| const relNew = this.getRelativePath(newpath, result.mountPath); | ||
| return result.provider.rename(relOld, relNew); | ||
| } | ||
| async truncate(filePath, length) { | ||
| const result = this.findProvider(filePath); | ||
| if (!result) { | ||
| throw new Error('No provider found'); | ||
| } | ||
| const relPath = this.getRelativePath(filePath, result.mountPath); | ||
| return result.provider.truncate(relPath, length); | ||
| } | ||
| async close(handle) { | ||
| const result = this.findProvider(handle.path); | ||
| if (!result) { | ||
| throw new Error('No provider found'); | ||
| } | ||
| const relPath = this.getRelativePath(handle.path, result.mountPath); | ||
| const newHandle = { ...handle, path: relPath }; | ||
| return result.provider.close(newHandle); | ||
| } | ||
| getRelativePath(filePath, mountPath) { | ||
| const normalized = this.normalizePath(filePath); | ||
| const normalizedMount = this.normalizePath(mountPath); | ||
| if (normalized === normalizedMount) { | ||
| return '/'; | ||
| } | ||
| const relative = normalized.substring(normalizedMount.length); | ||
| return relative.startsWith('/') ? relative : '/' + relative; | ||
| } | ||
| } | ||
| //# sourceMappingURL=filesystem.js.map |
| {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"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"} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
89638
174.78%953
161.1%1
Infinity%