summaryrefslogtreecommitdiff
path: root/apps/web/src/services/storage/migrations/transformers
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-02-05 12:53:56 +0100
committerMaze Winther <mazewinther@gmail.com>2026-02-05 12:53:56 +0100
commit2257ca2e6f9f8834880ea9bab4355c168ee6c33b (patch)
treef2ead774beda94d95fb771bc3eb16972fb08468a /apps/web/src/services/storage/migrations/transformers
parent490fc170c0705703728a889cbc35a04ca41ae7eb (diff)
downloadopencut-2257ca2e6f9f8834880ea9bab4355c168ee6c33b.tar.gz
make storage versioning per-project + few other refactors
Diffstat (limited to 'apps/web/src/services/storage/migrations/transformers')
-rw-r--r--apps/web/src/services/storage/migrations/transformers/utils.ts28
-rw-r--r--apps/web/src/services/storage/migrations/transformers/v0-to-v1.ts28
-rw-r--r--apps/web/src/services/storage/migrations/transformers/v1-to-v2.ts38
-rw-r--r--apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts28
4 files changed, 35 insertions, 87 deletions
diff --git a/apps/web/src/services/storage/migrations/transformers/utils.ts b/apps/web/src/services/storage/migrations/transformers/utils.ts
new file mode 100644
index 00000000..108489bf
--- /dev/null
+++ b/apps/web/src/services/storage/migrations/transformers/utils.ts
@@ -0,0 +1,28 @@
+import type { ProjectRecord } from "./types";
+
+export function isRecord(value: unknown): value is ProjectRecord {
+ return typeof value === "object" && value !== null;
+}
+
+export function getProjectId({
+ project,
+}: {
+ project: ProjectRecord;
+}): string | null {
+ const idValue = project.id;
+ if (typeof idValue === "string" && idValue.length > 0) {
+ return idValue;
+ }
+
+ const metadataValue = project.metadata;
+ if (!isRecord(metadataValue)) {
+ return null;
+ }
+
+ const metadataId = metadataValue.id;
+ if (typeof metadataId === "string" && metadataId.length > 0) {
+ return metadataId;
+ }
+
+ return null;
+}
diff --git a/apps/web/src/services/storage/migrations/transformers/v0-to-v1.ts b/apps/web/src/services/storage/migrations/transformers/v0-to-v1.ts
index a2350acb..e8183297 100644
--- a/apps/web/src/services/storage/migrations/transformers/v0-to-v1.ts
+++ b/apps/web/src/services/storage/migrations/transformers/v0-to-v1.ts
@@ -1,6 +1,7 @@
import { generateUUID } from "@/utils/id";
import type { SerializedScene } from "@/services/storage/types";
import type { MigrationResult, ProjectRecord } from "./types";
+import { getProjectId, isRecord } from "./utils";
export interface TransformV0ToV1Options {
now?: Date;
@@ -54,29 +55,4 @@ export function transformProjectV0ToV1({
return { project: updatedProject, skipped: false };
}
-export function getProjectId({
- project,
-}: {
- project: ProjectRecord;
-}): string | null {
- const idValue = project.id;
- if (typeof idValue === "string" && idValue.length > 0) {
- return idValue;
- }
-
- const metadataValue = project.metadata;
- if (!isRecord(metadataValue)) {
- return null;
- }
-
- const metadataId = metadataValue.id;
- if (typeof metadataId === "string" && metadataId.length > 0) {
- return metadataId;
- }
-
- return null;
-}
-
-function isRecord(value: unknown): value is ProjectRecord {
- return typeof value === "object" && value !== null;
-}
+export { getProjectId } from "./utils";
diff --git a/apps/web/src/services/storage/migrations/transformers/v1-to-v2.ts b/apps/web/src/services/storage/migrations/transformers/v1-to-v2.ts
index b4ed5a9f..0e5ffbf7 100644
--- a/apps/web/src/services/storage/migrations/transformers/v1-to-v2.ts
+++ b/apps/web/src/services/storage/migrations/transformers/v1-to-v2.ts
@@ -15,6 +15,7 @@ import type {
VideoElement,
} from "@/types/timeline";
import type { MigrationResult, ProjectRecord } from "./types";
+import { getProjectId, isRecord } from "./utils";
interface LegacyTimelineData {
tracks: unknown[];
@@ -51,10 +52,8 @@ interface LegacyMediaTrack {
export interface TransformV1ToV2Options {
loadMediaAsset?: ({
- projectId,
mediaId,
}: {
- projectId: string;
mediaId: string;
}) => Promise<MediaAssetData | null>;
}
@@ -91,10 +90,8 @@ async function migrateProject({
project: ProjectRecord;
projectId: string;
loadMediaAsset?: ({
- projectId,
mediaId,
}: {
- projectId: string;
mediaId: string;
}) => Promise<MediaAssetData | null>;
}): Promise<ProjectRecord> {
@@ -261,10 +258,8 @@ async function transformTracks({
tracks: unknown[];
projectId: string;
loadMediaAsset?: ({
- projectId,
mediaId,
}: {
- projectId: string;
mediaId: string;
}) => Promise<MediaAssetData | null>;
}): Promise<TimelineTrack[]> {
@@ -318,10 +313,8 @@ async function transformMediaTrack({
track: LegacyMediaTrack;
projectId: string;
loadMediaAsset?: ({
- projectId,
mediaId,
}: {
- projectId: string;
mediaId: string;
}) => Promise<MediaAssetData | null>;
isMain: boolean;
@@ -342,7 +335,7 @@ async function transformMediaTrack({
let mediaType: "video" | "image" = "video";
if (loadMediaAsset) {
- const mediaAsset = await loadMediaAsset({ projectId, mediaId });
+ const mediaAsset = await loadMediaAsset({ mediaId });
if (mediaAsset) {
mediaType = mediaAsset.type === "image" ? "image" : "video";
}
@@ -543,28 +536,7 @@ function transformAudioTrack({
};
}
-export function getProjectId({
- project,
-}: {
- project: ProjectRecord;
-}): string | null {
- const idValue = project.id;
- if (typeof idValue === "string" && idValue.length > 0) {
- return idValue;
- }
-
- const metadataValue = project.metadata;
- if (!isRecord(metadataValue)) {
- return null;
- }
-
- const metadataId = metadataValue.id;
- if (typeof metadataId === "string" && metadataId.length > 0) {
- return metadataId;
- }
-
- return null;
-}
+export { getProjectId } from "./utils";
function getCurrentSceneId({
value,
@@ -772,7 +744,3 @@ function isV2Project({ project }: { project: ProjectRecord }): boolean {
return isRecord(project.metadata) && isRecord(project.settings);
}
-
-function isRecord(value: unknown): value is ProjectRecord {
- return typeof value === "object" && value !== null;
-}
diff --git a/apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts b/apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts
index 33656109..094b8bd8 100644
--- a/apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts
+++ b/apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts
@@ -1,6 +1,7 @@
import { getProjectDurationFromScenes } from "@/lib/scenes";
import type { TScene } from "@/types/timeline";
import type { MigrationResult, ProjectRecord } from "./types";
+import { getProjectId, isRecord } from "./utils";
export function transformProjectV2ToV3({
project,
@@ -33,28 +34,7 @@ export function transformProjectV2ToV3({
return { project: migratedProject, skipped: false };
}
-export function getProjectId({
- project,
-}: {
- project: ProjectRecord;
-}): string | null {
- const idValue = project.id;
- if (typeof idValue === "string" && idValue.length > 0) {
- return idValue;
- }
-
- const metadataValue = project.metadata;
- if (!isRecord(metadataValue)) {
- return null;
- }
-
- const metadataId = metadataValue.id;
- if (typeof metadataId === "string" && metadataId.length > 0) {
- return metadataId;
- }
-
- return null;
-}
+export { getProjectId } from "./utils";
function getScenes({ project }: { project: ProjectRecord }): TScene[] {
const scenesValue = project.scenes;
@@ -75,7 +55,3 @@ function isV3Project({ project }: { project: ProjectRecord }): boolean {
isRecord(project.metadata) && typeof project.metadata.duration === "number"
);
}
-
-function isRecord(value: unknown): value is ProjectRecord {
- return typeof value === "object" && value !== null;
-}