UNPKG

@lyra/form-builder

Version:
46 lines (35 loc) 1.53 kB
'use strict'; 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)({}); })); }