diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-04-22 02:41:18 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-04-22 02:41:18 +0200 |
| commit | f5f31b43df9ef46f1afdd63ba759b2f9bd80e7a3 (patch) | |
| tree | 779132620064669a21c5fd9a787ba28187c0384e /apps/web/src/services/storage/migrations/transformers/v26-to-v27.ts | |
| parent | a709af0059dae4702b52197f34af85a817c59a6a (diff) | |
| download | opencut-f5f31b43df9ef46f1afdd63ba759b2f9bd80e7a3.tar.gz | |
refactor: migration run() and pure v1-to-v2 transform
Diffstat (limited to 'apps/web/src/services/storage/migrations/transformers/v26-to-v27.ts')
| -rw-r--r-- | apps/web/src/services/storage/migrations/transformers/v26-to-v27.ts | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/apps/web/src/services/storage/migrations/transformers/v26-to-v27.ts b/apps/web/src/services/storage/migrations/transformers/v26-to-v27.ts index 820b0087..3b118ee7 100644 --- a/apps/web/src/services/storage/migrations/transformers/v26-to-v27.ts +++ b/apps/web/src/services/storage/migrations/transformers/v26-to-v27.ts @@ -1,7 +1,50 @@ -import { parseCustomMaskPath } from "@/masks/custom-path"; import type { MigrationResult, ProjectRecord } from "./types"; import { getProjectId, isRecord } from "./utils"; +interface CustomMaskPathPoint { + id: string; + x: number; + y: number; + inX: number; + inY: number; + outX: number; + outY: number; +} + +function isCustomMaskPathPoint(value: unknown): value is CustomMaskPathPoint { + if (!value || typeof value !== "object") { + return false; + } + + const candidate = value as Record<string, unknown>; + return ( + typeof candidate.id === "string" && + typeof candidate.x === "number" && + typeof candidate.y === "number" && + typeof candidate.inX === "number" && + typeof candidate.inY === "number" && + typeof candidate.outX === "number" && + typeof candidate.outY === "number" + ); +} + +function parseCustomMaskPath({ + path, +}: { + path: string; +}): CustomMaskPathPoint[] { + if (!path) { + return []; + } + + try { + const parsed = JSON.parse(path); + return Array.isArray(parsed) ? parsed.filter(isCustomMaskPathPoint) : []; + } catch { + return []; + } +} + export function transformProjectV26ToV27({ project, }: { |
