Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
exotic / src / mobx / typings.ts
Size: Mime:
export interface IObservableArray<T = any> extends Array<T> {
  spliceWithArray(index: number, deleteCount?: number, newItems?: T[]): T[]
  observe(
    listener: (changeData: IArrayChange<T> | IArraySplice<T>) => void,
    fireImmediately?: boolean
  ): Lambda
  intercept(
    handler: IInterceptor<IArrayWillChange<T> | IArrayWillSplice<T>>
  ): Lambda
  clear(): T[]
  replace(newItems: T[]): T[]
  remove(value: T): boolean
}

// https://github.com/mobxjs/mobx/blob/7f57ad4d1eb6d12d389cb27402e21afe9b5edc62/src/utils/utils.ts#L19
export interface Lambda {
  (): void
  name?: string
}

// https://github.com/mobxjs/mobx/blob/7f57ad4d1eb6d12d389cb27402e21afe9b5edc62/src/types/intercept-utils.ts
export type IInterceptor<T> = (change: T) => T | null

export interface IInterceptable<T> {
  interceptors: IInterceptor<T>[] | undefined
  intercept(handler: IInterceptor<T>): Lambda
}

export function hasInterceptors(interceptable: IInterceptable<any>) {
  return (
    interceptable.interceptors !== undefined &&
    interceptable.interceptors.length > 0
  )
}

// In 3.0, change to IArrayDidChange
export interface IArrayChange<T = any> {
  type: 'update'
  object: IObservableArray<T>
  index: number
  newValue: T
  oldValue: T
}

// In 3.0, change to IArrayDidSplice
export interface IArraySplice<T = any> {
  type: 'splice'
  object: IObservableArray<T>
  index: number
  added: T[]
  addedCount: number
  removed: T[]
  removedCount: number
}

export interface IArrayWillChange<T = any> {
  type: 'update'
  object: IObservableArray<T>
  index: number
  newValue: T
}

export interface IArrayWillSplice<T = any> {
  type: 'splice'
  object: IObservableArray<T>
  index: number
  added: T[]
  removedCount: number
}

export interface IObservableObject {
  'observable-object': IObservableObject
}

// export interface IAtom extends IObservable {
//   reportObserved()
//   reportChanged()
// }

export type IObjectDidChange =
  | {
      name: string
      object: any
      type: 'add'
      newValue: any
    }
  | {
      name: string
      object: any
      type: 'update'
      oldValue: any
      newValue: any
    }
  | {
      name: string
      object: any
      type: 'remove'
      oldValue: any
    }

export type IObjectWillChange =
  | {
      object: any
      type: 'update' | 'add'
      name: string
      newValue: any
    }
  | {
      object: any
      type: 'remove'
      name: string
    }