You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.5 KiB

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function arrayRemove(arr, item) {
const idx = arr.indexOf(item);
if (~idx) {
arr.splice(idx, 1);
}
}
class FileAppender {
constructor(strategy, request) {
this.strategy = strategy;
this.request = request;
switch (strategy) {
case 'NONE':
break;
case 'VALUE':
break;
case 'ARRAY':
request.files = [];
break;
case 'OBJECT':
request.files = Object.create(null);
break;
default:
throw new Error('Unknown file strategy: ' + strategy);
}
}
insertPlaceholder(file) {
const placeholder = {
fieldname: file.fieldname,
};
switch (this.strategy) {
case 'NONE':
break;
case 'VALUE':
break;
case 'ARRAY':
;
this.request.files.push(placeholder);
break;
case 'OBJECT':
if (this.request.files[file.fieldname]) {
;
this.request.files[file.fieldname].push(placeholder);
}
else {
;
this.request.files[file.fieldname] = [placeholder];
}
break;
}
return placeholder;
}
removePlaceholder(placeholder) {
switch (this.strategy) {
case 'NONE':
break;
case 'VALUE':
break;
case 'ARRAY':
arrayRemove(this.request.files, placeholder);
break;
case 'OBJECT':
if (placeholder.fieldname) {
if (this.request.files[placeholder.fieldname].length === 1) {
delete this.request.files[placeholder.fieldname];
}
else {
arrayRemove(this.request.files[placeholder.fieldname], placeholder);
}
}
break;
}
}
replacePlaceholder(placeholder, file) {
if (this.strategy === 'VALUE') {
this.request.file = file;
return;
}
delete placeholder.fieldname;
Object.assign(placeholder, file);
}
}
exports.default = FileAppender;
//# sourceMappingURL=file-appender.js.map