From dba518e89cf02273f6f4ab6a3cc5ad3b94450c52 Mon Sep 17 00:00:00 2001 From: Mohammad Reza Momeni Date: Fri, 3 Feb 2023 23:31:19 +0330 Subject: [PATCH 1/7] refactor: define types for input file in file-type.validator and file-validator.interface and max-file-size.validator --- packages/common/pipes/file/file-type.validator.ts | 7 +++---- packages/common/pipes/file/file-validator.interface.ts | 4 +++- packages/common/pipes/file/interfaces/file.interface.ts | 8 ++++++++ packages/common/pipes/file/interfaces/index.ts | 1 + packages/common/pipes/file/max-file-size.validator.ts | 3 ++- 5 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 packages/common/pipes/file/interfaces/file.interface.ts create mode 100644 packages/common/pipes/file/interfaces/index.ts diff --git a/packages/common/pipes/file/file-type.validator.ts b/packages/common/pipes/file/file-type.validator.ts index 240d3efe86a..48fe780f8ce 100644 --- a/packages/common/pipes/file/file-type.validator.ts +++ b/packages/common/pipes/file/file-type.validator.ts @@ -1,4 +1,5 @@ import { FileValidator } from './file-validator.interface'; +import { FileType } from './interfaces'; export type FileTypeValidatorOptions = { fileType: string | RegExp; @@ -20,7 +21,7 @@ export class FileTypeValidator extends FileValidator { return `Validation failed (expected type is ${this.validationOptions.fileType})`; } - isValid(file: any): boolean { + isValid(file: FileType): boolean { if (!this.validationOptions) { return true; } @@ -29,8 +30,6 @@ export class FileTypeValidator extends FileValidator { return false; } - return Boolean( - (file.mimetype as string).match(this.validationOptions.fileType), - ); + return Boolean(file.mimetype.match(this.validationOptions.fileType)); } } diff --git a/packages/common/pipes/file/file-validator.interface.ts b/packages/common/pipes/file/file-validator.interface.ts index 4da506a8c9d..91ca8eec6e1 100644 --- a/packages/common/pipes/file/file-validator.interface.ts +++ b/packages/common/pipes/file/file-validator.interface.ts @@ -1,3 +1,5 @@ +import { FileType } from "./interfaces"; + /** * Interface describing FileValidators, which can be added to a {@link ParseFilePipe}. * @@ -10,7 +12,7 @@ export abstract class FileValidator> { * Indicates if this file should be considered valid, according to the options passed in the constructor. * @param file the file from the request object */ - abstract isValid(file?: any): boolean | Promise; + abstract isValid(file?: FileType): boolean | Promise; /** * Builds an error message in case the validation fails. diff --git a/packages/common/pipes/file/interfaces/file.interface.ts b/packages/common/pipes/file/interfaces/file.interface.ts new file mode 100644 index 00000000000..9be3a543624 --- /dev/null +++ b/packages/common/pipes/file/interfaces/file.interface.ts @@ -0,0 +1,8 @@ +export interface FileType { + fieldname: string; + originalname: string; + encoding: string; + mimetype: string; + buffer: Buffer; + size: number; +} diff --git a/packages/common/pipes/file/interfaces/index.ts b/packages/common/pipes/file/interfaces/index.ts new file mode 100644 index 00000000000..09d8f3ca8f1 --- /dev/null +++ b/packages/common/pipes/file/interfaces/index.ts @@ -0,0 +1 @@ +export * from './file.interface'; diff --git a/packages/common/pipes/file/max-file-size.validator.ts b/packages/common/pipes/file/max-file-size.validator.ts index 847ee19f07b..d2f60c91ef8 100644 --- a/packages/common/pipes/file/max-file-size.validator.ts +++ b/packages/common/pipes/file/max-file-size.validator.ts @@ -1,4 +1,5 @@ import { FileValidator } from './file-validator.interface'; +import { FileType } from './interfaces'; export type MaxFileSizeValidatorOptions = { maxSize: number; @@ -16,7 +17,7 @@ export class MaxFileSizeValidator extends FileValidator Date: Fri, 3 Feb 2023 23:33:49 +0330 Subject: [PATCH 2/7] refactor: use synthetic sugar in file-validator for validate mimetype --- packages/common/pipes/file/file-type.validator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common/pipes/file/file-type.validator.ts b/packages/common/pipes/file/file-type.validator.ts index 48fe780f8ce..710bcdd2993 100644 --- a/packages/common/pipes/file/file-type.validator.ts +++ b/packages/common/pipes/file/file-type.validator.ts @@ -30,6 +30,6 @@ export class FileTypeValidator extends FileValidator { return false; } - return Boolean(file.mimetype.match(this.validationOptions.fileType)); + return !!file.mimetype.match(this.validationOptions.fileType); } } From a0f7ee8b1e116e9d023e844670533cd0ee0d6824 Mon Sep 17 00:00:00 2001 From: Mohammad Reza Momeni Date: Sat, 4 Feb 2023 00:29:09 +0330 Subject: [PATCH 3/7] fix: fix file type checking --- packages/common/pipes/file/file-type.validator.ts | 2 +- packages/common/pipes/file/file-validator.interface.ts | 6 ++++-- packages/common/pipes/file/max-file-size.validator.ts | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/common/pipes/file/file-type.validator.ts b/packages/common/pipes/file/file-type.validator.ts index 710bcdd2993..854a31f2904 100644 --- a/packages/common/pipes/file/file-type.validator.ts +++ b/packages/common/pipes/file/file-type.validator.ts @@ -21,7 +21,7 @@ export class FileTypeValidator extends FileValidator { return `Validation failed (expected type is ${this.validationOptions.fileType})`; } - isValid(file: FileType): boolean { + isValid(file: Partial | FileType): boolean { if (!this.validationOptions) { return true; } diff --git a/packages/common/pipes/file/file-validator.interface.ts b/packages/common/pipes/file/file-validator.interface.ts index 91ca8eec6e1..090a5824e8d 100644 --- a/packages/common/pipes/file/file-validator.interface.ts +++ b/packages/common/pipes/file/file-validator.interface.ts @@ -1,4 +1,4 @@ -import { FileType } from "./interfaces"; +import { FileType } from './interfaces'; /** * Interface describing FileValidators, which can be added to a {@link ParseFilePipe}. @@ -12,7 +12,9 @@ export abstract class FileValidator> { * Indicates if this file should be considered valid, according to the options passed in the constructor. * @param file the file from the request object */ - abstract isValid(file?: FileType): boolean | Promise; + abstract isValid( + file?: FileType | Partial, + ): boolean | Promise; /** * Builds an error message in case the validation fails. diff --git a/packages/common/pipes/file/max-file-size.validator.ts b/packages/common/pipes/file/max-file-size.validator.ts index d2f60c91ef8..f5d8559fee7 100644 --- a/packages/common/pipes/file/max-file-size.validator.ts +++ b/packages/common/pipes/file/max-file-size.validator.ts @@ -17,7 +17,7 @@ export class MaxFileSizeValidator extends FileValidator): boolean { if (!this.validationOptions) { return true; } From f3e118e9c05e1421a8cc4b5ba30522270a32e335 Mon Sep 17 00:00:00 2001 From: mohamadrezamomeni Date: Mon, 6 Feb 2023 22:32:03 +0330 Subject: [PATCH 4/7] Update packages/common/pipes/file/file-validator.interface.ts Co-authored-by: Thiago Valentim <51245643+thiagomini@users.noreply.github.com> --- packages/common/pipes/file/file-validator.interface.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/common/pipes/file/file-validator.interface.ts b/packages/common/pipes/file/file-validator.interface.ts index 090a5824e8d..4dddcfbd317 100644 --- a/packages/common/pipes/file/file-validator.interface.ts +++ b/packages/common/pipes/file/file-validator.interface.ts @@ -12,8 +12,8 @@ export abstract class FileValidator> { * Indicates if this file should be considered valid, according to the options passed in the constructor. * @param file the file from the request object */ - abstract isValid( - file?: FileType | Partial, + abstract isValid( + file?: TFile, ): boolean | Promise; /** From 2ccf67b8e41ec221e5514be94a4bb38eb15a2703 Mon Sep 17 00:00:00 2001 From: Mohammad Reza Momeni Date: Tue, 7 Feb 2023 00:22:20 +0330 Subject: [PATCH 5/7] fix: make filetype small and rename to ifile --- packages/common/pipes/file/file-type.validator.ts | 13 ++++++------- .../common/pipes/file/file-validator.interface.ts | 4 ++-- .../common/pipes/file/interfaces/file.interface.ts | 6 +----- .../common/pipes/file/max-file-size.validator.ts | 6 +++--- .../test/pipes/file/file-type.validator.spec.ts | 2 +- .../test/pipes/file/parse-file-pipe.builder.spec.ts | 1 - 6 files changed, 13 insertions(+), 19 deletions(-) diff --git a/packages/common/pipes/file/file-type.validator.ts b/packages/common/pipes/file/file-type.validator.ts index 854a31f2904..2c548e73e0e 100644 --- a/packages/common/pipes/file/file-type.validator.ts +++ b/packages/common/pipes/file/file-type.validator.ts @@ -1,5 +1,5 @@ import { FileValidator } from './file-validator.interface'; -import { FileType } from './interfaces'; +import { IFile } from './interfaces'; export type FileTypeValidatorOptions = { fileType: string | RegExp; @@ -21,15 +21,14 @@ export class FileTypeValidator extends FileValidator { return `Validation failed (expected type is ${this.validationOptions.fileType})`; } - isValid(file: Partial | FileType): boolean { + isValid(file: TFile): boolean { if (!this.validationOptions) { return true; } - if (!file.mimetype) { - return false; - } - - return !!file.mimetype.match(this.validationOptions.fileType); + return ( + 'mimetype' in file && + !!file.mimetype.match(this.validationOptions.fileType) + ); } } diff --git a/packages/common/pipes/file/file-validator.interface.ts b/packages/common/pipes/file/file-validator.interface.ts index 4dddcfbd317..a4229928304 100644 --- a/packages/common/pipes/file/file-validator.interface.ts +++ b/packages/common/pipes/file/file-validator.interface.ts @@ -1,4 +1,4 @@ -import { FileType } from './interfaces'; +import { IFile } from './interfaces'; /** * Interface describing FileValidators, which can be added to a {@link ParseFilePipe}. @@ -12,7 +12,7 @@ export abstract class FileValidator> { * Indicates if this file should be considered valid, according to the options passed in the constructor. * @param file the file from the request object */ - abstract isValid( + abstract isValid( file?: TFile, ): boolean | Promise; diff --git a/packages/common/pipes/file/interfaces/file.interface.ts b/packages/common/pipes/file/interfaces/file.interface.ts index 9be3a543624..37218734fa7 100644 --- a/packages/common/pipes/file/interfaces/file.interface.ts +++ b/packages/common/pipes/file/interfaces/file.interface.ts @@ -1,8 +1,4 @@ -export interface FileType { - fieldname: string; - originalname: string; - encoding: string; +export interface IFile { mimetype: string; - buffer: Buffer; size: number; } diff --git a/packages/common/pipes/file/max-file-size.validator.ts b/packages/common/pipes/file/max-file-size.validator.ts index f5d8559fee7..8e19b61511d 100644 --- a/packages/common/pipes/file/max-file-size.validator.ts +++ b/packages/common/pipes/file/max-file-size.validator.ts @@ -1,5 +1,5 @@ import { FileValidator } from './file-validator.interface'; -import { FileType } from './interfaces'; +import { IFile } from './interfaces'; export type MaxFileSizeValidatorOptions = { maxSize: number; @@ -17,11 +17,11 @@ export class MaxFileSizeValidator extends FileValidator): boolean { + public isValid(file: TFile): boolean { if (!this.validationOptions) { return true; } - return file.size < this.validationOptions.maxSize; + return 'size' in file && file.size < this.validationOptions.maxSize; } } diff --git a/packages/common/test/pipes/file/file-type.validator.spec.ts b/packages/common/test/pipes/file/file-type.validator.spec.ts index 8b58d114033..3e33b9fb5b0 100644 --- a/packages/common/test/pipes/file/file-type.validator.spec.ts +++ b/packages/common/test/pipes/file/file-type.validator.spec.ts @@ -1,5 +1,5 @@ -import { FileTypeValidator } from '../../../pipes'; import { expect } from 'chai'; +import { FileTypeValidator } from '../../../pipes'; describe('FileTypeValidator', () => { describe('isValid', () => { diff --git a/packages/common/test/pipes/file/parse-file-pipe.builder.spec.ts b/packages/common/test/pipes/file/parse-file-pipe.builder.spec.ts index 43f1b29a1c5..784cea3de55 100644 --- a/packages/common/test/pipes/file/parse-file-pipe.builder.spec.ts +++ b/packages/common/test/pipes/file/parse-file-pipe.builder.spec.ts @@ -1,7 +1,6 @@ import { expect } from 'chai'; import { FileTypeValidator, - FileTypeValidatorOptions, FileValidator, MaxFileSizeValidator, ParseFilePipeBuilder, From a33e377d002729d6aaf503e88778da45fee41240 Mon Sep 17 00:00:00 2001 From: Mohammad Reza Momeni Date: Tue, 7 Feb 2023 00:52:28 +0330 Subject: [PATCH 6/7] fix: generix with default type --- packages/common/pipes/file/file-type.validator.ts | 2 +- packages/common/pipes/file/file-validator.interface.ts | 2 +- packages/common/pipes/file/max-file-size.validator.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/common/pipes/file/file-type.validator.ts b/packages/common/pipes/file/file-type.validator.ts index 2c548e73e0e..eb8a740705e 100644 --- a/packages/common/pipes/file/file-type.validator.ts +++ b/packages/common/pipes/file/file-type.validator.ts @@ -21,7 +21,7 @@ export class FileTypeValidator extends FileValidator { return `Validation failed (expected type is ${this.validationOptions.fileType})`; } - isValid(file: TFile): boolean { + isValid(file: TFile): boolean { if (!this.validationOptions) { return true; } diff --git a/packages/common/pipes/file/file-validator.interface.ts b/packages/common/pipes/file/file-validator.interface.ts index a4229928304..3e6d26a9645 100644 --- a/packages/common/pipes/file/file-validator.interface.ts +++ b/packages/common/pipes/file/file-validator.interface.ts @@ -12,7 +12,7 @@ export abstract class FileValidator> { * Indicates if this file should be considered valid, according to the options passed in the constructor. * @param file the file from the request object */ - abstract isValid( + abstract isValid( file?: TFile, ): boolean | Promise; diff --git a/packages/common/pipes/file/max-file-size.validator.ts b/packages/common/pipes/file/max-file-size.validator.ts index 8e19b61511d..151ac07bd09 100644 --- a/packages/common/pipes/file/max-file-size.validator.ts +++ b/packages/common/pipes/file/max-file-size.validator.ts @@ -17,7 +17,7 @@ export class MaxFileSizeValidator extends FileValidator(file: TFile): boolean { + public isValid(file: TFile): boolean { if (!this.validationOptions) { return true; } From 0b847e75bc82c5c949a37ae265e0711a7a2e972d Mon Sep 17 00:00:00 2001 From: Mohammad Reza Momeni Date: Thu, 9 Feb 2023 16:14:57 +0330 Subject: [PATCH 7/7] chore: remove | {} --- packages/common/pipes/file/file-type.validator.ts | 2 +- .../common/pipes/file/file-validator.interface.ts | 2 +- .../common/pipes/file/max-file-size.validator.ts | 2 +- .../test/pipes/file/file-type.validator.spec.ts | 12 ++++++------ .../test/pipes/file/max-file-size.validator.spec.ts | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/common/pipes/file/file-type.validator.ts b/packages/common/pipes/file/file-type.validator.ts index eb8a740705e..ffc3e54c516 100644 --- a/packages/common/pipes/file/file-type.validator.ts +++ b/packages/common/pipes/file/file-type.validator.ts @@ -21,7 +21,7 @@ export class FileTypeValidator extends FileValidator { return `Validation failed (expected type is ${this.validationOptions.fileType})`; } - isValid(file: TFile): boolean { + isValid(file: TFile): boolean { if (!this.validationOptions) { return true; } diff --git a/packages/common/pipes/file/file-validator.interface.ts b/packages/common/pipes/file/file-validator.interface.ts index 3e6d26a9645..1d31b70d0d6 100644 --- a/packages/common/pipes/file/file-validator.interface.ts +++ b/packages/common/pipes/file/file-validator.interface.ts @@ -12,7 +12,7 @@ export abstract class FileValidator> { * Indicates if this file should be considered valid, according to the options passed in the constructor. * @param file the file from the request object */ - abstract isValid( + abstract isValid( file?: TFile, ): boolean | Promise; diff --git a/packages/common/pipes/file/max-file-size.validator.ts b/packages/common/pipes/file/max-file-size.validator.ts index 151ac07bd09..9ea3dc7d760 100644 --- a/packages/common/pipes/file/max-file-size.validator.ts +++ b/packages/common/pipes/file/max-file-size.validator.ts @@ -17,7 +17,7 @@ export class MaxFileSizeValidator extends FileValidator(file: TFile): boolean { + public isValid(file: TFile): boolean { if (!this.validationOptions) { return true; } diff --git a/packages/common/test/pipes/file/file-type.validator.spec.ts b/packages/common/test/pipes/file/file-type.validator.spec.ts index 3e33b9fb5b0..ec562aed01e 100644 --- a/packages/common/test/pipes/file/file-type.validator.spec.ts +++ b/packages/common/test/pipes/file/file-type.validator.spec.ts @@ -10,7 +10,7 @@ describe('FileTypeValidator', () => { const requestFile = { mimetype: 'image/jpeg', - }; + } as any; expect(fileTypeValidator.isValid(requestFile)).to.equal(true); }); @@ -22,7 +22,7 @@ describe('FileTypeValidator', () => { const requestFile = { mimetype: 'image/jpeg', - }; + } as any; expect(fileTypeValidator.isValid(requestFile)).to.equal(true); }); @@ -34,7 +34,7 @@ describe('FileTypeValidator', () => { const requestFile = { mimetype: 'application/msword', - }; + } as any; expect(fileTypeValidator.isValid(requestFile)).to.equal(true); }); @@ -46,7 +46,7 @@ describe('FileTypeValidator', () => { const requestFile = { mimetype: 'image/png', - }; + } as any; expect(fileTypeValidator.isValid(requestFile)).to.equal(false); }); @@ -58,7 +58,7 @@ describe('FileTypeValidator', () => { const requestFile = { mimetype: 'image/png', - }; + } as any; expect(fileTypeValidator.isValid(requestFile)).to.equal(false); }); @@ -68,7 +68,7 @@ describe('FileTypeValidator', () => { fileType: 'image/jpeg', }); - const requestFile = {}; + const requestFile = {} as any; expect(fileTypeValidator.isValid(requestFile)).to.equal(false); }); diff --git a/packages/common/test/pipes/file/max-file-size.validator.spec.ts b/packages/common/test/pipes/file/max-file-size.validator.spec.ts index 9ba8e4283bc..61d49e6e86f 100644 --- a/packages/common/test/pipes/file/max-file-size.validator.spec.ts +++ b/packages/common/test/pipes/file/max-file-size.validator.spec.ts @@ -12,7 +12,7 @@ describe('MaxFileSizeValidator', () => { const requestFile = { size: 100, - }; + } as any; expect(maxFileSizeValidator.isValid(requestFile)).to.equal(true); }); @@ -24,7 +24,7 @@ describe('MaxFileSizeValidator', () => { const requestFile = { size: oneKb + 1, - }; + } as any; expect(maxFileSizeValidator.isValid(requestFile)).to.equal(false); }); @@ -36,7 +36,7 @@ describe('MaxFileSizeValidator', () => { const requestFile = { size: oneKb, - }; + } as any; expect(maxFileSizeValidator.isValid(requestFile)).to.equal(false); });