@jadl/builders
Version:
Builders for JaDL
75 lines (74 loc) • 2.15 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FileBuilder = void 0;
const form_data_1 = __importDefault(require("form-data"));
/**
* File builder for easily sending file(s) as a response
* @example
* return new FileBuilder()
* .add('image.png', imageBuffer)
* .add('info.txt', Buffer.from('What\'s up!'))
*/
class FileBuilder {
constructor(files = []) {
this.files = files;
}
/**
* Adds a file to be sent
* @param name Name of file
* @param buffer Buffer of the file
* @returns {FileBuilder}
*/
add(name, buffer) {
this.files.push({ name, buffer });
return this;
}
/**
* Removes a file from the builder
* @param name Name of file
* @returns {FileBuilder}
*/
remove(name) {
this.files = this.files.filter((x) => x.name !== name);
return this;
}
/**
* Finds a file by it's name
* @param name Name of file
* @returns {FileBuilderFile}
*/
find(name) {
return this.files.find((x) => x.name === name);
}
/**
* Clones this file builder to a deep cloned new FileBuilder
* @returns {FileBuilder} cloned FileBuilder
*/
clone() {
return new FileBuilder(this.files.map((x) => ({
name: x.name,
buffer: Buffer.from(x.buffer)
})));
}
/**
* Renders the FileBuilder to form-data
* @returns {FormData}
*/
toFormData() {
const form = new form_data_1.default();
if (this.files.length < 2) {
form.append('file', this.files[0].buffer, this.files[0].name);
}
else {
for (let i = 0; i < this.files.length; i++) {
const file = this.files[i];
form.append(`file${i}`, file.buffer, file.name);
}
}
return form;
}
}
exports.FileBuilder = FileBuilder;