From db58d6ecb1236f708a9b2eb034f30781fa4abfa2 Mon Sep 17 00:00:00 2001 From: lborv Date: Wed, 17 Sep 2025 17:02:03 +0300 Subject: [PATCH] Refactor code structure for improved readability and maintainability --- package.json | 2 + src/api/api.controller.ts | 20 ++ src/api/api.module.ts | 14 + src/api/api.service.ts | 42 +++ src/api/entities/token.entity.ts | 14 + src/app/app.module.ts | 11 +- src/entities/user.entity.ts | 31 -- src/main.ts | 4 +- src/migrations/1757413588655-Init.ts | 15 - src/migrations/1758026710027-apiTokensInit.ts | 15 + src/project/entities/project.entity.ts | 18 ++ src/project/project.controller.ts | 15 + src/project/project.module.ts | 11 + src/project/project.service.ts | 17 ++ src/query/entities/module.entity.ts | 20 ++ src/query/entities/query.enitity.ts | 27 ++ .../executer/query.executer.controller.ts | 15 + src/query/executer/query.executer.service.ts | 41 +++ src/query/handler/query.handler.controller.ts | 10 + src/query/handler/query.handler.service.ts | 4 + src/query/query.module.ts | 8 + src/services/user.service.ts | 34 --- src/test/test.controller.ts | 81 ++++++ src/test/test.module.ts | 9 + src/vm/module.class.ts | 19 ++ src/vm/modules/async.js | 4 + src/vm/vm.class.ts | 31 ++ yarn.lock | 274 +++++++++++++++--- 28 files changed, 674 insertions(+), 132 deletions(-) create mode 100644 src/api/api.controller.ts create mode 100644 src/api/api.module.ts create mode 100644 src/api/api.service.ts create mode 100644 src/api/entities/token.entity.ts delete mode 100644 src/entities/user.entity.ts delete mode 100644 src/migrations/1757413588655-Init.ts create mode 100644 src/migrations/1758026710027-apiTokensInit.ts create mode 100644 src/project/entities/project.entity.ts create mode 100644 src/project/project.controller.ts create mode 100644 src/project/project.module.ts create mode 100644 src/project/project.service.ts create mode 100644 src/query/entities/module.entity.ts create mode 100644 src/query/entities/query.enitity.ts create mode 100644 src/query/executer/query.executer.controller.ts create mode 100644 src/query/executer/query.executer.service.ts create mode 100644 src/query/handler/query.handler.controller.ts create mode 100644 src/query/handler/query.handler.service.ts create mode 100644 src/query/query.module.ts delete mode 100644 src/services/user.service.ts create mode 100644 src/test/test.controller.ts create mode 100644 src/test/test.module.ts create mode 100644 src/vm/module.class.ts create mode 100644 src/vm/modules/async.js create mode 100644 src/vm/vm.class.ts diff --git a/package.json b/package.json index 48d18c5..84cb8af 100644 --- a/package.json +++ b/package.json @@ -34,10 +34,12 @@ "@nestjs/core": "^9.0.0", "@nestjs/platform-express": "^9.0.0", "@nestjs/typeorm": "^11.0.0", + "isolated-vm": "^6.0.1", "mariadb": "^3.4.5", "mysql": "^2.18.1", "reflect-metadata": "^0.1.13", "rxjs": "^7.2.0", + "squel": "^5.13.0", "typeorm": "^0.3.26" }, "devDependencies": { diff --git a/src/api/api.controller.ts b/src/api/api.controller.ts new file mode 100644 index 0000000..23cd213 --- /dev/null +++ b/src/api/api.controller.ts @@ -0,0 +1,20 @@ +import { Body, Controller, Delete, Inject, Post } from "@nestjs/common"; +import { ApiService } from "./api.service"; + +@Controller("api") +export class ApiController { + constructor( + @Inject(ApiService) + private readonly apiService: ApiService + ) {} + + @Post("token/generate") + generateToken(@Body() body: { token: string }) { + return this.apiService.generateToken(body.token); + } + + @Delete("token/revoke") + revokeToken(@Body() body: { token: string }) { + return this.apiService.revokeToken(body.token); + } +} diff --git a/src/api/api.module.ts b/src/api/api.module.ts new file mode 100644 index 0000000..e65c2f3 --- /dev/null +++ b/src/api/api.module.ts @@ -0,0 +1,14 @@ +import { Module } from "@nestjs/common"; +import { TypeOrmModule } from "@nestjs/typeorm"; +import { Token } from "./entities/token.entity"; +import { ProjectModule } from "src/project/project.module"; +import { ApiService } from "./api.service"; +import { ApiController } from "./api.controller"; +import { Project } from "src/project/entities/project.entity"; + +@Module({ + imports: [ProjectModule, TypeOrmModule.forFeature([Token, Project])], + controllers: [ApiController], + providers: [ApiService], +}) +export class ApiModule {} diff --git a/src/api/api.service.ts b/src/api/api.service.ts new file mode 100644 index 0000000..9ec0812 --- /dev/null +++ b/src/api/api.service.ts @@ -0,0 +1,42 @@ +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"; + +@Injectable() +export class ApiService { + constructor( + @InjectRepository(Token) + private readonly tokenRepository: Repository, + + @InjectRepository(Project) + private readonly projectRepository: Repository + ) {} + + async generateToken(projectToken: string) { + const project = await this.projectRepository.findOne({ + where: { token: projectToken }, + }); + + if (!project) { + throw new Error("Project not found"); + } + + const token = this.tokenRepository.create({ project }); + return this.tokenRepository.save(token); + } + + async revokeToken(tokenString: string) { + const token = await this.tokenRepository.findOne({ + where: { token: tokenString }, + }); + + if (!token) { + throw new Error("Token not found"); + } + + token.isActive = false; + return this.tokenRepository.save(token); + } +} diff --git a/src/api/entities/token.entity.ts b/src/api/entities/token.entity.ts new file mode 100644 index 0000000..8eef05d --- /dev/null +++ b/src/api/entities/token.entity.ts @@ -0,0 +1,14 @@ +import { Project } from "src/project/entities/project.entity"; +import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm"; + +@Entity("token") +export class Token { + @PrimaryGeneratedColumn("uuid") + token: string; + + @Column({ type: "tinyint", default: 0 }) + isActive: boolean; + + @ManyToOne(() => Project, (project) => project.apiTokens) + project: Project; +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts index bbca77b..ebd0384 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,8 +1,8 @@ import { Module } from "@nestjs/common"; import { TypeOrmModule } from "@nestjs/typeorm"; import { ConfigModule } from "@nestjs/config"; -import { User } from "../entities/user.entity"; -import { UserService } from "../services/user.service"; +import { TestModule } from "src/test/test.module"; +import { ApiModule } from "src/api/api.module"; @Module({ imports: [ @@ -19,13 +19,14 @@ import { UserService } from "../services/user.service"; database: process.env.DB_DATABASE || "low_code_engine", entities: [__dirname + "/../**/*.entity{.ts,.js}"], migrations: [__dirname + "/../migrations/*{.ts,.js}"], - synchronize: process.env.NODE_ENV === "development", + synchronize: false, migrationsRun: process.env.NODE_ENV === "production", autoLoadEntities: true, }), - TypeOrmModule.forFeature([User]), + ApiModule, + TestModule, ], controllers: [], - providers: [UserService], + providers: [], }) export class AppModule {} diff --git a/src/entities/user.entity.ts b/src/entities/user.entity.ts deleted file mode 100644 index c56c247..0000000 --- a/src/entities/user.entity.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { - Entity, - PrimaryGeneratedColumn, - Column, - CreateDateColumn, - UpdateDateColumn, -} from "typeorm"; - -@Entity("users") -export class User { - @PrimaryGeneratedColumn() - id: number; - - @Column({ unique: true }) - email: string; - - @Column() - firstName: string; - - @Column() - lastName: string; - - @Column({ default: true }) - isActive: boolean; - - @CreateDateColumn() - createdAt: Date; - - @UpdateDateColumn() - updatedAt: Date; -} diff --git a/src/main.ts b/src/main.ts index b2f7a87..9f8fa91 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,7 +3,9 @@ import { AppModule } from "./app/app.module"; async function bootstrap() { const app = await NestFactory.create(AppModule); - await app.listen(3000); + + console.log(`Application is running on: ${process.env.PORT}`); + await app.listen(process.env.PORT); } bootstrap(); diff --git a/src/migrations/1757413588655-Init.ts b/src/migrations/1757413588655-Init.ts deleted file mode 100644 index 37acd3f..0000000 --- a/src/migrations/1757413588655-Init.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class Init1757413588655 implements MigrationInterface { - name = 'Init1757413588655' - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`CREATE TABLE \`users\` (\`id\` int NOT NULL AUTO_INCREMENT, \`email\` varchar(255) NOT NULL, \`firstName\` varchar(255) NOT NULL, \`lastName\` varchar(255) NOT NULL, \`isActive\` tinyint NOT NULL DEFAULT 1, \`createdAt\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), \`updatedAt\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), UNIQUE INDEX \`IDX_97672ac88f789774dd47f7c8be\` (\`email\`), PRIMARY KEY (\`id\`)) ENGINE=InnoDB`); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`DROP INDEX \`IDX_97672ac88f789774dd47f7c8be\` ON \`users\``); - await queryRunner.query(`DROP TABLE \`users\``); - } - -} diff --git a/src/migrations/1758026710027-apiTokensInit.ts b/src/migrations/1758026710027-apiTokensInit.ts new file mode 100644 index 0000000..ada852d --- /dev/null +++ b/src/migrations/1758026710027-apiTokensInit.ts @@ -0,0 +1,15 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class ApiTokensInit1758026710027 implements MigrationInterface { + name = "ApiTokensInit1758026710027"; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE TABLE \`token\` (\`id\` varchar(36) NOT NULL, \`isActive\` tinyint NOT NULL DEFAULT '0', PRIMARY KEY (\`id\`)) ENGINE=InnoDB` + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP TABLE \`token\``); + } +} diff --git a/src/project/entities/project.entity.ts b/src/project/entities/project.entity.ts new file mode 100644 index 0000000..0af2a7a --- /dev/null +++ b/src/project/entities/project.entity.ts @@ -0,0 +1,18 @@ +import { Token } from "src/api/entities/token.entity"; +import { Query } from "src/query/entities/query.enitity"; +import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm"; + +@Entity("project") +export class Project { + @PrimaryGeneratedColumn("uuid") + token: string; + + @Column({ type: "varchar", length: 255 }) + name: string; + + @OneToMany(() => Token, (token) => token.project) + apiTokens: Token[]; + + @OneToMany(() => Query, (query) => query.project) + queries: Query[]; +} diff --git a/src/project/project.controller.ts b/src/project/project.controller.ts new file mode 100644 index 0000000..6b06963 --- /dev/null +++ b/src/project/project.controller.ts @@ -0,0 +1,15 @@ +import { Body, Controller, Inject, Put } from "@nestjs/common"; +import { ProjectService } from "./project.service"; + +@Controller("") +export class ProjectController { + constructor( + @Inject(ProjectService) + private readonly projectService: ProjectService + ) {} + + @Put("project/create") + createProject(@Body() body: { name: string }) { + return this.projectService.create(body.name); + } +} diff --git a/src/project/project.module.ts b/src/project/project.module.ts new file mode 100644 index 0000000..f5088d3 --- /dev/null +++ b/src/project/project.module.ts @@ -0,0 +1,11 @@ +import { Module } from "@nestjs/common"; +import { TypeOrmModule } from "@nestjs/typeorm"; +import { Project } from "./entities/project.entity"; +import { ProjectService } from "./project.service"; + +@Module({ + imports: [TypeOrmModule.forFeature([Project])], + controllers: [], + providers: [ProjectService], +}) +export class ProjectModule {} diff --git a/src/project/project.service.ts b/src/project/project.service.ts new file mode 100644 index 0000000..d442afe --- /dev/null +++ b/src/project/project.service.ts @@ -0,0 +1,17 @@ +import { Injectable } from "@nestjs/common"; +import { InjectRepository } from "@nestjs/typeorm"; +import { Repository } from "typeorm"; +import { Project } from "./entities/project.entity"; + +@Injectable() +export class ProjectService { + constructor( + @InjectRepository(Project) + private readonly projectRepository: Repository + ) {} + + create(name: string) { + const project = this.projectRepository.create({ name }); + return this.projectRepository.save(project); + } +} diff --git a/src/query/entities/module.entity.ts b/src/query/entities/module.entity.ts new file mode 100644 index 0000000..23c2bd0 --- /dev/null +++ b/src/query/entities/module.entity.ts @@ -0,0 +1,20 @@ +import { Column, Entity, ManyToMany, PrimaryGeneratedColumn } from "typeorm"; +import { Query } from "./query.enitity"; + +@Entity("module") +export class Module { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "varchar", length: 255, nullable: false }) + sourcePath: string; + + @Column({ type: "varchar", length: 255 }) + name: string; + + @Column({ type: "tinyint", default: 1 }) + isInjectable: number; + + @ManyToMany(() => Query, (query) => query.modules) + queries: Query[]; +} diff --git a/src/query/entities/query.enitity.ts b/src/query/entities/query.enitity.ts new file mode 100644 index 0000000..dc601d1 --- /dev/null +++ b/src/query/entities/query.enitity.ts @@ -0,0 +1,27 @@ +import { Project } from "src/project/entities/project.entity"; +import { + Column, + Entity, + ManyToMany, + ManyToOne, + PrimaryGeneratedColumn, +} from "typeorm"; +import { Module } from "./module.entity"; + +@Entity("query") +export class Query { + @PrimaryGeneratedColumn("uuid") + id: string; + + @ManyToOne(() => Project, (project) => project.queries) + project: Project; + + @Column({ type: "longtext" }) + source: string; + + @Column({ type: "tinyint", default: 1 }) + isActive: number; + + @ManyToMany(() => Module, (module) => module.queries) + modules: Module[]; +} diff --git a/src/query/executer/query.executer.controller.ts b/src/query/executer/query.executer.controller.ts new file mode 100644 index 0000000..414e7e0 --- /dev/null +++ b/src/query/executer/query.executer.controller.ts @@ -0,0 +1,15 @@ +import { Body, Controller, Inject, Param, Post } from "@nestjs/common"; +import { QueryExecuterService } from "./query.executer.service"; + +@Controller("query") +export class QueryExecuterController { + constructor( + @Inject(QueryExecuterService) + private readonly queryExecuterService: QueryExecuterService + ) {} + + @Post("/run/:token") + async runQuery(@Param("token") token: string, @Body() query: any) { + return this.queryExecuterService.runQuery(token, query); + } +} diff --git a/src/query/executer/query.executer.service.ts b/src/query/executer/query.executer.service.ts new file mode 100644 index 0000000..1deee2f --- /dev/null +++ b/src/query/executer/query.executer.service.ts @@ -0,0 +1,41 @@ +import { Injectable } from "@nestjs/common"; +import { InjectRepository } from "@nestjs/typeorm"; +import { Query } from "../entities/query.enitity"; +import { Repository } from "typeorm"; +import { Vm } from "src/vm/vm.class"; +import { Module } from "src/vm/module.class"; + +@Injectable() +export class QueryExecuterService { + constructor( + @InjectRepository(Query) + private readonly queryRepository: Repository + ) {} + + async runQuery(token: string, queryData: any) { + const query = await this.queryRepository.findOne({ + where: { id: token }, + }); + + if (!query) { + throw new Error("Query not found"); + } + + const vm = this.createVm(query); + + await vm.runScript(query.source); + + // Here you would add the logic to actually execute the query + // against your database or data source. This is a placeholder. + return { message: "Query executed", query: queryData }; + } + + private createVm(query: Query) { + return new Vm({ + memoryLimit: 5, + modules: query.modules.map((module) => { + return new Module(module.name, module.sourcePath); + }), + }); + } +} diff --git a/src/query/handler/query.handler.controller.ts b/src/query/handler/query.handler.controller.ts new file mode 100644 index 0000000..7c62647 --- /dev/null +++ b/src/query/handler/query.handler.controller.ts @@ -0,0 +1,10 @@ +import { Controller, Inject } from "@nestjs/common"; +import { QueryHandlerService } from "./query.handler.service"; + +@Controller("query") +export class QueryHandlerController { + constructor( + @Inject(QueryHandlerService) + private readonly queryHandlerService: QueryHandlerService + ) {} +} diff --git a/src/query/handler/query.handler.service.ts b/src/query/handler/query.handler.service.ts new file mode 100644 index 0000000..3c99d3a --- /dev/null +++ b/src/query/handler/query.handler.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from "@nestjs/common"; + +@Injectable() +export class QueryHandlerService {} diff --git a/src/query/query.module.ts b/src/query/query.module.ts new file mode 100644 index 0000000..80a83f0 --- /dev/null +++ b/src/query/query.module.ts @@ -0,0 +1,8 @@ +import { Module } from "@nestjs/common"; + +@Module({ + imports: [], + controllers: [], + providers: [], +}) +export class QueryModule {} diff --git a/src/services/user.service.ts b/src/services/user.service.ts deleted file mode 100644 index cb50326..0000000 --- a/src/services/user.service.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Injectable } from "@nestjs/common"; -import { InjectRepository } from "@nestjs/typeorm"; -import { Repository } from "typeorm"; -import { User } from "../entities/user.entity"; - -@Injectable() -export class UserService { - constructor( - @InjectRepository(User) - private userRepository: Repository - ) {} - - async findAll(): Promise { - return this.userRepository.find(); - } - - async findOne(id: number): Promise { - return this.userRepository.findOne({ where: { id } }); - } - - async create(userData: Partial): Promise { - const user = this.userRepository.create(userData); - return this.userRepository.save(user); - } - - async update(id: number, userData: Partial): Promise { - await this.userRepository.update(id, userData); - return this.findOne(id); - } - - async remove(id: number): Promise { - await this.userRepository.delete(id); - } -} diff --git a/src/test/test.controller.ts b/src/test/test.controller.ts new file mode 100644 index 0000000..616324c --- /dev/null +++ b/src/test/test.controller.ts @@ -0,0 +1,81 @@ +import { Controller, Get } from "@nestjs/common"; +import * as ivm from "isolated-vm"; +import * as fs from "fs"; + +@Controller("test") +export class TestController { + @Get() + async test() { + const isolate = new ivm.Isolate({ memoryLimit: 128 }); + + const context = isolate.createContextSync(); + const jail = context.global; + + await jail.set("global", jail.derefInto()); + + jail.setSync("log", function (...args) { + console.log(...args); + }); + + const squelSource = fs.readFileSync( + "node_modules/squel/dist/squel.min.js", + "utf8" + ); + + await context.eval(squelSource); + + jail.setSync( + "testAsync", + new ivm.Reference(async (arg) => { + const result = await this.mockAsync(arg); + return result; + }) + ); + + jail.setSync("result", (query) => { + console.log("final", query); + }); + + const hostile = isolate.compileScriptSync(` + async function main() { + async function asyncCall(reference, arg) { + return await reference.apply(undefined, [arg], { result: { promise: true } }); + } + + const a = await asyncCall(testAsync, 'testArg'); + + const query = squel.select().from("users").where("id = ?", a); + + log(a); + log('testMe'); + return query.toString(); + }; + + (async () => { + const resultQuery = await main(); + result(resultQuery); + })(); + `); + + hostile + .run(context) + .catch((err) => console.error(err)) + .then((result) => { + console.log("Script executed successfully", result); + }); + + return "Test successful!"; + } + + mockAsync(arg: any) { + console.log(arg); + + const result = new Promise((resolve) => { + setTimeout(() => { + resolve("Mock async result"); + }, 1); + }); + + return result; + } +} diff --git a/src/test/test.module.ts b/src/test/test.module.ts new file mode 100644 index 0000000..a26b7f9 --- /dev/null +++ b/src/test/test.module.ts @@ -0,0 +1,9 @@ +import { Module } from "@nestjs/common"; +import { TestController } from "./test.controller"; + +@Module({ + imports: [], + controllers: [TestController], + providers: [], +}) +export class TestModule {} diff --git a/src/vm/module.class.ts b/src/vm/module.class.ts new file mode 100644 index 0000000..d58a1ff --- /dev/null +++ b/src/vm/module.class.ts @@ -0,0 +1,19 @@ +import * as fs from "fs"; + +export class Module { + private name: string; + private source: string; + + constructor(name: string, sourcePath: string) { + this.name = name; + this.source = fs.readFileSync(sourcePath, "utf-8"); + } + + getSource() { + return this.source; + } + + getName() { + return this.name; + } +} diff --git a/src/vm/modules/async.js b/src/vm/modules/async.js new file mode 100644 index 0000000..24b0133 --- /dev/null +++ b/src/vm/modules/async.js @@ -0,0 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +async function asyncCall(reference, args) { + return await reference.apply(undefined, args, { result: { promise: true } }); +} diff --git a/src/vm/vm.class.ts b/src/vm/vm.class.ts new file mode 100644 index 0000000..0144413 --- /dev/null +++ b/src/vm/vm.class.ts @@ -0,0 +1,31 @@ +import * as ivm from "isolated-vm"; +import { Module } from "./module.class"; + +export class Vm { + private memoryLimit: number; + private modules: Module[]; + private context: any; + private jail: any; + + constructor(configs: { memoryLimit: number; modules: Module[] }) { + this.memoryLimit = configs.memoryLimit; + this.modules = configs.modules; + } + + async init() { + const isolate = new ivm.Isolate({ memoryLimit: this.memoryLimit }); + this.context = isolate.createContext(); + this.jail = this.context.global; + + this.jail.set("global", this.jail.derefInto()); + + for (const mod of this.modules) { + this.jail.setSync(mod.getName(), mod.getSource()); + } + } + + async runScript(script: string) { + const compiledScript = await this.context.isolate.compileScript(script); + return compiledScript.run(this.context); + } +} diff --git a/yarn.lock b/yarn.lock index fd17097..992f758 100644 --- a/yarn.lock +++ b/yarn.lock @@ -160,9 +160,9 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.30" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz#4a76c4daeee5df09f5d3940e087442fb36ce2b99" - integrity sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q== + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -393,16 +393,16 @@ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/node@*", "@types/node@^24.0.13": - version "24.3.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.3.1.tgz#b0a3fb2afed0ef98e8d7f06d46ef6349047709f3" - integrity sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g== + version "24.5.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.5.0.tgz#70a482e6b1d50e603729d74e62a9a43705ddc9d7" + integrity sha512-y1dMvuvJspJiPSDZUQ+WMBvF7dpnEqN4x9DDC9ie5Fs/HUZJA3wFp7EhHoVaKX/iI0cRoECV8X2jL8zi0xrHCg== dependencies: - undici-types "~7.10.0" + undici-types "~7.12.0" "@types/node@^18.0.0": - version "18.19.124" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.124.tgz#6f49e4fab8274910691a900e8a14316cbf3c7a31" - integrity sha512-hY4YWZFLs3ku6D2Gqo3RchTd9VRCcrjqp/I0mmohYeUVA5Y8eCXKJEasHxLAJVZRJuQogfd1GiJ9lgogBgKeuQ== + version "18.19.125" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.125.tgz#179a577373347f29560cc4dfef9ee36229a09647" + integrity sha512-4TWNu0IxTQcszliYdW2mxrVvhHeERUeDCUwVuvQFn9JCU02kxrUDs8v52yOazPo7wLHKgqEd2FKxlSN6m8Deqg== dependencies: undici-types "~5.26.4" @@ -836,6 +836,11 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +baseline-browser-mapping@^2.8.3: + version "2.8.4" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.4.tgz#e553e12272c4965682743705efd8b4b4cf0d709b" + integrity sha512-L+YvJwGAgwJBV1p6ffpSTa2KRc69EeeYGYjRVWKs0GKrK+LON0GC0gV+rKSNtALEDvMDqkvCFq9r1r94/Gjwxw== + bignumber.js@9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" @@ -846,7 +851,7 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -bl@^4.1.0: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -914,13 +919,14 @@ braces@^3.0.3, braces@~3.0.2: fill-range "^7.1.1" browserslist@^4.14.5: - version "4.25.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.4.tgz#ebdd0e1d1cf3911834bab3a6cd7b917d9babf5af" - integrity sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg== + version "4.26.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.26.2.tgz#7db3b3577ec97f1140a52db4936654911078cef3" + integrity sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A== dependencies: - caniuse-lite "^1.0.30001737" - electron-to-chromium "^1.5.211" - node-releases "^2.0.19" + baseline-browser-mapping "^2.8.3" + caniuse-lite "^1.0.30001741" + electron-to-chromium "^1.5.218" + node-releases "^2.0.21" update-browserslist-db "^1.1.3" buffer-from@^1.0.0: @@ -987,10 +993,10 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caniuse-lite@^1.0.30001737: - version "1.0.30001741" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz#67fb92953edc536442f3c9da74320774aa523143" - integrity sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw== +caniuse-lite@^1.0.30001741: + version "1.0.30001743" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz#50ff91a991220a1ee2df5af00650dd5c308ea7cd" + integrity sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw== chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" @@ -1035,6 +1041,11 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chrome-trace-event@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" @@ -1195,17 +1206,29 @@ debug@2.6.9: ms "2.0.0" debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" - integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + dedent@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.7.0.tgz#c1f9445335f0175a96587be245a282ff451446ca" integrity sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ== +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -1247,6 +1270,11 @@ destroy@1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +detect-libc@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.0.tgz#3ca811f60a7b504b0480e5008adacc660b0b8c4f" + integrity sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg== + diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -1302,10 +1330,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.211: - version "1.5.215" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.215.tgz#200c8d69b1270af6126837b6b1f95077c3a347b1" - integrity sha512-TIvGp57UpeNetj/wV/xpFNpWGb0b/ROw372lHPx5Aafx02gjTBtWnEEcaSX3W2dLM3OSdGGyHX/cHl01JQsLaQ== +electron-to-chromium@^1.5.218: + version "1.5.218" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.218.tgz#921042a011a98a4620853c9d391ab62bcc124400" + integrity sha512-uwwdN0TUHs8u6iRgN8vKeWZMRll4gBkz+QMqdS7DDe49uiK68/UX92lFb61oiFPrpYZNeZIqa4bA7O6Aiasnzg== emoji-regex@^8.0.0: version "8.0.0" @@ -1322,7 +1350,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.5" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== @@ -1338,9 +1366,9 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.14.0, enhanced-resolve@^5.7.0: tapable "^2.2.0" error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== dependencies: is-arrayish "^0.2.1" @@ -1526,6 +1554,11 @@ execa@^4.0.2: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + express@4.18.2: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -1719,6 +1752,11 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" @@ -1784,6 +1822,11 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1968,6 +2011,11 @@ inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + inquirer@8.2.4: version "8.2.4" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" @@ -2108,6 +2156,13 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isolated-vm@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/isolated-vm/-/isolated-vm-6.0.1.tgz#37da98080f859ac9b2176d4f9b95c0dd896c9d9c" + integrity sha512-rcnfMOYIbRdChFnQbMYsSx/cSfmLJRiw+MlPyz6WdwhaPDB/mfib0pSK+D2COW+KNZKGOGeW6a+qVksL6+X/Bg== + dependencies: + prebuild-install "^7.1.3" + iterare@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/iterare/-/iterare-1.2.1.tgz#139c400ff7363690e33abffa33cbba8920f00042" @@ -2337,6 +2392,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -2358,7 +2418,7 @@ minimatch@^9.0.4: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -2373,6 +2433,11 @@ minipass@^4.2.4: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp@^0.5.4: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -2418,6 +2483,11 @@ mysql@^2.18.1: safe-buffer "5.1.2" sqlstring "2.3.1" +napi-build-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" + integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== + natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -2438,6 +2508,13 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +node-abi@^3.3.0: + version "3.77.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.77.0.tgz#3ad90d5c9d45663420e5aa4ff58dbf4e3625419a" + integrity sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ== + dependencies: + semver "^7.3.5" + node-abort-controller@^3.0.1: version "3.1.1" resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" @@ -2457,10 +2534,10 @@ node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" -node-releases@^2.0.19: - version "2.0.20" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.20.tgz#e26bb79dbdd1e64a146df389c699014c611cbc27" - integrity sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA== +node-releases@^2.0.21: + version "2.0.21" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.21.tgz#f59b018bc0048044be2d4c4c04e4c8b18160894c" + integrity sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -2649,6 +2726,24 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== +prebuild-install@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" + integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^2.0.0" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -2736,6 +2831,16 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + readable-stream@2.3.7: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -2762,7 +2867,7 @@ readable-stream@^2.2.2: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.4.0: +readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -2872,7 +2977,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@^5.1.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -3039,6 +3144,20 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -3077,6 +3196,11 @@ sqlstring@2.3.1: resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40" integrity sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ== +squel@^5.13.0: + version "5.13.0" + resolved "https://registry.yarnpkg.com/squel/-/squel-5.13.0.tgz#09cc73e91f0d0e326482605ee76e3b7ac881ddf6" + integrity sha512-Fzd8zqbuqNwzodO3yO6MkX8qiDoVBuwqAaa3eKNz4idhBf24IQHbatBhLUiHAGGl962eGvPVRxzRuFWZlSf49w== + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -3087,7 +3211,16 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3119,7 +3252,14 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -3148,6 +3288,11 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -3177,6 +3322,27 @@ tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.3.tgz#4b67b635b2d97578a06a2713d2f04800c237e99b" integrity sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg== +tar-fs@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.3.tgz#fb3b8843a26b6f13a08e606f7922875eb1fbbf92" + integrity sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + terser-webpack-plugin@^5.3.7: version "5.3.14" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" @@ -3316,6 +3482,13 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -3392,10 +3565,10 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici-types@~7.10.0: - version "7.10.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" - integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== +undici-types@~7.12.0: + version "7.12.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.12.0.tgz#15c5c7475c2a3ba30659529f5cdb4674b622fafb" + integrity sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ== universalify@^2.0.0: version "2.0.1" @@ -3547,7 +3720,16 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==