Skip to content

Commit d045aa4

Browse files
authored
fix: Plugins that are not configured correctly will be error at initial step (#642)
This change allows to call configure method of each plugin with a nil value. ie even if the corresponding configuration is not present in the configuration file, plugin's configure will be called. The plugin can decide to throw an error or handle the nil configuration.
1 parent 48792f4 commit d045aa4

File tree

26 files changed

+239
-145
lines changed

26 files changed

+239
-145
lines changed

Amplify/Categories/API/Internal/APICategory+CategoryConfigurable.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
extension AmplifyAPICategory: CategoryConfigurable {
99

10-
func configure(using configuration: CategoryConfiguration) throws {
10+
func configure(using configuration: CategoryConfiguration?) throws {
1111
guard !isConfigured else {
1212
let error = ConfigurationError.amplifyAlreadyConfigured(
1313
"\(categoryType.displayName) has already been configured.",
@@ -22,10 +22,7 @@ extension AmplifyAPICategory: CategoryConfigurable {
2222
}
2323

2424
func configure(using amplifyConfiguration: AmplifyConfiguration) throws {
25-
guard let configuration = categoryConfiguration(from: amplifyConfiguration) else {
26-
return
27-
}
28-
try configure(using: configuration)
25+
try configure(using: categoryConfiguration(from: amplifyConfiguration))
2926
}
3027

3128
}

Amplify/Categories/Analytics/Internal/AnalyticsCategory+CategoryConfigurable.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
extension AnalyticsCategory: CategoryConfigurable {
99

10-
func configure(using configuration: CategoryConfiguration) throws {
10+
func configure(using configuration: CategoryConfiguration?) throws {
1111
guard !isConfigured else {
1212
let error = ConfigurationError.amplifyAlreadyConfigured(
1313
"\(categoryType.displayName) has already been configured.",
@@ -22,10 +22,7 @@ extension AnalyticsCategory: CategoryConfigurable {
2222
}
2323

2424
func configure(using amplifyConfiguration: AmplifyConfiguration) throws {
25-
guard let configuration = categoryConfiguration(from: amplifyConfiguration) else {
26-
return
27-
}
28-
try configure(using: configuration)
25+
try configure(using: categoryConfiguration(from: amplifyConfiguration))
2926
}
3027

3128
}

Amplify/Categories/Auth/Internal/AuthCategory+CategoryConfigurable.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Foundation
99

1010
extension AuthCategory: CategoryConfigurable {
1111

12-
func configure(using configuration: CategoryConfiguration) throws {
12+
func configure(using configuration: CategoryConfiguration?) throws {
1313
guard !isConfigured else {
1414
let error = ConfigurationError.amplifyAlreadyConfigured(
1515
"\(categoryType.displayName) has already been configured.",
@@ -24,9 +24,6 @@ extension AuthCategory: CategoryConfigurable {
2424
}
2525

2626
func configure(using amplifyConfiguration: AmplifyConfiguration) throws {
27-
guard let configuration = categoryConfiguration(from: amplifyConfiguration) else {
28-
return
29-
}
30-
try configure(using: configuration)
27+
try configure(using: categoryConfiguration(from: amplifyConfiguration))
3128
}
3229
}

Amplify/Categories/DataStore/Internal/DataStoreCategory+Configurable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ extension DataStoreCategory: CategoryConfigurable {
1515
}
1616
}
1717

18-
func configure(using configuration: CategoryConfiguration) throws {
18+
func configure(using configuration: CategoryConfiguration?) throws {
1919
guard !isConfigured else {
2020
let error = ConfigurationError.amplifyAlreadyConfigured(
2121
"\(categoryType.displayName) has already been configured.",

Amplify/Categories/Hub/Internal/HubCategory+CategoryConfigurable.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ extension HubCategory: CategoryConfigurable {
99

1010
/// Configures the HubCategory using the incoming CategoryConfiguration. If the incoming configuration does not
1111
/// specify a Hub plugin, then we will inject the AWSHubPlugin.
12-
func configure(using configuration: CategoryConfiguration) throws {
12+
func configure(using configuration: CategoryConfiguration?) throws {
1313
guard configurationState != .configured else {
1414
let error = ConfigurationError.amplifyAlreadyConfigured(
1515
"\(categoryType.displayName) has already been configured.",
@@ -24,10 +24,7 @@ extension HubCategory: CategoryConfigurable {
2424
}
2525

2626
func configure(using amplifyConfiguration: AmplifyConfiguration) throws {
27-
guard let configuration = categoryConfiguration(from: amplifyConfiguration) else {
28-
return
29-
}
30-
try configure(using: configuration)
27+
try configure(using: categoryConfiguration(from: amplifyConfiguration))
3128
}
3229

3330
}

Amplify/Categories/Logging/Internal/LoggingCategory+CategoryConfigurable.swift

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
extension LoggingCategory: CategoryConfigurable {
99

1010
/// Configures the LoggingCategory using the incoming CategoryConfiguration.
11-
func configure(using configuration: CategoryConfiguration) throws {
11+
func configure(using configuration: CategoryConfiguration?) throws {
1212
try concurrencyQueue.sync {
1313
let plugin: LoggingCategoryPlugin
1414
switch configurationState {
@@ -26,17 +26,14 @@ extension LoggingCategory: CategoryConfigurable {
2626
throw error
2727
}
2828

29-
try plugin.configure(using: configuration.plugins[plugin.key])
29+
try plugin.configure(using: configuration?.plugins[plugin.key])
3030
self.plugin = plugin
3131
configurationState = .configured
3232
}
3333
}
3434

3535
func configure(using amplifyConfiguration: AmplifyConfiguration) throws {
36-
guard let configuration = categoryConfiguration(from: amplifyConfiguration) else {
37-
return
38-
}
39-
try configure(using: configuration)
36+
try configure(using: categoryConfiguration(from: amplifyConfiguration))
4037
}
4138

4239
}

Amplify/Categories/Predictions/Internal/PredictionsCategory+CategoryConfigurable.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
extension PredictionsCategory: CategoryConfigurable {
99

10-
func configure(using configuration: CategoryConfiguration) throws {
10+
func configure(using configuration: CategoryConfiguration?) throws {
1111
guard !isConfigured else {
1212
let error = ConfigurationError.amplifyAlreadyConfigured(
1313
"\(categoryType.displayName) has already been configured.",
@@ -22,10 +22,7 @@ extension PredictionsCategory: CategoryConfigurable {
2222
}
2323

2424
func configure(using amplifyConfiguration: AmplifyConfiguration) throws {
25-
guard let configuration = categoryConfiguration(from: amplifyConfiguration) else {
26-
return
27-
}
28-
try configure(using: configuration)
25+
try configure(using: categoryConfiguration(from: amplifyConfiguration))
2926
}
3027

3128
}

Amplify/Categories/Storage/Internal/StorageCategory+CategoryConfigurable.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
extension StorageCategory: CategoryConfigurable {
99

10-
func configure(using configuration: CategoryConfiguration) throws {
10+
func configure(using configuration: CategoryConfiguration?) throws {
1111
guard !isConfigured else {
1212
let error = ConfigurationError.amplifyAlreadyConfigured(
1313
"\(categoryType.displayName) has already been configured.",
@@ -22,10 +22,7 @@ extension StorageCategory: CategoryConfigurable {
2222
}
2323

2424
func configure(using amplifyConfiguration: AmplifyConfiguration) throws {
25-
guard let configuration = categoryConfiguration(from: amplifyConfiguration) else {
26-
return
27-
}
28-
try configure(using: configuration)
25+
try configure(using: categoryConfiguration(from: amplifyConfiguration))
2926
}
3027

3128
}

Amplify/Core/Configuration/AmplifyConfiguration.swift

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,17 +148,19 @@ extension Amplify {
148148

149149
/// Configures a list of plugins with the specified CategoryConfiguration. If any configurations do not match the
150150
/// specified plugins, emits a log warning.
151-
static func configure(plugins: [Plugin], using configuration: CategoryConfiguration) throws {
152-
var pluginConfigurations = configuration.plugins
151+
static func configure(plugins: [Plugin], using configuration: CategoryConfiguration?) throws {
152+
var pluginConfigurations = configuration?.plugins
153153

154154
for plugin in plugins {
155-
let pluginConfiguration = pluginConfigurations[plugin.key]
155+
let pluginConfiguration = pluginConfigurations?[plugin.key]
156156
try plugin.configure(using: pluginConfiguration)
157-
pluginConfigurations.removeValue(forKey: plugin.key)
157+
pluginConfigurations?.removeValue(forKey: plugin.key)
158158
}
159159

160-
for unusedPluginKey in pluginConfigurations.keys {
161-
log.warn("No plugin found for configuration key `\(unusedPluginKey)`. Add a plugin for that key.")
160+
if let pluginKeys = pluginConfigurations?.keys {
161+
for unusedPluginKey in pluginKeys {
162+
log.warn("No plugin found for configuration key `\(unusedPluginKey)`. Add a plugin for that key.")
163+
}
162164
}
163165
}
164166

Amplify/Core/Configuration/Internal/CategoryConfigurable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ protocol CategoryConfigurable: class, CategoryTypeable {
1313
/// Configures the category and added plugins using `configuration`
1414
///
1515
/// - Parameter configuration: The CategoryConfiguration
16-
func configure(using configuration: CategoryConfiguration) throws
16+
func configure(using configuration: CategoryConfiguration?) throws
1717

1818
/// Convenience method for configuring the category using the top-level AmplifyConfiguration
1919
///

0 commit comments

Comments
 (0)