Socket
Socket
Sign inDemoInstall

@uppy/compressor

Package Overview
Dependencies
14
Maintainers
6
Versions
29
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.2 to 1.0.3

src/index.test.js

7

CHANGELOG.md
# @uppy/compressor
## 1.0.3
Released: 2023-09-18
Included in: Uppy v3.16.0
- @uppy/compressor: update file.meta.name after compression, becase format/extension might have changed (Artur Paikin / #4645)
## 1.0.1

@@ -4,0 +11,0 @@

61

lib/index.js
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
var id = 0;
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
import { BasePlugin } from '@uppy/core';

@@ -11,7 +8,5 @@ import { RateLimitedQueue } from '@uppy/utils/lib/RateLimitedQueue';

import prettierBytes from '@transloadit/prettier-bytes';
import CompressorJS from 'compressorjs/dist/compressor.common.js';
import CompressorJS from 'compressorjs';
import locale from './locale.js';
var _RateLimitedQueue = /*#__PURE__*/_classPrivateFieldLooseKey("RateLimitedQueue");
export default class Compressor extends BasePlugin {

@@ -31,3 +26,4 @@ constructor(uppy, opts) {

};
this.opts = { ...defaultOptions,
this.opts = {
...defaultOptions,
...opts

@@ -40,7 +36,7 @@ };

}
compress(blob) {
return new Promise((resolve, reject) => {
/* eslint-disable no-new */
new CompressorJS(blob, { ...this.opts,
new CompressorJS(blob, {
...this.opts,
success: resolve,

@@ -51,7 +47,5 @@ error: reject

}
async prepareUpload(fileIDs) {
let totalCompressedSize = 0;
const compressedFiles = [];
const compressAndApplyResult = _classPrivateFieldLooseBase(this, _RateLimitedQueue)[_RateLimitedQueue].wrapPromiseFunction(async file => {

@@ -68,8 +62,13 @@ try {

} = compressedBlob;
const extension = name && getFileNameAndExtension(name).extension;
this.uppy.setFileState(file.id, { ...(name && {
const compressedFileName = getFileNameAndExtension(name);
const metaFileName = getFileNameAndExtension(file.meta.name);
// Name (file.meta.name) might have been changed by user, so we update only the extension
const newMetaName = `${metaFileName.name}.${compressedFileName.extension}`;
this.uppy.setFileState(file.id, {
...(name && {
name
}),
...(extension && {
extension
...(compressedFileName.extension && {
extension: compressedFileName.extension
}),

@@ -82,7 +81,9 @@ ...(type && {

}),
data: compressedBlob
data: compressedBlob,
meta: {
...file.meta,
type,
name: newMetaName
}
});
this.uppy.setFileMeta(file.id, {
type
});
compressedFiles.push(file);

@@ -94,3 +95,2 @@ } catch (err) {

});
const promises = fileIDs.map(fileID => {

@@ -102,27 +102,26 @@ const file = this.uppy.getFile(fileID);

});
if (file.isRemote) {
return Promise.resolve();
} // Some browsers (Firefox) add blobs with empty file type, when files are
}
// Some browsers (Firefox) add blobs with empty file type, when files are
// added from a folder. Uppy auto-detects type from extension, but leaves the original blob intact.
// However, Compressor.js failes when file has no type, so we set it here
if (!file.data.type) {
file.data = file.data.slice(0, file.data.size, file.type);
}
if (!file.type.startsWith('image/')) {
return Promise.resolve();
}
return compressAndApplyResult(file);
});
return compressAndApplyResult(file);
}); // Why emit `preprocess-complete` for all files at once, instead of
// Why emit `preprocess-complete` for all files at once, instead of
// above when each is processed?
// Because it leads to StatusBar showing a weird “upload 6 files” button,
// while waiting for all the files to complete pre-processing.
await Promise.all(promises);
this.uppy.emit('compressor:complete', compressedFiles); // Only show informer if Compressor mananged to save at least a kilobyte
this.uppy.emit('compressor:complete', compressedFiles);
// Only show informer if Compressor mananged to save at least a kilobyte
if (totalCompressedSize > 1024) {

@@ -133,3 +132,2 @@ this.uppy.info(this.i18n('compressedX', {

}
for (const fileID of fileIDs) {

@@ -140,11 +138,8 @@ const file = this.uppy.getFile(fileID);

}
install() {
this.uppy.addPreProcessor(this.prepareUpload);
}
uninstall() {
this.uppy.removePreProcessor(this.prepareUpload);
}
}
{
"name": "@uppy/compressor",
"description": "Uppy plugin that compresses images before upload, saving up to 60% in size",
"version": "1.0.2",
"version": "1.0.3",
"license": "MIT",

@@ -27,3 +27,3 @@ "main": "lib/index.js",

"@transloadit/prettier-bytes": "^0.0.9",
"@uppy/utils": "^5.3.0",
"@uppy/utils": "^5.5.0",
"compressorjs": "^1.1.1",

@@ -34,7 +34,10 @@ "preact": "^10.5.13",

"peerDependencies": {
"@uppy/core": "^3.2.0"
"@uppy/core": "^3.5.0"
},
"publishConfig": {
"access": "public"
},
"devDependencies": {
"@jest/globals": "^29.0.0"
}
}

@@ -5,3 +5,3 @@ import { BasePlugin } from '@uppy/core'

import prettierBytes from '@transloadit/prettier-bytes'
import CompressorJS from 'compressorjs/dist/compressor.common.js'
import CompressorJS from 'compressorjs'
import locale from './locale.js'

@@ -56,11 +56,21 @@

const { name, type, size } = compressedBlob
const extension = name && getFileNameAndExtension(name).extension
const compressedFileName = getFileNameAndExtension(name)
const metaFileName = getFileNameAndExtension(file.meta.name)
// Name (file.meta.name) might have been changed by user, so we update only the extension
const newMetaName = `${metaFileName.name}.${compressedFileName.extension}`
this.uppy.setFileState(file.id, {
...(name && { name }),
...(extension && { extension }),
...(compressedFileName.extension && { extension: compressedFileName.extension }),
...(type && { type }),
...(size && { size }),
data: compressedBlob,
meta: {
...file.meta,
type,
name: newMetaName,
},
})
this.uppy.setFileMeta(file.id, { type })
compressedFiles.push(file)

@@ -67,0 +77,0 @@ } catch (err) {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc