import { createMigrationIds, createRecordMigrationSequence, createRecordType, RecordId, } from '@tldraw/store' import { T } from '@tldraw/validate' import { TLBaseAsset } from '../assets/TLBaseAsset' import { bookmarkAssetValidator, TLBookmarkAsset } from '../assets/TLBookmarkAsset' import { imageAssetValidator, TLImageAsset } from '../assets/TLImageAsset' import { TLVideoAsset, videoAssetValidator } from '../assets/TLVideoAsset' import { TLShape } from './TLShape' /** @public */ export type TLAsset = TLImageAsset | TLVideoAsset | TLBookmarkAsset /** @internal */ export const assetValidator: T.Validator = T.model( 'asset', T.union('type', { image: imageAssetValidator, video: videoAssetValidator, bookmark: bookmarkAssetValidator, }) ) /** @internal */ export const assetVersions = createMigrationIds('com.tldraw.asset', { AddMeta: 1, } as const) /** @internal */ export const assetMigrations = createRecordMigrationSequence({ sequenceId: 'com.tldraw.asset', recordType: 'asset', sequence: [ { id: assetVersions.AddMeta, up: (record) => { ;(record as any).meta = {} }, }, ], }) /** @public */ export type TLAssetPartial = T extends T ? { id: TLAssetId type: T['type'] props?: Partial meta?: Partial } & Partial> : never /** @public */ export const AssetRecordType = createRecordType('asset', { validator: assetValidator, scope: 'document', }).withDefaultProperties(() => ({ meta: {}, })) /** @public */ export type TLAssetId = RecordId> /** @public */ export type TLAssetShape = Extract