From 770c296d8ab1fa5a5a61ef0300c121f27d605e4a Mon Sep 17 00:00:00 2001 From: Caramel Date: Fri, 1 Nov 2024 16:42:13 +0100 Subject: [PATCH] Make sure node version is correct --- backend/package.json | 2 ++ backend/src/app.module.ts | 28 +++++++++++++++++-- .../managers/image/image-processor.service.ts | 1 + backend/src/workers/sharp/universal-sharp.ts | 2 +- pnpm-lock.yaml | 13 ++++++++- 5 files changed, 42 insertions(+), 4 deletions(-) diff --git a/backend/package.json b/backend/package.json index 257a3f6..1009551 100644 --- a/backend/package.json +++ b/backend/package.json @@ -55,6 +55,7 @@ "qoi-img": "^2.2.0", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", + "semver": "^7.6.3", "sharp": "^0.33.5", "stream-parser": "^0.3.1", "thunks": "^4.9.6", @@ -72,6 +73,7 @@ "@types/passport-jwt": "^4.0.1", "@types/passport-local": "^1.0.38", "@types/passport-strategy": "^0.2.38", + "@types/semver": "^7.5.8", "@types/supertest": "^6.0.2", "prettier": "^3.3.3", "source-map-support": "^0.5.21", diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 0c268a4..a9b1795 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -1,8 +1,15 @@ -import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common'; +import { + Logger, + MiddlewareConsumer, + Module, + NestModule, + OnModuleInit, +} from '@nestjs/common'; import { ScheduleModule } from '@nestjs/schedule'; import { ServeStaticModule } from '@nestjs/serve-static'; import cors from 'cors'; import { IncomingMessage, ServerResponse } from 'http'; +import semver from 'semver'; import { EarlyConfigModule } from './config/early/early-config.module.js'; import { ServeStaticConfigService } from './config/early/serve-static.config.service.js'; import { DatabaseModule } from './database/database.module.js'; @@ -13,6 +20,8 @@ import { DemoManagerModule } from './managers/demo/demo.module.js'; import { UsageManagerModule } from './managers/usage/usage.module.js'; import { PicsurRoutesModule } from './routes/routes.module.js'; +const supportedNodeVersions = ['^16.17.0', '^18.6.0', '>=20.0.0']; + const mainCorsConfig = cors({ origin: '', }); @@ -64,11 +73,26 @@ const imageCacheSet = ( PicsurLayersModule, ], }) -export class AppModule implements NestModule { +export class AppModule implements NestModule, OnModuleInit { + private readonly logger = new Logger(AppModule.name); + configure(consumer: MiddlewareConsumer) { consumer.apply(mainCorsConfig).exclude('i/(.*)').forRoutes('*'); consumer .apply(imageCorsConfig, imageCorsOverride, imageCacheSet) .forRoutes('i/(.*)'); } + + onModuleInit() { + const nodeVersion = process.version; + if (!supportedNodeVersions.some((v) => semver.satisfies(nodeVersion, v))) { + this.logger.error( + `Unsupported Node version: ${nodeVersion}. Transcoding performance will be severely degraded.`, + ); + + this.logger.log( + `Supported Node versions: ${supportedNodeVersions.join(', ')}`, + ); + } + } } diff --git a/backend/src/managers/image/image-processor.service.ts b/backend/src/managers/image/image-processor.service.ts index 92a9149..83c8305 100644 --- a/backend/src/managers/image/image-processor.service.ts +++ b/backend/src/managers/image/image-processor.service.ts @@ -1,5 +1,6 @@ import { Injectable } from '@nestjs/common'; import { + AnimFileType, FileType, ImageFileType, SupportedFileTypeCategory, diff --git a/backend/src/workers/sharp/universal-sharp.ts b/backend/src/workers/sharp/universal-sharp.ts index 7644a3f..097147e 100644 --- a/backend/src/workers/sharp/universal-sharp.ts +++ b/backend/src/workers/sharp/universal-sharp.ts @@ -6,7 +6,7 @@ import { } from 'picsur-shared/dist/dto/mimes.dto'; import { QOIdecode, QOIencode } from 'qoi-img'; import sharp, { Sharp, SharpOptions } from 'sharp'; -import { SharpWorkerFinishOptions } from './sharp.message'; +import { SharpWorkerFinishOptions } from './sharp.message.js'; export interface SharpResult { data: Buffer; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 556888a..0f5fc56 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -143,6 +143,9 @@ importers: rxjs: specifier: ^7.8.1 version: 7.8.1 + semver: + specifier: ^7.6.3 + version: 7.6.3 sharp: specifier: ^0.33.5 version: 0.33.5 @@ -189,6 +192,9 @@ importers: '@types/passport-strategy': specifier: ^0.2.38 version: 0.2.38 + '@types/semver': + specifier: ^7.5.8 + version: 7.5.8 '@types/supertest': specifier: ^6.0.2 version: 6.0.2 @@ -2045,7 +2051,7 @@ packages: peerDependencies: '@angular/compiler-cli': ^18.0.0 typescript: ~5.5.4 - webpack: ^5.54.0 + webpack: '>=5.76.0' '@ngui/common@1.0.0': resolution: {integrity: sha512-T0vX6jFLR+19iUVqM0J6lQkcDo6Iaq8pptzMJDEjLG3HkpgeM9SYxiTFV3+yHuP4QzQQ6/VP8gJ+1f4M7iZv5Q==} @@ -2465,6 +2471,9 @@ packages: '@types/retry@0.12.2': resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/send@0.17.4': resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} @@ -8268,6 +8277,8 @@ snapshots: '@types/retry@0.12.2': {} + '@types/semver@7.5.8': {} + '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5