@webex/helper-image 3.0.0-beta.6 → 3.0.0-beta.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,21 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = detectFileType;
12
-
13
9
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
14
-
15
10
  var _httpCore = require("@webex/http-core");
16
-
17
11
  var _mime = require("mime");
18
-
19
12
  /*!
20
13
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
21
14
  */
@@ -31,20 +24,18 @@ function detectFileType(file, logger) {
31
24
  logger.info("file already has type ".concat(file.type, ". using existing file.type."));
32
25
  return _promise.default.resolve(file.type);
33
26
  }
34
-
35
27
  if (file.mimeType) {
36
28
  logger.info("file already has mimeType ".concat(file.type, ". using existing file.mimeType."));
37
29
  return _promise.default.resolve(file.mimeType);
38
- } // This kinda belongs in http core, but since we have no guarantee that
39
- // buffers are expected to have names there, it'll stay here for now.
40
-
30
+ }
41
31
 
32
+ // This kinda belongs in http core, but since we have no guarantee that
33
+ // buffers are expected to have names there, it'll stay here for now.
42
34
  return (0, _httpCore.detect)(file).then(function (type) {
43
35
  if (type === 'application/x-msi' || type === 'application/octet-stream') {
44
36
  logger.info("detected filetype to be ".concat(type, ". Falling back to mime.lookup"));
45
37
  return (0, _mime.getType)(file.name);
46
38
  }
47
-
48
39
  logger.info("detected filetype to be ".concat(type, ". returning it"));
49
40
  return type;
50
41
  });
@@ -1 +1 @@
1
- {"version":3,"names":["detectFileType","file","logger","type","info","resolve","mimeType","detect","then","getType","name"],"sources":["detect-filetype.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {detect} from '@webex/http-core';\nimport {getType} from 'mime';\n\n/**\n * Determines the file type of the specified file\n * @param {FileLike} file\n * @param {Object} logger\n * @returns {Promise<string>}\n */\nexport default function detectFileType(file, logger) {\n if (file.type) {\n logger.info(`file already has type ${file.type}. using existing file.type.`);\n\n return Promise.resolve(file.type);\n }\n\n if (file.mimeType) {\n logger.info(`file already has mimeType ${file.type}. using existing file.mimeType.`);\n\n return Promise.resolve(file.mimeType);\n }\n\n // This kinda belongs in http core, but since we have no guarantee that\n // buffers are expected to have names there, it'll stay here for now.\n return detect(file)\n .then((type) => {\n if (type === 'application/x-msi' || type === 'application/octet-stream') {\n logger.info(`detected filetype to be ${type}. Falling back to mime.lookup`);\n\n return getType(file.name);\n }\n\n logger.info(`detected filetype to be ${type}. returning it`);\n\n return type;\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AAIA;;AACA;;AALA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,cAAT,CAAwBC,IAAxB,EAA8BC,MAA9B,EAAsC;EACnD,IAAID,IAAI,CAACE,IAAT,EAAe;IACbD,MAAM,CAACE,IAAP,iCAAqCH,IAAI,CAACE,IAA1C;IAEA,OAAO,iBAAQE,OAAR,CAAgBJ,IAAI,CAACE,IAArB,CAAP;EACD;;EAED,IAAIF,IAAI,CAACK,QAAT,EAAmB;IACjBJ,MAAM,CAACE,IAAP,qCAAyCH,IAAI,CAACE,IAA9C;IAEA,OAAO,iBAAQE,OAAR,CAAgBJ,IAAI,CAACK,QAArB,CAAP;EACD,CAXkD,CAanD;EACA;;;EACA,OAAO,IAAAC,gBAAA,EAAON,IAAP,EACJO,IADI,CACC,UAACL,IAAD,EAAU;IACd,IAAIA,IAAI,KAAK,mBAAT,IAAgCA,IAAI,KAAK,0BAA7C,EAAyE;MACvED,MAAM,CAACE,IAAP,mCAAuCD,IAAvC;MAEA,OAAO,IAAAM,aAAA,EAAQR,IAAI,CAACS,IAAb,CAAP;IACD;;IAEDR,MAAM,CAACE,IAAP,mCAAuCD,IAAvC;IAEA,OAAOA,IAAP;EACD,CAXI,CAAP;AAYD"}
1
+ {"version":3,"names":["detectFileType","file","logger","type","info","resolve","mimeType","detect","then","getType","name"],"sources":["detect-filetype.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {detect} from '@webex/http-core';\nimport {getType} from 'mime';\n\n/**\n * Determines the file type of the specified file\n * @param {FileLike} file\n * @param {Object} logger\n * @returns {Promise<string>}\n */\nexport default function detectFileType(file, logger) {\n if (file.type) {\n logger.info(`file already has type ${file.type}. using existing file.type.`);\n\n return Promise.resolve(file.type);\n }\n\n if (file.mimeType) {\n logger.info(`file already has mimeType ${file.type}. using existing file.mimeType.`);\n\n return Promise.resolve(file.mimeType);\n }\n\n // This kinda belongs in http core, but since we have no guarantee that\n // buffers are expected to have names there, it'll stay here for now.\n return detect(file).then((type) => {\n if (type === 'application/x-msi' || type === 'application/octet-stream') {\n logger.info(`detected filetype to be ${type}. Falling back to mime.lookup`);\n\n return getType(file.name);\n }\n\n logger.info(`detected filetype to be ${type}. returning it`);\n\n return type;\n });\n}\n"],"mappings":";;;;;;;;;AAIA;AACA;AALA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,cAAc,CAACC,IAAI,EAAEC,MAAM,EAAE;EACnD,IAAID,IAAI,CAACE,IAAI,EAAE;IACbD,MAAM,CAACE,IAAI,iCAA0BH,IAAI,CAACE,IAAI,iCAA8B;IAE5E,OAAO,iBAAQE,OAAO,CAACJ,IAAI,CAACE,IAAI,CAAC;EACnC;EAEA,IAAIF,IAAI,CAACK,QAAQ,EAAE;IACjBJ,MAAM,CAACE,IAAI,qCAA8BH,IAAI,CAACE,IAAI,qCAAkC;IAEpF,OAAO,iBAAQE,OAAO,CAACJ,IAAI,CAACK,QAAQ,CAAC;EACvC;;EAEA;EACA;EACA,OAAO,IAAAC,gBAAM,EAACN,IAAI,CAAC,CAACO,IAAI,CAAC,UAACL,IAAI,EAAK;IACjC,IAAIA,IAAI,KAAK,mBAAmB,IAAIA,IAAI,KAAK,0BAA0B,EAAE;MACvED,MAAM,CAACE,IAAI,mCAA4BD,IAAI,mCAAgC;MAE3E,OAAO,IAAAM,aAAO,EAACR,IAAI,CAACS,IAAI,CAAC;IAC3B;IAEAR,MAAM,CAACE,IAAI,mCAA4BD,IAAI,oBAAiB;IAE5D,OAAOA,IAAI;EACb,CAAC,CAAC;AACJ"}
package/dist/index.js CHANGED
@@ -1,69 +1,54 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  _Object$defineProperty(exports, "detectFileType", {
12
9
  enumerable: true,
13
10
  get: function get() {
14
11
  return _detectFiletype.default;
15
12
  }
16
13
  });
17
-
18
14
  exports.orient = orient;
19
-
20
15
  _Object$defineProperty(exports, "processImage", {
21
16
  enumerable: true,
22
17
  get: function get() {
23
18
  return _processImage.default;
24
19
  }
25
20
  });
26
-
27
21
  exports.readExifData = readExifData;
28
22
  exports.updateImageOrientation = updateImageOrientation;
29
-
30
23
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
31
-
32
24
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
33
-
34
25
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
35
-
36
26
  var _processImage = _interopRequireDefault(require("./process-image"));
37
-
38
27
  var _detectFiletype = _interopRequireDefault(require("./detect-filetype"));
39
-
40
28
  /*!
41
29
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
42
30
  */
43
31
 
44
32
  /* eslint no-unused-vars: ["error", { "vars": "local" }] */
33
+ // eslint-disable-next-line no-redeclare
45
34
 
46
- /* global FileReader */
47
35
  var _require = require('safe-buffer'),
48
- Buffer = _require.Buffer;
49
-
36
+ Buffer = _require.Buffer;
50
37
  var _require2 = require('exifr/dist/lite.umd'),
51
- parse = _require2.parse;
52
- /**
53
- * Updates the image file with exif information, required to correctly rotate the image activity
54
- * @param {Object} file
55
- * @param {Object} options
56
- * @param {boolean} options.shouldNotAddExifData
57
- * @returns {Promise<Object>}
58
- */
59
-
38
+ parse = _require2.parse;
60
39
 
40
+ /**
41
+ * Updates the image file with exif information, required to correctly rotate the image activity
42
+ * @param {Object} file
43
+ * @param {Object} options
44
+ * @param {boolean} options.shouldNotAddExifData
45
+ * @returns {Promise<Object>}
46
+ */
61
47
  function updateImageOrientation(file) {
62
48
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
63
49
  return new _promise.default(function (resolve) {
64
50
  var reader = new FileReader();
65
51
  reader.readAsArrayBuffer(file);
66
-
67
52
  reader.onload = function onload() {
68
53
  var arrayBuffer = reader.result;
69
54
  var buf = Buffer.from(arrayBuffer);
@@ -73,84 +58,69 @@ function updateImageOrientation(file) {
73
58
  if (options.shouldNotAddExifData) {
74
59
  return buf;
75
60
  }
76
-
77
61
  return readExifData(file, buf);
78
62
  });
79
63
  }
80
- /**
81
- * Adds exif orientation information on the image file
82
- * @param {Object} file
83
- * @param {Object} buf
84
- * @returns {Promise<ExifImage>}
85
- */
86
-
87
64
 
65
+ /**
66
+ * Adds exif orientation information on the image file
67
+ * @param {Object} file
68
+ * @param {Object} buf
69
+ * @returns {Promise<ExifImage>}
70
+ */
88
71
  function readExifData(_x, _x2) {
89
72
  return _readExifData.apply(this, arguments);
90
73
  }
91
74
  /* eslint-disable complexity */
92
-
93
75
  /**
94
- * Rotates/flips the image on the canvas as per exif information
95
- * @param {Object} options(orientation: image exif orientation range from 1-8, img: Image object, x: start x-axis, y: start y-axis, width: width of the thumbnail, height: height of the thumbnail, ctx: canvas context)
96
- * @param {Object} file
97
- * @returns {Object}
98
- */
99
-
100
-
76
+ * Rotates/flips the image on the canvas as per exif information
77
+ * @param {Object} options(orientation: image exif orientation range from 1-8, img: Image object, x: start x-axis, y: start y-axis, width: width of the thumbnail, height: height of the thumbnail, ctx: canvas context)
78
+ * @param {Object} file
79
+ * @returns {Object}
80
+ */
101
81
  function _readExifData() {
102
82
  _readExifData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(file, buf) {
103
83
  var exifData, Orientation, ExifImageHeight, ExifImageWidth;
104
84
  return _regenerator.default.wrap(function _callee$(_context) {
105
- while (1) {
106
- switch (_context.prev = _context.next) {
107
- case 0:
108
- if (!(file && (file.type === 'image/jpeg' || file.mimeType === 'image/jpeg'))) {
109
- _context.next = 5;
110
- break;
85
+ while (1) switch (_context.prev = _context.next) {
86
+ case 0:
87
+ if (!(file && (file.type === 'image/jpeg' || file.mimeType === 'image/jpeg'))) {
88
+ _context.next = 5;
89
+ break;
90
+ }
91
+ _context.next = 3;
92
+ return parse(buf, {
93
+ translateValues: false
94
+ });
95
+ case 3:
96
+ exifData = _context.sent;
97
+ if (exifData) {
98
+ Orientation = exifData.Orientation, ExifImageHeight = exifData.ExifImageHeight, ExifImageWidth = exifData.ExifImageWidth;
99
+ file.orientation = Orientation;
100
+ file.exifHeight = ExifImageHeight;
101
+ file.exifWidth = ExifImageWidth;
102
+ if (file.image) {
103
+ file.image.orientation = Orientation;
111
104
  }
112
-
113
- _context.next = 3;
114
- return parse(buf, {
115
- translateValues: false
116
- });
117
-
118
- case 3:
119
- exifData = _context.sent;
120
-
121
- if (exifData) {
122
- Orientation = exifData.Orientation, ExifImageHeight = exifData.ExifImageHeight, ExifImageWidth = exifData.ExifImageWidth;
123
- file.orientation = Orientation;
124
- file.exifHeight = ExifImageHeight;
125
- file.exifWidth = ExifImageWidth;
126
-
127
- if (file.image) {
128
- file.image.orientation = Orientation;
129
- }
130
- }
131
-
132
- case 5:
133
- return _context.abrupt("return", buf);
134
-
135
- case 6:
136
- case "end":
137
- return _context.stop();
138
- }
105
+ }
106
+ case 5:
107
+ return _context.abrupt("return", buf);
108
+ case 6:
109
+ case "end":
110
+ return _context.stop();
139
111
  }
140
112
  }, _callee);
141
113
  }));
142
114
  return _readExifData.apply(this, arguments);
143
115
  }
144
-
145
116
  function orient(options, file) {
146
117
  var width = options.width,
147
- height = options.height,
148
- ctx = options.ctx,
149
- img = options.img,
150
- orientation = options.orientation,
151
- x = options.x,
152
- y = options.y;
153
-
118
+ height = options.height,
119
+ ctx = options.ctx,
120
+ img = options.img,
121
+ orientation = options.orientation,
122
+ x = options.x,
123
+ y = options.y;
154
124
  if (file && file.orientation && file.orientation !== 1) {
155
125
  // explanation of orientation:
156
126
  // https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images
@@ -159,42 +129,34 @@ function orient(options, file) {
159
129
  // flip
160
130
  ctx.transform(-1, 0, 0, 1, width, 0);
161
131
  break;
162
-
163
132
  case 3:
164
133
  // rotateImage180
165
134
  ctx.transform(-1, 0, 0, -1, width, height);
166
135
  break;
167
-
168
136
  case 4:
169
137
  // rotate180AndFlipImage
170
138
  ctx.transform(1, 0, 0, -1, 0, height);
171
139
  break;
172
-
173
140
  case 5:
174
141
  // rotate90AndFlipImage
175
142
  ctx.transform(0, 1, 1, 0, 0, 0);
176
143
  break;
177
-
178
144
  case 6:
179
145
  // rotateImage90
180
146
  ctx.transform(0, 1, -1, 0, height, 0);
181
147
  break;
182
-
183
148
  case 7:
184
149
  // rotateNeg90AndFlipImage
185
150
  ctx.transform(0, -1, -1, 0, height, width);
186
151
  break;
187
-
188
152
  case 8:
189
153
  // rotateNeg90
190
154
  ctx.transform(0, -1, 1, 0, 0, width);
191
155
  break;
192
-
193
156
  default:
194
157
  break;
195
158
  }
196
159
  }
197
-
198
160
  ctx.drawImage(img, x, y, width, height);
199
161
  }
200
162
  /* eslint-enable complexity */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["require","Buffer","parse","updateImageOrientation","file","options","resolve","reader","FileReader","readAsArrayBuffer","onload","arrayBuffer","result","buf","from","then","shouldNotAddExifData","readExifData","type","mimeType","translateValues","exifData","Orientation","ExifImageHeight","ExifImageWidth","orientation","exifHeight","exifWidth","image","orient","width","height","ctx","img","x","y","transform","drawImage"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint no-unused-vars: [\"error\", { \"vars\": \"local\" }] */\n/* global FileReader */\n\nconst {Buffer} = require('safe-buffer');\nconst {parse} = require('exifr/dist/lite.umd');\n\n/**\n* Updates the image file with exif information, required to correctly rotate the image activity\n* @param {Object} file\n* @param {Object} options\n* @param {boolean} options.shouldNotAddExifData\n* @returns {Promise<Object>}\n*/\nexport function updateImageOrientation(file, options = {}) {\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.readAsArrayBuffer(file);\n reader.onload = function onload() {\n const arrayBuffer = reader.result;\n const buf = Buffer.from(arrayBuffer);\n\n resolve(buf);\n };\n })\n .then((buf) => {\n if (options.shouldNotAddExifData) {\n return buf;\n }\n\n return readExifData(file, buf);\n });\n}\n\n/**\n* Adds exif orientation information on the image file\n* @param {Object} file\n* @param {Object} buf\n* @returns {Promise<ExifImage>}\n*/\nexport async function readExifData(file, buf) {\n // For avatar images the file.type is set as image/jpeg, however for images shared in an activity file.mimeType is set as image/jpeg. Handling both conditions.\n if (\n file &&\n (file.type === 'image/jpeg' || file.mimeType === 'image/jpeg')\n ) {\n const exifData = await parse(buf, {translateValues: false});\n\n if (exifData) {\n const {Orientation, ExifImageHeight, ExifImageWidth} = exifData;\n\n file.orientation = Orientation;\n file.exifHeight = ExifImageHeight;\n file.exifWidth = ExifImageWidth;\n\n if (file.image) {\n file.image.orientation = Orientation;\n }\n }\n }\n\n return buf;\n}\n\n/* eslint-disable complexity */\n/**\n* Rotates/flips the image on the canvas as per exif information\n* @param {Object} options(orientation: image exif orientation range from 1-8, img: Image object, x: start x-axis, y: start y-axis, width: width of the thumbnail, height: height of the thumbnail, ctx: canvas context)\n* @param {Object} file\n* @returns {Object}\n*/\nexport function orient(options, file) {\n const {\n width, height, ctx, img, orientation, x, y\n } = options;\n\n if (file && file.orientation && file.orientation !== 1) {\n // explanation of orientation:\n // https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images\n switch (orientation) {\n case 2:\n // flip\n ctx.transform(-1, 0, 0, 1, width, 0);\n break;\n case 3:\n // rotateImage180\n ctx.transform(-1, 0, 0, -1, width, height);\n break;\n case 4:\n // rotate180AndFlipImage\n ctx.transform(1, 0, 0, -1, 0, height);\n break;\n case 5:\n // rotate90AndFlipImage\n ctx.transform(0, 1, 1, 0, 0, 0);\n break;\n case 6:\n // rotateImage90\n ctx.transform(0, 1, -1, 0, height, 0);\n break;\n case 7:\n // rotateNeg90AndFlipImage\n ctx.transform(0, -1, -1, 0, height, width);\n break;\n case 8:\n // rotateNeg90\n ctx.transform(0, -1, 1, 0, 0, width);\n break;\n default:\n break;\n }\n }\n ctx.drawImage(img, x, y, width, height);\n}\n/* eslint-enable complexity */\n\nexport {default as processImage} from './process-image';\nexport {default as detectFileType} from './detect-filetype';\n"],"mappings":"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"}
1
+ {"version":3,"names":["require","Buffer","parse","updateImageOrientation","file","options","resolve","reader","FileReader","readAsArrayBuffer","onload","arrayBuffer","result","buf","from","then","shouldNotAddExifData","readExifData","type","mimeType","translateValues","exifData","Orientation","ExifImageHeight","ExifImageWidth","orientation","exifHeight","exifWidth","image","orient","width","height","ctx","img","x","y","transform","drawImage"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint no-unused-vars: [\"error\", { \"vars\": \"local\" }] */\n// eslint-disable-next-line no-redeclare\n\nconst {Buffer} = require('safe-buffer');\nconst {parse} = require('exifr/dist/lite.umd');\n\n/**\n * Updates the image file with exif information, required to correctly rotate the image activity\n * @param {Object} file\n * @param {Object} options\n * @param {boolean} options.shouldNotAddExifData\n * @returns {Promise<Object>}\n */\nexport function updateImageOrientation(file, options = {}) {\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.readAsArrayBuffer(file);\n reader.onload = function onload() {\n const arrayBuffer = reader.result;\n const buf = Buffer.from(arrayBuffer);\n\n resolve(buf);\n };\n }).then((buf) => {\n if (options.shouldNotAddExifData) {\n return buf;\n }\n\n return readExifData(file, buf);\n });\n}\n\n/**\n * Adds exif orientation information on the image file\n * @param {Object} file\n * @param {Object} buf\n * @returns {Promise<ExifImage>}\n */\nexport async function readExifData(file, buf) {\n // For avatar images the file.type is set as image/jpeg, however for images shared in an activity file.mimeType is set as image/jpeg. Handling both conditions.\n if (file && (file.type === 'image/jpeg' || file.mimeType === 'image/jpeg')) {\n const exifData = await parse(buf, {translateValues: false});\n\n if (exifData) {\n const {Orientation, ExifImageHeight, ExifImageWidth} = exifData;\n\n file.orientation = Orientation;\n file.exifHeight = ExifImageHeight;\n file.exifWidth = ExifImageWidth;\n\n if (file.image) {\n file.image.orientation = Orientation;\n }\n }\n }\n\n return buf;\n}\n\n/* eslint-disable complexity */\n/**\n * Rotates/flips the image on the canvas as per exif information\n * @param {Object} options(orientation: image exif orientation range from 1-8, img: Image object, x: start x-axis, y: start y-axis, width: width of the thumbnail, height: height of the thumbnail, ctx: canvas context)\n * @param {Object} file\n * @returns {Object}\n */\nexport function orient(options, file) {\n const {width, height, ctx, img, orientation, x, y} = options;\n\n if (file && file.orientation && file.orientation !== 1) {\n // explanation of orientation:\n // https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images\n switch (orientation) {\n case 2:\n // flip\n ctx.transform(-1, 0, 0, 1, width, 0);\n break;\n case 3:\n // rotateImage180\n ctx.transform(-1, 0, 0, -1, width, height);\n break;\n case 4:\n // rotate180AndFlipImage\n ctx.transform(1, 0, 0, -1, 0, height);\n break;\n case 5:\n // rotate90AndFlipImage\n ctx.transform(0, 1, 1, 0, 0, 0);\n break;\n case 6:\n // rotateImage90\n ctx.transform(0, 1, -1, 0, height, 0);\n break;\n case 7:\n // rotateNeg90AndFlipImage\n ctx.transform(0, -1, -1, 0, height, width);\n break;\n case 8:\n // rotateNeg90\n ctx.transform(0, -1, 1, 0, 0, width);\n break;\n default:\n break;\n }\n }\n ctx.drawImage(img, x, y, width, height);\n}\n/* eslint-enable complexity */\n\nexport {default as processImage} from './process-image';\nexport {default as detectFileType} from './detect-filetype';\n"],"mappings":"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"}
@@ -1,21 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = processImage;
12
-
13
9
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
14
-
15
10
  var _pick2 = _interopRequireDefault(require("lodash/pick"));
16
-
17
11
  var _index = require("./index");
18
-
19
12
  /* eslint-env browser */
20
13
 
21
14
  /**
@@ -29,14 +22,12 @@ var _index = require("./index");
29
22
  */
30
23
  function computeDimensions(_ref, maxWidth, maxHeight) {
31
24
  var width = _ref.width,
32
- height = _ref.height;
33
-
25
+ height = _ref.height;
34
26
  if (height > width) {
35
27
  if (height > maxHeight) {
36
28
  width = width * maxHeight / height;
37
29
  height = maxHeight;
38
30
  }
39
-
40
31
  if (width > maxWidth) {
41
32
  height = height * maxWidth / width;
42
33
  width = maxWidth;
@@ -46,18 +37,17 @@ function computeDimensions(_ref, maxWidth, maxHeight) {
46
37
  height = height * maxWidth / width;
47
38
  width = maxWidth;
48
39
  }
49
-
50
40
  if (height > maxHeight) {
51
41
  width = width * maxHeight / height;
52
42
  height = maxHeight;
53
43
  }
54
44
  }
55
-
56
45
  return {
57
46
  height: height,
58
47
  width: width
59
48
  };
60
49
  }
50
+
61
51
  /**
62
52
  * Measures an image file and produces a thumbnail for it
63
53
  * @param {Object} options
@@ -69,34 +59,27 @@ function computeDimensions(_ref, maxWidth, maxHeight) {
69
59
  * @param {Boolean} options.isAvatar
70
60
  * @returns {Promise<Array>} Buffer, Dimensions, thumbnailDimensions
71
61
  */
72
-
73
-
74
62
  function processImage(_ref2) {
75
63
  var file = _ref2.file,
76
- type = _ref2.type,
77
- thumbnailMaxWidth = _ref2.thumbnailMaxWidth,
78
- thumbnailMaxHeight = _ref2.thumbnailMaxHeight,
79
- enableThumbnails = _ref2.enableThumbnails,
80
- logger = _ref2.logger,
81
- isAvatar = _ref2.isAvatar;
82
-
64
+ type = _ref2.type,
65
+ thumbnailMaxWidth = _ref2.thumbnailMaxWidth,
66
+ thumbnailMaxHeight = _ref2.thumbnailMaxHeight,
67
+ enableThumbnails = _ref2.enableThumbnails,
68
+ logger = _ref2.logger,
69
+ isAvatar = _ref2.isAvatar;
83
70
  if (!type || !type.startsWith('image')) {
84
71
  return _promise.default.resolve();
85
72
  }
86
-
87
73
  file = file instanceof Blob ? file : new Blob([file]);
88
74
  return new _promise.default(function (resolve, reject) {
89
75
  var img = new Image();
90
-
91
76
  img.onload = function onload() {
92
77
  resolve(img);
93
78
  };
94
-
95
79
  img.onerror = reject;
96
80
  img.src = URL.createObjectURL(file);
97
81
  }).then(function (img) {
98
82
  var fileDimensions = (0, _pick2.default)(img, 'height', 'width');
99
-
100
83
  if (isAvatar) {
101
84
  // only if image is a profile avatar
102
85
  logger.info('dimensions will be set for avatar image');
@@ -104,19 +87,18 @@ function processImage(_ref2) {
104
87
  fileDimensions.height = size;
105
88
  fileDimensions.width = size;
106
89
  }
107
-
108
90
  if (!enableThumbnails) {
109
91
  logger.info('thumbnails not enabled');
110
92
  return [null, fileDimensions, null];
111
93
  }
112
-
113
94
  var thumbnailDimensions = computeDimensions(fileDimensions, thumbnailMaxWidth, thumbnailMaxHeight);
114
95
  var canvas = document.createElement('canvas');
115
96
  var ctx = canvas.getContext('2d');
116
97
  var width = thumbnailDimensions.width,
117
- height = thumbnailDimensions.height; // explanation of orientation:
118
- // https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images
98
+ height = thumbnailDimensions.height;
119
99
 
100
+ // explanation of orientation:
101
+ // https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images
120
102
  if (file.orientation && file.orientation > 4) {
121
103
  canvas.width = height;
122
104
  canvas.height = width;
@@ -126,7 +108,6 @@ function processImage(_ref2) {
126
108
  canvas.width = thumbnailDimensions.width;
127
109
  canvas.height = thumbnailDimensions.height;
128
110
  }
129
-
130
111
  (0, _index.orient)({
131
112
  orientation: file && file.orientation ? file.orientation : '',
132
113
  img: img,
@@ -136,16 +117,14 @@ function processImage(_ref2) {
136
117
  height: height,
137
118
  ctx: ctx
138
119
  }, file);
139
- var parts = canvas.toDataURL('image/png').split(','); // Thumbnail uploads were failing with common/base64 decoding
140
-
120
+ var parts = canvas.toDataURL('image/png').split(',');
121
+ // Thumbnail uploads were failing with common/base64 decoding
141
122
  var byteString = atob(parts[1]);
142
123
  var buffer = new ArrayBuffer(byteString.length);
143
124
  var view = new DataView(buffer);
144
-
145
125
  for (var i = 0; i < byteString.length; i += 1) {
146
126
  view.setUint8(i, byteString.charCodeAt(i));
147
127
  }
148
-
149
128
  return [buffer, fileDimensions, thumbnailDimensions];
150
129
  });
151
130
  }
@@ -1 +1 @@
1
- {"version":3,"names":["computeDimensions","maxWidth","maxHeight","width","height","processImage","file","type","thumbnailMaxWidth","thumbnailMaxHeight","enableThumbnails","logger","isAvatar","startsWith","resolve","Blob","reject","img","Image","onload","onerror","src","URL","createObjectURL","then","fileDimensions","info","size","thumbnailDimensions","canvas","document","createElement","ctx","getContext","orientation","orient","x","y","parts","toDataURL","split","byteString","atob","buffer","ArrayBuffer","length","view","DataView","i","setUint8","charCodeAt"],"sources":["process-image.browser.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {pick} from 'lodash';\n\nimport {orient} from './index';\n/* eslint-env browser */\n\n/**\n * Determins the dimensions of an image\n * @param {Object} constraints\n * @param {Number} constraints.width\n * @param {Number} constraints.height\n * @param {Number} maxWidth\n * @param {Number} maxHeight\n * @returns {Object}\n */\nfunction computeDimensions({width, height}, maxWidth, maxHeight) {\n if (height > width) {\n if (height > maxHeight) {\n width = width * maxHeight / height;\n height = maxHeight;\n }\n\n if (width > maxWidth) {\n height = height * maxWidth / width;\n width = maxWidth;\n }\n }\n else {\n if (width > maxWidth) {\n height = height * maxWidth / width;\n width = maxWidth;\n }\n\n if (height > maxHeight) {\n width = width * maxHeight / height;\n height = maxHeight;\n }\n }\n\n return {height, width};\n}\n\n/**\n * Measures an image file and produces a thumbnail for it\n * @param {Object} options\n * @param {Blob|ArrayBuffer} options.file\n * @param {Number} options.thumbnailMaxWidth\n * @param {Number} options.thumbnailMaxHeight\n * @param {Boolean} options.enableThumbnails\n * @param {Object} options.logger\n * @param {Boolean} options.isAvatar\n * @returns {Promise<Array>} Buffer, Dimensions, thumbnailDimensions\n */\nexport default function processImage({\n file, type, thumbnailMaxWidth, thumbnailMaxHeight, enableThumbnails, logger, isAvatar\n}) {\n if (!type || !type.startsWith('image')) {\n return Promise.resolve();\n }\n\n file = file instanceof Blob ? file : new Blob([file]);\n\n return new Promise((resolve, reject) => {\n const img = new Image();\n\n img.onload = function onload() {\n resolve(img);\n };\n img.onerror = reject;\n img.src = URL.createObjectURL(file);\n })\n .then((img) => {\n const fileDimensions = pick(img, 'height', 'width');\n\n if (isAvatar) { // only if image is a profile avatar\n logger.info('dimensions will be set for avatar image');\n const size = fileDimensions.height > fileDimensions.width ? fileDimensions.height : fileDimensions.width;\n\n fileDimensions.height = size;\n fileDimensions.width = size;\n }\n if (!enableThumbnails) {\n logger.info('thumbnails not enabled');\n\n return [null, fileDimensions, null];\n }\n const thumbnailDimensions = computeDimensions(fileDimensions, thumbnailMaxWidth, thumbnailMaxHeight);\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const {width, height} = thumbnailDimensions;\n\n // explanation of orientation:\n // https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images\n if (file.orientation && file.orientation > 4) {\n canvas.width = height;\n canvas.height = width;\n thumbnailDimensions.width = height;\n thumbnailDimensions.height = width;\n }\n else {\n canvas.width = thumbnailDimensions.width;\n canvas.height = thumbnailDimensions.height;\n }\n\n\n orient(\n {\n orientation: file && file.orientation ? file.orientation : '',\n img,\n x: 0,\n y: 0,\n width,\n height,\n ctx\n },\n file\n );\n\n const parts = canvas.toDataURL('image/png').split(',');\n // Thumbnail uploads were failing with common/base64 decoding\n const byteString = atob(parts[1]);\n\n const buffer = new ArrayBuffer(byteString.length);\n const view = new DataView(buffer);\n\n for (let i = 0; i < byteString.length; i += 1) {\n view.setUint8(i, byteString.charCodeAt(i));\n }\n\n return [buffer, fileDimensions, thumbnailDimensions];\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["computeDimensions","maxWidth","maxHeight","width","height","processImage","file","type","thumbnailMaxWidth","thumbnailMaxHeight","enableThumbnails","logger","isAvatar","startsWith","resolve","Blob","reject","img","Image","onload","onerror","src","URL","createObjectURL","then","fileDimensions","info","size","thumbnailDimensions","canvas","document","createElement","ctx","getContext","orientation","orient","x","y","parts","toDataURL","split","byteString","atob","buffer","ArrayBuffer","length","view","DataView","i","setUint8","charCodeAt"],"sources":["process-image.browser.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {pick} from 'lodash';\n\nimport {orient} from './index';\n/* eslint-env browser */\n\n/**\n * Determins the dimensions of an image\n * @param {Object} constraints\n * @param {Number} constraints.width\n * @param {Number} constraints.height\n * @param {Number} maxWidth\n * @param {Number} maxHeight\n * @returns {Object}\n */\nfunction computeDimensions({width, height}, maxWidth, maxHeight) {\n if (height > width) {\n if (height > maxHeight) {\n width = (width * maxHeight) / height;\n height = maxHeight;\n }\n\n if (width > maxWidth) {\n height = (height * maxWidth) / width;\n width = maxWidth;\n }\n } else {\n if (width > maxWidth) {\n height = (height * maxWidth) / width;\n width = maxWidth;\n }\n\n if (height > maxHeight) {\n width = (width * maxHeight) / height;\n height = maxHeight;\n }\n }\n\n return {height, width};\n}\n\n/**\n * Measures an image file and produces a thumbnail for it\n * @param {Object} options\n * @param {Blob|ArrayBuffer} options.file\n * @param {Number} options.thumbnailMaxWidth\n * @param {Number} options.thumbnailMaxHeight\n * @param {Boolean} options.enableThumbnails\n * @param {Object} options.logger\n * @param {Boolean} options.isAvatar\n * @returns {Promise<Array>} Buffer, Dimensions, thumbnailDimensions\n */\nexport default function processImage({\n file,\n type,\n thumbnailMaxWidth,\n thumbnailMaxHeight,\n enableThumbnails,\n logger,\n isAvatar,\n}) {\n if (!type || !type.startsWith('image')) {\n return Promise.resolve();\n }\n\n file = file instanceof Blob ? file : new Blob([file]);\n\n return new Promise((resolve, reject) => {\n const img = new Image();\n\n img.onload = function onload() {\n resolve(img);\n };\n img.onerror = reject;\n img.src = URL.createObjectURL(file);\n }).then((img) => {\n const fileDimensions = pick(img, 'height', 'width');\n\n if (isAvatar) {\n // only if image is a profile avatar\n logger.info('dimensions will be set for avatar image');\n const size =\n fileDimensions.height > fileDimensions.width ? fileDimensions.height : fileDimensions.width;\n\n fileDimensions.height = size;\n fileDimensions.width = size;\n }\n if (!enableThumbnails) {\n logger.info('thumbnails not enabled');\n\n return [null, fileDimensions, null];\n }\n const thumbnailDimensions = computeDimensions(\n fileDimensions,\n thumbnailMaxWidth,\n thumbnailMaxHeight\n );\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const {width, height} = thumbnailDimensions;\n\n // explanation of orientation:\n // https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images\n if (file.orientation && file.orientation > 4) {\n canvas.width = height;\n canvas.height = width;\n thumbnailDimensions.width = height;\n thumbnailDimensions.height = width;\n } else {\n canvas.width = thumbnailDimensions.width;\n canvas.height = thumbnailDimensions.height;\n }\n\n orient(\n {\n orientation: file && file.orientation ? file.orientation : '',\n img,\n x: 0,\n y: 0,\n width,\n height,\n ctx,\n },\n file\n );\n\n const parts = canvas.toDataURL('image/png').split(',');\n // Thumbnail uploads were failing with common/base64 decoding\n const byteString = atob(parts[1]);\n\n const buffer = new ArrayBuffer(byteString.length);\n const view = new DataView(buffer);\n\n for (let i = 0; i < byteString.length; i += 1) {\n view.setUint8(i, byteString.charCodeAt(i));\n }\n\n return [buffer, fileDimensions, thumbnailDimensions];\n });\n}\n"],"mappings":"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"}