/**
 * SPDX-PackageName: kwaeri/node-kit-project-generator
 * SPDX-PackageVersion: 0.9.0
 * SPDX-FileCopyrightText: © 2014 - 2022 Richard Winters <kirvedx@gmail.com> and contributors
 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR MIT
 */
import { NodeKitOptions } from '@kwaeri/standards-types';
import { ServiceProviderSubscriptions, ServiceProviderHelpText, ServiceEventBits, ServicePromiseBits } from '@kwaeri/service';
import { GeneratorServiceProvider } from '@kwaeri/generator';
/**
 * @typedef {Object} AssessmentOptions
 * @param {string} type
 * @param {string} path
 * @param {string} host
 * @param {string} cachePath
 * @param {string} metadataPath
 * @param {string} latestCommitsQuery
 */
export type AssessmentOptions = {
    type: string;
    path: string;
    host: string;
    cachePath: string;
    metadataPath: string;
    latestCommitsQuery: string;
};
/**
 * @typedef {Object} AssessmentBits
 * @param {boolean} cacheValidated
 * @param {boolean} remoteValidated
 * @param {boolean} deferToCache
 * @param {GitLabCommitBits} commit
 * @param {GitLabCommitBits} localCommit
 */
export type AssessmentBits = {
    cacheValidated: boolean;
    remoteValidated: boolean;
    deferToCache: boolean;
    preferRemote: boolean;
    commit: GitLabCommitBits | undefined;
    localCommit: GitLabCommitBits | undefined;
};
/**
 * @typedef {Object} GitLabCommitBits
 * @param {string} id
 */
export type GitLabCommitBits = {
    id: string;
};
export declare const PARAMATERIZATION: {
    TYPE: {
        rest: string;
        react: string;
        mvc: string;
        xrm: string;
        typescript: string;
        javascript: string;
    };
};
export declare const TEMPLATE_CONSTANT_OPTIONS: {
    REST_PROJECT: {
        JAVASCRIPT: number;
        TYPESCRIPT: number;
    };
    REACT_PROJECT: {
        JAVASCRIPT: number;
        TYPESCRIPT: number;
    };
    MVC_PROJECT: {
        JAVASCRIPT: number;
        TYPESCRIPT: number;
    };
};
export declare const TEMPLATE_CONSTANTS: {
    REST_PROJECT: {
        JAVASCRIPT: number;
        TYPESCRIPT: number;
    };
    REACT_PROJECT: {
        JAVASCRIPT: number;
        TYPESCRIPT: number;
    };
    MVC_PROJECT: {
        JAVASCRIPT: number;
        TYPESCRIPT: number;
    };
    XRM_PROJECT: number;
};
export type ProjectGeneratorOptions = {
    type: string;
    language: string;
    path: string;
};
/**
 * ProjectGenerator
 *
 * Extends the {@link GeneratorServiceProvider } class, which implements the { BaseGenerator }
 * Interface.
 */
export declare class NodeKitProjectGenerator extends GeneratorServiceProvider {
    /**
     * Class constructor
     */
    constructor(handler?: (data: ServiceEventBits) => void, configuration?: NodeKitOptions);
    getServiceProviderSubscriptions(options?: any): ServiceProviderSubscriptions;
    getServiceProviderSubscriptionHelpText<T extends ServiceProviderHelpText>(options?: any): T;
    /**
     * Method to resettle the { NodeKitProjectGeneratorOptions }. Essentially we
     * begin to populate the project configuration with what information we can
     * from the user's command. We can [will] also launch the wizard from here.
     *
     * @param { NodeKitOptions } options
     *
     * @returns { NodeKitOptions } The options object, with the configuration partially populated with user-provided information
     */
    assembleOptions(options: NodeKitOptions): NodeKitOptions;
    renderService<T>(options: NodeKitOptions): Promise<T>;
    /**
     * Method to generate a project infrastructure fed by a repository tree.
     *
     * If a cached source of the requested resource exists locally, and its commit
     * id matches the latest commit id for its respective remote, this method
     * prefers the local cache. If a cached source exists locally and any error
     * occurs when an attempt to fetch its remote occurs, this method defers to
     * the local cache. In any other case, the remote resource is preferred.
     *
     * @param { Object } options The options required for generating a project infrastructure (i.e. type and path)
     *
     * @returns { Promise<FilesystemPromise|ClientHttp2Promise> }
     */
    createProject(options: ProjectGeneratorOptions): Promise<ServicePromiseBits>;
    /**
     * Method to determine whether to prefer or defer to cache - or to prefer remote
     * sources.
     *
     * @param { ...AssessmentOptions } options
     *
     * @returns {AssessmentBits} An {@link AssessmentBits} object.
     */
    assessRoute(options: AssessmentOptions): Promise<AssessmentBits>;
    /**
     * Method to fetch project sources from local cache
     *
     * @param { string } type
     * @param { string } path
     * @param { string } cachePath
     * @param { GitLabCommitBits } localCommit
     * @returns { ServicePromiseBits }
     */
    fetchFromCache(type: string, path: string, cachePath: string, localCommit: GitLabCommitBits): Promise<ServicePromiseBits>;
    /**
     * Method to fetch project sources from a remote resource
     *
     * @param { string } type
     * @param { string } path
     * @param { string } host
     * @param { string } baseTreeQuery
     * @param { string } baseFilesQuery
     * @param { string } cachePath
     * @param { GitLabCommitBits } commit
     * @returns { ServicePromiseBits }
     */
    fetchFromRemote(type: string, path: string, host: string, baseTreeQuery: string, baseFilesQuery: string, cachePath: string, metadataPath: string, commit: GitLabCommitBits): Promise<ServicePromiseBits>;
}
