From ab5ec519573834689073ba7f16753a2c7d439f19 Mon Sep 17 00:00:00 2001 From: Vinayak Sarawagi Date: Sun, 1 Jun 2025 14:23:35 +0530 Subject: [PATCH 1/4] refactor(core): rename getStream to getAsStream and implement S3 stream retrieval - Updated Local and S3Storage drivers to rename the method getStream to getAsStream for consistency. - Implemented the getAsStream method in S3Storage to retrieve file streams from S3, including error handling for better reliability. --- packages/core/lib/storage/drivers/local.ts | 2 +- .../core/lib/storage/drivers/s3Storage.ts | 21 +++++++++++++++++-- .../lib/storage/interfaces/storageDriver.ts | 6 ++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/core/lib/storage/drivers/local.ts b/packages/core/lib/storage/drivers/local.ts index 163c506..7bb7daa 100644 --- a/packages/core/lib/storage/drivers/local.ts +++ b/packages/core/lib/storage/drivers/local.ts @@ -122,7 +122,7 @@ export class Local implements StorageDriver { return false; } - getStream(filePath: string): ReadStream { + getAsStream(filePath: string): ReadStream { return createReadStream(join(this.config.basePath || '', filePath)); } diff --git a/packages/core/lib/storage/drivers/s3Storage.ts b/packages/core/lib/storage/drivers/s3Storage.ts index 76a39f5..bf5012a 100644 --- a/packages/core/lib/storage/drivers/s3Storage.ts +++ b/packages/core/lib/storage/drivers/s3Storage.ts @@ -28,8 +28,25 @@ export class S3Storage implements StorageDriver { this.initialiseModules(); } - getStream(filePath: string): ReadStream { - throw new Error('Method not implemented.'); + getAsStream(filePath: string): ReadStream { + this.initialiseModules(); + + try { + const command = new this.AWS.GetObjectCommand({ + Bucket: this.config.bucket, + Key: this.getPath(filePath), + }); + + const response = this.client.send(command); + return response.Body as ReadStream; + } catch (error) { + if (this.shouldThrowError()) { + throw new CannotPerformFileOpException( + `Cannot get stream for file ${filePath}: ${error['message']}`, + ); + } + return null; + } } listDir(path: string): Promise> { diff --git a/packages/core/lib/storage/interfaces/storageDriver.ts b/packages/core/lib/storage/interfaces/storageDriver.ts index 263132d..5124623 100644 --- a/packages/core/lib/storage/interfaces/storageDriver.ts +++ b/packages/core/lib/storage/interfaces/storageDriver.ts @@ -1,3 +1,4 @@ +import { ReadStream } from 'fs-extra'; import { StorageDriver$GetFileResponse, StorageDriver$FileMetadataResponse, @@ -136,6 +137,11 @@ export interface StorageDriver { */ getAsJson(path: string, throwError: boolean): Promise>; + /** + * Read file as stream + */ + getAsStream(path: string): ReadStream; + temporaryUrl( path: string, ttlInMins: number, From e0aa4ff983a2e689da67bf6539b5d18be05bf4a9 Mon Sep 17 00:00:00 2001 From: Vinayak Sarawagi Date: Sun, 1 Jun 2025 14:24:47 +0530 Subject: [PATCH 2/4] chore(core): bump version to 0.1.61 --- packages/core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/package.json b/packages/core/package.json index 988ccfc..b6ac472 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@intentjs/core", - "version": "0.1.60", + "version": "0.1.61", "description": "Core module for Intent", "repository": { "type": "git", From 429937f30e1b56a28a1b935ec1fca540a00a77e8 Mon Sep 17 00:00:00 2001 From: Vinayak Sarawagi Date: Sun, 1 Jun 2025 21:21:20 +0530 Subject: [PATCH 3/4] refactor(cli): update SWC file transformer to use tsConfigPath - Refactored the SWC file transformer to accept tsConfigPath instead of ParsedCommandLine directly. - Updated build and start-server commands to align with the new parameter structure. --- packages/cli/commands/build.ts | 6 +++++- packages/cli/commands/start-server.ts | 2 +- packages/cli/lib/dev-server/swc/swc-file-transformer.ts | 8 ++++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/cli/commands/build.ts b/packages/cli/commands/build.ts index 657900f..a9f7457 100644 --- a/packages/cli/commands/build.ts +++ b/packages/cli/commands/build.ts @@ -43,6 +43,10 @@ export class BuildCommand { await intentCliFileTransformer.load(TS_CONFIG); const SWC_OPTIONS = defaultSwcOptionsFactory(TS_CONFIG, INTENT_CONFIG); - await this.swcFileTransformer.handle(TS_CONFIG, INTENT_CONFIG, SWC_OPTIONS); + await this.swcFileTransformer.handle( + tsConfigPath, + INTENT_CONFIG, + SWC_OPTIONS + ); } } diff --git a/packages/cli/commands/start-server.ts b/packages/cli/commands/start-server.ts index 3dffe5c..fcef884 100644 --- a/packages/cli/commands/start-server.ts +++ b/packages/cli/commands/start-server.ts @@ -60,7 +60,7 @@ export class StartServerCommand { const onSuccessHook = this.createOnSuccessHook(INTENT_CONFIG); const swcOnUpdateHook = await this.swcFileTransformer.handle( - TS_CONFIG, + tsConfigPath, INTENT_CONFIG, SWC_OPTIONS ); diff --git a/packages/cli/lib/dev-server/swc/swc-file-transformer.ts b/packages/cli/lib/dev-server/swc/swc-file-transformer.ts index 2a07969..4f8864c 100644 --- a/packages/cli/lib/dev-server/swc/swc-file-transformer.ts +++ b/packages/cli/lib/dev-server/swc/swc-file-transformer.ts @@ -7,18 +7,23 @@ import { ParsedCommandLine } from "typescript"; import { Output } from "@swc/core"; import { transformFile } from "@swc/core"; import { IntentConfiguration } from "../../configuration/interface.js"; +import { TsConfigLoader } from "../typescript/tsconfig-loader.js"; const { mkdirSync, writeFileSync } = fs; export class SwcFileTransformer { + protected readonly tsConfigLoader = new TsConfigLoader(); + async handle( - TS_CONFIG: ParsedCommandLine, + tsConfigPath: string, INTENT_CONFIG: IntentConfiguration, options: ReturnType ): Promise<() => Promise> { + const TS_CONFIG = this.tsConfigLoader.load(tsConfigPath); await this.transformFiles(TS_CONFIG, options, INTENT_CONFIG); const onUpdate = () => { + const TS_CONFIG = this.tsConfigLoader.load(tsConfigPath); return this.transformFiles(TS_CONFIG, options, INTENT_CONFIG); }; @@ -34,7 +39,6 @@ export class SwcFileTransformer { const { fileNames = [] } = TS_CONFIG; const isWindows = process.platform === "win32"; const fileTransformationPromises = []; - for (const filePath of fileNames) { const fileTransformerPromise = (resolve: Function) => transformFile(filePath, { ...options, filename: filePath }) From 48d277394094b788f7eef0d45e953b843a8c19b6 Mon Sep 17 00:00:00 2001 From: Vinayak Sarawagi Date: Sun, 1 Jun 2025 21:22:06 +0530 Subject: [PATCH 4/4] chore(cli): bump version to 0.0.22 --- packages/cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index a485993..013a51c 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@intentjs/cli", - "version": "0.0.21", + "version": "0.0.22", "description": "Helper commands for building Intent application.", "repository": { "type": "git",