import { BaseRecord, createRecordType, defineMigrations, RecordId } from '@bigbluebutton/store' import { JsonObject } from '@bigbluebutton/utils' import { T } from '@bigbluebutton/validate' import { idValidator } from '../misc/id-validator' /** * A camera record. * * @public */ export interface TLCamera extends BaseRecord<'camera', TLCameraId> { x: number y: number z: number meta: JsonObject } /** * The id of a camera record. * * @public */ export type TLCameraId = RecordId /** @internal */ export const cameraValidator: T.Validator = T.model( 'camera', T.object({ typeName: T.literal('camera'), id: idValidator('camera'), x: T.number, y: T.number, z: T.number, meta: T.jsonValue as T.ObjectValidator, }) ) /** @internal */ export const cameraVersions = { AddMeta: 1, } /** @internal */ export const cameraMigrations = defineMigrations({ currentVersion: cameraVersions.AddMeta, migrators: { [cameraVersions.AddMeta]: { up: (record) => { return { ...record, meta: {}, } }, down: ({ meta: _, ...record }) => { return { ...record, } }, }, }, }) /** @public */ export const CameraRecordType = createRecordType('camera', { validator: cameraValidator, migrations: cameraMigrations, scope: 'session', }).withDefaultProperties( (): Omit => ({ x: 0, y: 0, z: 1, meta: {}, }) )