Layered file system
This is a simple module that enables you to layer several file system paths on top of each other. Every layer added will be added to the bottom, so the first layer added is the main one (and the first checked).
When you want to get a file you ask the module and it will return the first path to that file, starting from the first layer. If it does not exist it will check the next layer and so on.
Take a look at this example:
var LFS = ;var myfs = ;myfs; // application public foldermyfs; // platform common stuff
When you ask for a file path, for example
/my-file.txt, it will check first if
/my/app/public/my-file.txt exists. If it does it will return this path. If not it will check if
/platform/common/public/my-file.txt exists. If it does it will return this other path, otherwise it will return
Following the example, let's consider
my-file.txt exists in the second layer.
var myfs_path = myfs;console; // /platform/common/public/my-file.txt
This is synchronous or asynchronous if you pass a callback.
Instead of calling
.add() you can pass a list of layers in the constructor.
var myfs = layers: "/my/app/public/" "/platform/common/public" ;
LFS can cache the results so the next requests under a certain period will recieve the same response. You can activate it by passing a
cache option with a numeric value in milliseconds.
var myfs = cache: 30000 ; // 30 seconds cache
If instead of the file path you want the layer that matches, you can pass the option in the constructor or in the method.
var myfs = layer: true ;myfs; // option for this call only