import assert from 'assert' import { BaseRecord, RecordId } from '../BaseRecord' import { createRecordType } from '../RecordType' import { StoreSchema } from '../StoreSchema' /** A user of tldraw */ interface User extends BaseRecord<'user', RecordId> { name: string } const User = createRecordType('user', { validator: { validate: (record) => { assert( record && typeof record === 'object' && 'name' in record && typeof record.name === 'string' ) return record as User }, }, scope: 'document', }) interface Shape extends BaseRecord<'shape', RecordId>> { type: string x: number y: number props: Props } interface RectangleProps { width: number height: number opactiy: number } interface OvalProps { radius: number borderStyle: 'solid' | 'dashed' } const Shape = createRecordType>('shape', { validator: { validate: (record) => { assert( record && typeof record === 'object' && 'type' in record && typeof record.type === 'string' && 'x' in record && typeof record.x === 'number' && 'y' in record && typeof record.y === 'number' && 'props' in record && typeof record.props === 'object' ) return record as Shape }, }, scope: 'document', }) // this interface only exists to be removed interface Org extends BaseRecord<'org', RecordId> { name: string } const Org = createRecordType('org', { validator: { validate: (record) => { assert( record && typeof record === 'object' && 'name' in record && typeof record.name === 'string' ) return record as Org }, }, scope: 'document', }) export const testSchemaV0 = StoreSchema.create({ user: User, shape: Shape, org: Org, })