strapi-provider-upload-copies
Version:
A upload provider for strapi for uploading multiples copies to multiple desitnations using existing providers
60 lines (56 loc) • 1.69 kB
JavaScript
;
const baseProvider = {
extend(obj) {
Object.assign(this, obj);
},
upload() {
throw new Error("Provider upload method is not implemented");
},
delete() {
throw new Error("Provider delete method is not implemented");
},
};
module.exports = {
init(options) {
const { providers } = options;
if (!providers || !providers.length) {
throw new Error("Providers are not set properly.");
}
const copyProviders = providers
.filter(({ skip }) => !skip)
.map(({ provider: providerName, providerOptions, afterUpload }) => {
const importName = providerName.startsWith("strapi-provider-upload-")
? providerName
: `strapi-provider-upload-${providerName}`;
// eslint-disable-next-line import/no-dynamic-require, global-require
const providerInstance = require(importName).init(providerOptions);
return Object.assign(Object.create(baseProvider), {
...providerInstance,
upload: (file) => {
return Promise.resolve(
providerInstance.upload(file, providerOptions),
).then(() => {
if (afterUpload) {
return afterUpload(file);
}
});
},
delete: (file) => {
return providerInstance.delete(file, providerOptions);
},
});
});
return {
upload(file) {
return Promise.all(
copyProviders.map((provider) => provider.upload(file)),
);
},
delete(file) {
return Promise.all(
copyProviders.map((provider) => provider.delete(file)),
);
},
};
},
};