import type { PersistedOptions } from '../config-file.js';
import type { AddOn, AddOnInfo, Environment } from '../types.js';
export declare const ADD_ON_IGNORE_FILES: Array<string>;
export declare function camelCase(str: string): string;
export declare function templatize(routeCode: string, routeFile: string): {
    url: string;
    code: string;
    name: string;
    jsName: string;
};
export declare function validateAddOnSetup(environment: Environment): Promise<void>;
export declare function readOrGenerateAddOnInfo(options: PersistedOptions): Promise<AddOnInfo>;
export declare function generateProject(persistedOptions: PersistedOptions): Promise<{
    info: {
        type: "add-on" | "example" | "starter" | "toolchain" | "deployment";
        description: string;
        id: string;
        name: string;
        modes: string[];
        phase: "add-on" | "setup";
        command?: {
            command: string;
            args?: string[] | undefined;
        } | undefined;
        options?: Record<string, {
            type: "select";
            options: {
                value: string;
                label: string;
            }[];
            label: string;
            default: string;
            description?: string | undefined;
        }> | undefined;
        default?: boolean | undefined;
        author?: string | undefined;
        version?: string | undefined;
        link?: string | undefined;
        license?: string | undefined;
        warning?: string | undefined;
        tailwind?: boolean | undefined;
        category?: "other" | "tanstack" | "database" | "orm" | "auth" | "deploy" | "styling" | "monitoring" | "cms" | "api" | "analytics" | "i18n" | "tooling" | undefined;
        exclusive?: ("database" | "orm" | "auth" | "deploy" | "linter")[] | undefined;
        color?: string | undefined;
        priority?: number | undefined;
        routes?: {
            path: string;
            jsName: string;
            name?: string | undefined;
            url?: string | undefined;
        }[] | undefined;
        packageAdditions?: {
            dependencies?: Record<string, string> | undefined;
            devDependencies?: Record<string, string> | undefined;
            scripts?: Record<string, string> | undefined;
        } | undefined;
        shadcnComponents?: string[] | undefined;
        dependsOn?: string[] | undefined;
        smallLogo?: string | undefined;
        logo?: string | undefined;
        addOnSpecialSteps?: string[] | undefined;
        createSpecialSteps?: string[] | undefined;
        postInitSpecialSteps?: string[] | undefined;
        envVars?: {
            name: string;
            file?: ".env" | ".env.local" | undefined;
            description?: string | undefined;
            default?: string | undefined;
            required?: boolean | undefined;
            secret?: boolean | undefined;
        }[] | undefined;
        integrations?: {
            type?: string | undefined;
            code?: string | undefined;
            path?: string | undefined;
            jsName?: string | undefined;
            import?: string | undefined;
        }[] | undefined;
        readme?: string | undefined;
        readmeIsEjs?: boolean | undefined;
    };
    output: import("../environment.js").MemoryEnvironmentOutput;
}>;
export declare function buildAssetsDirectory(output: {
    files: Record<string, string>;
}, info: AddOnInfo): Promise<void>;
export declare function updateAddOnInfo(environment: Environment): Promise<void>;
export declare function compileAddOn(environment: Environment): Promise<void>;
export declare function initAddOn(environment: Environment): Promise<void>;
export declare function devAddOn(environment: Environment): Promise<void>;
export declare function loadRemoteAddOn(url: string): Promise<AddOn>;
