UNPKG

sfs-node

Version:

Core of SFS for node.js

3 lines (2 loc) 3.2 kB
import e from"fs";import r from"path";import n from"check-disk-space";import{createHash as t}from"crypto";import{v4 as i}from"uuid";import{dotExtensionToCategotry as o}from"sfs-file-type";function u(){return u=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e},u.apply(null,arguments)}function a(e,r){try{var n=e()}catch(e){return r(e)}return n&&n.then?n.then(void 0,r):n}function l(l){var c=l.publicFolder,s=l.mask,f=l.getFileById,d=l.getFileByHash,h=l.createFile,m=l.logger,v=void 0===m?void 0:m,p=l.uid,y=void 0===p?i:p,P=l.allowDuplicates,F=void 0!==P&&P,g=l.cleanupOnFailedUpload,w=void 0!==g&&g,S=function(e){return(s.endsWith("/")?s:s+"/")+e},j=function(e){try{return Promise.resolve(a(function(){return Promise.resolve(f(e)).then(function(e){var n=e.name;return{filePath:r.join(c,e.hash+e.extension),fileName:n}})},function(e){v&&v(e,"error")}))}catch(e){return Promise.reject(e)}};return{resolveFilePath:j,idToUrl:S,urlToId:function(e){return s.endsWith("/")?e.replace(s,""):e.replace(s+"/","")},saveFile:function(n,i){try{return Promise.resolve(a(function(){function l(){var t=r.join(c,p+P);return Promise.resolve(d(p)).then(function(r){function l(){return function(){if(!r||s!==r.path||F){var n=(null==r?void 0:r.size)||e.statSync(t).size,l=(null==r?void 0:r.type)||o(P),c=Date.now(),d=u({id:f,name:m,extension:P,hash:p,size:n,type:l,last_modified:c,path:s,publishedAt:c},null==i?void 0:i.additionalFields);return a(function(){return Promise.resolve(h(d)).then(function(e){return e.url=S(e.id),e})},function(){w&&!r&&(e.unlinkSync(t),v&&v("SFS: Cleaning up orphaned file after database error","info"))})}return v&&v("File already exists at this location","error"),r.url=S(r.id),r}()}var c=function(){if(!r)return v&&v("SFS: Saving file","success"),Promise.resolve(n.mv(t)).then(function(){});v&&v("SFS: File already uploaded","info")}();return c&&c.then?c.then(l):l()})}var s=(null==i?void 0:i.filePath)||"/",f=(null==i?void 0:i.id)||y(),m=decodeURI(n.name),p=t("sha256").update(n.data).digest("hex"),P="",g=r.extname(m),j=function(){if(!g)return Promise.resolve(function(e){try{return Promise.resolve(import("file-type")).then(function(r){return Promise.resolve((0,r.fileTypeFromBuffer)(e))})}catch(e){return Promise.reject(e)}}(n.data)).then(function(e){e&&(P="."+e.ext)});P=g}();return j&&j.then?j.then(l):l()},function(e){throw v&&v("Upload error","error"),new Error(e)}))}catch(e){return Promise.reject(e)}},deleteFileByHash:function(n){try{try{var t=e.readdirSync(c).find(function(e){return e.split(".")[0]===n});if(!t)throw new Error("File with hash "+n+" not found in "+c);var i=r.join(c,t);e.unlinkSync(i)}catch(e){throw new Error(e)}return Promise.resolve()}catch(e){return Promise.reject(e)}},deleteFileById:function(r){try{return Promise.resolve(a(function(){return Promise.resolve(j(r)).then(function(r){e.unlinkSync(r.filePath)})},function(e){throw new Error(e)}))}catch(e){return Promise.reject(e)}},getDiskUsage:function(e,r){try{return Promise.resolve(n(c))}catch(e){return Promise.reject(e)}}}}export{l as default}; //# sourceMappingURL=index.esm.js.map