@vendure/asset-server-plugin 1.6.4 → 1.7.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.
@@ -1,3 +1,4 @@
1
1
  import { Request } from 'express';
2
- import { AssetServerOptions } from './types';
2
+ import { AssetServerOptions, ImageTransformFormat } from './types';
3
3
  export declare function getAssetUrlPrefixFn(options: AssetServerOptions): ((request: Request, identifier: string) => string) | ((...args: any[]) => string);
4
+ export declare function getValidFormat(format?: unknown): ImageTransformFormat | undefined;
package/lib/src/common.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAssetUrlPrefixFn = void 0;
3
+ exports.getValidFormat = exports.getAssetUrlPrefixFn = void 0;
4
4
  const constants_1 = require("@vendure/core/dist/common/constants");
5
5
  function getAssetUrlPrefixFn(options) {
6
6
  const { assetUrlPrefix, route } = options;
@@ -23,4 +23,20 @@ function getAssetUrlPrefixFn(options) {
23
23
  throw new Error(`The assetUrlPrefix option was of an unexpected type: ${JSON.stringify(assetUrlPrefix)}`);
24
24
  }
25
25
  exports.getAssetUrlPrefixFn = getAssetUrlPrefixFn;
26
+ function getValidFormat(format) {
27
+ if (typeof format !== 'string') {
28
+ return undefined;
29
+ }
30
+ switch (format) {
31
+ case 'jpg':
32
+ case 'jpeg':
33
+ case 'png':
34
+ case 'webp':
35
+ case 'avif':
36
+ return format;
37
+ default:
38
+ return undefined;
39
+ }
40
+ }
41
+ exports.getValidFormat = getValidFormat;
26
42
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":";;;AAAA,mEAA0E;AAK1E,SAAgB,mBAAmB,CAAC,OAA2B;IAC3D,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1C,IAAI,cAAc,IAAI,IAAI,EAAE;QACxB,OAAO,CAAC,OAAgB,EAAE,UAAkB,EAAE,EAAE;;YAC5C,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,mCAAI,OAAO,CAAC,QAAQ,CAAC;YAC1E,OAAO,GAAG,QAAQ,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC;QAC5D,CAAC,CAAC;KACL;IACD,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;QACpC,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,cAAc,CAAC;KAC7C;IACD,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;QACtC,OAAO,CAAC,OAAgB,EAAE,UAAkB,EAAE,EAAE;YAC5C,MAAM,GAAG,GAAI,OAAe,CAAC,+BAAmB,CAAC,CAAC;YAClD,OAAO,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC,CAAC;KACL;IACD,MAAM,IAAI,KAAK,CAAC,wDAAwD,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AAC9G,CAAC;AAlBD,kDAkBC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":";;;AAAA,mEAA0E;AAK1E,SAAgB,mBAAmB,CAAC,OAA2B;IAC3D,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1C,IAAI,cAAc,IAAI,IAAI,EAAE;QACxB,OAAO,CAAC,OAAgB,EAAE,UAAkB,EAAE,EAAE;;YAC5C,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,mCAAI,OAAO,CAAC,QAAQ,CAAC;YAC1E,OAAO,GAAG,QAAQ,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC;QAC5D,CAAC,CAAC;KACL;IACD,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;QACpC,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,cAAc,CAAC;KAC7C;IACD,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;QACtC,OAAO,CAAC,OAAgB,EAAE,UAAkB,EAAE,EAAE;YAC5C,MAAM,GAAG,GAAI,OAAe,CAAC,+BAAmB,CAAC,CAAC;YAClD,OAAO,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC,CAAC;KACL;IACD,MAAM,IAAI,KAAK,CAAC,wDAAwD,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AAC9G,CAAC;AAlBD,kDAkBC;AAED,SAAgB,cAAc,CAAC,MAAgB;IAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC5B,OAAO,SAAS,CAAC;KACpB;IACD,QAAQ,MAAM,EAAE;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACP,OAAO,MAAM,CAAC;QAClB;YACI,OAAO,SAAS,CAAC;KACxB;AACL,CAAC;AAdD,wCAcC"}
@@ -59,6 +59,22 @@ import { AssetServerOptions } from './types';
59
59
  *
60
60
  * `http://localhost:3000/assets/landscape.jpg?w=150&h=150&mode=crop&fpx=0.2&fpy=0.7`
61
61
  *
62
+ * ### Format
63
+ *
64
+ * Since v1.7.0, the image format can be specified by adding the `format` query parameter:
65
+ *
66
+ * `http://localhost:3000/assets/some-asset.jpg?format=webp`
67
+ *
68
+ * This means that, no matter the format of your original asset files, you can use more modern formats in your storefront if the browser
69
+ * supports them. Supported values for `format` are:
70
+ *
71
+ * * `jpeg` or `jpg`
72
+ * * `png`
73
+ * * `webp`
74
+ * * `avif`
75
+ *
76
+ * The `format` parameter can also be combined with presets (see below).
77
+ *
62
78
  * ### Transform presets
63
79
  *
64
80
  * Presets can be defined which allow a single preset name to be used instead of specifying the width, height and mode. Presets are
package/lib/src/plugin.js CHANGED
@@ -20,6 +20,7 @@ const express_1 = __importDefault(require("express"));
20
20
  const file_type_1 = require("file-type");
21
21
  const fs_extra_1 = __importDefault(require("fs-extra"));
22
22
  const path_1 = __importDefault(require("path"));
23
+ const common_1 = require("./common");
23
24
  const constants_1 = require("./constants");
24
25
  const default_asset_storage_strategy_factory_1 = require("./default-asset-storage-strategy-factory");
25
26
  const hashed_asset_naming_strategy_1 = require("./hashed-asset-naming-strategy");
@@ -82,6 +83,22 @@ const transform_image_1 = require("./transform-image");
82
83
  *
83
84
  * `http://localhost:3000/assets/landscape.jpg?w=150&h=150&mode=crop&fpx=0.2&fpy=0.7`
84
85
  *
86
+ * ### Format
87
+ *
88
+ * Since v1.7.0, the image format can be specified by adding the `format` query parameter:
89
+ *
90
+ * `http://localhost:3000/assets/some-asset.jpg?format=webp`
91
+ *
92
+ * This means that, no matter the format of your original asset files, you can use more modern formats in your storefront if the browser
93
+ * supports them. Supported values for `format` are:
94
+ *
95
+ * * `jpeg` or `jpg`
96
+ * * `png`
97
+ * * `webp`
98
+ * * `avif`
99
+ *
100
+ * The `format` parameter can also be combined with presets (see below).
101
+ *
85
102
  * ### Transform presets
86
103
  *
87
104
  * Presets can be defined which allow a single preset name to be used instead of specifying the width, height and mode. Presets are
@@ -144,12 +161,14 @@ let AssetServerPlugin = AssetServerPlugin_1 = class AssetServerPlugin {
144
161
  }
145
162
  /** @internal */
146
163
  static async configure(config) {
164
+ var _a;
147
165
  const storageStrategyFactory = this.options.storageStrategyFactory || default_asset_storage_strategy_factory_1.defaultAssetStorageStrategyFactory;
148
166
  this.assetStorage = await storageStrategyFactory(this.options);
149
- config.assetOptions.assetPreviewStrategy = new sharp_asset_preview_strategy_1.SharpAssetPreviewStrategy({
150
- maxWidth: this.options.previewMaxWidth || 1600,
151
- maxHeight: this.options.previewMaxHeight || 1600,
152
- });
167
+ config.assetOptions.assetPreviewStrategy =
168
+ (_a = this.options.previewStrategy) !== null && _a !== void 0 ? _a : new sharp_asset_preview_strategy_1.SharpAssetPreviewStrategy({
169
+ maxWidth: this.options.previewMaxWidth,
170
+ maxHeight: this.options.previewMaxHeight,
171
+ });
153
172
  config.assetOptions.assetStorageStrategy = this.assetStorage;
154
173
  config.assetOptions.assetNamingStrategy =
155
174
  this.options.namingStrategy || new hashed_asset_naming_strategy_1.HashedAssetNamingStrategy();
@@ -221,6 +240,7 @@ let AssetServerPlugin = AssetServerPlugin_1 = class AssetServerPlugin {
221
240
  */
222
241
  generateTransformedImage() {
223
242
  return async (err, req, res, next) => {
243
+ var _a;
224
244
  if (err && (err.status === 404 || err.statusCode === 404)) {
225
245
  if (req.query) {
226
246
  const decodedReqPath = decodeURIComponent(req.path);
@@ -236,12 +256,16 @@ let AssetServerPlugin = AssetServerPlugin_1 = class AssetServerPlugin {
236
256
  const image = await transform_image_1.transformImage(file, req.query, this.presets || []);
237
257
  try {
238
258
  const imageBuffer = await image.toBuffer();
259
+ const cachedFileName = this.getFileNameFromRequest(req);
239
260
  if (!req.query.cache || req.query.cache === 'true') {
240
- const cachedFileName = this.getFileNameFromRequest(req);
241
261
  await AssetServerPlugin_1.assetStorage.writeFileFromBuffer(cachedFileName, imageBuffer);
242
262
  core_1.Logger.debug(`Saved cached asset: ${cachedFileName}`, constants_1.loggerCtx);
243
263
  }
244
- res.set('Content-Type', `image/${(await image.metadata()).format}`);
264
+ let mimeType = this.getMimeType(cachedFileName);
265
+ if (!mimeType) {
266
+ mimeType = ((_a = (await file_type_1.fromBuffer(imageBuffer))) === null || _a === void 0 ? void 0 : _a.mime) || 'image/jpeg';
267
+ }
268
+ res.set('Content-Type', mimeType);
245
269
  res.setHeader('content-security-policy', `default-src 'self'`);
246
270
  res.send(imageBuffer);
247
271
  return;
@@ -257,22 +281,23 @@ let AssetServerPlugin = AssetServerPlugin_1 = class AssetServerPlugin {
257
281
  };
258
282
  }
259
283
  getFileNameFromRequest(req) {
260
- const { w, h, mode, preset, fpx, fpy } = req.query;
284
+ const { w, h, mode, preset, fpx, fpy, format } = req.query;
261
285
  const focalPoint = fpx && fpy ? `_fpx${fpx}_fpy${fpy}` : '';
286
+ const imageFormat = common_1.getValidFormat(format);
262
287
  let imageParamHash = null;
263
288
  if (w || h) {
264
289
  const width = w || '';
265
290
  const height = h || '';
266
- imageParamHash = this.md5(`_transform_w${width}_h${height}_m${mode}${focalPoint}`);
291
+ imageParamHash = this.md5(`_transform_w${width}_h${height}_m${mode}${focalPoint}${imageFormat}`);
267
292
  }
268
293
  else if (preset) {
269
294
  if (this.presets && !!this.presets.find(p => p.name === preset)) {
270
- imageParamHash = this.md5(`_transform_pre_${preset}${focalPoint}`);
295
+ imageParamHash = this.md5(`_transform_pre_${preset}${focalPoint}${imageFormat}`);
271
296
  }
272
297
  }
273
298
  const decodedReqPath = decodeURIComponent(req.path);
274
299
  if (imageParamHash) {
275
- return path_1.default.join(this.cacheDir, this.addSuffix(decodedReqPath, imageParamHash));
300
+ return path_1.default.join(this.cacheDir, this.addSuffix(decodedReqPath, imageParamHash, imageFormat));
276
301
  }
277
302
  else {
278
303
  return decodedReqPath;
@@ -281,11 +306,12 @@ let AssetServerPlugin = AssetServerPlugin_1 = class AssetServerPlugin {
281
306
  md5(input) {
282
307
  return crypto_1.createHash('md5').update(input).digest('hex');
283
308
  }
284
- addSuffix(fileName, suffix) {
285
- const ext = path_1.default.extname(fileName);
286
- const baseName = path_1.default.basename(fileName, ext);
309
+ addSuffix(fileName, suffix, ext) {
310
+ const originalExt = path_1.default.extname(fileName);
311
+ const effectiveExt = ext ? `.${ext}` : originalExt;
312
+ const baseName = path_1.default.basename(fileName, originalExt);
287
313
  const dirName = path_1.default.dirname(fileName);
288
- return path_1.default.join(dirName, `${baseName}${suffix}${ext}`);
314
+ return path_1.default.join(dirName, `${baseName}${suffix}${effectiveExt}`);
289
315
  }
290
316
  /**
291
317
  * Attempt to get the mime type from the file name.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,wCAQuB;AACvB,mCAAoC;AACpC,sDAAmE;AACnE,yCAAuC;AACvC,wDAA0B;AAC1B,gDAAwB;AAExB,qCAA0C;AAC1C,2CAAwC;AACxC,qGAA8F;AAC9F,iFAA2E;AAC3E,iFAA2E;AAC3E,uDAAmD;AAGnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgHG;AAKH,IAAa,iBAAiB,yBAA9B,MAAa,iBAAiB;IAsC1B,YAAoB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;QApCjC,aAAQ,GAAG,OAAO,CAAC;QAC5B,YAAO,GAA2B;YACtC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACrD,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;YACxD,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1D,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3D,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC7D,CAAC;IA6BmD,CAAC;IA1BtD;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,OAA2B;QACnC,mBAAiB,CAAC,OAAO,GAAG,OAAO,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,gBAAgB;IAChB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAA4B;;QAC/C,MAAM,sBAAsB,GACxB,IAAI,CAAC,OAAO,CAAC,sBAAsB,IAAI,2EAAkC,CAAC;QAC9E,IAAI,CAAC,YAAY,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,CAAC,YAAY,CAAC,oBAAoB;YACpC,MAAA,IAAI,CAAC,OAAO,CAAC,eAAe,mCAC5B,IAAI,wDAAyB,CAAC;gBAC1B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;gBACtC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;aAC3C,CAAC,CAAC;QACP,MAAM,CAAC,YAAY,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC;QAC7D,MAAM,CAAC,YAAY,CAAC,mBAAmB;YACnC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,wDAAyB,EAAE,CAAC;QACnE,OAAO,MAAM,CAAC;IAClB,CAAC;IAID,gBAAgB;IAChB,sBAAsB;QAClB,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YAC9B,OAAO;SACV;QACD,IAAI,mBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE;YACnC,KAAK,MAAM,MAAM,IAAI,mBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE;gBACpD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1E,IAAI,CAAC,CAAC,GAAG,aAAa,EAAE;oBACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;iBACjD;qBAAM;oBACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC7B;aACJ;SACJ;QAED,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,mBAAiB,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrF,kBAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,CAAC,QAA4B;QAClC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YAC9B,OAAO;SACV;QACD,aAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,qBAAS,CAAC,CAAC;QAC3D,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,SAAS,CAAC,mBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpF,mCAA4B,CAAC,cAAc,EAAE,mBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACK,iBAAiB;QACrB,MAAM,WAAW,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;QACrC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;QACnE,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,SAAS;QACb,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;;YAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI;gBACA,MAAM,IAAI,GAAG,MAAM,mBAAiB,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBACxE,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,CAAC,QAAQ,EAAE;oBACX,QAAQ,GAAG,CAAA,MAAA,CAAC,MAAM,sBAAU,CAAC,IAAI,CAAC,CAAC,0CAAE,IAAI,KAAI,0BAA0B,CAAC;iBAC3E;gBACD,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC1B,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,CAAC;gBAC/D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClB;YAAC,OAAO,CAAC,EAAE;gBACR,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACvC,GAAW,CAAC,MAAM,GAAG,GAAG,CAAC;gBAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;aACpB;QACL,CAAC,CAAC;IACN,CAAC;IAED;;;;OAIG;IACK,wBAAwB;QAC5B,OAAO,KAAK,EAAE,GAAQ,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;;YACvE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,EAAE;gBACvD,IAAI,GAAG,CAAC,KAAK,EAAE;oBACX,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACpD,aAAM,CAAC,KAAK,CAAC,+BAA+B,cAAc,EAAE,EAAE,qBAAS,CAAC,CAAC;oBACzE,IAAI,IAAY,CAAC;oBACjB,IAAI;wBACA,IAAI,GAAG,MAAM,mBAAiB,CAAC,YAAY,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;qBAChF;oBAAC,OAAO,GAAG,EAAE;wBACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;wBAC3C,OAAO;qBACV;oBACD,MAAM,KAAK,GAAG,MAAM,gCAAc,CAAC,IAAI,EAAE,GAAG,CAAC,KAAY,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;oBAC/E,IAAI;wBACA,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;wBAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;wBACxD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE;4BAChD,MAAM,mBAAiB,CAAC,YAAY,CAAC,mBAAmB,CACpD,cAAc,EACd,WAAW,CACd,CAAC;4BACF,aAAM,CAAC,KAAK,CAAC,uBAAuB,cAAc,EAAE,EAAE,qBAAS,CAAC,CAAC;yBACpE;wBACD,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;wBAChD,IAAI,CAAC,QAAQ,EAAE;4BACX,QAAQ,GAAG,CAAA,MAAA,CAAC,MAAM,sBAAU,CAAC,WAAW,CAAC,CAAC,0CAAE,IAAI,KAAI,YAAY,CAAC;yBACpE;wBACD,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;wBAClC,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,CAAC;wBAC/D,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACtB,OAAO;qBACV;oBAAC,OAAO,CAAC,EAAE;wBACR,aAAM,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;wBACpC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;wBAChC,OAAO;qBACV;iBACJ;aACJ;YACD,IAAI,EAAE,CAAC;QACX,CAAC,CAAC;IACN,CAAC;IAEO,sBAAsB,CAAC,GAAY;QACvC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;QAC3D,MAAM,UAAU,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,WAAW,GAAG,uBAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,cAAc,GAAkB,IAAI,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,EAAE;YACR,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACvB,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,KAAK,KAAK,MAAM,KAAK,IAAI,GAAG,UAAU,GAAG,WAAW,EAAE,CAAC,CAAC;SACpG;aAAM,IAAI,MAAM,EAAE;YACf,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE;gBAC7D,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,MAAM,GAAG,UAAU,GAAG,WAAW,EAAE,CAAC,CAAC;aACpF;SACJ;QAED,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,cAAc,EAAE;YAChB,OAAO,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;SAChG;aAAM;YACH,OAAO,cAAc,CAAC;SACzB;IACL,CAAC;IAEO,GAAG,CAAC,KAAa;QACrB,OAAO,mBAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAEO,SAAS,CAAC,QAAgB,EAAE,MAAc,EAAE,GAAY;QAC5D,MAAM,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QACnD,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,OAAO,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,QAAgB;QAChC,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,QAAQ,GAAG,EAAE;YACT,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO;gBACR,OAAO,YAAY,CAAC;YACxB,KAAK,MAAM;gBACP,OAAO,WAAW,CAAC;YACvB,KAAK,MAAM;gBACP,OAAO,WAAW,CAAC;YACvB,KAAK,MAAM;gBACP,OAAO,eAAe,CAAC;YAC3B,KAAK,OAAO;gBACR,OAAO,YAAY,CAAC;YACxB,KAAK,OAAO;gBACR,OAAO,YAAY,CAAC;SAC3B;IACL,CAAC;CACJ,CAAA;AA7MY,iBAAiB;IAJ7B,oBAAa,CAAC;QACX,OAAO,EAAE,CAAC,yBAAkB,CAAC;QAC7B,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,mBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC;KAC/D,CAAC;qCAuCsC,qBAAc;GAtCzC,iBAAiB,CA6M7B;AA7MY,8CAAiB"}
@@ -1,12 +1,98 @@
1
1
  /// <reference types="node" />
2
2
  import { AssetPreviewStrategy, RequestContext } from '@vendure/core';
3
+ import sharp from 'sharp';
4
+ /**
5
+ * @description
6
+ * This {@link AssetPreviewStrategy} uses the [Sharp library](https://sharp.pixelplumbing.com/) to generate
7
+ * preview images of uploaded binary files. For non-image binaries, a generic "file" icon with the mime type
8
+ * overlay will be generated.
9
+ *
10
+ * @docsCategory AssetServerPlugin
11
+ * @docsPage SharpAssetPreviewStrategy
12
+ */
13
+ interface SharpAssetPreviewConfig {
14
+ /**
15
+ * @description
16
+ * The max height in pixels of a generated preview image.
17
+ *
18
+ * @default 1600
19
+ */
20
+ maxHeight?: number;
21
+ /**
22
+ * @description
23
+ * The max width in pixels of a generated preview image.
24
+ *
25
+ * @default 1600
26
+ */
27
+ maxWidth?: number;
28
+ /**
29
+ * @description
30
+ * Set Sharp's options for encoding jpeg files: https://sharp.pixelplumbing.com/api-output#jpeg
31
+ *
32
+ * @since 1.7.0
33
+ */
34
+ jpegOptions?: sharp.JpegOptions;
35
+ /**
36
+ * @description
37
+ * Set Sharp's options for encoding png files: https://sharp.pixelplumbing.com/api-output#png
38
+ *
39
+ * @since 1.7.0
40
+ */
41
+ pngOptions?: sharp.PngOptions;
42
+ /**
43
+ * @description
44
+ * Set Sharp's options for encoding webp files: https://sharp.pixelplumbing.com/api-output#webp
45
+ *
46
+ * @since 1.7.0
47
+ */
48
+ webpOptions?: sharp.WebpOptions;
49
+ /**
50
+ * @description
51
+ * Set Sharp's options for encoding gif files: https://sharp.pixelplumbing.com/api-output#gif
52
+ *
53
+ * @since 1.7.0
54
+ */
55
+ gifOptions?: sharp.GifOptions;
56
+ /**
57
+ * @description
58
+ * Set Sharp's options for encoding avif files: https://sharp.pixelplumbing.com/api-output#avif
59
+ *
60
+ * @since 1.7.0
61
+ */
62
+ avifOptions?: sharp.AvifOptions;
63
+ }
64
+ /**
65
+ * @description
66
+ * This {@link AssetPreviewStrategy} uses the [Sharp library](https://sharp.pixelplumbing.com/) to generate
67
+ * preview images of uploaded binary files. For non-image binaries, a generic "file" icon with the mime type
68
+ * overlay will be generated.
69
+ *
70
+ * By default, this strategy will produce previews up to maximum dimensions of 1600 x 1600 pixels. The created
71
+ * preview images will match the input format - so a source file in jpeg format will output a jpeg preview,
72
+ * a webp source file will output a webp preview, and so on.
73
+ *
74
+ * The settings for the outputs will default to Sharp's defaults (https://sharp.pixelplumbing.com/api-output).
75
+ * However, it is possible to pass your own configurations to control the output of each format:
76
+ *
77
+ * ```TypeScript
78
+ * AssetServerPlugin.init({
79
+ * previewStrategy: new SharpAssetPreviewStrategy({
80
+ * jpegOptions: { quality: 95 },
81
+ * webpOptions: { quality: 95 },
82
+ * }),
83
+ * }),
84
+ * ```
85
+ *
86
+ * @docsCategory AssetServerPlugin
87
+ * @docsPage SharpAssetPreviewStrategy
88
+ * @docsWeight 0
89
+ */
3
90
  export declare class SharpAssetPreviewStrategy implements AssetPreviewStrategy {
4
- private config;
5
- constructor(config: {
6
- maxHeight: number;
7
- maxWidth: number;
8
- });
91
+ private readonly defaultConfig;
92
+ private readonly config;
93
+ constructor(config?: SharpAssetPreviewConfig);
9
94
  generatePreviewImage(ctx: RequestContext, mimeType: string, data: Buffer): Promise<Buffer>;
10
95
  private generateMimeTypeOverlay;
11
96
  private generateBinaryFilePreview;
12
97
  }
98
+ export {};
@@ -9,9 +9,44 @@ const core_1 = require("@vendure/core");
9
9
  const path_1 = __importDefault(require("path"));
10
10
  const sharp_1 = __importDefault(require("sharp"));
11
11
  const constants_1 = require("./constants");
12
+ /**
13
+ * @description
14
+ * This {@link AssetPreviewStrategy} uses the [Sharp library](https://sharp.pixelplumbing.com/) to generate
15
+ * preview images of uploaded binary files. For non-image binaries, a generic "file" icon with the mime type
16
+ * overlay will be generated.
17
+ *
18
+ * By default, this strategy will produce previews up to maximum dimensions of 1600 x 1600 pixels. The created
19
+ * preview images will match the input format - so a source file in jpeg format will output a jpeg preview,
20
+ * a webp source file will output a webp preview, and so on.
21
+ *
22
+ * The settings for the outputs will default to Sharp's defaults (https://sharp.pixelplumbing.com/api-output).
23
+ * However, it is possible to pass your own configurations to control the output of each format:
24
+ *
25
+ * ```TypeScript
26
+ * AssetServerPlugin.init({
27
+ * previewStrategy: new SharpAssetPreviewStrategy({
28
+ * jpegOptions: { quality: 95 },
29
+ * webpOptions: { quality: 95 },
30
+ * }),
31
+ * }),
32
+ * ```
33
+ *
34
+ * @docsCategory AssetServerPlugin
35
+ * @docsPage SharpAssetPreviewStrategy
36
+ * @docsWeight 0
37
+ */
12
38
  class SharpAssetPreviewStrategy {
13
39
  constructor(config) {
14
- this.config = config;
40
+ this.defaultConfig = {
41
+ maxHeight: 1600,
42
+ maxWidth: 1600,
43
+ jpegOptions: {},
44
+ pngOptions: {},
45
+ webpOptions: {},
46
+ gifOptions: {},
47
+ avifOptions: {},
48
+ };
49
+ this.config = Object.assign(Object.assign({}, this.defaultConfig), (config !== null && config !== void 0 ? config : {}));
15
50
  }
16
51
  async generatePreviewImage(ctx, mimeType, data) {
17
52
  var _a;
@@ -19,20 +54,32 @@ class SharpAssetPreviewStrategy {
19
54
  const { maxWidth, maxHeight } = this.config;
20
55
  if (assetType === generated_types_1.AssetType.IMAGE) {
21
56
  try {
22
- const image = sharp_1.default(data);
57
+ const image = sharp_1.default(data).rotate();
23
58
  const metadata = await image.metadata();
24
59
  const width = metadata.width || 0;
25
60
  const height = metadata.height || 0;
26
61
  if (maxWidth < width || maxHeight < height) {
27
- return image.rotate().resize(maxWidth, maxHeight, { fit: 'inside' }).toBuffer();
62
+ image.resize(maxWidth, maxHeight, { fit: 'inside' });
63
+ }
64
+ if (mimeType === 'image/svg+xml') {
65
+ // Convert the SVG to a raster for the preview
66
+ return image.toBuffer();
28
67
  }
29
68
  else {
30
- if (mimeType === 'image/svg+xml') {
31
- // Convert the SVG to a raster for the preview
32
- return image.toBuffer();
33
- }
34
- else {
35
- return image.rotate().toBuffer();
69
+ switch (metadata.format) {
70
+ case 'jpeg':
71
+ case 'jpg':
72
+ return image.jpeg(this.config.jpegOptions).toBuffer();
73
+ case 'png':
74
+ return image.png(this.config.pngOptions).toBuffer();
75
+ case 'webp':
76
+ return image.webp(this.config.webpOptions).toBuffer();
77
+ case 'gif':
78
+ return image.gif(this.config.jpegOptions).toBuffer();
79
+ case 'avif':
80
+ return image.avif(this.config.avifOptions).toBuffer();
81
+ default:
82
+ return image.toBuffer();
36
83
  }
37
84
  }
38
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sharp-asset-preview-strategy.js","sourceRoot":"","sources":["../../src/sharp-asset-preview-strategy.ts"],"names":[],"mappings":";;;;;;AAAA,yEAAgE;AAChE,wCAA2F;AAC3F,gDAAwB;AACxB,kDAA0B;AAE1B,2CAAwC;AAExC,MAAa,yBAAyB;IAClC,YACY,MAGP;QAHO,WAAM,GAAN,MAAM,CAGb;IACF,CAAC;IAEJ,KAAK,CAAC,oBAAoB,CAAC,GAAmB,EAAE,QAAgB,EAAE,IAAY;;QAC1E,MAAM,SAAS,GAAG,mBAAY,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAE5C,IAAI,SAAS,KAAK,2BAAS,CAAC,KAAK,EAAE;YAC/B,IAAI;gBACA,MAAM,KAAK,GAAG,eAAK,CAAC,IAAI,CAAC,CAAC;gBAC1B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;gBAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;gBACpC,IAAI,QAAQ,GAAG,KAAK,IAAI,SAAS,GAAG,MAAM,EAAE;oBACxC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;iBACnF;qBAAM;oBACH,IAAI,QAAQ,KAAK,eAAe,EAAE;wBAC9B,8CAA8C;wBAC9C,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;qBAC3B;yBAAM;wBACH,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;qBACpC;iBACJ;aACJ;YAAC,OAAO,GAAQ,EAAE;gBACf,aAAM,CAAC,KAAK,CACR,qEAAqE,QAAQ,KACzE,MAAA,GAAG,CAAC,OAAO,mCAAI,GAAG,CAAC,QAAQ,EAC/B,EAAE,EACF,qBAAS,CACZ,CAAC;gBACF,OAAO,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;aACnD;SACJ;aAAM;YACH,OAAO,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;SACnD;IACL,CAAC;IAEO,uBAAuB,CAAC,QAAgB;QAC5C,OAAO,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;wEAU6C,QAAQ;mBAC7D,CAAC,CAAC;IACjB,CAAC;IAEO,yBAAyB,CAAC,QAAgB;QAC9C,OAAO,eAAK,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;aAC9C,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;aACpC,SAAS,CAAC;YACP;gBACI,KAAK,EAAE,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;gBAC7C,OAAO,EAAE,eAAK,CAAC,OAAO,CAAC,MAAM;aAChC;SACJ,CAAC;aACD,QAAQ,EAAE,CAAC;IACpB,CAAC;CACJ;AApED,8DAoEC"}
1
+ {"version":3,"file":"sharp-asset-preview-strategy.js","sourceRoot":"","sources":["../../src/sharp-asset-preview-strategy.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.resizeToFocalPoint = exports.transformImage = void 0;
7
7
  const sharp_1 = __importDefault(require("sharp"));
8
+ const common_1 = require("./common");
8
9
  /**
9
10
  * Applies transforms to the given image according to the query params passed.
10
11
  */
@@ -14,6 +15,7 @@ async function transformImage(originalImage, queryParams, presets) {
14
15
  let mode = queryParams.mode || 'crop';
15
16
  const fpx = +queryParams.fpx || undefined;
16
17
  const fpy = +queryParams.fpy || undefined;
18
+ const imageFormat = common_1.getValidFormat(queryParams.format);
17
19
  if (queryParams.preset) {
18
20
  const matchingPreset = presets.find(p => p.name === queryParams.preset);
19
21
  if (matchingPreset) {
@@ -30,6 +32,7 @@ async function transformImage(originalImage, queryParams, presets) {
30
32
  options.fit = 'inside';
31
33
  }
32
34
  const image = sharp_1.default(originalImage);
35
+ applyFormat(image, imageFormat);
33
36
  if (fpx && fpy && targetWidth && targetHeight && mode === 'crop') {
34
37
  const metadata = await image.metadata();
35
38
  if (metadata.width && metadata.height) {
@@ -42,6 +45,21 @@ async function transformImage(originalImage, queryParams, presets) {
42
45
  return image.resize(targetWidth, targetHeight, options);
43
46
  }
44
47
  exports.transformImage = transformImage;
48
+ function applyFormat(image, format) {
49
+ switch (format) {
50
+ case 'jpg':
51
+ case 'jpeg':
52
+ return image.jpeg();
53
+ case 'png':
54
+ return image.png();
55
+ case 'webp':
56
+ return image.webp();
57
+ case 'avif':
58
+ return image.avif();
59
+ default:
60
+ return image;
61
+ }
62
+ }
45
63
  /**
46
64
  * Resize an image but keep it centered on the focal point.
47
65
  * Based on the method outlined in https://github.com/lovell/sharp/issues/1198#issuecomment-384591756
@@ -1 +1 @@
1
- {"version":3,"file":"transform-image.js","sourceRoot":"","sources":["../../src/transform-image.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transform-image.js","sourceRoot":"","sources":["../../src/transform-image.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { AssetNamingStrategy, AssetStorageStrategy, RequestContext } from '@vendure/core';
1
+ import { AssetNamingStrategy, AssetPreviewStrategy, AssetStorageStrategy, RequestContext } from '@vendure/core';
2
+ export declare type ImageTransformFormat = 'jpg' | 'jpeg' | 'png' | 'webp' | 'avif';
2
3
  /**
3
4
  * @description
4
5
  * Specifies the way in which an asset preview image will be resized to fit in the
@@ -66,6 +67,7 @@ export interface AssetServerOptions {
66
67
  * The max width in pixels of a generated preview image.
67
68
  *
68
69
  * @default 1600
70
+ * @deprecated Use `previewStrategy: new SharpAssetPreviewStrategy({ maxWidth })` instead
69
71
  */
70
72
  previewMaxWidth?: number;
71
73
  /**
@@ -73,6 +75,7 @@ export interface AssetServerOptions {
73
75
  * The max height in pixels of a generated preview image.
74
76
  *
75
77
  * @default 1600
78
+ * @deprecated Use `previewStrategy: new SharpAssetPreviewStrategy({ maxHeight })` instead
76
79
  */
77
80
  previewMaxHeight?: number;
78
81
  /**
@@ -87,6 +90,14 @@ export interface AssetServerOptions {
87
90
  * @default HashedAssetNamingStrategy
88
91
  */
89
92
  namingStrategy?: AssetNamingStrategy;
93
+ /**
94
+ * @description
95
+ * Defines how previews are generated for a given Asset binary. By default, this uses
96
+ * the {@link SharpAssetPreviewStrategy}
97
+ *
98
+ * @since 1.7.0
99
+ */
100
+ previewStrategy?: AssetPreviewStrategy;
90
101
  /**
91
102
  * @description
92
103
  * A function which can be used to configure an {@link AssetStorageStrategy}. This is useful e.g. if you wish to store your assets
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vendure/asset-server-plugin",
3
- "version": "1.6.4",
3
+ "version": "1.7.1",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "files": [
@@ -23,9 +23,9 @@
23
23
  "@types/express": "^4.17.8",
24
24
  "@types/fs-extra": "^9.0.8",
25
25
  "@types/node-fetch": "^2.5.8",
26
- "@types/sharp": "^0.27.1",
27
- "@vendure/common": "^1.6.4",
28
- "@vendure/core": "^1.6.4",
26
+ "@types/sharp": "^0.30.4",
27
+ "@vendure/common": "^1.7.1",
28
+ "@vendure/core": "^1.7.1",
29
29
  "aws-sdk": "^2.856.0",
30
30
  "express": "^4.17.1",
31
31
  "node-fetch": "^2.6.1",
@@ -35,7 +35,7 @@
35
35
  "dependencies": {
36
36
  "file-type": "^16.2.0",
37
37
  "fs-extra": "^10.0.0",
38
- "sharp": "~0.29.0"
38
+ "sharp": "~0.30.7"
39
39
  },
40
- "gitHead": "3009608cfc611b311dbc3c8a5547c4fb5627cf27"
40
+ "gitHead": "2fbdc409ba7f1bef12eee1d511ce953b8a0bf0dd"
41
41
  }