import type { AbsoluteServiceConfig, CommandServiceConfig, ReservedConfigKey } from '../../types/build'; type ServiceName = Extract; type HasReservedConfigKeys = Extract, ReservedConfigKey> extends never ? false : true; type ServiceDependsOn = readonly Exclude, TSelf>[]; type TypedAbsoluteServiceConfig = Omit & { dependsOn?: ServiceDependsOn; }; type TypedCommandServiceConfig = Omit & { dependsOn?: ServiceDependsOn; }; type TypedWorkspaceConfig> = { [K in keyof TConfig]: K extends string ? TypedAbsoluteServiceConfig | TypedCommandServiceConfig : never; }; type ServiceBuildDirectory = TConfig[TKey] extends { command: readonly unknown[]; } ? never : TConfig[TKey] extends { kind: 'command'; } ? never : TConfig[TKey] extends { buildDirectory: infer TBuildDirectory; } ? TBuildDirectory extends string ? TBuildDirectory : never : never; type ServicesWithBuildDirectory, TBuildDirectory extends string> = { [K in keyof TConfig]: ServiceBuildDirectory extends TBuildDirectory ? K : never; }[keyof TConfig]; type IsUnion = TValue extends unknown ? [TCompare] extends [TValue] ? false : true : never; type DuplicateBuildDirectoryValues> = { [K in keyof TConfig]: ServiceBuildDirectory extends infer TBuildDirectory ? TBuildDirectory extends string ? IsUnion> extends true ? TBuildDirectory : never : never : never; }[keyof TConfig]; type ValidateUniqueBuildDirectories> = [ DuplicateBuildDirectoryValues ] extends [never] ? unknown : { /** * Workspace services cannot use duplicate literal buildDirectory values. * Runtime workspace validation also checks resolved absolute paths. */ __absolute_duplicateBuildDirectory__: DuplicateBuildDirectoryValues; }; type ValidateConfig> = HasReservedConfigKeys extends true ? AbsoluteServiceConfig : TypedWorkspaceConfig & ValidateUniqueBuildDirectories; export declare const defineConfig: >(config: TConfig & ValidateConfig) => TConfig & ValidateConfig; export {};