@lyra/form-builder
Version:
Lyra form builder
46 lines (35 loc) • 1.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = readExif;
var _rxjs = require('rxjs');
var _operators = require('rxjs/operators');
var _exifComponent = require('exif-component');
var _exifComponent2 = _interopRequireDefault(_exifComponent);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function readFileAsArrayBuffer(file /*: File*/, length /*: number*/) {
return new _rxjs.Observable(observer => {
/* global window */
const reader = new window.FileReader();
reader.onerror = err => observer.error(err);
reader.onload = () => {
observer.next(reader.result);
observer.complete();
};
reader.readAsArrayBuffer(length === undefined ? file : file.slice(0, length));
return () => reader.abort();
});
}
const SKIP_EXIF_ERROR_RE = /(invalid image format)|(No exif data)/i;
// 128k should be enough for exif data according to https://github.com/mattiasw/ExifReader#tips
const EXIF_BUFFER_LENGTH = 128000;
function readExif(file /*: File*/) {
return (0, _rxjs.from)(readFileAsArrayBuffer(file, EXIF_BUFFER_LENGTH)).pipe((0, _operators.map)(buf => (0, _exifComponent2.default)(buf)), (0, _operators.catchError)(error => {
if (!SKIP_EXIF_ERROR_RE.test(error.message)) {
// Exif read failed, we do not want to fail hard
console.warn(`Exif read failed, continuing anyway: ${error.message}`); // eslint-disable-line no-console
}
return (0, _rxjs.of)({});
}));
}