index.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. 'use strict';
  2. var writeDir = require('./writeDir');
  3. var writeStream = require('./writeStream');
  4. var writeBuffer = require('./writeBuffer');
  5. var writeSymbolicLink = require('./writeSymbolicLink');
  6. function writeContents(writePath, file, callback) {
  7. // If directory then mkdirp it
  8. if (file.isDirectory()) {
  9. return writeDir(writePath, file, written);
  10. }
  11. // Stream it to disk yo
  12. if (file.isStream()) {
  13. return writeStream(writePath, file, written);
  14. }
  15. // Write it as a symlink
  16. if (file.symlink) {
  17. return writeSymbolicLink(writePath, file, written);
  18. }
  19. // Write it like normal
  20. if (file.isBuffer()) {
  21. return writeBuffer(writePath, file, written);
  22. }
  23. // If no contents then do nothing
  24. if (file.isNull()) {
  25. return written();
  26. }
  27. // This is invoked by the various writeXxx modules when they've finished
  28. // writing the contents.
  29. function written(err) {
  30. if (isErrorFatal(err)) {
  31. return callback(err);
  32. }
  33. callback(null, file);
  34. }
  35. function isErrorFatal(err) {
  36. if (!err) {
  37. return false;
  38. }
  39. if (err.code === 'EEXIST' && file.flag === 'wx') {
  40. // Handle scenario for file overwrite failures.
  41. return false; // "These aren't the droids you're looking for"
  42. }
  43. // Otherwise, this is a fatal error
  44. return true;
  45. }
  46. }
  47. module.exports = writeContents;