Media

MediaPlugin.

interface Media 
extends Propertied, StoredMediaProperties {
  accountId: string
  api: () => Promise<DataOrError<Api>>
  asStored: unknown
  boolean: (key: string) => boolean
  cacheMedia: (args: MediaCacheArgs) => Promise<DataOrError<number>>
  canBeMuted: boolean
  changeObject: (propertyId: SignalId, scalar?: Scalar) => ChangeEditObject
  changeScalars: (scalars: ScalarsById) => void
  changesObject: (scalars: ScalarsById) => ChangePropertiesEditObject
  clipObject: (object?: InstanceObject) => ClipObject
  constrainedValue: (found: Property, value?: Scalar) => Scalar | undefined
  createdAt?: number
  deletedAt?: number
  duration: number
  fetchResource: (resource: Resource) => Promise<DataOrError<true>>
  findResource: (types: Strings) => Resource | undefined
  frames: (quantize: number) => number
  hasIntrinsicSizing?: boolean
  hasIntrinsicTiming?: boolean
  host: Plugins
  id: string
  instanceArgs: (object?: InstanceObject) => InstanceArgs
  instanceFromObject: (object?: InstanceObject) => Instance
  label: string
  mediaIds: Strings
  number: (key: string) => number
  properties: Array<Property>
  propertiesOfTarget: (targetId: string) => Array<Property>
  propertyFind: (name: string) => Property | undefined
  propertyIds: (targetId: string) => Array<SignalId>
  resources: Array<Resource>
  scalarsRecord: (idOrNames: Strings) => ScalarRecord
  setValue: (nameOrId: string, scalar?: Scalar, dontConstrain?: boolean) => void
  shouldSelectProperty: (property: Property) => boolean
  source: string
  string: (key: string) => string
  targetId: string
  toJSON: () => unknown
  tweenValues: (key: string, time: Time, range: TimeRange) => Array<Scalar>
  tweens: (key: string) => boolean
  type: string
  unload: () => void
  updatedAt?: number
  userId?: string
  value: (key: string) => Scalar | undefined
}
type MediaContainerFunction = () => Media
type MediaContentFunction = () => Media
type MediaDocumentFunction = () => Document
type MediaElementTuple = ArrayOf2<string, DataOrError<BrowserMediaElement>>
type MediaElementTuplePromise = Promise<MediaElementTuple>
interface MediaFile  {
  asset: Media
  avType?: 'audio' | 'video'
  content?: string
  file: AbsolutePath
  type: MediaFileType
}
type MediaFileType = 'svg' | 'svgs' | 'txt' | FileType
interface MediaFindEventDetail  {
  promise?: Promise<DataOrError<Array<Media>>>
  request: ApiFindRequest
}
type MediaMediaFunction = (args: StoredMedia) => Promise<DataOrError<Media>>
interface MediaOptions  {
  host: Plugins
  media?: Array<StoredMedia>
}
type MediaOrStored = Media | StoredMedia
interface MediaPlugin 
extends Plugable {
  container: MediaContainerFunction
  content: MediaContentFunction
  document: MediaDocumentFunction
  install: function
  map: Map<string, Media>
  media: MediaMediaFunction
}
interface MediaPluginOptions  {
  defaultContainerMedia?: VisibleMedia
  defaultContentMedia?: VisibleMedia
}
type MediaType = 'audio' | 'image' | 'video'
type MediaTypeTuple = ArrayOf2<MediaType, string>
interface Storable 
extends WithType, WithSource {
  createdAt?: number
  id?: string
  source: string
  type: string
  updatedAt?: number
}
interface StorableEncode 
extends StorableResource, EncodeProperties {
  bytes?: number
  createdAt?: number
  decoded?: UnknownRecord
  deletedAt?: number
  error?: NamedError
  extension: string
  id?: string
  request?: EndpointRequest
  source: string
  storedAt?: number
  type: string
  updatedAt?: number
}
/**
 * A plain object representation of
 * MashMedia.
 */
interface StorableMash 
extends StorableMedia, MashProperties {
  accountId?: string
  buffer?: number
  createdAt?: number
  id?: string
  label: string
  resources?: Array<StorableResource>
  source: string
  tracks?: Array<TrackObject>
  type: string
  updatedAt?: number
}
interface StorableMedia 
extends Storable {
  accountId?: string
  createdAt?: number
  id?: string
  label: string
  resources?: Array<StorableResource>
  source: string
  type: string
  updatedAt?: number
}
interface StorableTranscode 
extends StorableResource, TranscodeProperties {
  bytes?: number
  createdAt?: number
  decoded?: UnknownRecord
  deletedAt?: number
  error?: NamedError
  extension: string
  id?: string
  request?: EndpointRequest
  source: string
  storedAt?: number
  type: string
  updatedAt?: number
}
type StoreDeleteFunction = (args: StoreDeleteRequest, opts?: ServerJobOptions) => Promise<DataOrError<Numbers>>
type StoreDirFunction = (args: StoreRequest, opts?: ServerJobOptions) => DataOrError<string>
type StoreFileFunction = (args: StoreRequest, opts?: ServerJobOptions) => DataOrError<string>
type StorePathFunction = (args: StoreRequest, opts?: ServerJobOptions) => DataOrError<string>
interface StorePlugin 
extends Plugable {
  delete: StoreDeleteFunction
  dir: StoreDirFunction
  download: StoreDownloadFunction
  file: StoreFileFunction
  install: function
  path: StorePathFunction
  upload: StoreUploadFunction
}
interface StorePluginOptions  {
  dirFormat?: string
  fileFormat?: string
}
interface Stored 
extends WithId, WithType, WithSource {
  createdAt?: number
  deletedAt?: number
  id: string
  source: string
  type: string
  updatedAt?: number
}
interface StoredDecode 
extends StoredResource, DecodeProperties {
  bytes?: number
  createdAt?: number
  decoded?: UnknownRecord
  deletedAt?: number
  error?: NamedError
  extension: string
  id: string
  request?: EndpointRequest
  source: string
  storedAt?: number
  type: string
  updatedAt?: number
}
interface StoredEncode 
extends StoredResource, EncodeProperties {
  bytes?: number
  createdAt?: number
  decoded?: UnknownRecord
  deletedAt?: number
  error?: NamedError
  extension: string
  id: string
  request?: EndpointRequest
  source: string
  storedAt?: number
  type: string
  updatedAt?: number
}
interface StoredMash 
extends StoredMedia, MashProperties {
  accountId: string
  buffer?: number
  createdAt?: number
  deletedAt?: number
  id: string
  label: string
  resources?: Array<StoredResource>
  source: string
  tracks?: Array<TrackObject>
  type: string
  updatedAt?: number
  userId?: string
}
interface StoredMedia 
extends StoredMediaProperties {
  accountId: string
  createdAt?: number
  deletedAt?: number
  id: string
  label: string
  resources?: Array<StoredResource>
  source: string
  type: string
  updatedAt?: number
  userId?: string
}
interface StoredMediaProperties 
extends Stored {
  accountId: string
  createdAt?: number
  deletedAt?: number
  id: string
  label: string
  source: string
  type: string
  updatedAt?: number
  userId?: string
}
interface StoredTranscode 
extends StoredResource, TranscodeProperties {
  bytes?: number
  createdAt?: number
  decoded?: UnknownRecord
  deletedAt?: number
  error?: NamedError
  extension: string
  id: string
  request?: EndpointRequest
  source: string
  storedAt?: number
  type: string
  updatedAt?: number
}
/** @implements MediaPlugin */
class ClientMediaPluginClass {
  _colorImage: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  _container: () => VisibleMedia
  _content: () => VisibleMedia
  _mash: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  _rawAudio: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  _rawImage: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  _rawVideo: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  _shapeImage: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  _textImage: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  container: MediaContainerFunction
  content: MediaContentFunction
  document: MediaDocumentFunction
  install: function
  map: Map<string, Media>
  media: MediaMediaFunction
}
/** @implements MashMedia */
class MashMediaClass
extends MediaClass {
  accountId: string
  api: () => Promise<DataOrError<Api>>
  asStored: unknown
  boolean: (key: string) => boolean
  cacheMedia: (args: MediaCacheArgs) => Promise<DataOrError<number>>
  canBeMuted: boolean
  changeObject: (propertyId: SignalId, scalar?: Scalar) => ChangeEditObject
  changeScalars: (scalars: ScalarsById) => void
  changesObject: (scalars: ScalarsById) => ChangePropertiesEditObject
  clipInstance: (object: ClipObject) => Clip
  clipObject: (object?: InstanceObject) => ClipObject
  clips: Array<Clip>
  clipsAudibleInTime: (time: Time) => Array<Clip>
  clipsInTimeOfType: (time: Time, avType?: AudibleType) => Array<Clip>
  constrainedValue: (found: Property, value?: Scalar) => Scalar | undefined
  createdAt?: number
  deletedAt?: number
  duration: number
  endTime: Time
  fetchResource: (resource: Resource) => Promise<DataOrError<true>>
  findResource: (types: Strings) => Resource | undefined
  frames: (quantize: number) => number
  hasIntrinsicSizing?: boolean
  hasIntrinsicTiming?: boolean
  host: Plugins
  id: string
  instanceArgs: (object?: InstanceObject) => InstanceArgs
  instanceFromObject: (object?: InstanceObject) => Instance
  label: string
  mediaFromId: (assetId?: string) => Media | undefined
  mediaIds: Strings
  number: (key: string) => number
  properties: Array<Property>
  propertiesOfTarget: (targetId: string) => Array<Property>
  propertyFind: (name: string) => Property | undefined
  propertyIds: (targetId: string) => Array<SignalId>
  resources: Array<Resource>
  scalarsRecord: (idOrNames: Strings) => ScalarRecord
  setValue: (nameOrId: string, scalar?: Scalar, dontConstrain?: boolean) => void
  shouldSelectProperty: (property: Property) => boolean
  size: Size
  source: string
  string: (key: string) => string
  targetId: string
  toJSON: () => unknown
  totalFrames: number
  trackInstance: (args: TrackArgs) => Track
  tracks: Array<Track>
  tweenValues: (key: string, time: Time, range: TimeRange) => Array<Scalar>
  tweens: (key: string) => boolean
  tweensProperty: (key: string) => boolean
  type: string
  unload: () => void
  updatedAt?: number
  userId?: string
  value: (key: string) => Scalar | undefined
}
/** @implements Media */
class MediaClass
extends PropertiedClass {
  accountId: string
  api: () => Promise<DataOrError<Api>>
  asStored: unknown
  boolean: (key: string) => boolean
  cacheMedia: (args: MediaCacheArgs) => Promise<DataOrError<number>>
  canBeMuted: boolean
  changeObject: (propertyId: SignalId, scalar?: Scalar) => ChangeEditObject
  changeScalars: (scalars: ScalarsById) => void
  changesObject: (scalars: ScalarsById) => ChangePropertiesEditObject
  clipObject: (object?: InstanceObject) => ClipObject
  constrainedValue: (found: Property, value?: Scalar) => Scalar | undefined
  createdAt?: number
  deletedAt?: number
  duration: number
  fetchResource: (resource: Resource) => Promise<DataOrError<true>>
  findResource: (types: Strings) => Resource | undefined
  frames: (quantize: number) => number
  hasIntrinsicSizing?: boolean
  hasIntrinsicTiming?: boolean
  host: Plugins
  id: string
  instanceArgs: (object?: InstanceObject) => InstanceArgs
  instanceFromObject: (object?: InstanceObject) => Instance
  label: string
  mediaIds: Strings
  number: (key: string) => number
  properties: Array<Property>
  propertiesOfTarget: (targetId: string) => Array<Property>
  propertyFind: (name: string) => Property | undefined
  propertyIds: (targetId: string) => Array<SignalId>
  resources: Array<Resource>
  scalarsRecord: (idOrNames: Strings) => ScalarRecord
  setValue: (nameOrId: string, scalar?: Scalar, dontConstrain?: boolean) => void
  shouldSelectProperty: (property: Property) => boolean
  source: string
  string: (key: string) => string
  targetId: string
  toJSON: () => unknown
  tweenValues: (key: string, time: Time, range: TimeRange) => Array<Scalar>
  tweens: (key: string) => boolean
  tweensProperty: (key: string) => boolean
  type: string
  unload: () => void
  updatedAt?: number
  userId?: string
  value: (key: string) => Scalar | undefined
}
/** @implements MediaPlugin */
class MediaPluginClass
extends PluginClass {
  container: MediaContainerFunction
  content: MediaContentFunction
  document: MediaDocumentFunction
  install: function
  map: Map<string, Media>
  media: MediaMediaFunction
}
/** @implements MashMedia */
class ServerMashMediaClass {
  accountId: string
  api: () => Promise<DataOrError<Api>>
  asStored: unknown
  boolean: (key: string) => boolean
  cacheMedia: (args: MediaCacheArgs) => Promise<DataOrError<number>>
  canBeMuted: boolean
  changeObject: (propertyId: SignalId, scalar?: Scalar) => ChangeEditObject
  changeScalars: (scalars: ScalarsById) => void
  changesObject: (scalars: ScalarsById) => ChangePropertiesEditObject
  clipInstance: (object: ClipObject) => Clip
  clipObject: (object?: InstanceObject) => ClipObject
  clips: Array<Clip>
  clipsAudibleInTime: (time: Time) => Array<Clip>
  clipsInTimeOfType: (time: Time, avType?: AudibleType) => Array<Clip>
  constrainedValue: (found: Property, value?: Scalar) => Scalar | undefined
  createdAt?: number
  deletedAt?: number
  duration: number
  endTime: Time
  fetchResource: (resource: Resource) => Promise<DataOrError<true>>
  findResource: (types: Strings) => Resource | undefined
  frames: (quantize: number) => number
  hasIntrinsicSizing?: boolean
  hasIntrinsicTiming?: boolean
  host: Plugins
  id: string
  instanceArgs: (object?: InstanceObject) => InstanceArgs
  instanceFromObject: (object?: InstanceObject) => Instance
  label: string
  mediaFromId: (assetId?: string) => Media | undefined
  mediaIds: Strings
  number: (key: string) => number
  properties: Array<Property>
  propertiesOfTarget: (targetId: string) => Array<Property>
  propertyFind: (name: string) => Property | undefined
  propertyIds: (targetId: string) => Array<SignalId>
  resources: Array<Resource>
  scalarsRecord: (idOrNames: Strings) => ScalarRecord
  setValue: (nameOrId: string, scalar?: Scalar, dontConstrain?: boolean) => void
  shouldSelectProperty: (property: Property) => boolean
  size: Size
  source: string
  string: (key: string) => string
  targetId: string
  toJSON: () => unknown
  totalFrames: number
  trackInstance: (args: TrackArgs) => Track
  tracks: Array<Track>
  tweenValues: (key: string, time: Time, range: TimeRange) => Array<Scalar>
  tweens: (key: string) => boolean
  type: string
  unload: () => void
  updatedAt?: number
  userId?: string
  value: (key: string) => Scalar | undefined
}
/** @implements MediaPlugin */
class ServerMediaPluginClass {
  _colorImage: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  _container: () => VisibleMedia
  _content: () => VisibleMedia
  _mash: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  _rawAudio: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  _rawImage: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  _rawVideo: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  _shapeImage: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  _textImage: (media: StoredMedia, opts: ClientJobOptions) => Promise<DataOrError<Media>>
  container: MediaContainerFunction
  content: MediaContentFunction
  document: MediaDocumentFunction
  install: function
  map: Map<string, Media>
  media: MediaMediaFunction
}
/** @implements StorePlugin */
class StorePluginClass
extends PluginClass {
  delete: StoreDeleteFunction
  dir: StoreDirFunction
  download: StoreDownloadFunction
  file: StoreFileFunction
  install: function
  parseVariables: (args: StoreRequest) => StringRecord
  path: StorePathFunction
  upload: StoreUploadFunction
}
function storedFromStorable(
  storableMedia: StorableMedia
): StoredMedia
function storedMashFromMedia(
  stored: StoredMedia, 
  host: Plugins
): Promise<DataOrError<StoredMash>>
const STORABLE_COLOR_IMAGE = {
  type: 'image',
  source: 'color',
  label: 'color'
}
const STORABLE_SHAPE_IMAGE = {
  type: 'image',
  source: 'shape',
  label: 'shape'
}
const STORABLE_TEXT_IMAGE = {
  type: 'image',
  source: 'text',
  label: 'text'
}