UNPKG

@aws-amplify/core

Version:

Core category of aws-amplify

99 lines (98 loc) • 3.77 kB
import { LegacyConfig, ResourcesConfig } from '../singleton/types'; import { AmplifyOutputsUnknown } from '../singleton/AmplifyOutputs/types'; /** * Supported category names for `.add()`. */ type CategoryName = keyof ResourcesConfig; /** * Maps a category name to its config type. */ type CategoryConfig<K extends CategoryName> = NonNullable<ResourcesConfig[K]>; /** * Allowed seed formats for `createConfiguration({ from })`. */ type ConfigurationSeed = ResourcesConfig | LegacyConfig | AmplifyOutputsUnknown | ConfigurationBuilder; /** * Recursively makes all properties optional. */ type DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]>; } : T; export interface ConfigurationBuilder { /** * Merge an existing config into this builder. Accepts any format that * `Amplify.configure()` accepts, or another `ConfigurationBuilder`. * * @example * ```ts * const config = createConfiguration() * .from(amplifyOutputs) * .add('Storage', { S3: { bucket: 'my-bucket', region: 'us-east-1' } }) * .build(); * ``` */ from(existing: ConfigurationSeed): ConfigurationBuilder; /** * Add or replace a category configuration. * * @example * ```ts * config.add('Auth', { Cognito: { userPoolId: '...', userPoolClientId: '...' } }); * config.add('Storage', { S3: { bucket: '...', region: '...' } }); * ``` */ add<K extends CategoryName>(category: K, value: CategoryConfig<K>): ConfigurationBuilder; /** * Deep-merge a partial config into an existing category. Use this to * override specific nested values without replacing the entire category. * * @example * ```ts * // Base config from outputs, override just the user pool for dev * const dev = createConfiguration({ from: outputs }) * .patch('Auth', { Cognito: { userPoolId: 'us-east-1_DEV' } }) * .build(); * ``` */ patch<K extends CategoryName>(category: K, value: DeepPartial<CategoryConfig<K>>): ConfigurationBuilder; /** Shorthand for `.add('Auth', config)` */ auth(config: CategoryConfig<'Auth'>): ConfigurationBuilder; /** Shorthand for `.add('Storage', config)` */ storage(config: CategoryConfig<'Storage'>): ConfigurationBuilder; /** Shorthand for `.add('API', config)` */ api(config: CategoryConfig<'API'>): ConfigurationBuilder; /** Shorthand for `.add('Analytics', config)` */ analytics(config: CategoryConfig<'Analytics'>): ConfigurationBuilder; /** Shorthand for `.add('Geo', config)` */ geo(config: CategoryConfig<'Geo'>): ConfigurationBuilder; /** Shorthand for `.add('Notifications', config)` */ notifications(config: CategoryConfig<'Notifications'>): ConfigurationBuilder; /** Shorthand for `.add('Interactions', config)` */ interactions(config: CategoryConfig<'Interactions'>): ConfigurationBuilder; /** Shorthand for `.add('Predictions', config)` */ predictions(config: CategoryConfig<'Predictions'>): ConfigurationBuilder; /** * Produces a frozen `ResourcesConfig` ready for `Amplify.configure()`. */ build(): ResourcesConfig; } export interface CreateConfigurationBuilderOptions { from?: ConfigurationSeed; } /** * Creates a configuration builder for constructing `ResourcesConfig` objects * programmatically. * * @example * ```ts * import outputs from './amplify_outputs.json'; * * const config = createConfiguration({ from: outputs }) * .add('Storage', { S3: { bucket: 'my-bucket', region: 'us-east-1' } }) * .build(); * * Amplify.configure(config); * ``` */ export declare function createConfigurationBuilder(options?: CreateConfigurationBuilderOptions): ConfigurationBuilder; export {};