sfs-express
Version:
Express.js implementation of SFS
3 lines (2 loc) • 2.92 kB
JavaScript
import e from"sfs-node";function r(e,r){try{var t=e()}catch(e){return r(e)}return t&&t.then?t.then(void 0,r):t}function t(t){var i=t.logger,s=e({publicFolder:t.publicFolder,mask:t.mask,getFileById:t.getFileById,getFileByHash:t.getFileByHash,createFile:t.createFile,logger:i,allowDuplicates:t.allowDuplicates}),n=s.resolveFilePath,a=s.idToUrl,o=s.urlToId,l=s.saveFile,u=s.deleteFileByHash,d=s.deleteFileById,c=s.getDiskUsage,f=new Set;return{getFile:function(e,t){try{var s;return Promise.resolve(r(function(){if(s=a(e.params.id),i&&i("SFS Express: trying to return requested file: "+s,"info"),f.has(s))return t.status(428);var r=o(s);return Promise.resolve(n(r)).then(function(e){var s=e.filePath,n=e.fileName;return i&&i("SFS Express: sedning file '"+n+"' with path '"+s+"'"),t.setHeader("ETag",'"'+r+'"'),t.setHeader("Content-Disposition",'inline; filename="'+n+'"'),t.status(200).sendFile(s,{lastModified:!0,headers:{"Cache-Control":"public, max-age=31536000, immutable"}})})},function(e){return i&&i("SFS Express: unable to return file:"+s),i&&i(e),t.status(404).send()}))}catch(e){return Promise.reject(e)}},idToUrl:a,urlToId:o,saveFile:l,prepareOptimisticUpload:function(e,r){try{var t=a(e.body.id);try{return f.add(t),Promise.resolve(r.status(200).send(t))}catch(e){return i&&i(e,"error"),Promise.resolve(r.status(500).send())}}catch(e){return Promise.reject(e)}},deleteFileByHash:u,deleteFileById:d,deleteFile:function(e,t){try{return Promise.resolve(r(function(){var r=a(e.params.id),i=o(r);return Promise.resolve(d(i)).then(function(){return t.status(200).send("ok")})},function(e){return i&&i(e,"error"),t.status(500).send()}))}catch(e){return Promise.reject(e)}},getDiskUsage:c,uploadFile:function(e,t,s){void 0===s&&(s={pathParamKey:"path",fileParamKey:"file",optimisticIdKey:"id",additionalFields:{}});try{if(!e.files)return Promise.resolve(t.status(400).send("Request doesn't contain any files"));var n,o=s.additionalFields,u=e.files[s.fileParamKey],d=e.body[s.pathParamKey],c=e.body[s.optimisticIdKey];return Promise.resolve(r(function(){return c&&(n=a(c)),Promise.resolve(l(u,{filePath:d,id:c,additionalFields:o})).then(function(e){return e&&n&&f.delete(n),t.status(200).send(e)})},function(e){return i&&i(e,"error"),n&&f.delete(n),t.status(500).send()}))}catch(e){return Promise.reject(e)}},uploadFiles:function(e,t,s){void 0===s&&(s={pathParamKey:"path"});try{if(!e.files)return Promise.resolve(t.status(400).send("Request doesn't contain any files"));var n=s.pathParamKey;return Promise.resolve(r(function(){var r=e.body[n],i=[];return Object.values(e.files).forEach(function(e){Array.isArray(e)?i.push.apply(i,e):i.push(e)}),Promise.resolve(Promise.all(i.map(function(e){return l(e,r)}))).then(function(e){return t.status(200).send(e)})},function(e){return i&&i(e,"error"),t.status(500).send()}))}catch(e){return Promise.reject(e)}}}}export{t as default};
//# sourceMappingURL=index.esm.js.map