Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@mount0/core

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mount0/core - npm Package Compare versions

Comparing version
0.0.1
to
0.1.0
+83
dist/router.d.ts
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":"AAAA,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE7C,qBAAa,cAAe,YAAW,kBAAkB;IACvD,SAAgB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,kBAAkB,CAAA;KAAE,EAAE,CAAC;IAC5E,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,aAAa,CAAmB;gBAE5B,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,kBAAkB,CAAA;KAAE,EAAE;IAIvE,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,aAAa;IAKrB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAMxD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ5B,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;IAaf,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAsB9D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAO1D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/E,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAuChF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUpD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASlD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMhE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM3F,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM5F,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7C,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAM1G,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAMlF,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAQpE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnD,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAQxE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAMtE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOtC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9F,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAK3E,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAK9D,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMhD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAK3D,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAKrK,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/F,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAOpF,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO7J,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK5E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAM7F,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnD,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAKpF"}
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"}

@@ -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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"}

@@ -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,2 +0,2 @@

export { Mount0, mount0 } from './mount0';
export { Mount0, mount0 } from "./mount0";
//# sourceMappingURL=index.js.map

@@ -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"}

@@ -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"}

@@ -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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"}
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

{
"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 @@ },

@@ -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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"}