filemixer
v0.0.8
Published
FileMixer combines string-based template engines with a merging system that can write results to the filesystem.
Downloads
12
Readme
FileMixer.js
Create new and merged virtual files from templates.
- Provide a template for a file's path and/or contents, render them with a template engine.
- Use EJS templates by default, or choose your own rendering engine.
- Render to a virtual file object, or to disk.
- Merge or overwrite existing file contents using a provided strategy.
import FileMixer from "filemixer";
const path = "./some/path/to/hello<= name %>.txt";
const contents = "Hello, <%= name %>!";
const values = {
name: "World"
};
/**
* If contents is not set, the rendered VirtualFile will be a directory.
* If contents is set, the rendered VirtualFile will be a file.
*/
new FileMixer({ path, contents, values })
/**
* Optionally set a custom base for the path. Defaults to file's directory name.
*/
.base("./some/path/")
/**
* Optionally set a custom template engine instead of the default EJS.
*/
.engine((string, stringValues, done) => {
const handleBarsFileMixer = Handlebars.compile(string);
const renderedString = handleBarsFileMixer(stringValues);
done(null, renderedString);
})
/**
* Optionally set a merging strategy that will run if there's an existing file.
*/
.merge((self, existingFile, newFile, done) => {
const mergedFile = Object.assign({}, newFile);
mergedFile.contents = existingFile.contents + newFile.contents;
done(null, mergedFile);
})
/**
* Render the path and contents with the designated template engine then run
* the merge strategy if it exists and there's an existing file then call back
* with a rendered `VirtualFile` object.
*/
.render((error, file) => {
file.isFile; // true
file.isDirectory; // false
file.path; // ./some/path/to/helloWorld.txt
file.name; // to/helloWorld.txt
file.base; // ./some/path/
file.contents; // Hello, World!
})
/**
* First `.render` the VirtualFile, then write/overwrite the file to disk.
*/
.write((error, file) => {
// File was written to disk. The virtual file object is provided here so we
// don't `.render` twice.
});
How to Contribute
We love pull requests and issue reports! Really!
If you find a bug or have a feature suggestion, please feel free to submit an issue here.
For more information on how to submit a pull request, please read this guide on contributing to open-source projects.