Browse Source

feat(core): Pass RequestContext to AssetPreviewStrategy functions

BREAKING CHANGE: The AssetPreviewStrategy `generatePreviewImage()`
function signature has changed: the first argument is now the
RequestContext of the current request.
Michael Bromley 5 years ago
parent
commit
05e6f9eb86

+ 2 - 2
packages/asset-server-plugin/src/sharp-asset-preview-strategy.ts

@@ -1,5 +1,5 @@
 import { AssetType } from '@vendure/common/lib/generated-types';
 import { AssetType } from '@vendure/common/lib/generated-types';
-import { AssetPreviewStrategy, getAssetType } from '@vendure/core';
+import { AssetPreviewStrategy, getAssetType, RequestContext } from '@vendure/core';
 import path from 'path';
 import path from 'path';
 import sharp from 'sharp';
 import sharp from 'sharp';
 
 
@@ -11,7 +11,7 @@ export class SharpAssetPreviewStrategy implements AssetPreviewStrategy {
         },
         },
     ) {}
     ) {}
 
 
-    async generatePreviewImage(mimeType: string, data: Buffer): Promise<Buffer> {
+    async generatePreviewImage(ctx: RequestContext, mimeType: string, data: Buffer): Promise<Buffer> {
         const assetType = getAssetType(mimeType);
         const assetType = getAssetType(mimeType);
         const { maxWidth, maxHeight } = this.config;
         const { maxWidth, maxHeight } = this.config;
 
 

+ 2 - 1
packages/core/src/config/asset-preview-strategy/asset-preview-strategy.ts

@@ -1,5 +1,6 @@
 import { Stream } from 'stream';
 import { Stream } from 'stream';
 
 
+import { RequestContext } from '../../api/common/request-context';
 import { InjectableStrategy } from '../../common/types/injectable-strategy';
 import { InjectableStrategy } from '../../common/types/injectable-strategy';
 
 
 /**
 /**
@@ -14,5 +15,5 @@ import { InjectableStrategy } from '../../common/types/injectable-strategy';
  * @docsCategory assets
  * @docsCategory assets
  */
  */
 export interface AssetPreviewStrategy extends InjectableStrategy {
 export interface AssetPreviewStrategy extends InjectableStrategy {
-    generatePreviewImage(mimeType: string, data: Buffer): Promise<Buffer>;
+    generatePreviewImage(ctx: RequestContext, mimeType: string, data: Buffer): Promise<Buffer>;
 }
 }

+ 2 - 1
packages/core/src/config/asset-preview-strategy/no-asset-preview-strategy.ts

@@ -1,3 +1,4 @@
+import { RequestContext } from '../../api/common/request-context';
 import { InternalServerError } from '../../common/error/errors';
 import { InternalServerError } from '../../common/error/errors';
 
 
 import { AssetPreviewStrategy } from './asset-preview-strategy';
 import { AssetPreviewStrategy } from './asset-preview-strategy';
@@ -6,7 +7,7 @@ import { AssetPreviewStrategy } from './asset-preview-strategy';
  * A placeholder strategy which will simply throw an error when used.
  * A placeholder strategy which will simply throw an error when used.
  */
  */
 export class NoAssetPreviewStrategy implements AssetPreviewStrategy {
 export class NoAssetPreviewStrategy implements AssetPreviewStrategy {
-    generatePreviewImage(mimeType: string, data: Buffer): Promise<Buffer> {
+    generatePreviewImage(ctx: RequestContext, mimeType: string, data: Buffer): Promise<Buffer> {
         throw new InternalServerError('error.no-asset-preview-strategy-configured');
         throw new InternalServerError('error.no-asset-preview-strategy-configured');
     }
     }
 }
 }

+ 1 - 1
packages/core/src/service/services/asset.service.ts

@@ -254,7 +254,7 @@ export class AssetService {
         const sourceFile = await assetStorageStrategy.readFileToBuffer(sourceFileIdentifier);
         const sourceFile = await assetStorageStrategy.readFileToBuffer(sourceFileIdentifier);
         let preview: Buffer;
         let preview: Buffer;
         try {
         try {
-            preview = await assetPreviewStrategy.generatePreviewImage(mimetype, sourceFile);
+            preview = await assetPreviewStrategy.generatePreviewImage(ctx, mimetype, sourceFile);
         } catch (e) {
         } catch (e) {
             Logger.error(`Could not create Asset preview image: ${e.message}`);
             Logger.error(`Could not create Asset preview image: ${e.message}`);
             throw e;
             throw e;

+ 2 - 2
packages/testing/src/config/testing-asset-preview-strategy.ts

@@ -1,4 +1,4 @@
-import { AssetPreviewStrategy } from '@vendure/core';
+import { AssetPreviewStrategy, RequestContext } from '@vendure/core';
 
 
 const TEST_IMAGE_BASE_64 =
 const TEST_IMAGE_BASE_64 =
     // tslint:disable-next-line:max-line-length
     // tslint:disable-next-line:max-line-length
@@ -15,7 +15,7 @@ export function getTestImageBuffer() {
  * A mock preview strategy which returns a new Buffer without doing any actual work.
  * A mock preview strategy which returns a new Buffer without doing any actual work.
  */
  */
 export class TestingAssetPreviewStrategy implements AssetPreviewStrategy {
 export class TestingAssetPreviewStrategy implements AssetPreviewStrategy {
-    generatePreviewImage(mimeType: string, data: Buffer): Promise<Buffer> {
+    generatePreviewImage(ctx: RequestContext, mimeType: string, data: Buffer): Promise<Buffer> {
         return Promise.resolve(getTestImageBuffer());
         return Promise.resolve(getTestImageBuffer());
     }
     }
 }
 }