Update dependencies and fix import paths for consistency

This commit is contained in:
lborv
2025-09-17 17:13:19 +03:00
parent db58d6ecb1
commit 750e7125ad
15 changed files with 96 additions and 27 deletions

View File

@ -56,7 +56,7 @@
"source-map-support": "^0.5.20",
"ts-loader": "^9.2.3",
"ts-node": "^10.0.0",
"tsconfig-paths": "^4.1.0",
"tsconfig-paths": "^4.2.0",
"typescript": "^4.7.4"
}
}

View File

@ -1,10 +1,10 @@
import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { Token } from "./entities/token.entity";
import { ProjectModule } from "src/project/project.module";
import { ProjectModule } from "../project/project.module";
import { ApiService } from "./api.service";
import { ApiController } from "./api.controller";
import { Project } from "src/project/entities/project.entity";
import { Project } from "../project/entities/project.entity";
@Module({
imports: [ProjectModule, TypeOrmModule.forFeature([Token, Project])],

View File

@ -2,7 +2,7 @@ import { Injectable } from "@nestjs/common";
import { InjectRepository } from "@nestjs/typeorm";
import { Token } from "./entities/token.entity";
import { Repository } from "typeorm";
import { Project } from "src/project/entities/project.entity";
import { Project } from "../project/entities/project.entity";
@Injectable()
export class ApiService {

View File

@ -1,4 +1,4 @@
import { Project } from "src/project/entities/project.entity";
import { Project } from "../../project/entities/project.entity";
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
@Entity("token")

View File

@ -1,8 +1,8 @@
import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { ConfigModule } from "@nestjs/config";
import { TestModule } from "src/test/test.module";
import { ApiModule } from "src/api/api.module";
import { TestModule } from "../test/test.module";
import { ApiModule } from "../api/api.module";
@Module({
imports: [

View File

@ -0,0 +1,51 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Query1758118369785 implements MigrationInterface {
name = "Query1758118369785";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE \`project\` (\`token\` varchar(36) NOT NULL, \`name\` varchar(255) NOT NULL, PRIMARY KEY (\`token\`)) ENGINE=InnoDB`
);
await queryRunner.query(
`CREATE TABLE \`module\` (\`id\` varchar(36) NOT NULL, \`sourcePath\` varchar(255) NOT NULL, \`name\` varchar(255) NOT NULL, \`isInjectable\` tinyint NOT NULL DEFAULT '1', PRIMARY KEY (\`id\`)) ENGINE=InnoDB`
);
await queryRunner.query(
`CREATE TABLE \`query\` (\`id\` varchar(36) NOT NULL, \`source\` longtext NOT NULL, \`isActive\` tinyint NOT NULL DEFAULT '1', \`projectToken\` varchar(36) NULL, PRIMARY KEY (\`id\`)) ENGINE=InnoDB`
);
await queryRunner.query(`ALTER TABLE \`token\` DROP PRIMARY KEY`);
await queryRunner.query(`ALTER TABLE \`token\` DROP COLUMN \`id\``);
await queryRunner.query(
`ALTER TABLE \`token\` ADD \`token\` varchar(36) NOT NULL PRIMARY KEY`
);
await queryRunner.query(
`ALTER TABLE \`token\` ADD \`projectToken\` varchar(36) NULL`
);
await queryRunner.query(
`ALTER TABLE \`token\` ADD CONSTRAINT \`FK_f0bc174c878df5e005c38fe05bd\` FOREIGN KEY (\`projectToken\`) REFERENCES \`project\`(\`token\`) ON DELETE NO ACTION ON UPDATE NO ACTION`
);
await queryRunner.query(
`ALTER TABLE \`query\` ADD CONSTRAINT \`FK_f58429a7d32fbb51ead8c4daf0a\` FOREIGN KEY (\`projectToken\`) REFERENCES \`project\`(\`token\`) ON DELETE NO ACTION ON UPDATE NO ACTION`
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE \`query\` DROP FOREIGN KEY \`FK_f58429a7d32fbb51ead8c4daf0a\``
);
await queryRunner.query(
`ALTER TABLE \`token\` DROP FOREIGN KEY \`FK_f0bc174c878df5e005c38fe05bd\``
);
await queryRunner.query(
`ALTER TABLE \`token\` DROP COLUMN \`projectToken\``
);
await queryRunner.query(`ALTER TABLE \`token\` DROP COLUMN \`token\``);
await queryRunner.query(
`ALTER TABLE \`token\` ADD \`id\` varchar(36) NOT NULL`
);
await queryRunner.query(`ALTER TABLE \`token\` ADD PRIMARY KEY (\`id\`)`);
await queryRunner.query(`DROP TABLE \`query\``);
await queryRunner.query(`DROP TABLE \`module\``);
await queryRunner.query(`DROP TABLE \`project\``);
}
}

View File

@ -1,5 +1,5 @@
import { Token } from "src/api/entities/token.entity";
import { Query } from "src/query/entities/query.enitity";
import { Token } from "../../api/entities/token.entity";
import { Query } from "../../query/entities/query.entity";
import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm";
@Entity("project")

View File

@ -1,8 +1,8 @@
import { Column, Entity, ManyToMany, PrimaryGeneratedColumn } from "typeorm";
import { Query } from "./query.enitity";
import { Query } from "./query.entity";
@Entity("module")
export class Module {
export class VMModule {
@PrimaryGeneratedColumn("uuid")
id: string;

View File

@ -1,4 +1,4 @@
import { Project } from "src/project/entities/project.entity";
import { Project } from "../../project/entities/project.entity";
import {
Column,
Entity,
@ -6,7 +6,7 @@ import {
ManyToOne,
PrimaryGeneratedColumn,
} from "typeorm";
import { Module } from "./module.entity";
import { VMModule } from "./module.entity";
@Entity("query")
export class Query {
@ -22,6 +22,6 @@ export class Query {
@Column({ type: "tinyint", default: 1 })
isActive: number;
@ManyToMany(() => Module, (module) => module.queries)
modules: Module[];
@ManyToMany(() => VMModule, (module) => module.queries)
modules: VMModule[];
}

View File

@ -1,9 +1,9 @@
import { Injectable } from "@nestjs/common";
import { InjectRepository } from "@nestjs/typeorm";
import { Query } from "../entities/query.enitity";
import { Query } from "../entities/query.entity";
import { Repository } from "typeorm";
import { Vm } from "src/vm/vm.class";
import { Module } from "src/vm/module.class";
import { Vm } from "../../vm/vm.class";
import { VModule } from "../../vm/module.class";
@Injectable()
export class QueryExecuterService {
@ -23,6 +23,10 @@ export class QueryExecuterService {
const vm = this.createVm(query);
vm.setFunction("result", (result: string) => {
console.log("Query Result:", result);
});
await vm.runScript(query.source);
// Here you would add the logic to actually execute the query
@ -34,7 +38,7 @@ export class QueryExecuterService {
return new Vm({
memoryLimit: 5,
modules: query.modules.map((module) => {
return new Module(module.name, module.sourcePath);
return new VModule(module.name, module.sourcePath);
}),
});
}

View File

@ -1,8 +1,15 @@
import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { Query } from "./entities/query.entity";
import { VMModule } from "./entities/module.entity";
import { QueryExecuterController } from "./executer/query.executer.controller";
import { QueryHandlerController } from "./handler/query.handler.controller";
import { QueryExecuterService } from "./executer/query.executer.service";
import { QueryHandlerService } from "./handler/query.handler.service";
@Module({
imports: [],
controllers: [],
providers: [],
imports: [TypeOrmModule.forFeature([Query, VMModule])],
controllers: [QueryExecuterController, QueryHandlerController],
providers: [QueryExecuterService, QueryHandlerService],
})
export class QueryModule {}

View File

@ -1,6 +1,6 @@
import * as fs from "fs";
export class Module {
export class VModule {
private name: string;
private source: string;

View File

@ -1,13 +1,13 @@
import * as ivm from "isolated-vm";
import { Module } from "./module.class";
import { VModule } from "./module.class";
export class Vm {
private memoryLimit: number;
private modules: Module[];
private modules: VModule[];
private context: any;
private jail: any;
constructor(configs: { memoryLimit: number; modules: Module[] }) {
constructor(configs: { memoryLimit: number; modules: VModule[] }) {
this.memoryLimit = configs.memoryLimit;
this.modules = configs.modules;
}
@ -24,6 +24,10 @@ export class Vm {
}
}
setFunction(name: string, func: (...args) => any) {
this.jail.setSync(name, func);
}
async runScript(script: string) {
const compiledScript = await this.context.isolate.compileScript(script);
return compiledScript.run(this.context);

View File

@ -10,6 +10,9 @@
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"paths": {
"src/*": ["src/*"]
},
"incremental": true,
"skipLibCheck": true,
"strictNullChecks": false,

View File

@ -3451,7 +3451,7 @@ tsconfig-paths-webpack-plugin@4.0.1:
enhanced-resolve "^5.7.0"
tsconfig-paths "^4.1.2"
tsconfig-paths@4.2.0, tsconfig-paths@^4.1.0, tsconfig-paths@^4.1.2:
tsconfig-paths@4.2.0, tsconfig-paths@^4.1.2, tsconfig-paths@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c"
integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==