/** * Manifest definition - collects all entities and settings * @module manifest */ import { EntityIR } from './entity'; import { ExternalSourceConfig } from './source'; /** * Generation mode configuration */ export interface ModeConfig { /** * 'full' - Generate database schema, API, validation, hooks (default) * 'headless' - Skip database schema, generate validation, hooks, services only * 'api-only' - Generate API layer only (for backend services) */ type: 'full' | 'headless' | 'api-only'; /** * When headless, optionally specify which generators to include * Default: ['validation', 'hooks', 'services', 'i18n'] */ include?: ('schema' | 'validation' | 'api' | 'hooks' | 'types' | 'services' | 'i18n')[]; } /** * Normalize mode config from shorthand or full config */ export declare function normalizeMode(mode?: ModeConfig | 'full' | 'headless' | 'api-only'): ModeConfig; /** * Database connection configuration */ export interface DatabaseConfig { /** Database type */ type: 'sqlite' | 'postgres' | 'mysql'; /** SQLite file path (for SQLite only) */ file?: string; /** Connection URL (for PostgreSQL/MySQL) */ url?: string; } export interface AuthConfig { enabled: boolean; adapter?: 'drizzle'; providers?: ('credentials' | 'google' | 'github' | 'discord')[]; sessionStrategy?: 'jwt' | 'database'; } export interface I18nConfig { languages: string[]; defaultLanguage: string; outputDir?: string; } export interface ObservabilityConfig { logging?: { enabled: boolean; level?: 'debug' | 'info' | 'warn' | 'error'; format?: 'json' | 'pretty'; }; telemetry?: { enabled: boolean; events?: ('create' | 'update' | 'remove')[]; }; audit?: { enabled: boolean; entity?: string; }; } export interface TenancyConfig { enabled: boolean; field: string; } export interface DefaultBehaviors { timestamps?: boolean; softDelete?: boolean; audit?: boolean; } export interface ManifestDefinition { /** Template ID (e.g., 'nextjs-drizzle-trpc') */ template?: string; /** * Generation mode - 'full' | 'headless' | 'api-only' or ModeConfig object * - 'full': Generate database schema, API, validation, hooks (default) * - 'headless': Skip database schema, generate validation, hooks, services only * - 'api-only': Generate API layer only */ mode?: ModeConfig | 'full' | 'headless' | 'api-only'; /** Entity definitions */ entities: EntityIR[]; /** * Global default source for all entities. * Individual entities can override this with their own source. */ source?: ExternalSourceConfig; /** Database configuration (required for 'full' mode, optional for 'headless') */ database?: DatabaseConfig; auth?: AuthConfig; i18n?: I18nConfig; observability?: ObservabilityConfig; tenancy?: TenancyConfig; defaults?: DefaultBehaviors; } export interface ManifestIR { /** Template ID - CLI validates if provided */ template?: string; /** Normalized mode configuration */ mode: ModeConfig; /** Entity definitions */ entities: EntityIR[]; /** Global default source for entities (optional) */ source?: ExternalSourceConfig; /** Database configuration (optional for headless mode) */ database?: DatabaseConfig; auth: AuthConfig; i18n: I18nConfig; observability: ObservabilityConfig; tenancy: TenancyConfig; defaults: DefaultBehaviors; } /** * Define a manifest with entities and configuration * * @param definition - Manifest configuration * @returns Compiled ManifestIR for use by CLI and generators * * @example * ```typescript * const manifest = defineManifest({ * template: 'nextjs-drizzle-trpc', * entities: [User, Post], * database: { type: 'sqlite', file: './sqlite.db' }, * }) * ``` */ export declare function defineManifest(definition: ManifestDefinition): ManifestIR; /** * Alias for defineManifest - use in archetype.config.ts * * @example * ```typescript * // archetype.config.ts * import { defineConfig } from 'archetype-engine' * * export default defineConfig({ * template: 'nextjs-drizzle-trpc', * entities: [User, Post], * database: { type: 'postgres', url: process.env.DATABASE_URL }, * }) * ``` */ export declare const defineConfig: typeof defineManifest; //# sourceMappingURL=manifest.d.ts.map