Skip to content

Commit

Permalink
feat(file-storage): create FileStorageWritable type with done event
Browse files Browse the repository at this point in the history
  • Loading branch information
getlarge committed Oct 11, 2023
1 parent 7e85d28 commit 6eed261
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 4 deletions.
5 changes: 3 additions & 2 deletions packages/file-storage/src/file-storage.class.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import type { Request } from 'express';
import type { Readable, Writable } from 'node:stream';
import type { Readable } from 'node:stream';

import { MethodTypes } from './constants';
import { FileStorageWritable } from './types';

// TODO: extend configuration
export interface FileStorageConfig {
Expand Down Expand Up @@ -71,7 +72,7 @@ export abstract class FileStorage {
args: FileStorageBaseArgs & {
options?: string | any;
},
): Promise<Writable> {
): Promise<FileStorageWritable> {
throw new Error(defaultErrorMessage);
}

Expand Down
5 changes: 3 additions & 2 deletions packages/file-storage/src/file-storage.service.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Injectable } from '@nestjs/common';
import type { Readable, Writable } from 'node:stream';
import type { Readable } from 'node:stream';

import { InjectFileStorageStrategy } from './decorators';
import { FileStorage, FileStorageBaseArgs, FileStorageDirBaseArgs } from './file-storage.class';
Expand All @@ -18,6 +18,7 @@ import {
FileStorageS3UploadFile,
FileStorageS3UploadStream,
} from './file-storage-s3.class';
import type { FileStorageWritable } from './types';

@Injectable()
export class FileStorageService implements Omit<FileStorage, 'transformFilePath'> {
Expand All @@ -31,7 +32,7 @@ export class FileStorageService implements Omit<FileStorage, 'transformFilePath'
return this.fileStorage.uploadFile(args);
}

uploadStream(args: FileStorageLocalUploadStream | FileStorageS3UploadStream): Promise<Writable> {
uploadStream(args: FileStorageLocalUploadStream | FileStorageS3UploadStream): Promise<FileStorageWritable> {
return this.fileStorage.uploadStream(args);
}

Expand Down
13 changes: 13 additions & 0 deletions packages/file-storage/src/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { InjectionToken, ModuleMetadata } from '@nestjs/common';
import { Writable } from 'node:stream';

import { FileStorage, FileStorageConfigFactory } from './file-storage.class';
import { FileStorageLocalSetup } from './file-storage-fs.class';
Expand Down Expand Up @@ -30,3 +31,15 @@ export interface FileStorageModuleAsyncOptions extends Pick<ModuleMetadata, 'imp
// useExisting?: FileStorage;
inject?: InjectionToken[];
}

interface WritableWithDoneEvent {
emit(event: 'done', error?: Error): boolean;
addListener(event: 'done', listener: (error?: Error) => void): this;
on(event: 'done', listener: (error?: Error) => void): this;
once(event: 'done', listener: (error?: Error) => void): this;
prependOnceListener(event: 'done', listener: (error?: Error) => void): this;
prependListener(event: 'done', listener: (error?: Error) => void): this;
removeListener(event: 'done', listener: () => void): this;
}

export type FileStorageWritable = Writable & WritableWithDoneEvent;

0 comments on commit 6eed261

Please sign in to comment.