interface Ignore {
  /**
   * Adds a rule rules to the current manager.
   * @param  {string | Ignore} pattern
   * @returns IgnoreBase
   */
  add(pattern: string | Ignore): Ignore
  /**
   * Adds several rules to the current manager.
   * @param  {string[]} patterns
   * @returns IgnoreBase
   */
  add(patterns: (string | Ignore)[]): Ignore

  /**
   * Filters the given array of pathnames, and returns the filtered array.
   * NOTICE that each path here should be a relative path to the root of your repository.
   * @param paths the array of paths to be filtered.
   * @returns The filtered array of paths
   */
  filter(paths: string[]): string[]
  /**
   * Creates a filter function which could filter
   * an array of paths with Array.prototype.filter.
   */
  createFilter(): (path: string) => boolean

  /**
   * Returns Boolean whether pathname should be ignored.
   * @param  {string} pathname a path to check
   * @returns boolean
   */
  ignores(pathname: string): boolean
}

interface Options {
  ignorecase?: boolean
}

/**
 * Creates new ignore manager.
 */
declare function ignore(options?: Options): Ignore

export default ignore
