fix(core): update
This commit is contained in:
		| @@ -3,6 +3,6 @@ | ||||
|  */ | ||||
| export const commitinfo = { | ||||
|   name: '@push.rocks/smartbucket', | ||||
|   version: '3.0.9', | ||||
|   version: '3.0.10', | ||||
|   description: 'A TypeScript library offering simple and cloud-agnostic object storage with advanced features like bucket creation, file and directory management, and data streaming.' | ||||
| } | ||||
|   | ||||
| @@ -107,10 +107,12 @@ export class Bucket { | ||||
|   /** | ||||
|    * get file | ||||
|    */ | ||||
|   public async fastGet(optionsArg: Parameters<typeof this.fastGetStream>[0]): Promise<Buffer> { | ||||
|   public async fastGet(optionsArg: { | ||||
|     path: string | ||||
|   }): Promise<Buffer> { | ||||
|     const done = plugins.smartpromise.defer(); | ||||
|     let completeFile: Buffer; | ||||
|     const replaySubject = await this.fastGetStream(optionsArg); | ||||
|     const replaySubject = await this.fastGetReplaySubject(optionsArg); | ||||
|     const subscription = replaySubject.subscribe({ | ||||
|       next: (chunk) => { | ||||
|         if (completeFile) { | ||||
| @@ -131,7 +133,13 @@ export class Bucket { | ||||
|     return completeFile; | ||||
|   } | ||||
|  | ||||
|   public async fastGetStream(optionsArg: { | ||||
|   /** | ||||
|    * good when time to first byte is important | ||||
|    * and multiple subscribers are expected | ||||
|    * @param optionsArg | ||||
|    * @returns  | ||||
|    */ | ||||
|   public async fastGetReplaySubject(optionsArg: { | ||||
|     path: string; | ||||
|   }): Promise<plugins.smartrx.rxjs.ReplaySubject<Buffer>> { | ||||
|     const fileStream = await this.smartbucketRef.minioClient | ||||
| @@ -161,12 +169,54 @@ export class Bucket { | ||||
|     return replaySubject; | ||||
|   } | ||||
|  | ||||
|   public fastGetStream(optionsArg: { | ||||
|     path: string; | ||||
|   }, typeArg: 'webstream'): Promise<ReadableStream> | ||||
|   public async fastGetStream(optionsArg: { | ||||
|     path: string; | ||||
|   }, typeArg: 'nodestream'): Promise<plugins.stream.Readable> | ||||
|  | ||||
|   /** | ||||
|    * fastGetStream | ||||
|    * @param optionsArg | ||||
|    * @returns  | ||||
|    */ | ||||
|   public async fastGetStream(optionsArg: { path: string; }, typeArg: 'webstream' | 'nodestream' = 'nodestream'): Promise<ReadableStream | plugins.stream.Readable>{ | ||||
|     const fileStream = await this.smartbucketRef.minioClient | ||||
|       .getObject(this.name, optionsArg.path) | ||||
|       .catch((e) => console.log(e)); | ||||
|     const duplexStream = new plugins.smartstream.SmartDuplex<Buffer, Buffer>({ | ||||
|       writeFunction: async (chunk) => { | ||||
|         return chunk; | ||||
|       }, | ||||
|       finalFunction: async (cb) => { | ||||
|         return null; | ||||
|       } | ||||
|     }); | ||||
|  | ||||
|     if (!fileStream) { | ||||
|       return null; | ||||
|     } | ||||
|  | ||||
|     const smartstream = new plugins.smartstream.StreamWrapper([ | ||||
|       fileStream, | ||||
|       duplexStream, | ||||
|     ]); | ||||
|     smartstream.run(); | ||||
|     if (typeArg === 'nodestream') { | ||||
|       return duplexStream; | ||||
|     }; | ||||
|     if (typeArg === 'webstream') { | ||||
|       return (await duplexStream.getWebStreams()).readable; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * store file as stream | ||||
|    */ | ||||
|   public async fastPutStream(optionsArg: { | ||||
|     path: string; | ||||
|     dataStream: plugins.stream.Readable; | ||||
|     dataStream: plugins.stream.Readable | ReadableStream; | ||||
|     nativeMetadata?: { [key: string]: string }; | ||||
|     overwrite?: boolean; | ||||
|   }): Promise<void> { | ||||
| @@ -182,12 +232,14 @@ export class Bucket { | ||||
|       } else { | ||||
|         console.log(`Creating new object at path '${optionsArg.path}' in bucket '${this.name}'.`); | ||||
|       } | ||||
|  | ||||
|       const streamIntake = await plugins.smartstream.StreamIntake.fromStream<Uint8Array>(optionsArg.dataStream); | ||||
|    | ||||
|       // Proceed with putting the object | ||||
|       await this.smartbucketRef.minioClient.putObject( | ||||
|         this.name, | ||||
|         optionsArg.path, | ||||
|         optionsArg.dataStream, | ||||
|         streamIntake, | ||||
|         null, | ||||
|         ...(optionsArg.nativeMetadata | ||||
|           ? (() => { | ||||
| @@ -313,6 +365,13 @@ export class Bucket { | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * deletes this bucket | ||||
|    */ | ||||
|   public async delete() { | ||||
|     await this.smartbucketRef.minioClient.removeBucket(this.name); | ||||
|   } | ||||
|  | ||||
|   public async fastStat(pathDescriptor: interfaces.IPathDecriptor) { | ||||
|     let checkPath = await helpers.reducePathDescriptorToPath(pathDescriptor); | ||||
|     return this.smartbucketRef.minioClient.statObject(this.name, checkPath); | ||||
|   | ||||
| @@ -234,14 +234,30 @@ export class Directory { | ||||
|     return result; | ||||
|   } | ||||
|  | ||||
|   public async fastGetStream(pathArg: string): Promise<plugins.smartrx.rxjs.ReplaySubject<Buffer>> { | ||||
|     const path = plugins.path.join(this.getBasePath(), pathArg); | ||||
|   public fastGetStream(optionsArg: { | ||||
|     path: string; | ||||
|   }, typeArg: 'webstream'): Promise<ReadableStream> | ||||
|   public async fastGetStream(optionsArg: { | ||||
|     path: string; | ||||
|   }, typeArg: 'nodestream'): Promise<plugins.stream.Readable> | ||||
|  | ||||
|   /** | ||||
|    * fastGetStream | ||||
|    * @param optionsArg | ||||
|    * @returns  | ||||
|    */ | ||||
|   public async fastGetStream(optionsArg: { path: string; }, typeArg: 'webstream' | 'nodestream'): Promise<ReadableStream | plugins.stream.Readable>{ | ||||
|     const path = plugins.path.join(this.getBasePath(), optionsArg.path); | ||||
|     const result = await this.bucketRef.fastGetStream({ | ||||
|       path, | ||||
|     }); | ||||
|       path | ||||
|     }, typeArg as any); | ||||
|     return result; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * removes a file within the directory | ||||
|    * @param optionsArg | ||||
|    */ | ||||
|   public async fastRemove(optionsArg: { path: string }) { | ||||
|     const path = plugins.path.join(this.getBasePath(), optionsArg.path); | ||||
|     await this.bucketRef.fastRemove({ | ||||
|   | ||||
| @@ -4,7 +4,6 @@ import * as interfaces from './interfaces.js'; | ||||
| import { Directory } from './classes.directory.js'; | ||||
| import { MetaData } from './classes.metadata.js'; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * represents a file in a directory | ||||
|  */ | ||||
| @@ -33,7 +32,8 @@ export class File { | ||||
|       directoryRefArg: optionsArg.directory, | ||||
|       fileName: optionsArg.name, | ||||
|     }); | ||||
|     if (contents instanceof plugins.stream.Readable) {} else { | ||||
|     if (contents instanceof plugins.stream.Readable) { | ||||
|     } else { | ||||
|       await optionsArg.directory.fastPut({ | ||||
|         path: optionsArg.name, | ||||
|         contents: contents, | ||||
| @@ -48,7 +48,7 @@ export class File { | ||||
|  | ||||
|   public getBasePath(): string { | ||||
|     return plugins.path.join(this.parentDirectoryRef.getBasePath(), this.name); | ||||
|   }; | ||||
|   } | ||||
|  | ||||
|   constructor(optionsArg: { directoryRefArg: Directory; fileName: string }) { | ||||
|     this.parentDirectoryRef = optionsArg.directoryRefArg; | ||||
| @@ -67,35 +67,61 @@ export class File { | ||||
|     return resultBuffer; | ||||
|   } | ||||
|  | ||||
|   public async getReadStream() { | ||||
|     const readStream = this.parentDirectoryRef.bucketRef.fastGetStream({ | ||||
|       path: this.getBasePath(), | ||||
|     }); | ||||
|   public async getReadStream(typeArg: 'webstream'): Promise<ReadableStream>; | ||||
|   public async getReadStream(typeArg: 'nodestream'): Promise<plugins.stream.Readable>; | ||||
|   public async getReadStream( | ||||
|     typeArg: 'nodestream' | 'webstream' | ||||
|   ): Promise<ReadableStream | plugins.stream.Readable> { | ||||
|     const readStream = this.parentDirectoryRef.bucketRef.fastGetStream( | ||||
|       { | ||||
|         path: this.getBasePath(), | ||||
|       }, | ||||
|       typeArg as any | ||||
|     ); | ||||
|     return readStream; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * removes this file | ||||
|    * for using recycling mechanics use .delete() | ||||
|    * deletes this file | ||||
|    */ | ||||
|   public async remove() { | ||||
|     await this.parentDirectoryRef.bucketRef.fastRemove({ | ||||
|       path: this.getBasePath(), | ||||
|     }); | ||||
|     if (!this.name.endsWith('.metadata')) { | ||||
|   public async delete(optionsArg?: { | ||||
|     mode: 'trash' | 'permanent'; | ||||
|   }) { | ||||
|  | ||||
|     optionsArg = { | ||||
|       ... { | ||||
|         mode: 'permanent', | ||||
|       }, | ||||
|       ...optionsArg, | ||||
|     } | ||||
|  | ||||
|     if (optionsArg.mode === 'permanent') { | ||||
|       await this.parentDirectoryRef.bucketRef.fastRemove({ | ||||
|         path: this.getBasePath() + '.metadata', | ||||
|         path: this.getBasePath(), | ||||
|       }); | ||||
|       if (!this.name.endsWith('.metadata')) { | ||||
|         const metadata = await this.getMetaData(); | ||||
|         await metadata.metadataFile.delete(optionsArg); | ||||
|       } | ||||
|     } else if (optionsArg.mode === 'trash') { | ||||
|       const metadata = await this.getMetaData(); | ||||
|       await metadata.storeCustomMetaData({ | ||||
|         key: 'recycle', | ||||
|         value: { | ||||
|           deletedAt: Date.now(), | ||||
|           originalPath: this.getBasePath(), | ||||
|         }, | ||||
|       }); | ||||
|       const trashName = plugins.smartunique.uuid4(); | ||||
|       await this.move({ | ||||
|         directory: await this.parentDirectoryRef.bucketRef.getBaseDirectory(), | ||||
|         path: plugins.path.join('trash', trashName), | ||||
|       }); | ||||
|     } | ||||
|      | ||||
|     await this.parentDirectoryRef.listFiles(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * deletes the file with recycling mechanics | ||||
|    */ | ||||
|   public async delete() { | ||||
|     await this.remove(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * allows locking the file | ||||
|    * @param optionsArg | ||||
| @@ -125,10 +151,13 @@ export class File { | ||||
|   } | ||||
|  | ||||
|   public async updateWithContents(optionsArg: { | ||||
|     contents: Buffer | string | plugins.stream.Readable; | ||||
|     contents: Buffer | string | plugins.stream.Readable | ReadableStream; | ||||
|     encoding?: 'utf8' | 'binary'; | ||||
|   }) { | ||||
|     if (optionsArg.contents instanceof plugins.stream.Readable) { | ||||
|     if ( | ||||
|       optionsArg.contents instanceof plugins.stream.Readable || | ||||
|       optionsArg.contents instanceof ReadableStream | ||||
|     ) { | ||||
|       await this.parentDirectoryRef.bucketRef.fastPutStream({ | ||||
|         path: this.getBasePath(), | ||||
|         dataStream: optionsArg.contents, | ||||
|   | ||||
| @@ -10,8 +10,9 @@ import * as smartpath from '@push.rocks/smartpath'; | ||||
| import * as smartpromise from '@push.rocks/smartpromise'; | ||||
| import * as smartrx from '@push.rocks/smartrx'; | ||||
| import * as smartstream from '@push.rocks/smartstream'; | ||||
| import * as smartunique from '@push.rocks/smartunique'; | ||||
|  | ||||
| export { smartmime, smartpath, smartpromise, smartrx, smartstream }; | ||||
| export { smartmime, smartpath, smartpromise, smartrx, smartstream, smartunique }; | ||||
|  | ||||
| // @tsclass | ||||
| import * as tsclass from '@tsclass/tsclass'; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user