import AnalyticsTemplateGenerator from '../generators/analyticsTemplateGenerator';
import ApexClassGenerator from '../generators/apexClassGenerator';
import ApexTriggerGenerator from '../generators/apexTriggerGenerator';
import FlexipageGenerator from '../generators/flexipageGenerator';
import LightningAppGenerator from '../generators/lightningAppGenerator';
import LightningComponentGenerator from '../generators/lightningComponentGenerator';
import LightningEventGenerator from '../generators/lightningEventGenerator';
import LightningInterfaceGenerator from '../generators/lightningInterfaceGenerator';
import LightningTestGenerator from '../generators/lightningTestGenerator';
import DigitalExperienceSiteGenerator from '../generators/digitalExperienceSiteGenerator';
import ProjectGenerator from '../generators/projectGenerator';
import StaticResourceGenerator from '../generators/staticResourceGenerator';
import VisualforceComponentGenerator from '../generators/visualforceComponentGenerator';
import VisualforcePageGenerator from '../generators/visualforcePageGenerator';
import UIBundleGenerator from '../generators/uiBundleGenerator';
import { BaseGenerator } from '../generators/baseGenerator';
export type GeneratorClass<TOptions extends TemplateOptions> = new (options: TOptions, context?: GeneratorContext, cwd?: string) => BaseGenerator<TOptions>;
/**
 * Optional context for generators allowing fs and template path injection.
 * When not provided, defaults to Node's fs and __dirname-based template resolution.
 * cwd is owned by TemplateService; pass via constructor param.
 */
export type GeneratorContext = {
    /** Node-fs-compatible object. Defaults to require('node:fs'). Pass memfs for web. */
    readonly fs?: typeof import('node:fs');
    /** Absolute path to built-in templates root. Overrides __dirname-based resolution. */
    readonly templatesRootPath?: string;
};
export type Generators = typeof AnalyticsTemplateGenerator | typeof ApexClassGenerator | typeof ApexTriggerGenerator | typeof FlexipageGenerator | typeof LightningAppGenerator | typeof LightningComponentGenerator | typeof LightningEventGenerator | typeof LightningTestGenerator | typeof LightningInterfaceGenerator | typeof DigitalExperienceSiteGenerator | typeof ProjectGenerator | typeof StaticResourceGenerator | typeof VisualforceComponentGenerator | typeof VisualforcePageGenerator | typeof UIBundleGenerator;
/**
 * Available Template types
 * Each template type must have a corresponding generator class:
 * - generator class file should locate in generators/
 * - generator class file should default export a generator class extending SfGenerator
 * - generator class file should have a name same as the type name, except with the first letter lowercased
 */
export declare enum TemplateType {
    AnalyticsTemplate = 0,
    ApexClass = 1,
    ApexTrigger = 2,
    Flexipage = 3,
    LightningApp = 4,
    LightningComponent = 5,
    LightningEvent = 6,
    LightningInterface = 7,
    LightningTest = 8,
    DigitalExperienceSite = 9,
    Project = 10,
    VisualforceComponent = 11,
    VisualforcePage = 12,
    StaticResource = 13,
    UIBundle = 14
}
export declare const generators: Map<TemplateType, GeneratorClass<any>>;
export type CreateOutput = {
    outputDir: string;
    created: string[];
    rawOutput: string;
};
/**
 * Template Options
 * If not supplied, the apiversion and outputdir use default values.
 */
export interface TemplateOptions {
    apiversion?: string;
    outputdir?: string;
}
export interface AnalyticsTemplateOptions extends TemplateOptions {
    templatename: string;
}
export interface ApexClassOptions extends TemplateOptions {
    template: 'DefaultApexClass' | 'BasicUnitTest' | 'ApexUnitTest' | 'ApexException' | 'InboundEmailService';
    classname: string;
}
type ApexTriggerEvent = 'before insert' | 'before update' | 'before delete' | 'after insert' | 'after update' | 'after delete' | 'after undelete';
export interface ApexTriggerOptions extends TemplateOptions {
    triggername: string;
    triggerevents: ApexTriggerEvent[];
    sobject: string;
    template: 'ApexTrigger';
}
export interface LightningAppOptions extends TemplateOptions {
    appname: string;
    template: 'DefaultLightningApp';
    internal: boolean;
}
export interface LightningComponentOptions extends TemplateOptions {
    componentname: string;
    template: 'default' | 'analyticsDashboard' | 'analyticsDashboardWithStep' | 'typeScript';
    type: 'aura' | 'lwc';
    internal: boolean;
}
export interface LightningEventOptions extends TemplateOptions {
    eventname: string;
    template: 'DefaultLightningEvt';
    internal: boolean;
}
export interface LightningInterfaceOptions extends TemplateOptions {
    interfacename: string;
    template: 'DefaultLightningIntf';
    internal: boolean;
}
export interface LightningTestOptions extends TemplateOptions {
    template: 'DefaultLightningTest';
    testname: string;
    internal: boolean;
}
export interface ProjectOptions extends TemplateOptions {
    projectname: string;
    defaultpackagedir: string;
    /**
     * namespace
     * Note that namespace is a reserved keyword for yeoman generator
     */
    ns: string;
    template: 'standard' | 'empty' | 'analytics' | 'reactinternalapp' | 'reactexternalapp' | 'agent' | 'nativemobile';
    manifest: boolean;
    loginurl: string;
    lwcLanguage?: 'javascript' | 'typescript';
}
export interface VisualforceComponentOptions extends TemplateOptions {
    componentname: string;
    label: string;
    template: 'DefaultVFComponent';
}
export interface VisualforcePageOptions extends TemplateOptions {
    pagename: string;
    label: string;
    template: 'DefaultVFPage';
}
export interface StaticResourceOptions extends TemplateOptions {
    resourcename: string;
    contenttype: string;
    template: 'empty';
}
export interface UIBundleOptions extends TemplateOptions {
    bundlename: string;
    template: string;
    masterlabel?: string;
    internal?: boolean;
}
export interface FlexipageOptions extends TemplateOptions {
    flexipagename: string;
    template: 'RecordPage' | 'AppPage' | 'HomePage';
    flexipageTemplatesGitRepo?: string;
    forceLoadingRemoteRepo?: boolean;
    masterlabel?: string;
    description?: string;
    internal?: boolean;
    entityName?: string;
    primaryField?: string;
    secondaryFields?: string[];
    detailFields?: string[];
}
export interface DigitalExperienceSiteOptions extends TemplateOptions {
    template: string;
    sitename: string;
    urlpathprefix: string;
    adminemail: string;
}
export {};
