UNPKG

lively-fs-helper

Version:

Small wrapper around fs to easily create file and directory structures. Currently used for testing stuff tht depends on files.

75 lines (67 loc) 1.89 kB
/*global require, module, console, setTimeout*/ var lang = require("lively.lang"), fs = require('fs'), exec = require('child_process').exec, path = require('path'); var tempFiles = [], tempDirs = []; function registerTempFile(filename) { tempFiles.push(filename); } function createTempFile(filename, content) { fs.writeFileSync(filename, content); registerTempFile(filename); console.log('created ' + filename); return filename; } function createTempDir(dir) { if (!fs.existsSync(dir)) fs.mkdirSync(dir); tempDirs.unshift(dir); } function cleanupTempFiles(thenDo) { lively.lang.fun.composeAsync( function(n) { lang.arr.mapAsyncSeries( tempFiles, function(file, _, n) { if (fs.existsSync(file)) fs.unlinkSync(file); else console.warn('trying to cleanup file %s but it did not exist', file); n(); }, function(err) { n(err); }) }, function(n) { lang.arr.mapAsyncSeries( tempDirs, function(dir, _, n) { exec('rm -rf ' + dir, function(code, out, err) { n(); }); }, function(err) { n(err); }); }, function(n) { tempFiles = []; tempDirs = []; n(); } )(thenDo); } function createDirStructure(basePath, spec) { // spec is an object like // {"foo": {"bar.js": "bla"}} // will create dir "foo/" and file foo/bar.js with "bla" as content for (var name in spec) { var p = path.join(basePath, name); if (typeof spec[name] === 'string') { createTempFile(p, spec[name]); continue; } if (typeof spec[name] === 'object') { createTempDir(p); createDirStructure(p, spec[name]); continue; } } } module.exports = { registerTempFile: registerTempFile, createTempFile: createTempFile, cleanupTempFiles: cleanupTempFiles, createDirStructure: createDirStructure, }