fsio.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /**
  2. * This has to be required *after* using Bluebird's promisifyAll() on fs
  3. */
  4. var fs = require('fs');
  5. var path = require('path');
  6. var Promise = require('bluebird');
  7. if(typeof fs.readdirAsync !== 'function') {
  8. // console.error("scandirAsync module requires promisifying fs with Bluebird's Promise.promisifyAll()");
  9. Promise.promisifyAll(fs);
  10. }
  11. function scandirAsync(path, excludes) {
  12. excludes = excludes || [];
  13. return fs.readdirAsync(path)
  14. .then(dirContent => {
  15. excludes.forEach(file => {
  16. var idxInContent = dirContent.indexOf(file);
  17. if(idxInContent !== -1) {
  18. dirContent.splice(idxInContent, 1);
  19. }
  20. });
  21. return dirContent;
  22. });
  23. }
  24. function readFileAsync(file) {
  25. console.log('readFileAsync', file);
  26. // var fs = {
  27. // readFileAsync: function() {
  28. // return new Promise((resolve, reject) => {
  29. // // resolve('pouet');
  30. // reject(new Error('pouet error'))
  31. // });
  32. // }
  33. // }
  34. return fs.readFileAsync(file)
  35. .then(buf => (buf.toString()));
  36. // .then(str => {
  37. // console.log('read file: ', str); return str;
  38. // });
  39. }
  40. function readFilesAsync(fullPath, files) {
  41. // console.log('reading files', files, 'from path', path);
  42. return Promise.reduce(files,
  43. (carry, f) => readFileAsync(fullPath + '/' + f)
  44. .then(content =>
  45. (carry.concat([{
  46. type: path.extname(f).substr(1),
  47. name: f,
  48. content
  49. }]))
  50. ),
  51. []
  52. );
  53. }
  54. module.exports = {
  55. scandirAsync,
  56. readFileAsync,
  57. readFilesAsync
  58. };