import { CoatManifestFile } from "./coat-manifest-file";
import { CoatManifestScript } from "./coat-manifest-script";
import { CoatManifestTask } from "./coat-manifest-tasks";
export interface CoatManifest {
    /**
     * The name of the coat project or template
     */
    name: string;
    /**
     * The names of the coat templates that are extended.
     *
     * The names are used to resolve the template from the node_modules folder
     * and should bear the name of the dependency.
     *
     * It is also possible to reference local coat template files by
     * specifying relative paths, e.g.:
     *
     * "./template-1" -> project-dir/template-1 or project-dir/template-1/index.js
     *
     * In addition to plain strings, extends array entries can also be tuples, where
     * the first entry is the template name or path and the second entry is the config
     * that is passed to the template function, e.g.:
     * ["my-template", { "configValue": true }]
     */
    extends?: string | (string | [string, Record<string, unknown>])[];
    /**
     * Dependencies that should be applied to the root package.json file
     */
    dependencies?: {
        dependencies?: Record<string, string>;
        devDependencies?: Record<string, string>;
        peerDependencies?: Record<string, string>;
        optionalDependencies?: Record<string, string>;
    };
    /**
     * The files that should be generated by coat
     */
    files?: CoatManifestFile[];
    /**
     * Scripts that should be placed in the root package.json file
     */
    scripts?: CoatManifestScript[];
    /**
     * Setup tasks that should be run before the files are generated
     */
    setup?: CoatManifestTask[];
}
export interface CoatManifestStrict extends Required<CoatManifest> {
    extends: Exclude<Required<CoatManifest>["extends"], string>;
    dependencies: Exclude<Required<CoatManifest["dependencies"]>, undefined>;
}
