import { Schema, SchemaValues } from '@sprucelabs/schema';
import { SpruceSchemas } from '@sprucelabs/spruce-core-schemas';
import { FileDescription } from '../../types/cli.types';
import AbstractFeature, { FeatureDependency } from '../AbstractFeature';
import { ActionOptions, FeatureCode } from '../features.types';
export default class NodeFeature<S extends OptionsSchema = OptionsSchema> extends AbstractFeature<S> {
    code: FeatureCode;
    nameReadable: string;
    description: string;
    dependencies: FeatureDependency[];
    optionsSchema: S;
    _packageDependencies: {
        name: string;
        isDev: boolean;
    }[];
    scripts: {
        'build.ci': string;
        'build.dev': string;
        'build.copy-files': string;
        'build.resolve-paths': string;
        'build.tsc': string;
        clean: string;
        'clean.all': string;
        'clean.build': string;
        'clean.dependencies': string;
        'fix.lint': string;
        lint: string;
        'lint.tsc': string;
        'post.watch.build': string;
        rebuild: string;
        'update.dependencies': string;
        'resolve-paths.lint': string;
        test: string;
        'watch.build.dev': string;
        'watch.rebuild': string;
        'watch.tsc': string;
    };
    readonly fileDescriptions: FileDescription[];
    actionsDir: string;
    constructor(options: ActionOptions);
    private handleUpgrade;
    beforePackageInstall(options: Options): Promise<{
        files: SpruceSchemas.SpruceCli.v2020_07_22.GeneratedFile[];
        cwd: string;
    }>;
    private resolveDestination;
    afterPackageInstall(options: S extends Schema ? SchemaValues<S> : undefined): Promise<{}>;
    private installScripts;
    isInstalled: () => Promise<boolean>;
}
type OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.NodeFeatureOptionsSchema;
type Options = SpruceSchemas.SpruceCli.v2020_07_22.NodeFeatureOptions;
declare module '../../features/features.types' {
    interface FeatureMap {
        node: NodeFeature;
    }
    interface FeatureOptionsMap {
        node: SchemaValues<OptionsSchema>;
    }
}
export {};
