UNPKG

@aws-amplify/core

Version:

Core category of aws-amplify

79 lines (76 loc) • 2.27 kB
import { parseAmplifyConfig } from '../utils/parseAmplifyConfig.mjs'; import { deepMerge } from '../utils/deepMerge.mjs'; // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 /** * 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); * ``` */ function createConfigurationBuilder(options) { const config = {}; function mergeFrom(seed) { const resolved = 'build' in seed && typeof seed.build === 'function' ? seed.build() : parseAmplifyConfig(seed); Object.assign(config, resolved); } if (options?.from) { mergeFrom(options.from); } const builder = { from(existing) { mergeFrom(existing); return builder; }, add(category, value) { config[category] = value; return builder; }, patch(category, value) { const existing = config[category]; config[category] = deepMerge(existing ?? {}, value); return builder; }, auth(value) { return builder.add('Auth', value); }, storage(value) { return builder.add('Storage', value); }, api(value) { return builder.add('API', value); }, analytics(value) { return builder.add('Analytics', value); }, geo(value) { return builder.add('Geo', value); }, notifications(value) { return builder.add('Notifications', value); }, interactions(value) { return builder.add('Interactions', value); }, predictions(value) { return builder.add('Predictions', value); }, build() { return Object.freeze({ ...config }); }, }; return builder; } export { createConfigurationBuilder }; //# sourceMappingURL=configurationBuilder.mjs.map