index.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. "use strict";
  2. const fs_1 = require("fs");
  3. const path_1 = require("path");
  4. const log = (err) => console.log(err);
  5. const isFile = (f) => fs_1.statSync(f).isFile();
  6. const write = (fName, str) => new Promise((res, rej) => {
  7. fs_1.writeFile(path_1.resolve(fName), str, (err) => {
  8. if (err)
  9. return rej(err);
  10. return res(str);
  11. });
  12. });
  13. const readFolder = (folder) => new Promise((res, rej) => {
  14. fs_1.readdir(path_1.resolve(folder), (err, files) => {
  15. if (err)
  16. rej(err);
  17. const fileList = files.map(f => path_1.join(folder, f));
  18. res(fileList.filter(isFile));
  19. });
  20. });
  21. const read = (fName) => new Promise((res, rej) => {
  22. fs_1.readFile(path_1.resolve(fName), (err, str) => {
  23. if (err)
  24. rej(err);
  25. res(str);
  26. });
  27. });
  28. const concat = (files) => new Promise((res, rej) => {
  29. return Promise.all(files.map(read))
  30. .then(src => res(src.join('\n')))
  31. .catch(rej);
  32. });
  33. module.exports = (folder, outFile) => new Promise((res, rej) => {
  34. let concatenated;
  35. if (typeof folder === 'string') {
  36. concatenated = readFolder(folder)
  37. .then(concat);
  38. }
  39. else {
  40. concatenated = concat(folder);
  41. }
  42. if (outFile) {
  43. concatenated.then((out) => write(outFile, out)
  44. .then(res)
  45. .catch(rej)).catch(rej);
  46. }
  47. else {
  48. concatenated.then(res).catch(rej);
  49. }
  50. });