UNPKG

includejs

Version:

IncludeJS Resource Builder Tool

100 lines (87 loc) 3.3 kB
var fs = require('fs'), fsextra = require('fs.extra'), copyFileSync = function(srcFile, destFile) { var BUF_LENGTH, buff, bytesRead, fdr, fdw, pos; BUF_LENGTH = 64 * 1024; buff = new Buffer(BUF_LENGTH); fdr = fs.openSync(srcFile, 'r'); fdw = fs.openSync(destFile, 'w'); bytesRead = 1; pos = 0; while (bytesRead > 0) { bytesRead = fs.readSync(fdr, buff, 0, BUF_LENGTH, pos); fs.writeSync(fdw, buff, 0, bytesRead); pos += bytesRead; } fs.closeSync(fdr); return fs.closeSync(fdw); }; var services = { io: { 'file/save': function(data) { var folder = urlhelper.getDir(data.path); if (folder && fs.existsSync(folder) == false) { //try { fsextra.mkdirpSync(folder); //} catch (e) {}; } fs.writeFileSync(data.path, data.content); }, 'file/copy': function(data, callback) { console.assert(data.from, 'file/copy - invalid copyFrom'); console.assert(data.to, 'file/copy - invalid copyTo'); if (fs.existsSync(data.from) == false) { console.error('file/copy - 404 Error', data.from); callback && callback(404); } var folder = urlhelper.getDir(data.to); if (fs.existsSync(folder) == false) fsextra.mkdirpSync(folder); fs.copy(data.from, data.to, callback); }, 'file/copySync': function(data) { if (fs.existsSync(data.from) == false) { console.error('file/copy - 404 Error', data.from); } var folder = urlhelper.getDir(data.to); if (fs.existsSync(folder) == false) fsextra.mkdirpSync(folder); copyFileSync(data.from, data.to); }, 'file/exists': function(data) { return fs.existsSync(data.file); }, 'file/readSync': function(data) { return fs.readFileSync(data.file, 'utf-8'); }, 'file/allSync': function(data){ return walk(data.dir); }, 'folder/ensure': function(data){ if (fs.existsSync(data.folder) == false) fsextra.mkdirpSync(data.folder); } } } var walk = function(dir, root) { var results = [], files = fs.readdirSync(dir); if (root == null) root = ''; function combine(_1, _2){ if (!_1) return _2; if (!_2) return _1; if (_2[0] == '/') _2 = _2.substring(1); if (_1[_1.length - 1] == '/') return _1 + _2; return _1 + '/' + _2; } for(var i = 0, x, length = files.length; x = files[i], i<length; i++){ if (fs.statSync(combine(dir,x)).isDirectory()){ results = results.concat(walk(combine(dir,x), combine(root,x))); continue; } results.push(combine(root,x)); } return results; }; exports.app = { service: function(name, method, data) { return services[name][method](data); } }