@sanity/form-builder
Version:
Sanity form builder
37 lines (34 loc) • 1.45 kB
JavaScript
;
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)({});
}));
}