{"version":3,"sources":["jsdelivr-header.js","/npm/jpeg-autorotate@3.1.0/src/main.js"],"names":[],"mappings":"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","file":"/npm/jpeg-autorotate@3.1.0/src/main.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/jpeg-autorotate@3.1.0/src/main.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\n'use strict'\n\nvar fs = require('fs')\nvar async = require('async')\nvar piexif = require('piexifjs')\nvar CustomError = require('./error.js')\nvar transform = require('./transform.js')\n\nvar m = {}\n\nm.errors = {}\nm.errors.read_file = 'read_file'\nm.errors.read_exif = 'read_exif'\nm.errors.no_orientation = 'no_orientation'\nm.errors.unknown_orientation = 'unknown_orientation'\nm.errors.correct_orientation = 'correct_orientation'\nm.errors.rotate_file = 'rotate_file'\n\nm.rotate = function(path_or_buffer, options, module_callback)\n{\n    var quality = typeof options === 'object' && typeof options.quality !== 'undefined' ? parseInt(options.quality) : 100\n    quality = !isNaN(quality) && quality >= 0 && quality <= 100 ? quality : 100\n    module_callback = typeof module_callback === 'function' ? module_callback : function(){}\n\n    var jpeg_buffer = null\n    var jpeg_exif_data = null\n    var jpeg_orientation = null\n\n    if (typeof path_or_buffer === 'string')\n    {\n        fs.readFile(path_or_buffer, _onReadFile)\n    }\n    else if (typeof path_or_buffer === 'object' && Buffer.isBuffer(path_or_buffer))\n    {\n        _onReadFile(null, path_or_buffer)\n    }\n    else\n    {\n        _onReadFile(new Error('Not a file path or buffer'), null)\n    }\n\n    /**\n     * Tries to read EXIF data when the image has been loaded\n     * @param error\n     * @param buffer\n     */\n    function _onReadFile(error, buffer)\n    {\n        if (error)\n        {\n            module_callback(new CustomError(m.errors.read_file, 'Could not read file (' + error.message + ')'), null, null, null)\n            return\n        }\n        try\n        {\n            jpeg_buffer = buffer\n            jpeg_exif_data = piexif.load(jpeg_buffer.toString('binary'))\n        }\n        catch (error)\n        {\n            module_callback(new CustomError(m.errors.read_exif, 'Could not read EXIF data (' + error.message + ')'), null, null, null)\n            return\n        }\n        if (typeof jpeg_exif_data['0th'] === 'undefined' || typeof jpeg_exif_data['0th'][piexif.ImageIFD.Orientation] === 'undefined')\n        {\n            module_callback(new CustomError(m.errors.no_orientation, 'No orientation tag found in EXIF'), buffer, null, null)\n            return\n        }\n        jpeg_orientation = parseInt(jpeg_exif_data['0th'][piexif.ImageIFD.Orientation])\n        if (isNaN(jpeg_orientation) || jpeg_orientation < 1 || jpeg_orientation > 8)\n        {\n            module_callback(new CustomError(m.errors.unknown_orientation, 'Unknown orientation (' + jpeg_orientation + ')'), buffer, null, null)\n            return\n        }\n        if (jpeg_orientation === 1)\n        {\n            module_callback(new CustomError(m.errors.correct_orientation, 'Orientation already correct'), buffer, null, null)\n            return\n        }\n        async.parallel({image: _rotateImage, thumbnail: _rotateThumbnail}, _onRotatedImages)\n    }\n\n    /**\n     * Tries to rotate the main image\n     * @param callback\n     */\n    function _rotateImage(callback)\n    {\n        transform.do(jpeg_buffer, jpeg_orientation, quality, function(error, buffer, width, height)\n        {\n            callback(error, {buffer: !error ? buffer : null, width: width, height: height})\n        })\n    }\n\n    /**\n     * Tries to rotate the thumbnail, if it exists\n     * @param callback\n     */\n    function _rotateThumbnail(callback)\n    {\n        if (typeof jpeg_exif_data['thumbnail'] === 'undefined' || jpeg_exif_data['thumbnail'] === null)\n        {\n            callback(null, {buffer: null, width: 0, height: 0})\n            return\n        }\n        transform.do(new Buffer(jpeg_exif_data['thumbnail'], 'binary'), jpeg_orientation, quality, function(error, buffer, width, height)\n        {\n            callback(null, {buffer: !error ? buffer : null, width: width, height: height})\n        })\n    }\n\n    /**\n     * Merges EXIF data in the rotated buffer and returns\n     * @param error\n     * @param buffers\n     */\n    function _onRotatedImages(error, images)\n    {\n        if (error)\n        {\n            module_callback(new CustomError(m.errors.rotate_file, 'Could not rotate image (' + error.message + ')'), null, null, null)\n            return\n        }\n        jpeg_exif_data['0th'][piexif.ImageIFD.Orientation] = 1\n        if (typeof jpeg_exif_data['Exif'][piexif.ExifIFD.PixelXDimension] !== 'undefined')\n        {\n            jpeg_exif_data['Exif'][piexif.ExifIFD.PixelXDimension] = images.image.width\n        }\n        if (typeof jpeg_exif_data['Exif'][piexif.ExifIFD.PixelYDimension] !== 'undefined')\n        {\n            jpeg_exif_data['Exif'][piexif.ExifIFD.PixelYDimension] = images.image.height\n        }\n        if (images.thumbnail.buffer !== null)\n        {\n            jpeg_exif_data['thumbnail'] = images.thumbnail.buffer.toString('binary')\n        }\n        var exif_bytes = piexif.dump(jpeg_exif_data)\n        var updated_jpeg_buffer = new Buffer(piexif.insert(exif_bytes, images.image.buffer.toString('binary')), 'binary')\n        var updated_jpeg_dimensions = {\n            height: images.image.height,\n            width: images.image.width\n        }\n        module_callback(null, updated_jpeg_buffer, jpeg_orientation, updated_jpeg_dimensions)\n    }\n\n}\n\nmodule.exports = m\n"]}