33 lines
899 B
TypeScript
33 lines
899 B
TypeScript
import { z } from 'zod'
|
|
import { columnSchema, deckSchema, MAX_COLUMNS } from './model'
|
|
|
|
export const LEGACY_STORAGE_KEY = 'twitter-lite-research-deck'
|
|
const legacyColumn = columnSchema
|
|
.omit({ connectionId: true })
|
|
.extend({ profileName: z.string().min(1) })
|
|
const legacyDeck = z
|
|
.object({
|
|
id: deckSchema.shape.id,
|
|
title: deckSchema.shape.title,
|
|
columns: z.array(legacyColumn).max(MAX_COLUMNS),
|
|
})
|
|
.strict()
|
|
.refine(
|
|
(deck) =>
|
|
new Set(deck.columns.map((column) => column.id)).size ===
|
|
deck.columns.length,
|
|
'Column IDs must be unique.',
|
|
)
|
|
export const legacyWorkspaceSchema = z
|
|
.object({
|
|
version: z.literal(2),
|
|
activeDeckId: z.string(),
|
|
decks: z.array(legacyDeck).min(1).max(100),
|
|
})
|
|
.strict()
|
|
.refine(
|
|
(value) =>
|
|
new Set(value.decks.map((deck) => deck.id)).size === value.decks.length,
|
|
'Deck IDs must be unique.',
|
|
)
|