declare module "md5-jkmyers" {
  function md5(digest:string): string;
  export = md5;
}

declare module "observable-slim" {
  namespace ObservableSlim {
    export type ChangeType = "add"|"update"|"delete";

    export type Change<T extends {}, K extends keyof T = keyof T> = {
      type: ChangeType,
      target:T,
      property: K,
      newValue: T[K]|null,
      previousValue?: T[K],
      currentPath: string,
      jsonPointer: string,
      proxy:T
    }

    export function create<T extends {}>(target:T, domDelay:boolean, observer:(changes:Change<T, keyof T>[]) => unknown):T;
  }

  export default ObservableSlim;
}
