From 3a1249615e7a7350daee834d2fb036c9ae3d3933 Mon Sep 17 00:00:00 2001 From: Boris D Date: Tue, 28 Oct 2025 15:37:09 +0200 Subject: [PATCH] feat: add TypeScript compilation support in QueryExecuterService --- src/query/entities/query.entity.ts | 3 +++ src/query/executer/query.executer.service.ts | 21 +++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/query/entities/query.entity.ts b/src/query/entities/query.entity.ts index b1218da..0173888 100644 --- a/src/query/entities/query.entity.ts +++ b/src/query/entities/query.entity.ts @@ -27,4 +27,7 @@ export class Query { @Column({ type: "tinyint", default: 0 }) isCommand: number; + + @Column({ type: "tinyint", default: 0 }) + isTypescript: number; } diff --git a/src/query/executer/query.executer.service.ts b/src/query/executer/query.executer.service.ts index 46a0929..5889fdc 100644 --- a/src/query/executer/query.executer.service.ts +++ b/src/query/executer/query.executer.service.ts @@ -19,6 +19,7 @@ import { SessionService } from "../session/session.service"; import { TLog, TLogType } from "../logger/logger.types"; import { LoggerService } from "../logger/logger.service"; import { ProjectSettingService } from "src/project/settings/project.setting.service"; +import ts from "typescript"; @Injectable() export class QueryExecuterService { @@ -89,6 +90,14 @@ export class QueryExecuterService { return result; } + private compileTypeScript(tsCode: string) { + const jsCode = ts.transpileModule(tsCode, { + compilerOptions: { module: ts.ModuleKind.CommonJS }, + }).outputText; + + return jsCode; + } + async runQuery( token: string, queryData: any, @@ -122,17 +131,19 @@ export class QueryExecuterService { type: TLogType.info, }); + let script = this.clearImports(query.source); + + if (query.isTypescript) { + script = this.compileTypeScript(script); + } + const vm = await this.createVm( query, log, callStack, cookies["x-session-id"] ); - const result = await vm.runScript( - this.clearImports(query.source), - queryData, - headers - ); + const result = await vm.runScript(script, queryData, headers); if (!this.checkResponse(result)) { throw new Error(`Error initializing VM: ${JSON.stringify(result)}`);