@webex/helper-image 2.59.2 → 2.59.3-next.1

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.
package/.eslintrc.js CHANGED
@@ -1,6 +1,6 @@
1
- const config = {
2
- root: true,
3
- extends: ['@webex/eslint-config-legacy'],
4
- };
5
-
6
- module.exports = config;
1
+ const config = {
2
+ root: true,
3
+ extends: ['@webex/eslint-config-legacy'],
4
+ };
5
+
6
+ module.exports = config;
package/README.md CHANGED
@@ -1,43 +1,43 @@
1
- # @webex/helper-image
2
-
3
- [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme)
4
-
5
- > Helpers for rotating images and creating their thumbnails. Mostly browser-only.
6
-
7
- - [Install](#install)
8
- - [Usage](#usage)
9
- - [Contribute](#contribute)
10
- - [Maintainers](#maintainers)
11
- - [License](#license)
12
-
13
- ## Install
14
-
15
- ```bash
16
- npm install --save @webex/helper-image
17
- ```
18
-
19
- ## Usage
20
-
21
- ### `updateImageOrientation(file, options)`
22
-
23
- Updates the image file with exif information, required to correctly rotate the image activity. Can specify `options.shouldNotAddExifData` to not add exif information. For example, clients may not need the exif data added if browsers already auto orient the image
24
-
25
- ### `readExifData(file, buf)`
26
-
27
- Adds exif orientation information on the image file
28
-
29
- ### `orient(options, file)`
30
-
31
- Rotates/flips the image on the canvas as per exif information
32
-
33
- ## Maintainers
34
-
35
- This package is maintained by [Cisco Webex for Developers](https://developer.webex.com/).
36
-
37
- ## Contribute
38
-
39
- Pull requests welcome. Please see [CONTRIBUTING.md](https://github.com/webex/webex-js-sdk/blob/master/CONTRIBUTING.md) for more details.
40
-
41
- ## License
42
-
43
- © 2016-2020 Cisco and/or its affiliates. All Rights Reserved.
1
+ # @webex/helper-image
2
+
3
+ [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme)
4
+
5
+ > Helpers for rotating images and creating their thumbnails. Mostly browser-only.
6
+
7
+ - [Install](#install)
8
+ - [Usage](#usage)
9
+ - [Contribute](#contribute)
10
+ - [Maintainers](#maintainers)
11
+ - [License](#license)
12
+
13
+ ## Install
14
+
15
+ ```bash
16
+ npm install --save @webex/helper-image
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ### `updateImageOrientation(file, options)`
22
+
23
+ Updates the image file with exif information, required to correctly rotate the image activity. Can specify `options.shouldNotAddExifData` to not add exif information. For example, clients may not need the exif data added if browsers already auto orient the image
24
+
25
+ ### `readExifData(file, buf)`
26
+
27
+ Adds exif orientation information on the image file
28
+
29
+ ### `orient(options, file)`
30
+
31
+ Rotates/flips the image on the canvas as per exif information
32
+
33
+ ## Maintainers
34
+
35
+ This package is maintained by [Cisco Webex for Developers](https://developer.webex.com/).
36
+
37
+ ## Contribute
38
+
39
+ Pull requests welcome. Please see [CONTRIBUTING.md](https://github.com/webex/webex-js-sdk/blob/master/CONTRIBUTING.md) for more details.
40
+
41
+ ## License
42
+
43
+ © 2016-2020 Cisco and/or its affiliates. All Rights Reserved.
package/babel.config.js CHANGED
@@ -1,3 +1,3 @@
1
- const babelConfigLegacy = require('@webex/babel-config-legacy');
2
-
3
- module.exports = babelConfigLegacy;
1
+ const babelConfigLegacy = require('@webex/babel-config-legacy');
2
+
3
+ module.exports = babelConfigLegacy;
@@ -9,15 +9,15 @@ exports.default = detectFileType;
9
9
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
10
10
  var _httpCore = require("@webex/http-core");
11
11
  var _mime = require("mime");
12
- /*!
13
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
12
+ /*!
13
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
14
14
  */
15
15
 
16
- /**
17
- * Determines the file type of the specified file
18
- * @param {FileLike} file
19
- * @param {Object} logger
20
- * @returns {Promise<string>}
16
+ /**
17
+ * Determines the file type of the specified file
18
+ * @param {FileLike} file
19
+ * @param {Object} logger
20
+ * @returns {Promise<string>}
21
21
  */
22
22
  function detectFileType(file, logger) {
23
23
  if (file.type) {
@@ -1 +1 @@
1
- {"version":3,"names":["_httpCore","require","_mime","detectFileType","file","logger","type","info","concat","_promise","default","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,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AALA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACe,SAASE,cAAcA,CAACC,IAAI,EAAEC,MAAM,EAAE;EACnD,IAAID,IAAI,CAACE,IAAI,EAAE;IACbD,MAAM,CAACE,IAAI,0BAAAC,MAAA,CAA0BJ,IAAI,CAACE,IAAI,iCAA8B;IAE5E,OAAOG,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAACP,IAAI,CAACE,IAAI,CAAC;EACnC;EAEA,IAAIF,IAAI,CAACQ,QAAQ,EAAE;IACjBP,MAAM,CAACE,IAAI,8BAAAC,MAAA,CAA8BJ,IAAI,CAACE,IAAI,qCAAkC;IAEpF,OAAOG,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAACP,IAAI,CAACQ,QAAQ,CAAC;EACvC;;EAEA;EACA;EACA,OAAO,IAAAC,gBAAM,EAACT,IAAI,CAAC,CAACU,IAAI,CAAC,UAACR,IAAI,EAAK;IACjC,IAAIA,IAAI,KAAK,mBAAmB,IAAIA,IAAI,KAAK,0BAA0B,EAAE;MACvED,MAAM,CAACE,IAAI,4BAAAC,MAAA,CAA4BF,IAAI,mCAAgC;MAE3E,OAAO,IAAAS,aAAO,EAACX,IAAI,CAACY,IAAI,CAAC;IAC3B;IAEAX,MAAM,CAACE,IAAI,4BAAAC,MAAA,CAA4BF,IAAI,oBAAiB;IAE5D,OAAOA,IAAI;EACb,CAAC,CAAC;AACJ"}
1
+ {"version":3,"names":["_httpCore","require","_mime","detectFileType","file","logger","type","info","concat","_promise","default","resolve","mimeType","detect","then","getType","name"],"sources":["detect-filetype.js"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nimport {detect} from '@webex/http-core';\r\nimport {getType} from 'mime';\r\n\r\n/**\r\n * Determines the file type of the specified file\r\n * @param {FileLike} file\r\n * @param {Object} logger\r\n * @returns {Promise<string>}\r\n */\r\nexport default function detectFileType(file, logger) {\r\n if (file.type) {\r\n logger.info(`file already has type ${file.type}. using existing file.type.`);\r\n\r\n return Promise.resolve(file.type);\r\n }\r\n\r\n if (file.mimeType) {\r\n logger.info(`file already has mimeType ${file.type}. using existing file.mimeType.`);\r\n\r\n return Promise.resolve(file.mimeType);\r\n }\r\n\r\n // This kinda belongs in http core, but since we have no guarantee that\r\n // buffers are expected to have names there, it'll stay here for now.\r\n return detect(file).then((type) => {\r\n if (type === 'application/x-msi' || type === 'application/octet-stream') {\r\n logger.info(`detected filetype to be ${type}. Falling back to mime.lookup`);\r\n\r\n return getType(file.name);\r\n }\r\n\r\n logger.info(`detected filetype to be ${type}. returning it`);\r\n\r\n return type;\r\n });\r\n}\r\n"],"mappings":";;;;;;;;;AAIA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AALA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACe,SAASE,cAAcA,CAACC,IAAI,EAAEC,MAAM,EAAE;EACnD,IAAID,IAAI,CAACE,IAAI,EAAE;IACbD,MAAM,CAACE,IAAI,0BAAAC,MAAA,CAA0BJ,IAAI,CAACE,IAAI,iCAA8B;IAE5E,OAAOG,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAACP,IAAI,CAACE,IAAI,CAAC;EACnC;EAEA,IAAIF,IAAI,CAACQ,QAAQ,EAAE;IACjBP,MAAM,CAACE,IAAI,8BAAAC,MAAA,CAA8BJ,IAAI,CAACE,IAAI,qCAAkC;IAEpF,OAAOG,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAACP,IAAI,CAACQ,QAAQ,CAAC;EACvC;;EAEA;EACA;EACA,OAAO,IAAAC,gBAAM,EAACT,IAAI,CAAC,CAACU,IAAI,CAAC,UAACR,IAAI,EAAK;IACjC,IAAIA,IAAI,KAAK,mBAAmB,IAAIA,IAAI,KAAK,0BAA0B,EAAE;MACvED,MAAM,CAACE,IAAI,4BAAAC,MAAA,CAA4BF,IAAI,mCAAgC;MAE3E,OAAO,IAAAS,aAAO,EAACX,IAAI,CAACY,IAAI,CAAC;IAC3B;IAEAX,MAAM,CAACE,IAAI,4BAAAC,MAAA,CAA4BF,IAAI,oBAAiB;IAE5D,OAAOA,IAAI;EACb,CAAC,CAAC;AACJ"}
package/dist/index.js CHANGED
@@ -24,8 +24,8 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/
24
24
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
25
25
  var _processImage = _interopRequireDefault(require("./process-image"));
26
26
  var _detectFiletype = _interopRequireDefault(require("./detect-filetype"));
27
- /*!
28
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
27
+ /*!
28
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
29
29
  */
30
30
 
31
31
  /* eslint no-unused-vars: ["error", { "vars": "local" }] */
@@ -36,12 +36,12 @@ var _require = require('safe-buffer'),
36
36
  var _require2 = require('exifr/dist/lite.umd'),
37
37
  parse = _require2.parse;
38
38
 
39
- /**
40
- * Updates the image file with exif information, required to correctly rotate the image activity
41
- * @param {Object} file
42
- * @param {Object} options
43
- * @param {boolean} options.shouldNotAddExifData
44
- * @returns {Promise<Object>}
39
+ /**
40
+ * Updates the image file with exif information, required to correctly rotate the image activity
41
+ * @param {Object} file
42
+ * @param {Object} options
43
+ * @param {boolean} options.shouldNotAddExifData
44
+ * @returns {Promise<Object>}
45
45
  */
46
46
  function updateImageOrientation(file) {
47
47
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -61,11 +61,11 @@ function updateImageOrientation(file) {
61
61
  });
62
62
  }
63
63
 
64
- /**
65
- * Adds exif orientation information on the image file
66
- * @param {Object} file
67
- * @param {Object} buf
68
- * @returns {Promise<ExifImage>}
64
+ /**
65
+ * Adds exif orientation information on the image file
66
+ * @param {Object} file
67
+ * @param {Object} buf
68
+ * @returns {Promise<ExifImage>}
69
69
  */
70
70
  function readExifData(_x, _x2) {
71
71
  return _readExifData.apply(this, arguments);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_processImage","_interopRequireDefault","require","_detectFiletype","_require","Buffer","_require2","parse","updateImageOrientation","file","options","arguments","length","undefined","_promise","default","resolve","reader","FileReader","readAsArrayBuffer","onload","arrayBuffer","result","buf","from","then","shouldNotAddExifData","readExifData","_x","_x2","_readExifData","apply","_asyncToGenerator2","_regenerator","mark","_callee","exifData","Orientation","ExifImageHeight","ExifImageWidth","wrap","_callee$","_context","prev","next","type","mimeType","translateValues","sent","orientation","exifHeight","exifWidth","image","abrupt","stop"],"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-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":["_processImage","_interopRequireDefault","require","_detectFiletype","_require","Buffer","_require2","parse","updateImageOrientation","file","options","arguments","length","undefined","_promise","default","resolve","reader","FileReader","readAsArrayBuffer","onload","arrayBuffer","result","buf","from","then","shouldNotAddExifData","readExifData","_x","_x2","_readExifData","apply","_asyncToGenerator2","_regenerator","mark","_callee","exifData","Orientation","ExifImageHeight","ExifImageWidth","wrap","_callee$","_context","prev","next","type","mimeType","translateValues","sent","orientation","exifHeight","exifWidth","image","abrupt","stop"],"sources":["index.js"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\n/* eslint no-unused-vars: [\"error\", { \"vars\": \"local\" }] */\r\n// eslint-disable-next-line no-redeclare\r\n\r\nconst {Buffer} = require('safe-buffer');\r\nconst {parse} = require('exifr/dist/lite.umd');\r\n\r\n/**\r\n * Updates the image file with exif information, required to correctly rotate the image activity\r\n * @param {Object} file\r\n * @param {Object} options\r\n * @param {boolean} options.shouldNotAddExifData\r\n * @returns {Promise<Object>}\r\n */\r\nexport function updateImageOrientation(file, options = {}) {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n\r\n reader.readAsArrayBuffer(file);\r\n reader.onload = function onload() {\r\n const arrayBuffer = reader.result;\r\n const buf = Buffer.from(arrayBuffer);\r\n\r\n resolve(buf);\r\n };\r\n }).then((buf) => {\r\n if (options.shouldNotAddExifData) {\r\n return buf;\r\n }\r\n\r\n return readExifData(file, buf);\r\n });\r\n}\r\n\r\n/**\r\n * Adds exif orientation information on the image file\r\n * @param {Object} file\r\n * @param {Object} buf\r\n * @returns {Promise<ExifImage>}\r\n */\r\nexport async function readExifData(file, buf) {\r\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.\r\n if (file && (file.type === 'image/jpeg' || file.mimeType === 'image/jpeg')) {\r\n const exifData = await parse(buf, {translateValues: false});\r\n\r\n if (exifData) {\r\n const {Orientation, ExifImageHeight, ExifImageWidth} = exifData;\r\n\r\n file.orientation = Orientation;\r\n file.exifHeight = ExifImageHeight;\r\n file.exifWidth = ExifImageWidth;\r\n\r\n if (file.image) {\r\n file.image.orientation = Orientation;\r\n }\r\n }\r\n }\r\n\r\n return buf;\r\n}\r\n\r\n/* eslint-enable complexity */\r\n\r\nexport {default as processImage} from './process-image';\r\nexport {default as detectFileType} from './detect-filetype';\r\n"],"mappings":"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"}
package/dist/orient.js CHANGED
@@ -6,11 +6,11 @@ _Object$defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.orient = orient;
8
8
  /* eslint-disable complexity */
9
- /**
10
- * Rotates/flips the image on the canvas as per exif information
11
- * @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)
12
- * @param {Object} file
13
- * @returns {Object}
9
+ /**
10
+ * Rotates/flips the image on the canvas as per exif information
11
+ * @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)
12
+ * @param {Object} file
13
+ * @returns {Object}
14
14
  */
15
15
  function orient(options, file) {
16
16
  var width = options.width,
@@ -1 +1 @@
1
- {"version":3,"names":["orient","options","file","width","height","ctx","img","orientation","x","y","transform","drawImage"],"sources":["orient.js"],"sourcesContent":["/* 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"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,MAAMA,CAACC,OAAO,EAAEC,IAAI,EAAE;EACpC,IAAOC,KAAK,GAAyCF,OAAO,CAArDE,KAAK;IAAEC,MAAM,GAAiCH,OAAO,CAA9CG,MAAM;IAAEC,GAAG,GAA4BJ,OAAO,CAAtCI,GAAG;IAAEC,GAAG,GAAuBL,OAAO,CAAjCK,GAAG;IAAEC,WAAW,GAAUN,OAAO,CAA5BM,WAAW;IAAEC,CAAC,GAAOP,OAAO,CAAfO,CAAC;IAAEC,CAAC,GAAIR,OAAO,CAAZQ,CAAC;EAEjD,IAAIP,IAAI,IAAIA,IAAI,CAACK,WAAW,IAAIL,IAAI,CAACK,WAAW,KAAK,CAAC,EAAE;IACtD;IACA;IACA,QAAQA,WAAW;MACjB,KAAK,CAAC;QACJ;QACAF,GAAG,CAACK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAEP,KAAK,EAAE,CAAC,CAAC;QACpC;MACF,KAAK,CAAC;QACJ;QACAE,GAAG,CAACK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAEP,KAAK,EAAEC,MAAM,CAAC;QAC1C;MACF,KAAK,CAAC;QACJ;QACAC,GAAG,CAACK,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAEN,MAAM,CAAC;QACrC;MACF,KAAK,CAAC;QACJ;QACAC,GAAG,CAACK,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/B;MACF,KAAK,CAAC;QACJ;QACAL,GAAG,CAACK,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAEN,MAAM,EAAE,CAAC,CAAC;QACrC;MACF,KAAK,CAAC;QACJ;QACAC,GAAG,CAACK,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAEN,MAAM,EAAED,KAAK,CAAC;QAC1C;MACF,KAAK,CAAC;QACJ;QACAE,GAAG,CAACK,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAEP,KAAK,CAAC;QACpC;MACF;QACE;IAAM;EAEZ;EACAE,GAAG,CAACM,SAAS,CAACL,GAAG,EAAEE,CAAC,EAAEC,CAAC,EAAEN,KAAK,EAAEC,MAAM,CAAC;AACzC"}
1
+ {"version":3,"names":["orient","options","file","width","height","ctx","img","orientation","x","y","transform","drawImage"],"sources":["orient.js"],"sourcesContent":["/* eslint-disable complexity */\r\n/**\r\n * Rotates/flips the image on the canvas as per exif information\r\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)\r\n * @param {Object} file\r\n * @returns {Object}\r\n */\r\nexport function orient(options, file) {\r\n const {width, height, ctx, img, orientation, x, y} = options;\r\n\r\n if (file && file.orientation && file.orientation !== 1) {\r\n // explanation of orientation:\r\n // https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images\r\n switch (orientation) {\r\n case 2:\r\n // flip\r\n ctx.transform(-1, 0, 0, 1, width, 0);\r\n break;\r\n case 3:\r\n // rotateImage180\r\n ctx.transform(-1, 0, 0, -1, width, height);\r\n break;\r\n case 4:\r\n // rotate180AndFlipImage\r\n ctx.transform(1, 0, 0, -1, 0, height);\r\n break;\r\n case 5:\r\n // rotate90AndFlipImage\r\n ctx.transform(0, 1, 1, 0, 0, 0);\r\n break;\r\n case 6:\r\n // rotateImage90\r\n ctx.transform(0, 1, -1, 0, height, 0);\r\n break;\r\n case 7:\r\n // rotateNeg90AndFlipImage\r\n ctx.transform(0, -1, -1, 0, height, width);\r\n break;\r\n case 8:\r\n // rotateNeg90\r\n ctx.transform(0, -1, 1, 0, 0, width);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n ctx.drawImage(img, x, y, width, height);\r\n}\r\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,MAAMA,CAACC,OAAO,EAAEC,IAAI,EAAE;EACpC,IAAOC,KAAK,GAAyCF,OAAO,CAArDE,KAAK;IAAEC,MAAM,GAAiCH,OAAO,CAA9CG,MAAM;IAAEC,GAAG,GAA4BJ,OAAO,CAAtCI,GAAG;IAAEC,GAAG,GAAuBL,OAAO,CAAjCK,GAAG;IAAEC,WAAW,GAAUN,OAAO,CAA5BM,WAAW;IAAEC,CAAC,GAAOP,OAAO,CAAfO,CAAC;IAAEC,CAAC,GAAIR,OAAO,CAAZQ,CAAC;EAEjD,IAAIP,IAAI,IAAIA,IAAI,CAACK,WAAW,IAAIL,IAAI,CAACK,WAAW,KAAK,CAAC,EAAE;IACtD;IACA;IACA,QAAQA,WAAW;MACjB,KAAK,CAAC;QACJ;QACAF,GAAG,CAACK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAEP,KAAK,EAAE,CAAC,CAAC;QACpC;MACF,KAAK,CAAC;QACJ;QACAE,GAAG,CAACK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAEP,KAAK,EAAEC,MAAM,CAAC;QAC1C;MACF,KAAK,CAAC;QACJ;QACAC,GAAG,CAACK,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAEN,MAAM,CAAC;QACrC;MACF,KAAK,CAAC;QACJ;QACAC,GAAG,CAACK,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/B;MACF,KAAK,CAAC;QACJ;QACAL,GAAG,CAACK,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAEN,MAAM,EAAE,CAAC,CAAC;QACrC;MACF,KAAK,CAAC;QACJ;QACAC,GAAG,CAACK,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAEN,MAAM,EAAED,KAAK,CAAC;QAC1C;MACF,KAAK,CAAC;QACJ;QACAE,GAAG,CAACK,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAEP,KAAK,CAAC;QACpC;MACF;QACE;IAAM;EAEZ;EACAE,GAAG,CAACM,SAAS,CAACL,GAAG,EAAEE,CAAC,EAAEC,CAAC,EAAEN,KAAK,EAAEC,MAAM,CAAC;AACzC"}
@@ -11,14 +11,14 @@ var _pick2 = _interopRequireDefault(require("lodash/pick"));
11
11
  var _orient = require("./orient");
12
12
  /* eslint-env browser */
13
13
 
14
- /**
15
- * Determins the dimensions of an image
16
- * @param {Object} constraints
17
- * @param {Number} constraints.width
18
- * @param {Number} constraints.height
19
- * @param {Number} maxWidth
20
- * @param {Number} maxHeight
21
- * @returns {Object}
14
+ /**
15
+ * Determins the dimensions of an image
16
+ * @param {Object} constraints
17
+ * @param {Number} constraints.width
18
+ * @param {Number} constraints.height
19
+ * @param {Number} maxWidth
20
+ * @param {Number} maxHeight
21
+ * @returns {Object}
22
22
  */
23
23
  function computeDimensions(_ref, maxWidth, maxHeight) {
24
24
  var width = _ref.width,
@@ -48,16 +48,16 @@ function computeDimensions(_ref, maxWidth, maxHeight) {
48
48
  };
49
49
  }
50
50
 
51
- /**
52
- * Measures an image file and produces a thumbnail for it
53
- * @param {Object} options
54
- * @param {Blob|ArrayBuffer} options.file
55
- * @param {Number} options.thumbnailMaxWidth
56
- * @param {Number} options.thumbnailMaxHeight
57
- * @param {Boolean} options.enableThumbnails
58
- * @param {Object} options.logger
59
- * @param {Boolean} options.isAvatar
60
- * @returns {Promise<Array>} Buffer, Dimensions, thumbnailDimensions
51
+ /**
52
+ * Measures an image file and produces a thumbnail for it
53
+ * @param {Object} options
54
+ * @param {Blob|ArrayBuffer} options.file
55
+ * @param {Number} options.thumbnailMaxWidth
56
+ * @param {Number} options.thumbnailMaxHeight
57
+ * @param {Boolean} options.enableThumbnails
58
+ * @param {Object} options.logger
59
+ * @param {Boolean} options.isAvatar
60
+ * @returns {Promise<Array>} Buffer, Dimensions, thumbnailDimensions
61
61
  */
62
62
  function processImage(_ref2) {
63
63
  var file = _ref2.file,
@@ -1 +1 @@
1
- {"version":3,"names":["_orient","require","computeDimensions","_ref","maxWidth","maxHeight","width","height","processImage","_ref2","file","type","thumbnailMaxWidth","thumbnailMaxHeight","enableThumbnails","logger","isAvatar","startsWith","_promise","default","resolve","Blob","reject","img","Image","onload","onerror","src","URL","createObjectURL","then","fileDimensions","_pick2","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 './orient';\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":";;;;;;;;;;AAMA,IAAAA,OAAA,GAAAC,OAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAAAC,IAAA,EAAkBC,QAAQ,EAAEC,SAAS,EAAE;EAAA,IAArCC,KAAK,GAAAH,IAAA,CAALG,KAAK;IAAEC,MAAM,GAAAJ,IAAA,CAANI,MAAM;EACvC,IAAIA,MAAM,GAAGD,KAAK,EAAE;IAClB,IAAIC,MAAM,GAAGF,SAAS,EAAE;MACtBC,KAAK,GAAIA,KAAK,GAAGD,SAAS,GAAIE,MAAM;MACpCA,MAAM,GAAGF,SAAS;IACpB;IAEA,IAAIC,KAAK,GAAGF,QAAQ,EAAE;MACpBG,MAAM,GAAIA,MAAM,GAAGH,QAAQ,GAAIE,KAAK;MACpCA,KAAK,GAAGF,QAAQ;IAClB;EACF,CAAC,MAAM;IACL,IAAIE,KAAK,GAAGF,QAAQ,EAAE;MACpBG,MAAM,GAAIA,MAAM,GAAGH,QAAQ,GAAIE,KAAK;MACpCA,KAAK,GAAGF,QAAQ;IAClB;IAEA,IAAIG,MAAM,GAAGF,SAAS,EAAE;MACtBC,KAAK,GAAIA,KAAK,GAAGD,SAAS,GAAIE,MAAM;MACpCA,MAAM,GAAGF,SAAS;IACpB;EACF;EAEA,OAAO;IAACE,MAAM,EAANA,MAAM;IAAED,KAAK,EAALA;EAAK,CAAC;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASE,YAAYA,CAAAC,KAAA,EAQjC;EAAA,IAPDC,IAAI,GAAAD,KAAA,CAAJC,IAAI;IACJC,IAAI,GAAAF,KAAA,CAAJE,IAAI;IACJC,iBAAiB,GAAAH,KAAA,CAAjBG,iBAAiB;IACjBC,kBAAkB,GAAAJ,KAAA,CAAlBI,kBAAkB;IAClBC,gBAAgB,GAAAL,KAAA,CAAhBK,gBAAgB;IAChBC,MAAM,GAAAN,KAAA,CAANM,MAAM;IACNC,QAAQ,GAAAP,KAAA,CAARO,QAAQ;EAER,IAAI,CAACL,IAAI,IAAI,CAACA,IAAI,CAACM,UAAU,CAAC,OAAO,CAAC,EAAE;IACtC,OAAOC,QAAA,CAAAC,OAAA,CAAQC,OAAO,EAAE;EAC1B;EAEAV,IAAI,GAAGA,IAAI,YAAYW,IAAI,GAAGX,IAAI,GAAG,IAAIW,IAAI,CAAC,CAACX,IAAI,CAAC,CAAC;EAErD,OAAO,IAAAQ,QAAA,CAAAC,OAAA,CAAY,UAACC,OAAO,EAAEE,MAAM,EAAK;IACtC,IAAMC,GAAG,GAAG,IAAIC,KAAK,EAAE;IAEvBD,GAAG,CAACE,MAAM,GAAG,SAASA,MAAMA,CAAA,EAAG;MAC7BL,OAAO,CAACG,GAAG,CAAC;IACd,CAAC;IACDA,GAAG,CAACG,OAAO,GAAGJ,MAAM;IACpBC,GAAG,CAACI,GAAG,GAAGC,GAAG,CAACC,eAAe,CAACnB,IAAI,CAAC;EACrC,CAAC,CAAC,CAACoB,IAAI,CAAC,UAACP,GAAG,EAAK;IACf,IAAMQ,cAAc,GAAG,IAAAC,MAAA,CAAAb,OAAA,EAAKI,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC;IAEnD,IAAIP,QAAQ,EAAE;MACZ;MACAD,MAAM,CAACkB,IAAI,CAAC,yCAAyC,CAAC;MACtD,IAAMC,IAAI,GACRH,cAAc,CAACxB,MAAM,GAAGwB,cAAc,CAACzB,KAAK,GAAGyB,cAAc,CAACxB,MAAM,GAAGwB,cAAc,CAACzB,KAAK;MAE7FyB,cAAc,CAACxB,MAAM,GAAG2B,IAAI;MAC5BH,cAAc,CAACzB,KAAK,GAAG4B,IAAI;IAC7B;IACA,IAAI,CAACpB,gBAAgB,EAAE;MACrBC,MAAM,CAACkB,IAAI,CAAC,wBAAwB,CAAC;MAErC,OAAO,CAAC,IAAI,EAAEF,cAAc,EAAE,IAAI,CAAC;IACrC;IACA,IAAMI,mBAAmB,GAAGjC,iBAAiB,CAC3C6B,cAAc,EACdnB,iBAAiB,EACjBC,kBAAkB,CACnB;IAED,IAAMuB,MAAM,GAAGC,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;IAC/C,IAAMC,GAAG,GAAGH,MAAM,CAACI,UAAU,CAAC,IAAI,CAAC;IACnC,IAAOlC,KAAK,GAAY6B,mBAAmB,CAApC7B,KAAK;MAAEC,MAAM,GAAI4B,mBAAmB,CAA7B5B,MAAM;;IAEpB;IACA;IACA,IAAIG,IAAI,CAAC+B,WAAW,IAAI/B,IAAI,CAAC+B,WAAW,GAAG,CAAC,EAAE;MAC5CL,MAAM,CAAC9B,KAAK,GAAGC,MAAM;MACrB6B,MAAM,CAAC7B,MAAM,GAAGD,KAAK;MACrB6B,mBAAmB,CAAC7B,KAAK,GAAGC,MAAM;MAClC4B,mBAAmB,CAAC5B,MAAM,GAAGD,KAAK;IACpC,CAAC,MAAM;MACL8B,MAAM,CAAC9B,KAAK,GAAG6B,mBAAmB,CAAC7B,KAAK;MACxC8B,MAAM,CAAC7B,MAAM,GAAG4B,mBAAmB,CAAC5B,MAAM;IAC5C;IAEA,IAAAmC,cAAM,EACJ;MACED,WAAW,EAAE/B,IAAI,IAAIA,IAAI,CAAC+B,WAAW,GAAG/B,IAAI,CAAC+B,WAAW,GAAG,EAAE;MAC7DlB,GAAG,EAAHA,GAAG;MACHoB,CAAC,EAAE,CAAC;MACJC,CAAC,EAAE,CAAC;MACJtC,KAAK,EAALA,KAAK;MACLC,MAAM,EAANA,MAAM;MACNgC,GAAG,EAAHA;IACF,CAAC,EACD7B,IAAI,CACL;IAED,IAAMmC,KAAK,GAAGT,MAAM,CAACU,SAAS,CAAC,WAAW,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC;IACtD;IACA,IAAMC,UAAU,GAAGC,IAAI,CAACJ,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjC,IAAMK,MAAM,GAAG,IAAIC,WAAW,CAACH,UAAU,CAACI,MAAM,CAAC;IACjD,IAAMC,IAAI,GAAG,IAAIC,QAAQ,CAACJ,MAAM,CAAC;IAEjC,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,UAAU,CAACI,MAAM,EAAEG,CAAC,IAAI,CAAC,EAAE;MAC7CF,IAAI,CAACG,QAAQ,CAACD,CAAC,EAAEP,UAAU,CAACS,UAAU,CAACF,CAAC,CAAC,CAAC;IAC5C;IAEA,OAAO,CAACL,MAAM,EAAEnB,cAAc,EAAEI,mBAAmB,CAAC;EACtD,CAAC,CAAC;AACJ"}
1
+ {"version":3,"names":["_orient","require","computeDimensions","_ref","maxWidth","maxHeight","width","height","processImage","_ref2","file","type","thumbnailMaxWidth","thumbnailMaxHeight","enableThumbnails","logger","isAvatar","startsWith","_promise","default","resolve","Blob","reject","img","Image","onload","onerror","src","URL","createObjectURL","then","fileDimensions","_pick2","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":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nimport {pick} from 'lodash';\r\n\r\nimport {orient} from './orient';\r\n/* eslint-env browser */\r\n\r\n/**\r\n * Determins the dimensions of an image\r\n * @param {Object} constraints\r\n * @param {Number} constraints.width\r\n * @param {Number} constraints.height\r\n * @param {Number} maxWidth\r\n * @param {Number} maxHeight\r\n * @returns {Object}\r\n */\r\nfunction computeDimensions({width, height}, maxWidth, maxHeight) {\r\n if (height > width) {\r\n if (height > maxHeight) {\r\n width = (width * maxHeight) / height;\r\n height = maxHeight;\r\n }\r\n\r\n if (width > maxWidth) {\r\n height = (height * maxWidth) / width;\r\n width = maxWidth;\r\n }\r\n } else {\r\n if (width > maxWidth) {\r\n height = (height * maxWidth) / width;\r\n width = maxWidth;\r\n }\r\n\r\n if (height > maxHeight) {\r\n width = (width * maxHeight) / height;\r\n height = maxHeight;\r\n }\r\n }\r\n\r\n return {height, width};\r\n}\r\n\r\n/**\r\n * Measures an image file and produces a thumbnail for it\r\n * @param {Object} options\r\n * @param {Blob|ArrayBuffer} options.file\r\n * @param {Number} options.thumbnailMaxWidth\r\n * @param {Number} options.thumbnailMaxHeight\r\n * @param {Boolean} options.enableThumbnails\r\n * @param {Object} options.logger\r\n * @param {Boolean} options.isAvatar\r\n * @returns {Promise<Array>} Buffer, Dimensions, thumbnailDimensions\r\n */\r\nexport default function processImage({\r\n file,\r\n type,\r\n thumbnailMaxWidth,\r\n thumbnailMaxHeight,\r\n enableThumbnails,\r\n logger,\r\n isAvatar,\r\n}) {\r\n if (!type || !type.startsWith('image')) {\r\n return Promise.resolve();\r\n }\r\n\r\n file = file instanceof Blob ? file : new Blob([file]);\r\n\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n\r\n img.onload = function onload() {\r\n resolve(img);\r\n };\r\n img.onerror = reject;\r\n img.src = URL.createObjectURL(file);\r\n }).then((img) => {\r\n const fileDimensions = pick(img, 'height', 'width');\r\n\r\n if (isAvatar) {\r\n // only if image is a profile avatar\r\n logger.info('dimensions will be set for avatar image');\r\n const size =\r\n fileDimensions.height > fileDimensions.width ? fileDimensions.height : fileDimensions.width;\r\n\r\n fileDimensions.height = size;\r\n fileDimensions.width = size;\r\n }\r\n if (!enableThumbnails) {\r\n logger.info('thumbnails not enabled');\r\n\r\n return [null, fileDimensions, null];\r\n }\r\n const thumbnailDimensions = computeDimensions(\r\n fileDimensions,\r\n thumbnailMaxWidth,\r\n thumbnailMaxHeight\r\n );\r\n\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n const {width, height} = thumbnailDimensions;\r\n\r\n // explanation of orientation:\r\n // https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images\r\n if (file.orientation && file.orientation > 4) {\r\n canvas.width = height;\r\n canvas.height = width;\r\n thumbnailDimensions.width = height;\r\n thumbnailDimensions.height = width;\r\n } else {\r\n canvas.width = thumbnailDimensions.width;\r\n canvas.height = thumbnailDimensions.height;\r\n }\r\n\r\n orient(\r\n {\r\n orientation: file && file.orientation ? file.orientation : '',\r\n img,\r\n x: 0,\r\n y: 0,\r\n width,\r\n height,\r\n ctx,\r\n },\r\n file\r\n );\r\n\r\n const parts = canvas.toDataURL('image/png').split(',');\r\n // Thumbnail uploads were failing with common/base64 decoding\r\n const byteString = atob(parts[1]);\r\n\r\n const buffer = new ArrayBuffer(byteString.length);\r\n const view = new DataView(buffer);\r\n\r\n for (let i = 0; i < byteString.length; i += 1) {\r\n view.setUint8(i, byteString.charCodeAt(i));\r\n }\r\n\r\n return [buffer, fileDimensions, thumbnailDimensions];\r\n });\r\n}\r\n"],"mappings":"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"}
@@ -9,19 +9,19 @@ exports.default = processImage;
9
9
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
10
10
  var _pick2 = _interopRequireDefault(require("lodash/pick"));
11
11
  var _gm = _interopRequireDefault(require("gm"));
12
- /*!
13
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
12
+ /*!
13
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
14
14
  */
15
15
 
16
- /**
17
- * Measures an image file and produces a thumbnail for it
18
- * @param {Object} options
19
- * @param {Blob|ArrayBuffer} options.file
20
- * @param {Number} options.thumbnailMaxWidth
21
- * @param {Number} options.thumbnailMaxHeight
22
- * @param {Boolean} options.enableThumbnails
23
- * @param {Object} options.logger
24
- * @returns {Promise<Array>} Buffer, Dimensions, thumbnailDimensions
16
+ /**
17
+ * Measures an image file and produces a thumbnail for it
18
+ * @param {Object} options
19
+ * @param {Blob|ArrayBuffer} options.file
20
+ * @param {Number} options.thumbnailMaxWidth
21
+ * @param {Number} options.thumbnailMaxHeight
22
+ * @param {Boolean} options.enableThumbnails
23
+ * @param {Object} options.logger
24
+ * @returns {Promise<Array>} Buffer, Dimensions, thumbnailDimensions
25
25
  */
26
26
  function processImage(_ref) {
27
27
  var file = _ref.file,
@@ -1 +1 @@
1
- {"version":3,"names":["_gm","_interopRequireDefault","require","processImage","_ref","file","type","thumbnailMaxWidth","thumbnailMaxHeight","enableThumbnails","logger","fileType","startsWith","_promise","default","resolve","fileDimensions","reject","gm","size","err","_pick2","thumbnail","thumbnailDimensions","resize","autoOrient","toBuffer","buffer","then","all","catch","errorString","toString","includes","warn","debug"],"sources":["process-image.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport gm from 'gm';\nimport {pick} from 'lodash';\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 * @returns {Promise<Array>} Buffer, Dimensions, thumbnailDimensions\n */\nexport default function processImage({\n file,\n type,\n thumbnailMaxWidth,\n thumbnailMaxHeight,\n enableThumbnails,\n logger,\n}) {\n const fileType = type || file.type;\n\n if (!fileType || !fileType.startsWith('image')) {\n return Promise.resolve();\n }\n\n const fileDimensions = new Promise((resolve, reject) => {\n gm(file).size((err, size) => {\n if (err) {\n reject(err);\n\n return;\n }\n\n resolve(pick(size, 'width', 'height'));\n });\n });\n\n let thumbnail;\n let thumbnailDimensions;\n\n if (enableThumbnails) {\n thumbnail = new Promise((resolve, reject) => {\n gm(file)\n .resize(thumbnailMaxWidth, thumbnailMaxHeight)\n .autoOrient()\n .toBuffer('PNG', (err, buffer) => {\n if (err) {\n reject(err);\n\n return;\n }\n\n resolve(buffer);\n });\n });\n\n thumbnailDimensions = thumbnail.then(\n (buffer) =>\n new Promise((resolve, reject) => {\n gm(buffer).size((err, size) => {\n if (err) {\n reject(err);\n\n return;\n }\n\n resolve(pick(size, 'width', 'height'));\n });\n })\n );\n }\n\n return Promise.all([thumbnail, fileDimensions, thumbnailDimensions]).catch((err) => {\n const errorString = err.toString();\n\n if (errorString.includes('EPIPE')) {\n logger.warn(err, 'Is GraphicsMagick installed?');\n\n return Promise.resolve();\n }\n\n if (errorString.includes('No decode delegate for this image format')) {\n logger.debug(err, 'File does not appear to be an image');\n\n return Promise.resolve();\n }\n\n if (errorString.includes('Stream yields empty buffer')) {\n logger.debug(err, 'File does not appear to be an image');\n\n return Promise.resolve();\n }\n\n return Promise.reject(err);\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_gm","_interopRequireDefault","require","processImage","_ref","file","type","thumbnailMaxWidth","thumbnailMaxHeight","enableThumbnails","logger","fileType","startsWith","_promise","default","resolve","fileDimensions","reject","gm","size","err","_pick2","thumbnail","thumbnailDimensions","resize","autoOrient","toBuffer","buffer","then","all","catch","errorString","toString","includes","warn","debug"],"sources":["process-image.js"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nimport gm from 'gm';\r\nimport {pick} from 'lodash';\r\n\r\n/**\r\n * Measures an image file and produces a thumbnail for it\r\n * @param {Object} options\r\n * @param {Blob|ArrayBuffer} options.file\r\n * @param {Number} options.thumbnailMaxWidth\r\n * @param {Number} options.thumbnailMaxHeight\r\n * @param {Boolean} options.enableThumbnails\r\n * @param {Object} options.logger\r\n * @returns {Promise<Array>} Buffer, Dimensions, thumbnailDimensions\r\n */\r\nexport default function processImage({\r\n file,\r\n type,\r\n thumbnailMaxWidth,\r\n thumbnailMaxHeight,\r\n enableThumbnails,\r\n logger,\r\n}) {\r\n const fileType = type || file.type;\r\n\r\n if (!fileType || !fileType.startsWith('image')) {\r\n return Promise.resolve();\r\n }\r\n\r\n const fileDimensions = new Promise((resolve, reject) => {\r\n gm(file).size((err, size) => {\r\n if (err) {\r\n reject(err);\r\n\r\n return;\r\n }\r\n\r\n resolve(pick(size, 'width', 'height'));\r\n });\r\n });\r\n\r\n let thumbnail;\r\n let thumbnailDimensions;\r\n\r\n if (enableThumbnails) {\r\n thumbnail = new Promise((resolve, reject) => {\r\n gm(file)\r\n .resize(thumbnailMaxWidth, thumbnailMaxHeight)\r\n .autoOrient()\r\n .toBuffer('PNG', (err, buffer) => {\r\n if (err) {\r\n reject(err);\r\n\r\n return;\r\n }\r\n\r\n resolve(buffer);\r\n });\r\n });\r\n\r\n thumbnailDimensions = thumbnail.then(\r\n (buffer) =>\r\n new Promise((resolve, reject) => {\r\n gm(buffer).size((err, size) => {\r\n if (err) {\r\n reject(err);\r\n\r\n return;\r\n }\r\n\r\n resolve(pick(size, 'width', 'height'));\r\n });\r\n })\r\n );\r\n }\r\n\r\n return Promise.all([thumbnail, fileDimensions, thumbnailDimensions]).catch((err) => {\r\n const errorString = err.toString();\r\n\r\n if (errorString.includes('EPIPE')) {\r\n logger.warn(err, 'Is GraphicsMagick installed?');\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n if (errorString.includes('No decode delegate for this image format')) {\r\n logger.debug(err, 'File does not appear to be an image');\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n if (errorString.includes('Stream yields empty buffer')) {\r\n logger.debug(err, 'File does not appear to be an image');\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n return Promise.reject(err);\r\n });\r\n}\r\n"],"mappings":"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"}
package/jest.config.js CHANGED
@@ -1,3 +1,3 @@
1
- const config = require('@webex/jest-config-legacy');
2
-
3
- module.exports = config;
1
+ const config = require('@webex/jest-config-legacy');
2
+
3
+ module.exports = config;
package/package.json CHANGED
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "name": "@webex/helper-image",
3
- "version": "2.59.2",
4
3
  "description": "",
5
4
  "license": "MIT",
6
5
  "author": "Saurabh Jain <saurjai3@cisco.com>",
@@ -26,23 +25,23 @@
26
25
  },
27
26
  "devDependencies": {
28
27
  "@babel/core": "^7.17.10",
29
- "@webex/babel-config-legacy": "2.59.2",
30
- "@webex/eslint-config-legacy": "2.59.2",
31
- "@webex/jest-config-legacy": "2.59.2",
32
- "@webex/legacy-tools": "2.59.2",
33
- "@webex/test-helper-chai": "2.59.2",
34
- "@webex/test-helper-mocha": "2.59.2",
35
- "@webex/test-helper-mock-webex": "2.59.2",
36
- "@webex/test-helper-test-users": "2.59.2",
28
+ "@webex/babel-config-legacy": "^0.0.0",
29
+ "@webex/eslint-config-legacy": "^0.0.0",
30
+ "@webex/jest-config-legacy": "^0.0.0",
31
+ "@webex/legacy-tools": "^0.0.0",
32
+ "@webex/test-helper-chai": "^2.59.3-next.1",
33
+ "@webex/test-helper-mocha": "^2.59.3-next.1",
34
+ "@webex/test-helper-mock-webex": "^2.59.3-next.1",
35
+ "@webex/test-helper-test-users": "^2.59.3-next.1",
37
36
  "eslint": "^8.24.0",
38
37
  "prettier": "^2.7.1",
39
38
  "sinon": "^9.2.4"
40
39
  },
41
40
  "dependencies": {
42
- "@webex/http-core": "2.59.2",
43
- "@webex/test-helper-chai": "2.59.2",
44
- "@webex/test-helper-file": "2.59.2",
45
- "@webex/test-helper-mocha": "2.59.2",
41
+ "@webex/http-core": "^2.59.3-next.1",
42
+ "@webex/test-helper-chai": "^2.59.3-next.1",
43
+ "@webex/test-helper-file": "^2.59.3-next.1",
44
+ "@webex/test-helper-mocha": "^2.59.3-next.1",
46
45
  "exifr": "^5.0.3",
47
46
  "gm": "^1.23.1",
48
47
  "lodash": "^4.17.21",
@@ -52,10 +51,12 @@
52
51
  "scripts": {
53
52
  "build": "yarn build:src",
54
53
  "build:src": "webex-legacy-tools build -dest \"./dist\" -src \"./src\" -js -ts -maps",
54
+ "deploy:npm": "yarn npm publish",
55
55
  "test": "yarn test:style && yarn test:unit && yarn test:integration && yarn test:browser",
56
56
  "test:browser:broken": "webex-legacy-tools test --integration --unit --runner karma",
57
57
  "test:integration": "webex-legacy-tools test --integration --runner mocha",
58
58
  "test:style": "eslint ./src/**/*.*",
59
59
  "test:unit": "webex-legacy-tools test --unit --runner jest"
60
- }
61
- }
60
+ },
61
+ "version": "2.59.3-next.1"
62
+ }
package/process CHANGED
@@ -1 +1 @@
1
- module.exports = {browser: true};
1
+ module.exports = {browser: true};
@@ -1,40 +1,40 @@
1
- /*!
2
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
- */
4
-
5
- import {detect} from '@webex/http-core';
6
- import {getType} from 'mime';
7
-
8
- /**
9
- * Determines the file type of the specified file
10
- * @param {FileLike} file
11
- * @param {Object} logger
12
- * @returns {Promise<string>}
13
- */
14
- export default function detectFileType(file, logger) {
15
- if (file.type) {
16
- logger.info(`file already has type ${file.type}. using existing file.type.`);
17
-
18
- return Promise.resolve(file.type);
19
- }
20
-
21
- if (file.mimeType) {
22
- logger.info(`file already has mimeType ${file.type}. using existing file.mimeType.`);
23
-
24
- return Promise.resolve(file.mimeType);
25
- }
26
-
27
- // This kinda belongs in http core, but since we have no guarantee that
28
- // buffers are expected to have names there, it'll stay here for now.
29
- return detect(file).then((type) => {
30
- if (type === 'application/x-msi' || type === 'application/octet-stream') {
31
- logger.info(`detected filetype to be ${type}. Falling back to mime.lookup`);
32
-
33
- return getType(file.name);
34
- }
35
-
36
- logger.info(`detected filetype to be ${type}. returning it`);
37
-
38
- return type;
39
- });
40
- }
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {detect} from '@webex/http-core';
6
+ import {getType} from 'mime';
7
+
8
+ /**
9
+ * Determines the file type of the specified file
10
+ * @param {FileLike} file
11
+ * @param {Object} logger
12
+ * @returns {Promise<string>}
13
+ */
14
+ export default function detectFileType(file, logger) {
15
+ if (file.type) {
16
+ logger.info(`file already has type ${file.type}. using existing file.type.`);
17
+
18
+ return Promise.resolve(file.type);
19
+ }
20
+
21
+ if (file.mimeType) {
22
+ logger.info(`file already has mimeType ${file.type}. using existing file.mimeType.`);
23
+
24
+ return Promise.resolve(file.mimeType);
25
+ }
26
+
27
+ // This kinda belongs in http core, but since we have no guarantee that
28
+ // buffers are expected to have names there, it'll stay here for now.
29
+ return detect(file).then((type) => {
30
+ if (type === 'application/x-msi' || type === 'application/octet-stream') {
31
+ logger.info(`detected filetype to be ${type}. Falling back to mime.lookup`);
32
+
33
+ return getType(file.name);
34
+ }
35
+
36
+ logger.info(`detected filetype to be ${type}. returning it`);
37
+
38
+ return type;
39
+ });
40
+ }