Skip to content

Commit a80b68a

Browse files
committed
feat(core): make AmplifyOutputsData and all nested types public
Remove @_spi(InternalAmplifyConfiguration) from AmplifyOutputsData and all nested structs, enums, and type aliases. Make all internal initializers public so customers can programmatically construct configuration without requiring a special SPI import. This enables: - Programmatic configuration construction for testing and dynamic environments using just `import Amplify` - Runtime inspection of resolved configuration (e.g., reading the configured region or user pool ID) - Direct use of `Amplify.configure(_: AmplifyOutputsData)` without SPI Usage examples: import Amplify // Construct configuration programmatically let config = AmplifyOutputsData( version: "1", auth: .init( awsRegion: "us-east-1", userPoolId: "us-east-1_abc", userPoolClientId: "client123" ), storage: .init( awsRegion: "us-east-1", bucketName: "my-bucket" ) ) try Amplify.configure(config) // Inspect resolved configuration let outputs = try AmplifyOutputs.amplifyOutputs.resolveConfiguration() print(outputs.auth?.userPoolId) print(outputs.storage?.bucketName)
1 parent 85957a3 commit a80b68a

52 files changed

Lines changed: 316 additions & 93 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Amplify/Core/Configuration/AmplifyOutputsData.swift

Lines changed: 24 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import Foundation
1818
///
1919
/// - Tag: AmplifyOutputs
2020
///
21-
@_spi(InternalAmplifyConfiguration)
2221
public struct AmplifyOutputsData: Codable {
2322
public let version: String
2423
public let analytics: Analytics?
@@ -29,8 +28,7 @@ public struct AmplifyOutputsData: Codable {
2928
public let storage: Storage?
3029
public let custom: CustomOutput?
3130

32-
@_spi(InternalAmplifyConfiguration)
33-
public struct Analytics: Codable {
31+
public struct Analytics: Codable {
3432
public let amazonPinpoint: AmazonPinpoint?
3533

3634
public struct AmazonPinpoint: Codable {
@@ -39,8 +37,7 @@ public struct AmplifyOutputsData: Codable {
3937
}
4038
}
4139

42-
@_spi(InternalAmplifyConfiguration)
43-
public struct Auth: Codable {
40+
public struct Auth: Codable {
4441
public let awsRegion: AWSRegion
4542
public let userPoolId: String
4643
public let userPoolClientId: String
@@ -54,7 +51,6 @@ public struct AmplifyOutputsData: Codable {
5451
public let mfaConfiguration: String?
5552
public let mfaMethods: [String]?
5653

57-
@_spi(InternalAmplifyConfiguration)
5854
public struct PasswordPolicy: Codable {
5955
public let minLength: UInt
6056
public let requireNumbers: Bool
@@ -63,7 +59,6 @@ public struct AmplifyOutputsData: Codable {
6359
public let requireSymbols: Bool
6460
}
6561

66-
@_spi(InternalAmplifyConfiguration)
6762
public struct OAuth: Codable {
6863
public let identityProviders: [String]
6964
public let domain: String
@@ -73,19 +68,17 @@ public struct AmplifyOutputsData: Codable {
7368
public let responseType: String
7469
}
7570

76-
@_spi(InternalAmplifyConfiguration)
7771
public enum UsernameAttributes: String, Codable {
7872
case email
7973
case phoneNumber = "phone_number"
8074
}
8175

82-
@_spi(InternalAmplifyConfiguration)
8376
public enum UserVerificationType: String, Codable {
8477
case email
8578
case phoneNumber = "phone_number"
8679
}
8780

88-
init(
81+
public init(
8982
awsRegion: AWSRegion,
9083
userPoolId: String,
9184
userPoolClientId: String,
@@ -115,8 +108,7 @@ public struct AmplifyOutputsData: Codable {
115108

116109
}
117110

118-
@_spi(InternalAmplifyConfiguration)
119-
public struct DataCategory: Codable {
111+
public struct DataCategory: Codable {
120112
public let awsRegion: AWSRegion
121113
public let url: String
122114
public let modelIntrospection: JSONValue?
@@ -125,38 +117,32 @@ public struct AmplifyOutputsData: Codable {
125117
public let authorizationTypes: [AWSAppSyncAuthorizationType]
126118
}
127119

128-
@_spi(InternalAmplifyConfiguration)
129-
public struct Geo: Codable {
120+
public struct Geo: Codable {
130121
public let awsRegion: AWSRegion
131122
public let maps: Maps?
132123
public let searchIndices: SearchIndices?
133124
public let geofenceCollections: GeofenceCollections?
134125

135-
@_spi(InternalAmplifyConfiguration)
136126
public struct Maps: Codable {
137127
public let items: [String: AmazonLocationServiceConfig]
138128
public let `default`: String
139129

140-
@_spi(InternalAmplifyConfiguration)
141-
public struct AmazonLocationServiceConfig: Codable {
130+
public struct AmazonLocationServiceConfig: Codable {
142131
public let style: String
143132
}
144133
}
145134

146-
@_spi(InternalAmplifyConfiguration)
147135
public struct SearchIndices: Codable {
148136
public let items: [String]
149137
public let `default`: String
150138
}
151139

152-
@_spi(InternalAmplifyConfiguration)
153140
public struct GeofenceCollections: Codable {
154141
public let items: [String]
155142
public let `default`: String
156143
}
157144

158-
// Internal init used for testing
159-
init(
145+
public init(
160146
awsRegion: AWSRegion,
161147
maps: Maps? = nil,
162148
searchIndices: SearchIndices? = nil,
@@ -169,28 +155,30 @@ public struct AmplifyOutputsData: Codable {
169155
}
170156
}
171157

172-
@_spi(InternalAmplifyConfiguration)
173-
public struct Notifications: Codable {
158+
public struct Notifications: Codable {
174159
public let awsRegion: String
175160
public let amazonPinpointAppId: String
176161
public let channels: [AmazonPinpointChannelType]
177162
}
178163

179-
@_spi(InternalAmplifyConfiguration)
180-
public struct Storage: Codable {
164+
public struct Storage: Codable {
181165
public let awsRegion: AWSRegion
182166
public let bucketName: String
183167
public let buckets: [Bucket]?
184168

185-
@_spi(InternalAmplifyConfiguration)
186169
public struct Bucket: Codable {
187170
public let name: String
188171
public let bucketName: String
189172
public let awsRegion: AWSRegion
173+
174+
public init(name: String, bucketName: String, awsRegion: AWSRegion) {
175+
self.name = name
176+
self.bucketName = bucketName
177+
self.awsRegion = awsRegion
178+
}
190179
}
191180

192-
// Internal init used for testing
193-
init(
181+
public init(
194182
awsRegion: AWSRegion,
195183
bucketName: String,
196184
buckets: [Bucket]? = nil
@@ -201,14 +189,11 @@ public struct AmplifyOutputsData: Codable {
201189
}
202190
}
203191

204-
@_spi(InternalAmplifyConfiguration)
205-
public struct CustomOutput: Codable {}
192+
public struct CustomOutput: Codable {}
206193

207-
@_spi(InternalAmplifyConfiguration)
208-
public typealias AWSRegion = String
194+
public typealias AWSRegion = String
209195

210-
@_spi(InternalAmplifyConfiguration)
211-
public enum AmazonCognitoStandardAttributes: String, Codable, CodingKeyRepresentable {
196+
public enum AmazonCognitoStandardAttributes: String, Codable, CodingKeyRepresentable {
212197
case address
213198
case birthdate
214199
case email
@@ -229,26 +214,23 @@ public struct AmplifyOutputsData: Codable {
229214
case zoneinfo
230215
}
231216

232-
@_spi(InternalAmplifyConfiguration)
233-
public enum AWSAppSyncAuthorizationType: String, Codable {
217+
public enum AWSAppSyncAuthorizationType: String, Codable {
234218
case amazonCognitoUserPools = "AMAZON_COGNITO_USER_POOLS"
235219
case apiKey = "API_KEY"
236220
case awsIAM = "AWS_IAM"
237221
case awsLambda = "AWS_LAMBDA"
238222
case openIDConnect = "OPENID_CONNECT"
239223
}
240224

241-
@_spi(InternalAmplifyConfiguration)
242-
public enum AmazonPinpointChannelType: String, Codable {
225+
public enum AmazonPinpointChannelType: String, Codable {
243226
case inAppMessaging = "IN_APP_MESSAGING"
244227
case fcm = "FCM"
245228
case apns = "APNS"
246229
case email = "EMAIL"
247230
case sms = "SMS"
248231
}
249232

250-
// Internal init used for testing
251-
init(
233+
public init(
252234
version: String = "",
253235
analytics: Analytics? = nil,
254236
auth: Auth? = nil,
@@ -276,8 +258,7 @@ public struct AmplifyOutputsData: Codable {
276258
public struct AmplifyOutputs: @unchecked Sendable {
277259

278260
/// A closure that resolves the `AmplifyOutputsData` configuration
279-
@_spi(InternalAmplifyConfiguration)
280-
public let resolveConfiguration: () throws -> AmplifyOutputsData
261+
public let resolveConfiguration: () throws -> AmplifyOutputsData
281262

282263
/// Resolves configuration with `amplify_outputs.json` in the main bundle.
283264
public static let amplifyOutputs: AmplifyOutputs = .init {
@@ -336,8 +317,7 @@ public extension Amplify {
336317
/// - Parameter configuration: The AmplifyOutputsData object
337318
///
338319
/// - Tag: Amplify.configure
339-
@_spi(InternalAmplifyConfiguration)
340-
static func configure(_ configuration: AmplifyOutputsData) throws {
320+
static func configure(_ configuration: AmplifyOutputsData) throws {
341321
// Always configure logging first since Auth dependings on logging
342322
try configure(CategoryType.logging.category, using: configuration)
343323

AmplifyPlugins/API/Sources/AWSAPIPlugin/AWSAPIPlugin+Configure.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// SPDX-License-Identifier: Apache-2.0
66
//
77

8-
@_spi(InternalAmplifyConfiguration) import Amplify
8+
import Amplify
99
import AwsCommonRuntimeKit
1010
import AWSPluginsCore
1111
import InternalAmplifyCredentials

AmplifyPlugins/API/Sources/AWSAPIPlugin/Configuration/AWSAPICategoryPluginConfiguration+EndpointConfig.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// SPDX-License-Identifier: Apache-2.0
66
//
77

8-
@_spi(InternalAmplifyConfiguration) import Amplify
8+
import Amplify
99
import AWSPluginsCore
1010
import Foundation
1111

AmplifyPlugins/API/Sources/AWSAPIPlugin/Configuration/AWSAPICategoryPluginConfiguration.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// SPDX-License-Identifier: Apache-2.0
66
//
77

8-
@_spi(InternalAmplifyConfiguration) import Amplify
8+
import Amplify
99
import AWSPluginsCore
1010
import Foundation
1111
import InternalAmplifyCredentials

AmplifyPlugins/API/Tests/APIHostApp/AWSAPIPluginFunctionalTests/GraphQLModelBasedTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import XCTest
99
@testable import AWSAPIPlugin
10-
@_spi(InternalAmplifyConfiguration) @testable import Amplify
10+
@testable import Amplify
1111
#if os(watchOS)
1212
@testable import APIWatchApp
1313
#else

AmplifyPlugins/API/Tests/APIHostApp/AWSAPIPluginGen2GraphQLTests/AWSAPIPluginGen2GraphQLBaseTest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import AWSCognitoAuthPlugin
99
import XCTest
1010
@testable import AWSAPIPlugin
11-
@_spi(InternalAmplifyConfiguration) @testable import Amplify
11+
@testable import Amplify
1212
@testable import APIHostApp
1313
@testable import AWSPluginsCore
1414

AmplifyPlugins/API/Tests/APIHostApp/AWSAPIPluginGen2GraphQLTests/TestConfigHelper.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//
77

88
import Foundation
9-
@_spi(InternalAmplifyConfiguration) @testable import Amplify
9+
@testable import Amplify
1010

1111
class TestConfigHelper {
1212

AmplifyPlugins/API/Tests/AWSAPIPluginTests/AWSAPICategoryPlugin+ConfigureTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import XCTest
99

10-
@_spi(InternalAmplifyConfiguration) @testable import Amplify
10+
@testable import Amplify
1111
@testable import AWSAPIPlugin
1212

1313
class AWSAPICategoryPluginConfigureTests: AWSAPICategoryPluginTestBase {

AmplifyPlugins/Analytics/Sources/AWSPinpointAnalyticsPlugin/AWSPinpointAnalyticsPlugin+Configure.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// SPDX-License-Identifier: Apache-2.0
66
//
77

8-
@_spi(InternalAmplifyConfiguration) import Amplify
8+
import Amplify
99
import AWSPluginsCore
1010
import Foundation
1111
@_spi(InternalAWSPinpoint) import InternalAWSPinpoint

AmplifyPlugins/Analytics/Sources/AWSPinpointAnalyticsPlugin/Configuration/AWSPinpointAnalyticsPluginConfiguration.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// SPDX-License-Identifier: Apache-2.0
66
//
77

8-
@_spi(InternalAmplifyConfiguration) @preconcurrency import Amplify
8+
@preconcurrency import Amplify
99
import AWSClientRuntime
1010
import AWSPinpoint
1111
import AWSPinpoint

0 commit comments

Comments
 (0)