File system abstraction with access management.
API provides common file operations for some folder on local drive. Any operations outside of the folder will be blocked. Also, it possible to configure a custom policy for read/write operations.
Can be used as backend for Webix File Manager https://webix.com/filemanager
constwfs=require("wfs-local");constfs=newwfs.LocalFiles("/temp/folder");// get files in a folderletfiles=awaitfs.list("/subfolder");// get files in a folder and subfolders as plain listletfiles=awaitfs.list("/subfolder",{subFolders: true});// get files in a folder and subfolders as nested structureletfiles=awaitfs.list("/subfolder",{subFolders: true,nested:true});// get folder onlyletfiles=awaitfs.list("/subfolder",{skipFiles: true});// get files that match a maskletfiles=awaitfs.list("/subfolder",{include: file=>file.value.includes("name")});// get files with specific typesletfiles=awaitfs.list("/subfolder",{include: file=>["txt","doc"].includes(file.type)});// get files created on or after January 1, 2025letfiles=awaitfs.list("/subfolder",{include: file=>newDate(file.date)>=newDate("2025-01-01")});// get files smaller than 1 MBletfiles=awaitfs.list("/subfolder",{include: file=>file.size<1024*1024});// ignore some filesletfiles=awaitfs.list("/subfolder",{exclude: file=>file.value===".git"});// get info about a single fileletinfo=awaitfs.info("some.txt");// check if file existsletcheck=awaitfs.exists("some.txt");// make folderawaitfs.mkdir("sub2");// removeawaitfs.remove("some.txt");// copyawaitfs.copy("some.txt","/sub/");// moveawaitfs.copy("some.txt","some-data.txt");// readletstream=awaitfs.read("some.txt");// writeawaitfs.write("some.txt",stream)// ForceRoot policy is added automatically// readonlyconstwfs=require("wfs-local");constfs=newwfs.LocalFiles("/temp/folder",newwfs.policies.ReadOnlyPolicy());// customconstfs=newwfs.LocalFiles("/temp/folder",{comply: (path,op)=>{if(op==wfs.Operation.Read)returntrue;// write to temp folder onlyif(file.indexOf("/path/")===0)returntrue;returnfalse;}});// loggingconstwfs=require("wfs-local");constfs=newwfs.LocalFiles("/temp/folder",null,{verbose: true});MIT