chore(server): bump server dependencies (#3899)

* chore(server): bump server dependencies

* fix: test
This commit is contained in:
Alex 2023-08-28 14:41:57 -05:00 committed by GitHub
parent 26c43617d1
commit d0a06739d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 6769 additions and 5037 deletions

6
package-lock.json generated Normal file
View File

@ -0,0 +1,6 @@
{
"name": "immich",
"lockfileVersion": 2,
"requires": true,
"packages": {}
}

11589
server/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -39,89 +39,90 @@
"api:generate": "node ./bin/sync-spec-version.js && bash ./bin/generate-open-api.sh" "api:generate": "node ./bin/sync-spec-version.js && bash ./bin/generate-open-api.sh"
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.22.11",
"@nestjs/bullmq": "^1.1.0", "@nestjs/bullmq": "^10.0.1",
"@nestjs/common": "^9.2.1", "@nestjs/common": "^10.2.2",
"@nestjs/config": "^2.2.0", "@nestjs/config": "^3.0.0",
"@nestjs/core": "^9.2.1", "@nestjs/core": "^10.2.2",
"@nestjs/platform-express": "^9.2.1", "@nestjs/platform-express": "^10.2.2",
"@nestjs/platform-socket.io": "^9.2.1", "@nestjs/platform-socket.io": "^10.2.2",
"@nestjs/schedule": "^2.1.0", "@nestjs/schedule": "^3.0.3",
"@nestjs/swagger": "^6.1.4", "@nestjs/swagger": "^7.1.8",
"@nestjs/typeorm": "^9.0.1", "@nestjs/typeorm": "^10.0.0",
"@nestjs/websockets": "^9.2.1", "@nestjs/websockets": "^10.2.2",
"@socket.io/redis-adapter": "^8.0.1", "@socket.io/redis-adapter": "^8.2.1",
"archiver": "^5.3.1", "archiver": "^6.0.0",
"axios": "^0.26.0", "axios": "^1.5.0",
"bcrypt": "^5.0.1", "bcrypt": "^5.1.1",
"bullmq": "^3.14.1", "bullmq": "^4.8.0",
"class-transformer": "^0.5.1", "class-transformer": "^0.5.1",
"class-validator": "^0.14.0", "class-validator": "^0.14.0",
"cookie-parser": "^1.4.6", "cookie-parser": "^1.4.6",
"exiftool-vendored": "^22.0.0", "exiftool-vendored": "^22.0.0",
"exiftool-vendored.pl": "^12.54.0", "exiftool-vendored.pl": "^12.62.0",
"fluent-ffmpeg": "^2.1.2", "fluent-ffmpeg": "^2.1.2",
"handlebars": "^4.7.7", "handlebars": "^4.7.8",
"i18n-iso-countries": "^7.5.0", "i18n-iso-countries": "^7.6.0",
"immich": "^0.41.0", "immich": "^0.41.0",
"ioredis": "^5.3.1", "ioredis": "^5.3.2",
"joi": "^17.5.0", "joi": "^17.10.0",
"local-reverse-geocoder": "0.12.5", "local-reverse-geocoder": "0.16.5",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"luxon": "^3.0.3", "luxon": "^3.4.2",
"mv": "^2.1.1", "mv": "^2.1.1",
"nest-commander": "^3.3.0", "nest-commander": "^3.11.1",
"openid-client": "^5.2.1", "openid-client": "^5.4.3",
"pg": "^8.8.0", "pg": "^8.11.3",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"rxjs": "^7.2.0", "rxjs": "^7.8.1",
"sanitize-filename": "^1.6.3", "sanitize-filename": "^1.6.3",
"sharp": "^0.31.3", "sharp": "^0.31.3",
"thumbhash": "^0.1.1", "thumbhash": "^0.1.1",
"typeorm": "^0.3.11", "typeorm": "^0.3.17",
"typesense": "^1.5.3", "typesense": "^1.7.1",
"ua-parser-js": "^1.0.35" "ua-parser-js": "^1.0.35"
}, },
"devDependencies": { "devDependencies": {
"@nestjs/cli": "^9.1.8", "@nestjs/cli": "^10.1.16",
"@nestjs/schematics": "^9.0.4", "@nestjs/schematics": "^10.0.2",
"@nestjs/testing": "^9.2.1", "@nestjs/testing": "^10.2.2",
"@openapitools/openapi-generator-cli": "2.5.2", "@openapitools/openapi-generator-cli": "2.7.0",
"@types/archiver": "^5.3.1", "@testcontainers/postgresql": "^10.2.1",
"@types/archiver": "^5.3.2",
"@types/bcrypt": "^5.0.0", "@types/bcrypt": "^5.0.0",
"@types/cookie-parser": "^1.4.3", "@types/cookie-parser": "^1.4.3",
"@types/cron": "^2.0.0", "@types/cron": "^2.0.1",
"@types/express": "^4.17.13", "@types/express": "^4.17.17",
"@types/fluent-ffmpeg": "^2.1.20", "@types/fluent-ffmpeg": "^2.1.21",
"@types/imagemin": "^8.0.0", "@types/imagemin": "^8.0.1",
"@types/jest": "27.0.2", "@types/jest": "29.5.4",
"@types/jest-when": "^3.5.2", "@types/jest-when": "^3.5.2",
"@types/lodash": "^4.14.178", "@types/lodash": "^4.14.197",
"@types/multer": "^1.4.7", "@types/multer": "^1.4.7",
"@types/mv": "^2.1.2", "@types/mv": "^2.1.2",
"@types/node": "^18.0.0", "@types/node": "^20.5.7",
"@types/sharp": "^0.30.2", "@types/sharp": "^0.31.1",
"@types/supertest": "^2.0.11", "@types/supertest": "^2.0.12",
"@types/ua-parser-js": "^0.7.36", "@types/ua-parser-js": "^0.7.36",
"@typescript-eslint/eslint-plugin": "^5.48.1", "@typescript-eslint/eslint-plugin": "^6.4.1",
"@typescript-eslint/parser": "^5.48.1", "@typescript-eslint/parser": "^6.4.1",
"dotenv": "^14.2.0", "dotenv": "^16.3.1",
"eslint": "^8.31.0", "eslint": "^8.48.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^4.0.0", "eslint-plugin-prettier": "^5.0.0",
"jest": "^27.2.5", "jest": "^29.6.4",
"jest-when": "^3.5.2", "jest-when": "^3.6.0",
"prettier": "^2.3.2", "prettier": "^3.0.2",
"prettier-plugin-organize-imports": "^3.2.2", "prettier-plugin-organize-imports": "^3.2.3",
"rimraf": "^3.0.2", "rimraf": "^5.0.1",
"source-map-support": "^0.5.20", "source-map-support": "^0.5.21",
"supertest": "^6.1.3", "supertest": "^6.3.3",
"testcontainers": "^9.9.1", "testcontainers": "^10.2.1",
"ts-jest": "^27.0.3", "ts-jest": "^29.1.1",
"ts-loader": "^9.2.3", "ts-loader": "^9.4.4",
"ts-node": "^10.0.0", "ts-node": "^10.9.1",
"tsconfig-paths": "^3.10.1", "tsconfig-paths": "^4.2.0",
"typescript": "^4.9.4" "typescript": "^5.2.2"
}, },
"jest": { "jest": {
"clearMocks": true, "clearMocks": true,

View File

@ -6,7 +6,10 @@ import { Command, CommandRunner, InquirerService, Question, QuestionSet } from '
description: 'Reset the admin password', description: 'Reset the admin password',
}) })
export class ResetAdminPasswordCommand extends CommandRunner { export class ResetAdminPasswordCommand extends CommandRunner {
constructor(private userService: UserService, private readonly inquirer: InquirerService) { constructor(
private userService: UserService,
private readonly inquirer: InquirerService,
) {
super(); super();
} }

View File

@ -99,8 +99,8 @@ export class AlbumService {
ownerId: authUser.id, ownerId: authUser.id,
albumName: dto.albumName, albumName: dto.albumName,
description: dto.description, description: dto.description,
sharedUsers: dto.sharedWithUserIds?.map((value) => ({ id: value } as UserEntity)) ?? [], sharedUsers: dto.sharedWithUserIds?.map((value) => ({ id: value }) as UserEntity) ?? [],
assets: (dto.assetIds || []).map((id) => ({ id } as AssetEntity)), assets: (dto.assetIds || []).map((id) => ({ id }) as AssetEntity),
albumThumbnailAssetId: dto.assetIds?.[0] || null, albumThumbnailAssetId: dto.assetIds?.[0] || null,
}); });

View File

@ -92,7 +92,7 @@ const sidecar: Record<string, string[]> = {
const isType = (filename: string, r: Record<string, string[]>) => extname(filename).toLowerCase() in r; const isType = (filename: string, r: Record<string, string[]>) => extname(filename).toLowerCase() in r;
const lookup = (filename: string) => const lookup = (filename: string) =>
({ ...image, ...video, ...sidecar }[extname(filename).toLowerCase()]?.[0] ?? 'application/octet-stream'); ({ ...image, ...video, ...sidecar })[extname(filename).toLowerCase()]?.[0] ?? 'application/octet-stream';
export const mimeTypes = { export const mimeTypes = {
image, image,

View File

@ -176,7 +176,10 @@ class BaseConfig implements VideoCodecSWConfig {
export class BaseHWConfig extends BaseConfig implements VideoCodecHWConfig { export class BaseHWConfig extends BaseConfig implements VideoCodecHWConfig {
protected devices: string[]; protected devices: string[];
constructor(protected config: SystemConfigFFmpegDto, devices: string[] = []) { constructor(
protected config: SystemConfigFFmpegDto,
devices: string[] = [],
) {
super(config); super(config);
this.devices = this.validateDevices(devices); this.devices = this.validateDevices(devices);
} }

View File

@ -30,7 +30,7 @@ interface SyncQueue {
export class SearchService { export class SearchService {
private logger = new Logger(SearchService.name); private logger = new Logger(SearchService.name);
private enabled = false; private enabled = false;
private timer: NodeJS.Timer | null = null; private timer: NodeJS.Timeout | null = null;
private configCore: SystemConfigCore; private configCore: SystemConfigCore;
private albumQueue: SyncQueue = { private albumQueue: SyncQueue = {

View File

@ -65,7 +65,7 @@ export class SharedLinkService {
userId: authUser.id, userId: authUser.id,
type: dto.type, type: dto.type,
albumId: dto.albumId || null, albumId: dto.albumId || null,
assets: (dto.assetIds || []).map((id) => ({ id } as AssetEntity)), assets: (dto.assetIds || []).map((id) => ({ id }) as AssetEntity),
description: dto.description || null, description: dto.description || null,
expiresAt: dto.expiresAt || null, expiresAt: dto.expiresAt || null,
allowUpload: dto.allowUpload ?? true, allowUpload: dto.allowUpload ?? true,

View File

@ -16,7 +16,10 @@ import { IUserRepository, UserListFilter } from './user.repository';
const SALT_ROUNDS = 10; const SALT_ROUNDS = 10;
export class UserCore { export class UserCore {
constructor(private userRepository: IUserRepository, private cryptoRepository: ICryptoRepository) {} constructor(
private userRepository: IUserRepository,
private cryptoRepository: ICryptoRepository,
) {}
async updateUser(authUser: AuthUserDto, id: string, dto: Partial<UserEntity>): Promise<UserEntity> { async updateUser(authUser: AuthUserDto, id: string, dto: Partial<UserEntity>): Promise<UserEntity> {
if (!authUser.isAdmin && authUser.id !== id) { if (!authUser.isAdmin && authUser.id !== id) {

View File

@ -5,7 +5,10 @@ import { IAssetRepository } from './asset-repository';
import { CreateAssetDto, ImportAssetDto } from './dto/create-asset.dto'; import { CreateAssetDto, ImportAssetDto } from './dto/create-asset.dto';
export class AssetCore { export class AssetCore {
constructor(private repository: IAssetRepository, private jobRepository: IJobRepository) {} constructor(
private repository: IAssetRepository,
private jobRepository: IJobRepository,
) {}
async create( async create(
authUser: AuthUserDto, authUser: AuthUserDto,

View File

@ -80,7 +80,10 @@ export interface AuthRequest extends Request {
export class AppGuard implements CanActivate { export class AppGuard implements CanActivate {
private logger = new Logger(AppGuard.name); private logger = new Logger(AppGuard.name);
constructor(private reflector: Reflector, private authService: AuthService) {} constructor(
private reflector: Reflector,
private authService: AuthService,
) {}
async canActivate(context: ExecutionContext): Promise<boolean> { async canActivate(context: ExecutionContext): Promise<boolean> {
const targets = [context.getHandler(), context.getClass()]; const targets = [context.getHandler(), context.getClass()];

View File

@ -60,7 +60,10 @@ export class FileUploadInterceptor implements NestInterceptor {
}; };
private defaultStorage: StorageEngine; private defaultStorage: StorageEngine;
constructor(private reflect: Reflector, private assetService: AssetService) { constructor(
private reflect: Reflector,
private assetService: AssetService,
) {
this.defaultStorage = diskStorage({ this.defaultStorage = diskStorage({
filename: this.filename.bind(this), filename: this.filename.bind(this),
destination: this.destination.bind(this), destination: this.destination.bind(this),

View File

@ -1,5 +1,5 @@
import { GenericContainer, PostgreSqlContainer } from 'testcontainers'; import { GenericContainer } from 'testcontainers';
import { PostgreSqlContainer } from '@testcontainers/postgresql';
export default async () => { export default async () => {
process.env.NODE_ENV = 'development'; process.env.NODE_ENV = 'development';
process.env.TYPESENSE_API_KEY = 'abc123'; process.env.TYPESENSE_API_KEY = 'abc123';

View File

@ -1,6 +1,6 @@
{ {
"compilerOptions": { "compilerOptions": {
"module": "commonjs", "module": "Node16",
"strict": true, "strict": true,
"declaration": true, "declaration": true,
"removeComments": true, "removeComments": true,
@ -17,15 +17,35 @@
"esModuleInterop": true, "esModuleInterop": true,
"baseUrl": "./", "baseUrl": "./",
"paths": { "paths": {
"@test": ["test"], "@test": [
"@test/*": ["test/*"], "test"
"@app/immich": ["src/immich"], ],
"@app/immich/*": ["src/immich/*"], "@test/*": [
"@app/infra": ["src/infra"], "test/*"
"@app/infra/*": ["src/infra/*"], ],
"@app/domain": ["src/domain"], "@app/immich": [
"@app/domain/*": ["src/domain/*"] "src/immich"
],
"@app/immich/*": [
"src/immich/*"
],
"@app/infra": [
"src/infra"
],
"@app/infra/*": [
"src/infra/*"
],
"@app/domain": [
"src/domain"
],
"@app/domain/*": [
"src/domain/*"
]
} }
}, },
"exclude": ["dist", "node_modules", "upload"] "exclude": [
} "dist",
"node_modules",
"upload"
]
}