wechaty-puppet-service
Version:
Puppet Service for Wechaty
68 lines • 1.79 kB
JavaScript
import { FileBoxType, } from 'file-box';
/**
* Huan(202110): for testing propose, use 20KB as the threshold
* after stable we should use a value between 64KB to 256KB as the threshold
*/
const PASS_THROUGH_THRESHOLD_BYTES = 20 * 1024; // 20KB
/**
* 1. Green:
* Can be serialized directly
*/
const greenFileBoxTypes = [
FileBoxType.Url,
FileBoxType.Uuid,
FileBoxType.QRCode,
];
/**
* 2. Yellow:
* Can be serialized directly, if the size is less than a threshold
* if it's bigger than the threshold,
* then it should be convert to a UUID file box before send out
*/
const yellowFileBoxTypes = [
FileBoxType.Buffer,
FileBoxType.Base64,
];
const canPassthrough = (fileBox) => {
/**
* 1. Green types: YES
*/
if (greenFileBoxTypes.includes(fileBox.type)) {
return true;
}
/**
* 2. Red types: NO
*/
if (!yellowFileBoxTypes.includes(fileBox.type)) {
return false;
}
/**
* 3. Yellow types: CHECK size
*/
const size = fileBox.size;
if (size < 0) {
// 1. Size unknown: NO
return false;
}
else if (size > PASS_THROUGH_THRESHOLD_BYTES) {
// 2. Size: bigger than threshold: NO
return false;
}
else {
// 3. Size: smaller than threshold: YES
return true;
}
};
const normalizeFileBoxUuid = (FileBoxUuid) => async (fileBox) => {
if (canPassthrough(fileBox)) {
return fileBox;
}
const stream = await fileBox.toStream();
const uuid = await FileBoxUuid
.fromStream(stream, fileBox.name)
.toUuid();
const uuidFileBox = FileBoxUuid.fromUuid(uuid, fileBox.name);
return uuidFileBox;
};
export { canPassthrough, normalizeFileBoxUuid, };
//# sourceMappingURL=normalize-filebox.js.map