From 5cd1c7b6e260880c9c86f3070be0ec1e8e85d744 Mon Sep 17 00:00:00 2001 From: merge-check <140916359+agentHits@users.noreply.github.com> Date: Tue, 27 Oct 2026 14:33:16 -0400 Subject: [PATCH] build: upgrade nanoid to v6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Что: nanoid 3.3.20 -> 6.0.2 (точная версия) в apps/dokploy и packages/server. Добавлен тест формата id (21 символ A-Za-z0-9_-) и 6-символьного суффикса имени приложения из customAlphabet. Зачем: ветка 3.x поддерживается только ради CommonJS; оба пакета уже ESM. В 6.x nanoid() и customAlphabet() быстрее, исправлены ошибки customRandom и защита от отрицательного размера. Риски: v4 убрала CommonJS, v5 убрала nanoid/async и Node 14/16, v6 требует Node ^22 || ^24 || >=26. В коде нет require("nanoid") и удалённых точек входа, всё в серверном ESM-коде; Node 24.22.1. API nanoid() и customAlphabet(alphabet, size), размер по умолчанию 21 и алфавит не менялись. postcss сохраняет свою копию nanoid 3. Проверки: bun install --frozen-lockfile, bun run typecheck, полный набор тестов (4286 пройдено, 2 упавших по таймингу под нагрузкой прошли при повторном запуске), biome check, bun audit. Co-Authored-By: Claude Opus 5.5 --- apps/dokploy/__test__/lib/id-format.test.ts | 19 +++++++++++++++++++ apps/dokploy/package.json | 2 +- bun.lock | 8 +++++--- packages/server/package.json | 2 +- 4 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 apps/dokploy/__test__/lib/id-format.test.ts diff --git a/apps/dokploy/__test__/lib/id-format.test.ts b/apps/dokploy/__test__/lib/id-format.test.ts new file mode 100644 index 00000000000..216d76381d3 --- /dev/null +++ b/apps/dokploy/__test__/lib/id-format.test.ts @@ -0,0 +1,19 @@ +import { generateAppName } from "@dokploy/server/db/schema/utils"; +import { nanoid } from "nanoid"; +import { describe, expect, it } from "vitest"; + +describe("id format", () => { + it("nanoid returns 21 url-safe characters", () => { + for (let i = 0; i < 100; i++) { + expect(nanoid()).toMatch(/^[A-Za-z0-9_-]{21}$/); + } + }); + + it("generateAppName ends with a 6-character lowercase suffix", () => { + for (let i = 0; i < 100; i++) { + const appName = generateAppName("app"); + expect(appName.startsWith("app-")).toBe(true); + expect(appName).toMatch(/-[a-z1-9]{6}$/); + } + }); +}); diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index 8380a9ffc31..74c6ae5d633 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -113,7 +113,7 @@ "lodash": "4.18.1", "lucide-react": "^1.61.0", "micromatch": "4.0.8", - "nanoid": "3.3.20", + "nanoid": "6.0.2", "next": "16.4.3", "next-themes": "^0.4.6", "nextjs-toploader": "^3.9.17", diff --git a/bun.lock b/bun.lock index 8a375859a4b..91bbfe70ddb 100644 --- a/bun.lock +++ b/bun.lock @@ -113,7 +113,7 @@ "lodash": "4.18.1", "lucide-react": "^1.61.0", "micromatch": "4.0.8", - "nanoid": "3.3.20", + "nanoid": "6.0.2", "next": "16.4.3", "next-themes": "^0.4.6", "nextjs-toploader": "^3.9.17", @@ -255,7 +255,7 @@ "drizzle-zod": "0.8.3", "lodash": "4.18.1", "micromatch": "4.0.8", - "nanoid": "3.3.20", + "nanoid": "6.0.2", "node-os-utils": "2.0.5", "node-pty": "1.1.0", "node-schedule": "2.1.1", @@ -2610,7 +2610,7 @@ "nan": ["nan@2.30.0", "", {}, "sha512-P5mokDkSvCGBz6mZDD/2l+w9QoICRXdCyZ9ONGmTePr40oihJg3Kpn0YU3twKd6PJnwSlLBWNQeOT6yWEV2c4A=="], - "nanoid": ["nanoid@3.3.20", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ=="], + "nanoid": ["nanoid@6.0.2", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-hIvVOb9Qr1p/9CNNLOe0OlWvgx/ziTsVwKN/GDSsuArN2K0wDiafP3s0SWmsm7o2BdnyS8Z9Z64NFBUbn6ziBg=="], "nanostores": ["nanostores@1.5.5", "", {}, "sha512-FixtE239Gl6Gz0ZGCK0WzvNwObNCIwVT+L7zQcf1QgcA6AzBxblzqe9OT88qiucNkhsjSOqiogSaF5jVbJiqSA=="], @@ -3648,6 +3648,8 @@ "pkg-up/find-up": ["find-up@3.0.0", "", { "dependencies": { "locate-path": "^3.0.0" } }, "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="], + "postcss/nanoid": ["nanoid@3.3.20", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ=="], + "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], "raw-body/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], diff --git a/packages/server/package.json b/packages/server/package.json index c1f3c34d547..d8fb385c209 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -77,7 +77,7 @@ "drizzle-zod": "0.8.3", "lodash": "4.18.1", "micromatch": "4.0.8", - "nanoid": "3.3.20", + "nanoid": "6.0.2", "node-os-utils": "2.0.5", "node-pty": "1.1.0", "node-schedule": "2.1.1",