@aws-amplify/core
Version:
Core category of aws-amplify
80 lines (78 loc) • 2.41 kB
JavaScript
;
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
Object.defineProperty(exports, "__esModule", { value: true });
exports.createConfigurationBuilder = createConfigurationBuilder;
const parseAmplifyConfig_1 = require("../utils/parseAmplifyConfig");
const deepMerge_1 = require("../utils/deepMerge");
/**
* 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()
: (0, parseAmplifyConfig_1.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] = (0, deepMerge_1.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;
}
//# sourceMappingURL=configurationBuilder.js.map