// Type definitions for normalize-package-data 2.4
// Project: https://github.com/npm/normalize-package-data#readme
// Definitions by: Jeff Dickey <https://github.com/jdxcode>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped

export = normalize;

declare function normalize(data: normalize.Input, warn?: normalize.WarnFn, strict?: boolean): void;
declare function normalize(data: normalize.Input, strict?: boolean): void;

declare namespace normalize {
    type WarnFn = (msg: string) => void;
    interface Input {[k: string]: any; }

    interface Person {
        name?: string | undefined;
        email?: string | undefined;
        url?: string | undefined;
    }

    interface Package {
        [k: string]: any;
        name: string;
        version: string;
        files?: string[] | undefined;
        bin?: {[k: string]: string } | undefined;
        man?: string[] | undefined;
        keywords?: string[] | undefined;
        author?: Person | undefined;
        maintainers?: Person[] | undefined;
        contributors?: Person[] | undefined;
        bundleDependencies?: {[name: string]: string; } | undefined;
        dependencies?: {[name: string]: string; } | undefined;
        devDependencies?: {[name: string]: string; } | undefined;
        optionalDependencies?: {[name: string]: string; } | undefined;
        description?: string | undefined;
        engines?: {[type: string]: string } | undefined;
        license?: string | undefined;
        repository?: { type: string, url: string } | undefined;
        bugs?: { url: string, email?: string | undefined } | { url?: string | undefined, email: string } | undefined;
        homepage?: string | undefined;
        scripts?: {[k: string]: string} | undefined;
        readme: string;
        _id: string;
    }
}
