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

express-sharp

Package Overview
Dependencies
Maintainers
1
Versions
58
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

express-sharp - npm Package Compare versions

Comparing version 4.1.3 to 4.2.0

dist/adapter/s3.adapter.d.ts

14

CHANGELOG.md

@@ -0,1 +1,15 @@

# [4.2.0](https://github.com/pmb0/express-sharp/compare/v4.1.3...v4.2.0) (2020-06-20)
### Bug Fixes
* do not set image adapter globally ([dbf7911](https://github.com/pmb0/express-sharp/commit/dbf79115ca7c7d7fc8b3effb9fb3e9f7d5ea02ab))
* image IDs may contain slashes again ([34811d0](https://github.com/pmb0/express-sharp/commit/34811d042e75c5fb78c9ca84161304801a1663a1))
* slicing the image url seems no longer needed ([35107dc](https://github.com/pmb0/express-sharp/commit/35107dc63bd9f23abd41c27e7ebe53fab8f8d4b4))
### Features
* **image-adapters:** add Amazon S3 adapter ([edc628d](https://github.com/pmb0/express-sharp/commit/edc628ded14133c26d784dc00894130c86095427))
## [4.1.3](https://github.com/pmb0/express-sharp/compare/v4.1.2...v4.1.3) (2020-06-18)

@@ -2,0 +16,0 @@

1

dist/adapter/http.adapter.js

@@ -22,3 +22,2 @@ "use strict";

var _a;
url = url.slice(1);
this.log(`Fetching: ${this.getPrefixUrl()}${url}`);

@@ -25,0 +24,0 @@ try {

export * from './http.adapter';
export * from './fs.adapter';
export * from './s3.adapter';

@@ -15,2 +15,3 @@ "use strict";

__exportStar(require("./fs.adapter"), exports);
__exportStar(require("./s3.adapter"), exports);
//# sourceMappingURL=index.js.map

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

import { NextFunction, Request, Response, Router } from 'express';
import { Router } from 'express';
import { ExpressSharpOptions } from '../interfaces';
export declare function getImage(req: Request, res: Response, next: NextFunction): Promise<void>;
export declare function expressSharp(options: ExpressSharpOptions): Router;

@@ -6,3 +6,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.expressSharp = exports.getImage = void 0;
exports.expressSharp = void 0;
const cors_1 = __importDefault(require("cors"));

@@ -14,28 +14,8 @@ const express_1 = require("express");

const resize_dto_1 = require("../resize.dto");
const transformer_service_1 = require("../transformer.service");
const etag_caching_middleware_1 = require("./etag-caching.middleware");
const signed_url_middleware_1 = require("./signed-url.middleware");
const transform_image_middleware_1 = require("./transform-image.middleware");
const transform_query_params_middleware_1 = require("./transform-query-params.middleware");
const use_webp_if_supported_middleware_1 = require("./use-webp-if-supported.middleware");
const validator_middleware_1 = require("./validator.middleware");
async function getImage(req, res, next) {
const { dto } = res.locals;
try {
const transformer = tsyringe_1.container.resolve(transformer_service_1.Transformer);
if (!dto.url)
throw new Error('Image url missing');
const { format, image } = await transformer.transform(dto.url, dto);
if (!image || !format) {
next();
return;
}
// TODO: Cache-Control, Last-Modified
res.type(`image/${format}`);
res.send(image);
}
catch (error) {
next(error);
}
}
exports.getImage = getImage;
function extractActiveMiddlewares(middlewaresDefinitions) {

@@ -53,4 +33,10 @@ return middlewaresDefinitions

tsyringe_1.container.register(keyv_1.default, { useValue: options.cache || new keyv_1.default() });
tsyringe_1.container.registerInstance('imageAdapter', options.imageAdapter);
const middlewares = extractActiveMiddlewares([
[
(req, res, next) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
res.locals.imageAdapter = options.imageAdapter;
next();
},
],
[transform_query_params_middleware_1.transformQueryParams],

@@ -62,5 +48,6 @@ [validator_middleware_1.validate(resize_dto_1.ResizeDto)],

[etag_caching_middleware_1.etagCaching],
[transform_image_middleware_1.transformImage],
]);
const router = express_1.Router();
router.get('/:url', ...middlewares, getImage);
router.get('/:url(*)', ...middlewares);
return router;

@@ -67,0 +54,0 @@ }

@@ -7,3 +7,2 @@ /// <reference types="debug" />

export declare class Transformer {
private readonly imageAdapter;
private readonly objectHasher;

@@ -13,7 +12,6 @@ private readonly cache;

cropMaxSize: number;
private readonly cachedImage;
constructor(imageAdapter: ImageAdapter, objectHasher: ObjectHash, cache: Keyv<Result>);
constructor(objectHasher: ObjectHash, cache: Keyv<Result>);
getCropDimensions(maxSize: number, width: number, height?: number): number[];
buildCacheKey(id: string, options: ResizeDto): string;
transform(id: string, options: ResizeDto): Promise<Result>;
buildCacheKey(id: string, options: ResizeDto, adapterName: string): string;
transform(id: string, options: ResizeDto, imageAdapter: ImageAdapter): Promise<Result>;
}

@@ -11,5 +11,2 @@ "use strict";

};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -28,4 +25,3 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

let Transformer = class Transformer {
constructor(imageAdapter, objectHasher, cache) {
this.imageAdapter = imageAdapter;
constructor(objectHasher, cache) {
this.objectHasher = objectHasher;

@@ -35,3 +31,2 @@ this.cache = cache;

this.cropMaxSize = DEFAULT_CROP_MAX_SIZE;
this.cachedImage = new cached_image_1.CachedImage(cache, imageAdapter);
}

@@ -47,8 +42,8 @@ getCropDimensions(maxSize, width, height) {

}
buildCacheKey(id, options) {
buildCacheKey(id, options, adapterName) {
const hash = this.objectHasher.hash(options);
return `transform:${id}:${this.imageAdapter.constructor.name}:${hash}`;
return `transform:${id}:${adapterName}:${hash}`;
}
async transform(id, options) {
const cacheKey = this.buildCacheKey(id, options);
async transform(id, options, imageAdapter) {
const cacheKey = this.buildCacheKey(id, options, imageAdapter.constructor.name);
const cachedImage = await this.cache.get(cacheKey);

@@ -60,3 +55,4 @@ if (cachedImage) {

this.log(`Resizing ${id} with options:`, JSON.stringify(options));
const originalImage = await this.cachedImage.fetch(id);
const cachedOriginalImage = new cached_image_1.CachedImage(this.cache, imageAdapter);
const originalImage = await cachedOriginalImage.fetch(id);
if (!originalImage) {

@@ -100,4 +96,3 @@ return {

tsyringe_1.singleton(),
__param(0, tsyringe_1.inject('imageAdapter')),
__metadata("design:paramtypes", [Object, object_hash_service_1.ObjectHash,
__metadata("design:paramtypes", [object_hash_service_1.ObjectHash,
keyv_1.default])

@@ -104,0 +99,0 @@ ], Transformer);

{
"name": "express-sharp",
"version": "4.1.3",
"version": "4.2.0",
"description": "Real-time image processing for your express application",

@@ -92,3 +92,6 @@ "main": "dist/index.js",

},
"homepage": "https://github.com/pmb0/express-sharp#readme"
"homepage": "https://github.com/pmb0/express-sharp#readme",
"optionalDependencies": {
"aws-sdk": "^2.699.0"
}
}
<p align="center">Real-time image processing for your express application.</p>
[![npm version](https://badge.fury.io/js/express-sharp.svg)](https://www.npmjs.com/package/express-sharp)
[![Test Coverage][coveralls-image]][coveralls-url]

@@ -34,6 +35,8 @@ [![Build Status][build-image]][build-url]

- [Image Adapters](#image-adapters)
- [FsAdapter](#fsadapter)
- [HttpAdapter](#httpadapter)
- [File System](#file-system)
- [HTTP](#http)
- [Amazon S3](#amazon-s3)
- [Caching](#caching)
- [URL signing](#url-signing)
- [Debug logging](#debug-logging)
- [Client integration](#client-integration)

@@ -111,5 +114,5 @@ - [License](#license)

express-sharp contains the following two standard image adapters.
express-sharp contains the following some standard image adapters.
### FsAdapter
### File System

@@ -124,3 +127,3 @@ With this adapter original images are loaded from the hard disk.

### HttpAdapter
### HTTP

@@ -139,2 +142,19 @@ Loads original images via HTTP.

### Amazon S3
Loads images from Amazon S3. To use this adapter, the optional dependency `aws-sdk` must be installed:
```sh
$ yarn add `aws-sdk`
```
```js
const { S3Adapter } = require('express-sharp')
const bucketName = 'my-bucketname'
const adapter = new S3Adapter(bucketname)
```
The AWS SDK expects the environment variables `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` to be set.
## Caching

@@ -191,2 +211,11 @@

## Debug logging
This project uses [debug](https://www.npmjs.com/package/debug). To display debug messages from `express-sharp`, the `DEBUG` environment variable must be exported so that it contains the value `express-sharp*`. Example:
```sh
$ export DEBUG='my-app:*,express-sharp*'
```
# Client integration

@@ -193,0 +222,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc