filemixer

0.0.8 • Public • Published

FileMixer.js

npm version license type Build Status Coverage Status bitHound Code bitHound Score bitHound Dependencies bitHound Dev Dependencies npm downloads Source: ECMAScript 6

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.

Package Sidebar

Install

npm i filemixer

Weekly Downloads

1

Version

0.0.8

License

MIT

Last publish

Collaborators

  • fam