From 469a751971769e63bbfe733f3fcf61629e29ced7 Mon Sep 17 00:00:00 2001 From: timonrieger Date: Mon, 3 Aug 2026 23:52:15 +0200 Subject: [PATCH] chore(server): update zod to 4.4.3 and nestjs-zod to 5.5.0 --- open-api/immich-openapi-specs.json | 3 --- pnpm-lock.yaml | 18 +++++++++--------- server/package.json | 4 ++-- server/src/dtos/system-config.dto.ts | 15 ++++++--------- 4 files changed, 17 insertions(+), 23 deletions(-) diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index bc3bf82094..ea0dd0b745 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -4486,7 +4486,6 @@ "in": "query", "description": "Return edited asset if available", "schema": { - "default": false, "type": "boolean" } }, @@ -4574,7 +4573,6 @@ "in": "query", "description": "Return edited asset if available", "schema": { - "default": false, "type": "boolean" } }, @@ -23057,7 +23055,6 @@ "type": "string" }, "expiresAt": { - "default": null, "description": "Expiration date", "example": "2024-01-01T00:00:00.000Z", "format": "date-time", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 44d920aaa9..aa711e81c6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -572,8 +572,8 @@ importers: specifier: ^8.0.0 version: 8.1.0(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(rxjs@7.8.2) nestjs-zod: - specifier: ^5.3.0 - version: 5.5.0(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/swagger@11.4.6(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2))(rxjs@7.8.2)(zod@4.3.6) + specifier: ^5.5.0 + version: 5.5.0(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/swagger@11.4.6(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2))(rxjs@7.8.2)(zod@4.4.3) nodemailer: specifier: ^9.0.0 version: 9.0.3 @@ -638,8 +638,8 @@ importers: specifier: ^13.12.0 version: 13.15.35 zod: - specifier: 4.3.6 - version: 4.3.6 + specifier: 4.4.3 + version: 4.4.3 devDependencies: '@eslint/js': specifier: ^10.0.0 @@ -13049,8 +13049,8 @@ packages: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} - zod@4.3.6: - resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} zwitch@1.0.5: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} @@ -23372,12 +23372,12 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - nestjs-zod@5.5.0(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/swagger@11.4.6(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2))(rxjs@7.8.2)(zod@4.3.6): + nestjs-zod@5.5.0(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/swagger@11.4.6(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2))(rxjs@7.8.2)(zod@4.4.3): dependencies: '@nestjs/common': 11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) deepmerge: 4.3.1 rxjs: 7.8.2 - zod: 4.3.6 + zod: 4.4.3 optionalDependencies: '@nestjs/swagger': 11.4.6(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2) @@ -27090,7 +27090,7 @@ snapshots: compress-commons: 6.0.2 readable-stream: 4.7.0 - zod@4.3.6: {} + zod@4.4.3: {} zwitch@1.0.5: {} diff --git a/server/package.json b/server/package.json index 7d5f73cc61..737dd8d8a3 100644 --- a/server/package.json +++ b/server/package.json @@ -94,7 +94,7 @@ "nestjs-cls": "^6.0.0", "nestjs-kysely": "3.1.2", "nestjs-otel": "^8.0.0", - "nestjs-zod": "^5.3.0", + "nestjs-zod": "^5.5.0", "nodemailer": "^9.0.0", "openid-client": "^6.3.3", "pg": "^8.11.3", @@ -116,7 +116,7 @@ "ua-parser-js": "^2.0.0", "uuid": "^14.0.0", "validator": "^13.12.0", - "zod": "4.3.6" + "zod": "4.4.3" }, "devDependencies": { "@eslint/js": "^10.0.0", diff --git a/server/src/dtos/system-config.dto.ts b/server/src/dtos/system-config.dto.ts index a50b7abe87..82545cfe3a 100644 --- a/server/src/dtos/system-config.dto.ts +++ b/server/src/dtos/system-config.dto.ts @@ -25,15 +25,12 @@ import z from 'zod'; /** Coerces 'true'/'false' strings to boolean, but also allows booleans. */ const configBool = z - .preprocess((val) => { - if (val === 'true') { - return true; - } - if (val === 'false') { - return false; - } - return val; - }, z.boolean()) + .preprocess( + (val) => z.stringbool({ truthy: ['true'], falsy: ['false'], case: 'sensitive' }).safeParse(val).data ?? val, + z.boolean(), + ) + + .nonoptional() .meta({ type: 'boolean' }); const JobSettingsSchema = z