mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 15:37:46 +03:00
58 lines
1.5 KiB
JavaScript
58 lines
1.5 KiB
JavaScript
|
'use strict'
|
||
|
|
||
|
const fs = require('fs')
|
||
|
const path = require('path')
|
||
|
const aws = require('aws-sdk')
|
||
|
|
||
|
module.exports = function (s3Key, s3Secret, s3Bucket, directory, assets) {
|
||
|
const s3 = new aws.S3({
|
||
|
accessKeyId: s3Key,
|
||
|
secretAccessKey: s3Secret,
|
||
|
params: { Bucket: s3Bucket }
|
||
|
})
|
||
|
|
||
|
function listExistingAssetsForDirectory (directory) {
|
||
|
return s3.listObjectsV2({ Prefix: directory }).promise().then((res) => {
|
||
|
return res.Contents.map((obj) => { return { Key: obj.Key } })
|
||
|
})
|
||
|
}
|
||
|
|
||
|
function deleteExistingAssets (existingAssets) {
|
||
|
if (existingAssets.length > 0) {
|
||
|
return s3.deleteObjects({ Delete: { Objects: existingAssets } }).promise()
|
||
|
} else {
|
||
|
return Promise.resolve(true)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function uploadAssets (assets, directory) {
|
||
|
return assets.reduce(
|
||
|
function (promise, asset) {
|
||
|
return promise.then(() => uploadAsset(directory, asset))
|
||
|
}, Promise.resolve())
|
||
|
}
|
||
|
|
||
|
function uploadAsset (directory, assetPath) {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
console.info(`Uploading ${assetPath}`)
|
||
|
const params = {
|
||
|
Key: `${directory}${path.basename(assetPath)}`,
|
||
|
ACL: 'public-read',
|
||
|
Body: fs.createReadStream(assetPath)
|
||
|
}
|
||
|
|
||
|
s3.upload(params, error => {
|
||
|
if (error) {
|
||
|
reject(error)
|
||
|
} else {
|
||
|
resolve()
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
return listExistingAssetsForDirectory(directory)
|
||
|
.then(deleteExistingAssets)
|
||
|
.then(() => uploadAssets(assets, directory))
|
||
|
}
|