From ab5ec519573834689073ba7f16753a2c7d439f19 Mon Sep 17 00:00:00 2001 From: Vinayak Sarawagi Date: Sun, 1 Jun 2025 14:23:35 +0530 Subject: [PATCH 1/6] 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/6] 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/6] 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/6] 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", From b28ca6d742cf71620c4f01efba3f89602b73e00c Mon Sep 17 00:00:00 2001 From: Vinayak Sarawagi Date: Sat, 7 Jun 2025 17:25:43 +0530 Subject: [PATCH 5/6] chore(ts-node): bump version to 0.0.3 and update package-lock.json --- package-lock.json | 6 ++++-- packages/ts-node/package.json | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index d8d7da6..dde2e8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19327,6 +19327,8 @@ }, "node_modules/ts-node": { "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20645,7 +20647,7 @@ }, "packages/cli": { "name": "@intentjs/cli", - "version": "0.0.19", + "version": "0.0.22", "license": "MIT", "dependencies": { "@clack/prompts": "^0.10.0", @@ -20815,7 +20817,7 @@ }, "packages/core": { "name": "@intentjs/core", - "version": "0.1.60", + "version": "0.1.61", "license": "MIT", "dependencies": { "@intentjs/hyper-express": "^0.0.11", diff --git a/packages/ts-node/package.json b/packages/ts-node/package.json index a972659..c1f9e9e 100644 --- a/packages/ts-node/package.json +++ b/packages/ts-node/package.json @@ -1,6 +1,6 @@ { "name": "@intentjs/ts-node", - "version": "0.0.2", + "version": "0.0.3", "description": "A custom ts-node flavour for IntentJS.", "type": "module", "keywords": [ @@ -32,10 +32,10 @@ }, "homepage": "https://github.com/intentjs/intent#readme", "dependencies": { - "ts-loader": "^9.5.2" + "ts-loader": "^9.5.2", + "ts-node": "^10.9.2" }, "devDependencies": { - "@types/node": "^22.15.21", - "ts-node": "^10.9.2" + "@types/node": "^22.15.21" } } From e67f9adb2b6da2ca280618308ca22f4c2837fc57 Mon Sep 17 00:00:00 2001 From: Vinayak Sarawagi Date: Sun, 8 Jun 2025 12:28:17 +0530 Subject: [PATCH 6/6] chore(core): bump version to 0.1.62 and update reply logic - Updated package version to 0.1.62 in package.json. - Modified reply.ts to improve response handling by removing unnecessary send call when no data is present. --- packages/core/lib/rest/http-server/reply.ts | 2 +- packages/core/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/lib/rest/http-server/reply.ts b/packages/core/lib/rest/http-server/reply.ts index a5f024c..199a161 100644 --- a/packages/core/lib/rest/http-server/reply.ts +++ b/packages/core/lib/rest/http-server/reply.ts @@ -42,7 +42,7 @@ export class Reply { return res.stream(dataFromHandler.getStream()); } - if (!dataFromHandler) return res.send(); + if (!dataFromHandler) return; /** * Default to JSON diff --git a/packages/core/package.json b/packages/core/package.json index b6ac472..e3167c2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@intentjs/core", - "version": "0.1.61", + "version": "0.1.62", "description": "Core module for Intent", "repository": { "type": "git",