New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@react-pdf/image

Package Overview
Dependencies
Maintainers
1
Versions
24
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@react-pdf/image - npm Package Compare versions

Comparing version 2.3.6 to 3.0.0

291

lib/index.browser.js

@@ -1,3 +0,1 @@

import _regeneratorRuntime from '@babel/runtime/helpers/regeneratorRuntime';
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
import fetch from 'cross-fetch';

@@ -1996,42 +1994,40 @@ import PNG from '@react-pdf/png-js';

var JPEG = function JPEG(data) {
this.data = null;
this.width = null;
this.height = null;
this.data = data;
if (data.readUInt16BE(0) !== 0xffd8) {
throw new Error('SOI not found in JPEG');
}
var markers = _JPEG.decode(this.data);
for (var i = 0; i < markers.length; i += 1) {
var marker = markers[i];
if (marker.name === 'EXIF' && marker.entries.orientation) {
this.orientation = marker.entries.orientation;
class JPEG {
constructor(data) {
this.data = null;
this.width = null;
this.height = null;
this.data = data;
if (data.readUInt16BE(0) !== 0xffd8) {
throw new Error('SOI not found in JPEG');
}
if (marker.name === 'SOF') {
this.width || (this.width = marker.width);
this.height || (this.height = marker.height);
const markers = _JPEG.decode(this.data);
for (let i = 0; i < markers.length; i += 1) {
const marker = markers[i];
if (marker.name === 'EXIF' && marker.entries.orientation) {
this.orientation = marker.entries.orientation;
}
if (marker.name === 'SOF') {
this.width ||= marker.width;
this.height ||= marker.height;
}
}
if (this.orientation > 4) {
[this.width, this.height] = [this.height, this.width];
}
}
if (this.orientation > 4) {
var _ref = [this.height, this.width];
this.width = _ref[0];
this.height = _ref[1];
}
};
JPEG.isValid = function (data) {
}
JPEG.isValid = data => {
return data && Buffer.isBuffer(data) && data.readUInt16BE(0) === 0xffd8;
};
var createCache = function createCache(_temp) {
var _ref = _temp === void 0 ? {} : _temp,
_ref$limit = _ref.limit,
limit = _ref$limit === void 0 ? 100 : _ref$limit;
var cache = {};
var keys = [];
const createCache = function (_temp) {
let {
limit = 100
} = _temp === void 0 ? {} : _temp;
let cache = {};
let keys = [];
return {
get: function get(key) {
return cache[key];
},
set: function set(key, value) {
get: key => cache[key],
set: (key, value) => {
keys.push(key);

@@ -2043,46 +2039,24 @@ if (keys.length > limit) {

},
reset: function reset() {
reset: () => {
cache = {};
keys = [];
},
length: function length() {
return keys.length;
}
length: () => keys.length
};
};
var IMAGE_CACHE = createCache({
const IMAGE_CACHE = createCache({
limit: 30
});
var fetchRemoteFile = /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(uri, options) {
var response, buffer;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return fetch(uri, options);
case 2:
response = _context.sent;
_context.next = 5;
return response.buffer ? response.buffer() : response.arrayBuffer();
case 5:
buffer = _context.sent;
return _context.abrupt("return", buffer.constructor.name === 'Buffer' ? buffer : Buffer.from(buffer));
case 7:
case "end":
return _context.stop();
}
}, _callee);
}));
return function fetchRemoteFile(_x, _x2) {
return _ref.apply(this, arguments);
};
}();
var isValidFormat = function isValidFormat(format) {
var lower = format.toLowerCase();
const fetchRemoteFile = async (uri, options) => {
const response = await fetch(uri, options);
const buffer = await (response.buffer ? response.buffer() : response.arrayBuffer());
return buffer.constructor.name === 'Buffer' ? buffer : Buffer.from(buffer);
};
const isValidFormat = format => {
const lower = format.toLowerCase();
return lower === 'jpg' || lower === 'jpeg' || lower === 'png';
};
var guessFormat = function guessFormat(buffer) {
var format;
const guessFormat = buffer => {
let format;
if (JPEG.isValid(buffer)) {

@@ -2095,4 +2069,6 @@ format = 'jpg';

};
var isCompatibleBase64 = function isCompatibleBase64(_ref2) {
var uri = _ref2.uri;
const isCompatibleBase64 = _ref => {
let {
uri
} = _ref;
return /^data:image\/[a-zA-Z]*;base64,[^"]*/g.test(uri);

@@ -2111,81 +2087,52 @@ };

}
var resolveBase64Image = function resolveBase64Image(_ref3) {
var uri = _ref3.uri;
var match = /^data:image\/([a-zA-Z]*);base64,([^"]*)/g.exec(uri);
var format = match[1];
var data = match[2];
const resolveBase64Image = _ref2 => {
let {
uri
} = _ref2;
const match = /^data:image\/([a-zA-Z]*);base64,([^"]*)/g.exec(uri);
const format = match[1];
const data = match[2];
if (!isValidFormat(format)) {
throw new Error("Base64 image invalid format: " + format);
throw new Error(`Base64 image invalid format: ${format}`);
}
return new Promise(function (resolve) {
return new Promise(resolve => {
return resolve(getImage(Buffer.from(data, 'base64'), format));
});
};
var resolveImageFromData = function resolveImageFromData(src) {
const resolveImageFromData = src => {
if (src.data && src.format) {
return new Promise(function (resolve) {
return resolve(getImage(src.data, src.format));
});
return new Promise(resolve => resolve(getImage(src.data, src.format)));
}
throw new Error("Invalid data given for local file: " + JSON.stringify(src));
throw new Error(`Invalid data given for local file: ${JSON.stringify(src)}`);
};
var resolveBufferImage = function resolveBufferImage(buffer) {
var format = guessFormat(buffer);
const resolveBufferImage = buffer => {
const format = guessFormat(buffer);
if (format) {
return new Promise(function (resolve) {
return resolve(getImage(buffer, format));
});
return new Promise(resolve => resolve(getImage(buffer, format)));
}
return Promise.resolve();
};
var resolveBlobImage = /*#__PURE__*/function () {
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(blob) {
var type, arrayBuffer, _buffer, format, buffer;
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
type = blob.type;
if (!(!type || type === 'application/octet-stream')) {
_context2.next = 7;
break;
}
_context2.next = 4;
return blob.arrayBuffer();
case 4:
arrayBuffer = _context2.sent;
_buffer = Buffer.from(arrayBuffer);
return _context2.abrupt("return", resolveBufferImage(_buffer));
case 7:
if (type.startsWith('image/')) {
_context2.next = 9;
break;
}
throw new Error("Invalid blob type: " + type);
case 9:
format = type.replace('image/', '');
if (isValidFormat(format)) {
_context2.next = 12;
break;
}
throw new Error("Invalid blob type: " + type);
case 12:
_context2.next = 14;
return blob.arrayBuffer();
case 14:
buffer = _context2.sent;
return _context2.abrupt("return", getImage(Buffer.from(buffer), format));
case 16:
case "end":
return _context2.stop();
}
}, _callee2);
}));
return function resolveBlobImage(_x3) {
return _ref4.apply(this, arguments);
};
}();
var getImageFormat = function getImageFormat(body) {
var isPng = body[0] === 137 && body[1] === 80 && body[2] === 78 && body[3] === 71 && body[4] === 13 && body[5] === 10 && body[6] === 26 && body[7] === 10;
var isJpg = body[0] === 255 && body[1] === 216 && body[2] === 255;
var extension = '';
const resolveBlobImage = async blob => {
const {
type
} = blob;
if (!type || type === 'application/octet-stream') {
const arrayBuffer = await blob.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
return resolveBufferImage(buffer);
}
if (!type.startsWith('image/')) {
throw new Error(`Invalid blob type: ${type}`);
}
const format = type.replace('image/', '');
if (!isValidFormat(format)) {
throw new Error(`Invalid blob type: ${type}`);
}
const buffer = await blob.arrayBuffer();
return getImage(Buffer.from(buffer), format);
};
const getImageFormat = body => {
const isPng = body[0] === 137 && body[1] === 80 && body[2] === 78 && body[3] === 71 && body[4] === 13 && body[5] === 10 && body[6] === 26 && body[7] === 10;
const isJpg = body[0] === 255 && body[1] === 216 && body[2] === 255;
let extension = '';
if (isPng) {

@@ -2200,47 +2147,25 @@ extension = 'png';

};
var resolveImageFromUrl = /*#__PURE__*/function () {
var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(src) {
var uri, body, headers, _src$method, method, credentials, data, extension;
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
uri = src.uri, body = src.body, headers = src.headers, _src$method = src.method, method = _src$method === void 0 ? 'GET' : _src$method, credentials = src.credentials;
{
_context3.next = 7;
break;
}
case 4:
_context3.t0 = _context3.sent;
_context3.next = 10;
break;
case 7:
_context3.next = 9;
return fetchRemoteFile(uri, {
body: body,
headers: headers,
method: method,
credentials: credentials
});
case 9:
_context3.t0 = _context3.sent;
case 10:
data = _context3.t0;
extension = getImageFormat(data);
return _context3.abrupt("return", getImage(data, extension));
case 13:
case "end":
return _context3.stop();
}
}, _callee3);
}));
return function resolveImageFromUrl(_x4) {
return _ref5.apply(this, arguments);
};
}();
var resolveImage = function resolveImage(src, _temp) {
var _ref6 = _temp === void 0 ? {} : _temp,
_ref6$cache = _ref6.cache,
cache = _ref6$cache === void 0 ? true : _ref6$cache;
var image;
var cacheKey = src.data ? src.data.toString() : src.uri;
const resolveImageFromUrl = async src => {
const {
uri,
body,
headers,
method = 'GET',
credentials
} = src;
const data = await fetchRemoteFile(uri, {
body,
headers,
method,
credentials
});
const extension = getImageFormat(data);
return getImage(data, extension);
};
const resolveImage = function (src, _temp) {
let {
cache = true
} = _temp === void 0 ? {} : _temp;
let image;
const cacheKey = src.data ? src.data.toString() : src.uri;
if (typeof Blob !== 'undefined' && src instanceof Blob) {

@@ -2247,0 +2172,0 @@ image = resolveBlobImage(src);

@@ -1,3 +0,1 @@

import _regeneratorRuntime from '@babel/runtime/helpers/regeneratorRuntime';
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
import fs from 'fs';

@@ -18,42 +16,40 @@ import url from 'url';

var JPEG = function JPEG(data) {
this.data = null;
this.width = null;
this.height = null;
this.data = data;
if (data.readUInt16BE(0) !== 0xffd8) {
throw new Error('SOI not found in JPEG');
}
var markers = _JPEG.decode(this.data);
for (var i = 0; i < markers.length; i += 1) {
var marker = markers[i];
if (marker.name === 'EXIF' && marker.entries.orientation) {
this.orientation = marker.entries.orientation;
class JPEG {
constructor(data) {
this.data = null;
this.width = null;
this.height = null;
this.data = data;
if (data.readUInt16BE(0) !== 0xffd8) {
throw new Error('SOI not found in JPEG');
}
if (marker.name === 'SOF') {
this.width || (this.width = marker.width);
this.height || (this.height = marker.height);
const markers = _JPEG.decode(this.data);
for (let i = 0; i < markers.length; i += 1) {
const marker = markers[i];
if (marker.name === 'EXIF' && marker.entries.orientation) {
this.orientation = marker.entries.orientation;
}
if (marker.name === 'SOF') {
this.width ||= marker.width;
this.height ||= marker.height;
}
}
if (this.orientation > 4) {
[this.width, this.height] = [this.height, this.width];
}
}
if (this.orientation > 4) {
var _ref = [this.height, this.width];
this.width = _ref[0];
this.height = _ref[1];
}
};
JPEG.isValid = function (data) {
}
JPEG.isValid = data => {
return data && Buffer.isBuffer(data) && data.readUInt16BE(0) === 0xffd8;
};
var createCache = function createCache(_temp) {
var _ref = _temp === void 0 ? {} : _temp,
_ref$limit = _ref.limit,
limit = _ref$limit === void 0 ? 100 : _ref$limit;
var cache = {};
var keys = [];
const createCache = function (_temp) {
let {
limit = 100
} = _temp === void 0 ? {} : _temp;
let cache = {};
let keys = [];
return {
get: function get(key) {
return cache[key];
},
set: function set(key, value) {
get: key => cache[key],
set: (key, value) => {
keys.push(key);

@@ -65,24 +61,23 @@ if (keys.length > limit) {

},
reset: function reset() {
reset: () => {
cache = {};
keys = [];
},
length: function length() {
return keys.length;
}
length: () => keys.length
};
};
var IMAGE_CACHE = createCache({
const IMAGE_CACHE = createCache({
limit: 30
});
var getAbsoluteLocalPath = function getAbsoluteLocalPath(src) {
var _url$parse = url.parse(src),
protocol = _url$parse.protocol,
auth = _url$parse.auth,
host = _url$parse.host,
port = _url$parse.port,
hostname = _url$parse.hostname,
pathname = _url$parse.path;
var absolutePath = path.resolve(pathname);
const getAbsoluteLocalPath = src => {
const {
protocol,
auth,
host,
port,
hostname,
path: pathname
} = url.parse(src);
const absolutePath = path.resolve(pathname);
if (protocol && protocol !== 'file:' || auth || host || port || hostname) {

@@ -93,50 +88,26 @@ return undefined;

};
var fetchLocalFile = function fetchLocalFile(src) {
return new Promise(function (resolve, reject) {
try {
if (false) ;
var absolutePath = getAbsoluteLocalPath(src);
if (!absolutePath) {
reject(new Error("Cannot fetch non-local path: " + src));
return;
}
fs.readFile(absolutePath, function (err, data) {
return err ? reject(err) : resolve(data);
});
} catch (err) {
reject(err);
const fetchLocalFile = src => new Promise((resolve, reject) => {
try {
if (false) ;
const absolutePath = getAbsoluteLocalPath(src);
if (!absolutePath) {
reject(new Error(`Cannot fetch non-local path: ${src}`));
return;
}
});
fs.readFile(absolutePath, (err, data) => err ? reject(err) : resolve(data));
} catch (err) {
reject(err);
}
});
const fetchRemoteFile = async (uri, options) => {
const response = await fetch(uri, options);
const buffer = await (response.buffer ? response.buffer() : response.arrayBuffer());
return buffer.constructor.name === 'Buffer' ? buffer : Buffer.from(buffer);
};
var fetchRemoteFile = /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(uri, options) {
var response, buffer;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return fetch(uri, options);
case 2:
response = _context.sent;
_context.next = 5;
return response.buffer ? response.buffer() : response.arrayBuffer();
case 5:
buffer = _context.sent;
return _context.abrupt("return", buffer.constructor.name === 'Buffer' ? buffer : Buffer.from(buffer));
case 7:
case "end":
return _context.stop();
}
}, _callee);
}));
return function fetchRemoteFile(_x, _x2) {
return _ref.apply(this, arguments);
};
}();
var isValidFormat = function isValidFormat(format) {
var lower = format.toLowerCase();
const isValidFormat = format => {
const lower = format.toLowerCase();
return lower === 'jpg' || lower === 'jpeg' || lower === 'png';
};
var guessFormat = function guessFormat(buffer) {
var format;
const guessFormat = buffer => {
let format;
if (JPEG.isValid(buffer)) {

@@ -149,4 +120,6 @@ format = 'jpg';

};
var isCompatibleBase64 = function isCompatibleBase64(_ref2) {
var uri = _ref2.uri;
const isCompatibleBase64 = _ref => {
let {
uri
} = _ref;
return /^data:image\/[a-zA-Z]*;base64,[^"]*/g.test(uri);

@@ -165,81 +138,52 @@ };

}
var resolveBase64Image = function resolveBase64Image(_ref3) {
var uri = _ref3.uri;
var match = /^data:image\/([a-zA-Z]*);base64,([^"]*)/g.exec(uri);
var format = match[1];
var data = match[2];
const resolveBase64Image = _ref2 => {
let {
uri
} = _ref2;
const match = /^data:image\/([a-zA-Z]*);base64,([^"]*)/g.exec(uri);
const format = match[1];
const data = match[2];
if (!isValidFormat(format)) {
throw new Error("Base64 image invalid format: " + format);
throw new Error(`Base64 image invalid format: ${format}`);
}
return new Promise(function (resolve) {
return new Promise(resolve => {
return resolve(getImage(Buffer.from(data, 'base64'), format));
});
};
var resolveImageFromData = function resolveImageFromData(src) {
const resolveImageFromData = src => {
if (src.data && src.format) {
return new Promise(function (resolve) {
return resolve(getImage(src.data, src.format));
});
return new Promise(resolve => resolve(getImage(src.data, src.format)));
}
throw new Error("Invalid data given for local file: " + JSON.stringify(src));
throw new Error(`Invalid data given for local file: ${JSON.stringify(src)}`);
};
var resolveBufferImage = function resolveBufferImage(buffer) {
var format = guessFormat(buffer);
const resolveBufferImage = buffer => {
const format = guessFormat(buffer);
if (format) {
return new Promise(function (resolve) {
return resolve(getImage(buffer, format));
});
return new Promise(resolve => resolve(getImage(buffer, format)));
}
return Promise.resolve();
};
var resolveBlobImage = /*#__PURE__*/function () {
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(blob) {
var type, arrayBuffer, _buffer, format, buffer;
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
type = blob.type;
if (!(!type || type === 'application/octet-stream')) {
_context2.next = 7;
break;
}
_context2.next = 4;
return blob.arrayBuffer();
case 4:
arrayBuffer = _context2.sent;
_buffer = Buffer.from(arrayBuffer);
return _context2.abrupt("return", resolveBufferImage(_buffer));
case 7:
if (type.startsWith('image/')) {
_context2.next = 9;
break;
}
throw new Error("Invalid blob type: " + type);
case 9:
format = type.replace('image/', '');
if (isValidFormat(format)) {
_context2.next = 12;
break;
}
throw new Error("Invalid blob type: " + type);
case 12:
_context2.next = 14;
return blob.arrayBuffer();
case 14:
buffer = _context2.sent;
return _context2.abrupt("return", getImage(Buffer.from(buffer), format));
case 16:
case "end":
return _context2.stop();
}
}, _callee2);
}));
return function resolveBlobImage(_x3) {
return _ref4.apply(this, arguments);
};
}();
var getImageFormat = function getImageFormat(body) {
var isPng = body[0] === 137 && body[1] === 80 && body[2] === 78 && body[3] === 71 && body[4] === 13 && body[5] === 10 && body[6] === 26 && body[7] === 10;
var isJpg = body[0] === 255 && body[1] === 216 && body[2] === 255;
var extension = '';
const resolveBlobImage = async blob => {
const {
type
} = blob;
if (!type || type === 'application/octet-stream') {
const arrayBuffer = await blob.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
return resolveBufferImage(buffer);
}
if (!type.startsWith('image/')) {
throw new Error(`Invalid blob type: ${type}`);
}
const format = type.replace('image/', '');
if (!isValidFormat(format)) {
throw new Error(`Invalid blob type: ${type}`);
}
const buffer = await blob.arrayBuffer();
return getImage(Buffer.from(buffer), format);
};
const getImageFormat = body => {
const isPng = body[0] === 137 && body[1] === 80 && body[2] === 78 && body[3] === 71 && body[4] === 13 && body[5] === 10 && body[6] === 26 && body[7] === 10;
const isJpg = body[0] === 255 && body[1] === 216 && body[2] === 255;
let extension = '';
if (isPng) {

@@ -254,49 +198,25 @@ extension = 'png';

};
var resolveImageFromUrl = /*#__PURE__*/function () {
var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(src) {
var uri, body, headers, _src$method, method, credentials, data, extension;
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
uri = src.uri, body = src.body, headers = src.headers, _src$method = src.method, method = _src$method === void 0 ? 'GET' : _src$method, credentials = src.credentials;
if (!(getAbsoluteLocalPath(uri))) {
_context3.next = 7;
break;
}
_context3.next = 4;
return fetchLocalFile(uri);
case 4:
_context3.t0 = _context3.sent;
_context3.next = 10;
break;
case 7:
_context3.next = 9;
return fetchRemoteFile(uri, {
body: body,
headers: headers,
method: method,
credentials: credentials
});
case 9:
_context3.t0 = _context3.sent;
case 10:
data = _context3.t0;
extension = getImageFormat(data);
return _context3.abrupt("return", getImage(data, extension));
case 13:
case "end":
return _context3.stop();
}
}, _callee3);
}));
return function resolveImageFromUrl(_x4) {
return _ref5.apply(this, arguments);
};
}();
var resolveImage = function resolveImage(src, _temp) {
var _ref6 = _temp === void 0 ? {} : _temp,
_ref6$cache = _ref6.cache,
cache = _ref6$cache === void 0 ? true : _ref6$cache;
var image;
var cacheKey = src.data ? src.data.toString() : src.uri;
const resolveImageFromUrl = async src => {
const {
uri,
body,
headers,
method = 'GET',
credentials
} = src;
const data = getAbsoluteLocalPath(uri) ? await fetchLocalFile(uri) : await fetchRemoteFile(uri, {
body,
headers,
method,
credentials
});
const extension = getImageFormat(data);
return getImage(data, extension);
};
const resolveImage = function (src, _temp) {
let {
cache = true
} = _temp === void 0 ? {} : _temp;
let image;
const cacheKey = src.data ? src.data.toString() : src.uri;
if (typeof Blob !== 'undefined' && src instanceof Blob) {

@@ -303,0 +223,0 @@ image = resolveBlobImage(src);

{
"name": "@react-pdf/image",
"version": "2.3.6",
"version": "3.0.0",
"license": "MIT",

@@ -9,15 +9,6 @@ "description": "Parses the images in png or jpeg format for react-pdf document",

"type": "module",
"main": "./lib/index.cjs",
"module": "./lib/index.js",
"main": "./lib/index.js",
"browser": {
"./lib/index.cjs": "./lib/index.browser.cjs",
"./lib/index.js": "./lib/index.browser.js"
},
"exports": {
".": {
"import": "./lib/index.js",
"require": "./lib/index.cjs",
"default": "./lib/index.js"
}
},
"repository": {

@@ -35,5 +26,5 @@ "type": "git",

"@babel/runtime": "^7.20.13",
"@react-pdf/png-js": "^2.3.1",
"@react-pdf/png-js": "^3.0.0",
"cross-fetch": "^3.1.5",
"jay-peg": "^1.0.2"
"jay-peg": "^1.1.0"
},

@@ -40,0 +31,0 @@ "files": [

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc