UNPKG

@sanity/form-builder

Version:
37 lines (34 loc) 1.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = readExif; var _rxjs = require("rxjs"); var _operators = require("rxjs/operators"); var _exifComponent = _interopRequireDefault(require("exif-component")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function readFileAsArrayBuffer(file, length) { return new _rxjs.Observable(observer => { /* global window */ var 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(); }); } var 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 var EXIF_BUFFER_LENGTH = 128000; function readExif(file) { return (0, _rxjs.from)(readFileAsArrayBuffer(file, EXIF_BUFFER_LENGTH)).pipe((0, _operators.map)(buf => (0, _exifComponent.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: ".concat(error.message)); // eslint-disable-line no-console } return (0, _rxjs.of)({}); })); }