import { BaseRecord, createMigrationIds, createRecordMigrationSequence, createRecordType, RecordId, } from '@tldraw/store' import { IndexKey, JsonObject } from '@tldraw/utils' import { T } from '@tldraw/validate' import { idValidator } from '../misc/id-validator' /** * TLPage * * @public */ export interface TLPage extends BaseRecord<'page', TLPageId> { name: string index: IndexKey meta: JsonObject } /** @public */ export type TLPageId = RecordId /** @internal */ export const pageIdValidator = idValidator('page') /** @internal */ export const pageValidator: T.Validator = T.model( 'page', T.object({ typeName: T.literal('page'), id: pageIdValidator, name: T.string, index: T.indexKey, meta: T.jsonValue as T.ObjectValidator, }) ) /** @internal */ export const pageVersions = createMigrationIds('com.tldraw.page', { AddMeta: 1, }) /** @internal */ export const pageMigrations = createRecordMigrationSequence({ sequenceId: 'com.tldraw.page', recordType: 'page', sequence: [ { id: pageVersions.AddMeta, up: (record: any) => { record.meta = {} }, }, ], }) /** @public */ export const PageRecordType = createRecordType('page', { validator: pageValidator, scope: 'document', }).withDefaultProperties(() => ({ meta: {}, })) /** @public */ export function isPageId(id: string): id is TLPageId { return PageRecordType.isId(id) }