/**
 * Framework detection database.
 *
 * Package detection rules (which npm packages and config files identify each
 * framework) were informed by the @vercel/frameworks package (Apache-2.0,
 * Copyright 2017 Vercel Inc, github.com/vercel/vercel/tree/main/packages/frameworks).
 *
 * All Vercel-specific properties (logos, CDN URLs, runtime config, routing
 * rules, deploy targets) have been stripped. Only generic framework facts
 * remain: package names, config filenames, default build commands, and output
 * directories as documented by each framework's own docs.
 *
 * Framework entries are ordered by specificity — more specific frameworks
 * (e.g., SvelteKit) should be listed before generic ones (e.g., Vite).
 */
export interface DetectorRule {
    /** Match a package in dependencies or devDependencies */
    matchPackage?: string;
    /** Match a file path (relative to project root) */
    path?: string;
    /** Regex pattern to match against file content (requires `path`) */
    matchContent?: string;
}
export interface FrameworkDefinition {
    /** Human-readable name */
    name: string;
    /** Unique slug identifier */
    slug: string;
    /** Default build command (null = no build step) */
    buildCommand: string | null;
    /** Default start command when package.json has no start script. */
    defaultStartCommand?: {
        command: string;
        /** Only use this default when the package is present in dependencies or devDependencies. */
        whenPackage?: string;
    };
    /**
     * Always use `defaultStartCommand` even when the project ships its
     * own `start` script. Useful for frameworks whose scaffolded `start`
     * invokes a dev-only CLI (e.g. `nest start`, `mastra start`) that
     * is not present in the production runtime (devDependency only).
     */
    preferDefaultStart?: boolean;
    /**
     * Server-adapter requirement. Some frameworks only emit a deployable
     * Node server when a server/SSR adapter is configured; for the
     * Vite-based ones (TanStack Start) that's the `nitro()` plugin from
     * the `nitro` package. Without it, `vite build` emits a client-only
     * SPA, the `defaultStartCommand` server entry never exists, and any
     * backend routes (and SSR) are dropped. When `package` is absent from
     * the project's dependencies we surface `warning` at detect time so
     * the user can add it before they ship a broken deploy.
     */
    requiresServerAdapter?: {
        /** Package whose presence indicates the server adapter is configured. */
        package: string;
        /** Actionable guidance shown when the package is missing. */
        warning: string;
    };
    /**
     * Override `outputDirectory` at detect time by inspecting the project.
     * Used by frameworks whose output path is determined by a config file
     * the user owns (e.g. Angular's `angular.json` for v17+ where the
     * applicationBuilder emits `dist/<project>/browser/`).
     * Returning `null` falls back to `outputDirectory`.
     */
    resolveOutputDirectory?: (projectDir: string) => Promise<string | null>;
    /** Commands that generate framework virtual TypeScript files before tsc runs. */
    typegenCommand?: string | string[];
    /** Packages required by the built runtime even if templates install them as devDependencies. */
    runtimeDependencies?: string[];
    /** Dev dependencies to install transiently before build without persisting to package.json. */
    buildPreinstallDevDependencies?: string[];
    /** Temporary source-file replacements applied before build and reverted after build. */
    buildFileReplacements?: Array<{
        path: string;
        search: string;
        replacement: string;
    }>;
    /** Default output directory for static assets */
    outputDirectory: string | null;
    /**
     * Static/CDN asset directory, relative to the project root.
     *
     * Points to the directory containing files suitable for CDN upload
     * (JS bundles, CSS, images, fonts, etc.) after the build runs.
     *
     * - `null` means the entire outputDirectory IS the static output
     *   (pure static-site generators, SPAs) — resolved to outputDirectory.
     * - A string path (e.g., `.next/static`, `.output/public`) is resolved
     *   relative to the project root, since some frameworks put static
     *   assets outside their main output directory.
     * - `undefined` (omitted) means no known static asset directory.
     */
    staticDir?: string | null;
    /**
     * Public URL path prefix for files inside staticDir.
     * Use an empty string when staticDir is the public web root.
     */
    staticAssetPublicPath?: string;
    /** Environment variable prefix for browser-inlined values */
    envPrefix?: string;
    /**
     * Detection rules.
     * - `every`: ALL must match for the framework to be detected.
     * - `some`: at least ONE must match (in addition to all `every` rules).
     */
    detectors: {
        every?: DetectorRule[];
        some?: DetectorRule[];
    };
}
/**
 * JS/TS framework definitions for detection.
 *
 * Order matters — first match wins. More specific frameworks come first,
 * generic catch-alls (Vite, Parcel) come last.
 */
export declare const frameworkDefinitions: FrameworkDefinition[];
//# sourceMappingURL=frameworks.d.ts.map