README
virtual-file
A virtual file abstraction for. This is meant to be used as the file abstraction for normalize.
Goals:
- Caching ideal for long running processes
- Easily file transformations, including intermediary files
- Seamless source map support
- Suitable for production usage
Current limitations:
- Files are considered to be on-disk.
However, inline files (i.e. inlined
<script>
s) are currently not supported. Need to figure out a mechanism for those types of files.
API
var file = new File(uri)
Creates a new file abstraction based on a URI.
A URI could have #
s or ?
s.
However, the file must be a local file.
If it's a remote file, download it first.
Properties
.filename
- the filename of the file. Unlike the URI, this property is dynamic and removes any#
s and?
s in the name..dirname
- the folder this file is located..basename
- the basename of this file. This property is dynamic, meaning you can set it, and the filename will be updated automatically..type
- the current mime type of the file. Set the current mime type of the file to keep track of the current transformations..exists
- whether the file exists, defaulting totrue
..sourcemap
- whether source maps are enabled, defaulting totrue
..static
- whether this file changes over time (i.e. for a watching instance), defaulting tofalse
. Set this totrue
in production when you know files aren't going to change.
file.stat().then( => )
Check fs.stat()
the file and get the sha256 sum of the file.
Adds the following properties:
.length
- the byte length of the file.mtime
- the modified time of the file as aDate
..hash
- the sha256 sum of the file as aBuffer
.
You should run this before running anything else.
file.getString().then( string => )
Get the current contents of the file as a string.
Also sets it as .string
.
If the string contains an inline source map, it will be removed and moved to .map
.
file.string=
Set a string as the current contents of the file after a transformation.
If the string contains an inline source map, it will be removed and moved to .map
.
file.map
Get the current source map of the file, if any.
file.map=
Set the source map of the file.
This should be set before file.string=
.
If a previous source map exists, it will be applied to the newest source map.
Otherwise, the current string
and .basename
will be set as the source.
file.isStale().then( stale => )
Check whether the file is stale.
If it is stale, then a new file
object will be returned.
Being using the new file
object instead of this one.
The file is stale if any of the following is true:
- The file previously did not exist, but now does.
- The file's length has changed.
- The file's mtime has changed.
- The sha256 sum of the file has changed.