diff --git a/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ExtensionSaveService.swift b/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ExtensionSaveService.swift new file mode 100644 index 000000000..c3c7faf3c --- /dev/null +++ b/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ExtensionSaveService.swift @@ -0,0 +1,184 @@ +// +// File.swift +// +// +// Created by Jackson Harper on 6/1/22. +// + +import Foundation +import Models +import Services +import Utils +import Views + +class ExtensionSaveService { + let queue: OperationQueue + + init() { + self.queue = OperationQueue() + } + + private func queueSaveOperation(_ pageScrape: PageScrapePayload, requestId: String, shareExtensionViewModel: ShareExtensionChildViewModel) { + ProcessInfo().performExpiringActivity(withReason: "app.omnivore.SaveActivity") { [self] expiring in + guard !expiring else { + self.queue.cancelAllOperations() + self.queue.waitUntilAllOperationsAreFinished() + return + } + + let operation = SaveOperation(pageScrapePayload: pageScrape, requestId: requestId, shareExtensionViewModel: shareExtensionViewModel) + + self.queue.addOperation(operation) + self.queue.waitUntilAllOperationsAreFinished() + } + } + + public func save(_ extensionContext: NSExtensionContext, requestId: String, shareExtensionViewModel: ShareExtensionChildViewModel) { + PageScraper.scrape(extensionContext: extensionContext) { [weak self] result in + guard let self = self else { return } + + switch result { + case let .success(payload): + DispatchQueue.main.async { + shareExtensionViewModel.status = .saved + + let url = URLComponents(string: payload.url) + let hostname = URL(string: payload.url)?.host ?? "" + + switch payload.contentType { + case let .html(html: _, title: title, iconURL: iconURL): + shareExtensionViewModel.title = title + shareExtensionViewModel.iconURL = iconURL + shareExtensionViewModel.url = hostname + case .none: + shareExtensionViewModel.url = hostname + shareExtensionViewModel.title = payload.url + if var url = url { + url.path = "/favicon.ico" + shareExtensionViewModel.iconURL = url.url?.absoluteString + } + case let .pdf(localUrl: localUrl): + shareExtensionViewModel.url = hostname + shareExtensionViewModel.title = PDFUtils.titleFromPdfFile(localUrl.absoluteString) + Task { + let localThumbnail = try await PDFUtils.createThumbnailFor(inputUrl: localUrl) + DispatchQueue.main.async { + shareExtensionViewModel.iconURL = localThumbnail?.absoluteString + } + } + } + } + self.queueSaveOperation(payload, requestId: requestId, shareExtensionViewModel: shareExtensionViewModel) + case let .failure: + DispatchQueue.main.async { + shareExtensionViewModel.status = .failed(error: .unknown(description: "Could not retrieve content")) + } + } + } + } + + class SaveOperation: Operation, URLSessionDelegate { + let requestId: String + let services: Services + let pageScrapePayload: PageScrapePayload + let shareExtensionViewModel: ShareExtensionChildViewModel + + var queue: OperationQueue? + var uploadTask: URLSessionTask? + + enum State: Int { + case created + case started + case finished + } + + init(pageScrapePayload: PageScrapePayload, requestId: String, shareExtensionViewModel: ShareExtensionChildViewModel) { + self.pageScrapePayload = pageScrapePayload + self.requestId = requestId + self.shareExtensionViewModel = shareExtensionViewModel + + self.state = .created + self.services = Services() + } + + open var state: State = .created { + willSet { + willChangeValue(forKey: "isReady") + willChangeValue(forKey: "isExecuting") + willChangeValue(forKey: "isFinished") + willChangeValue(forKey: "isCancelled") + } + didSet { + didChangeValue(forKey: "isCancelled") + didChangeValue(forKey: "isFinished") + didChangeValue(forKey: "isExecuting") + didChangeValue(forKey: "isReady") + } + } + + override var isAsynchronous: Bool { + true + } + + override var isReady: Bool { + true + } + + override var isExecuting: Bool { + self.state == .started + } + + override var isFinished: Bool { + self.state == .finished + } + + override func start() { + guard !isCancelled else { return } + state = .started + queue = OperationQueue() + + Task { + await persist(services: self.services, pageScrapePayload: self.pageScrapePayload, requestId: self.requestId) + } + } + + override func cancel() { + super.cancel() + } + + private func updateStatus(newStatus: ShareExtensionStatus) { + DispatchQueue.main.async { + self.shareExtensionViewModel.status = newStatus + } + } + + private func persist(services: Services, pageScrapePayload: PageScrapePayload, requestId: String) async { + do { + try await services.dataService.persistPageScrapePayload(pageScrapePayload, requestId: requestId) + } catch { + updateStatus(newStatus: .failed(error: SaveArticleError.unknown(description: "Unable to access content"))) + return + } + + do { + updateStatus(newStatus: .saved) + + switch pageScrapePayload.contentType { + case .none: + try await services.dataService.syncUrl(id: requestId, url: pageScrapePayload.url) + case let .pdf(localUrl): + try await services.dataService.syncPdf(id: requestId, localPdfURL: localUrl, url: pageScrapePayload.url) + case let .html(html, title, _): + try await services.dataService.syncPage(id: requestId, originalHtml: html, title: title, url: pageScrapePayload.url) + } + + } catch { + updateStatus(newStatus: .syncFailed(error: SaveArticleError.unknown(description: "Unknown Error"))) + return + } + + updateStatus(newStatus: .synced) + state = .finished + } + } +} diff --git a/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionScene.swift b/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionScene.swift index d3fa98d5f..a5ea021e1 100644 --- a/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionScene.swift +++ b/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionScene.swift @@ -20,83 +20,35 @@ public extension PlatformViewController { } } -final class ShareExtensionViewModel: ObservableObject { +public class ShareExtensionViewModel: ObservableObject { @Published var title: String? - @Published var status: ShareExtensionStatus = FeatureFlag.enableReadNow ? .processing : .success + @Published var status: ShareExtensionStatus = .processing @Published var debugText: String? - var subscriptions = Set() - let requestID = UUID().uuidString.lowercased() - - init() {} + let saveService = ExtensionSaveService() + let requestId = UUID().uuidString.lowercased() func handleReadNowAction(extensionContext: NSExtensionContext?) { #if os(iOS) if let application = UIApplication.value(forKeyPath: #keyPath(UIApplication.shared)) as? UIApplication { - let deepLinkUrl = NSURL(string: "omnivore://shareExtensionRequestID/\(requestID)") + let deepLinkUrl = NSURL(string: "omnivore://shareExtensionRequestID/\(requestId)") application.perform(NSSelectorFromString("openURL:"), with: deepLinkUrl) } #endif extensionContext?.completeRequest(returningItems: [], completionHandler: nil) } - func savePage(extensionContext: NSExtensionContext?) { - PageScraper.scrape(extensionContext: extensionContext) { [weak self] result in - switch result { - case let .success(payload): - self?.persist(pageScrapePayload: payload, requestId: self?.requestID ?? "") - case let .failure(error): - self?.debugText = error.message - } + func savePage(extensionContext: NSExtensionContext?, shareExtensionViewModel: ShareExtensionChildViewModel) { + if let extensionContext = extensionContext { + saveService.save(extensionContext, requestId: requestId, shareExtensionViewModel: shareExtensionViewModel) + } else { + updateStatus(.failed(error: .unknown(description: "Internal Error"))) } } - private func persist(pageScrapePayload: PageScrapePayload, requestId: String) { - let services = Services() - - guard services.authenticator.hasValidAuthToken else { - status = .failed(error: .unauthorized) - return - } - - let backgroundTask = UIApplication.shared.beginBackgroundTask(withName: requestId) - let saveLinkPublisher: AnyPublisher = { - if case let .pdf(data) = pageScrapePayload.contentType { - return services.dataService.uploadPDFPublisher(pageScrapePayload: pageScrapePayload, - data: data, - requestId: requestId) - } else if case let .html(html, title) = pageScrapePayload.contentType { - return services.dataService.savePagePublisher(pageScrapePayload: pageScrapePayload, - html: html, - title: title, - requestId: requestId) - } else { - return services.dataService.saveUrlPublisher(pageScrapePayload: pageScrapePayload, requestId: requestId) - } - }() - - saveLinkPublisher - .sink { [weak self] completion in - guard case let .failure(error) = completion else { return } - self?.debugText = "saveArticleError: \(error)" - self?.status = .failed(error: error) - UIApplication.shared.endBackgroundTask(backgroundTask) - } receiveValue: { [weak self] _ in - self?.status = .success - UIApplication.shared.endBackgroundTask(backgroundTask) - } - .store(in: &subscriptions) - - // Check connection to get fast feedback for auth/network errors - Task { - let hasConnectionAndValidToken = await services.dataService.hasConnectionAndValidToken() - - if !hasConnectionAndValidToken { - DispatchQueue.main.async { - self.debugText = "saveArticleError: No connection or invalid token." - self.status = .failed(error: .unknown(description: "")) - } - } + private func updateStatus(_ newStatus: ShareExtensionStatus) { + DispatchQueue.main.async { + self.status = newStatus } } } @@ -104,13 +56,12 @@ final class ShareExtensionViewModel: ObservableObject { struct ShareExtensionView: View { let extensionContext: NSExtensionContext? @StateObject private var viewModel = ShareExtensionViewModel() + @StateObject private var childViewModel = ShareExtensionChildViewModel() var body: some View { ShareExtensionChildView( - debugText: viewModel.debugText, - title: viewModel.title, - status: viewModel.status, - onAppearAction: { viewModel.savePage(extensionContext: extensionContext) }, + viewModel: childViewModel, + onAppearAction: { viewModel.savePage(extensionContext: extensionContext, shareExtensionViewModel: childViewModel) }, readNowButtonAction: { viewModel.handleReadNowAction(extensionContext: extensionContext) }, dismissButtonTappedAction: { _, _ in extensionContext?.completeRequest(returningItems: [], completionHandler: nil) diff --git a/apple/OmnivoreKit/Sources/App/PDFSupport/PDFViewer.swift b/apple/OmnivoreKit/Sources/App/PDFSupport/PDFViewer.swift index ea7b59c0f..e4a80b185 100644 --- a/apple/OmnivoreKit/Sources/App/PDFSupport/PDFViewer.swift +++ b/apple/OmnivoreKit/Sources/App/PDFSupport/PDFViewer.swift @@ -29,7 +29,7 @@ import Utils @State private var shareLink: ShareLink? init(remoteURL: URL, viewModel: PDFViewerViewModel) { - self.pdfURL = viewModel.dataURL(remoteURL: remoteURL) + self.pdfURL = viewModel.pdfItem.localPdfURL ?? remoteURL self.viewModel = viewModel } diff --git a/apple/OmnivoreKit/Sources/App/PDFSupport/PDFViewerViewModel.swift b/apple/OmnivoreKit/Sources/App/PDFSupport/PDFViewerViewModel.swift index 2d0b70cbf..978063551 100644 --- a/apple/OmnivoreKit/Sources/App/PDFSupport/PDFViewerViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/PDFSupport/PDFViewerViewModel.swift @@ -17,28 +17,6 @@ public final class PDFViewerViewModel: ObservableObject { self.pdfItem = pdfItem } - public func dataURL(remoteURL: URL) -> URL { - if let storedURL = storedURL { - return storedURL - } - - guard let data = pdfItem.documentData else { return remoteURL } - - let subPath = pdfItem.title.isEmpty ? UUID().uuidString : pdfItem.title - - let path = FileManager.default - .urls(for: .cachesDirectory, in: .userDomainMask)[0] - .appendingPathComponent(subPath) - - do { - try data.write(to: path) - storedURL = path - return path - } catch { - return remoteURL - } - } - public func loadHighlightPatches(completion onComplete: @escaping ([String]) -> Void) { onComplete(pdfItem.highlights.map { $0.patch ?? "" }) } diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift index b65ab143f..b2dabb0e6 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift @@ -49,6 +49,9 @@ import Views .onChange(of: viewModel.appliedFilter) { _ in loadItems(isRefresh: true) } + .onChange(of: viewModel.appliedSort) { _ in + loadItems(isRefresh: true) + } .sheet(item: $viewModel.itemUnderLabelEdit) { item in ApplyLabelsView(mode: .item(item), onSave: nil) } @@ -156,11 +159,23 @@ import Views } }, label: { - TextChipButton.makeFilterButton( + TextChipButton.makeMenuButton( title: LinkedItemFilter(rawValue: viewModel.appliedFilter)?.displayName ?? "Filter" ) } ) + Menu( + content: { + ForEach(LinkedItemSort.allCases, id: \.self) { sort in + Button(sort.displayName, action: { viewModel.appliedSort = sort.rawValue }) + } + }, + label: { + TextChipButton.makeMenuButton( + title: LinkedItemSort(rawValue: viewModel.appliedSort)?.displayName ?? "Sort" + ) + } + ) TextChipButton.makeAddLabelButton { showLabelsSheet = true } diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index 8b2db340f..247ccf7db 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -22,9 +22,10 @@ import Views @Published var selectedLinkItem: NSManagedObjectID? @Published var linkRequest: LinkRequest? @Published var showLoadingBar = false + @Published var appliedFilter = LinkedItemFilter.inbox.rawValue + @Published var appliedSort = LinkedItemSort.newest.rawValue @AppStorage(UserDefaultKey.lastSelectedLinkedItemFilter.rawValue) - var appliedFilter = LinkedItemFilter.inbox.rawValue var cursor: String? @@ -111,7 +112,6 @@ import Views private var fetchRequest: NSFetchRequest { let fetchRequest: NSFetchRequest = LinkedItem.fetchRequest() - fetchRequest.sortDescriptors = [NSSortDescriptor(keyPath: \LinkedItem.savedAt, ascending: false)] var subPredicates = [NSPredicate]() @@ -142,6 +142,8 @@ import Views } fetchRequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: subPredicates) + fetchRequest.sortDescriptors = (LinkedItemSort(rawValue: appliedSort) ?? .newest).sortDescriptors + return fetchRequest } @@ -197,7 +199,8 @@ import Views private var searchQuery: String { let filter = LinkedItemFilter(rawValue: appliedFilter) ?? .inbox - var query = "\(filter.queryString)" + let sort = LinkedItemSort(rawValue: appliedSort) ?? .newest + var query = "\(filter.queryString) \(sort.queryString)" if !searchTerm.isEmpty { query.append(" \(searchTerm)") diff --git a/apple/OmnivoreKit/Sources/App/Views/Labels/ApplyLabelsView.swift b/apple/OmnivoreKit/Sources/App/Views/Labels/ApplyLabelsView.swift index 0280b6a2f..c9bc20261 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Labels/ApplyLabelsView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Labels/ApplyLabelsView.swift @@ -34,43 +34,12 @@ struct ApplyLabelsView: View { @Environment(\.presentationMode) private var presentationMode @StateObject var viewModel = LabelsViewModel() + func isSelected(_ label: LinkedItemLabel) -> Bool { + viewModel.selectedLabels.contains(where: { $0.id == label.id }) + } + var innerBody: some View { List { - Section(header: Text("Assigned Labels")) { - if viewModel.selectedLabels.isEmpty { - Text("No labels are currently assigned.") - } - ForEach(viewModel.selectedLabels.applySearchFilter(viewModel.labelSearchFilter), id: \.self) { label in - HStack { - TextChip(feedItemLabel: label) - Spacer() - Button( - action: { - withAnimation { - viewModel.removeLabelFromItem(label) - } - }, - label: { Image(systemName: "xmark.circle").foregroundColor(.appGrayTextContrast) } - ) - } - } - } - Section(header: Text("Available Labels")) { - ForEach(viewModel.unselectedLabels.applySearchFilter(viewModel.labelSearchFilter), id: \.self) { label in - HStack { - TextChip(feedItemLabel: label) - Spacer() - Button( - action: { - withAnimation { - viewModel.addLabelToItem(label) - } - }, - label: { Image(systemName: "plus").foregroundColor(.appGrayTextContrast) } - ) - } - } - } Section { Button( action: { viewModel.showCreateEmailModal = true }, @@ -84,6 +53,28 @@ struct ApplyLabelsView: View { ) .disabled(viewModel.isLoading) } + Section { + ForEach(viewModel.labels.applySearchFilter(viewModel.labelSearchFilter), id: \.self) { label in + Button( + action: { + if isSelected(label) { + viewModel.selectedLabels.removeAll(where: { $0.id == label.id }) + } else { + viewModel.selectedLabels.append(label) + } + }, + label: { + HStack { + TextChip(feedItemLabel: label) + Spacer() + if isSelected(label) { + Image(systemName: "checkmark") + } + } + } + ) + } + } } .navigationTitle(mode.navTitle) #if os(iOS) diff --git a/apple/OmnivoreKit/Sources/App/Views/Labels/FilterByLabelsView.swift b/apple/OmnivoreKit/Sources/App/Views/Labels/FilterByLabelsView.swift index 023765f90..3d2311041 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Labels/FilterByLabelsView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Labels/FilterByLabelsView.swift @@ -12,10 +12,6 @@ struct FilterByLabelsView: View { @EnvironmentObject var dataService: DataService @Environment(\.presentationMode) private var presentationMode -// init(initiallySelected: [LinkedItemLabel], initiallyNegated: [LinkedItemLabel], onSave:) { -// -// } - func isNegated(_ label: LinkedItemLabel) -> Bool { viewModel.negatedLabels.contains(where: { $0.id == label.id }) } diff --git a/apple/OmnivoreKit/Sources/App/Views/Profile/ProfileView.swift b/apple/OmnivoreKit/Sources/App/Views/Profile/ProfileView.swift index 70aa2f66e..2d4eef29d 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Profile/ProfileView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Profile/ProfileView.swift @@ -135,7 +135,7 @@ struct ProfileView: View { } } -private extension BasicWebAppView { +extension BasicWebAppView { static func privacyPolicyWebView(baseURL: URL) -> BasicWebAppView { omnivoreWebView(path: "/app/privacy", baseURL: baseURL) } diff --git a/apple/OmnivoreKit/Sources/App/Views/Registration/RegistrationView.swift b/apple/OmnivoreKit/Sources/App/Views/Registration/RegistrationView.swift index 930f196e5..f7d5a496c 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Registration/RegistrationView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Registration/RegistrationView.swift @@ -84,69 +84,10 @@ final class RegistrationViewModel: ObservableObject { } } -struct RegistrationView: View { - @EnvironmentObject var authenticator: Authenticator - @EnvironmentObject var dataService: DataService - @Environment(\.horizontalSizeClass) var horizontalSizeClass - @StateObject private var viewModel = RegistrationViewModel() - - var authenticationView: some View { - VStack(spacing: 0) { - VStack(spacing: 28) { - if horizontalSizeClass == .regular { - Spacer() - } - - VStack(alignment: .center, spacing: 16) { - Text(LocalText.registrationViewHeadline) - .font(.appTitle) - .multilineTextAlignment(.center) - .padding(.bottom, horizontalSizeClass == .compact ? 0 : 50) - .padding(.top, horizontalSizeClass == .compact ? 30 : 0) - - AppleSignInButton { - viewModel.handleAppleSignInCompletion(result: $0, authenticator: authenticator) - } - - if AppKeys.sharedInstance?.iosClientGoogleId != nil { - GoogleAuthButton { - viewModel.handleGoogleAuth(authenticator: authenticator) - } - } - } - - if let loginError = viewModel.loginError { - LoginErrorMessageView(loginError: loginError) - } - - Spacer() - } - .frame(maxWidth: 316) - .padding(.horizontal, 16) - } - } - - var body: some View { - if let registrationState = viewModel.registrationState { - if case let RegistrationViewModel.RegistrationState.createProfile(userProfile) = registrationState { - CreateProfileView(userProfile: userProfile) - } else if case let RegistrationViewModel.RegistrationState.newAppleSignUp(userProfile) = registrationState { - NewAppleSignupView( - userProfile: userProfile, - showProfileEditView: { viewModel.registrationState = .createProfile(userProfile: userProfile) } - ) - } else { - authenticationView - } - } else { - authenticationView - } - } -} - private func presentingViewController() -> PlatformViewController? { #if os(iOS) - return UIApplication.shared.windows + let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene + return scene?.windows .filter(\.isKeyWindow) .first? .rootViewController diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReader.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReader.swift index 3c9e2cc75..c24689f14 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReader.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReader.swift @@ -13,8 +13,11 @@ import WebKit let webViewActionHandler: (WKScriptMessage, WKScriptMessageReplyHandler?) -> Void let navBarVisibilityRatioUpdater: (Double) -> Void - @Binding var increaseFontActionID: UUID? - @Binding var decreaseFontActionID: UUID? + @Binding var updateFontFamilyActionID: UUID? + @Binding var updateFontActionID: UUID? + @Binding var updateTextContrastActionID: UUID? + @Binding var updateMarginActionID: UUID? + @Binding var updateLineHeightActionID: UUID? @Binding var annotationSaveTransactionID: UUID? @Binding var showNavBarActionID: UUID? @Binding var shareActionID: UUID? @@ -29,6 +32,16 @@ import WebKit return storedSize <= 1 ? UITraitCollection.current.preferredWebFontSize : storedSize } + func lineHeight() -> Int { + let storedSize = UserDefaults.standard.integer(forKey: UserDefaultKey.preferredWebLineSpacing.rawValue) + return storedSize <= 1 ? 150 : storedSize + } + + func margin() -> Int { + let storedSize = UserDefaults.standard.integer(forKey: UserDefaultKey.preferredWebMargin.rawValue) + return storedSize <= 1 ? 360 : storedSize + } + func makeUIView(context: Context) -> WKWebView { let webView = WebViewManager.shared() let contentController = WKUserContentController() @@ -64,17 +77,32 @@ import WebKit func updateUIView(_ webView: WKWebView, context: Context) { if annotationSaveTransactionID != context.coordinator.lastSavedAnnotationID { context.coordinator.lastSavedAnnotationID = annotationSaveTransactionID - (webView as? WebView)?.saveAnnotation(annotation: annotation) + (webView as? WebView)?.dispatchEvent(.saveAnnotation(annotation: annotation)) } - if increaseFontActionID != context.coordinator.previousIncreaseFontActionID { - context.coordinator.previousIncreaseFontActionID = increaseFontActionID - (webView as? WebView)?.increaseFontSize() + if updateFontFamilyActionID != context.coordinator.previousUpdateFontFamilyActionID { + context.coordinator.previousUpdateFontFamilyActionID = updateFontFamilyActionID + (webView as? WebView)?.updateFontFamily() } - if decreaseFontActionID != context.coordinator.previousDecreaseFontActionID { - context.coordinator.previousDecreaseFontActionID = decreaseFontActionID - (webView as? WebView)?.decreaseFontSize() + if updateFontActionID != context.coordinator.previousUpdateFontActionID { + context.coordinator.previousUpdateFontActionID = updateFontActionID + (webView as? WebView)?.updateFontSize() + } + + if updateTextContrastActionID != context.coordinator.previousUpdateTextContrastActionID { + context.coordinator.previousUpdateTextContrastActionID = updateTextContrastActionID + (webView as? WebView)?.updateTextContrast() + } + + if updateMarginActionID != context.coordinator.previousUpdateMarginActionID { + context.coordinator.previousUpdateMarginActionID = updateMarginActionID + (webView as? WebView)?.updateMargin() + } + + if updateLineHeightActionID != context.coordinator.previousUpdateLineHeightActionID { + context.coordinator.previousUpdateLineHeightActionID = updateLineHeightActionID + (webView as? WebView)?.updateLineHeight() } if showNavBarActionID != context.coordinator.previousShowNavBarActionID { @@ -110,13 +138,19 @@ import WebKit } func loadContent(webView: WKWebView) { + let fontFamilyValue = UserDefaults.standard.string(forKey: UserDefaultKey.preferredWebFont.rawValue) + let fontFamily = fontFamilyValue.flatMap { WebFont(rawValue: $0) } ?? .inter + webView.loadHTMLString( WebReaderContent( htmlContent: htmlContent, highlightsJSONString: highlightsJSONString, item: item, isDark: UITraitCollection.current.userInterfaceStyle == .dark, - fontSize: fontSize() + fontSize: fontSize(), + lineHeight: lineHeight(), + margin: margin(), + fontFamily: fontFamily ) .styledContent, baseURL: ViewsPackage.bundleURL diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift index 754440c17..f984ad1d8 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift @@ -8,15 +8,18 @@ import WebKit struct WebReaderContainerView: View { let item: LinkedItem - @State private var showFontSizePopover = false + @State private var showPreferencesPopover = false @State private var showLabelsModal = false @State var showHighlightAnnotationModal = false @State var safariWebLink: SafariWebLink? @State private var navBarVisibilityRatio = 1.0 @State private var showDeleteConfirmation = false @State private var progressViewOpacity = 0.0 - @State var increaseFontActionID: UUID? - @State var decreaseFontActionID: UUID? + @State var updateFontFamilyActionID: UUID? + @State var updateFontActionID: UUID? + @State var updateTextContrastActionID: UUID? + @State var updateMarginActionID: UUID? + @State var updateLineHeightActionID: UUID? @State var annotationSaveTransactionID: UUID? @State var showNavBarActionID: UUID? @State var shareActionID: UUID? @@ -26,13 +29,6 @@ import WebKit @Environment(\.presentationMode) var presentationMode: Binding @StateObject var viewModel = WebReaderViewModel() - var fontAdjustmentPopoverView: some View { - FontSizeAdjustmentPopoverView( - increaseFontAction: { increaseFontActionID = UUID() }, - decreaseFontAction: { decreaseFontActionID = UUID() } - ) - } - func webViewActionHandler(message: WKScriptMessage, replyHandler: WKScriptMessageReplyHandler?) { if let replyHandler = replyHandler { viewModel.webViewActionWithReplyHandler( @@ -75,7 +71,7 @@ import WebKit .scaleEffect(navBarVisibilityRatio) Spacer() Button( - action: { showFontSizePopover.toggle() }, + action: { showPreferencesPopover.toggle() }, label: { Image(systemName: "textformat.size") .font(.appTitleTwo) @@ -122,9 +118,6 @@ import WebKit .frame(height: readerViewNavBarHeight * navBarVisibilityRatio) .opacity(navBarVisibilityRatio) .background(Color.systemBackground) - .onTapGesture { - showFontSizePopover = false - } .alert("Are you sure?", isPresented: $showDeleteConfirmation) { Button("Remove Link", role: .destructive) { Snackbar.show(message: "Link removed") @@ -153,13 +146,13 @@ import WebKit }, webViewActionHandler: webViewActionHandler, navBarVisibilityRatioUpdater: { - if $0 < 1 { - showFontSizePopover = false - } navBarVisibilityRatio = $0 }, - increaseFontActionID: $increaseFontActionID, - decreaseFontActionID: $decreaseFontActionID, + updateFontFamilyActionID: $updateFontFamilyActionID, + updateFontActionID: $updateFontActionID, + updateTextContrastActionID: $updateTextContrastActionID, + updateMarginActionID: $updateMarginActionID, + updateLineHeightActionID: $updateLineHeightActionID, annotationSaveTransactionID: $annotationSaveTransactionID, showNavBarActionID: $showNavBarActionID, shareActionID: $shareActionID, @@ -200,33 +193,22 @@ import WebKit await viewModel.loadContent(dataService: dataService, itemID: item.unwrappedID) } } - if showFontSizePopover { - VStack { - Color.clear - .contentShape(Rectangle()) - .frame(height: LinkItemDetailView.navBarHeight) - HStack { - Spacer() - fontAdjustmentPopoverView - .background(Color.appButtonBackground) - .cornerRadius(8) - .padding(.trailing, 44) - } - Spacer() - } - .background( - Color.clear - .contentShape(Rectangle()) - .onTapGesture { - showFontSizePopover = false - } - ) - } VStack(spacing: 0) { navBar Spacer() } - }.onDisappear { + } + .formSheet(isPresented: $showPreferencesPopover, useSmallDetent: false) { + WebPreferencesPopoverView( + updateFontFamilyAction: { updateFontFamilyActionID = UUID() }, + updateFontAction: { updateFontActionID = UUID() }, + updateTextContrastAction: { updateTextContrastActionID = UUID() }, + updateMarginAction: { updateMarginActionID = UUID() }, + updateLineHeightAction: { updateLineHeightActionID = UUID() }, + dismissAction: { showPreferencesPopover = false } + ) + } + .onDisappear { // Clear the shared webview content when exiting WebViewManager.shared().loadHTMLString("", baseURL: nil) } diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContent.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContent.swift index 1b100683f..87902f01a 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContent.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContent.swift @@ -1,26 +1,36 @@ import Foundation import Models import Utils +import Views struct WebReaderContent { let textFontSize: Int + let lineHeight: Int + let margin: Int let htmlContent: String let highlightsJSONString: String let item: LinkedItem let themeKey: String + let fontFamily: WebFont init( htmlContent: String, highlightsJSONString: String, item: LinkedItem, isDark: Bool, - fontSize: Int + fontSize: Int, + lineHeight: Int, + margin: Int, + fontFamily: WebFont ) { self.textFontSize = fontSize + self.lineHeight = lineHeight + self.margin = margin self.htmlContent = htmlContent self.highlightsJSONString = highlightsJSONString self.item = item self.themeKey = isDark ? "Gray" : "LightGray" + self.fontFamily = fontFamily } // swiftlint:disable line_length @@ -71,6 +81,9 @@ struct WebReaderContent { } window.fontSize = \(textFontSize) + window.fontFamily = "\(fontFamily.rawValue)" + window.margin = \(margin) + window.lineHeight = \(lineHeight) window.localStorage.setItem("theme", "\(themeKey)") diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderCoordinator.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderCoordinator.swift index e88339d84..4d08aeeaf 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderCoordinator.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderCoordinator.swift @@ -15,8 +15,11 @@ final class WebReaderCoordinator: NSObject { var linkHandler: (URL) -> Void = { _ in } var needsReload = false var lastSavedAnnotationID: UUID? - var previousIncreaseFontActionID: UUID? - var previousDecreaseFontActionID: UUID? + var previousUpdateFontFamilyActionID: UUID? + var previousUpdateFontActionID: UUID? + var previousUpdateTextContrastActionID: UUID? + var previousUpdateMarginActionID: UUID? + var previousUpdateLineHeightActionID: UUID? var previousShowNavBarActionID: UUID? var previousShareActionID: UUID? var updateNavBarVisibilityRatio: (Double) -> Void = { _ in } diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderLoadingContainer.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderLoadingContainer.swift index 087be99c0..046d0673a 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderLoadingContainer.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderLoadingContainer.swift @@ -24,6 +24,8 @@ import Utils guard let username = username else { return } + // If the page was locally created, make sure they are synced before we pull content + await dataService.syncUnsyncedArticleContent(itemID: requestID) await fetchLinkedItem(dataService: dataService, requestID: requestID, username: username) } diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderViewModel.swift index 1a03c96dd..8255a1289 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderViewModel.swift @@ -12,16 +12,19 @@ struct SafariWebLink: Identifiable { @Published var articleContent: ArticleContent? @Published var errorMessage: String? - func loadContent(dataService: DataService, itemID: String) async { + func loadContent(dataService: DataService, itemID: String, retryCount: Int = 0) async { errorMessage = nil do { articleContent = try await dataService.fetchArticleContent(itemID: itemID) } catch { + if retryCount == 0 { + return await loadContent(dataService: dataService, itemID: itemID, retryCount: 1) + } if let fetchError = error as? ContentFetchError { switch fetchError { case .network: - errorMessage = "We were unable to retrieve your content. Please ccheck network connectivity and try again." + errorMessage = "We were unable to retrieve your content. Please check network connectivity and try again." default: errorMessage = "We were unable to parse your content." } diff --git a/apple/OmnivoreKit/Sources/App/Views/WelcomeView.swift b/apple/OmnivoreKit/Sources/App/Views/WelcomeView.swift index 96a5e7521..4a45a70e3 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WelcomeView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WelcomeView.swift @@ -7,11 +7,19 @@ import Views struct WelcomeView: View { @EnvironmentObject var dataService: DataService + @EnvironmentObject var authenticator: Authenticator @Environment(\.horizontalSizeClass) var horizontalSizeClass + + @StateObject private var viewModel = RegistrationViewModel() + @State private var showRegistrationView = false - @State private var isKeyboardOnScreen = false @State private var showDebugModal = false + @State private var showTermsLinks = false + @State private var showTermsModal = false + @State private var showPrivacyModal = false + @State private var showAboutPage = false @State private var selectedEnvironment = AppEnvironment.initialAppEnvironment + @State private var containerSize: CGSize = .zero func handleHiddenGestureAction() { if !Bundle.main.isAppStoreBuild { @@ -19,68 +27,183 @@ struct WelcomeView: View { } } - @ViewBuilder func userInteractiveView(width: CGFloat) -> some View { + var headlineText: some View { Group { - if showRegistrationView { - RegistrationView() + if horizontalSizeClass == .compact { + Text("Everything you read. Safe, organized, and easy to share.") } else { - GetStartedView(showRegistrationView: $showRegistrationView) + Text("Everything you read. Safe,\norganized, and easy to share.") } } - .frame(width: width) - .zIndex(2) + .font(.appLargeTitle) } - @ViewBuilder func primaryContent() -> some View { - if horizontalSizeClass == .compact { - GeometryReader { geometry in - ZStack(alignment: .leading) { - Color.systemBackground - .edgesIgnoringSafeArea(.all) + var headlineView: some View { + VStack(alignment: .leading, spacing: 8) { + headlineText - if geometry.size.width < geometry.size.height, !isKeyboardOnScreen { - VStack { - Color.appDeepBackground.frame(height: 100) - Spacer() - } - .edgesIgnoringSafeArea(.all) - } - - VStack { - if geometry.size.width < geometry.size.height, !isKeyboardOnScreen { - RegistrationHeroImageView(tapGestureHandler: handleHiddenGestureAction) - } - userInteractiveView(width: geometry.size.width) - Spacer() + Button( + action: { showAboutPage = true }, + label: { + HStack(spacing: 4) { + Text("Learn more") + Image(systemName: "arrow.right") } + .font(.appTitleThree) } + ) + .foregroundColor(.appGrayTextContrast) + } + } + + var footerView: some View { + Group { + Text("By signing up, you agree to Omnivore’s\n") + + Text("Terms of Service").underline() + + Text(" and ") + + Text("Privacy Policy").underline() + } + .font(.appSubheadline) + .confirmationDialog("", isPresented: $showTermsLinks, titleVisibility: .hidden) { + Button("View Terms of Service") { + showTermsModal = true } - } else { - GeometryReader { geometry in - ZStack(alignment: .leading) { - SplitColorBackground(width: geometry.size.width) - VStack { - TitleLogoView(handleHiddenGestureAction: handleHiddenGestureAction) - Spacer() - } - .padding() + Button("View Privacy Policy") { + showPrivacyModal = true + } + } + .sheet(isPresented: $showPrivacyModal) { + VStack { + HStack { + Spacer() + Button( + action: { + showPrivacyModal = false + }, + label: { + Image(systemName: "xmark.circle").foregroundColor(.appGrayTextContrast) + } + ) + } + .padding() + BasicWebAppView.privacyPolicyWebView(baseURL: dataService.appEnvironment.webAppBaseURL) + } + } + .sheet(isPresented: $showTermsModal) { + VStack { + HStack { + Spacer() + Button( + action: { + showTermsModal = false + }, + label: { + Image(systemName: "xmark.circle").foregroundColor(.appGrayTextContrast) + } + ) + } + .padding() + BasicWebAppView.termsConditionsWebView(baseURL: dataService.appEnvironment.webAppBaseURL) + } + } + .sheet(isPresented: $showAboutPage) { + if let url = URL(string: "https://omnivore.app/about") { + SafariView(url: url) + } + } + .onTapGesture { + showTermsLinks = true + } + } - HStack(spacing: 0) { - userInteractiveView(width: geometry.size.width * 0.5) - ReadingIllustrationXXLView(width: geometry.size.width * 0.5) + var logoView: some View { + Image.omnivoreTitleLogo + .gesture( + TapGesture(count: 2) + .onEnded { + if !Bundle.main.isAppStoreBuild { + showDebugModal = true + } } + ) + } + + var authProviderButtonStack: some View { + let useHorizontalLayout = containerSize.width > 400 + + let buttonGroup = Group { + AppleSignInButton { + viewModel.handleAppleSignInCompletion(result: $0, authenticator: authenticator) + } + + if AppKeys.sharedInstance?.iosClientGoogleId != nil { + GoogleAuthButton { + viewModel.handleGoogleAuth(authenticator: authenticator) } } } + + return + VStack(alignment: .center, spacing: 16) { + if useHorizontalLayout { + HStack { buttonGroup } + } else { + buttonGroup + } + + if let loginError = viewModel.loginError { + HStack { + LoginErrorMessageView(loginError: loginError) + Spacer() + } + } + } } public var body: some View { - primaryContent() - .sheet(isPresented: $showDebugModal) { - DebugMenuView(selectedEnvironment: $selectedEnvironment) + ZStack(alignment: .leading) { + Color.appBackground + .edgesIgnoringSafeArea(.all) + .modifier(SizeModifier()) + .onPreferenceChange(SizePreferenceKey.self) { + self.containerSize = $0 + } + if let registrationState = viewModel.registrationState { + if case let RegistrationViewModel.RegistrationState.createProfile(userProfile) = registrationState { + CreateProfileView(userProfile: userProfile) + } else if case let RegistrationViewModel.RegistrationState.newAppleSignUp(userProfile) = registrationState { + NewAppleSignupView( + userProfile: userProfile, + showProfileEditView: { viewModel.registrationState = .createProfile(userProfile: userProfile) } + ) + } else { + EmptyView() // will never be called + } + } else { + VStack(alignment: .leading, spacing: containerSize.height < 500 ? 12 : 50) { + logoView + .padding(.bottom, 20) + headlineView + if containerSize.width > 400 { + authProviderButtonStack + } else { + HStack { + Spacer() + authProviderButtonStack + Spacer() + } + } + footerView + Spacer() + } + .padding() + .sheet(isPresented: $showDebugModal) { + DebugMenuView(selectedEnvironment: $selectedEnvironment) + } } - .onReceive(Publishers.keyboardHeight) { isKeyboardOnScreen = $0 > 1 } - .onAppear { selectedEnvironment = dataService.appEnvironment } + } + .preferredColorScheme(.light) + .task { selectedEnvironment = dataService.appEnvironment } } } diff --git a/apple/OmnivoreKit/Sources/Models/CoreData/CoreDataModel.xcdatamodeld/CoreDataModel.xcdatamodel/contents b/apple/OmnivoreKit/Sources/Models/CoreData/CoreDataModel.xcdatamodeld/CoreDataModel.xcdatamodel/contents index 3556a931c..63bdc0cd9 100644 --- a/apple/OmnivoreKit/Sources/Models/CoreData/CoreDataModel.xcdatamodeld/CoreDataModel.xcdatamodel/contents +++ b/apple/OmnivoreKit/Sources/Models/CoreData/CoreDataModel.xcdatamodeld/CoreDataModel.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -29,7 +29,9 @@ + + @@ -41,6 +43,7 @@ + @@ -86,7 +89,7 @@ - + diff --git a/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift b/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift index 934e545c5..30935ec9a 100644 --- a/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift +++ b/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift @@ -16,6 +16,7 @@ public struct JSONArticle: Decodable { public let id: String public let title: String public let createdAt: Date + public let updatedAt: Date public let savedAt: Date public let image: String public let readingProgressPercent: Double @@ -116,6 +117,7 @@ public extension LinkedItem { } guard context.hasChanges else { return } + self.updatedAt = Date() do { try context.save() diff --git a/apple/OmnivoreKit/Sources/Models/DataModels/PDFItem.swift b/apple/OmnivoreKit/Sources/Models/DataModels/PDFItem.swift index 2953a2f73..3380e48f1 100644 --- a/apple/OmnivoreKit/Sources/Models/DataModels/PDFItem.swift +++ b/apple/OmnivoreKit/Sources/Models/DataModels/PDFItem.swift @@ -5,7 +5,7 @@ public struct PDFItem { public let objectID: NSManagedObjectID public let itemID: String public let pdfURL: URL? - public let documentData: Data? + public let localPdfURL: URL? public let title: String public let slug: String public let readingProgress: Double @@ -22,7 +22,7 @@ public struct PDFItem { objectID: item.objectID, itemID: item.unwrappedID, pdfURL: URL(string: item.unwrappedPageURLString), - documentData: item.pdfData, + localPdfURL: item.localPdfURL.flatMap { URL(string: $0) }, title: item.unwrappedID, slug: item.unwrappedSlug, readingProgress: item.readingProgress, diff --git a/apple/OmnivoreKit/Sources/Models/LinkedItemSort.swift b/apple/OmnivoreKit/Sources/Models/LinkedItemSort.swift new file mode 100644 index 000000000..ba0919203 --- /dev/null +++ b/apple/OmnivoreKit/Sources/Models/LinkedItemSort.swift @@ -0,0 +1,54 @@ +import Foundation + +public enum LinkedItemSort: String, CaseIterable { + case newest + case oldest + // case recentlyRead + case recentlyPublished +// case relevance +} + +public extension LinkedItemSort { + var displayName: String { + switch self { + case .newest: + return "Newest" + case .oldest: + return "Oldest" +// case .recentlyRead: +// return "Recently Read" + case .recentlyPublished: + return "Recently Published" +// case .relevance: +// return "Relevance" + } + } + + var queryString: String { + switch self { + case .newest: + return "sort:saved" + case .oldest: + return "sort:saved-ASC" +// case .recentlyRead: +// return "sort:updated" + case .recentlyPublished: + return "sort:published" +// case .relevance: +// return "relevance" + } + } + + var sortDescriptors: [NSSortDescriptor] { + switch self { + case .newest /* , .relevance */: + return [NSSortDescriptor(keyPath: \LinkedItem.createdAt, ascending: false)] + case .oldest: + return [NSSortDescriptor(keyPath: \LinkedItem.createdAt, ascending: true)] +// case .recentlyRead: +// return [NSSortDescriptor(keyPath: \LinkedItem.updatedAt, ascending: false)] + case .recentlyPublished: + return [NSSortDescriptor(keyPath: \LinkedItem.publishDate, ascending: false)] + } + } +} diff --git a/apple/OmnivoreKit/Sources/Models/PageScrapePayload.swift b/apple/OmnivoreKit/Sources/Models/PageScrapePayload.swift index 27b051346..ee4435cc2 100644 --- a/apple/OmnivoreKit/Sources/Models/PageScrapePayload.swift +++ b/apple/OmnivoreKit/Sources/Models/PageScrapePayload.swift @@ -9,16 +9,10 @@ import UniformTypeIdentifiers let URLREGEX = #"[(http(s)?):\/\/(www\.)?a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)"# public struct PageScrapePayload { - public struct HTMLPayload { - let url: String - let title: String? - let html: String - } - public enum ContentType { case none - case html(html: String, title: String?) - case pdf(data: Data) + case html(html: String, title: String?, iconURL: String?) + case pdf(localUrl: URL) } public let url: String @@ -29,14 +23,14 @@ public struct PageScrapePayload { self.contentType = .none } - init(url: String, pdfData: Data) { + init(url: String, localUrl: URL) { self.url = url - self.contentType = .pdf(data: pdfData) + self.contentType = .pdf(localUrl: localUrl) } - init(url: String, title: String?, html: String) { + init(url: String, title: String?, html: String, iconURL: String? = nil) { self.url = url - self.contentType = .html(html: html, title: title) + self.contentType = .html(html: html, title: title, iconURL: iconURL) } } @@ -248,12 +242,28 @@ private extension PageScrapePayload { return nil } + static func sharedContainerURL() -> URL { + FileManager.default.containerURL( + forSecurityApplicationGroupIdentifier: "group.app.omnivoreapp" + )! + } + static func makeFromURL(_ url: URL) -> PageScrapePayload? { if url.isFileURL { let type = try? url.resourceValues(forKeys: [.typeIdentifierKey]).typeIdentifier - if type == UTType.pdf.identifier, let data = try? Data(contentsOf: url) { - return PageScrapePayload(url: url.absoluteString, pdfData: data) + if type == UTType.pdf.identifier { + // Copy PDFs into a temporary file where they are staged for processing. + var dest = sharedContainerURL() + let localFile = UUID().uuidString.lowercased() + ".pdf" + dest.appendPathComponent(localFile) + do { + try FileManager.default.copyItem(at: url, to: dest) + return PageScrapePayload(url: url.absoluteString, localUrl: dest) + } catch { + print("error copying file locally", error) + } } + // TODO: // Don't try to handle file URLs that are not PDFs. // In the future we can add image and other file type support here return nil @@ -264,8 +274,9 @@ private extension PageScrapePayload { static func makeFromDictionary(_ dictionary: NSDictionary) -> PageScrapePayload? { let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as? NSDictionary guard let url = results?["url"] as? String else { return nil } - let html = results?["documentHTML"] as? String + let html = results?["originalHTML"] as? String let title = results?["title"] as? String + let iconURL = results?["iconURL"] as? String let contentType = results?["contentType"] as? String // If we were not able to capture any HTML, treat this as a URL and @@ -281,7 +292,7 @@ private extension PageScrapePayload { } if let html = html { - return PageScrapePayload(url: url, title: title, html: html) + return PageScrapePayload(url: url, title: title, html: html, iconURL: iconURL) } return PageScrapePayload(url: url) diff --git a/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift b/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift index 8c8f02ed1..123faa838 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift @@ -1,8 +1,11 @@ import Combine import CoreData +import CoreImage import Foundation import Models import OSLog +import QuickLookThumbnailing +import UIKit import Utils let logger = Logger(subsystem: "app.omnivore", category: "data-service") @@ -12,10 +15,10 @@ public final class DataService: ObservableObject { public static var showIntercomMessenger: (() -> Void)? public let appEnvironment: AppEnvironment - let networker: Networker + public let networker: Networker var persistentContainer: PersistentContainer - var backgroundContext: NSManagedObjectContext + public var backgroundContext: NSManagedObjectContext var subscriptions = Set() public var viewContext: NSManagedObjectContext { @@ -29,7 +32,7 @@ public final class DataService: ObservableObject { self.backgroundContext = persistentContainer.newBackgroundContext() backgroundContext.mergePolicy = NSMergePolicy.mergeByPropertyObjectTrump - if isFirstTimeRunningNewAppVersion() { + if isFirstTimeRunningNewAppBuild() { resetCoreData() } else { persistentContainer.loadPersistentStores { _, error in @@ -88,13 +91,85 @@ public final class DataService: ObservableObject { backgroundContext = persistentContainer.newBackgroundContext() } - private func isFirstTimeRunningNewAppVersion() -> Bool { - let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") - guard let appVersion = appVersion as? String else { return false } + private func isFirstTimeRunningNewAppBuild() -> Bool { + let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String + let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String + + guard let appVersion = appVersion, let buildNumber = buildNumber else { return false } let lastUsedAppVersion = UserDefaults.standard.string(forKey: UserDefaultKey.lastUsedAppVersion.rawValue) - let isFirstRun = (lastUsedAppVersion ?? "unknown") != appVersion UserDefaults.standard.set(appVersion, forKey: UserDefaultKey.lastUsedAppVersion.rawValue) - return isFirstRun + + let lastUsedAppBuildNumber = UserDefaults.standard.string(forKey: UserDefaultKey.lastUsedAppBuildNumber.rawValue) + UserDefaults.standard.set(buildNumber, forKey: UserDefaultKey.lastUsedAppBuildNumber.rawValue) + + let isFirstRunOfVersion = (lastUsedAppVersion ?? "unknown") != appVersion + let isFirstRunWithBuildNumber = (lastUsedAppBuildNumber ?? "unknown") != buildNumber + + return isFirstRunOfVersion || isFirstRunWithBuildNumber + } + + public func persistPageScrapePayload(_ pageScrape: PageScrapePayload, requestId: String) async throws { + let normalizedURL = normalizeURL(pageScrape.url) + + try await backgroundContext.perform { [weak self] in + guard let self = self else { return } + let fetchRequest: NSFetchRequest = LinkedItem.fetchRequest() + fetchRequest.predicate = NSPredicate(format: "pageURLString = %@", normalizedURL) + + let currentTime = Date() + let existingItem = try? self.backgroundContext.fetch(fetchRequest).first + let linkedItem = existingItem ?? LinkedItem(entity: LinkedItem.entity(), insertInto: self.backgroundContext) + + linkedItem.id = existingItem?.unwrappedID ?? requestId + linkedItem.title = normalizedURL + linkedItem.pageURLString = normalizedURL + linkedItem.serverSyncStatus = Int64(ServerSyncStatus.needsCreation.rawValue) + linkedItem.savedAt = currentTime + linkedItem.createdAt = currentTime + linkedItem.isArchived = false + + linkedItem.imageURLString = nil + linkedItem.onDeviceImageURLString = nil + linkedItem.descriptionText = nil + linkedItem.publisherURLString = nil + linkedItem.author = nil + linkedItem.publishDate = nil + + if let currentViewer = self.currentViewer { + linkedItem.slug = "\(currentViewer)/\(requestId)" + } else { + // Technically this is invalid, but I don't think slug is used at all locally anymore + linkedItem.slug = requestId + } + + switch pageScrape.contentType { + case let .pdf(localUrl): + linkedItem.contentReader = "PDF" + linkedItem.localPdfURL = localUrl.absoluteString + linkedItem.title = PDFUtils.titleFromPdfFile(pageScrape.url) +// let thumbnailUrl = PDFUtils.thumbnailUrl(localUrl: localUrl) +// linkedItem.imageURLString = await PDFUtils.createThumbnailFor(inputUrl: localUrl, at: thumbnailUrl) + + case let .html(html: html, title: title, iconURL: iconURL): + linkedItem.contentReader = "WEB" + linkedItem.originalHtml = html + linkedItem.imageURLString = iconURL + linkedItem.title = title ?? PDFUtils.titleFromPdfFile(pageScrape.url) + case .none: + print("SAVING URL", linkedItem.unwrappedPageURLString) + linkedItem.contentReader = "WEB" + } + + do { + try self.backgroundContext.save() + logger.debug("ArticleContent saved succesfully") + } catch { + self.backgroundContext.rollback() + + print("Failed to save ArticleContent", error.localizedDescription, error) + throw error + } + } } } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/GQLSchema.swift b/apple/OmnivoreKit/Sources/Services/DataService/GQLSchema.swift index bc0c03406..566e4e9c2 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/GQLSchema.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/GQLSchema.swift @@ -21,21 +21,17 @@ extension Objects.Subscription: GraphQLWebSocketOperation { enum Objects {} extension Objects { - struct PageInfo { - let __typename: TypeName = .pageInfo - let endCursor: [String: String] - let hasNextPage: [String: Bool] - let hasPreviousPage: [String: Bool] - let startCursor: [String: String] - let totalCount: [String: Int] + struct AddPopularReadError { + let __typename: TypeName = .addPopularReadError + let errorCodes: [String: [Enums.AddPopularReadErrorCode]] enum TypeName: String, Codable { - case pageInfo = "PageInfo" + case addPopularReadError = "AddPopularReadError" } } } -extension Objects.PageInfo: Decodable { +extension Objects.AddPopularReadError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -47,24 +43,8 @@ extension Objects.PageInfo: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "endCursor": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "hasNextPage": - if let value = try container.decode(Bool?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "hasPreviousPage": - if let value = try container.decode(Bool?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "startCursor": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "totalCount": - if let value = try container.decode(Int?.self, forKey: codingKey) { + case "errorCodes": + if let value = try container.decode([Enums.AddPopularReadErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -77,114 +57,46 @@ extension Objects.PageInfo: Decodable { } } - endCursor = map["endCursor"] - hasNextPage = map["hasNextPage"] - hasPreviousPage = map["hasPreviousPage"] - startCursor = map["startCursor"] - totalCount = map["totalCount"] + errorCodes = map["errorCodes"] } } -extension Fields where TypeLock == Objects.PageInfo { - func hasNextPage() throws -> Bool { +extension Fields where TypeLock == Objects.AddPopularReadError { + func errorCodes() throws -> [Enums.AddPopularReadErrorCode] { let field = GraphQLField.leaf( - name: "hasNextPage", + name: "errorCodes", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.hasNextPage[field.alias!] { + if let data = data.errorCodes[field.alias!] { return data } throw HttpError.badpayload case .mocking: - return Bool.mockValue - } - } - - func hasPreviousPage() throws -> Bool { - let field = GraphQLField.leaf( - name: "hasPreviousPage", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.hasPreviousPage[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Bool.mockValue - } - } - - func startCursor() throws -> String? { - let field = GraphQLField.leaf( - name: "startCursor", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.startCursor[field.alias!] - case .mocking: - return nil - } - } - - func endCursor() throws -> String? { - let field = GraphQLField.leaf( - name: "endCursor", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.endCursor[field.alias!] - case .mocking: - return nil - } - } - - func totalCount() throws -> Int? { - let field = GraphQLField.leaf( - name: "totalCount", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.totalCount[field.alias!] - case .mocking: - return nil + return [] } } } extension Selection where TypeLock == Never, Type == Never { - typealias PageInfo = Selection + typealias AddPopularReadError = Selection } extension Objects { - struct ArticleEdge { - let __typename: TypeName = .articleEdge - let cursor: [String: String] - let node: [String: Objects.Article] + struct AddPopularReadSuccess { + let __typename: TypeName = .addPopularReadSuccess + let pageId: [String: String] enum TypeName: String, Codable { - case articleEdge = "ArticleEdge" + case addPopularReadSuccess = "AddPopularReadSuccess" } } } -extension Objects.ArticleEdge: Decodable { +extension Objects.AddPopularReadSuccess: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -196,14 +108,10 @@ extension Objects.ArticleEdge: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "cursor": + case "pageId": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "node": - if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } default: throw DecodingError.dataCorrupted( DecodingError.Context( @@ -214,22 +122,21 @@ extension Objects.ArticleEdge: Decodable { } } - cursor = map["cursor"] - node = map["node"] + pageId = map["pageId"] } } -extension Fields where TypeLock == Objects.ArticleEdge { - func cursor() throws -> String { +extension Fields where TypeLock == Objects.AddPopularReadSuccess { + func pageId() throws -> String { let field = GraphQLField.leaf( - name: "cursor", + name: "pageId", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.cursor[field.alias!] { + if let data = data.pageId[field.alias!] { return data } throw HttpError.badpayload @@ -237,236 +144,30 @@ extension Fields where TypeLock == Objects.ArticleEdge { return String.mockValue } } - - func node(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "node", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.node[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } } extension Selection where TypeLock == Never, Type == Never { - typealias ArticleEdge = Selection + typealias AddPopularReadSuccess = Selection } extension Objects { - struct FeedArticleEdge { - let __typename: TypeName = .feedArticleEdge - let cursor: [String: String] - let node: [String: Objects.FeedArticle] - - enum TypeName: String, Codable { - case feedArticleEdge = "FeedArticleEdge" - } - } -} - -extension Objects.FeedArticleEdge: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "cursor": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "node": - if let value = try container.decode(Objects.FeedArticle?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - cursor = map["cursor"] - node = map["node"] - } -} - -extension Fields where TypeLock == Objects.FeedArticleEdge { - func cursor() throws -> String { - let field = GraphQLField.leaf( - name: "cursor", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.cursor[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func node(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "node", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.node[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias FeedArticleEdge = Selection -} - -extension Objects { - struct ArticlesSuccess { - let __typename: TypeName = .articlesSuccess - let edges: [String: [Objects.ArticleEdge]] - let pageInfo: [String: Objects.PageInfo] - - enum TypeName: String, Codable { - case articlesSuccess = "ArticlesSuccess" - } - } -} - -extension Objects.ArticlesSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "edges": - if let value = try container.decode([Objects.ArticleEdge]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "pageInfo": - if let value = try container.decode(Objects.PageInfo?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - edges = map["edges"] - pageInfo = map["pageInfo"] - } -} - -extension Fields where TypeLock == Objects.ArticlesSuccess { - func edges(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "edges", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.edges[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func pageInfo(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "pageInfo", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.pageInfo[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ArticlesSuccess = Selection -} - -extension Objects { - struct User { - let __typename: TypeName = .user - let followersCount: [String: Int] - let friendsCount: [String: Int] + struct ApiKey { + let __typename: TypeName = .apiKey + let createdAt: [String: DateTime] + let expiresAt: [String: DateTime] let id: [String: String] - let isFriend: [String: Bool] - let isFullUser: [String: Bool] + let key: [String: String] let name: [String: String] - let picture: [String: String] - let profile: [String: Objects.Profile] - let sharedArticles: [String: [Objects.FeedArticle]] - let sharedArticlesCount: [String: Int] - let sharedHighlightsCount: [String: Int] - let sharedNotesCount: [String: Int] - let viewerIsFollowing: [String: Bool] + let scopes: [String: [String]] + let usedAt: [String: DateTime] enum TypeName: String, Codable { - case user = "User" + case apiKey = "ApiKey" } } } -extension Objects.User: Decodable { +extension Objects.ApiKey: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -478,56 +179,32 @@ extension Objects.User: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "followersCount": - if let value = try container.decode(Int?.self, forKey: codingKey) { + case "createdAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "friendsCount": - if let value = try container.decode(Int?.self, forKey: codingKey) { + case "expiresAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } case "id": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "isFriend": - if let value = try container.decode(Bool?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "isFullUser": - if let value = try container.decode(Bool?.self, forKey: codingKey) { + case "key": + if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } case "name": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "picture": - if let value = try container.decode(String?.self, forKey: codingKey) { + case "scopes": + if let value = try container.decode([String]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "profile": - if let value = try container.decode(Objects.Profile?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "sharedArticles": - if let value = try container.decode([Objects.FeedArticle]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "sharedArticlesCount": - if let value = try container.decode(Int?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "sharedHighlightsCount": - if let value = try container.decode(Int?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "sharedNotesCount": - if let value = try container.decode(Int?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "viewerIsFollowing": - if let value = try container.decode(Bool?.self, forKey: codingKey) { + case "usedAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -540,23 +217,53 @@ extension Objects.User: Decodable { } } - followersCount = map["followersCount"] - friendsCount = map["friendsCount"] + createdAt = map["createdAt"] + expiresAt = map["expiresAt"] id = map["id"] - isFriend = map["isFriend"] - isFullUser = map["isFullUser"] + key = map["key"] name = map["name"] - picture = map["picture"] - profile = map["profile"] - sharedArticles = map["sharedArticles"] - sharedArticlesCount = map["sharedArticlesCount"] - sharedHighlightsCount = map["sharedHighlightsCount"] - sharedNotesCount = map["sharedNotesCount"] - viewerIsFollowing = map["viewerIsFollowing"] + scopes = map["scopes"] + usedAt = map["usedAt"] } } -extension Fields where TypeLock == Objects.User { +extension Fields where TypeLock == Objects.ApiKey { + func createdAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "createdAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createdAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func expiresAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "expiresAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.expiresAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + func id() throws -> String { let field = GraphQLField.leaf( name: "id", @@ -575,6 +282,21 @@ extension Fields where TypeLock == Objects.User { } } + func key() throws -> String? { + let field = GraphQLField.leaf( + name: "key", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.key[field.alias!] + case .mocking: + return nil + } + } + func name() throws -> String { let field = GraphQLField.leaf( name: "name", @@ -593,175 +315,31 @@ extension Fields where TypeLock == Objects.User { } } - func isFullUser() throws -> Bool? { + func scopes() throws -> [String]? { let field = GraphQLField.leaf( - name: "isFullUser", + name: "scopes", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.isFullUser[field.alias!] + return data.scopes[field.alias!] case .mocking: return nil } } - func viewerIsFollowing() throws -> Bool? { + func usedAt() throws -> DateTime? { let field = GraphQLField.leaf( - name: "viewerIsFollowing", + name: "usedAt", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.viewerIsFollowing[field.alias!] - case .mocking: - return nil - } - } - - @available(*, deprecated, message: "isFriend has been replaced with viewerIsFollowing") - func isFriend() throws -> Bool? { - let field = GraphQLField.leaf( - name: "isFriend", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.isFriend[field.alias!] - case .mocking: - return nil - } - } - - func picture() throws -> String? { - let field = GraphQLField.leaf( - name: "picture", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.picture[field.alias!] - case .mocking: - return nil - } - } - - func profile(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "profile", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.profile[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func sharedArticles(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "sharedArticles", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.sharedArticles[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func sharedArticlesCount() throws -> Int? { - let field = GraphQLField.leaf( - name: "sharedArticlesCount", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.sharedArticlesCount[field.alias!] - case .mocking: - return nil - } - } - - func sharedHighlightsCount() throws -> Int? { - let field = GraphQLField.leaf( - name: "sharedHighlightsCount", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.sharedHighlightsCount[field.alias!] - case .mocking: - return nil - } - } - - func sharedNotesCount() throws -> Int? { - let field = GraphQLField.leaf( - name: "sharedNotesCount", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.sharedNotesCount[field.alias!] - case .mocking: - return nil - } - } - - func friendsCount() throws -> Int? { - let field = GraphQLField.leaf( - name: "friendsCount", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.friendsCount[field.alias!] - case .mocking: - return nil - } - } - - func followersCount() throws -> Int? { - let field = GraphQLField.leaf( - name: "followersCount", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.followersCount[field.alias!] + return data.usedAt[field.alias!] case .mocking: return nil } @@ -769,176 +347,21 @@ extension Fields where TypeLock == Objects.User { } extension Selection where TypeLock == Never, Type == Never { - typealias User = Selection + typealias ApiKey = Selection } extension Objects { - struct Profile { - let __typename: TypeName = .profile - let bio: [String: String] - let id: [String: String] - let pictureUrl: [String: String] - let `private`: [String: Bool] - let username: [String: String] + struct ApiKeysError { + let __typename: TypeName = .apiKeysError + let errorCodes: [String: [Enums.ApiKeysErrorCode]] enum TypeName: String, Codable { - case profile = "Profile" + case apiKeysError = "ApiKeysError" } } } -extension Objects.Profile: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "bio": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "id": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "pictureUrl": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "private": - if let value = try container.decode(Bool?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "username": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - bio = map["bio"] - id = map["id"] - pictureUrl = map["pictureUrl"] - self.private = map["private"] - username = map["username"] - } -} - -extension Fields where TypeLock == Objects.Profile { - func id() throws -> String { - let field = GraphQLField.leaf( - name: "id", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.id[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func username() throws -> String { - let field = GraphQLField.leaf( - name: "username", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.username[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func `private`() throws -> Bool { - let field = GraphQLField.leaf( - name: "private", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.private[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Bool.mockValue - } - } - - func bio() throws -> String? { - let field = GraphQLField.leaf( - name: "bio", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.bio[field.alias!] - case .mocking: - return nil - } - } - - func pictureUrl() throws -> String? { - let field = GraphQLField.leaf( - name: "pictureUrl", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.pictureUrl[field.alias!] - case .mocking: - return nil - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias Profile = Selection -} - -extension Objects { - struct UserError { - let __typename: TypeName = .userError - let errorCodes: [String: [Enums.UserErrorCode]] - - enum TypeName: String, Codable { - case userError = "UserError" - } - } -} - -extension Objects.UserError: Decodable { +extension Objects.ApiKeysError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -951,7 +374,7 @@ extension Objects.UserError: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.UserErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.ApiKeysErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -968,8 +391,8 @@ extension Objects.UserError: Decodable { } } -extension Fields where TypeLock == Objects.UserError { - func errorCodes() throws -> [Enums.UserErrorCode] { +extension Fields where TypeLock == Objects.ApiKeysError { + func errorCodes() throws -> [Enums.ApiKeysErrorCode] { let field = GraphQLField.leaf( name: "errorCodes", arguments: [] @@ -989,21 +412,21 @@ extension Fields where TypeLock == Objects.UserError { } extension Selection where TypeLock == Never, Type == Never { - typealias UserError = Selection + typealias ApiKeysError = Selection } extension Objects { - struct UserSuccess { - let __typename: TypeName = .userSuccess - let user: [String: Objects.User] + struct ApiKeysSuccess { + let __typename: TypeName = .apiKeysSuccess + let apiKeys: [String: [Objects.ApiKey]] enum TypeName: String, Codable { - case userSuccess = "UserSuccess" + case apiKeysSuccess = "ApiKeysSuccess" } } } -extension Objects.UserSuccess: Decodable { +extension Objects.ApiKeysSuccess: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -1015,8 +438,8 @@ extension Objects.UserSuccess: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "user": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + case "apiKeys": + if let value = try container.decode([Objects.ApiKey]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -1029,14 +452,14 @@ extension Objects.UserSuccess: Decodable { } } - user = map["user"] + apiKeys = map["apiKeys"] } } -extension Fields where TypeLock == Objects.UserSuccess { - func user(selection: Selection) throws -> Type { +extension Fields where TypeLock == Objects.ApiKeysSuccess { + func apiKeys(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "user", + name: "apiKeys", arguments: [], selection: selection.selection ) @@ -1044,7 +467,7 @@ extension Fields where TypeLock == Objects.UserSuccess { switch response { case let .decoding(data): - if let data = data.user[field.alias!] { + if let data = data.apiKeys[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -1055,479 +478,22 @@ extension Fields where TypeLock == Objects.UserSuccess { } extension Selection where TypeLock == Never, Type == Never { - typealias UserSuccess = Selection + typealias ApiKeysSuccess = Selection } extension Objects { - struct UsersError { - let __typename: TypeName = .usersError - let errorCodes: [String: [Enums.UsersErrorCode]] - - enum TypeName: String, Codable { - case usersError = "UsersError" - } - } -} - -extension Objects.UsersError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UsersErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.UsersError { - func errorCodes() throws -> [Enums.UsersErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UsersError = Selection -} - -extension Objects { - struct UsersSuccess { - let __typename: TypeName = .usersSuccess - let users: [String: [Objects.User]] - - enum TypeName: String, Codable { - case usersSuccess = "UsersSuccess" - } - } -} - -extension Objects.UsersSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "users": - if let value = try container.decode([Objects.User]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - users = map["users"] - } -} - -extension Fields where TypeLock == Objects.UsersSuccess { - func users(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "users", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.users[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UsersSuccess = Selection -} - -extension Objects { - struct LoginSuccess { - let __typename: TypeName = .loginSuccess - let me: [String: Objects.User] - - enum TypeName: String, Codable { - case loginSuccess = "LoginSuccess" - } - } -} - -extension Objects.LoginSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "me": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - me = map["me"] - } -} - -extension Fields where TypeLock == Objects.LoginSuccess { - func me(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "me", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.me[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias LoginSuccess = Selection -} - -extension Objects { - struct LoginError { - let __typename: TypeName = .loginError - let errorCodes: [String: [Enums.LoginErrorCode]] - - enum TypeName: String, Codable { - case loginError = "LoginError" - } - } -} - -extension Objects.LoginError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.LoginErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.LoginError { - func errorCodes() throws -> [Enums.LoginErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias LoginError = Selection -} - -extension Objects { - struct GoogleSignupSuccess { - let __typename: TypeName = .googleSignupSuccess - let me: [String: Objects.User] - - enum TypeName: String, Codable { - case googleSignupSuccess = "GoogleSignupSuccess" - } - } -} - -extension Objects.GoogleSignupSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "me": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - me = map["me"] - } -} - -extension Fields where TypeLock == Objects.GoogleSignupSuccess { - func me(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "me", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.me[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias GoogleSignupSuccess = Selection -} - -extension Objects { - struct GoogleSignupError { - let __typename: TypeName = .googleSignupError - let errorCodes: [String: [Enums.SignupErrorCode?]] - - enum TypeName: String, Codable { - case googleSignupError = "GoogleSignupError" - } - } -} - -extension Objects.GoogleSignupError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SignupErrorCode?]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.GoogleSignupError { - func errorCodes() throws -> [Enums.SignupErrorCode?] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias GoogleSignupError = Selection -} - -extension Objects { - struct LogOutError { - let __typename: TypeName = .logOutError - let errorCodes: [String: [Enums.LogOutErrorCode]] - - enum TypeName: String, Codable { - case logOutError = "LogOutError" - } - } -} - -extension Objects.LogOutError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.LogOutErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.LogOutError { - func errorCodes() throws -> [Enums.LogOutErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias LogOutError = Selection -} - -extension Objects { - struct LogOutSuccess { - let __typename: TypeName = .logOutSuccess + struct ArchiveLinkError { + let __typename: TypeName = .archiveLinkError + let errorCodes: [String: [Enums.ArchiveLinkErrorCode]] let message: [String: String] enum TypeName: String, Codable { - case logOutSuccess = "LogOutSuccess" + case archiveLinkError = "ArchiveLinkError" } } } -extension Objects.LogOutSuccess: Decodable { +extension Objects.ArchiveLinkError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -1539,6 +505,10 @@ extension Objects.LogOutSuccess: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { + case "errorCodes": + if let value = try container.decode([Enums.ArchiveLinkErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } case "message": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) @@ -1553,12 +523,31 @@ extension Objects.LogOutSuccess: Decodable { } } + errorCodes = map["errorCodes"] message = map["message"] } } -extension Fields where TypeLock == Objects.LogOutSuccess { - func message() throws -> String? { +extension Fields where TypeLock == Objects.ArchiveLinkError { + func errorCodes() throws -> [Enums.ArchiveLinkErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } + + func message() throws -> String { let field = GraphQLField.leaf( name: "message", arguments: [] @@ -1567,29 +556,33 @@ extension Fields where TypeLock == Objects.LogOutSuccess { switch response { case let .decoding(data): - return data.message[field.alias!] + if let data = data.message[field.alias!] { + return data + } + throw HttpError.badpayload case .mocking: - return nil + return String.mockValue } } } extension Selection where TypeLock == Never, Type == Never { - typealias LogOutSuccess = Selection + typealias ArchiveLinkError = Selection } extension Objects { - struct UpdateUserError { - let __typename: TypeName = .updateUserError - let errorCodes: [String: [Enums.UpdateUserErrorCode]] + struct ArchiveLinkSuccess { + let __typename: TypeName = .archiveLinkSuccess + let linkId: [String: String] + let message: [String: String] enum TypeName: String, Codable { - case updateUserError = "UpdateUserError" + case archiveLinkSuccess = "ArchiveLinkSuccess" } } } -extension Objects.UpdateUserError: Decodable { +extension Objects.ArchiveLinkSuccess: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -1601,588 +594,11 @@ extension Objects.UpdateUserError: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateUserErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.UpdateUserError { - func errorCodes() throws -> [Enums.UpdateUserErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateUserError = Selection -} - -extension Objects { - struct UpdateUserSuccess { - let __typename: TypeName = .updateUserSuccess - let user: [String: Objects.User] - - enum TypeName: String, Codable { - case updateUserSuccess = "UpdateUserSuccess" - } - } -} - -extension Objects.UpdateUserSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "user": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - user = map["user"] - } -} - -extension Fields where TypeLock == Objects.UpdateUserSuccess { - func user(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "user", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.user[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateUserSuccess = Selection -} - -extension Objects { - struct UpdateUserProfileSuccess { - let __typename: TypeName = .updateUserProfileSuccess - let user: [String: Objects.User] - - enum TypeName: String, Codable { - case updateUserProfileSuccess = "UpdateUserProfileSuccess" - } - } -} - -extension Objects.UpdateUserProfileSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "user": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - user = map["user"] - } -} - -extension Fields where TypeLock == Objects.UpdateUserProfileSuccess { - func user(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "user", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.user[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateUserProfileSuccess = Selection -} - -extension Objects { - struct UpdateUserProfileError { - let __typename: TypeName = .updateUserProfileError - let errorCodes: [String: [Enums.UpdateUserProfileErrorCode]] - - enum TypeName: String, Codable { - case updateUserProfileError = "UpdateUserProfileError" - } - } -} - -extension Objects.UpdateUserProfileError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateUserProfileErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.UpdateUserProfileError { - func errorCodes() throws -> [Enums.UpdateUserProfileErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateUserProfileError = Selection -} - -extension Objects { - struct ReadState { - let __typename: TypeName = .readState - let progressAnchorIndex: [String: Int] - let progressPercent: [String: Double] - let reading: [String: Bool] - let readingTime: [String: Int] - - enum TypeName: String, Codable { - case readState = "ReadState" - } - } -} - -extension Objects.ReadState: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "progressAnchorIndex": - if let value = try container.decode(Int?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "progressPercent": - if let value = try container.decode(Double?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "reading": - if let value = try container.decode(Bool?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "readingTime": - if let value = try container.decode(Int?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - progressAnchorIndex = map["progressAnchorIndex"] - progressPercent = map["progressPercent"] - reading = map["reading"] - readingTime = map["readingTime"] - } -} - -extension Fields where TypeLock == Objects.ReadState { - func reading() throws -> Bool? { - let field = GraphQLField.leaf( - name: "reading", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.reading[field.alias!] - case .mocking: - return nil - } - } - - func readingTime() throws -> Int? { - let field = GraphQLField.leaf( - name: "readingTime", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.readingTime[field.alias!] - case .mocking: - return nil - } - } - - func progressPercent() throws -> Double { - let field = GraphQLField.leaf( - name: "progressPercent", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.progressPercent[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Double.mockValue - } - } - - func progressAnchorIndex() throws -> Int { - let field = GraphQLField.leaf( - name: "progressAnchorIndex", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.progressAnchorIndex[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Int.mockValue - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ReadState = Selection -} - -extension Objects { - struct HighlightStats { - let __typename: TypeName = .highlightStats - let highlightCount: [String: Int] - - enum TypeName: String, Codable { - case highlightStats = "HighlightStats" - } - } -} - -extension Objects.HighlightStats: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "highlightCount": - if let value = try container.decode(Int?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - highlightCount = map["highlightCount"] - } -} - -extension Fields where TypeLock == Objects.HighlightStats { - func highlightCount() throws -> Int { - let field = GraphQLField.leaf( - name: "highlightCount", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.highlightCount[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Int.mockValue - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias HighlightStats = Selection -} - -extension Objects { - struct ShareStats { - let __typename: TypeName = .shareStats - let readDuration: [String: Int] - let saveCount: [String: Int] - let viewCount: [String: Int] - - enum TypeName: String, Codable { - case shareStats = "ShareStats" - } - } -} - -extension Objects.ShareStats: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "readDuration": - if let value = try container.decode(Int?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "saveCount": - if let value = try container.decode(Int?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "viewCount": - if let value = try container.decode(Int?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - readDuration = map["readDuration"] - saveCount = map["saveCount"] - viewCount = map["viewCount"] - } -} - -extension Fields where TypeLock == Objects.ShareStats { - func viewCount() throws -> Int { - let field = GraphQLField.leaf( - name: "viewCount", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.viewCount[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Int.mockValue - } - } - - func saveCount() throws -> Int { - let field = GraphQLField.leaf( - name: "saveCount", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.saveCount[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Int.mockValue - } - } - - func readDuration() throws -> Int { - let field = GraphQLField.leaf( - name: "readDuration", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.readDuration[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Int.mockValue - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ShareStats = Selection -} - -extension Objects { - struct LinkShareInfo { - let __typename: TypeName = .linkShareInfo - let description: [String: String] - let imageUrl: [String: String] - let title: [String: String] - - enum TypeName: String, Codable { - case linkShareInfo = "LinkShareInfo" - } - } -} - -extension Objects.LinkShareInfo: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "description": + case "linkId": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "imageUrl": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "title": + case "message": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } @@ -2196,23 +612,22 @@ extension Objects.LinkShareInfo: Decodable { } } - description = map["description"] - imageUrl = map["imageUrl"] - title = map["title"] + linkId = map["linkId"] + message = map["message"] } } -extension Fields where TypeLock == Objects.LinkShareInfo { - func title() throws -> String { +extension Fields where TypeLock == Objects.ArchiveLinkSuccess { + func linkId() throws -> String { let field = GraphQLField.leaf( - name: "title", + name: "linkId", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.title[field.alias!] { + if let data = data.linkId[field.alias!] { return data } throw HttpError.badpayload @@ -2221,34 +636,16 @@ extension Fields where TypeLock == Objects.LinkShareInfo { } } - func description() throws -> String { + func message() throws -> String { let field = GraphQLField.leaf( - name: "description", + name: "message", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.description[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func imageUrl() throws -> String { - let field = GraphQLField.leaf( - name: "imageUrl", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.imageUrl[field.alias!] { + if let data = data.message[field.alias!] { return data } throw HttpError.badpayload @@ -2259,692 +656,7 @@ extension Fields where TypeLock == Objects.LinkShareInfo { } extension Selection where TypeLock == Never, Type == Never { - typealias LinkShareInfo = Selection -} - -extension Objects { - struct Link { - let __typename: TypeName = .link - let highlightStats: [String: Objects.HighlightStats] - let id: [String: String] - let page: [String: Objects.Page] - let postedByViewer: [String: Bool] - let readState: [String: Objects.ReadState] - let savedAt: [String: DateTime] - let savedBy: [String: Objects.User] - let savedByViewer: [String: Bool] - let shareInfo: [String: Objects.LinkShareInfo] - let shareStats: [String: Objects.ShareStats] - let slug: [String: String] - let url: [String: String] - - enum TypeName: String, Codable { - case link = "Link" - } - } -} - -extension Objects.Link: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "highlightStats": - if let value = try container.decode(Objects.HighlightStats?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "id": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "page": - if let value = try container.decode(Objects.Page?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "postedByViewer": - if let value = try container.decode(Bool?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "readState": - if let value = try container.decode(Objects.ReadState?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "savedAt": - if let value = try container.decode(DateTime?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "savedBy": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "savedByViewer": - if let value = try container.decode(Bool?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "shareInfo": - if let value = try container.decode(Objects.LinkShareInfo?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "shareStats": - if let value = try container.decode(Objects.ShareStats?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "slug": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "url": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - highlightStats = map["highlightStats"] - id = map["id"] - page = map["page"] - postedByViewer = map["postedByViewer"] - readState = map["readState"] - savedAt = map["savedAt"] - savedBy = map["savedBy"] - savedByViewer = map["savedByViewer"] - shareInfo = map["shareInfo"] - shareStats = map["shareStats"] - slug = map["slug"] - url = map["url"] - } -} - -extension Fields where TypeLock == Objects.Link { - func id() throws -> String { - let field = GraphQLField.leaf( - name: "id", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.id[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func url() throws -> String { - let field = GraphQLField.leaf( - name: "url", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.url[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func slug() throws -> String { - let field = GraphQLField.leaf( - name: "slug", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.slug[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func savedBy(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "savedBy", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.savedBy[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func savedAt() throws -> DateTime { - let field = GraphQLField.leaf( - name: "savedAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.savedAt[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return DateTime.mockValue - } - } - - func savedByViewer() throws -> Bool { - let field = GraphQLField.leaf( - name: "savedByViewer", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.savedByViewer[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Bool.mockValue - } - } - - func postedByViewer() throws -> Bool { - let field = GraphQLField.leaf( - name: "postedByViewer", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.postedByViewer[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Bool.mockValue - } - } - - func readState(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "readState", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.readState[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func highlightStats(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "highlightStats", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.highlightStats[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func shareInfo(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "shareInfo", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.shareInfo[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func shareStats(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "shareStats", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.shareStats[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func page(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "page", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.page[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias Link = Selection -} - -extension Objects { - struct Page { - let __typename: TypeName = .page - let author: [String: String] - let createdAt: [String: DateTime] - let description: [String: String] - let hash: [String: String] - let id: [String: String] - let image: [String: String] - let originalHtml: [String: String] - let originalUrl: [String: String] - let publishedAt: [String: DateTime] - let readableHtml: [String: String] - let title: [String: String] - let type: [String: Enums.PageType] - let url: [String: String] - - enum TypeName: String, Codable { - case page = "Page" - } - } -} - -extension Objects.Page: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "author": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "createdAt": - if let value = try container.decode(DateTime?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "description": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "hash": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "id": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "image": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "originalHtml": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "originalUrl": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "publishedAt": - if let value = try container.decode(DateTime?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "readableHtml": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "title": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "type": - if let value = try container.decode(Enums.PageType?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "url": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - author = map["author"] - createdAt = map["createdAt"] - description = map["description"] - hash = map["hash"] - id = map["id"] - image = map["image"] - originalHtml = map["originalHtml"] - originalUrl = map["originalUrl"] - publishedAt = map["publishedAt"] - readableHtml = map["readableHtml"] - title = map["title"] - type = map["type"] - url = map["url"] - } -} - -extension Fields where TypeLock == Objects.Page { - func id() throws -> String { - let field = GraphQLField.leaf( - name: "id", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.id[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func url() throws -> String { - let field = GraphQLField.leaf( - name: "url", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.url[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func hash() throws -> String { - let field = GraphQLField.leaf( - name: "hash", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.hash[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func originalUrl() throws -> String { - let field = GraphQLField.leaf( - name: "originalUrl", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.originalUrl[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func type() throws -> Enums.PageType { - let field = GraphQLField.leaf( - name: "type", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.type[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Enums.PageType.allCases.first! - } - } - - func image() throws -> String { - let field = GraphQLField.leaf( - name: "image", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.image[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func title() throws -> String { - let field = GraphQLField.leaf( - name: "title", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.title[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func author() throws -> String { - let field = GraphQLField.leaf( - name: "author", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.author[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func description() throws -> String { - let field = GraphQLField.leaf( - name: "description", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.description[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func publishedAt() throws -> DateTime? { - let field = GraphQLField.leaf( - name: "publishedAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.publishedAt[field.alias!] - case .mocking: - return nil - } - } - - func originalHtml() throws -> String { - let field = GraphQLField.leaf( - name: "originalHtml", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.originalHtml[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func readableHtml() throws -> String { - let field = GraphQLField.leaf( - name: "readableHtml", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.readableHtml[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func createdAt() throws -> DateTime { - let field = GraphQLField.leaf( - name: "createdAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createdAt[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return DateTime.mockValue - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias Page = Selection + typealias ArchiveLinkSuccess = Selection } extension Objects { @@ -2983,6 +695,7 @@ extension Objects { let title: [String: String] let unsubHttpUrl: [String: String] let unsubMailTo: [String: String] + let updatedAt: [String: DateTime] let uploadFileId: [String: String] let url: [String: String] @@ -3136,6 +849,10 @@ extension Objects.Article: Decodable { if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } + case "updatedAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } case "uploadFileId": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) @@ -3187,99 +904,25 @@ extension Objects.Article: Decodable { title = map["title"] unsubHttpUrl = map["unsubHttpUrl"] unsubMailTo = map["unsubMailTo"] + updatedAt = map["updatedAt"] uploadFileId = map["uploadFileId"] url = map["url"] } } extension Fields where TypeLock == Objects.Article { - func id() throws -> String { + func author() throws -> String? { let field = GraphQLField.leaf( - name: "id", + name: "author", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.id[field.alias!] { - return data - } - throw HttpError.badpayload + return data.author[field.alias!] case .mocking: - return String.mockValue - } - } - - func title() throws -> String { - let field = GraphQLField.leaf( - name: "title", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.title[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func slug() throws -> String { - let field = GraphQLField.leaf( - name: "slug", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.slug[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func url() throws -> String { - let field = GraphQLField.leaf( - name: "url", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.url[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func hash() throws -> String { - let field = GraphQLField.leaf( - name: "hash", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.hash[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue + return nil } } @@ -3301,21 +944,6 @@ extension Fields where TypeLock == Objects.Article { } } - func pageType() throws -> Enums.PageType? { - let field = GraphQLField.leaf( - name: "pageType", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.pageType[field.alias!] - case .mocking: - return nil - } - } - func contentReader() throws -> Enums.ContentReader { let field = GraphQLField.leaf( name: "contentReader", @@ -3334,81 +962,6 @@ extension Fields where TypeLock == Objects.Article { } } - func hasContent() throws -> Bool? { - let field = GraphQLField.leaf( - name: "hasContent", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.hasContent[field.alias!] - case .mocking: - return nil - } - } - - func author() throws -> String? { - let field = GraphQLField.leaf( - name: "author", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.author[field.alias!] - case .mocking: - return nil - } - } - - func image() throws -> String? { - let field = GraphQLField.leaf( - name: "image", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.image[field.alias!] - case .mocking: - return nil - } - } - - func description() throws -> String? { - let field = GraphQLField.leaf( - name: "description", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.description[field.alias!] - case .mocking: - return nil - } - } - - func originalHtml() throws -> String? { - let field = GraphQLField.leaf( - name: "originalHtml", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.originalHtml[field.alias!] - case .mocking: - return nil - } - } - func createdAt() throws -> DateTime { let field = GraphQLField.leaf( name: "createdAt", @@ -3427,132 +980,51 @@ extension Fields where TypeLock == Objects.Article { } } - func savedAt() throws -> DateTime { + func description() throws -> String? { let field = GraphQLField.leaf( - name: "savedAt", + name: "description", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.savedAt[field.alias!] { + return data.description[field.alias!] + case .mocking: + return nil + } + } + + func hasContent() throws -> Bool? { + let field = GraphQLField.leaf( + name: "hasContent", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.hasContent[field.alias!] + case .mocking: + return nil + } + } + + func hash() throws -> String { + let field = GraphQLField.leaf( + name: "hash", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.hash[field.alias!] { return data } throw HttpError.badpayload case .mocking: - return DateTime.mockValue - } - } - - func publishedAt() throws -> DateTime? { - let field = GraphQLField.leaf( - name: "publishedAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.publishedAt[field.alias!] - case .mocking: - return nil - } - } - - func readingProgressPercent() throws -> Double { - let field = GraphQLField.leaf( - name: "readingProgressPercent", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.readingProgressPercent[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Double.mockValue - } - } - - func readingProgressAnchorIndex() throws -> Int { - let field = GraphQLField.leaf( - name: "readingProgressAnchorIndex", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.readingProgressAnchorIndex[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Int.mockValue - } - } - - func sharedComment() throws -> String? { - let field = GraphQLField.leaf( - name: "sharedComment", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.sharedComment[field.alias!] - case .mocking: - return nil - } - } - - func savedByViewer() throws -> Bool? { - let field = GraphQLField.leaf( - name: "savedByViewer", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.savedByViewer[field.alias!] - case .mocking: - return nil - } - } - - func postedByViewer() throws -> Bool? { - let field = GraphQLField.leaf( - name: "postedByViewer", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.postedByViewer[field.alias!] - case .mocking: - return nil - } - } - - func originalArticleUrl() throws -> String? { - let field = GraphQLField.leaf( - name: "originalArticleUrl", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.originalArticleUrl[field.alias!] - case .mocking: - return nil + return String.mockValue } } @@ -3575,19 +1047,36 @@ extension Fields where TypeLock == Objects.Article { } } - func shareInfo(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "shareInfo", - arguments: [], - selection: selection.selection + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] ) select(field) switch response { case let .decoding(data): - return try selection.decode(data: data.shareInfo[field.alias!]) + if let data = data.id[field.alias!] { + return data + } + throw HttpError.badpayload case .mocking: - return selection.mock() + return String.mockValue + } + } + + func image() throws -> String? { + let field = GraphQLField.leaf( + name: "image", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.image[field.alias!] + case .mocking: + return nil } } @@ -3609,21 +1098,6 @@ extension Fields where TypeLock == Objects.Article { } } - func linkId() throws -> String? { - let field = GraphQLField.leaf( - name: "linkId", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.linkId[field.alias!] - case .mocking: - return nil - } - } - func labels(selection: Selection) throws -> Type { let field = GraphQLField.composite( name: "labels", @@ -3640,16 +1114,221 @@ extension Fields where TypeLock == Objects.Article { } } - func uploadFileId() throws -> String? { + func language() throws -> String? { let field = GraphQLField.leaf( - name: "uploadFileId", + name: "language", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.uploadFileId[field.alias!] + return data.language[field.alias!] + case .mocking: + return nil + } + } + + func linkId() throws -> String? { + let field = GraphQLField.leaf( + name: "linkId", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.linkId[field.alias!] + case .mocking: + return nil + } + } + + func originalArticleUrl() throws -> String? { + let field = GraphQLField.leaf( + name: "originalArticleUrl", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.originalArticleUrl[field.alias!] + case .mocking: + return nil + } + } + + func originalHtml() throws -> String? { + let field = GraphQLField.leaf( + name: "originalHtml", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.originalHtml[field.alias!] + case .mocking: + return nil + } + } + + func pageType() throws -> Enums.PageType? { + let field = GraphQLField.leaf( + name: "pageType", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.pageType[field.alias!] + case .mocking: + return nil + } + } + + func postedByViewer() throws -> Bool? { + let field = GraphQLField.leaf( + name: "postedByViewer", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.postedByViewer[field.alias!] + case .mocking: + return nil + } + } + + func publishedAt() throws -> DateTime? { + let field = GraphQLField.leaf( + name: "publishedAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.publishedAt[field.alias!] + case .mocking: + return nil + } + } + + func readingProgressAnchorIndex() throws -> Int { + let field = GraphQLField.leaf( + name: "readingProgressAnchorIndex", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.readingProgressAnchorIndex[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Int.mockValue + } + } + + func readingProgressPercent() throws -> Double { + let field = GraphQLField.leaf( + name: "readingProgressPercent", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.readingProgressPercent[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Double.mockValue + } + } + + func savedAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "savedAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.savedAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func savedByViewer() throws -> Bool? { + let field = GraphQLField.leaf( + name: "savedByViewer", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.savedByViewer[field.alias!] + case .mocking: + return nil + } + } + + func sharedComment() throws -> String? { + let field = GraphQLField.leaf( + name: "sharedComment", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.sharedComment[field.alias!] + case .mocking: + return nil + } + } + + func shareInfo(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "shareInfo", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + return try selection.decode(data: data.shareInfo[field.alias!]) + case .mocking: + return selection.mock() + } + } + + func siteIcon() throws -> String? { + let field = GraphQLField.leaf( + name: "siteIcon", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.siteIcon[field.alias!] case .mocking: return nil } @@ -3670,16 +1349,34 @@ extension Fields where TypeLock == Objects.Article { } } - func siteIcon() throws -> String? { + func slug() throws -> String { let field = GraphQLField.leaf( - name: "siteIcon", + name: "slug", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.siteIcon[field.alias!] + if let data = data.slug[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func state() throws -> Enums.ArticleSavingRequestStatus? { + let field = GraphQLField.leaf( + name: "state", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.state[field.alias!] case .mocking: return nil } @@ -3700,18 +1397,21 @@ extension Fields where TypeLock == Objects.Article { } } - func unsubMailTo() throws -> String? { + func title() throws -> String { let field = GraphQLField.leaf( - name: "unsubMailTo", + name: "title", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.unsubMailTo[field.alias!] + if let data = data.title[field.alias!] { + return data + } + throw HttpError.badpayload case .mocking: - return nil + return String.mockValue } } @@ -3730,41 +1430,167 @@ extension Fields where TypeLock == Objects.Article { } } - func state() throws -> Enums.ArticleSavingRequestStatus? { + func unsubMailTo() throws -> String? { let field = GraphQLField.leaf( - name: "state", + name: "unsubMailTo", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.state[field.alias!] + return data.unsubMailTo[field.alias!] case .mocking: return nil } } - func language() throws -> String? { + func updatedAt() throws -> DateTime { let field = GraphQLField.leaf( - name: "language", + name: "updatedAt", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.language[field.alias!] + if let data = data.updatedAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func uploadFileId() throws -> String? { + let field = GraphQLField.leaf( + name: "uploadFileId", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.uploadFileId[field.alias!] case .mocking: return nil } } + + func url() throws -> String { + let field = GraphQLField.leaf( + name: "url", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.url[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } } extension Selection where TypeLock == Never, Type == Never { typealias Article = Selection } +extension Objects { + struct ArticleEdge { + let __typename: TypeName = .articleEdge + let cursor: [String: String] + let node: [String: Objects.Article] + + enum TypeName: String, Codable { + case articleEdge = "ArticleEdge" + } + } +} + +extension Objects.ArticleEdge: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "cursor": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "node": + if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + cursor = map["cursor"] + node = map["node"] + } +} + +extension Fields where TypeLock == Objects.ArticleEdge { + func cursor() throws -> String { + let field = GraphQLField.leaf( + name: "cursor", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.cursor[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func node(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "node", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.node[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias ArticleEdge = Selection +} + extension Objects { struct ArticleError { let __typename: TypeName = .articleError @@ -3830,6 +1656,548 @@ extension Selection where TypeLock == Never, Type == Never { typealias ArticleError = Selection } +extension Objects { + struct ArticleSavingRequest { + let __typename: TypeName = .articleSavingRequest + let article: [String: Objects.Article] + let createdAt: [String: DateTime] + let errorCode: [String: Enums.CreateArticleErrorCode] + let id: [String: String] + let slug: [String: String] + let status: [String: Enums.ArticleSavingRequestStatus] + let updatedAt: [String: DateTime] + let user: [String: Objects.User] + let userId: [String: String] + + enum TypeName: String, Codable { + case articleSavingRequest = "ArticleSavingRequest" + } + } +} + +extension Objects.ArticleSavingRequest: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "article": + if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "createdAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "errorCode": + if let value = try container.decode(Enums.CreateArticleErrorCode?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "slug": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "status": + if let value = try container.decode(Enums.ArticleSavingRequestStatus?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updatedAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "user": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "userId": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + article = map["article"] + createdAt = map["createdAt"] + errorCode = map["errorCode"] + id = map["id"] + slug = map["slug"] + status = map["status"] + updatedAt = map["updatedAt"] + user = map["user"] + userId = map["userId"] + } +} + +extension Fields where TypeLock == Objects.ArticleSavingRequest { + @available(*, deprecated, message: "article has been replaced with slug") + func article(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "article", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + return try selection.decode(data: data.article[field.alias!]) + case .mocking: + return selection.mock() + } + } + + func createdAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "createdAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createdAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func errorCode() throws -> Enums.CreateArticleErrorCode? { + let field = GraphQLField.leaf( + name: "errorCode", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.errorCode[field.alias!] + case .mocking: + return nil + } + } + + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func slug() throws -> String { + let field = GraphQLField.leaf( + name: "slug", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.slug[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func status() throws -> Enums.ArticleSavingRequestStatus { + let field = GraphQLField.leaf( + name: "status", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.status[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Enums.ArticleSavingRequestStatus.allCases.first! + } + } + + func updatedAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "updatedAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updatedAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func user(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "user", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.user[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + @available(*, deprecated, message: "userId has been replaced with user") + func userId() throws -> String { + let field = GraphQLField.leaf( + name: "userId", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.userId[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias ArticleSavingRequest = Selection +} + +extension Objects { + struct ArticleSavingRequestError { + let __typename: TypeName = .articleSavingRequestError + let errorCodes: [String: [Enums.ArticleSavingRequestErrorCode]] + + enum TypeName: String, Codable { + case articleSavingRequestError = "ArticleSavingRequestError" + } + } +} + +extension Objects.ArticleSavingRequestError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.ArticleSavingRequestErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.ArticleSavingRequestError { + func errorCodes() throws -> [Enums.ArticleSavingRequestErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias ArticleSavingRequestError = Selection +} + +extension Objects { + struct ArticleSavingRequestSuccess { + let __typename: TypeName = .articleSavingRequestSuccess + let articleSavingRequest: [String: Objects.ArticleSavingRequest] + + enum TypeName: String, Codable { + case articleSavingRequestSuccess = "ArticleSavingRequestSuccess" + } + } +} + +extension Objects.ArticleSavingRequestSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "articleSavingRequest": + if let value = try container.decode(Objects.ArticleSavingRequest?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + articleSavingRequest = map["articleSavingRequest"] + } +} + +extension Fields where TypeLock == Objects.ArticleSavingRequestSuccess { + func articleSavingRequest(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "articleSavingRequest", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.articleSavingRequest[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias ArticleSavingRequestSuccess = Selection +} + +extension Objects { + struct ArticlesError { + let __typename: TypeName = .articlesError + let errorCodes: [String: [Enums.ArticlesErrorCode]] + + enum TypeName: String, Codable { + case articlesError = "ArticlesError" + } + } +} + +extension Objects.ArticlesError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.ArticlesErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.ArticlesError { + func errorCodes() throws -> [Enums.ArticlesErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias ArticlesError = Selection +} + +extension Objects { + struct ArticlesSuccess { + let __typename: TypeName = .articlesSuccess + let edges: [String: [Objects.ArticleEdge]] + let pageInfo: [String: Objects.PageInfo] + + enum TypeName: String, Codable { + case articlesSuccess = "ArticlesSuccess" + } + } +} + +extension Objects.ArticlesSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "edges": + if let value = try container.decode([Objects.ArticleEdge]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "pageInfo": + if let value = try container.decode(Objects.PageInfo?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + edges = map["edges"] + pageInfo = map["pageInfo"] + } +} + +extension Fields where TypeLock == Objects.ArticlesSuccess { + func edges(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "edges", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.edges[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func pageInfo(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "pageInfo", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.pageInfo[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias ArticlesSuccess = Selection +} + extension Objects { struct ArticleSuccess { let __typename: TypeName = .articleSuccess @@ -3896,374 +2264,6 @@ extension Selection where TypeLock == Never, Type == Never { typealias ArticleSuccess = Selection } -extension Objects { - struct SharedArticleError { - let __typename: TypeName = .sharedArticleError - let errorCodes: [String: [Enums.SharedArticleErrorCode]] - - enum TypeName: String, Codable { - case sharedArticleError = "SharedArticleError" - } - } -} - -extension Objects.SharedArticleError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SharedArticleErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.SharedArticleError { - func errorCodes() throws -> [Enums.SharedArticleErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SharedArticleError = Selection -} - -extension Objects { - struct SharedArticleSuccess { - let __typename: TypeName = .sharedArticleSuccess - let article: [String: Objects.Article] - - enum TypeName: String, Codable { - case sharedArticleSuccess = "SharedArticleSuccess" - } - } -} - -extension Objects.SharedArticleSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "article": - if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - article = map["article"] - } -} - -extension Fields where TypeLock == Objects.SharedArticleSuccess { - func article(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "article", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.article[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SharedArticleSuccess = Selection -} - -extension Objects { - struct ArticlesError { - let __typename: TypeName = .articlesError - let errorCodes: [String: [Enums.ArticlesErrorCode]] - - enum TypeName: String, Codable { - case articlesError = "ArticlesError" - } - } -} - -extension Objects.ArticlesError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.ArticlesErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.ArticlesError { - func errorCodes() throws -> [Enums.ArticlesErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ArticlesError = Selection -} - -extension Objects { - struct UploadFileRequestError { - let __typename: TypeName = .uploadFileRequestError - let errorCodes: [String: [Enums.UploadFileRequestErrorCode]] - - enum TypeName: String, Codable { - case uploadFileRequestError = "UploadFileRequestError" - } - } -} - -extension Objects.UploadFileRequestError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UploadFileRequestErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.UploadFileRequestError { - func errorCodes() throws -> [Enums.UploadFileRequestErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UploadFileRequestError = Selection -} - -extension Objects { - struct UploadFileRequestSuccess { - let __typename: TypeName = .uploadFileRequestSuccess - let id: [String: String] - let uploadFileId: [String: String] - let uploadSignedUrl: [String: String] - - enum TypeName: String, Codable { - case uploadFileRequestSuccess = "UploadFileRequestSuccess" - } - } -} - -extension Objects.UploadFileRequestSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "id": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "uploadFileId": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "uploadSignedUrl": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - id = map["id"] - uploadFileId = map["uploadFileId"] - uploadSignedUrl = map["uploadSignedUrl"] - } -} - -extension Fields where TypeLock == Objects.UploadFileRequestSuccess { - func id() throws -> String { - let field = GraphQLField.leaf( - name: "id", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.id[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func uploadSignedUrl() throws -> String? { - let field = GraphQLField.leaf( - name: "uploadSignedUrl", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.uploadSignedUrl[field.alias!] - case .mocking: - return nil - } - } - - func uploadFileId() throws -> String? { - let field = GraphQLField.leaf( - name: "uploadFileId", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.uploadFileId[field.alias!] - case .mocking: - return nil - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UploadFileRequestSuccess = Selection -} - extension Objects { struct CreateArticleError { let __typename: TypeName = .createArticleError @@ -4329,6 +2329,137 @@ extension Selection where TypeLock == Never, Type == Never { typealias CreateArticleError = Selection } +extension Objects { + struct CreateArticleSavingRequestError { + let __typename: TypeName = .createArticleSavingRequestError + let errorCodes: [String: [Enums.CreateArticleSavingRequestErrorCode]] + + enum TypeName: String, Codable { + case createArticleSavingRequestError = "CreateArticleSavingRequestError" + } + } +} + +extension Objects.CreateArticleSavingRequestError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.CreateArticleSavingRequestErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.CreateArticleSavingRequestError { + func errorCodes() throws -> [Enums.CreateArticleSavingRequestErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateArticleSavingRequestError = Selection +} + +extension Objects { + struct CreateArticleSavingRequestSuccess { + let __typename: TypeName = .createArticleSavingRequestSuccess + let articleSavingRequest: [String: Objects.ArticleSavingRequest] + + enum TypeName: String, Codable { + case createArticleSavingRequestSuccess = "CreateArticleSavingRequestSuccess" + } + } +} + +extension Objects.CreateArticleSavingRequestSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "articleSavingRequest": + if let value = try container.decode(Objects.ArticleSavingRequest?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + articleSavingRequest = map["articleSavingRequest"] + } +} + +extension Fields where TypeLock == Objects.CreateArticleSavingRequestSuccess { + func articleSavingRequest(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "articleSavingRequest", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.articleSavingRequest[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateArticleSavingRequestSuccess = Selection +} + extension Objects { struct CreateArticleSuccess { let __typename: TypeName = .createArticleSuccess @@ -4383,6 +2514,24 @@ extension Objects.CreateArticleSuccess: Decodable { } extension Fields where TypeLock == Objects.CreateArticleSuccess { + func created() throws -> Bool { + let field = GraphQLField.leaf( + name: "created", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.created[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Bool.mockValue + } + } + func createdArticle(selection: Selection) throws -> Type { let field = GraphQLField.composite( name: "createdArticle", @@ -4420,24 +2569,6 @@ extension Fields where TypeLock == Objects.CreateArticleSuccess { return selection.mock() } } - - func created() throws -> Bool { - let field = GraphQLField.leaf( - name: "created", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.created[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Bool.mockValue - } - } } extension Selection where TypeLock == Never, Type == Never { @@ -4445,18 +2576,17 @@ extension Selection where TypeLock == Never, Type == Never { } extension Objects { - struct SaveError { - let __typename: TypeName = .saveError - let errorCodes: [String: [Enums.SaveErrorCode]] - let message: [String: String] + struct CreateHighlightError { + let __typename: TypeName = .createHighlightError + let errorCodes: [String: [Enums.CreateHighlightErrorCode]] enum TypeName: String, Codable { - case saveError = "SaveError" + case createHighlightError = "CreateHighlightError" } } } -extension Objects.SaveError: Decodable { +extension Objects.CreateHighlightError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -4469,11 +2599,7 @@ extension Objects.SaveError: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.SaveErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "message": - if let value = try container.decode(String?.self, forKey: codingKey) { + if let value = try container.decode([Enums.CreateHighlightErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -4487,12 +2613,11 @@ extension Objects.SaveError: Decodable { } errorCodes = map["errorCodes"] - message = map["message"] } } -extension Fields where TypeLock == Objects.SaveError { - func errorCodes() throws -> [Enums.SaveErrorCode] { +extension Fields where TypeLock == Objects.CreateHighlightError { + func errorCodes() throws -> [Enums.CreateHighlightErrorCode] { let field = GraphQLField.leaf( name: "errorCodes", arguments: [] @@ -4509,40 +2634,24 @@ extension Fields where TypeLock == Objects.SaveError { return [] } } - - func message() throws -> String? { - let field = GraphQLField.leaf( - name: "message", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.message[field.alias!] - case .mocking: - return nil - } - } } extension Selection where TypeLock == Never, Type == Never { - typealias SaveError = Selection + typealias CreateHighlightError = Selection } extension Objects { - struct SaveSuccess { - let __typename: TypeName = .saveSuccess - let clientRequestId: [String: String] - let url: [String: String] + struct CreateHighlightReplyError { + let __typename: TypeName = .createHighlightReplyError + let errorCodes: [String: [Enums.CreateHighlightReplyErrorCode]] enum TypeName: String, Codable { - case saveSuccess = "SaveSuccess" + case createHighlightReplyError = "CreateHighlightReplyError" } } } -extension Objects.SaveSuccess: Decodable { +extension Objects.CreateHighlightReplyError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -4554,11 +2663,1655 @@ extension Objects.SaveSuccess: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "clientRequestId": + case "errorCodes": + if let value = try container.decode([Enums.CreateHighlightReplyErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.CreateHighlightReplyError { + func errorCodes() throws -> [Enums.CreateHighlightReplyErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateHighlightReplyError = Selection +} + +extension Objects { + struct CreateHighlightReplySuccess { + let __typename: TypeName = .createHighlightReplySuccess + let highlightReply: [String: Objects.HighlightReply] + + enum TypeName: String, Codable { + case createHighlightReplySuccess = "CreateHighlightReplySuccess" + } + } +} + +extension Objects.CreateHighlightReplySuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "highlightReply": + if let value = try container.decode(Objects.HighlightReply?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + highlightReply = map["highlightReply"] + } +} + +extension Fields where TypeLock == Objects.CreateHighlightReplySuccess { + func highlightReply(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "highlightReply", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.highlightReply[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateHighlightReplySuccess = Selection +} + +extension Objects { + struct CreateHighlightSuccess { + let __typename: TypeName = .createHighlightSuccess + let highlight: [String: Objects.Highlight] + + enum TypeName: String, Codable { + case createHighlightSuccess = "CreateHighlightSuccess" + } + } +} + +extension Objects.CreateHighlightSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "highlight": + if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + highlight = map["highlight"] + } +} + +extension Fields where TypeLock == Objects.CreateHighlightSuccess { + func highlight(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "highlight", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.highlight[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateHighlightSuccess = Selection +} + +extension Objects { + struct CreateLabelError { + let __typename: TypeName = .createLabelError + let errorCodes: [String: [Enums.CreateLabelErrorCode]] + + enum TypeName: String, Codable { + case createLabelError = "CreateLabelError" + } + } +} + +extension Objects.CreateLabelError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.CreateLabelErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.CreateLabelError { + func errorCodes() throws -> [Enums.CreateLabelErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateLabelError = Selection +} + +extension Objects { + struct CreateLabelSuccess { + let __typename: TypeName = .createLabelSuccess + let label: [String: Objects.Label] + + enum TypeName: String, Codable { + case createLabelSuccess = "CreateLabelSuccess" + } + } +} + +extension Objects.CreateLabelSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "label": + if let value = try container.decode(Objects.Label?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + label = map["label"] + } +} + +extension Fields where TypeLock == Objects.CreateLabelSuccess { + func label(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "label", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.label[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateLabelSuccess = Selection +} + +extension Objects { + struct CreateNewsletterEmailError { + let __typename: TypeName = .createNewsletterEmailError + let errorCodes: [String: [Enums.CreateNewsletterEmailErrorCode]] + + enum TypeName: String, Codable { + case createNewsletterEmailError = "CreateNewsletterEmailError" + } + } +} + +extension Objects.CreateNewsletterEmailError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.CreateNewsletterEmailErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.CreateNewsletterEmailError { + func errorCodes() throws -> [Enums.CreateNewsletterEmailErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateNewsletterEmailError = Selection +} + +extension Objects { + struct CreateNewsletterEmailSuccess { + let __typename: TypeName = .createNewsletterEmailSuccess + let newsletterEmail: [String: Objects.NewsletterEmail] + + enum TypeName: String, Codable { + case createNewsletterEmailSuccess = "CreateNewsletterEmailSuccess" + } + } +} + +extension Objects.CreateNewsletterEmailSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "newsletterEmail": + if let value = try container.decode(Objects.NewsletterEmail?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + newsletterEmail = map["newsletterEmail"] + } +} + +extension Fields where TypeLock == Objects.CreateNewsletterEmailSuccess { + func newsletterEmail(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "newsletterEmail", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.newsletterEmail[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateNewsletterEmailSuccess = Selection +} + +extension Objects { + struct CreateReactionError { + let __typename: TypeName = .createReactionError + let errorCodes: [String: [Enums.CreateReactionErrorCode]] + + enum TypeName: String, Codable { + case createReactionError = "CreateReactionError" + } + } +} + +extension Objects.CreateReactionError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.CreateReactionErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.CreateReactionError { + func errorCodes() throws -> [Enums.CreateReactionErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateReactionError = Selection +} + +extension Objects { + struct CreateReactionSuccess { + let __typename: TypeName = .createReactionSuccess + let reaction: [String: Objects.Reaction] + + enum TypeName: String, Codable { + case createReactionSuccess = "CreateReactionSuccess" + } + } +} + +extension Objects.CreateReactionSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "reaction": + if let value = try container.decode(Objects.Reaction?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + reaction = map["reaction"] + } +} + +extension Fields where TypeLock == Objects.CreateReactionSuccess { + func reaction(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "reaction", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.reaction[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateReactionSuccess = Selection +} + +extension Objects { + struct CreateReminderError { + let __typename: TypeName = .createReminderError + let errorCodes: [String: [Enums.CreateReminderErrorCode]] + + enum TypeName: String, Codable { + case createReminderError = "CreateReminderError" + } + } +} + +extension Objects.CreateReminderError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.CreateReminderErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.CreateReminderError { + func errorCodes() throws -> [Enums.CreateReminderErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateReminderError = Selection +} + +extension Objects { + struct CreateReminderSuccess { + let __typename: TypeName = .createReminderSuccess + let reminder: [String: Objects.Reminder] + + enum TypeName: String, Codable { + case createReminderSuccess = "CreateReminderSuccess" + } + } +} + +extension Objects.CreateReminderSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "reminder": + if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + reminder = map["reminder"] + } +} + +extension Fields where TypeLock == Objects.CreateReminderSuccess { + func reminder(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "reminder", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.reminder[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateReminderSuccess = Selection +} + +extension Objects { + struct DeleteHighlightError { + let __typename: TypeName = .deleteHighlightError + let errorCodes: [String: [Enums.DeleteHighlightErrorCode]] + + enum TypeName: String, Codable { + case deleteHighlightError = "DeleteHighlightError" + } + } +} + +extension Objects.DeleteHighlightError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteHighlightErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.DeleteHighlightError { + func errorCodes() throws -> [Enums.DeleteHighlightErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteHighlightError = Selection +} + +extension Objects { + struct DeleteHighlightReplyError { + let __typename: TypeName = .deleteHighlightReplyError + let errorCodes: [String: [Enums.DeleteHighlightReplyErrorCode]] + + enum TypeName: String, Codable { + case deleteHighlightReplyError = "DeleteHighlightReplyError" + } + } +} + +extension Objects.DeleteHighlightReplyError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteHighlightReplyErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.DeleteHighlightReplyError { + func errorCodes() throws -> [Enums.DeleteHighlightReplyErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteHighlightReplyError = Selection +} + +extension Objects { + struct DeleteHighlightReplySuccess { + let __typename: TypeName = .deleteHighlightReplySuccess + let highlightReply: [String: Objects.HighlightReply] + + enum TypeName: String, Codable { + case deleteHighlightReplySuccess = "DeleteHighlightReplySuccess" + } + } +} + +extension Objects.DeleteHighlightReplySuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "highlightReply": + if let value = try container.decode(Objects.HighlightReply?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + highlightReply = map["highlightReply"] + } +} + +extension Fields where TypeLock == Objects.DeleteHighlightReplySuccess { + func highlightReply(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "highlightReply", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.highlightReply[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteHighlightReplySuccess = Selection +} + +extension Objects { + struct DeleteHighlightSuccess { + let __typename: TypeName = .deleteHighlightSuccess + let highlight: [String: Objects.Highlight] + + enum TypeName: String, Codable { + case deleteHighlightSuccess = "DeleteHighlightSuccess" + } + } +} + +extension Objects.DeleteHighlightSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "highlight": + if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + highlight = map["highlight"] + } +} + +extension Fields where TypeLock == Objects.DeleteHighlightSuccess { + func highlight(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "highlight", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.highlight[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteHighlightSuccess = Selection +} + +extension Objects { + struct DeleteLabelError { + let __typename: TypeName = .deleteLabelError + let errorCodes: [String: [Enums.DeleteLabelErrorCode]] + + enum TypeName: String, Codable { + case deleteLabelError = "DeleteLabelError" + } + } +} + +extension Objects.DeleteLabelError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteLabelErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.DeleteLabelError { + func errorCodes() throws -> [Enums.DeleteLabelErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteLabelError = Selection +} + +extension Objects { + struct DeleteLabelSuccess { + let __typename: TypeName = .deleteLabelSuccess + let label: [String: Objects.Label] + + enum TypeName: String, Codable { + case deleteLabelSuccess = "DeleteLabelSuccess" + } + } +} + +extension Objects.DeleteLabelSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "label": + if let value = try container.decode(Objects.Label?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + label = map["label"] + } +} + +extension Fields where TypeLock == Objects.DeleteLabelSuccess { + func label(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "label", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.label[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteLabelSuccess = Selection +} + +extension Objects { + struct DeleteNewsletterEmailError { + let __typename: TypeName = .deleteNewsletterEmailError + let errorCodes: [String: [Enums.DeleteNewsletterEmailErrorCode]] + + enum TypeName: String, Codable { + case deleteNewsletterEmailError = "DeleteNewsletterEmailError" + } + } +} + +extension Objects.DeleteNewsletterEmailError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteNewsletterEmailErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.DeleteNewsletterEmailError { + func errorCodes() throws -> [Enums.DeleteNewsletterEmailErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteNewsletterEmailError = Selection +} + +extension Objects { + struct DeleteNewsletterEmailSuccess { + let __typename: TypeName = .deleteNewsletterEmailSuccess + let newsletterEmail: [String: Objects.NewsletterEmail] + + enum TypeName: String, Codable { + case deleteNewsletterEmailSuccess = "DeleteNewsletterEmailSuccess" + } + } +} + +extension Objects.DeleteNewsletterEmailSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "newsletterEmail": + if let value = try container.decode(Objects.NewsletterEmail?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + newsletterEmail = map["newsletterEmail"] + } +} + +extension Fields where TypeLock == Objects.DeleteNewsletterEmailSuccess { + func newsletterEmail(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "newsletterEmail", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.newsletterEmail[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteNewsletterEmailSuccess = Selection +} + +extension Objects { + struct DeleteReactionError { + let __typename: TypeName = .deleteReactionError + let errorCodes: [String: [Enums.DeleteReactionErrorCode]] + + enum TypeName: String, Codable { + case deleteReactionError = "DeleteReactionError" + } + } +} + +extension Objects.DeleteReactionError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteReactionErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.DeleteReactionError { + func errorCodes() throws -> [Enums.DeleteReactionErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteReactionError = Selection +} + +extension Objects { + struct DeleteReactionSuccess { + let __typename: TypeName = .deleteReactionSuccess + let reaction: [String: Objects.Reaction] + + enum TypeName: String, Codable { + case deleteReactionSuccess = "DeleteReactionSuccess" + } + } +} + +extension Objects.DeleteReactionSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "reaction": + if let value = try container.decode(Objects.Reaction?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + reaction = map["reaction"] + } +} + +extension Fields where TypeLock == Objects.DeleteReactionSuccess { + func reaction(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "reaction", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.reaction[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteReactionSuccess = Selection +} + +extension Objects { + struct DeleteReminderError { + let __typename: TypeName = .deleteReminderError + let errorCodes: [String: [Enums.DeleteReminderErrorCode]] + + enum TypeName: String, Codable { + case deleteReminderError = "DeleteReminderError" + } + } +} + +extension Objects.DeleteReminderError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteReminderErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.DeleteReminderError { + func errorCodes() throws -> [Enums.DeleteReminderErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteReminderError = Selection +} + +extension Objects { + struct DeleteReminderSuccess { + let __typename: TypeName = .deleteReminderSuccess + let reminder: [String: Objects.Reminder] + + enum TypeName: String, Codable { + case deleteReminderSuccess = "DeleteReminderSuccess" + } + } +} + +extension Objects.DeleteReminderSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "reminder": + if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + reminder = map["reminder"] + } +} + +extension Fields where TypeLock == Objects.DeleteReminderSuccess { + func reminder(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "reminder", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.reminder[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteReminderSuccess = Selection +} + +extension Objects { + struct DeleteWebhookError { + let __typename: TypeName = .deleteWebhookError + let errorCodes: [String: [Enums.DeleteWebhookErrorCode]] + + enum TypeName: String, Codable { + case deleteWebhookError = "DeleteWebhookError" + } + } +} + +extension Objects.DeleteWebhookError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteWebhookErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.DeleteWebhookError { + func errorCodes() throws -> [Enums.DeleteWebhookErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteWebhookError = Selection +} + +extension Objects { + struct DeleteWebhookSuccess { + let __typename: TypeName = .deleteWebhookSuccess + let webhook: [String: Objects.Webhook] + + enum TypeName: String, Codable { + case deleteWebhookSuccess = "DeleteWebhookSuccess" + } + } +} + +extension Objects.DeleteWebhookSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "webhook": + if let value = try container.decode(Objects.Webhook?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + webhook = map["webhook"] + } +} + +extension Fields where TypeLock == Objects.DeleteWebhookSuccess { + func webhook(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "webhook", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.webhook[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteWebhookSuccess = Selection +} + +extension Objects { + struct DeviceToken { + let __typename: TypeName = .deviceToken + let createdAt: [String: DateTime] + let id: [String: String] + let token: [String: String] + + enum TypeName: String, Codable { + case deviceToken = "DeviceToken" + } + } +} + +extension Objects.DeviceToken: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "createdAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "url": + case "token": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } @@ -4572,22 +4325,41 @@ extension Objects.SaveSuccess: Decodable { } } - clientRequestId = map["clientRequestId"] - url = map["url"] + createdAt = map["createdAt"] + id = map["id"] + token = map["token"] } } -extension Fields where TypeLock == Objects.SaveSuccess { - func url() throws -> String { +extension Fields where TypeLock == Objects.DeviceToken { + func createdAt() throws -> DateTime { let field = GraphQLField.leaf( - name: "url", + name: "createdAt", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.url[field.alias!] { + if let data = data.createdAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { return data } throw HttpError.badpayload @@ -4596,16 +4368,16 @@ extension Fields where TypeLock == Objects.SaveSuccess { } } - func clientRequestId() throws -> String { + func token() throws -> String { let field = GraphQLField.leaf( - name: "clientRequestId", + name: "token", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.clientRequestId[field.alias!] { + if let data = data.token[field.alias!] { return data } throw HttpError.badpayload @@ -4616,531 +4388,7 @@ extension Fields where TypeLock == Objects.SaveSuccess { } extension Selection where TypeLock == Never, Type == Never { - typealias SaveSuccess = Selection -} - -extension Objects { - struct UpdatePageSuccess { - let __typename: TypeName = .updatePageSuccess - let updatedPage: [String: Objects.Page] - - enum TypeName: String, Codable { - case updatePageSuccess = "UpdatePageSuccess" - } - } -} - -extension Objects.UpdatePageSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "updatedPage": - if let value = try container.decode(Objects.Page?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - updatedPage = map["updatedPage"] - } -} - -extension Fields where TypeLock == Objects.UpdatePageSuccess { - func updatedPage(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updatedPage", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updatedPage[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdatePageSuccess = Selection -} - -extension Objects { - struct UpdatePageError { - let __typename: TypeName = .updatePageError - let errorCodes: [String: [Enums.UpdatePageErrorCode]] - - enum TypeName: String, Codable { - case updatePageError = "UpdatePageError" - } - } -} - -extension Objects.UpdatePageError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdatePageErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.UpdatePageError { - func errorCodes() throws -> [Enums.UpdatePageErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdatePageError = Selection -} - -extension Objects { - struct SetFollowError { - let __typename: TypeName = .setFollowError - let errorCodes: [String: [Enums.SetFollowErrorCode]] - - enum TypeName: String, Codable { - case setFollowError = "SetFollowError" - } - } -} - -extension Objects.SetFollowError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SetFollowErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.SetFollowError { - func errorCodes() throws -> [Enums.SetFollowErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetFollowError = Selection -} - -extension Objects { - struct SetFollowSuccess { - let __typename: TypeName = .setFollowSuccess - let updatedUser: [String: Objects.User] - - enum TypeName: String, Codable { - case setFollowSuccess = "SetFollowSuccess" - } - } -} - -extension Objects.SetFollowSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "updatedUser": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - updatedUser = map["updatedUser"] - } -} - -extension Fields where TypeLock == Objects.SetFollowSuccess { - func updatedUser(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updatedUser", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updatedUser[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetFollowSuccess = Selection -} - -extension Objects { - struct SaveArticleReadingProgressError { - let __typename: TypeName = .saveArticleReadingProgressError - let errorCodes: [String: [Enums.SaveArticleReadingProgressErrorCode]] - - enum TypeName: String, Codable { - case saveArticleReadingProgressError = "SaveArticleReadingProgressError" - } - } -} - -extension Objects.SaveArticleReadingProgressError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SaveArticleReadingProgressErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.SaveArticleReadingProgressError { - func errorCodes() throws -> [Enums.SaveArticleReadingProgressErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SaveArticleReadingProgressError = Selection -} - -extension Objects { - struct SaveArticleReadingProgressSuccess { - let __typename: TypeName = .saveArticleReadingProgressSuccess - let updatedArticle: [String: Objects.Article] - - enum TypeName: String, Codable { - case saveArticleReadingProgressSuccess = "SaveArticleReadingProgressSuccess" - } - } -} - -extension Objects.SaveArticleReadingProgressSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "updatedArticle": - if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - updatedArticle = map["updatedArticle"] - } -} - -extension Fields where TypeLock == Objects.SaveArticleReadingProgressSuccess { - func updatedArticle(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updatedArticle", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updatedArticle[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SaveArticleReadingProgressSuccess = Selection -} - -extension Objects { - struct SetBookmarkArticleError { - let __typename: TypeName = .setBookmarkArticleError - let errorCodes: [String: [Enums.SetBookmarkArticleErrorCode]] - - enum TypeName: String, Codable { - case setBookmarkArticleError = "SetBookmarkArticleError" - } - } -} - -extension Objects.SetBookmarkArticleError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SetBookmarkArticleErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.SetBookmarkArticleError { - func errorCodes() throws -> [Enums.SetBookmarkArticleErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetBookmarkArticleError = Selection -} - -extension Objects { - struct SetBookmarkArticleSuccess { - let __typename: TypeName = .setBookmarkArticleSuccess - let bookmarkedArticle: [String: Objects.Article] - - enum TypeName: String, Codable { - case setBookmarkArticleSuccess = "SetBookmarkArticleSuccess" - } - } -} - -extension Objects.SetBookmarkArticleSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "bookmarkedArticle": - if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - bookmarkedArticle = map["bookmarkedArticle"] - } -} - -extension Fields where TypeLock == Objects.SetBookmarkArticleSuccess { - func bookmarkedArticle(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "bookmarkedArticle", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.bookmarkedArticle[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetBookmarkArticleSuccess = Selection + typealias DeviceToken = Selection } extension Objects { @@ -5239,21 +4487,18 @@ extension Objects.FeedArticle: Decodable { } extension Fields where TypeLock == Objects.FeedArticle { - func id() throws -> String { + func annotationsCount() throws -> Int? { let field = GraphQLField.leaf( - name: "id", + name: "annotationsCount", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.id[field.alias!] { - return data - } - throw HttpError.badpayload + return data.annotationsCount[field.alias!] case .mocking: - return String.mockValue + return nil } } @@ -5276,9 +4521,9 @@ extension Fields where TypeLock == Objects.FeedArticle { } } - func sharedBy(selection: Selection) throws -> Type { + func highlight(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "sharedBy", + name: "highlight", arguments: [], selection: selection.selection ) @@ -5286,7 +4531,56 @@ extension Fields where TypeLock == Objects.FeedArticle { switch response { case let .decoding(data): - if let data = data.sharedBy[field.alias!] { + return try selection.decode(data: data.highlight[field.alias!]) + case .mocking: + return selection.mock() + } + } + + func highlightsCount() throws -> Int? { + let field = GraphQLField.leaf( + name: "highlightsCount", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.highlightsCount[field.alias!] + case .mocking: + return nil + } + } + + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func reactions(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "reactions", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.reactions[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -5313,6 +4607,25 @@ extension Fields where TypeLock == Objects.FeedArticle { } } + func sharedBy(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "sharedBy", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.sharedBy[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + func sharedComment() throws -> String? { let field = GraphQLField.leaf( name: "sharedComment", @@ -5342,71 +4655,6 @@ extension Fields where TypeLock == Objects.FeedArticle { return nil } } - - func highlightsCount() throws -> Int? { - let field = GraphQLField.leaf( - name: "highlightsCount", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.highlightsCount[field.alias!] - case .mocking: - return nil - } - } - - func annotationsCount() throws -> Int? { - let field = GraphQLField.leaf( - name: "annotationsCount", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.annotationsCount[field.alias!] - case .mocking: - return nil - } - } - - func highlight(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "highlight", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - return try selection.decode(data: data.highlight[field.alias!]) - case .mocking: - return selection.mock() - } - } - - func reactions(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "reactions", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.reactions[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } } extension Selection where TypeLock == Never, Type == Never { @@ -5414,30 +4662,18 @@ extension Selection where TypeLock == Never, Type == Never { } extension Objects { - struct Highlight { - let __typename: TypeName = .highlight - let annotation: [String: String] - let createdAt: [String: DateTime] - let createdByMe: [String: Bool] - let id: [String: String] - let patch: [String: String] - let prefix: [String: String] - let quote: [String: String] - let reactions: [String: [Objects.Reaction]] - let replies: [String: [Objects.HighlightReply]] - let sharedAt: [String: DateTime] - let shortId: [String: String] - let suffix: [String: String] - let updatedAt: [String: DateTime] - let user: [String: Objects.User] + struct FeedArticleEdge { + let __typename: TypeName = .feedArticleEdge + let cursor: [String: String] + let node: [String: Objects.FeedArticle] enum TypeName: String, Codable { - case highlight = "Highlight" + case feedArticleEdge = "FeedArticleEdge" } } } -extension Objects.Highlight: Decodable { +extension Objects.FeedArticleEdge: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -5449,60 +4685,12 @@ extension Objects.Highlight: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "annotation": + case "cursor": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "createdAt": - if let value = try container.decode(DateTime?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "createdByMe": - if let value = try container.decode(Bool?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "id": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "patch": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "prefix": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "quote": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "reactions": - if let value = try container.decode([Objects.Reaction]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "replies": - if let value = try container.decode([Objects.HighlightReply]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "sharedAt": - if let value = try container.decode(DateTime?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "shortId": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "suffix": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updatedAt": - if let value = try container.decode(DateTime?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "user": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + case "node": + if let value = try container.decode(Objects.FeedArticle?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -5515,34 +4703,22 @@ extension Objects.Highlight: Decodable { } } - annotation = map["annotation"] - createdAt = map["createdAt"] - createdByMe = map["createdByMe"] - id = map["id"] - patch = map["patch"] - prefix = map["prefix"] - quote = map["quote"] - reactions = map["reactions"] - replies = map["replies"] - sharedAt = map["sharedAt"] - shortId = map["shortId"] - suffix = map["suffix"] - updatedAt = map["updatedAt"] - user = map["user"] + cursor = map["cursor"] + node = map["node"] } } -extension Fields where TypeLock == Objects.Highlight { - func id() throws -> String { +extension Fields where TypeLock == Objects.FeedArticleEdge { + func cursor() throws -> String { let field = GraphQLField.leaf( - name: "id", + name: "cursor", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.id[field.alias!] { + if let data = data.cursor[field.alias!] { return data } throw HttpError.badpayload @@ -5551,27 +4727,9 @@ extension Fields where TypeLock == Objects.Highlight { } } - func shortId() throws -> String { - let field = GraphQLField.leaf( - name: "shortId", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.shortId[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func user(selection: Selection) throws -> Type { + func node(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "user", + name: "node", arguments: [], selection: selection.selection ) @@ -5579,261 +4737,7 @@ extension Fields where TypeLock == Objects.Highlight { switch response { case let .decoding(data): - if let data = data.user[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func quote() throws -> String { - let field = GraphQLField.leaf( - name: "quote", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.quote[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func prefix() throws -> String? { - let field = GraphQLField.leaf( - name: "prefix", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.prefix[field.alias!] - case .mocking: - return nil - } - } - - func suffix() throws -> String? { - let field = GraphQLField.leaf( - name: "suffix", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.suffix[field.alias!] - case .mocking: - return nil - } - } - - func patch() throws -> String { - let field = GraphQLField.leaf( - name: "patch", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.patch[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func annotation() throws -> String? { - let field = GraphQLField.leaf( - name: "annotation", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.annotation[field.alias!] - case .mocking: - return nil - } - } - - func replies(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "replies", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.replies[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func sharedAt() throws -> DateTime? { - let field = GraphQLField.leaf( - name: "sharedAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.sharedAt[field.alias!] - case .mocking: - return nil - } - } - - func createdAt() throws -> DateTime { - let field = GraphQLField.leaf( - name: "createdAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createdAt[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return DateTime.mockValue - } - } - - func updatedAt() throws -> DateTime { - let field = GraphQLField.leaf( - name: "updatedAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updatedAt[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return DateTime.mockValue - } - } - - func reactions(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "reactions", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.reactions[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func createdByMe() throws -> Bool { - let field = GraphQLField.leaf( - name: "createdByMe", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createdByMe[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Bool.mockValue - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias Highlight = Selection -} - -extension Objects { - struct CreateHighlightSuccess { - let __typename: TypeName = .createHighlightSuccess - let highlight: [String: Objects.Highlight] - - enum TypeName: String, Codable { - case createHighlightSuccess = "CreateHighlightSuccess" - } - } -} - -extension Objects.CreateHighlightSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "highlight": - if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - highlight = map["highlight"] - } -} - -extension Fields where TypeLock == Objects.CreateHighlightSuccess { - func highlight(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "highlight", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.highlight[field.alias!] { + if let data = data.node[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -5844,1490 +4748,7 @@ extension Fields where TypeLock == Objects.CreateHighlightSuccess { } extension Selection where TypeLock == Never, Type == Never { - typealias CreateHighlightSuccess = Selection -} - -extension Objects { - struct CreateHighlightError { - let __typename: TypeName = .createHighlightError - let errorCodes: [String: [Enums.CreateHighlightErrorCode]] - - enum TypeName: String, Codable { - case createHighlightError = "CreateHighlightError" - } - } -} - -extension Objects.CreateHighlightError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateHighlightErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.CreateHighlightError { - func errorCodes() throws -> [Enums.CreateHighlightErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateHighlightError = Selection -} - -extension Objects { - struct MergeHighlightSuccess { - let __typename: TypeName = .mergeHighlightSuccess - let highlight: [String: Objects.Highlight] - let overlapHighlightIdList: [String: [String]] - - enum TypeName: String, Codable { - case mergeHighlightSuccess = "MergeHighlightSuccess" - } - } -} - -extension Objects.MergeHighlightSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "highlight": - if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "overlapHighlightIdList": - if let value = try container.decode([String]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - highlight = map["highlight"] - overlapHighlightIdList = map["overlapHighlightIdList"] - } -} - -extension Fields where TypeLock == Objects.MergeHighlightSuccess { - func highlight(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "highlight", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.highlight[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func overlapHighlightIdList() throws -> [String] { - let field = GraphQLField.leaf( - name: "overlapHighlightIdList", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.overlapHighlightIdList[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias MergeHighlightSuccess = Selection -} - -extension Objects { - struct MergeHighlightError { - let __typename: TypeName = .mergeHighlightError - let errorCodes: [String: [Enums.MergeHighlightErrorCode]] - - enum TypeName: String, Codable { - case mergeHighlightError = "MergeHighlightError" - } - } -} - -extension Objects.MergeHighlightError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.MergeHighlightErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.MergeHighlightError { - func errorCodes() throws -> [Enums.MergeHighlightErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias MergeHighlightError = Selection -} - -extension Objects { - struct UpdateHighlightSuccess { - let __typename: TypeName = .updateHighlightSuccess - let highlight: [String: Objects.Highlight] - - enum TypeName: String, Codable { - case updateHighlightSuccess = "UpdateHighlightSuccess" - } - } -} - -extension Objects.UpdateHighlightSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "highlight": - if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - highlight = map["highlight"] - } -} - -extension Fields where TypeLock == Objects.UpdateHighlightSuccess { - func highlight(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "highlight", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.highlight[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateHighlightSuccess = Selection -} - -extension Objects { - struct UpdateHighlightError { - let __typename: TypeName = .updateHighlightError - let errorCodes: [String: [Enums.UpdateHighlightErrorCode]] - - enum TypeName: String, Codable { - case updateHighlightError = "UpdateHighlightError" - } - } -} - -extension Objects.UpdateHighlightError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateHighlightErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.UpdateHighlightError { - func errorCodes() throws -> [Enums.UpdateHighlightErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateHighlightError = Selection -} - -extension Objects { - struct DeleteHighlightSuccess { - let __typename: TypeName = .deleteHighlightSuccess - let highlight: [String: Objects.Highlight] - - enum TypeName: String, Codable { - case deleteHighlightSuccess = "DeleteHighlightSuccess" - } - } -} - -extension Objects.DeleteHighlightSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "highlight": - if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - highlight = map["highlight"] - } -} - -extension Fields where TypeLock == Objects.DeleteHighlightSuccess { - func highlight(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "highlight", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.highlight[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteHighlightSuccess = Selection -} - -extension Objects { - struct DeleteHighlightError { - let __typename: TypeName = .deleteHighlightError - let errorCodes: [String: [Enums.DeleteHighlightErrorCode]] - - enum TypeName: String, Codable { - case deleteHighlightError = "DeleteHighlightError" - } - } -} - -extension Objects.DeleteHighlightError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.DeleteHighlightErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.DeleteHighlightError { - func errorCodes() throws -> [Enums.DeleteHighlightErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteHighlightError = Selection -} - -extension Objects { - struct HighlightReply { - let __typename: TypeName = .highlightReply - let createdAt: [String: DateTime] - let highlight: [String: Objects.Highlight] - let id: [String: String] - let text: [String: String] - let updatedAt: [String: DateTime] - let user: [String: Objects.User] - - enum TypeName: String, Codable { - case highlightReply = "HighlightReply" - } - } -} - -extension Objects.HighlightReply: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "createdAt": - if let value = try container.decode(DateTime?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "highlight": - if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "id": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "text": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updatedAt": - if let value = try container.decode(DateTime?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "user": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - createdAt = map["createdAt"] - highlight = map["highlight"] - id = map["id"] - text = map["text"] - updatedAt = map["updatedAt"] - user = map["user"] - } -} - -extension Fields where TypeLock == Objects.HighlightReply { - func id() throws -> String { - let field = GraphQLField.leaf( - name: "id", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.id[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func user(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "user", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.user[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func highlight(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "highlight", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.highlight[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func text() throws -> String { - let field = GraphQLField.leaf( - name: "text", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.text[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func createdAt() throws -> DateTime { - let field = GraphQLField.leaf( - name: "createdAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createdAt[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return DateTime.mockValue - } - } - - func updatedAt() throws -> DateTime { - let field = GraphQLField.leaf( - name: "updatedAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updatedAt[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return DateTime.mockValue - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias HighlightReply = Selection -} - -extension Objects { - struct CreateHighlightReplySuccess { - let __typename: TypeName = .createHighlightReplySuccess - let highlightReply: [String: Objects.HighlightReply] - - enum TypeName: String, Codable { - case createHighlightReplySuccess = "CreateHighlightReplySuccess" - } - } -} - -extension Objects.CreateHighlightReplySuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "highlightReply": - if let value = try container.decode(Objects.HighlightReply?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - highlightReply = map["highlightReply"] - } -} - -extension Fields where TypeLock == Objects.CreateHighlightReplySuccess { - func highlightReply(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "highlightReply", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.highlightReply[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateHighlightReplySuccess = Selection -} - -extension Objects { - struct CreateHighlightReplyError { - let __typename: TypeName = .createHighlightReplyError - let errorCodes: [String: [Enums.CreateHighlightReplyErrorCode]] - - enum TypeName: String, Codable { - case createHighlightReplyError = "CreateHighlightReplyError" - } - } -} - -extension Objects.CreateHighlightReplyError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateHighlightReplyErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.CreateHighlightReplyError { - func errorCodes() throws -> [Enums.CreateHighlightReplyErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateHighlightReplyError = Selection -} - -extension Objects { - struct UpdateHighlightReplySuccess { - let __typename: TypeName = .updateHighlightReplySuccess - let highlightReply: [String: Objects.HighlightReply] - - enum TypeName: String, Codable { - case updateHighlightReplySuccess = "UpdateHighlightReplySuccess" - } - } -} - -extension Objects.UpdateHighlightReplySuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "highlightReply": - if let value = try container.decode(Objects.HighlightReply?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - highlightReply = map["highlightReply"] - } -} - -extension Fields where TypeLock == Objects.UpdateHighlightReplySuccess { - func highlightReply(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "highlightReply", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.highlightReply[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateHighlightReplySuccess = Selection -} - -extension Objects { - struct UpdateHighlightReplyError { - let __typename: TypeName = .updateHighlightReplyError - let errorCodes: [String: [Enums.UpdateHighlightReplyErrorCode]] - - enum TypeName: String, Codable { - case updateHighlightReplyError = "UpdateHighlightReplyError" - } - } -} - -extension Objects.UpdateHighlightReplyError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateHighlightReplyErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.UpdateHighlightReplyError { - func errorCodes() throws -> [Enums.UpdateHighlightReplyErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateHighlightReplyError = Selection -} - -extension Objects { - struct DeleteHighlightReplySuccess { - let __typename: TypeName = .deleteHighlightReplySuccess - let highlightReply: [String: Objects.HighlightReply] - - enum TypeName: String, Codable { - case deleteHighlightReplySuccess = "DeleteHighlightReplySuccess" - } - } -} - -extension Objects.DeleteHighlightReplySuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "highlightReply": - if let value = try container.decode(Objects.HighlightReply?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - highlightReply = map["highlightReply"] - } -} - -extension Fields where TypeLock == Objects.DeleteHighlightReplySuccess { - func highlightReply(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "highlightReply", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.highlightReply[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteHighlightReplySuccess = Selection -} - -extension Objects { - struct DeleteHighlightReplyError { - let __typename: TypeName = .deleteHighlightReplyError - let errorCodes: [String: [Enums.DeleteHighlightReplyErrorCode]] - - enum TypeName: String, Codable { - case deleteHighlightReplyError = "DeleteHighlightReplyError" - } - } -} - -extension Objects.DeleteHighlightReplyError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.DeleteHighlightReplyErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.DeleteHighlightReplyError { - func errorCodes() throws -> [Enums.DeleteHighlightReplyErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteHighlightReplyError = Selection -} - -extension Objects { - struct Reaction { - let __typename: TypeName = .reaction - let code: [String: Enums.ReactionType] - let createdAt: [String: DateTime] - let id: [String: String] - let updatedAt: [String: DateTime] - let user: [String: Objects.User] - - enum TypeName: String, Codable { - case reaction = "Reaction" - } - } -} - -extension Objects.Reaction: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "code": - if let value = try container.decode(Enums.ReactionType?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "createdAt": - if let value = try container.decode(DateTime?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "id": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updatedAt": - if let value = try container.decode(DateTime?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "user": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - code = map["code"] - createdAt = map["createdAt"] - id = map["id"] - updatedAt = map["updatedAt"] - user = map["user"] - } -} - -extension Fields where TypeLock == Objects.Reaction { - func id() throws -> String { - let field = GraphQLField.leaf( - name: "id", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.id[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func user(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "user", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.user[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func code() throws -> Enums.ReactionType { - let field = GraphQLField.leaf( - name: "code", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.code[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Enums.ReactionType.allCases.first! - } - } - - func createdAt() throws -> DateTime { - let field = GraphQLField.leaf( - name: "createdAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createdAt[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return DateTime.mockValue - } - } - - func updatedAt() throws -> DateTime? { - let field = GraphQLField.leaf( - name: "updatedAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.updatedAt[field.alias!] - case .mocking: - return nil - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias Reaction = Selection -} - -extension Objects { - struct CreateReactionSuccess { - let __typename: TypeName = .createReactionSuccess - let reaction: [String: Objects.Reaction] - - enum TypeName: String, Codable { - case createReactionSuccess = "CreateReactionSuccess" - } - } -} - -extension Objects.CreateReactionSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "reaction": - if let value = try container.decode(Objects.Reaction?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - reaction = map["reaction"] - } -} - -extension Fields where TypeLock == Objects.CreateReactionSuccess { - func reaction(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "reaction", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.reaction[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateReactionSuccess = Selection -} - -extension Objects { - struct CreateReactionError { - let __typename: TypeName = .createReactionError - let errorCodes: [String: [Enums.CreateReactionErrorCode]] - - enum TypeName: String, Codable { - case createReactionError = "CreateReactionError" - } - } -} - -extension Objects.CreateReactionError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateReactionErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.CreateReactionError { - func errorCodes() throws -> [Enums.CreateReactionErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateReactionError = Selection -} - -extension Objects { - struct DeleteReactionSuccess { - let __typename: TypeName = .deleteReactionSuccess - let reaction: [String: Objects.Reaction] - - enum TypeName: String, Codable { - case deleteReactionSuccess = "DeleteReactionSuccess" - } - } -} - -extension Objects.DeleteReactionSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "reaction": - if let value = try container.decode(Objects.Reaction?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - reaction = map["reaction"] - } -} - -extension Fields where TypeLock == Objects.DeleteReactionSuccess { - func reaction(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "reaction", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.reaction[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteReactionSuccess = Selection -} - -extension Objects { - struct DeleteReactionError { - let __typename: TypeName = .deleteReactionError - let errorCodes: [String: [Enums.DeleteReactionErrorCode]] - - enum TypeName: String, Codable { - case deleteReactionError = "DeleteReactionError" - } - } -} - -extension Objects.DeleteReactionError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.DeleteReactionErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.DeleteReactionError { - func errorCodes() throws -> [Enums.DeleteReactionErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteReactionError = Selection + typealias FeedArticleEdge = Selection } extension Objects { @@ -7487,19 +4908,17 @@ extension Selection where TypeLock == Never, Type == Never { } extension Objects { - struct SetShareArticleSuccess { - let __typename: TypeName = .setShareArticleSuccess - let updatedArticle: [String: Objects.Article] - let updatedFeedArticle: [String: Objects.FeedArticle] - let updatedFeedArticleId: [String: String] + struct GenerateApiKeyError { + let __typename: TypeName = .generateApiKeyError + let errorCodes: [String: [Enums.GenerateApiKeyErrorCode]] enum TypeName: String, Codable { - case setShareArticleSuccess = "SetShareArticleSuccess" + case generateApiKeyError = "GenerateApiKeyError" } } } -extension Objects.SetShareArticleSuccess: Decodable { +extension Objects.GenerateApiKeyError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -7511,16 +4930,8 @@ extension Objects.SetShareArticleSuccess: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "updatedArticle": - if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updatedFeedArticle": - if let value = try container.decode(Objects.FeedArticle?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updatedFeedArticleId": - if let value = try container.decode(String?.self, forKey: codingKey) { + case "errorCodes": + if let value = try container.decode([Enums.GenerateApiKeyErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -7533,31 +4944,79 @@ extension Objects.SetShareArticleSuccess: Decodable { } } - updatedArticle = map["updatedArticle"] - updatedFeedArticle = map["updatedFeedArticle"] - updatedFeedArticleId = map["updatedFeedArticleId"] + errorCodes = map["errorCodes"] } } -extension Fields where TypeLock == Objects.SetShareArticleSuccess { - func updatedFeedArticleId() throws -> String? { +extension Fields where TypeLock == Objects.GenerateApiKeyError { + func errorCodes() throws -> [Enums.GenerateApiKeyErrorCode] { let field = GraphQLField.leaf( - name: "updatedFeedArticleId", + name: "errorCodes", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.updatedFeedArticleId[field.alias!] + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload case .mocking: - return nil + return [] } } +} - func updatedFeedArticle(selection: Selection) throws -> Type { +extension Selection where TypeLock == Never, Type == Never { + typealias GenerateApiKeyError = Selection +} + +extension Objects { + struct GenerateApiKeySuccess { + let __typename: TypeName = .generateApiKeySuccess + let apiKey: [String: Objects.ApiKey] + + enum TypeName: String, Codable { + case generateApiKeySuccess = "GenerateApiKeySuccess" + } + } +} + +extension Objects.GenerateApiKeySuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "apiKey": + if let value = try container.decode(Objects.ApiKey?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + apiKey = map["apiKey"] + } +} + +extension Fields where TypeLock == Objects.GenerateApiKeySuccess { + func apiKey(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "updatedFeedArticle", + name: "apiKey", arguments: [], selection: selection.selection ) @@ -7565,23 +5024,7 @@ extension Fields where TypeLock == Objects.SetShareArticleSuccess { switch response { case let .decoding(data): - return try selection.decode(data: data.updatedFeedArticle[field.alias!]) - case .mocking: - return selection.mock() - } - } - - func updatedArticle(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updatedArticle", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updatedArticle[field.alias!] { + if let data = data.apiKey[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -7592,226 +5035,7 @@ extension Fields where TypeLock == Objects.SetShareArticleSuccess { } extension Selection where TypeLock == Never, Type == Never { - typealias SetShareArticleSuccess = Selection -} - -extension Objects { - struct SetShareArticleError { - let __typename: TypeName = .setShareArticleError - let errorCodes: [String: [Enums.SetShareArticleErrorCode]] - - enum TypeName: String, Codable { - case setShareArticleError = "SetShareArticleError" - } - } -} - -extension Objects.SetShareArticleError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SetShareArticleErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.SetShareArticleError { - func errorCodes() throws -> [Enums.SetShareArticleErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetShareArticleError = Selection -} - -extension Objects { - struct UpdateSharedCommentSuccess { - let __typename: TypeName = .updateSharedCommentSuccess - let articleId: [String: String] - let sharedComment: [String: String] - - enum TypeName: String, Codable { - case updateSharedCommentSuccess = "UpdateSharedCommentSuccess" - } - } -} - -extension Objects.UpdateSharedCommentSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "articleId": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "sharedComment": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - articleId = map["articleId"] - sharedComment = map["sharedComment"] - } -} - -extension Fields where TypeLock == Objects.UpdateSharedCommentSuccess { - func articleId() throws -> String { - let field = GraphQLField.leaf( - name: "articleID", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.articleId[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func sharedComment() throws -> String { - let field = GraphQLField.leaf( - name: "sharedComment", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.sharedComment[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateSharedCommentSuccess = Selection -} - -extension Objects { - struct UpdateSharedCommentError { - let __typename: TypeName = .updateSharedCommentError - let errorCodes: [String: [Enums.UpdateSharedCommentErrorCode]] - - enum TypeName: String, Codable { - case updateSharedCommentError = "UpdateSharedCommentError" - } - } -} - -extension Objects.UpdateSharedCommentError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateSharedCommentErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.UpdateSharedCommentError { - func errorCodes() throws -> [Enums.UpdateSharedCommentErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateSharedCommentError = Selection + typealias GenerateApiKeySuccess = Selection } extension Objects { @@ -8076,194 +5300,6 @@ extension Selection where TypeLock == Never, Type == Never { typealias GetFollowingSuccess = Selection } -extension Objects { - struct UserPersonalization { - let __typename: TypeName = .userPersonalization - let fontFamily: [String: String] - let fontSize: [String: Int] - let id: [String: String] - let libraryLayoutType: [String: String] - let librarySortOrder: [String: Enums.SortOrder] - let margin: [String: Int] - let theme: [String: String] - - enum TypeName: String, Codable { - case userPersonalization = "UserPersonalization" - } - } -} - -extension Objects.UserPersonalization: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "fontFamily": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "fontSize": - if let value = try container.decode(Int?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "id": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "libraryLayoutType": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "librarySortOrder": - if let value = try container.decode(Enums.SortOrder?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "margin": - if let value = try container.decode(Int?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "theme": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - fontFamily = map["fontFamily"] - fontSize = map["fontSize"] - id = map["id"] - libraryLayoutType = map["libraryLayoutType"] - librarySortOrder = map["librarySortOrder"] - margin = map["margin"] - theme = map["theme"] - } -} - -extension Fields where TypeLock == Objects.UserPersonalization { - func id() throws -> String? { - let field = GraphQLField.leaf( - name: "id", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.id[field.alias!] - case .mocking: - return nil - } - } - - func theme() throws -> String? { - let field = GraphQLField.leaf( - name: "theme", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.theme[field.alias!] - case .mocking: - return nil - } - } - - func fontSize() throws -> Int? { - let field = GraphQLField.leaf( - name: "fontSize", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.fontSize[field.alias!] - case .mocking: - return nil - } - } - - func fontFamily() throws -> String? { - let field = GraphQLField.leaf( - name: "fontFamily", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.fontFamily[field.alias!] - case .mocking: - return nil - } - } - - func margin() throws -> Int? { - let field = GraphQLField.leaf( - name: "margin", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.margin[field.alias!] - case .mocking: - return nil - } - } - - func libraryLayoutType() throws -> String? { - let field = GraphQLField.leaf( - name: "libraryLayoutType", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.libraryLayoutType[field.alias!] - case .mocking: - return nil - } - } - - func librarySortOrder() throws -> Enums.SortOrder? { - let field = GraphQLField.leaf( - name: "librarySortOrder", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.librarySortOrder[field.alias!] - case .mocking: - return nil - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UserPersonalization = Selection -} - extension Objects { struct GetUserPersonalizationError { let __typename: TypeName = .getUserPersonalizationError @@ -8393,17 +5429,17 @@ extension Selection where TypeLock == Never, Type == Never { } extension Objects { - struct SetUserPersonalizationError { - let __typename: TypeName = .setUserPersonalizationError - let errorCodes: [String: [Enums.SetUserPersonalizationErrorCode]] + struct GoogleSignupError { + let __typename: TypeName = .googleSignupError + let errorCodes: [String: [Enums.SignupErrorCode?]] enum TypeName: String, Codable { - case setUserPersonalizationError = "SetUserPersonalizationError" + case googleSignupError = "GoogleSignupError" } } } -extension Objects.SetUserPersonalizationError: Decodable { +extension Objects.GoogleSignupError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -8416,7 +5452,7 @@ extension Objects.SetUserPersonalizationError: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.SetUserPersonalizationErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.SignupErrorCode?]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -8433,8 +5469,8 @@ extension Objects.SetUserPersonalizationError: Decodable { } } -extension Fields where TypeLock == Objects.SetUserPersonalizationError { - func errorCodes() throws -> [Enums.SetUserPersonalizationErrorCode] { +extension Fields where TypeLock == Objects.GoogleSignupError { + func errorCodes() throws -> [Enums.SignupErrorCode?] { let field = GraphQLField.leaf( name: "errorCodes", arguments: [] @@ -8454,21 +5490,21 @@ extension Fields where TypeLock == Objects.SetUserPersonalizationError { } extension Selection where TypeLock == Never, Type == Never { - typealias SetUserPersonalizationError = Selection + typealias GoogleSignupError = Selection } extension Objects { - struct SetUserPersonalizationSuccess { - let __typename: TypeName = .setUserPersonalizationSuccess - let updatedUserPersonalization: [String: Objects.UserPersonalization] + struct GoogleSignupSuccess { + let __typename: TypeName = .googleSignupSuccess + let me: [String: Objects.User] enum TypeName: String, Codable { - case setUserPersonalizationSuccess = "SetUserPersonalizationSuccess" + case googleSignupSuccess = "GoogleSignupSuccess" } } } -extension Objects.SetUserPersonalizationSuccess: Decodable { +extension Objects.GoogleSignupSuccess: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -8480,8 +5516,8 @@ extension Objects.SetUserPersonalizationSuccess: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "updatedUserPersonalization": - if let value = try container.decode(Objects.UserPersonalization?.self, forKey: codingKey) { + case "me": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -8494,14 +5530,14 @@ extension Objects.SetUserPersonalizationSuccess: Decodable { } } - updatedUserPersonalization = map["updatedUserPersonalization"] + me = map["me"] } } -extension Fields where TypeLock == Objects.SetUserPersonalizationSuccess { - func updatedUserPersonalization(selection: Selection) throws -> Type { +extension Fields where TypeLock == Objects.GoogleSignupSuccess { + func me(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "updatedUserPersonalization", + name: "me", arguments: [], selection: selection.selection ) @@ -8509,7 +5545,7 @@ extension Fields where TypeLock == Objects.SetUserPersonalizationSuccess { switch response { case let .decoding(data): - if let data = data.updatedUserPersonalization[field.alias!] { + if let data = data.me[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -8520,29 +5556,34 @@ extension Fields where TypeLock == Objects.SetUserPersonalizationSuccess { } extension Selection where TypeLock == Never, Type == Never { - typealias SetUserPersonalizationSuccess = Selection + typealias GoogleSignupSuccess = Selection } extension Objects { - struct ArticleSavingRequest { - let __typename: TypeName = .articleSavingRequest - let article: [String: Objects.Article] + struct Highlight { + let __typename: TypeName = .highlight + let annotation: [String: String] let createdAt: [String: DateTime] - let errorCode: [String: Enums.CreateArticleErrorCode] + let createdByMe: [String: Bool] let id: [String: String] - let slug: [String: String] - let status: [String: Enums.ArticleSavingRequestStatus] + let patch: [String: String] + let prefix: [String: String] + let quote: [String: String] + let reactions: [String: [Objects.Reaction]] + let replies: [String: [Objects.HighlightReply]] + let sharedAt: [String: DateTime] + let shortId: [String: String] + let suffix: [String: String] let updatedAt: [String: DateTime] let user: [String: Objects.User] - let userId: [String: String] enum TypeName: String, Codable { - case articleSavingRequest = "ArticleSavingRequest" + case highlight = "Highlight" } } } -extension Objects.ArticleSavingRequest: Decodable { +extension Objects.Highlight: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -8554,28 +5595,52 @@ extension Objects.ArticleSavingRequest: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "article": - if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { + case "annotation": + if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } case "createdAt": if let value = try container.decode(DateTime?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "errorCode": - if let value = try container.decode(Enums.CreateArticleErrorCode?.self, forKey: codingKey) { + case "createdByMe": + if let value = try container.decode(Bool?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } case "id": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "slug": + case "patch": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "status": - if let value = try container.decode(Enums.ArticleSavingRequestStatus?.self, forKey: codingKey) { + case "prefix": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "quote": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "reactions": + if let value = try container.decode([Objects.Reaction]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "replies": + if let value = try container.decode([Objects.HighlightReply]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "sharedAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "shortId": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "suffix": + if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } case "updatedAt": @@ -8586,10 +5651,6 @@ extension Objects.ArticleSavingRequest: Decodable { if let value = try container.decode(Objects.User?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "userId": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } default: throw DecodingError.dataCorrupted( DecodingError.Context( @@ -8600,19 +5661,75 @@ extension Objects.ArticleSavingRequest: Decodable { } } - article = map["article"] + annotation = map["annotation"] createdAt = map["createdAt"] - errorCode = map["errorCode"] + createdByMe = map["createdByMe"] id = map["id"] - slug = map["slug"] - status = map["status"] + patch = map["patch"] + prefix = map["prefix"] + quote = map["quote"] + reactions = map["reactions"] + replies = map["replies"] + sharedAt = map["sharedAt"] + shortId = map["shortId"] + suffix = map["suffix"] updatedAt = map["updatedAt"] user = map["user"] - userId = map["userId"] } } -extension Fields where TypeLock == Objects.ArticleSavingRequest { +extension Fields where TypeLock == Objects.Highlight { + func annotation() throws -> String? { + let field = GraphQLField.leaf( + name: "annotation", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.annotation[field.alias!] + case .mocking: + return nil + } + } + + func createdAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "createdAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createdAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func createdByMe() throws -> Bool { + let field = GraphQLField.leaf( + name: "createdByMe", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createdByMe[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Bool.mockValue + } + } + func id() throws -> String { let field = GraphQLField.leaf( name: "id", @@ -8631,17 +5748,16 @@ extension Fields where TypeLock == Objects.ArticleSavingRequest { } } - @available(*, deprecated, message: "userId has been replaced with user") - func userId() throws -> String { + func patch() throws -> String { let field = GraphQLField.leaf( - name: "userId", + name: "patch", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.userId[field.alias!] { + if let data = data.patch[field.alias!] { return data } throw HttpError.badpayload @@ -8650,6 +5766,143 @@ extension Fields where TypeLock == Objects.ArticleSavingRequest { } } + func prefix() throws -> String? { + let field = GraphQLField.leaf( + name: "prefix", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.prefix[field.alias!] + case .mocking: + return nil + } + } + + func quote() throws -> String { + let field = GraphQLField.leaf( + name: "quote", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.quote[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func reactions(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "reactions", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.reactions[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func replies(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "replies", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.replies[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func sharedAt() throws -> DateTime? { + let field = GraphQLField.leaf( + name: "sharedAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.sharedAt[field.alias!] + case .mocking: + return nil + } + } + + func shortId() throws -> String { + let field = GraphQLField.leaf( + name: "shortId", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.shortId[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func suffix() throws -> String? { + let field = GraphQLField.leaf( + name: "suffix", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.suffix[field.alias!] + case .mocking: + return nil + } + } + + func updatedAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "updatedAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updatedAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + func user(selection: Selection) throws -> Type { let field = GraphQLField.composite( name: "user", @@ -8668,75 +5921,84 @@ extension Fields where TypeLock == Objects.ArticleSavingRequest { return selection.mock() } } +} - @available(*, deprecated, message: "article has been replaced with slug") - func article(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "article", - arguments: [], - selection: selection.selection - ) - select(field) +extension Selection where TypeLock == Never, Type == Never { + typealias Highlight = Selection +} - switch response { - case let .decoding(data): - return try selection.decode(data: data.article[field.alias!]) - case .mocking: - return selection.mock() +extension Objects { + struct HighlightReply { + let __typename: TypeName = .highlightReply + let createdAt: [String: DateTime] + let highlight: [String: Objects.Highlight] + let id: [String: String] + let text: [String: String] + let updatedAt: [String: DateTime] + let user: [String: Objects.User] + + enum TypeName: String, Codable { + case highlightReply = "HighlightReply" } } +} - func slug() throws -> String { - let field = GraphQLField.leaf( - name: "slug", - arguments: [] - ) - select(field) +extension Objects.HighlightReply: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - switch response { - case let .decoding(data): - if let data = data.slug[field.alias!] { - return data + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "createdAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "highlight": + if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "text": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updatedAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "user": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func status() throws -> Enums.ArticleSavingRequestStatus { - let field = GraphQLField.leaf( - name: "status", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.status[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Enums.ArticleSavingRequestStatus.allCases.first! - } - } - - func errorCode() throws -> Enums.CreateArticleErrorCode? { - let field = GraphQLField.leaf( - name: "errorCode", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.errorCode[field.alias!] - case .mocking: - return nil } + + createdAt = map["createdAt"] + highlight = map["highlight"] + id = map["id"] + text = map["text"] + updatedAt = map["updatedAt"] + user = map["user"] } +} +extension Fields where TypeLock == Objects.HighlightReply { func createdAt() throws -> DateTime { let field = GraphQLField.leaf( name: "createdAt", @@ -8755,6 +6017,61 @@ extension Fields where TypeLock == Objects.ArticleSavingRequest { } } + func highlight(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "highlight", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.highlight[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func text() throws -> String { + let field = GraphQLField.leaf( + name: "text", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.text[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + func updatedAt() throws -> DateTime { let field = GraphQLField.leaf( name: "updatedAt", @@ -8772,122 +6089,10 @@ extension Fields where TypeLock == Objects.ArticleSavingRequest { return DateTime.mockValue } } -} -extension Selection where TypeLock == Never, Type == Never { - typealias ArticleSavingRequest = Selection -} - -extension Objects { - struct ArticleSavingRequestError { - let __typename: TypeName = .articleSavingRequestError - let errorCodes: [String: [Enums.ArticleSavingRequestErrorCode]] - - enum TypeName: String, Codable { - case articleSavingRequestError = "ArticleSavingRequestError" - } - } -} - -extension Objects.ArticleSavingRequestError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.ArticleSavingRequestErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.ArticleSavingRequestError { - func errorCodes() throws -> [Enums.ArticleSavingRequestErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ArticleSavingRequestError = Selection -} - -extension Objects { - struct ArticleSavingRequestSuccess { - let __typename: TypeName = .articleSavingRequestSuccess - let articleSavingRequest: [String: Objects.ArticleSavingRequest] - - enum TypeName: String, Codable { - case articleSavingRequestSuccess = "ArticleSavingRequestSuccess" - } - } -} - -extension Objects.ArticleSavingRequestSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "articleSavingRequest": - if let value = try container.decode(Objects.ArticleSavingRequest?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - articleSavingRequest = map["articleSavingRequest"] - } -} - -extension Fields where TypeLock == Objects.ArticleSavingRequestSuccess { - func articleSavingRequest(selection: Selection) throws -> Type { + func user(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "articleSavingRequest", + name: "user", arguments: [], selection: selection.selection ) @@ -8895,7 +6100,7 @@ extension Fields where TypeLock == Objects.ArticleSavingRequestSuccess { switch response { case let .decoding(data): - if let data = data.articleSavingRequest[field.alias!] { + if let data = data.user[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -8906,21 +6111,21 @@ extension Fields where TypeLock == Objects.ArticleSavingRequestSuccess { } extension Selection where TypeLock == Never, Type == Never { - typealias ArticleSavingRequestSuccess = Selection + typealias HighlightReply = Selection } extension Objects { - struct CreateArticleSavingRequestError { - let __typename: TypeName = .createArticleSavingRequestError - let errorCodes: [String: [Enums.CreateArticleSavingRequestErrorCode]] + struct HighlightStats { + let __typename: TypeName = .highlightStats + let highlightCount: [String: Int] enum TypeName: String, Codable { - case createArticleSavingRequestError = "CreateArticleSavingRequestError" + case highlightStats = "HighlightStats" } } } -extension Objects.CreateArticleSavingRequestError: Decodable { +extension Objects.HighlightStats: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -8932,8 +6137,8 @@ extension Objects.CreateArticleSavingRequestError: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateArticleSavingRequestErrorCode]?.self, forKey: codingKey) { + case "highlightCount": + if let value = try container.decode(Int?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -8946,2010 +6151,32 @@ extension Objects.CreateArticleSavingRequestError: Decodable { } } - errorCodes = map["errorCodes"] + highlightCount = map["highlightCount"] } } -extension Fields where TypeLock == Objects.CreateArticleSavingRequestError { - func errorCodes() throws -> [Enums.CreateArticleSavingRequestErrorCode] { +extension Fields where TypeLock == Objects.HighlightStats { + func highlightCount() throws -> Int { let field = GraphQLField.leaf( - name: "errorCodes", + name: "highlightCount", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.errorCodes[field.alias!] { + if let data = data.highlightCount[field.alias!] { return data } throw HttpError.badpayload case .mocking: - return [] + return Int.mockValue } } } extension Selection where TypeLock == Never, Type == Never { - typealias CreateArticleSavingRequestError = Selection -} - -extension Objects { - struct CreateArticleSavingRequestSuccess { - let __typename: TypeName = .createArticleSavingRequestSuccess - let articleSavingRequest: [String: Objects.ArticleSavingRequest] - - enum TypeName: String, Codable { - case createArticleSavingRequestSuccess = "CreateArticleSavingRequestSuccess" - } - } -} - -extension Objects.CreateArticleSavingRequestSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "articleSavingRequest": - if let value = try container.decode(Objects.ArticleSavingRequest?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - articleSavingRequest = map["articleSavingRequest"] - } -} - -extension Fields where TypeLock == Objects.CreateArticleSavingRequestSuccess { - func articleSavingRequest(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "articleSavingRequest", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.articleSavingRequest[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateArticleSavingRequestSuccess = Selection -} - -extension Objects { - struct SetShareHighlightError { - let __typename: TypeName = .setShareHighlightError - let errorCodes: [String: [Enums.SetShareHighlightErrorCode]] - - enum TypeName: String, Codable { - case setShareHighlightError = "SetShareHighlightError" - } - } -} - -extension Objects.SetShareHighlightError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SetShareHighlightErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.SetShareHighlightError { - func errorCodes() throws -> [Enums.SetShareHighlightErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetShareHighlightError = Selection -} - -extension Objects { - struct SetShareHighlightSuccess { - let __typename: TypeName = .setShareHighlightSuccess - let highlight: [String: Objects.Highlight] - - enum TypeName: String, Codable { - case setShareHighlightSuccess = "SetShareHighlightSuccess" - } - } -} - -extension Objects.SetShareHighlightSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "highlight": - if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - highlight = map["highlight"] - } -} - -extension Fields where TypeLock == Objects.SetShareHighlightSuccess { - func highlight(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "highlight", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.highlight[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetShareHighlightSuccess = Selection -} - -extension Objects { - struct ReportItemResult { - let __typename: TypeName = .reportItemResult - let message: [String: String] - - enum TypeName: String, Codable { - case reportItemResult = "ReportItemResult" - } - } -} - -extension Objects.ReportItemResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "message": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - message = map["message"] - } -} - -extension Fields where TypeLock == Objects.ReportItemResult { - func message() throws -> String { - let field = GraphQLField.leaf( - name: "message", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.message[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ReportItemResult = Selection -} - -extension Objects { - struct UpdateLinkShareInfoError { - let __typename: TypeName = .updateLinkShareInfoError - let errorCodes: [String: [Enums.UpdateLinkShareInfoErrorCode]] - - enum TypeName: String, Codable { - case updateLinkShareInfoError = "UpdateLinkShareInfoError" - } - } -} - -extension Objects.UpdateLinkShareInfoError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateLinkShareInfoErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.UpdateLinkShareInfoError { - func errorCodes() throws -> [Enums.UpdateLinkShareInfoErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateLinkShareInfoError = Selection -} - -extension Objects { - struct UpdateLinkShareInfoSuccess { - let __typename: TypeName = .updateLinkShareInfoSuccess - let message: [String: String] - - enum TypeName: String, Codable { - case updateLinkShareInfoSuccess = "UpdateLinkShareInfoSuccess" - } - } -} - -extension Objects.UpdateLinkShareInfoSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "message": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - message = map["message"] - } -} - -extension Fields where TypeLock == Objects.UpdateLinkShareInfoSuccess { - func message() throws -> String { - let field = GraphQLField.leaf( - name: "message", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.message[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateLinkShareInfoSuccess = Selection -} - -extension Objects { - struct ArchiveLinkError { - let __typename: TypeName = .archiveLinkError - let errorCodes: [String: [Enums.ArchiveLinkErrorCode]] - let message: [String: String] - - enum TypeName: String, Codable { - case archiveLinkError = "ArchiveLinkError" - } - } -} - -extension Objects.ArchiveLinkError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.ArchiveLinkErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "message": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - message = map["message"] - } -} - -extension Fields where TypeLock == Objects.ArchiveLinkError { - func message() throws -> String { - let field = GraphQLField.leaf( - name: "message", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.message[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func errorCodes() throws -> [Enums.ArchiveLinkErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ArchiveLinkError = Selection -} - -extension Objects { - struct ArchiveLinkSuccess { - let __typename: TypeName = .archiveLinkSuccess - let linkId: [String: String] - let message: [String: String] - - enum TypeName: String, Codable { - case archiveLinkSuccess = "ArchiveLinkSuccess" - } - } -} - -extension Objects.ArchiveLinkSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "linkId": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "message": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - linkId = map["linkId"] - message = map["message"] - } -} - -extension Fields where TypeLock == Objects.ArchiveLinkSuccess { - func linkId() throws -> String { - let field = GraphQLField.leaf( - name: "linkId", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.linkId[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func message() throws -> String { - let field = GraphQLField.leaf( - name: "message", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.message[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ArchiveLinkSuccess = Selection -} - -extension Objects { - struct NewsletterEmail { - let __typename: TypeName = .newsletterEmail - let address: [String: String] - let confirmationCode: [String: String] - let id: [String: String] - - enum TypeName: String, Codable { - case newsletterEmail = "NewsletterEmail" - } - } -} - -extension Objects.NewsletterEmail: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "address": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "confirmationCode": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "id": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - address = map["address"] - confirmationCode = map["confirmationCode"] - id = map["id"] - } -} - -extension Fields where TypeLock == Objects.NewsletterEmail { - func id() throws -> String { - let field = GraphQLField.leaf( - name: "id", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.id[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func address() throws -> String { - let field = GraphQLField.leaf( - name: "address", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.address[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func confirmationCode() throws -> String? { - let field = GraphQLField.leaf( - name: "confirmationCode", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.confirmationCode[field.alias!] - case .mocking: - return nil - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias NewsletterEmail = Selection -} - -extension Objects { - struct NewsletterEmailsSuccess { - let __typename: TypeName = .newsletterEmailsSuccess - let newsletterEmails: [String: [Objects.NewsletterEmail]] - - enum TypeName: String, Codable { - case newsletterEmailsSuccess = "NewsletterEmailsSuccess" - } - } -} - -extension Objects.NewsletterEmailsSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "newsletterEmails": - if let value = try container.decode([Objects.NewsletterEmail]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - newsletterEmails = map["newsletterEmails"] - } -} - -extension Fields where TypeLock == Objects.NewsletterEmailsSuccess { - func newsletterEmails(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "newsletterEmails", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.newsletterEmails[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias NewsletterEmailsSuccess = Selection -} - -extension Objects { - struct NewsletterEmailsError { - let __typename: TypeName = .newsletterEmailsError - let errorCodes: [String: [Enums.NewsletterEmailsErrorCode]] - - enum TypeName: String, Codable { - case newsletterEmailsError = "NewsletterEmailsError" - } - } -} - -extension Objects.NewsletterEmailsError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.NewsletterEmailsErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.NewsletterEmailsError { - func errorCodes() throws -> [Enums.NewsletterEmailsErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias NewsletterEmailsError = Selection -} - -extension Objects { - struct CreateNewsletterEmailSuccess { - let __typename: TypeName = .createNewsletterEmailSuccess - let newsletterEmail: [String: Objects.NewsletterEmail] - - enum TypeName: String, Codable { - case createNewsletterEmailSuccess = "CreateNewsletterEmailSuccess" - } - } -} - -extension Objects.CreateNewsletterEmailSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "newsletterEmail": - if let value = try container.decode(Objects.NewsletterEmail?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - newsletterEmail = map["newsletterEmail"] - } -} - -extension Fields where TypeLock == Objects.CreateNewsletterEmailSuccess { - func newsletterEmail(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "newsletterEmail", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.newsletterEmail[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateNewsletterEmailSuccess = Selection -} - -extension Objects { - struct CreateNewsletterEmailError { - let __typename: TypeName = .createNewsletterEmailError - let errorCodes: [String: [Enums.CreateNewsletterEmailErrorCode]] - - enum TypeName: String, Codable { - case createNewsletterEmailError = "CreateNewsletterEmailError" - } - } -} - -extension Objects.CreateNewsletterEmailError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateNewsletterEmailErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.CreateNewsletterEmailError { - func errorCodes() throws -> [Enums.CreateNewsletterEmailErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateNewsletterEmailError = Selection -} - -extension Objects { - struct DeleteNewsletterEmailSuccess { - let __typename: TypeName = .deleteNewsletterEmailSuccess - let newsletterEmail: [String: Objects.NewsletterEmail] - - enum TypeName: String, Codable { - case deleteNewsletterEmailSuccess = "DeleteNewsletterEmailSuccess" - } - } -} - -extension Objects.DeleteNewsletterEmailSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "newsletterEmail": - if let value = try container.decode(Objects.NewsletterEmail?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - newsletterEmail = map["newsletterEmail"] - } -} - -extension Fields where TypeLock == Objects.DeleteNewsletterEmailSuccess { - func newsletterEmail(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "newsletterEmail", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.newsletterEmail[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteNewsletterEmailSuccess = Selection -} - -extension Objects { - struct DeleteNewsletterEmailError { - let __typename: TypeName = .deleteNewsletterEmailError - let errorCodes: [String: [Enums.DeleteNewsletterEmailErrorCode]] - - enum TypeName: String, Codable { - case deleteNewsletterEmailError = "DeleteNewsletterEmailError" - } - } -} - -extension Objects.DeleteNewsletterEmailError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.DeleteNewsletterEmailErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.DeleteNewsletterEmailError { - func errorCodes() throws -> [Enums.DeleteNewsletterEmailErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteNewsletterEmailError = Selection -} - -extension Objects { - struct Reminder { - let __typename: TypeName = .reminder - let archiveUntil: [String: Bool] - let id: [String: String] - let remindAt: [String: DateTime] - let sendNotification: [String: Bool] - - enum TypeName: String, Codable { - case reminder = "Reminder" - } - } -} - -extension Objects.Reminder: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "archiveUntil": - if let value = try container.decode(Bool?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "id": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "remindAt": - if let value = try container.decode(DateTime?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "sendNotification": - if let value = try container.decode(Bool?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - archiveUntil = map["archiveUntil"] - id = map["id"] - remindAt = map["remindAt"] - sendNotification = map["sendNotification"] - } -} - -extension Fields where TypeLock == Objects.Reminder { - func id() throws -> String { - let field = GraphQLField.leaf( - name: "id", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.id[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func archiveUntil() throws -> Bool { - let field = GraphQLField.leaf( - name: "archiveUntil", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.archiveUntil[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Bool.mockValue - } - } - - func sendNotification() throws -> Bool { - let field = GraphQLField.leaf( - name: "sendNotification", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.sendNotification[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Bool.mockValue - } - } - - func remindAt() throws -> DateTime { - let field = GraphQLField.leaf( - name: "remindAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.remindAt[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return DateTime.mockValue - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias Reminder = Selection -} - -extension Objects { - struct ReminderSuccess { - let __typename: TypeName = .reminderSuccess - let reminder: [String: Objects.Reminder] - - enum TypeName: String, Codable { - case reminderSuccess = "ReminderSuccess" - } - } -} - -extension Objects.ReminderSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "reminder": - if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - reminder = map["reminder"] - } -} - -extension Fields where TypeLock == Objects.ReminderSuccess { - func reminder(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "reminder", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.reminder[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ReminderSuccess = Selection -} - -extension Objects { - struct ReminderError { - let __typename: TypeName = .reminderError - let errorCodes: [String: [Enums.ReminderErrorCode]] - - enum TypeName: String, Codable { - case reminderError = "ReminderError" - } - } -} - -extension Objects.ReminderError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.ReminderErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.ReminderError { - func errorCodes() throws -> [Enums.ReminderErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ReminderError = Selection -} - -extension Objects { - struct CreateReminderSuccess { - let __typename: TypeName = .createReminderSuccess - let reminder: [String: Objects.Reminder] - - enum TypeName: String, Codable { - case createReminderSuccess = "CreateReminderSuccess" - } - } -} - -extension Objects.CreateReminderSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "reminder": - if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - reminder = map["reminder"] - } -} - -extension Fields where TypeLock == Objects.CreateReminderSuccess { - func reminder(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "reminder", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.reminder[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateReminderSuccess = Selection -} - -extension Objects { - struct CreateReminderError { - let __typename: TypeName = .createReminderError - let errorCodes: [String: [Enums.CreateReminderErrorCode]] - - enum TypeName: String, Codable { - case createReminderError = "CreateReminderError" - } - } -} - -extension Objects.CreateReminderError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateReminderErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.CreateReminderError { - func errorCodes() throws -> [Enums.CreateReminderErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateReminderError = Selection -} - -extension Objects { - struct UpdateReminderSuccess { - let __typename: TypeName = .updateReminderSuccess - let reminder: [String: Objects.Reminder] - - enum TypeName: String, Codable { - case updateReminderSuccess = "UpdateReminderSuccess" - } - } -} - -extension Objects.UpdateReminderSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "reminder": - if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - reminder = map["reminder"] - } -} - -extension Fields where TypeLock == Objects.UpdateReminderSuccess { - func reminder(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "reminder", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.reminder[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateReminderSuccess = Selection -} - -extension Objects { - struct UpdateReminderError { - let __typename: TypeName = .updateReminderError - let errorCodes: [String: [Enums.UpdateReminderErrorCode]] - - enum TypeName: String, Codable { - case updateReminderError = "UpdateReminderError" - } - } -} - -extension Objects.UpdateReminderError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateReminderErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.UpdateReminderError { - func errorCodes() throws -> [Enums.UpdateReminderErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateReminderError = Selection -} - -extension Objects { - struct DeleteReminderSuccess { - let __typename: TypeName = .deleteReminderSuccess - let reminder: [String: Objects.Reminder] - - enum TypeName: String, Codable { - case deleteReminderSuccess = "DeleteReminderSuccess" - } - } -} - -extension Objects.DeleteReminderSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "reminder": - if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - reminder = map["reminder"] - } -} - -extension Fields where TypeLock == Objects.DeleteReminderSuccess { - func reminder(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "reminder", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.reminder[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteReminderSuccess = Selection -} - -extension Objects { - struct DeleteReminderError { - let __typename: TypeName = .deleteReminderError - let errorCodes: [String: [Enums.DeleteReminderErrorCode]] - - enum TypeName: String, Codable { - case deleteReminderError = "DeleteReminderError" - } - } -} - -extension Objects.DeleteReminderError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.DeleteReminderErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.DeleteReminderError { - func errorCodes() throws -> [Enums.DeleteReminderErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteReminderError = Selection -} - -extension Objects { - struct DeviceToken { - let __typename: TypeName = .deviceToken - let createdAt: [String: DateTime] - let id: [String: String] - let token: [String: String] - - enum TypeName: String, Codable { - case deviceToken = "DeviceToken" - } - } -} - -extension Objects.DeviceToken: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "createdAt": - if let value = try container.decode(DateTime?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "id": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "token": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - createdAt = map["createdAt"] - id = map["id"] - token = map["token"] - } -} - -extension Fields where TypeLock == Objects.DeviceToken { - func id() throws -> String { - let field = GraphQLField.leaf( - name: "id", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.id[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func token() throws -> String { - let field = GraphQLField.leaf( - name: "token", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.token[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func createdAt() throws -> DateTime { - let field = GraphQLField.leaf( - name: "createdAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createdAt[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return DateTime.mockValue - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeviceToken = Selection -} - -extension Objects { - struct SetDeviceTokenSuccess { - let __typename: TypeName = .setDeviceTokenSuccess - let deviceToken: [String: Objects.DeviceToken] - - enum TypeName: String, Codable { - case setDeviceTokenSuccess = "SetDeviceTokenSuccess" - } - } -} - -extension Objects.SetDeviceTokenSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "deviceToken": - if let value = try container.decode(Objects.DeviceToken?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - deviceToken = map["deviceToken"] - } -} - -extension Fields where TypeLock == Objects.SetDeviceTokenSuccess { - func deviceToken(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "deviceToken", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.deviceToken[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetDeviceTokenSuccess = Selection -} - -extension Objects { - struct SetDeviceTokenError { - let __typename: TypeName = .setDeviceTokenError - let errorCodes: [String: [Enums.SetDeviceTokenErrorCode]] - - enum TypeName: String, Codable { - case setDeviceTokenError = "SetDeviceTokenError" - } - } -} - -extension Objects.SetDeviceTokenError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SetDeviceTokenErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.SetDeviceTokenError { - func errorCodes() throws -> [Enums.SetDeviceTokenErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetDeviceTokenError = Selection + typealias HighlightStats = Selection } extension Objects { @@ -11018,6 +6245,54 @@ extension Objects.Label: Decodable { } extension Fields where TypeLock == Objects.Label { + func color() throws -> String { + let field = GraphQLField.leaf( + name: "color", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.color[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func createdAt() throws -> DateTime? { + let field = GraphQLField.leaf( + name: "createdAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.createdAt[field.alias!] + case .mocking: + return nil + } + } + + func description() throws -> String? { + let field = GraphQLField.leaf( + name: "description", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.description[field.alias!] + case .mocking: + return nil + } + } + func id() throws -> String { let field = GraphQLField.leaf( name: "id", @@ -11053,58 +6328,75 @@ extension Fields where TypeLock == Objects.Label { return String.mockValue } } +} - func color() throws -> String { +extension Selection where TypeLock == Never, Type == Never { + typealias Label = Selection +} + +extension Objects { + struct LabelsError { + let __typename: TypeName = .labelsError + let errorCodes: [String: [Enums.LabelsErrorCode]] + + enum TypeName: String, Codable { + case labelsError = "LabelsError" + } + } +} + +extension Objects.LabelsError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.LabelsErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.LabelsError { + func errorCodes() throws -> [Enums.LabelsErrorCode] { let field = GraphQLField.leaf( - name: "color", + name: "errorCodes", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.color[field.alias!] { + if let data = data.errorCodes[field.alias!] { return data } throw HttpError.badpayload case .mocking: - return String.mockValue - } - } - - func description() throws -> String? { - let field = GraphQLField.leaf( - name: "description", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.description[field.alias!] - case .mocking: - return nil - } - } - - func createdAt() throws -> DateTime? { - let field = GraphQLField.leaf( - name: "createdAt", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.createdAt[field.alias!] - case .mocking: - return nil + return [] } } } extension Selection where TypeLock == Never, Type == Never { - typealias Label = Selection + typealias LabelsError = Selection } extension Objects { @@ -11174,17 +6466,29 @@ extension Selection where TypeLock == Never, Type == Never { } extension Objects { - struct LabelsError { - let __typename: TypeName = .labelsError - let errorCodes: [String: [Enums.LabelsErrorCode]] + struct Link { + let __typename: TypeName = .link + let highlightStats: [String: Objects.HighlightStats] + let id: [String: String] + let page: [String: Objects.Page] + let postedByViewer: [String: Bool] + let readState: [String: Objects.ReadState] + let savedAt: [String: DateTime] + let savedBy: [String: Objects.User] + let savedByViewer: [String: Bool] + let shareInfo: [String: Objects.LinkShareInfo] + let shareStats: [String: Objects.ShareStats] + let slug: [String: String] + let updatedAt: [String: DateTime] + let url: [String: String] enum TypeName: String, Codable { - case labelsError = "LabelsError" + case link = "Link" } } } -extension Objects.LabelsError: Decodable { +extension Objects.Link: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -11196,8 +6500,56 @@ extension Objects.LabelsError: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "errorCodes": - if let value = try container.decode([Enums.LabelsErrorCode]?.self, forKey: codingKey) { + case "highlightStats": + if let value = try container.decode(Objects.HighlightStats?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "page": + if let value = try container.decode(Objects.Page?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "postedByViewer": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "readState": + if let value = try container.decode(Objects.ReadState?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "savedAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "savedBy": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "savedByViewer": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "shareInfo": + if let value = try container.decode(Objects.LinkShareInfo?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "shareStats": + if let value = try container.decode(Objects.ShareStats?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "slug": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updatedAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "url": + if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -11210,79 +6562,26 @@ extension Objects.LabelsError: Decodable { } } - errorCodes = map["errorCodes"] + highlightStats = map["highlightStats"] + id = map["id"] + page = map["page"] + postedByViewer = map["postedByViewer"] + readState = map["readState"] + savedAt = map["savedAt"] + savedBy = map["savedBy"] + savedByViewer = map["savedByViewer"] + shareInfo = map["shareInfo"] + shareStats = map["shareStats"] + slug = map["slug"] + updatedAt = map["updatedAt"] + url = map["url"] } } -extension Fields where TypeLock == Objects.LabelsError { - func errorCodes() throws -> [Enums.LabelsErrorCode] { - let field = GraphQLField.leaf( - name: "errorCodes", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.errorCodes[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return [] - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias LabelsError = Selection -} - -extension Objects { - struct CreateLabelSuccess { - let __typename: TypeName = .createLabelSuccess - let label: [String: Objects.Label] - - enum TypeName: String, Codable { - case createLabelSuccess = "CreateLabelSuccess" - } - } -} - -extension Objects.CreateLabelSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "label": - if let value = try container.decode(Objects.Label?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - label = map["label"] - } -} - -extension Fields where TypeLock == Objects.CreateLabelSuccess { - func label(selection: Selection) throws -> Type { +extension Fields where TypeLock == Objects.Link { + func highlightStats(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "label", + name: "highlightStats", arguments: [], selection: selection.selection ) @@ -11290,7 +6589,7 @@ extension Fields where TypeLock == Objects.CreateLabelSuccess { switch response { case let .decoding(data): - if let data = data.label[field.alias!] { + if let data = data.highlightStats[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -11298,122 +6597,28 @@ extension Fields where TypeLock == Objects.CreateLabelSuccess { return selection.mock() } } -} -extension Selection where TypeLock == Never, Type == Never { - typealias CreateLabelSuccess = Selection -} - -extension Objects { - struct CreateLabelError { - let __typename: TypeName = .createLabelError - let errorCodes: [String: [Enums.CreateLabelErrorCode]] - - enum TypeName: String, Codable { - case createLabelError = "CreateLabelError" - } - } -} - -extension Objects.CreateLabelError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateLabelErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.CreateLabelError { - func errorCodes() throws -> [Enums.CreateLabelErrorCode] { + func id() throws -> String { let field = GraphQLField.leaf( - name: "errorCodes", + name: "id", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.errorCodes[field.alias!] { + if let data = data.id[field.alias!] { return data } throw HttpError.badpayload case .mocking: - return [] + return String.mockValue } } -} -extension Selection where TypeLock == Never, Type == Never { - typealias CreateLabelError = Selection -} - -extension Objects { - struct DeleteLabelSuccess { - let __typename: TypeName = .deleteLabelSuccess - let label: [String: Objects.Label] - - enum TypeName: String, Codable { - case deleteLabelSuccess = "DeleteLabelSuccess" - } - } -} - -extension Objects.DeleteLabelSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "label": - if let value = try container.decode(Objects.Label?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - label = map["label"] - } -} - -extension Fields where TypeLock == Objects.DeleteLabelSuccess { - func label(selection: Selection) throws -> Type { + func page(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "label", + name: "page", arguments: [], selection: selection.selection ) @@ -11421,7 +6626,7 @@ extension Fields where TypeLock == Objects.DeleteLabelSuccess { switch response { case let .decoding(data): - if let data = data.label[field.alias!] { + if let data = data.page[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -11429,122 +6634,28 @@ extension Fields where TypeLock == Objects.DeleteLabelSuccess { return selection.mock() } } -} -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteLabelSuccess = Selection -} - -extension Objects { - struct DeleteLabelError { - let __typename: TypeName = .deleteLabelError - let errorCodes: [String: [Enums.DeleteLabelErrorCode]] - - enum TypeName: String, Codable { - case deleteLabelError = "DeleteLabelError" - } - } -} - -extension Objects.DeleteLabelError: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.DeleteLabelErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Objects.DeleteLabelError { - func errorCodes() throws -> [Enums.DeleteLabelErrorCode] { + func postedByViewer() throws -> Bool { let field = GraphQLField.leaf( - name: "errorCodes", + name: "postedByViewer", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.errorCodes[field.alias!] { + if let data = data.postedByViewer[field.alias!] { return data } throw HttpError.badpayload case .mocking: - return [] + return Bool.mockValue } } -} -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteLabelError = Selection -} - -extension Objects { - struct UpdateLabelSuccess { - let __typename: TypeName = .updateLabelSuccess - let label: [String: Objects.Label] - - enum TypeName: String, Codable { - case updateLabelSuccess = "UpdateLabelSuccess" - } - } -} - -extension Objects.UpdateLabelSuccess: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "label": - if let value = try container.decode(Objects.Label?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - label = map["label"] - } -} - -extension Fields where TypeLock == Objects.UpdateLabelSuccess { - func label(selection: Selection) throws -> Type { + func readState(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "label", + name: "readState", arguments: [], selection: selection.selection ) @@ -11552,7 +6663,7 @@ extension Fields where TypeLock == Objects.UpdateLabelSuccess { switch response { case let .decoding(data): - if let data = data.label[field.alias!] { + if let data = data.readState[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -11560,24 +6671,284 @@ extension Fields where TypeLock == Objects.UpdateLabelSuccess { return selection.mock() } } -} -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateLabelSuccess = Selection -} + func savedAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "savedAt", + arguments: [] + ) + select(field) -extension Objects { - struct UpdateLabelError { - let __typename: TypeName = .updateLabelError - let errorCodes: [String: [Enums.UpdateLabelErrorCode]] + switch response { + case let .decoding(data): + if let data = data.savedAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } - enum TypeName: String, Codable { - case updateLabelError = "UpdateLabelError" + func savedBy(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "savedBy", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.savedBy[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func savedByViewer() throws -> Bool { + let field = GraphQLField.leaf( + name: "savedByViewer", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.savedByViewer[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Bool.mockValue + } + } + + func shareInfo(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "shareInfo", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.shareInfo[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func shareStats(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "shareStats", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.shareStats[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func slug() throws -> String { + let field = GraphQLField.leaf( + name: "slug", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.slug[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func updatedAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "updatedAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updatedAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func url() throws -> String { + let field = GraphQLField.leaf( + name: "url", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.url[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue } } } -extension Objects.UpdateLabelError: Decodable { +extension Selection where TypeLock == Never, Type == Never { + typealias Link = Selection +} + +extension Objects { + struct LinkShareInfo { + let __typename: TypeName = .linkShareInfo + let description: [String: String] + let imageUrl: [String: String] + let title: [String: String] + + enum TypeName: String, Codable { + case linkShareInfo = "LinkShareInfo" + } + } +} + +extension Objects.LinkShareInfo: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "description": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "imageUrl": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "title": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + description = map["description"] + imageUrl = map["imageUrl"] + title = map["title"] + } +} + +extension Fields where TypeLock == Objects.LinkShareInfo { + func description() throws -> String { + let field = GraphQLField.leaf( + name: "description", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.description[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func imageUrl() throws -> String { + let field = GraphQLField.leaf( + name: "imageUrl", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.imageUrl[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func title() throws -> String { + let field = GraphQLField.leaf( + name: "title", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.title[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias LinkShareInfo = Selection +} + +extension Objects { + struct LoginError { + let __typename: TypeName = .loginError + let errorCodes: [String: [Enums.LoginErrorCode]] + + enum TypeName: String, Codable { + case loginError = "LoginError" + } + } +} + +extension Objects.LoginError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -11590,7 +6961,7 @@ extension Objects.UpdateLabelError: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.UpdateLabelErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.LoginErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -11607,8 +6978,8 @@ extension Objects.UpdateLabelError: Decodable { } } -extension Fields where TypeLock == Objects.UpdateLabelError { - func errorCodes() throws -> [Enums.UpdateLabelErrorCode] { +extension Fields where TypeLock == Objects.LoginError { + func errorCodes() throws -> [Enums.LoginErrorCode] { let field = GraphQLField.leaf( name: "errorCodes", arguments: [] @@ -11628,21 +6999,21 @@ extension Fields where TypeLock == Objects.UpdateLabelError { } extension Selection where TypeLock == Never, Type == Never { - typealias UpdateLabelError = Selection + typealias LoginError = Selection } extension Objects { - struct SignupSuccess { - let __typename: TypeName = .signupSuccess + struct LoginSuccess { + let __typename: TypeName = .loginSuccess let me: [String: Objects.User] enum TypeName: String, Codable { - case signupSuccess = "SignupSuccess" + case loginSuccess = "LoginSuccess" } } } -extension Objects.SignupSuccess: Decodable { +extension Objects.LoginSuccess: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -11672,7 +7043,7 @@ extension Objects.SignupSuccess: Decodable { } } -extension Fields where TypeLock == Objects.SignupSuccess { +extension Fields where TypeLock == Objects.LoginSuccess { func me(selection: Selection) throws -> Type { let field = GraphQLField.composite( name: "me", @@ -11694,21 +7065,21 @@ extension Fields where TypeLock == Objects.SignupSuccess { } extension Selection where TypeLock == Never, Type == Never { - typealias SignupSuccess = Selection + typealias LoginSuccess = Selection } extension Objects { - struct SignupError { - let __typename: TypeName = .signupError - let errorCodes: [String: [Enums.SignupErrorCode?]] + struct LogOutError { + let __typename: TypeName = .logOutError + let errorCodes: [String: [Enums.LogOutErrorCode]] enum TypeName: String, Codable { - case signupError = "SignupError" + case logOutError = "LogOutError" } } } -extension Objects.SignupError: Decodable { +extension Objects.LogOutError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -11721,7 +7092,7 @@ extension Objects.SignupError: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.SignupErrorCode?]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.LogOutErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -11738,8 +7109,8 @@ extension Objects.SignupError: Decodable { } } -extension Fields where TypeLock == Objects.SignupError { - func errorCodes() throws -> [Enums.SignupErrorCode?] { +extension Fields where TypeLock == Objects.LogOutError { + func errorCodes() throws -> [Enums.LogOutErrorCode] { let field = GraphQLField.leaf( name: "errorCodes", arguments: [] @@ -11759,21 +7130,21 @@ extension Fields where TypeLock == Objects.SignupError { } extension Selection where TypeLock == Never, Type == Never { - typealias SignupError = Selection + typealias LogOutError = Selection } extension Objects { - struct SetLabelsSuccess { - let __typename: TypeName = .setLabelsSuccess - let labels: [String: [Objects.Label]] + struct LogOutSuccess { + let __typename: TypeName = .logOutSuccess + let message: [String: String] enum TypeName: String, Codable { - case setLabelsSuccess = "SetLabelsSuccess" + case logOutSuccess = "LogOutSuccess" } } } -extension Objects.SetLabelsSuccess: Decodable { +extension Objects.LogOutSuccess: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -11785,8 +7156,8 @@ extension Objects.SetLabelsSuccess: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "labels": - if let value = try container.decode([Objects.Label]?.self, forKey: codingKey) { + case "message": + if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -11799,12 +7170,2729 @@ extension Objects.SetLabelsSuccess: Decodable { } } - labels = map["labels"] + message = map["message"] } } -extension Fields where TypeLock == Objects.SetLabelsSuccess { - func labels(selection: Selection) throws -> Type { +extension Fields where TypeLock == Objects.LogOutSuccess { + func message() throws -> String? { + let field = GraphQLField.leaf( + name: "message", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.message[field.alias!] + case .mocking: + return nil + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias LogOutSuccess = Selection +} + +extension Objects { + struct MergeHighlightError { + let __typename: TypeName = .mergeHighlightError + let errorCodes: [String: [Enums.MergeHighlightErrorCode]] + + enum TypeName: String, Codable { + case mergeHighlightError = "MergeHighlightError" + } + } +} + +extension Objects.MergeHighlightError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.MergeHighlightErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.MergeHighlightError { + func errorCodes() throws -> [Enums.MergeHighlightErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias MergeHighlightError = Selection +} + +extension Objects { + struct MergeHighlightSuccess { + let __typename: TypeName = .mergeHighlightSuccess + let highlight: [String: Objects.Highlight] + let overlapHighlightIdList: [String: [String]] + + enum TypeName: String, Codable { + case mergeHighlightSuccess = "MergeHighlightSuccess" + } + } +} + +extension Objects.MergeHighlightSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "highlight": + if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "overlapHighlightIdList": + if let value = try container.decode([String]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + highlight = map["highlight"] + overlapHighlightIdList = map["overlapHighlightIdList"] + } +} + +extension Fields where TypeLock == Objects.MergeHighlightSuccess { + func highlight(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "highlight", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.highlight[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func overlapHighlightIdList() throws -> [String] { + let field = GraphQLField.leaf( + name: "overlapHighlightIdList", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.overlapHighlightIdList[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias MergeHighlightSuccess = Selection +} + +extension Objects { + struct Mutation { + let __typename: TypeName = .mutation + let addPopularRead: [String: Unions.AddPopularReadResult] + let createArticle: [String: Unions.CreateArticleResult] + let createArticleSavingRequest: [String: Unions.CreateArticleSavingRequestResult] + let createHighlight: [String: Unions.CreateHighlightResult] + let createHighlightReply: [String: Unions.CreateHighlightReplyResult] + let createLabel: [String: Unions.CreateLabelResult] + let createNewsletterEmail: [String: Unions.CreateNewsletterEmailResult] + let createReaction: [String: Unions.CreateReactionResult] + let createReminder: [String: Unions.CreateReminderResult] + let deleteHighlight: [String: Unions.DeleteHighlightResult] + let deleteHighlightReply: [String: Unions.DeleteHighlightReplyResult] + let deleteLabel: [String: Unions.DeleteLabelResult] + let deleteNewsletterEmail: [String: Unions.DeleteNewsletterEmailResult] + let deleteReaction: [String: Unions.DeleteReactionResult] + let deleteReminder: [String: Unions.DeleteReminderResult] + let deleteWebhook: [String: Unions.DeleteWebhookResult] + let generateApiKey: [String: Unions.GenerateApiKeyResult] + let googleLogin: [String: Unions.LoginResult] + let googleSignup: [String: Unions.GoogleSignupResult] + let logOut: [String: Unions.LogOutResult] + let login: [String: Unions.LoginResult] + let mergeHighlight: [String: Unions.MergeHighlightResult] + let reportItem: [String: Objects.ReportItemResult] + let revokeApiKey: [String: Unions.RevokeApiKeyResult] + let saveArticleReadingProgress: [String: Unions.SaveArticleReadingProgressResult] + let saveFile: [String: Unions.SaveResult] + let savePage: [String: Unions.SaveResult] + let saveUrl: [String: Unions.SaveResult] + let setBookmarkArticle: [String: Unions.SetBookmarkArticleResult] + let setDeviceToken: [String: Unions.SetDeviceTokenResult] + let setFollow: [String: Unions.SetFollowResult] + let setLabels: [String: Unions.SetLabelsResult] + let setLinkArchived: [String: Unions.ArchiveLinkResult] + let setShareArticle: [String: Unions.SetShareArticleResult] + let setShareHighlight: [String: Unions.SetShareHighlightResult] + let setUserPersonalization: [String: Unions.SetUserPersonalizationResult] + let setWebhook: [String: Unions.SetWebhookResult] + let signup: [String: Unions.SignupResult] + let subscribe: [String: Unions.SubscribeResult] + let unsubscribe: [String: Unions.UnsubscribeResult] + let updateHighlight: [String: Unions.UpdateHighlightResult] + let updateHighlightReply: [String: Unions.UpdateHighlightReplyResult] + let updateLabel: [String: Unions.UpdateLabelResult] + let updateLinkShareInfo: [String: Unions.UpdateLinkShareInfoResult] + let updatePage: [String: Unions.UpdatePageResult] + let updateReminder: [String: Unions.UpdateReminderResult] + let updateSharedComment: [String: Unions.UpdateSharedCommentResult] + let updateUser: [String: Unions.UpdateUserResult] + let updateUserProfile: [String: Unions.UpdateUserProfileResult] + let uploadFileRequest: [String: Unions.UploadFileRequestResult] + + enum TypeName: String, Codable { + case mutation = "Mutation" + } + } +} + +extension Objects.Mutation: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "addPopularRead": + if let value = try container.decode(Unions.AddPopularReadResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "createArticle": + if let value = try container.decode(Unions.CreateArticleResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "createArticleSavingRequest": + if let value = try container.decode(Unions.CreateArticleSavingRequestResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "createHighlight": + if let value = try container.decode(Unions.CreateHighlightResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "createHighlightReply": + if let value = try container.decode(Unions.CreateHighlightReplyResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "createLabel": + if let value = try container.decode(Unions.CreateLabelResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "createNewsletterEmail": + if let value = try container.decode(Unions.CreateNewsletterEmailResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "createReaction": + if let value = try container.decode(Unions.CreateReactionResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "createReminder": + if let value = try container.decode(Unions.CreateReminderResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "deleteHighlight": + if let value = try container.decode(Unions.DeleteHighlightResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "deleteHighlightReply": + if let value = try container.decode(Unions.DeleteHighlightReplyResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "deleteLabel": + if let value = try container.decode(Unions.DeleteLabelResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "deleteNewsletterEmail": + if let value = try container.decode(Unions.DeleteNewsletterEmailResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "deleteReaction": + if let value = try container.decode(Unions.DeleteReactionResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "deleteReminder": + if let value = try container.decode(Unions.DeleteReminderResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "deleteWebhook": + if let value = try container.decode(Unions.DeleteWebhookResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "generateApiKey": + if let value = try container.decode(Unions.GenerateApiKeyResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "googleLogin": + if let value = try container.decode(Unions.LoginResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "googleSignup": + if let value = try container.decode(Unions.GoogleSignupResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "logOut": + if let value = try container.decode(Unions.LogOutResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "login": + if let value = try container.decode(Unions.LoginResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "mergeHighlight": + if let value = try container.decode(Unions.MergeHighlightResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "reportItem": + if let value = try container.decode(Objects.ReportItemResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "revokeApiKey": + if let value = try container.decode(Unions.RevokeApiKeyResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "saveArticleReadingProgress": + if let value = try container.decode(Unions.SaveArticleReadingProgressResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "saveFile": + if let value = try container.decode(Unions.SaveResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "savePage": + if let value = try container.decode(Unions.SaveResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "saveUrl": + if let value = try container.decode(Unions.SaveResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "setBookmarkArticle": + if let value = try container.decode(Unions.SetBookmarkArticleResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "setDeviceToken": + if let value = try container.decode(Unions.SetDeviceTokenResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "setFollow": + if let value = try container.decode(Unions.SetFollowResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "setLabels": + if let value = try container.decode(Unions.SetLabelsResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "setLinkArchived": + if let value = try container.decode(Unions.ArchiveLinkResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "setShareArticle": + if let value = try container.decode(Unions.SetShareArticleResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "setShareHighlight": + if let value = try container.decode(Unions.SetShareHighlightResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "setUserPersonalization": + if let value = try container.decode(Unions.SetUserPersonalizationResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "setWebhook": + if let value = try container.decode(Unions.SetWebhookResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "signup": + if let value = try container.decode(Unions.SignupResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "subscribe": + if let value = try container.decode(Unions.SubscribeResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "unsubscribe": + if let value = try container.decode(Unions.UnsubscribeResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updateHighlight": + if let value = try container.decode(Unions.UpdateHighlightResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updateHighlightReply": + if let value = try container.decode(Unions.UpdateHighlightReplyResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updateLabel": + if let value = try container.decode(Unions.UpdateLabelResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updateLinkShareInfo": + if let value = try container.decode(Unions.UpdateLinkShareInfoResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updatePage": + if let value = try container.decode(Unions.UpdatePageResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updateReminder": + if let value = try container.decode(Unions.UpdateReminderResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updateSharedComment": + if let value = try container.decode(Unions.UpdateSharedCommentResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updateUser": + if let value = try container.decode(Unions.UpdateUserResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updateUserProfile": + if let value = try container.decode(Unions.UpdateUserProfileResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "uploadFileRequest": + if let value = try container.decode(Unions.UploadFileRequestResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + addPopularRead = map["addPopularRead"] + createArticle = map["createArticle"] + createArticleSavingRequest = map["createArticleSavingRequest"] + createHighlight = map["createHighlight"] + createHighlightReply = map["createHighlightReply"] + createLabel = map["createLabel"] + createNewsletterEmail = map["createNewsletterEmail"] + createReaction = map["createReaction"] + createReminder = map["createReminder"] + deleteHighlight = map["deleteHighlight"] + deleteHighlightReply = map["deleteHighlightReply"] + deleteLabel = map["deleteLabel"] + deleteNewsletterEmail = map["deleteNewsletterEmail"] + deleteReaction = map["deleteReaction"] + deleteReminder = map["deleteReminder"] + deleteWebhook = map["deleteWebhook"] + generateApiKey = map["generateApiKey"] + googleLogin = map["googleLogin"] + googleSignup = map["googleSignup"] + logOut = map["logOut"] + login = map["login"] + mergeHighlight = map["mergeHighlight"] + reportItem = map["reportItem"] + revokeApiKey = map["revokeApiKey"] + saveArticleReadingProgress = map["saveArticleReadingProgress"] + saveFile = map["saveFile"] + savePage = map["savePage"] + saveUrl = map["saveUrl"] + setBookmarkArticle = map["setBookmarkArticle"] + setDeviceToken = map["setDeviceToken"] + setFollow = map["setFollow"] + setLabels = map["setLabels"] + setLinkArchived = map["setLinkArchived"] + setShareArticle = map["setShareArticle"] + setShareHighlight = map["setShareHighlight"] + setUserPersonalization = map["setUserPersonalization"] + setWebhook = map["setWebhook"] + signup = map["signup"] + subscribe = map["subscribe"] + unsubscribe = map["unsubscribe"] + updateHighlight = map["updateHighlight"] + updateHighlightReply = map["updateHighlightReply"] + updateLabel = map["updateLabel"] + updateLinkShareInfo = map["updateLinkShareInfo"] + updatePage = map["updatePage"] + updateReminder = map["updateReminder"] + updateSharedComment = map["updateSharedComment"] + updateUser = map["updateUser"] + updateUserProfile = map["updateUserProfile"] + uploadFileRequest = map["uploadFileRequest"] + } +} + +extension Fields where TypeLock == Objects.Mutation { + func addPopularRead(name: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "addPopularRead", + arguments: [Argument(name: "name", type: "String!", value: name)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.addPopularRead[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func createArticle(input: InputObjects.CreateArticleInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "createArticle", + arguments: [Argument(name: "input", type: "CreateArticleInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createArticle[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func createArticleSavingRequest(input: InputObjects.CreateArticleSavingRequestInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "createArticleSavingRequest", + arguments: [Argument(name: "input", type: "CreateArticleSavingRequestInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createArticleSavingRequest[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func createHighlight(input: InputObjects.CreateHighlightInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "createHighlight", + arguments: [Argument(name: "input", type: "CreateHighlightInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createHighlight[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func createHighlightReply(input: InputObjects.CreateHighlightReplyInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "createHighlightReply", + arguments: [Argument(name: "input", type: "CreateHighlightReplyInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createHighlightReply[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func createLabel(input: InputObjects.CreateLabelInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "createLabel", + arguments: [Argument(name: "input", type: "CreateLabelInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createLabel[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func createNewsletterEmail(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "createNewsletterEmail", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createNewsletterEmail[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func createReaction(input: InputObjects.CreateReactionInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "createReaction", + arguments: [Argument(name: "input", type: "CreateReactionInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createReaction[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func createReminder(input: InputObjects.CreateReminderInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "createReminder", + arguments: [Argument(name: "input", type: "CreateReminderInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createReminder[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func deleteHighlight(highlightId: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "deleteHighlight", + arguments: [Argument(name: "highlightId", type: "ID!", value: highlightId)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.deleteHighlight[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func deleteHighlightReply(highlightReplyId: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "deleteHighlightReply", + arguments: [Argument(name: "highlightReplyId", type: "ID!", value: highlightReplyId)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.deleteHighlightReply[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func deleteLabel(id: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "deleteLabel", + arguments: [Argument(name: "id", type: "ID!", value: id)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.deleteLabel[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func deleteNewsletterEmail(newsletterEmailId: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "deleteNewsletterEmail", + arguments: [Argument(name: "newsletterEmailId", type: "ID!", value: newsletterEmailId)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.deleteNewsletterEmail[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func deleteReaction(id: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "deleteReaction", + arguments: [Argument(name: "id", type: "ID!", value: id)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.deleteReaction[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func deleteReminder(id: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "deleteReminder", + arguments: [Argument(name: "id", type: "ID!", value: id)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.deleteReminder[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func deleteWebhook(id: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "deleteWebhook", + arguments: [Argument(name: "id", type: "ID!", value: id)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.deleteWebhook[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func generateApiKey(input: InputObjects.GenerateApiKeyInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "generateApiKey", + arguments: [Argument(name: "input", type: "GenerateApiKeyInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.generateApiKey[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func googleLogin(input: InputObjects.GoogleLoginInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "googleLogin", + arguments: [Argument(name: "input", type: "GoogleLoginInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.googleLogin[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func googleSignup(input: InputObjects.GoogleSignupInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "googleSignup", + arguments: [Argument(name: "input", type: "GoogleSignupInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.googleSignup[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func login(input: InputObjects.LoginInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "login", + arguments: [Argument(name: "input", type: "LoginInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.login[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func logOut(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "logOut", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.logOut[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func mergeHighlight(input: InputObjects.MergeHighlightInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "mergeHighlight", + arguments: [Argument(name: "input", type: "MergeHighlightInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.mergeHighlight[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func reportItem(input: InputObjects.ReportItemInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "reportItem", + arguments: [Argument(name: "input", type: "ReportItemInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.reportItem[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func revokeApiKey(id: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "revokeApiKey", + arguments: [Argument(name: "id", type: "ID!", value: id)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.revokeApiKey[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func saveArticleReadingProgress(input: InputObjects.SaveArticleReadingProgressInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "saveArticleReadingProgress", + arguments: [Argument(name: "input", type: "SaveArticleReadingProgressInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.saveArticleReadingProgress[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func saveFile(input: InputObjects.SaveFileInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "saveFile", + arguments: [Argument(name: "input", type: "SaveFileInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.saveFile[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func savePage(input: InputObjects.SavePageInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "savePage", + arguments: [Argument(name: "input", type: "SavePageInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.savePage[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func saveUrl(input: InputObjects.SaveUrlInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "saveUrl", + arguments: [Argument(name: "input", type: "SaveUrlInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.saveUrl[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func setBookmarkArticle(input: InputObjects.SetBookmarkArticleInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "setBookmarkArticle", + arguments: [Argument(name: "input", type: "SetBookmarkArticleInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.setBookmarkArticle[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func setDeviceToken(input: InputObjects.SetDeviceTokenInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "setDeviceToken", + arguments: [Argument(name: "input", type: "SetDeviceTokenInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.setDeviceToken[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func setFollow(input: InputObjects.SetFollowInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "setFollow", + arguments: [Argument(name: "input", type: "SetFollowInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.setFollow[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func setLabels(input: InputObjects.SetLabelsInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "setLabels", + arguments: [Argument(name: "input", type: "SetLabelsInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.setLabels[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func setLinkArchived(input: InputObjects.ArchiveLinkInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "setLinkArchived", + arguments: [Argument(name: "input", type: "ArchiveLinkInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.setLinkArchived[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func setShareArticle(input: InputObjects.SetShareArticleInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "setShareArticle", + arguments: [Argument(name: "input", type: "SetShareArticleInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.setShareArticle[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func setShareHighlight(input: InputObjects.SetShareHighlightInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "setShareHighlight", + arguments: [Argument(name: "input", type: "SetShareHighlightInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.setShareHighlight[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func setUserPersonalization(input: InputObjects.SetUserPersonalizationInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "setUserPersonalization", + arguments: [Argument(name: "input", type: "SetUserPersonalizationInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.setUserPersonalization[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func setWebhook(input: InputObjects.SetWebhookInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "setWebhook", + arguments: [Argument(name: "input", type: "SetWebhookInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.setWebhook[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func signup(input: InputObjects.SignupInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "signup", + arguments: [Argument(name: "input", type: "SignupInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.signup[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func subscribe(name: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "subscribe", + arguments: [Argument(name: "name", type: "String!", value: name)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.subscribe[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func unsubscribe(name: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "unsubscribe", + arguments: [Argument(name: "name", type: "String!", value: name)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.unsubscribe[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func updateHighlight(input: InputObjects.UpdateHighlightInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updateHighlight", + arguments: [Argument(name: "input", type: "UpdateHighlightInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updateHighlight[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func updateHighlightReply(input: InputObjects.UpdateHighlightReplyInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updateHighlightReply", + arguments: [Argument(name: "input", type: "UpdateHighlightReplyInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updateHighlightReply[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func updateLabel(input: InputObjects.UpdateLabelInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updateLabel", + arguments: [Argument(name: "input", type: "UpdateLabelInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updateLabel[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func updateLinkShareInfo(input: InputObjects.UpdateLinkShareInfoInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updateLinkShareInfo", + arguments: [Argument(name: "input", type: "UpdateLinkShareInfoInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updateLinkShareInfo[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func updatePage(input: InputObjects.UpdatePageInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updatePage", + arguments: [Argument(name: "input", type: "UpdatePageInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updatePage[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func updateReminder(input: InputObjects.UpdateReminderInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updateReminder", + arguments: [Argument(name: "input", type: "UpdateReminderInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updateReminder[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func updateSharedComment(input: InputObjects.UpdateSharedCommentInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updateSharedComment", + arguments: [Argument(name: "input", type: "UpdateSharedCommentInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updateSharedComment[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func updateUser(input: InputObjects.UpdateUserInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updateUser", + arguments: [Argument(name: "input", type: "UpdateUserInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updateUser[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func updateUserProfile(input: InputObjects.UpdateUserProfileInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updateUserProfile", + arguments: [Argument(name: "input", type: "UpdateUserProfileInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updateUserProfile[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func uploadFileRequest(input: InputObjects.UploadFileRequestInput, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "uploadFileRequest", + arguments: [Argument(name: "input", type: "UploadFileRequestInput!", value: input)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.uploadFileRequest[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias Mutation = Selection +} + +extension Objects { + struct NewsletterEmail { + let __typename: TypeName = .newsletterEmail + let address: [String: String] + let confirmationCode: [String: String] + let id: [String: String] + + enum TypeName: String, Codable { + case newsletterEmail = "NewsletterEmail" + } + } +} + +extension Objects.NewsletterEmail: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "address": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "confirmationCode": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + address = map["address"] + confirmationCode = map["confirmationCode"] + id = map["id"] + } +} + +extension Fields where TypeLock == Objects.NewsletterEmail { + func address() throws -> String { + let field = GraphQLField.leaf( + name: "address", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.address[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func confirmationCode() throws -> String? { + let field = GraphQLField.leaf( + name: "confirmationCode", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.confirmationCode[field.alias!] + case .mocking: + return nil + } + } + + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias NewsletterEmail = Selection +} + +extension Objects { + struct NewsletterEmailsError { + let __typename: TypeName = .newsletterEmailsError + let errorCodes: [String: [Enums.NewsletterEmailsErrorCode]] + + enum TypeName: String, Codable { + case newsletterEmailsError = "NewsletterEmailsError" + } + } +} + +extension Objects.NewsletterEmailsError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.NewsletterEmailsErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.NewsletterEmailsError { + func errorCodes() throws -> [Enums.NewsletterEmailsErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias NewsletterEmailsError = Selection +} + +extension Objects { + struct NewsletterEmailsSuccess { + let __typename: TypeName = .newsletterEmailsSuccess + let newsletterEmails: [String: [Objects.NewsletterEmail]] + + enum TypeName: String, Codable { + case newsletterEmailsSuccess = "NewsletterEmailsSuccess" + } + } +} + +extension Objects.NewsletterEmailsSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "newsletterEmails": + if let value = try container.decode([Objects.NewsletterEmail]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + newsletterEmails = map["newsletterEmails"] + } +} + +extension Fields where TypeLock == Objects.NewsletterEmailsSuccess { + func newsletterEmails(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "newsletterEmails", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.newsletterEmails[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias NewsletterEmailsSuccess = Selection +} + +extension Objects { + struct Page { + let __typename: TypeName = .page + let author: [String: String] + let createdAt: [String: DateTime] + let description: [String: String] + let hash: [String: String] + let id: [String: String] + let image: [String: String] + let originalHtml: [String: String] + let originalUrl: [String: String] + let publishedAt: [String: DateTime] + let readableHtml: [String: String] + let title: [String: String] + let type: [String: Enums.PageType] + let updatedAt: [String: DateTime] + let url: [String: String] + + enum TypeName: String, Codable { + case page = "Page" + } + } +} + +extension Objects.Page: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "author": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "createdAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "description": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "hash": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "image": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "originalHtml": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "originalUrl": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "publishedAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "readableHtml": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "title": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "type": + if let value = try container.decode(Enums.PageType?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updatedAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "url": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + author = map["author"] + createdAt = map["createdAt"] + description = map["description"] + hash = map["hash"] + id = map["id"] + image = map["image"] + originalHtml = map["originalHtml"] + originalUrl = map["originalUrl"] + publishedAt = map["publishedAt"] + readableHtml = map["readableHtml"] + title = map["title"] + type = map["type"] + updatedAt = map["updatedAt"] + url = map["url"] + } +} + +extension Fields where TypeLock == Objects.Page { + func author() throws -> String { + let field = GraphQLField.leaf( + name: "author", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.author[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func createdAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "createdAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createdAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func description() throws -> String { + let field = GraphQLField.leaf( + name: "description", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.description[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func hash() throws -> String { + let field = GraphQLField.leaf( + name: "hash", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.hash[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func image() throws -> String { + let field = GraphQLField.leaf( + name: "image", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.image[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func originalHtml() throws -> String { + let field = GraphQLField.leaf( + name: "originalHtml", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.originalHtml[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func originalUrl() throws -> String { + let field = GraphQLField.leaf( + name: "originalUrl", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.originalUrl[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func publishedAt() throws -> DateTime? { + let field = GraphQLField.leaf( + name: "publishedAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.publishedAt[field.alias!] + case .mocking: + return nil + } + } + + func readableHtml() throws -> String { + let field = GraphQLField.leaf( + name: "readableHtml", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.readableHtml[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func title() throws -> String { + let field = GraphQLField.leaf( + name: "title", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.title[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func type() throws -> Enums.PageType { + let field = GraphQLField.leaf( + name: "type", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.type[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Enums.PageType.allCases.first! + } + } + + func updatedAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "updatedAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updatedAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func url() throws -> String { + let field = GraphQLField.leaf( + name: "url", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.url[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias Page = Selection +} + +extension Objects { + struct PageInfo { + let __typename: TypeName = .pageInfo + let endCursor: [String: String] + let hasNextPage: [String: Bool] + let hasPreviousPage: [String: Bool] + let startCursor: [String: String] + let totalCount: [String: Int] + + enum TypeName: String, Codable { + case pageInfo = "PageInfo" + } + } +} + +extension Objects.PageInfo: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "endCursor": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "hasNextPage": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "hasPreviousPage": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "startCursor": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "totalCount": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + endCursor = map["endCursor"] + hasNextPage = map["hasNextPage"] + hasPreviousPage = map["hasPreviousPage"] + startCursor = map["startCursor"] + totalCount = map["totalCount"] + } +} + +extension Fields where TypeLock == Objects.PageInfo { + func endCursor() throws -> String? { + let field = GraphQLField.leaf( + name: "endCursor", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.endCursor[field.alias!] + case .mocking: + return nil + } + } + + func hasNextPage() throws -> Bool { + let field = GraphQLField.leaf( + name: "hasNextPage", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.hasNextPage[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Bool.mockValue + } + } + + func hasPreviousPage() throws -> Bool { + let field = GraphQLField.leaf( + name: "hasPreviousPage", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.hasPreviousPage[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Bool.mockValue + } + } + + func startCursor() throws -> String? { + let field = GraphQLField.leaf( + name: "startCursor", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.startCursor[field.alias!] + case .mocking: + return nil + } + } + + func totalCount() throws -> Int? { + let field = GraphQLField.leaf( + name: "totalCount", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.totalCount[field.alias!] + case .mocking: + return nil + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias PageInfo = Selection +} + +extension Objects { + struct Profile { + let __typename: TypeName = .profile + let bio: [String: String] + let id: [String: String] + let pictureUrl: [String: String] + let `private`: [String: Bool] + let username: [String: String] + + enum TypeName: String, Codable { + case profile = "Profile" + } + } +} + +extension Objects.Profile: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "bio": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "pictureUrl": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "private": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "username": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + bio = map["bio"] + id = map["id"] + pictureUrl = map["pictureUrl"] + self.private = map["private"] + username = map["username"] + } +} + +extension Fields where TypeLock == Objects.Profile { + func bio() throws -> String? { + let field = GraphQLField.leaf( + name: "bio", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.bio[field.alias!] + case .mocking: + return nil + } + } + + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func pictureUrl() throws -> String? { + let field = GraphQLField.leaf( + name: "pictureUrl", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.pictureUrl[field.alias!] + case .mocking: + return nil + } + } + + func `private`() throws -> Bool { + let field = GraphQLField.leaf( + name: "private", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.private[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Bool.mockValue + } + } + + func username() throws -> String { + let field = GraphQLField.leaf( + name: "username", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.username[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias Profile = Selection +} + +extension Objects { + struct Query { + let __typename: TypeName = .query + let apiKeys: [String: Unions.ApiKeysResult] + let article: [String: Unions.ArticleResult] + let articleSavingRequest: [String: Unions.ArticleSavingRequestResult] + let articles: [String: Unions.ArticlesResult] + let feedArticles: [String: Unions.FeedArticlesResult] + let getFollowers: [String: Unions.GetFollowersResult] + let getFollowing: [String: Unions.GetFollowingResult] + let getUserPersonalization: [String: Unions.GetUserPersonalizationResult] + let hello: [String: String] + let labels: [String: Unions.LabelsResult] + let me: [String: Objects.User] + let newsletterEmails: [String: Unions.NewsletterEmailsResult] + let reminder: [String: Unions.ReminderResult] + let search: [String: Unions.SearchResult] + let sharedArticle: [String: Unions.SharedArticleResult] + let subscriptions: [String: Unions.SubscriptionsResult] + let user: [String: Unions.UserResult] + let users: [String: Unions.UsersResult] + let validateUsername: [String: Bool] + let webhook: [String: Unions.WebhookResult] + let webhooks: [String: Unions.WebhooksResult] + + enum TypeName: String, Codable { + case query = "Query" + } + } +} + +extension Objects.Query: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "apiKeys": + if let value = try container.decode(Unions.ApiKeysResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "article": + if let value = try container.decode(Unions.ArticleResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "articleSavingRequest": + if let value = try container.decode(Unions.ArticleSavingRequestResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "articles": + if let value = try container.decode(Unions.ArticlesResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "feedArticles": + if let value = try container.decode(Unions.FeedArticlesResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "getFollowers": + if let value = try container.decode(Unions.GetFollowersResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "getFollowing": + if let value = try container.decode(Unions.GetFollowingResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "getUserPersonalization": + if let value = try container.decode(Unions.GetUserPersonalizationResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "hello": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "labels": + if let value = try container.decode(Unions.LabelsResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "me": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "newsletterEmails": + if let value = try container.decode(Unions.NewsletterEmailsResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "reminder": + if let value = try container.decode(Unions.ReminderResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "search": + if let value = try container.decode(Unions.SearchResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "sharedArticle": + if let value = try container.decode(Unions.SharedArticleResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "subscriptions": + if let value = try container.decode(Unions.SubscriptionsResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "user": + if let value = try container.decode(Unions.UserResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "users": + if let value = try container.decode(Unions.UsersResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "validateUsername": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "webhook": + if let value = try container.decode(Unions.WebhookResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "webhooks": + if let value = try container.decode(Unions.WebhooksResult?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + apiKeys = map["apiKeys"] + article = map["article"] + articleSavingRequest = map["articleSavingRequest"] + articles = map["articles"] + feedArticles = map["feedArticles"] + getFollowers = map["getFollowers"] + getFollowing = map["getFollowing"] + getUserPersonalization = map["getUserPersonalization"] + hello = map["hello"] + labels = map["labels"] + me = map["me"] + newsletterEmails = map["newsletterEmails"] + reminder = map["reminder"] + search = map["search"] + sharedArticle = map["sharedArticle"] + subscriptions = map["subscriptions"] + user = map["user"] + users = map["users"] + validateUsername = map["validateUsername"] + webhook = map["webhook"] + webhooks = map["webhooks"] + } +} + +extension Fields where TypeLock == Objects.Query { + func apiKeys(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "apiKeys", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.apiKeys[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func article(slug: String, username: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "article", + arguments: [Argument(name: "slug", type: "String!", value: slug), Argument(name: "username", type: "String!", value: username)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.article[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func articles(after: OptionalArgument = .absent(), first: OptionalArgument = .absent(), includePending: OptionalArgument = .absent(), query: OptionalArgument = .absent(), sharedOnly: OptionalArgument = .absent(), sort: OptionalArgument = .absent(), selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "articles", + arguments: [Argument(name: "after", type: "String", value: after), Argument(name: "first", type: "Int", value: first), Argument(name: "includePending", type: "Boolean", value: includePending), Argument(name: "query", type: "String", value: query), Argument(name: "sharedOnly", type: "Boolean", value: sharedOnly), Argument(name: "sort", type: "SortParams", value: sort)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.articles[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func articleSavingRequest(id: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "articleSavingRequest", + arguments: [Argument(name: "id", type: "ID!", value: id)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.articleSavingRequest[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func feedArticles(after: OptionalArgument = .absent(), first: OptionalArgument = .absent(), sharedByUser: OptionalArgument = .absent(), sort: OptionalArgument = .absent(), selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "feedArticles", + arguments: [Argument(name: "after", type: "String", value: after), Argument(name: "first", type: "Int", value: first), Argument(name: "sharedByUser", type: "ID", value: sharedByUser), Argument(name: "sort", type: "SortParams", value: sort)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.feedArticles[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func getFollowers(userId: OptionalArgument = .absent(), selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "getFollowers", + arguments: [Argument(name: "userId", type: "ID", value: userId)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.getFollowers[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func getFollowing(userId: OptionalArgument = .absent(), selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "getFollowing", + arguments: [Argument(name: "userId", type: "ID", value: userId)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.getFollowing[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func getUserPersonalization(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "getUserPersonalization", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.getUserPersonalization[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func hello() throws -> String? { + let field = GraphQLField.leaf( + name: "hello", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.hello[field.alias!] + case .mocking: + return nil + } + } + + func labels(selection: Selection) throws -> Type { let field = GraphQLField.composite( name: "labels", arguments: [], @@ -11822,24 +9910,656 @@ extension Fields where TypeLock == Objects.SetLabelsSuccess { return selection.mock() } } -} -extension Selection where TypeLock == Never, Type == Never { - typealias SetLabelsSuccess = Selection -} + func me(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "me", + arguments: [], + selection: selection.selection + ) + select(field) -extension Objects { - struct SetLabelsError { - let __typename: TypeName = .setLabelsError - let errorCodes: [String: [Enums.SetLabelsErrorCode]] + switch response { + case let .decoding(data): + return try selection.decode(data: data.me[field.alias!]) + case .mocking: + return selection.mock() + } + } - enum TypeName: String, Codable { - case setLabelsError = "SetLabelsError" + func newsletterEmails(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "newsletterEmails", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.newsletterEmails[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func reminder(linkId: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "reminder", + arguments: [Argument(name: "linkId", type: "ID!", value: linkId)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.reminder[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func search(after: OptionalArgument = .absent(), first: OptionalArgument = .absent(), query: OptionalArgument = .absent(), selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "search", + arguments: [Argument(name: "after", type: "String", value: after), Argument(name: "first", type: "Int", value: first), Argument(name: "query", type: "String", value: query)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.search[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func sharedArticle(selectedHighlightId: OptionalArgument = .absent(), slug: String, username: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "sharedArticle", + arguments: [Argument(name: "selectedHighlightId", type: "String", value: selectedHighlightId), Argument(name: "slug", type: "String!", value: slug), Argument(name: "username", type: "String!", value: username)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.sharedArticle[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func subscriptions(sort: OptionalArgument = .absent(), selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "subscriptions", + arguments: [Argument(name: "sort", type: "SortParams", value: sort)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.subscriptions[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func user(userId: OptionalArgument = .absent(), username: OptionalArgument = .absent(), selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "user", + arguments: [Argument(name: "userId", type: "ID", value: userId), Argument(name: "username", type: "String", value: username)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.user[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func users(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "users", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.users[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func validateUsername(username: String) throws -> Bool { + let field = GraphQLField.leaf( + name: "validateUsername", + arguments: [Argument(name: "username", type: "String!", value: username)] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.validateUsername[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Bool.mockValue + } + } + + func webhook(id: String, selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "webhook", + arguments: [Argument(name: "id", type: "ID!", value: id)], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.webhook[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func webhooks(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "webhooks", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.webhooks[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() } } } -extension Objects.SetLabelsError: Decodable { +extension Selection where TypeLock == Never, Type == Never { + typealias Query = Selection +} + +extension Objects { + struct Reaction { + let __typename: TypeName = .reaction + let code: [String: Enums.ReactionType] + let createdAt: [String: DateTime] + let id: [String: String] + let updatedAt: [String: DateTime] + let user: [String: Objects.User] + + enum TypeName: String, Codable { + case reaction = "Reaction" + } + } +} + +extension Objects.Reaction: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "code": + if let value = try container.decode(Enums.ReactionType?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "createdAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updatedAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "user": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + code = map["code"] + createdAt = map["createdAt"] + id = map["id"] + updatedAt = map["updatedAt"] + user = map["user"] + } +} + +extension Fields where TypeLock == Objects.Reaction { + func code() throws -> Enums.ReactionType { + let field = GraphQLField.leaf( + name: "code", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.code[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Enums.ReactionType.allCases.first! + } + } + + func createdAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "createdAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createdAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func updatedAt() throws -> DateTime? { + let field = GraphQLField.leaf( + name: "updatedAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.updatedAt[field.alias!] + case .mocking: + return nil + } + } + + func user(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "user", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.user[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias Reaction = Selection +} + +extension Objects { + struct ReadState { + let __typename: TypeName = .readState + let progressAnchorIndex: [String: Int] + let progressPercent: [String: Double] + let reading: [String: Bool] + let readingTime: [String: Int] + + enum TypeName: String, Codable { + case readState = "ReadState" + } + } +} + +extension Objects.ReadState: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "progressAnchorIndex": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "progressPercent": + if let value = try container.decode(Double?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "reading": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "readingTime": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + progressAnchorIndex = map["progressAnchorIndex"] + progressPercent = map["progressPercent"] + reading = map["reading"] + readingTime = map["readingTime"] + } +} + +extension Fields where TypeLock == Objects.ReadState { + func progressAnchorIndex() throws -> Int { + let field = GraphQLField.leaf( + name: "progressAnchorIndex", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.progressAnchorIndex[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Int.mockValue + } + } + + func progressPercent() throws -> Double { + let field = GraphQLField.leaf( + name: "progressPercent", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.progressPercent[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Double.mockValue + } + } + + func reading() throws -> Bool? { + let field = GraphQLField.leaf( + name: "reading", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.reading[field.alias!] + case .mocking: + return nil + } + } + + func readingTime() throws -> Int? { + let field = GraphQLField.leaf( + name: "readingTime", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.readingTime[field.alias!] + case .mocking: + return nil + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias ReadState = Selection +} + +extension Objects { + struct Reminder { + let __typename: TypeName = .reminder + let archiveUntil: [String: Bool] + let id: [String: String] + let remindAt: [String: DateTime] + let sendNotification: [String: Bool] + + enum TypeName: String, Codable { + case reminder = "Reminder" + } + } +} + +extension Objects.Reminder: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "archiveUntil": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "remindAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "sendNotification": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + archiveUntil = map["archiveUntil"] + id = map["id"] + remindAt = map["remindAt"] + sendNotification = map["sendNotification"] + } +} + +extension Fields where TypeLock == Objects.Reminder { + func archiveUntil() throws -> Bool { + let field = GraphQLField.leaf( + name: "archiveUntil", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.archiveUntil[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Bool.mockValue + } + } + + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func remindAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "remindAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.remindAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func sendNotification() throws -> Bool { + let field = GraphQLField.leaf( + name: "sendNotification", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.sendNotification[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Bool.mockValue + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias Reminder = Selection +} + +extension Objects { + struct ReminderError { + let __typename: TypeName = .reminderError + let errorCodes: [String: [Enums.ReminderErrorCode]] + + enum TypeName: String, Codable { + case reminderError = "ReminderError" + } + } +} + +extension Objects.ReminderError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -11852,7 +10572,7 @@ extension Objects.SetLabelsError: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.SetLabelsErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.ReminderErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -11869,8 +10589,8 @@ extension Objects.SetLabelsError: Decodable { } } -extension Fields where TypeLock == Objects.SetLabelsError { - func errorCodes() throws -> [Enums.SetLabelsErrorCode] { +extension Fields where TypeLock == Objects.ReminderError { + func errorCodes() throws -> [Enums.ReminderErrorCode] { let field = GraphQLField.leaf( name: "errorCodes", arguments: [] @@ -11890,21 +10610,217 @@ extension Fields where TypeLock == Objects.SetLabelsError { } extension Selection where TypeLock == Never, Type == Never { - typealias SetLabelsError = Selection + typealias ReminderError = Selection } extension Objects { - struct GenerateApiKeySuccess { - let __typename: TypeName = .generateApiKeySuccess - let apiKey: [String: String] + struct ReminderSuccess { + let __typename: TypeName = .reminderSuccess + let reminder: [String: Objects.Reminder] enum TypeName: String, Codable { - case generateApiKeySuccess = "GenerateApiKeySuccess" + case reminderSuccess = "ReminderSuccess" } } } -extension Objects.GenerateApiKeySuccess: Decodable { +extension Objects.ReminderSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "reminder": + if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + reminder = map["reminder"] + } +} + +extension Fields where TypeLock == Objects.ReminderSuccess { + func reminder(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "reminder", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.reminder[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias ReminderSuccess = Selection +} + +extension Objects { + struct ReportItemResult { + let __typename: TypeName = .reportItemResult + let message: [String: String] + + enum TypeName: String, Codable { + case reportItemResult = "ReportItemResult" + } + } +} + +extension Objects.ReportItemResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "message": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + message = map["message"] + } +} + +extension Fields where TypeLock == Objects.ReportItemResult { + func message() throws -> String { + let field = GraphQLField.leaf( + name: "message", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.message[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias ReportItemResult = Selection +} + +extension Objects { + struct RevokeApiKeyError { + let __typename: TypeName = .revokeApiKeyError + let errorCodes: [String: [Enums.RevokeApiKeyErrorCode]] + + enum TypeName: String, Codable { + case revokeApiKeyError = "RevokeApiKeyError" + } + } +} + +extension Objects.RevokeApiKeyError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.RevokeApiKeyErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.RevokeApiKeyError { + func errorCodes() throws -> [Enums.RevokeApiKeyErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias RevokeApiKeyError = Selection +} + +extension Objects { + struct RevokeApiKeySuccess { + let __typename: TypeName = .revokeApiKeySuccess + let apiKey: [String: Objects.ApiKey] + + enum TypeName: String, Codable { + case revokeApiKeySuccess = "RevokeApiKeySuccess" + } + } +} + +extension Objects.RevokeApiKeySuccess: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -11917,7 +10833,7 @@ extension Objects.GenerateApiKeySuccess: Decodable { switch field { case "apiKey": - if let value = try container.decode(String?.self, forKey: codingKey) { + if let value = try container.decode(Objects.ApiKey?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -11934,42 +10850,43 @@ extension Objects.GenerateApiKeySuccess: Decodable { } } -extension Fields where TypeLock == Objects.GenerateApiKeySuccess { - func apiKey() throws -> String { - let field = GraphQLField.leaf( +extension Fields where TypeLock == Objects.RevokeApiKeySuccess { + func apiKey(selection: Selection) throws -> Type { + let field = GraphQLField.composite( name: "apiKey", - arguments: [] + arguments: [], + selection: selection.selection ) select(field) switch response { case let .decoding(data): if let data = data.apiKey[field.alias!] { - return data + return try selection.decode(data: data) } throw HttpError.badpayload case .mocking: - return String.mockValue + return selection.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias GenerateApiKeySuccess = Selection + typealias RevokeApiKeySuccess = Selection } extension Objects { - struct GenerateApiKeyError { - let __typename: TypeName = .generateApiKeyError - let errorCodes: [String: [Enums.GenerateApiKeyErrorCode]] + struct SaveArticleReadingProgressError { + let __typename: TypeName = .saveArticleReadingProgressError + let errorCodes: [String: [Enums.SaveArticleReadingProgressErrorCode]] enum TypeName: String, Codable { - case generateApiKeyError = "GenerateApiKeyError" + case saveArticleReadingProgressError = "SaveArticleReadingProgressError" } } } -extension Objects.GenerateApiKeyError: Decodable { +extension Objects.SaveArticleReadingProgressError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -11982,7 +10899,7 @@ extension Objects.GenerateApiKeyError: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.GenerateApiKeyErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.SaveArticleReadingProgressErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -11999,8 +10916,8 @@ extension Objects.GenerateApiKeyError: Decodable { } } -extension Fields where TypeLock == Objects.GenerateApiKeyError { - func errorCodes() throws -> [Enums.GenerateApiKeyErrorCode] { +extension Fields where TypeLock == Objects.SaveArticleReadingProgressError { + func errorCodes() throws -> [Enums.SaveArticleReadingProgressErrorCode] { let field = GraphQLField.leaf( name: "errorCodes", arguments: [] @@ -12020,7 +10937,313 @@ extension Fields where TypeLock == Objects.GenerateApiKeyError { } extension Selection where TypeLock == Never, Type == Never { - typealias GenerateApiKeyError = Selection + typealias SaveArticleReadingProgressError = Selection +} + +extension Objects { + struct SaveArticleReadingProgressSuccess { + let __typename: TypeName = .saveArticleReadingProgressSuccess + let updatedArticle: [String: Objects.Article] + + enum TypeName: String, Codable { + case saveArticleReadingProgressSuccess = "SaveArticleReadingProgressSuccess" + } + } +} + +extension Objects.SaveArticleReadingProgressSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "updatedArticle": + if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + updatedArticle = map["updatedArticle"] + } +} + +extension Fields where TypeLock == Objects.SaveArticleReadingProgressSuccess { + func updatedArticle(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updatedArticle", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updatedArticle[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SaveArticleReadingProgressSuccess = Selection +} + +extension Objects { + struct SaveError { + let __typename: TypeName = .saveError + let errorCodes: [String: [Enums.SaveErrorCode]] + let message: [String: String] + + enum TypeName: String, Codable { + case saveError = "SaveError" + } + } +} + +extension Objects.SaveError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SaveErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "message": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + message = map["message"] + } +} + +extension Fields where TypeLock == Objects.SaveError { + func errorCodes() throws -> [Enums.SaveErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } + + func message() throws -> String? { + let field = GraphQLField.leaf( + name: "message", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.message[field.alias!] + case .mocking: + return nil + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SaveError = Selection +} + +extension Objects { + struct SaveSuccess { + let __typename: TypeName = .saveSuccess + let clientRequestId: [String: String] + let url: [String: String] + + enum TypeName: String, Codable { + case saveSuccess = "SaveSuccess" + } + } +} + +extension Objects.SaveSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "clientRequestId": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "url": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + clientRequestId = map["clientRequestId"] + url = map["url"] + } +} + +extension Fields where TypeLock == Objects.SaveSuccess { + func clientRequestId() throws -> String { + let field = GraphQLField.leaf( + name: "clientRequestId", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.clientRequestId[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func url() throws -> String { + let field = GraphQLField.leaf( + name: "url", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.url[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SaveSuccess = Selection +} + +extension Objects { + struct SearchError { + let __typename: TypeName = .searchError + let errorCodes: [String: [Enums.SearchErrorCode]] + + enum TypeName: String, Codable { + case searchError = "SearchError" + } + } +} + +extension Objects.SearchError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SearchErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.SearchError { + func errorCodes() throws -> [Enums.SearchErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SearchError = Selection } extension Objects { @@ -12052,6 +11275,7 @@ extension Objects { let title: [String: String] let unsubHttpUrl: [String: String] let unsubMailTo: [String: String] + let updatedAt: [String: DateTime] let uploadFileId: [String: String] let url: [String: String] @@ -12177,6 +11401,10 @@ extension Objects.SearchItem: Decodable { if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } + case "updatedAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } case "uploadFileId": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) @@ -12221,99 +11449,40 @@ extension Objects.SearchItem: Decodable { title = map["title"] unsubHttpUrl = map["unsubHttpUrl"] unsubMailTo = map["unsubMailTo"] + updatedAt = map["updatedAt"] uploadFileId = map["uploadFileId"] url = map["url"] } } extension Fields where TypeLock == Objects.SearchItem { - func id() throws -> String { + func annotation() throws -> String? { let field = GraphQLField.leaf( - name: "id", + name: "annotation", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.id[field.alias!] { - return data - } - throw HttpError.badpayload + return data.annotation[field.alias!] case .mocking: - return String.mockValue + return nil } } - func title() throws -> String { + func author() throws -> String? { let field = GraphQLField.leaf( - name: "title", + name: "author", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.title[field.alias!] { - return data - } - throw HttpError.badpayload + return data.author[field.alias!] case .mocking: - return String.mockValue - } - } - - func slug() throws -> String { - let field = GraphQLField.leaf( - name: "slug", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.slug[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func url() throws -> String { - let field = GraphQLField.leaf( - name: "url", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.url[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return String.mockValue - } - } - - func pageType() throws -> Enums.PageType { - let field = GraphQLField.leaf( - name: "pageType", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.pageType[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Enums.PageType.allCases.first! + return nil } } @@ -12353,66 +11522,36 @@ extension Fields where TypeLock == Objects.SearchItem { } } - func isArchived() throws -> Bool { + func description() throws -> String? { let field = GraphQLField.leaf( - name: "isArchived", + name: "description", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.isArchived[field.alias!] { + return data.description[field.alias!] + case .mocking: + return nil + } + } + + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { return data } throw HttpError.badpayload case .mocking: - return Bool.mockValue - } - } - - func readingProgressPercent() throws -> Double? { - let field = GraphQLField.leaf( - name: "readingProgressPercent", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.readingProgressPercent[field.alias!] - case .mocking: - return nil - } - } - - func readingProgressAnchorIndex() throws -> Int? { - let field = GraphQLField.leaf( - name: "readingProgressAnchorIndex", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.readingProgressAnchorIndex[field.alias!] - case .mocking: - return nil - } - } - - func author() throws -> String? { - let field = GraphQLField.leaf( - name: "author", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.author[field.alias!] - case .mocking: - return nil + return String.mockValue } } @@ -12431,46 +11570,50 @@ extension Fields where TypeLock == Objects.SearchItem { } } - func description() throws -> String? { + func isArchived() throws -> Bool { let field = GraphQLField.leaf( - name: "description", + name: "isArchived", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.description[field.alias!] + if let data = data.isArchived[field.alias!] { + return data + } + throw HttpError.badpayload case .mocking: - return nil + return Bool.mockValue } } - func publishedAt() throws -> DateTime? { - let field = GraphQLField.leaf( - name: "publishedAt", - arguments: [] + func labels(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "labels", + arguments: [], + selection: selection.selection ) select(field) switch response { case let .decoding(data): - return data.publishedAt[field.alias!] + return try selection.decode(data: data.labels[field.alias!]) case .mocking: - return nil + return selection.mock() } } - func ownedByViewer() throws -> Bool? { + func language() throws -> String? { let field = GraphQLField.leaf( - name: "ownedByViewer", + name: "language", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.ownedByViewer[field.alias!] + return data.language[field.alias!] case .mocking: return nil } @@ -12491,16 +11634,16 @@ extension Fields where TypeLock == Objects.SearchItem { } } - func uploadFileId() throws -> String? { + func ownedByViewer() throws -> Bool? { let field = GraphQLField.leaf( - name: "uploadFileId", + name: "ownedByViewer", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.uploadFileId[field.alias!] + return data.ownedByViewer[field.alias!] case .mocking: return nil } @@ -12521,16 +11664,34 @@ extension Fields where TypeLock == Objects.SearchItem { } } - func shortId() throws -> String? { + func pageType() throws -> Enums.PageType { let field = GraphQLField.leaf( - name: "shortId", + name: "pageType", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.shortId[field.alias!] + if let data = data.pageType[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Enums.PageType.allCases.first! + } + } + + func publishedAt() throws -> DateTime? { + let field = GraphQLField.leaf( + name: "publishedAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.publishedAt[field.alias!] case .mocking: return nil } @@ -12551,92 +11712,46 @@ extension Fields where TypeLock == Objects.SearchItem { } } - func annotation() throws -> String? { + func readingProgressAnchorIndex() throws -> Int? { let field = GraphQLField.leaf( - name: "annotation", + name: "readingProgressAnchorIndex", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.annotation[field.alias!] + return data.readingProgressAnchorIndex[field.alias!] case .mocking: return nil } } - func labels(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "labels", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - return try selection.decode(data: data.labels[field.alias!]) - case .mocking: - return selection.mock() - } - } - - func subscription() throws -> String? { + func readingProgressPercent() throws -> Double? { let field = GraphQLField.leaf( - name: "subscription", + name: "readingProgressPercent", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.subscription[field.alias!] + return data.readingProgressPercent[field.alias!] case .mocking: return nil } } - func unsubMailTo() throws -> String? { + func shortId() throws -> String? { let field = GraphQLField.leaf( - name: "unsubMailTo", + name: "shortId", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.unsubMailTo[field.alias!] - case .mocking: - return nil - } - } - - func unsubHttpUrl() throws -> String? { - let field = GraphQLField.leaf( - name: "unsubHttpUrl", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.unsubHttpUrl[field.alias!] - case .mocking: - return nil - } - } - - func state() throws -> Enums.ArticleSavingRequestStatus? { - let field = GraphQLField.leaf( - name: "state", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.state[field.alias!] + return data.shortId[field.alias!] case .mocking: return nil } @@ -12657,20 +11772,152 @@ extension Fields where TypeLock == Objects.SearchItem { } } - func language() throws -> String? { + func slug() throws -> String { let field = GraphQLField.leaf( - name: "language", + name: "slug", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.language[field.alias!] + if let data = data.slug[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func state() throws -> Enums.ArticleSavingRequestStatus? { + let field = GraphQLField.leaf( + name: "state", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.state[field.alias!] case .mocking: return nil } } + + func subscription() throws -> String? { + let field = GraphQLField.leaf( + name: "subscription", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.subscription[field.alias!] + case .mocking: + return nil + } + } + + func title() throws -> String { + let field = GraphQLField.leaf( + name: "title", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.title[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func unsubHttpUrl() throws -> String? { + let field = GraphQLField.leaf( + name: "unsubHttpUrl", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.unsubHttpUrl[field.alias!] + case .mocking: + return nil + } + } + + func unsubMailTo() throws -> String? { + let field = GraphQLField.leaf( + name: "unsubMailTo", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.unsubMailTo[field.alias!] + case .mocking: + return nil + } + } + + func updatedAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "updatedAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updatedAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func uploadFileId() throws -> String? { + let field = GraphQLField.leaf( + name: "uploadFileId", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.uploadFileId[field.alias!] + case .mocking: + return nil + } + } + + func url() throws -> String { + let field = GraphQLField.leaf( + name: "url", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.url[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } } extension Selection where TypeLock == Never, Type == Never { @@ -12859,17 +12106,17 @@ extension Selection where TypeLock == Never, Type == Never { } extension Objects { - struct SearchError { - let __typename: TypeName = .searchError - let errorCodes: [String: [Enums.SearchErrorCode]] + struct SetBookmarkArticleError { + let __typename: TypeName = .setBookmarkArticleError + let errorCodes: [String: [Enums.SetBookmarkArticleErrorCode]] enum TypeName: String, Codable { - case searchError = "SearchError" + case setBookmarkArticleError = "SetBookmarkArticleError" } } } -extension Objects.SearchError: Decodable { +extension Objects.SetBookmarkArticleError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -12882,7 +12129,7 @@ extension Objects.SearchError: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.SearchErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.SetBookmarkArticleErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -12899,8 +12146,8 @@ extension Objects.SearchError: Decodable { } } -extension Fields where TypeLock == Objects.SearchError { - func errorCodes() throws -> [Enums.SearchErrorCode] { +extension Fields where TypeLock == Objects.SetBookmarkArticleError { + func errorCodes() throws -> [Enums.SetBookmarkArticleErrorCode] { let field = GraphQLField.leaf( name: "errorCodes", arguments: [] @@ -12920,21 +12167,1487 @@ extension Fields where TypeLock == Objects.SearchError { } extension Selection where TypeLock == Never, Type == Never { - typealias SearchError = Selection + typealias SetBookmarkArticleError = Selection } extension Objects { - struct SubscriptionsSuccess { - let __typename: TypeName = .subscriptionsSuccess - let subscriptions: [String: [Objects.Subscription]] + struct SetBookmarkArticleSuccess { + let __typename: TypeName = .setBookmarkArticleSuccess + let bookmarkedArticle: [String: Objects.Article] enum TypeName: String, Codable { - case subscriptionsSuccess = "SubscriptionsSuccess" + case setBookmarkArticleSuccess = "SetBookmarkArticleSuccess" } } } -extension Objects.SubscriptionsSuccess: Decodable { +extension Objects.SetBookmarkArticleSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "bookmarkedArticle": + if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + bookmarkedArticle = map["bookmarkedArticle"] + } +} + +extension Fields where TypeLock == Objects.SetBookmarkArticleSuccess { + func bookmarkedArticle(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "bookmarkedArticle", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.bookmarkedArticle[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetBookmarkArticleSuccess = Selection +} + +extension Objects { + struct SetDeviceTokenError { + let __typename: TypeName = .setDeviceTokenError + let errorCodes: [String: [Enums.SetDeviceTokenErrorCode]] + + enum TypeName: String, Codable { + case setDeviceTokenError = "SetDeviceTokenError" + } + } +} + +extension Objects.SetDeviceTokenError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SetDeviceTokenErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.SetDeviceTokenError { + func errorCodes() throws -> [Enums.SetDeviceTokenErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetDeviceTokenError = Selection +} + +extension Objects { + struct SetDeviceTokenSuccess { + let __typename: TypeName = .setDeviceTokenSuccess + let deviceToken: [String: Objects.DeviceToken] + + enum TypeName: String, Codable { + case setDeviceTokenSuccess = "SetDeviceTokenSuccess" + } + } +} + +extension Objects.SetDeviceTokenSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "deviceToken": + if let value = try container.decode(Objects.DeviceToken?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + deviceToken = map["deviceToken"] + } +} + +extension Fields where TypeLock == Objects.SetDeviceTokenSuccess { + func deviceToken(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "deviceToken", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.deviceToken[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetDeviceTokenSuccess = Selection +} + +extension Objects { + struct SetFollowError { + let __typename: TypeName = .setFollowError + let errorCodes: [String: [Enums.SetFollowErrorCode]] + + enum TypeName: String, Codable { + case setFollowError = "SetFollowError" + } + } +} + +extension Objects.SetFollowError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SetFollowErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.SetFollowError { + func errorCodes() throws -> [Enums.SetFollowErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetFollowError = Selection +} + +extension Objects { + struct SetFollowSuccess { + let __typename: TypeName = .setFollowSuccess + let updatedUser: [String: Objects.User] + + enum TypeName: String, Codable { + case setFollowSuccess = "SetFollowSuccess" + } + } +} + +extension Objects.SetFollowSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "updatedUser": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + updatedUser = map["updatedUser"] + } +} + +extension Fields where TypeLock == Objects.SetFollowSuccess { + func updatedUser(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updatedUser", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updatedUser[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetFollowSuccess = Selection +} + +extension Objects { + struct SetLabelsError { + let __typename: TypeName = .setLabelsError + let errorCodes: [String: [Enums.SetLabelsErrorCode]] + + enum TypeName: String, Codable { + case setLabelsError = "SetLabelsError" + } + } +} + +extension Objects.SetLabelsError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SetLabelsErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.SetLabelsError { + func errorCodes() throws -> [Enums.SetLabelsErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetLabelsError = Selection +} + +extension Objects { + struct SetLabelsSuccess { + let __typename: TypeName = .setLabelsSuccess + let labels: [String: [Objects.Label]] + + enum TypeName: String, Codable { + case setLabelsSuccess = "SetLabelsSuccess" + } + } +} + +extension Objects.SetLabelsSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "labels": + if let value = try container.decode([Objects.Label]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + labels = map["labels"] + } +} + +extension Fields where TypeLock == Objects.SetLabelsSuccess { + func labels(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "labels", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.labels[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetLabelsSuccess = Selection +} + +extension Objects { + struct SetShareArticleError { + let __typename: TypeName = .setShareArticleError + let errorCodes: [String: [Enums.SetShareArticleErrorCode]] + + enum TypeName: String, Codable { + case setShareArticleError = "SetShareArticleError" + } + } +} + +extension Objects.SetShareArticleError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SetShareArticleErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.SetShareArticleError { + func errorCodes() throws -> [Enums.SetShareArticleErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetShareArticleError = Selection +} + +extension Objects { + struct SetShareArticleSuccess { + let __typename: TypeName = .setShareArticleSuccess + let updatedArticle: [String: Objects.Article] + let updatedFeedArticle: [String: Objects.FeedArticle] + let updatedFeedArticleId: [String: String] + + enum TypeName: String, Codable { + case setShareArticleSuccess = "SetShareArticleSuccess" + } + } +} + +extension Objects.SetShareArticleSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "updatedArticle": + if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updatedFeedArticle": + if let value = try container.decode(Objects.FeedArticle?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updatedFeedArticleId": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + updatedArticle = map["updatedArticle"] + updatedFeedArticle = map["updatedFeedArticle"] + updatedFeedArticleId = map["updatedFeedArticleId"] + } +} + +extension Fields where TypeLock == Objects.SetShareArticleSuccess { + func updatedArticle(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updatedArticle", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updatedArticle[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } + + func updatedFeedArticle(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updatedFeedArticle", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + return try selection.decode(data: data.updatedFeedArticle[field.alias!]) + case .mocking: + return selection.mock() + } + } + + func updatedFeedArticleId() throws -> String? { + let field = GraphQLField.leaf( + name: "updatedFeedArticleId", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.updatedFeedArticleId[field.alias!] + case .mocking: + return nil + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetShareArticleSuccess = Selection +} + +extension Objects { + struct SetShareHighlightError { + let __typename: TypeName = .setShareHighlightError + let errorCodes: [String: [Enums.SetShareHighlightErrorCode]] + + enum TypeName: String, Codable { + case setShareHighlightError = "SetShareHighlightError" + } + } +} + +extension Objects.SetShareHighlightError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SetShareHighlightErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.SetShareHighlightError { + func errorCodes() throws -> [Enums.SetShareHighlightErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetShareHighlightError = Selection +} + +extension Objects { + struct SetShareHighlightSuccess { + let __typename: TypeName = .setShareHighlightSuccess + let highlight: [String: Objects.Highlight] + + enum TypeName: String, Codable { + case setShareHighlightSuccess = "SetShareHighlightSuccess" + } + } +} + +extension Objects.SetShareHighlightSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "highlight": + if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + highlight = map["highlight"] + } +} + +extension Fields where TypeLock == Objects.SetShareHighlightSuccess { + func highlight(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "highlight", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.highlight[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetShareHighlightSuccess = Selection +} + +extension Objects { + struct SetUserPersonalizationError { + let __typename: TypeName = .setUserPersonalizationError + let errorCodes: [String: [Enums.SetUserPersonalizationErrorCode]] + + enum TypeName: String, Codable { + case setUserPersonalizationError = "SetUserPersonalizationError" + } + } +} + +extension Objects.SetUserPersonalizationError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SetUserPersonalizationErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.SetUserPersonalizationError { + func errorCodes() throws -> [Enums.SetUserPersonalizationErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetUserPersonalizationError = Selection +} + +extension Objects { + struct SetUserPersonalizationSuccess { + let __typename: TypeName = .setUserPersonalizationSuccess + let updatedUserPersonalization: [String: Objects.UserPersonalization] + + enum TypeName: String, Codable { + case setUserPersonalizationSuccess = "SetUserPersonalizationSuccess" + } + } +} + +extension Objects.SetUserPersonalizationSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "updatedUserPersonalization": + if let value = try container.decode(Objects.UserPersonalization?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + updatedUserPersonalization = map["updatedUserPersonalization"] + } +} + +extension Fields where TypeLock == Objects.SetUserPersonalizationSuccess { + func updatedUserPersonalization(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "updatedUserPersonalization", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updatedUserPersonalization[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetUserPersonalizationSuccess = Selection +} + +extension Objects { + struct SetWebhookError { + let __typename: TypeName = .setWebhookError + let errorCodes: [String: [Enums.SetWebhookErrorCode]] + + enum TypeName: String, Codable { + case setWebhookError = "SetWebhookError" + } + } +} + +extension Objects.SetWebhookError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SetWebhookErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.SetWebhookError { + func errorCodes() throws -> [Enums.SetWebhookErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetWebhookError = Selection +} + +extension Objects { + struct SetWebhookSuccess { + let __typename: TypeName = .setWebhookSuccess + let webhook: [String: Objects.Webhook] + + enum TypeName: String, Codable { + case setWebhookSuccess = "SetWebhookSuccess" + } + } +} + +extension Objects.SetWebhookSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "webhook": + if let value = try container.decode(Objects.Webhook?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + webhook = map["webhook"] + } +} + +extension Fields where TypeLock == Objects.SetWebhookSuccess { + func webhook(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "webhook", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.webhook[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetWebhookSuccess = Selection +} + +extension Objects { + struct SharedArticleError { + let __typename: TypeName = .sharedArticleError + let errorCodes: [String: [Enums.SharedArticleErrorCode]] + + enum TypeName: String, Codable { + case sharedArticleError = "SharedArticleError" + } + } +} + +extension Objects.SharedArticleError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SharedArticleErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.SharedArticleError { + func errorCodes() throws -> [Enums.SharedArticleErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SharedArticleError = Selection +} + +extension Objects { + struct SharedArticleSuccess { + let __typename: TypeName = .sharedArticleSuccess + let article: [String: Objects.Article] + + enum TypeName: String, Codable { + case sharedArticleSuccess = "SharedArticleSuccess" + } + } +} + +extension Objects.SharedArticleSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "article": + if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + article = map["article"] + } +} + +extension Fields where TypeLock == Objects.SharedArticleSuccess { + func article(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "article", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.article[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SharedArticleSuccess = Selection +} + +extension Objects { + struct ShareStats { + let __typename: TypeName = .shareStats + let readDuration: [String: Int] + let saveCount: [String: Int] + let viewCount: [String: Int] + + enum TypeName: String, Codable { + case shareStats = "ShareStats" + } + } +} + +extension Objects.ShareStats: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "readDuration": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "saveCount": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "viewCount": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + readDuration = map["readDuration"] + saveCount = map["saveCount"] + viewCount = map["viewCount"] + } +} + +extension Fields where TypeLock == Objects.ShareStats { + func readDuration() throws -> Int { + let field = GraphQLField.leaf( + name: "readDuration", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.readDuration[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Int.mockValue + } + } + + func saveCount() throws -> Int { + let field = GraphQLField.leaf( + name: "saveCount", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.saveCount[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Int.mockValue + } + } + + func viewCount() throws -> Int { + let field = GraphQLField.leaf( + name: "viewCount", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.viewCount[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Int.mockValue + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias ShareStats = Selection +} + +extension Objects { + struct SignupError { + let __typename: TypeName = .signupError + let errorCodes: [String: [Enums.SignupErrorCode?]] + + enum TypeName: String, Codable { + case signupError = "SignupError" + } + } +} + +extension Objects.SignupError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SignupErrorCode?]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.SignupError { + func errorCodes() throws -> [Enums.SignupErrorCode?] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SignupError = Selection +} + +extension Objects { + struct SignupSuccess { + let __typename: TypeName = .signupSuccess + let me: [String: Objects.User] + + enum TypeName: String, Codable { + case signupSuccess = "SignupSuccess" + } + } +} + +extension Objects.SignupSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "me": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + me = map["me"] + } +} + +extension Fields where TypeLock == Objects.SignupSuccess { + func me(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "me", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.me[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SignupSuccess = Selection +} + +extension Objects { + struct SubscribeError { + let __typename: TypeName = .subscribeError + let errorCodes: [String: [Enums.SubscribeErrorCode]] + + enum TypeName: String, Codable { + case subscribeError = "SubscribeError" + } + } +} + +extension Objects.SubscribeError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SubscribeErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.SubscribeError { + func errorCodes() throws -> [Enums.SubscribeErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SubscribeError = Selection +} + +extension Objects { + struct SubscribeSuccess { + let __typename: TypeName = .subscribeSuccess + let subscriptions: [String: [Objects.Subscription]] + + enum TypeName: String, Codable { + case subscribeSuccess = "SubscribeSuccess" + } + } +} + +extension Objects.SubscribeSuccess: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -12964,7 +13677,7 @@ extension Objects.SubscriptionsSuccess: Decodable { } } -extension Fields where TypeLock == Objects.SubscriptionsSuccess { +extension Fields where TypeLock == Objects.SubscribeSuccess { func subscriptions(selection: Selection) throws -> Type { let field = GraphQLField.composite( name: "subscriptions", @@ -12986,7 +13699,7 @@ extension Fields where TypeLock == Objects.SubscriptionsSuccess { } extension Selection where TypeLock == Never, Type == Never { - typealias SubscriptionsSuccess = Selection + typealias SubscribeSuccess = Selection } extension Objects { @@ -13085,6 +13798,39 @@ extension Objects.Subscription: Decodable { } extension Fields where TypeLock == Objects.Subscription { + func createdAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "createdAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createdAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func description() throws -> String? { + let field = GraphQLField.leaf( + name: "description", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.description[field.alias!] + case .mocking: + return nil + } + } + func id() throws -> String { let field = GraphQLField.leaf( name: "id", @@ -13139,36 +13885,6 @@ extension Fields where TypeLock == Objects.Subscription { } } - func url() throws -> String? { - let field = GraphQLField.leaf( - name: "url", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.url[field.alias!] - case .mocking: - return nil - } - } - - func description() throws -> String? { - let field = GraphQLField.leaf( - name: "description", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.description[field.alias!] - case .mocking: - return nil - } - } - func status() throws -> Enums.SubscriptionStatus { let field = GraphQLField.leaf( name: "status", @@ -13187,21 +13903,6 @@ extension Fields where TypeLock == Objects.Subscription { } } - func unsubscribeMailTo() throws -> String? { - let field = GraphQLField.leaf( - name: "unsubscribeMailTo", - arguments: [] - ) - select(field) - - switch response { - case let .decoding(data): - return data.unsubscribeMailTo[field.alias!] - case .mocking: - return nil - } - } - func unsubscribeHttpUrl() throws -> String? { let field = GraphQLField.leaf( name: "unsubscribeHttpUrl", @@ -13217,21 +13918,18 @@ extension Fields where TypeLock == Objects.Subscription { } } - func createdAt() throws -> DateTime { + func unsubscribeMailTo() throws -> String? { let field = GraphQLField.leaf( - name: "createdAt", + name: "unsubscribeMailTo", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.createdAt[field.alias!] { - return data - } - throw HttpError.badpayload + return data.unsubscribeMailTo[field.alias!] case .mocking: - return DateTime.mockValue + return nil } } @@ -13252,6 +13950,21 @@ extension Fields where TypeLock == Objects.Subscription { return DateTime.mockValue } } + + func url() throws -> String? { + let field = GraphQLField.leaf( + name: "url", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.url[field.alias!] + case .mocking: + return nil + } + } } extension Selection where TypeLock == Never, Type == Never { @@ -13324,17 +14037,17 @@ extension Selection where TypeLock == Never, Type == Never { } extension Objects { - struct UnsubscribeSuccess { - let __typename: TypeName = .unsubscribeSuccess - let subscription: [String: Objects.Subscription] + struct SubscriptionsSuccess { + let __typename: TypeName = .subscriptionsSuccess + let subscriptions: [String: [Objects.Subscription]] enum TypeName: String, Codable { - case unsubscribeSuccess = "UnsubscribeSuccess" + case subscriptionsSuccess = "SubscriptionsSuccess" } } } -extension Objects.UnsubscribeSuccess: Decodable { +extension Objects.SubscriptionsSuccess: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -13346,8 +14059,8 @@ extension Objects.UnsubscribeSuccess: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "subscription": - if let value = try container.decode(Objects.Subscription?.self, forKey: codingKey) { + case "subscriptions": + if let value = try container.decode([Objects.Subscription]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -13360,14 +14073,14 @@ extension Objects.UnsubscribeSuccess: Decodable { } } - subscription = map["subscription"] + subscriptions = map["subscriptions"] } } -extension Fields where TypeLock == Objects.UnsubscribeSuccess { - func subscription(selection: Selection) throws -> Type { +extension Fields where TypeLock == Objects.SubscriptionsSuccess { + func subscriptions(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "subscription", + name: "subscriptions", arguments: [], selection: selection.selection ) @@ -13375,7 +14088,7 @@ extension Fields where TypeLock == Objects.UnsubscribeSuccess { switch response { case let .decoding(data): - if let data = data.subscription[field.alias!] { + if let data = data.subscriptions[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -13386,7 +14099,7 @@ extension Fields where TypeLock == Objects.UnsubscribeSuccess { } extension Selection where TypeLock == Never, Type == Never { - typealias UnsubscribeSuccess = Selection + typealias SubscriptionsSuccess = Selection } extension Objects { @@ -13455,17 +14168,17 @@ extension Selection where TypeLock == Never, Type == Never { } extension Objects { - struct SubscribeSuccess { - let __typename: TypeName = .subscribeSuccess - let subscriptions: [String: [Objects.Subscription]] + struct UnsubscribeSuccess { + let __typename: TypeName = .unsubscribeSuccess + let subscription: [String: Objects.Subscription] enum TypeName: String, Codable { - case subscribeSuccess = "SubscribeSuccess" + case unsubscribeSuccess = "UnsubscribeSuccess" } } } -extension Objects.SubscribeSuccess: Decodable { +extension Objects.UnsubscribeSuccess: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -13477,8 +14190,8 @@ extension Objects.SubscribeSuccess: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "subscriptions": - if let value = try container.decode([Objects.Subscription]?.self, forKey: codingKey) { + case "subscription": + if let value = try container.decode(Objects.Subscription?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -13491,14 +14204,14 @@ extension Objects.SubscribeSuccess: Decodable { } } - subscriptions = map["subscriptions"] + subscription = map["subscription"] } } -extension Fields where TypeLock == Objects.SubscribeSuccess { - func subscriptions(selection: Selection) throws -> Type { +extension Fields where TypeLock == Objects.UnsubscribeSuccess { + func subscription(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "subscriptions", + name: "subscription", arguments: [], selection: selection.selection ) @@ -13506,7 +14219,7 @@ extension Fields where TypeLock == Objects.SubscribeSuccess { switch response { case let .decoding(data): - if let data = data.subscriptions[field.alias!] { + if let data = data.subscription[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -13517,21 +14230,21 @@ extension Fields where TypeLock == Objects.SubscribeSuccess { } extension Selection where TypeLock == Never, Type == Never { - typealias SubscribeSuccess = Selection + typealias UnsubscribeSuccess = Selection } extension Objects { - struct SubscribeError { - let __typename: TypeName = .subscribeError - let errorCodes: [String: [Enums.SubscribeErrorCode]] + struct UpdateHighlightError { + let __typename: TypeName = .updateHighlightError + let errorCodes: [String: [Enums.UpdateHighlightErrorCode]] enum TypeName: String, Codable { - case subscribeError = "SubscribeError" + case updateHighlightError = "UpdateHighlightError" } } } -extension Objects.SubscribeError: Decodable { +extension Objects.UpdateHighlightError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -13544,7 +14257,7 @@ extension Objects.SubscribeError: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.SubscribeErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.UpdateHighlightErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -13561,8 +14274,8 @@ extension Objects.SubscribeError: Decodable { } } -extension Fields where TypeLock == Objects.SubscribeError { - func errorCodes() throws -> [Enums.SubscribeErrorCode] { +extension Fields where TypeLock == Objects.UpdateHighlightError { + func errorCodes() throws -> [Enums.UpdateHighlightErrorCode] { let field = GraphQLField.leaf( name: "errorCodes", arguments: [] @@ -13582,21 +14295,21 @@ extension Fields where TypeLock == Objects.SubscribeError { } extension Selection where TypeLock == Never, Type == Never { - typealias SubscribeError = Selection + typealias UpdateHighlightError = Selection } extension Objects { - struct AddPopularReadSuccess { - let __typename: TypeName = .addPopularReadSuccess - let pageId: [String: String] + struct UpdateHighlightReplyError { + let __typename: TypeName = .updateHighlightReplyError + let errorCodes: [String: [Enums.UpdateHighlightReplyErrorCode]] enum TypeName: String, Codable { - case addPopularReadSuccess = "AddPopularReadSuccess" + case updateHighlightReplyError = "UpdateHighlightReplyError" } } } -extension Objects.AddPopularReadSuccess: Decodable { +extension Objects.UpdateHighlightReplyError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -13608,7 +14321,400 @@ extension Objects.AddPopularReadSuccess: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "pageId": + case "errorCodes": + if let value = try container.decode([Enums.UpdateHighlightReplyErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.UpdateHighlightReplyError { + func errorCodes() throws -> [Enums.UpdateHighlightReplyErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateHighlightReplyError = Selection +} + +extension Objects { + struct UpdateHighlightReplySuccess { + let __typename: TypeName = .updateHighlightReplySuccess + let highlightReply: [String: Objects.HighlightReply] + + enum TypeName: String, Codable { + case updateHighlightReplySuccess = "UpdateHighlightReplySuccess" + } + } +} + +extension Objects.UpdateHighlightReplySuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "highlightReply": + if let value = try container.decode(Objects.HighlightReply?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + highlightReply = map["highlightReply"] + } +} + +extension Fields where TypeLock == Objects.UpdateHighlightReplySuccess { + func highlightReply(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "highlightReply", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.highlightReply[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateHighlightReplySuccess = Selection +} + +extension Objects { + struct UpdateHighlightSuccess { + let __typename: TypeName = .updateHighlightSuccess + let highlight: [String: Objects.Highlight] + + enum TypeName: String, Codable { + case updateHighlightSuccess = "UpdateHighlightSuccess" + } + } +} + +extension Objects.UpdateHighlightSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "highlight": + if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + highlight = map["highlight"] + } +} + +extension Fields where TypeLock == Objects.UpdateHighlightSuccess { + func highlight(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "highlight", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.highlight[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateHighlightSuccess = Selection +} + +extension Objects { + struct UpdateLabelError { + let __typename: TypeName = .updateLabelError + let errorCodes: [String: [Enums.UpdateLabelErrorCode]] + + enum TypeName: String, Codable { + case updateLabelError = "UpdateLabelError" + } + } +} + +extension Objects.UpdateLabelError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UpdateLabelErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.UpdateLabelError { + func errorCodes() throws -> [Enums.UpdateLabelErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateLabelError = Selection +} + +extension Objects { + struct UpdateLabelSuccess { + let __typename: TypeName = .updateLabelSuccess + let label: [String: Objects.Label] + + enum TypeName: String, Codable { + case updateLabelSuccess = "UpdateLabelSuccess" + } + } +} + +extension Objects.UpdateLabelSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "label": + if let value = try container.decode(Objects.Label?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + label = map["label"] + } +} + +extension Fields where TypeLock == Objects.UpdateLabelSuccess { + func label(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "label", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.label[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateLabelSuccess = Selection +} + +extension Objects { + struct UpdateLinkShareInfoError { + let __typename: TypeName = .updateLinkShareInfoError + let errorCodes: [String: [Enums.UpdateLinkShareInfoErrorCode]] + + enum TypeName: String, Codable { + case updateLinkShareInfoError = "UpdateLinkShareInfoError" + } + } +} + +extension Objects.UpdateLinkShareInfoError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UpdateLinkShareInfoErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.UpdateLinkShareInfoError { + func errorCodes() throws -> [Enums.UpdateLinkShareInfoErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateLinkShareInfoError = Selection +} + +extension Objects { + struct UpdateLinkShareInfoSuccess { + let __typename: TypeName = .updateLinkShareInfoSuccess + let message: [String: String] + + enum TypeName: String, Codable { + case updateLinkShareInfoSuccess = "UpdateLinkShareInfoSuccess" + } + } +} + +extension Objects.UpdateLinkShareInfoSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "message": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } @@ -13622,21 +14728,21 @@ extension Objects.AddPopularReadSuccess: Decodable { } } - pageId = map["pageId"] + message = map["message"] } } -extension Fields where TypeLock == Objects.AddPopularReadSuccess { - func pageId() throws -> String { +extension Fields where TypeLock == Objects.UpdateLinkShareInfoSuccess { + func message() throws -> String { let field = GraphQLField.leaf( - name: "pageId", + name: "message", arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.pageId[field.alias!] { + if let data = data.message[field.alias!] { return data } throw HttpError.badpayload @@ -13647,21 +14753,21 @@ extension Fields where TypeLock == Objects.AddPopularReadSuccess { } extension Selection where TypeLock == Never, Type == Never { - typealias AddPopularReadSuccess = Selection + typealias UpdateLinkShareInfoSuccess = Selection } extension Objects { - struct AddPopularReadError { - let __typename: TypeName = .addPopularReadError - let errorCodes: [String: [Enums.AddPopularReadErrorCode]] + struct UpdatePageError { + let __typename: TypeName = .updatePageError + let errorCodes: [String: [Enums.UpdatePageErrorCode]] enum TypeName: String, Codable { - case addPopularReadError = "AddPopularReadError" + case updatePageError = "UpdatePageError" } } } -extension Objects.AddPopularReadError: Decodable { +extension Objects.UpdatePageError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -13674,7 +14780,7 @@ extension Objects.AddPopularReadError: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.AddPopularReadErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.UpdatePageErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -13691,8 +14797,8 @@ extension Objects.AddPopularReadError: Decodable { } } -extension Fields where TypeLock == Objects.AddPopularReadError { - func errorCodes() throws -> [Enums.AddPopularReadErrorCode] { +extension Fields where TypeLock == Objects.UpdatePageError { + func errorCodes() throws -> [Enums.UpdatePageErrorCode] { let field = GraphQLField.leaf( name: "errorCodes", arguments: [] @@ -13712,67 +14818,21 @@ extension Fields where TypeLock == Objects.AddPopularReadError { } extension Selection where TypeLock == Never, Type == Never { - typealias AddPopularReadError = Selection + typealias UpdatePageError = Selection } extension Objects { - struct Mutation { - let __typename: TypeName = .mutation - let addPopularRead: [String: Unions.AddPopularReadResult] - let createArticle: [String: Unions.CreateArticleResult] - let createArticleSavingRequest: [String: Unions.CreateArticleSavingRequestResult] - let createHighlight: [String: Unions.CreateHighlightResult] - let createHighlightReply: [String: Unions.CreateHighlightReplyResult] - let createLabel: [String: Unions.CreateLabelResult] - let createNewsletterEmail: [String: Unions.CreateNewsletterEmailResult] - let createReaction: [String: Unions.CreateReactionResult] - let createReminder: [String: Unions.CreateReminderResult] - let deleteHighlight: [String: Unions.DeleteHighlightResult] - let deleteHighlightReply: [String: Unions.DeleteHighlightReplyResult] - let deleteLabel: [String: Unions.DeleteLabelResult] - let deleteNewsletterEmail: [String: Unions.DeleteNewsletterEmailResult] - let deleteReaction: [String: Unions.DeleteReactionResult] - let deleteReminder: [String: Unions.DeleteReminderResult] - let generateApiKey: [String: Unions.GenerateApiKeyResult] - let googleLogin: [String: Unions.LoginResult] - let googleSignup: [String: Unions.GoogleSignupResult] - let logOut: [String: Unions.LogOutResult] - let login: [String: Unions.LoginResult] - let mergeHighlight: [String: Unions.MergeHighlightResult] - let reportItem: [String: Objects.ReportItemResult] - let saveArticleReadingProgress: [String: Unions.SaveArticleReadingProgressResult] - let saveFile: [String: Unions.SaveResult] - let savePage: [String: Unions.SaveResult] - let saveUrl: [String: Unions.SaveResult] - let setBookmarkArticle: [String: Unions.SetBookmarkArticleResult] - let setDeviceToken: [String: Unions.SetDeviceTokenResult] - let setFollow: [String: Unions.SetFollowResult] - let setLabels: [String: Unions.SetLabelsResult] - let setLinkArchived: [String: Unions.ArchiveLinkResult] - let setShareArticle: [String: Unions.SetShareArticleResult] - let setShareHighlight: [String: Unions.SetShareHighlightResult] - let setUserPersonalization: [String: Unions.SetUserPersonalizationResult] - let signup: [String: Unions.SignupResult] - let subscribe: [String: Unions.SubscribeResult] - let unsubscribe: [String: Unions.UnsubscribeResult] - let updateHighlight: [String: Unions.UpdateHighlightResult] - let updateHighlightReply: [String: Unions.UpdateHighlightReplyResult] - let updateLabel: [String: Unions.UpdateLabelResult] - let updateLinkShareInfo: [String: Unions.UpdateLinkShareInfoResult] - let updatePage: [String: Unions.UpdatePageResult] - let updateReminder: [String: Unions.UpdateReminderResult] - let updateSharedComment: [String: Unions.UpdateSharedCommentResult] - let updateUser: [String: Unions.UpdateUserResult] - let updateUserProfile: [String: Unions.UpdateUserProfileResult] - let uploadFileRequest: [String: Unions.UploadFileRequestResult] + struct UpdatePageSuccess { + let __typename: TypeName = .updatePageSuccess + let updatedPage: [String: Objects.Page] enum TypeName: String, Codable { - case mutation = "Mutation" + case updatePageSuccess = "UpdatePageSuccess" } } } -extension Objects.Mutation: Decodable { +extension Objects.UpdatePageSuccess: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -13784,192 +14844,8 @@ extension Objects.Mutation: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "addPopularRead": - if let value = try container.decode(Unions.AddPopularReadResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "createArticle": - if let value = try container.decode(Unions.CreateArticleResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "createArticleSavingRequest": - if let value = try container.decode(Unions.CreateArticleSavingRequestResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "createHighlight": - if let value = try container.decode(Unions.CreateHighlightResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "createHighlightReply": - if let value = try container.decode(Unions.CreateHighlightReplyResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "createLabel": - if let value = try container.decode(Unions.CreateLabelResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "createNewsletterEmail": - if let value = try container.decode(Unions.CreateNewsletterEmailResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "createReaction": - if let value = try container.decode(Unions.CreateReactionResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "createReminder": - if let value = try container.decode(Unions.CreateReminderResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "deleteHighlight": - if let value = try container.decode(Unions.DeleteHighlightResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "deleteHighlightReply": - if let value = try container.decode(Unions.DeleteHighlightReplyResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "deleteLabel": - if let value = try container.decode(Unions.DeleteLabelResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "deleteNewsletterEmail": - if let value = try container.decode(Unions.DeleteNewsletterEmailResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "deleteReaction": - if let value = try container.decode(Unions.DeleteReactionResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "deleteReminder": - if let value = try container.decode(Unions.DeleteReminderResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "generateApiKey": - if let value = try container.decode(Unions.GenerateApiKeyResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "googleLogin": - if let value = try container.decode(Unions.LoginResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "googleSignup": - if let value = try container.decode(Unions.GoogleSignupResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "logOut": - if let value = try container.decode(Unions.LogOutResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "login": - if let value = try container.decode(Unions.LoginResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "mergeHighlight": - if let value = try container.decode(Unions.MergeHighlightResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "reportItem": - if let value = try container.decode(Objects.ReportItemResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "saveArticleReadingProgress": - if let value = try container.decode(Unions.SaveArticleReadingProgressResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "saveFile": - if let value = try container.decode(Unions.SaveResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "savePage": - if let value = try container.decode(Unions.SaveResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "saveUrl": - if let value = try container.decode(Unions.SaveResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "setBookmarkArticle": - if let value = try container.decode(Unions.SetBookmarkArticleResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "setDeviceToken": - if let value = try container.decode(Unions.SetDeviceTokenResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "setFollow": - if let value = try container.decode(Unions.SetFollowResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "setLabels": - if let value = try container.decode(Unions.SetLabelsResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "setLinkArchived": - if let value = try container.decode(Unions.ArchiveLinkResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "setShareArticle": - if let value = try container.decode(Unions.SetShareArticleResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "setShareHighlight": - if let value = try container.decode(Unions.SetShareHighlightResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "setUserPersonalization": - if let value = try container.decode(Unions.SetUserPersonalizationResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "signup": - if let value = try container.decode(Unions.SignupResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "subscribe": - if let value = try container.decode(Unions.SubscribeResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "unsubscribe": - if let value = try container.decode(Unions.UnsubscribeResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updateHighlight": - if let value = try container.decode(Unions.UpdateHighlightResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updateHighlightReply": - if let value = try container.decode(Unions.UpdateHighlightReplyResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updateLabel": - if let value = try container.decode(Unions.UpdateLabelResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updateLinkShareInfo": - if let value = try container.decode(Unions.UpdateLinkShareInfoResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updatePage": - if let value = try container.decode(Unions.UpdatePageResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updateReminder": - if let value = try container.decode(Unions.UpdateReminderResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updateSharedComment": - if let value = try container.decode(Unions.UpdateSharedCommentResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updateUser": - if let value = try container.decode(Unions.UpdateUserResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updateUserProfile": - if let value = try container.decode(Unions.UpdateUserProfileResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "uploadFileRequest": - if let value = try container.decode(Unions.UploadFileRequestResult?.self, forKey: codingKey) { + case "updatedPage": + if let value = try container.decode(Objects.Page?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -13982,98 +14858,14 @@ extension Objects.Mutation: Decodable { } } - addPopularRead = map["addPopularRead"] - createArticle = map["createArticle"] - createArticleSavingRequest = map["createArticleSavingRequest"] - createHighlight = map["createHighlight"] - createHighlightReply = map["createHighlightReply"] - createLabel = map["createLabel"] - createNewsletterEmail = map["createNewsletterEmail"] - createReaction = map["createReaction"] - createReminder = map["createReminder"] - deleteHighlight = map["deleteHighlight"] - deleteHighlightReply = map["deleteHighlightReply"] - deleteLabel = map["deleteLabel"] - deleteNewsletterEmail = map["deleteNewsletterEmail"] - deleteReaction = map["deleteReaction"] - deleteReminder = map["deleteReminder"] - generateApiKey = map["generateApiKey"] - googleLogin = map["googleLogin"] - googleSignup = map["googleSignup"] - logOut = map["logOut"] - login = map["login"] - mergeHighlight = map["mergeHighlight"] - reportItem = map["reportItem"] - saveArticleReadingProgress = map["saveArticleReadingProgress"] - saveFile = map["saveFile"] - savePage = map["savePage"] - saveUrl = map["saveUrl"] - setBookmarkArticle = map["setBookmarkArticle"] - setDeviceToken = map["setDeviceToken"] - setFollow = map["setFollow"] - setLabels = map["setLabels"] - setLinkArchived = map["setLinkArchived"] - setShareArticle = map["setShareArticle"] - setShareHighlight = map["setShareHighlight"] - setUserPersonalization = map["setUserPersonalization"] - signup = map["signup"] - subscribe = map["subscribe"] - unsubscribe = map["unsubscribe"] - updateHighlight = map["updateHighlight"] - updateHighlightReply = map["updateHighlightReply"] - updateLabel = map["updateLabel"] - updateLinkShareInfo = map["updateLinkShareInfo"] - updatePage = map["updatePage"] - updateReminder = map["updateReminder"] - updateSharedComment = map["updateSharedComment"] - updateUser = map["updateUser"] - updateUserProfile = map["updateUserProfile"] - uploadFileRequest = map["uploadFileRequest"] + updatedPage = map["updatedPage"] } } -extension Fields where TypeLock == Objects.Mutation { - func googleLogin(input: InputObjects.GoogleLoginInput, selection: Selection) throws -> Type { +extension Fields where TypeLock == Objects.UpdatePageSuccess { + func updatedPage(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "googleLogin", - arguments: [Argument(name: "input", type: "GoogleLoginInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.googleLogin[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func googleSignup(input: InputObjects.GoogleSignupInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "googleSignup", - arguments: [Argument(name: "input", type: "GoogleSignupInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.googleSignup[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func logOut(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "logOut", + name: "updatedPage", arguments: [], selection: selection.selection ) @@ -14081,843 +14873,7 @@ extension Fields where TypeLock == Objects.Mutation { switch response { case let .decoding(data): - if let data = data.logOut[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func updateUser(input: InputObjects.UpdateUserInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updateUser", - arguments: [Argument(name: "input", type: "UpdateUserInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updateUser[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func updateUserProfile(input: InputObjects.UpdateUserProfileInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updateUserProfile", - arguments: [Argument(name: "input", type: "UpdateUserProfileInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updateUserProfile[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func createArticle(input: InputObjects.CreateArticleInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "createArticle", - arguments: [Argument(name: "input", type: "CreateArticleInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createArticle[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func createHighlight(input: InputObjects.CreateHighlightInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "createHighlight", - arguments: [Argument(name: "input", type: "CreateHighlightInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createHighlight[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func mergeHighlight(input: InputObjects.MergeHighlightInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "mergeHighlight", - arguments: [Argument(name: "input", type: "MergeHighlightInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.mergeHighlight[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func updateHighlight(input: InputObjects.UpdateHighlightInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updateHighlight", - arguments: [Argument(name: "input", type: "UpdateHighlightInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updateHighlight[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func deleteHighlight(highlightId: String, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "deleteHighlight", - arguments: [Argument(name: "highlightId", type: "ID!", value: highlightId)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.deleteHighlight[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func createHighlightReply(input: InputObjects.CreateHighlightReplyInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "createHighlightReply", - arguments: [Argument(name: "input", type: "CreateHighlightReplyInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createHighlightReply[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func updateHighlightReply(input: InputObjects.UpdateHighlightReplyInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updateHighlightReply", - arguments: [Argument(name: "input", type: "UpdateHighlightReplyInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updateHighlightReply[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func deleteHighlightReply(highlightReplyId: String, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "deleteHighlightReply", - arguments: [Argument(name: "highlightReplyId", type: "ID!", value: highlightReplyId)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.deleteHighlightReply[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func createReaction(input: InputObjects.CreateReactionInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "createReaction", - arguments: [Argument(name: "input", type: "CreateReactionInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createReaction[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func deleteReaction(id: String, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "deleteReaction", - arguments: [Argument(name: "id", type: "ID!", value: id)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.deleteReaction[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func uploadFileRequest(input: InputObjects.UploadFileRequestInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "uploadFileRequest", - arguments: [Argument(name: "input", type: "UploadFileRequestInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.uploadFileRequest[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func saveArticleReadingProgress(input: InputObjects.SaveArticleReadingProgressInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "saveArticleReadingProgress", - arguments: [Argument(name: "input", type: "SaveArticleReadingProgressInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.saveArticleReadingProgress[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func setShareArticle(input: InputObjects.SetShareArticleInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "setShareArticle", - arguments: [Argument(name: "input", type: "SetShareArticleInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.setShareArticle[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func updateSharedComment(input: InputObjects.UpdateSharedCommentInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updateSharedComment", - arguments: [Argument(name: "input", type: "UpdateSharedCommentInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updateSharedComment[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func setFollow(input: InputObjects.SetFollowInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "setFollow", - arguments: [Argument(name: "input", type: "SetFollowInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.setFollow[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func setBookmarkArticle(input: InputObjects.SetBookmarkArticleInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "setBookmarkArticle", - arguments: [Argument(name: "input", type: "SetBookmarkArticleInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.setBookmarkArticle[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func setUserPersonalization(input: InputObjects.SetUserPersonalizationInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "setUserPersonalization", - arguments: [Argument(name: "input", type: "SetUserPersonalizationInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.setUserPersonalization[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func createArticleSavingRequest(input: InputObjects.CreateArticleSavingRequestInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "createArticleSavingRequest", - arguments: [Argument(name: "input", type: "CreateArticleSavingRequestInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createArticleSavingRequest[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func setShareHighlight(input: InputObjects.SetShareHighlightInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "setShareHighlight", - arguments: [Argument(name: "input", type: "SetShareHighlightInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.setShareHighlight[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func reportItem(input: InputObjects.ReportItemInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "reportItem", - arguments: [Argument(name: "input", type: "ReportItemInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.reportItem[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func updateLinkShareInfo(input: InputObjects.UpdateLinkShareInfoInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updateLinkShareInfo", - arguments: [Argument(name: "input", type: "UpdateLinkShareInfoInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updateLinkShareInfo[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func setLinkArchived(input: InputObjects.ArchiveLinkInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "setLinkArchived", - arguments: [Argument(name: "input", type: "ArchiveLinkInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.setLinkArchived[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func createNewsletterEmail(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "createNewsletterEmail", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createNewsletterEmail[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func deleteNewsletterEmail(newsletterEmailId: String, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "deleteNewsletterEmail", - arguments: [Argument(name: "newsletterEmailId", type: "ID!", value: newsletterEmailId)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.deleteNewsletterEmail[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func saveUrl(input: InputObjects.SaveUrlInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "saveUrl", - arguments: [Argument(name: "input", type: "SaveUrlInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.saveUrl[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func savePage(input: InputObjects.SavePageInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "savePage", - arguments: [Argument(name: "input", type: "SavePageInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.savePage[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func updatePage(input: InputObjects.UpdatePageInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updatePage", - arguments: [Argument(name: "input", type: "UpdatePageInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updatePage[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func saveFile(input: InputObjects.SaveFileInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "saveFile", - arguments: [Argument(name: "input", type: "SaveFileInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.saveFile[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func createReminder(input: InputObjects.CreateReminderInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "createReminder", - arguments: [Argument(name: "input", type: "CreateReminderInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createReminder[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func updateReminder(input: InputObjects.UpdateReminderInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updateReminder", - arguments: [Argument(name: "input", type: "UpdateReminderInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updateReminder[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func deleteReminder(id: String, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "deleteReminder", - arguments: [Argument(name: "id", type: "ID!", value: id)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.deleteReminder[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func setDeviceToken(input: InputObjects.SetDeviceTokenInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "setDeviceToken", - arguments: [Argument(name: "input", type: "SetDeviceTokenInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.setDeviceToken[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func createLabel(input: InputObjects.CreateLabelInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "createLabel", - arguments: [Argument(name: "input", type: "CreateLabelInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.createLabel[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func updateLabel(input: InputObjects.UpdateLabelInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "updateLabel", - arguments: [Argument(name: "input", type: "UpdateLabelInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.updateLabel[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func deleteLabel(id: String, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "deleteLabel", - arguments: [Argument(name: "id", type: "ID!", value: id)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.deleteLabel[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func login(input: InputObjects.LoginInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "login", - arguments: [Argument(name: "input", type: "LoginInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.login[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func signup(input: InputObjects.SignupInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "signup", - arguments: [Argument(name: "input", type: "SignupInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.signup[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func setLabels(input: InputObjects.SetLabelsInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "setLabels", - arguments: [Argument(name: "input", type: "SetLabelsInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.setLabels[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func generateApiKey(input: InputObjects.GenerateApiKeyInput, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "generateApiKey", - arguments: [Argument(name: "input", type: "GenerateApiKeyInput!", value: input)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.generateApiKey[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func unsubscribe(name: String, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "unsubscribe", - arguments: [Argument(name: "name", type: "String!", value: name)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.unsubscribe[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func subscribe(name: String, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "subscribe", - arguments: [Argument(name: "name", type: "String!", value: name)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.subscribe[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func addPopularRead(name: String, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "addPopularRead", - arguments: [Argument(name: "name", type: "String!", value: name)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.addPopularRead[field.alias!] { + if let data = data.updatedPage[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -14928,38 +14884,21 @@ extension Fields where TypeLock == Objects.Mutation { } extension Selection where TypeLock == Never, Type == Never { - typealias Mutation = Selection + typealias UpdatePageSuccess = Selection } extension Objects { - struct Query { - let __typename: TypeName = .query - let article: [String: Unions.ArticleResult] - let articleSavingRequest: [String: Unions.ArticleSavingRequestResult] - let articles: [String: Unions.ArticlesResult] - let feedArticles: [String: Unions.FeedArticlesResult] - let getFollowers: [String: Unions.GetFollowersResult] - let getFollowing: [String: Unions.GetFollowingResult] - let getUserPersonalization: [String: Unions.GetUserPersonalizationResult] - let hello: [String: String] - let labels: [String: Unions.LabelsResult] - let me: [String: Objects.User] - let newsletterEmails: [String: Unions.NewsletterEmailsResult] - let reminder: [String: Unions.ReminderResult] - let search: [String: Unions.SearchResult] - let sharedArticle: [String: Unions.SharedArticleResult] - let subscriptions: [String: Unions.SubscriptionsResult] - let user: [String: Unions.UserResult] - let users: [String: Unions.UsersResult] - let validateUsername: [String: Bool] + struct UpdateReminderError { + let __typename: TypeName = .updateReminderError + let errorCodes: [String: [Enums.UpdateReminderErrorCode]] enum TypeName: String, Codable { - case query = "Query" + case updateReminderError = "UpdateReminderError" } } } -extension Objects.Query: Decodable { +extension Objects.UpdateReminderError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -14971,76 +14910,8 @@ extension Objects.Query: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "article": - if let value = try container.decode(Unions.ArticleResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "articleSavingRequest": - if let value = try container.decode(Unions.ArticleSavingRequestResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "articles": - if let value = try container.decode(Unions.ArticlesResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "feedArticles": - if let value = try container.decode(Unions.FeedArticlesResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "getFollowers": - if let value = try container.decode(Unions.GetFollowersResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "getFollowing": - if let value = try container.decode(Unions.GetFollowingResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "getUserPersonalization": - if let value = try container.decode(Unions.GetUserPersonalizationResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "hello": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "labels": - if let value = try container.decode(Unions.LabelsResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "me": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "newsletterEmails": - if let value = try container.decode(Unions.NewsletterEmailsResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "reminder": - if let value = try container.decode(Unions.ReminderResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "search": - if let value = try container.decode(Unions.SearchResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "sharedArticle": - if let value = try container.decode(Unions.SharedArticleResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "subscriptions": - if let value = try container.decode(Unions.SubscriptionsResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "user": - if let value = try container.decode(Unions.UserResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "users": - if let value = try container.decode(Unions.UsersResult?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "validateUsername": - if let value = try container.decode(Bool?.self, forKey: codingKey) { + case "errorCodes": + if let value = try container.decode([Enums.UpdateReminderErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -15053,46 +14924,79 @@ extension Objects.Query: Decodable { } } - article = map["article"] - articleSavingRequest = map["articleSavingRequest"] - articles = map["articles"] - feedArticles = map["feedArticles"] - getFollowers = map["getFollowers"] - getFollowing = map["getFollowing"] - getUserPersonalization = map["getUserPersonalization"] - hello = map["hello"] - labels = map["labels"] - me = map["me"] - newsletterEmails = map["newsletterEmails"] - reminder = map["reminder"] - search = map["search"] - sharedArticle = map["sharedArticle"] - subscriptions = map["subscriptions"] - user = map["user"] - users = map["users"] - validateUsername = map["validateUsername"] + errorCodes = map["errorCodes"] } } -extension Fields where TypeLock == Objects.Query { - func hello() throws -> String? { +extension Fields where TypeLock == Objects.UpdateReminderError { + func errorCodes() throws -> [Enums.UpdateReminderErrorCode] { let field = GraphQLField.leaf( - name: "hello", + name: "errorCodes", arguments: [] ) select(field) switch response { case let .decoding(data): - return data.hello[field.alias!] + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload case .mocking: - return nil + return [] } } +} - func me(selection: Selection) throws -> Type { +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateReminderError = Selection +} + +extension Objects { + struct UpdateReminderSuccess { + let __typename: TypeName = .updateReminderSuccess + let reminder: [String: Objects.Reminder] + + enum TypeName: String, Codable { + case updateReminderSuccess = "UpdateReminderSuccess" + } + } +} + +extension Objects.UpdateReminderSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "reminder": + if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + reminder = map["reminder"] + } +} + +extension Fields where TypeLock == Objects.UpdateReminderSuccess { + func reminder(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "me", + name: "reminder", arguments: [], selection: selection.selection ) @@ -15100,16 +15004,350 @@ extension Fields where TypeLock == Objects.Query { switch response { case let .decoding(data): - return try selection.decode(data: data.me[field.alias!]) + if let data = data.reminder[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload case .mocking: return selection.mock() } } +} - func user(userId: OptionalArgument = .absent(), username: OptionalArgument = .absent(), selection: Selection) throws -> Type { +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateReminderSuccess = Selection +} + +extension Objects { + struct UpdateSharedCommentError { + let __typename: TypeName = .updateSharedCommentError + let errorCodes: [String: [Enums.UpdateSharedCommentErrorCode]] + + enum TypeName: String, Codable { + case updateSharedCommentError = "UpdateSharedCommentError" + } + } +} + +extension Objects.UpdateSharedCommentError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UpdateSharedCommentErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.UpdateSharedCommentError { + func errorCodes() throws -> [Enums.UpdateSharedCommentErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateSharedCommentError = Selection +} + +extension Objects { + struct UpdateSharedCommentSuccess { + let __typename: TypeName = .updateSharedCommentSuccess + let articleId: [String: String] + let sharedComment: [String: String] + + enum TypeName: String, Codable { + case updateSharedCommentSuccess = "UpdateSharedCommentSuccess" + } + } +} + +extension Objects.UpdateSharedCommentSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "articleId": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "sharedComment": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + articleId = map["articleId"] + sharedComment = map["sharedComment"] + } +} + +extension Fields where TypeLock == Objects.UpdateSharedCommentSuccess { + func articleId() throws -> String { + let field = GraphQLField.leaf( + name: "articleID", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.articleId[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func sharedComment() throws -> String { + let field = GraphQLField.leaf( + name: "sharedComment", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.sharedComment[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateSharedCommentSuccess = Selection +} + +extension Objects { + struct UpdateUserError { + let __typename: TypeName = .updateUserError + let errorCodes: [String: [Enums.UpdateUserErrorCode]] + + enum TypeName: String, Codable { + case updateUserError = "UpdateUserError" + } + } +} + +extension Objects.UpdateUserError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UpdateUserErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.UpdateUserError { + func errorCodes() throws -> [Enums.UpdateUserErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateUserError = Selection +} + +extension Objects { + struct UpdateUserProfileError { + let __typename: TypeName = .updateUserProfileError + let errorCodes: [String: [Enums.UpdateUserProfileErrorCode]] + + enum TypeName: String, Codable { + case updateUserProfileError = "UpdateUserProfileError" + } + } +} + +extension Objects.UpdateUserProfileError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UpdateUserProfileErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.UpdateUserProfileError { + func errorCodes() throws -> [Enums.UpdateUserProfileErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateUserProfileError = Selection +} + +extension Objects { + struct UpdateUserProfileSuccess { + let __typename: TypeName = .updateUserProfileSuccess + let user: [String: Objects.User] + + enum TypeName: String, Codable { + case updateUserProfileSuccess = "UpdateUserProfileSuccess" + } + } +} + +extension Objects.UpdateUserProfileSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "user": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + user = map["user"] + } +} + +extension Fields where TypeLock == Objects.UpdateUserProfileSuccess { + func user(selection: Selection) throws -> Type { let field = GraphQLField.composite( name: "user", - arguments: [Argument(name: "userId", type: "ID", value: userId), Argument(name: "username", type: "String", value: username)], + arguments: [], selection: selection.selection ) select(field) @@ -15124,18 +15362,487 @@ extension Fields where TypeLock == Objects.Query { return selection.mock() } } +} - func articles(sharedOnly: OptionalArgument = .absent(), sort: OptionalArgument = .absent(), after: OptionalArgument = .absent(), first: OptionalArgument = .absent(), query: OptionalArgument = .absent(), includePending: OptionalArgument = .absent(), selection: Selection) throws -> Type { +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateUserProfileSuccess = Selection +} + +extension Objects { + struct UpdateUserSuccess { + let __typename: TypeName = .updateUserSuccess + let user: [String: Objects.User] + + enum TypeName: String, Codable { + case updateUserSuccess = "UpdateUserSuccess" + } + } +} + +extension Objects.UpdateUserSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "user": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + user = map["user"] + } +} + +extension Fields where TypeLock == Objects.UpdateUserSuccess { + func user(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "articles", - arguments: [Argument(name: "sharedOnly", type: "Boolean", value: sharedOnly), Argument(name: "sort", type: "SortParams", value: sort), Argument(name: "after", type: "String", value: after), Argument(name: "first", type: "Int", value: first), Argument(name: "query", type: "String", value: query), Argument(name: "includePending", type: "Boolean", value: includePending)], + name: "user", + arguments: [], selection: selection.selection ) select(field) switch response { case let .decoding(data): - if let data = data.articles[field.alias!] { + if let data = data.user[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateUserSuccess = Selection +} + +extension Objects { + struct UploadFileRequestError { + let __typename: TypeName = .uploadFileRequestError + let errorCodes: [String: [Enums.UploadFileRequestErrorCode]] + + enum TypeName: String, Codable { + case uploadFileRequestError = "UploadFileRequestError" + } + } +} + +extension Objects.UploadFileRequestError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UploadFileRequestErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.UploadFileRequestError { + func errorCodes() throws -> [Enums.UploadFileRequestErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UploadFileRequestError = Selection +} + +extension Objects { + struct UploadFileRequestSuccess { + let __typename: TypeName = .uploadFileRequestSuccess + let id: [String: String] + let uploadFileId: [String: String] + let uploadSignedUrl: [String: String] + + enum TypeName: String, Codable { + case uploadFileRequestSuccess = "UploadFileRequestSuccess" + } + } +} + +extension Objects.UploadFileRequestSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "id": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "uploadFileId": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "uploadSignedUrl": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + id = map["id"] + uploadFileId = map["uploadFileId"] + uploadSignedUrl = map["uploadSignedUrl"] + } +} + +extension Fields where TypeLock == Objects.UploadFileRequestSuccess { + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func uploadFileId() throws -> String? { + let field = GraphQLField.leaf( + name: "uploadFileId", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.uploadFileId[field.alias!] + case .mocking: + return nil + } + } + + func uploadSignedUrl() throws -> String? { + let field = GraphQLField.leaf( + name: "uploadSignedUrl", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.uploadSignedUrl[field.alias!] + case .mocking: + return nil + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UploadFileRequestSuccess = Selection +} + +extension Objects { + struct User { + let __typename: TypeName = .user + let followersCount: [String: Int] + let friendsCount: [String: Int] + let id: [String: String] + let isFriend: [String: Bool] + let isFullUser: [String: Bool] + let name: [String: String] + let picture: [String: String] + let profile: [String: Objects.Profile] + let sharedArticles: [String: [Objects.FeedArticle]] + let sharedArticlesCount: [String: Int] + let sharedHighlightsCount: [String: Int] + let sharedNotesCount: [String: Int] + let viewerIsFollowing: [String: Bool] + + enum TypeName: String, Codable { + case user = "User" + } + } +} + +extension Objects.User: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "followersCount": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "friendsCount": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "isFriend": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "isFullUser": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "name": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "picture": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "profile": + if let value = try container.decode(Objects.Profile?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "sharedArticles": + if let value = try container.decode([Objects.FeedArticle]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "sharedArticlesCount": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "sharedHighlightsCount": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "sharedNotesCount": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "viewerIsFollowing": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + followersCount = map["followersCount"] + friendsCount = map["friendsCount"] + id = map["id"] + isFriend = map["isFriend"] + isFullUser = map["isFullUser"] + name = map["name"] + picture = map["picture"] + profile = map["profile"] + sharedArticles = map["sharedArticles"] + sharedArticlesCount = map["sharedArticlesCount"] + sharedHighlightsCount = map["sharedHighlightsCount"] + sharedNotesCount = map["sharedNotesCount"] + viewerIsFollowing = map["viewerIsFollowing"] + } +} + +extension Fields where TypeLock == Objects.User { + func followersCount() throws -> Int? { + let field = GraphQLField.leaf( + name: "followersCount", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.followersCount[field.alias!] + case .mocking: + return nil + } + } + + func friendsCount() throws -> Int? { + let field = GraphQLField.leaf( + name: "friendsCount", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.friendsCount[field.alias!] + case .mocking: + return nil + } + } + + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + @available(*, deprecated, message: "isFriend has been replaced with viewerIsFollowing") + func isFriend() throws -> Bool? { + let field = GraphQLField.leaf( + name: "isFriend", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.isFriend[field.alias!] + case .mocking: + return nil + } + } + + func isFullUser() throws -> Bool? { + let field = GraphQLField.leaf( + name: "isFullUser", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.isFullUser[field.alias!] + case .mocking: + return nil + } + } + + func name() throws -> String { + let field = GraphQLField.leaf( + name: "name", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.name[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func picture() throws -> String? { + let field = GraphQLField.leaf( + name: "picture", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.picture[field.alias!] + case .mocking: + return nil + } + } + + func profile(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "profile", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.profile[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -15144,17 +15851,17 @@ extension Fields where TypeLock == Objects.Query { } } - func article(username: String, slug: String, selection: Selection) throws -> Type { + func sharedArticles(selection: Selection) throws -> Type { let field = GraphQLField.composite( - name: "article", - arguments: [Argument(name: "username", type: "String!", value: username), Argument(name: "slug", type: "String!", value: slug)], + name: "sharedArticles", + arguments: [], selection: selection.selection ) select(field) switch response { case let .decoding(data): - if let data = data.article[field.alias!] { + if let data = data.sharedArticles[field.alias!] { return try selection.decode(data: data) } throw HttpError.badpayload @@ -15163,45 +15870,432 @@ extension Fields where TypeLock == Objects.Query { } } - func sharedArticle(username: String, slug: String, selectedHighlightId: OptionalArgument = .absent(), selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "sharedArticle", - arguments: [Argument(name: "username", type: "String!", value: username), Argument(name: "slug", type: "String!", value: slug), Argument(name: "selectedHighlightId", type: "String", value: selectedHighlightId)], - selection: selection.selection + func sharedArticlesCount() throws -> Int? { + let field = GraphQLField.leaf( + name: "sharedArticlesCount", + arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.sharedArticle[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload + return data.sharedArticlesCount[field.alias!] case .mocking: - return selection.mock() + return nil } } - func feedArticles(after: OptionalArgument = .absent(), first: OptionalArgument = .absent(), sort: OptionalArgument = .absent(), sharedByUser: OptionalArgument = .absent(), selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "feedArticles", - arguments: [Argument(name: "after", type: "String", value: after), Argument(name: "first", type: "Int", value: first), Argument(name: "sort", type: "SortParams", value: sort), Argument(name: "sharedByUser", type: "ID", value: sharedByUser)], - selection: selection.selection + func sharedHighlightsCount() throws -> Int? { + let field = GraphQLField.leaf( + name: "sharedHighlightsCount", + arguments: [] ) select(field) switch response { case let .decoding(data): - if let data = data.feedArticles[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload + return data.sharedHighlightsCount[field.alias!] case .mocking: - return selection.mock() + return nil } } - func users(selection: Selection) throws -> Type { + func sharedNotesCount() throws -> Int? { + let field = GraphQLField.leaf( + name: "sharedNotesCount", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.sharedNotesCount[field.alias!] + case .mocking: + return nil + } + } + + func viewerIsFollowing() throws -> Bool? { + let field = GraphQLField.leaf( + name: "viewerIsFollowing", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.viewerIsFollowing[field.alias!] + case .mocking: + return nil + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias User = Selection +} + +extension Objects { + struct UserError { + let __typename: TypeName = .userError + let errorCodes: [String: [Enums.UserErrorCode]] + + enum TypeName: String, Codable { + case userError = "UserError" + } + } +} + +extension Objects.UserError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UserErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.UserError { + func errorCodes() throws -> [Enums.UserErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UserError = Selection +} + +extension Objects { + struct UserPersonalization { + let __typename: TypeName = .userPersonalization + let fontFamily: [String: String] + let fontSize: [String: Int] + let id: [String: String] + let libraryLayoutType: [String: String] + let librarySortOrder: [String: Enums.SortOrder] + let margin: [String: Int] + let theme: [String: String] + + enum TypeName: String, Codable { + case userPersonalization = "UserPersonalization" + } + } +} + +extension Objects.UserPersonalization: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "fontFamily": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "fontSize": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "libraryLayoutType": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "librarySortOrder": + if let value = try container.decode(Enums.SortOrder?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "margin": + if let value = try container.decode(Int?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "theme": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + fontFamily = map["fontFamily"] + fontSize = map["fontSize"] + id = map["id"] + libraryLayoutType = map["libraryLayoutType"] + librarySortOrder = map["librarySortOrder"] + margin = map["margin"] + theme = map["theme"] + } +} + +extension Fields where TypeLock == Objects.UserPersonalization { + func fontFamily() throws -> String? { + let field = GraphQLField.leaf( + name: "fontFamily", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.fontFamily[field.alias!] + case .mocking: + return nil + } + } + + func fontSize() throws -> Int? { + let field = GraphQLField.leaf( + name: "fontSize", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.fontSize[field.alias!] + case .mocking: + return nil + } + } + + func id() throws -> String? { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.id[field.alias!] + case .mocking: + return nil + } + } + + func libraryLayoutType() throws -> String? { + let field = GraphQLField.leaf( + name: "libraryLayoutType", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.libraryLayoutType[field.alias!] + case .mocking: + return nil + } + } + + func librarySortOrder() throws -> Enums.SortOrder? { + let field = GraphQLField.leaf( + name: "librarySortOrder", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.librarySortOrder[field.alias!] + case .mocking: + return nil + } + } + + func margin() throws -> Int? { + let field = GraphQLField.leaf( + name: "margin", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.margin[field.alias!] + case .mocking: + return nil + } + } + + func theme() throws -> String? { + let field = GraphQLField.leaf( + name: "theme", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + return data.theme[field.alias!] + case .mocking: + return nil + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UserPersonalization = Selection +} + +extension Objects { + struct UsersError { + let __typename: TypeName = .usersError + let errorCodes: [String: [Enums.UsersErrorCode]] + + enum TypeName: String, Codable { + case usersError = "UsersError" + } + } +} + +extension Objects.UsersError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UsersErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.UsersError { + func errorCodes() throws -> [Enums.UsersErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UsersError = Selection +} + +extension Objects { + struct UsersSuccess { + let __typename: TypeName = .usersSuccess + let users: [String: [Objects.User]] + + enum TypeName: String, Codable { + case usersSuccess = "UsersSuccess" + } + } +} + +extension Objects.UsersSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "users": + if let value = try container.decode([Objects.User]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + users = map["users"] + } +} + +extension Fields where TypeLock == Objects.UsersSuccess { + func users(selection: Selection) throws -> Type { let field = GraphQLField.composite( name: "users", arguments: [], @@ -15219,222 +16313,24 @@ extension Fields where TypeLock == Objects.Query { return selection.mock() } } - - func validateUsername(username: String) throws -> Bool { - let field = GraphQLField.leaf( - name: "validateUsername", - arguments: [Argument(name: "username", type: "String!", value: username)] - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.validateUsername[field.alias!] { - return data - } - throw HttpError.badpayload - case .mocking: - return Bool.mockValue - } - } - - func getFollowers(userId: OptionalArgument = .absent(), selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "getFollowers", - arguments: [Argument(name: "userId", type: "ID", value: userId)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.getFollowers[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func getFollowing(userId: OptionalArgument = .absent(), selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "getFollowing", - arguments: [Argument(name: "userId", type: "ID", value: userId)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.getFollowing[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func getUserPersonalization(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "getUserPersonalization", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.getUserPersonalization[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func articleSavingRequest(id: String, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "articleSavingRequest", - arguments: [Argument(name: "id", type: "ID!", value: id)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.articleSavingRequest[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func newsletterEmails(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "newsletterEmails", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.newsletterEmails[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func reminder(linkId: String, selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "reminder", - arguments: [Argument(name: "linkId", type: "ID!", value: linkId)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.reminder[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func labels(selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "labels", - arguments: [], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.labels[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func search(after: OptionalArgument = .absent(), first: OptionalArgument = .absent(), query: OptionalArgument = .absent(), selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "search", - arguments: [Argument(name: "after", type: "String", value: after), Argument(name: "first", type: "Int", value: first), Argument(name: "query", type: "String", value: query)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.search[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } - - func subscriptions(sort: OptionalArgument = .absent(), selection: Selection) throws -> Type { - let field = GraphQLField.composite( - name: "subscriptions", - arguments: [Argument(name: "sort", type: "SortParams", value: sort)], - selection: selection.selection - ) - select(field) - - switch response { - case let .decoding(data): - if let data = data.subscriptions[field.alias!] { - return try selection.decode(data: data) - } - throw HttpError.badpayload - case .mocking: - return selection.mock() - } - } } extension Selection where TypeLock == Never, Type == Never { - typealias Query = Selection + typealias UsersSuccess = Selection } -// MARK: - Interfaces - -enum Interfaces {} - -// MARK: - Unions - -enum Unions {} -extension Unions { - struct UserResult { - let __typename: TypeName - let errorCodes: [String: [Enums.UserErrorCode]] +extension Objects { + struct UserSuccess { + let __typename: TypeName = .userSuccess let user: [String: Objects.User] enum TypeName: String, Codable { case userSuccess = "UserSuccess" - case userError = "UserError" } } } -extension Unions.UserResult: Decodable { +extension Objects.UserSuccess: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -15446,10 +16342,6 @@ extension Unions.UserResult: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "errorCodes": - if let value = try container.decode([Enums.UserErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } case "user": if let value = try container.decode(Objects.User?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) @@ -15464,51 +16356,280 @@ extension Unions.UserResult: Decodable { } } - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] user = map["user"] } } -extension Fields where TypeLock == Unions.UserResult { - func on(userSuccess: Selection, userError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UserSuccess", selection: userSuccess.selection), GraphQLField.fragment(type: "UserError", selection: userError.selection)]) +extension Fields where TypeLock == Objects.UserSuccess { + func user(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "user", + arguments: [], + selection: selection.selection + ) + select(field) switch response { case let .decoding(data): - switch data.__typename { - case .userSuccess: - let data = Objects.UserSuccess(user: data.user) - return try userSuccess.decode(data: data) - case .userError: - let data = Objects.UserError(errorCodes: data.errorCodes) - return try userError.decode(data: data) + if let data = data.user[field.alias!] { + return try selection.decode(data: data) } + throw HttpError.badpayload case .mocking: - return userSuccess.mock() + return selection.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias UserResult = Selection + typealias UserSuccess = Selection } -extension Unions { - struct UsersResult { - let __typename: TypeName - let errorCodes: [String: [Enums.UsersErrorCode]] - let users: [String: [Objects.User]] +extension Objects { + struct Webhook { + let __typename: TypeName = .webhook + let contentType: [String: String] + let createdAt: [String: DateTime] + let enabled: [String: Bool] + let eventTypes: [String: [Enums.WebhookEvent]] + let id: [String: String] + let method: [String: String] + let updatedAt: [String: DateTime] + let url: [String: String] enum TypeName: String, Codable { - case usersSuccess = "UsersSuccess" - case usersError = "UsersError" + case webhook = "Webhook" } } } -extension Unions.UsersResult: Decodable { +extension Objects.Webhook: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "contentType": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "createdAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "enabled": + if let value = try container.decode(Bool?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "eventTypes": + if let value = try container.decode([Enums.WebhookEvent]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "method": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updatedAt": + if let value = try container.decode(DateTime?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "url": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + contentType = map["contentType"] + createdAt = map["createdAt"] + enabled = map["enabled"] + eventTypes = map["eventTypes"] + id = map["id"] + method = map["method"] + updatedAt = map["updatedAt"] + url = map["url"] + } +} + +extension Fields where TypeLock == Objects.Webhook { + func contentType() throws -> String { + let field = GraphQLField.leaf( + name: "contentType", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.contentType[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func createdAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "createdAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.createdAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func enabled() throws -> Bool { + let field = GraphQLField.leaf( + name: "enabled", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.enabled[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return Bool.mockValue + } + } + + func eventTypes() throws -> [Enums.WebhookEvent] { + let field = GraphQLField.leaf( + name: "eventTypes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.eventTypes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } + + func id() throws -> String { + let field = GraphQLField.leaf( + name: "id", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.id[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func method() throws -> String { + let field = GraphQLField.leaf( + name: "method", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.method[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } + + func updatedAt() throws -> DateTime { + let field = GraphQLField.leaf( + name: "updatedAt", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.updatedAt[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return DateTime.mockValue + } + } + + func url() throws -> String { + let field = GraphQLField.leaf( + name: "url", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.url[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return String.mockValue + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias Webhook = Selection +} + +extension Objects { + struct WebhookError { + let __typename: TypeName = .webhookError + let errorCodes: [String: [Enums.WebhookErrorCode]] + + enum TypeName: String, Codable { + case webhookError = "WebhookError" + } + } +} + +extension Objects.WebhookError: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -15521,11 +16642,282 @@ extension Unions.UsersResult: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.UsersErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.WebhookErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "users": - if let value = try container.decode([Objects.User]?.self, forKey: codingKey) { + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.WebhookError { + func errorCodes() throws -> [Enums.WebhookErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias WebhookError = Selection +} + +extension Objects { + struct WebhooksError { + let __typename: TypeName = .webhooksError + let errorCodes: [String: [Enums.WebhooksErrorCode]] + + enum TypeName: String, Codable { + case webhooksError = "WebhooksError" + } + } +} + +extension Objects.WebhooksError: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.WebhooksErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Objects.WebhooksError { + func errorCodes() throws -> [Enums.WebhooksErrorCode] { + let field = GraphQLField.leaf( + name: "errorCodes", + arguments: [] + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.errorCodes[field.alias!] { + return data + } + throw HttpError.badpayload + case .mocking: + return [] + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias WebhooksError = Selection +} + +extension Objects { + struct WebhooksSuccess { + let __typename: TypeName = .webhooksSuccess + let webhooks: [String: [Objects.Webhook]] + + enum TypeName: String, Codable { + case webhooksSuccess = "WebhooksSuccess" + } + } +} + +extension Objects.WebhooksSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "webhooks": + if let value = try container.decode([Objects.Webhook]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + webhooks = map["webhooks"] + } +} + +extension Fields where TypeLock == Objects.WebhooksSuccess { + func webhooks(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "webhooks", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.webhooks[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias WebhooksSuccess = Selection +} + +extension Objects { + struct WebhookSuccess { + let __typename: TypeName = .webhookSuccess + let webhook: [String: Objects.Webhook] + + enum TypeName: String, Codable { + case webhookSuccess = "WebhookSuccess" + } + } +} + +extension Objects.WebhookSuccess: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "webhook": + if let value = try container.decode(Objects.Webhook?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + webhook = map["webhook"] + } +} + +extension Fields where TypeLock == Objects.WebhookSuccess { + func webhook(selection: Selection) throws -> Type { + let field = GraphQLField.composite( + name: "webhook", + arguments: [], + selection: selection.selection + ) + select(field) + + switch response { + case let .decoding(data): + if let data = data.webhook[field.alias!] { + return try selection.decode(data: data) + } + throw HttpError.badpayload + case .mocking: + return selection.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias WebhookSuccess = Selection +} + +// MARK: - Interfaces + +enum Interfaces {} + +// MARK: - Unions + +enum Unions {} +extension Unions { + struct AddPopularReadResult { + let __typename: TypeName + let errorCodes: [String: [Enums.AddPopularReadErrorCode]] + let pageId: [String: String] + + enum TypeName: String, Codable { + case addPopularReadError = "AddPopularReadError" + case addPopularReadSuccess = "AddPopularReadSuccess" + } + } +} + +extension Unions.AddPopularReadResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.AddPopularReadErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "pageId": + if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -15541,48 +16933,48 @@ extension Unions.UsersResult: Decodable { __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) errorCodes = map["errorCodes"] - users = map["users"] + pageId = map["pageId"] } } -extension Fields where TypeLock == Unions.UsersResult { - func on(usersSuccess: Selection, usersError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UsersSuccess", selection: usersSuccess.selection), GraphQLField.fragment(type: "UsersError", selection: usersError.selection)]) +extension Fields where TypeLock == Unions.AddPopularReadResult { + func on(addPopularReadError: Selection, addPopularReadSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "AddPopularReadError", selection: addPopularReadError.selection), GraphQLField.fragment(type: "AddPopularReadSuccess", selection: addPopularReadSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .usersSuccess: - let data = Objects.UsersSuccess(users: data.users) - return try usersSuccess.decode(data: data) - case .usersError: - let data = Objects.UsersError(errorCodes: data.errorCodes) - return try usersError.decode(data: data) + case .addPopularReadError: + let data = Objects.AddPopularReadError(errorCodes: data.errorCodes) + return try addPopularReadError.decode(data: data) + case .addPopularReadSuccess: + let data = Objects.AddPopularReadSuccess(pageId: data.pageId) + return try addPopularReadSuccess.decode(data: data) } case .mocking: - return usersSuccess.mock() + return addPopularReadError.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias UsersResult = Selection + typealias AddPopularReadResult = Selection } extension Unions { - struct LoginResult { + struct ApiKeysResult { let __typename: TypeName - let errorCodes: [String: [Enums.LoginErrorCode]] - let me: [String: Objects.User] + let apiKeys: [String: [Objects.ApiKey]] + let errorCodes: [String: [Enums.ApiKeysErrorCode]] enum TypeName: String, Codable { - case loginSuccess = "LoginSuccess" - case loginError = "LoginError" + case apiKeysError = "ApiKeysError" + case apiKeysSuccess = "ApiKeysSuccess" } } } -extension Unions.LoginResult: Decodable { +extension Unions.ApiKeysResult: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -15594,12 +16986,12 @@ extension Unions.LoginResult: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "errorCodes": - if let value = try container.decode([Enums.LoginErrorCode]?.self, forKey: codingKey) { + case "apiKeys": + if let value = try container.decode([Objects.ApiKey]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "me": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + case "errorCodes": + if let value = try container.decode([Enums.ApiKeysErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -15614,123 +17006,50 @@ extension Unions.LoginResult: Decodable { __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + apiKeys = map["apiKeys"] errorCodes = map["errorCodes"] - me = map["me"] } } -extension Fields where TypeLock == Unions.LoginResult { - func on(loginSuccess: Selection, loginError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "LoginSuccess", selection: loginSuccess.selection), GraphQLField.fragment(type: "LoginError", selection: loginError.selection)]) +extension Fields where TypeLock == Unions.ApiKeysResult { + func on(apiKeysError: Selection, apiKeysSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "ApiKeysError", selection: apiKeysError.selection), GraphQLField.fragment(type: "ApiKeysSuccess", selection: apiKeysSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .loginSuccess: - let data = Objects.LoginSuccess(me: data.me) - return try loginSuccess.decode(data: data) - case .loginError: - let data = Objects.LoginError(errorCodes: data.errorCodes) - return try loginError.decode(data: data) + case .apiKeysError: + let data = Objects.ApiKeysError(errorCodes: data.errorCodes) + return try apiKeysError.decode(data: data) + case .apiKeysSuccess: + let data = Objects.ApiKeysSuccess(apiKeys: data.apiKeys) + return try apiKeysSuccess.decode(data: data) } case .mocking: - return loginSuccess.mock() + return apiKeysError.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias LoginResult = Selection + typealias ApiKeysResult = Selection } extension Unions { - struct GoogleSignupResult { + struct ArchiveLinkResult { let __typename: TypeName - let errorCodes: [String: [Enums.SignupErrorCode?]] - let me: [String: Objects.User] - - enum TypeName: String, Codable { - case googleSignupSuccess = "GoogleSignupSuccess" - case googleSignupError = "GoogleSignupError" - } - } -} - -extension Unions.GoogleSignupResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SignupErrorCode?]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "me": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - me = map["me"] - } -} - -extension Fields where TypeLock == Unions.GoogleSignupResult { - func on(googleSignupSuccess: Selection, googleSignupError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "GoogleSignupSuccess", selection: googleSignupSuccess.selection), GraphQLField.fragment(type: "GoogleSignupError", selection: googleSignupError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .googleSignupSuccess: - let data = Objects.GoogleSignupSuccess(me: data.me) - return try googleSignupSuccess.decode(data: data) - case .googleSignupError: - let data = Objects.GoogleSignupError(errorCodes: data.errorCodes) - return try googleSignupError.decode(data: data) - } - case .mocking: - return googleSignupSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias GoogleSignupResult = Selection -} - -extension Unions { - struct LogOutResult { - let __typename: TypeName - let errorCodes: [String: [Enums.LogOutErrorCode]] + let errorCodes: [String: [Enums.ArchiveLinkErrorCode]] + let linkId: [String: String] let message: [String: String] enum TypeName: String, Codable { - case logOutSuccess = "LogOutSuccess" - case logOutError = "LogOutError" + case archiveLinkError = "ArchiveLinkError" + case archiveLinkSuccess = "ArchiveLinkSuccess" } } } -extension Unions.LogOutResult: Decodable { +extension Unions.ArchiveLinkResult: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -15743,7 +17062,11 @@ extension Unions.LogOutResult: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.LogOutErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.ArchiveLinkErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "linkId": + if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } case "message": @@ -15763,180 +17086,33 @@ extension Unions.LogOutResult: Decodable { __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) errorCodes = map["errorCodes"] + linkId = map["linkId"] message = map["message"] } } -extension Fields where TypeLock == Unions.LogOutResult { - func on(logOutSuccess: Selection, logOutError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "LogOutSuccess", selection: logOutSuccess.selection), GraphQLField.fragment(type: "LogOutError", selection: logOutError.selection)]) +extension Fields where TypeLock == Unions.ArchiveLinkResult { + func on(archiveLinkError: Selection, archiveLinkSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "ArchiveLinkError", selection: archiveLinkError.selection), GraphQLField.fragment(type: "ArchiveLinkSuccess", selection: archiveLinkSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .logOutSuccess: - let data = Objects.LogOutSuccess(message: data.message) - return try logOutSuccess.decode(data: data) - case .logOutError: - let data = Objects.LogOutError(errorCodes: data.errorCodes) - return try logOutError.decode(data: data) + case .archiveLinkError: + let data = Objects.ArchiveLinkError(errorCodes: data.errorCodes, message: data.message) + return try archiveLinkError.decode(data: data) + case .archiveLinkSuccess: + let data = Objects.ArchiveLinkSuccess(linkId: data.linkId, message: data.message) + return try archiveLinkSuccess.decode(data: data) } case .mocking: - return logOutSuccess.mock() + return archiveLinkError.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias LogOutResult = Selection -} - -extension Unions { - struct UpdateUserResult { - let __typename: TypeName - let errorCodes: [String: [Enums.UpdateUserErrorCode]] - let user: [String: Objects.User] - - enum TypeName: String, Codable { - case updateUserSuccess = "UpdateUserSuccess" - case updateUserError = "UpdateUserError" - } - } -} - -extension Unions.UpdateUserResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateUserErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "user": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - user = map["user"] - } -} - -extension Fields where TypeLock == Unions.UpdateUserResult { - func on(updateUserSuccess: Selection, updateUserError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UpdateUserSuccess", selection: updateUserSuccess.selection), GraphQLField.fragment(type: "UpdateUserError", selection: updateUserError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .updateUserSuccess: - let data = Objects.UpdateUserSuccess(user: data.user) - return try updateUserSuccess.decode(data: data) - case .updateUserError: - let data = Objects.UpdateUserError(errorCodes: data.errorCodes) - return try updateUserError.decode(data: data) - } - case .mocking: - return updateUserSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateUserResult = Selection -} - -extension Unions { - struct UpdateUserProfileResult { - let __typename: TypeName - let errorCodes: [String: [Enums.UpdateUserProfileErrorCode]] - let user: [String: Objects.User] - - enum TypeName: String, Codable { - case updateUserProfileSuccess = "UpdateUserProfileSuccess" - case updateUserProfileError = "UpdateUserProfileError" - } - } -} - -extension Unions.UpdateUserProfileResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateUserProfileErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "user": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - user = map["user"] - } -} - -extension Fields where TypeLock == Unions.UpdateUserProfileResult { - func on(updateUserProfileSuccess: Selection, updateUserProfileError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UpdateUserProfileSuccess", selection: updateUserProfileSuccess.selection), GraphQLField.fragment(type: "UpdateUserProfileError", selection: updateUserProfileError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .updateUserProfileSuccess: - let data = Objects.UpdateUserProfileSuccess(user: data.user) - return try updateUserProfileSuccess.decode(data: data) - case .updateUserProfileError: - let data = Objects.UpdateUserProfileError(errorCodes: data.errorCodes) - return try updateUserProfileError.decode(data: data) - } - case .mocking: - return updateUserProfileSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateUserProfileResult = Selection + typealias ArchiveLinkResult = Selection } extension Unions { @@ -15946,8 +17122,8 @@ extension Unions { let errorCodes: [String: [Enums.ArticleErrorCode]] enum TypeName: String, Codable { - case articleSuccess = "ArticleSuccess" case articleError = "ArticleError" + case articleSuccess = "ArticleSuccess" } } } @@ -15990,21 +17166,21 @@ extension Unions.ArticleResult: Decodable { } extension Fields where TypeLock == Unions.ArticleResult { - func on(articleSuccess: Selection, articleError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "ArticleSuccess", selection: articleSuccess.selection), GraphQLField.fragment(type: "ArticleError", selection: articleError.selection)]) + func on(articleError: Selection, articleSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "ArticleError", selection: articleError.selection), GraphQLField.fragment(type: "ArticleSuccess", selection: articleSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .articleSuccess: - let data = Objects.ArticleSuccess(article: data.article) - return try articleSuccess.decode(data: data) case .articleError: let data = Objects.ArticleError(errorCodes: data.errorCodes) return try articleError.decode(data: data) + case .articleSuccess: + let data = Objects.ArticleSuccess(article: data.article) + return try articleSuccess.decode(data: data) } case .mocking: - return articleSuccess.mock() + return articleError.mock() } } } @@ -16014,19 +17190,19 @@ extension Selection where TypeLock == Never, Type == Never { } extension Unions { - struct SharedArticleResult { + struct ArticleSavingRequestResult { let __typename: TypeName - let article: [String: Objects.Article] - let errorCodes: [String: [Enums.SharedArticleErrorCode]] + let articleSavingRequest: [String: Objects.ArticleSavingRequest] + let errorCodes: [String: [Enums.ArticleSavingRequestErrorCode]] enum TypeName: String, Codable { - case sharedArticleSuccess = "SharedArticleSuccess" - case sharedArticleError = "SharedArticleError" + case articleSavingRequestError = "ArticleSavingRequestError" + case articleSavingRequestSuccess = "ArticleSavingRequestSuccess" } } } -extension Unions.SharedArticleResult: Decodable { +extension Unions.ArticleSavingRequestResult: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -16038,12 +17214,12 @@ extension Unions.SharedArticleResult: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "article": - if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { + case "articleSavingRequest": + if let value = try container.decode(Objects.ArticleSavingRequest?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } case "errorCodes": - if let value = try container.decode([Enums.SharedArticleErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.ArticleSavingRequestErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -16058,33 +17234,33 @@ extension Unions.SharedArticleResult: Decodable { __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - article = map["article"] + articleSavingRequest = map["articleSavingRequest"] errorCodes = map["errorCodes"] } } -extension Fields where TypeLock == Unions.SharedArticleResult { - func on(sharedArticleSuccess: Selection, sharedArticleError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SharedArticleSuccess", selection: sharedArticleSuccess.selection), GraphQLField.fragment(type: "SharedArticleError", selection: sharedArticleError.selection)]) +extension Fields where TypeLock == Unions.ArticleSavingRequestResult { + func on(articleSavingRequestError: Selection, articleSavingRequestSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "ArticleSavingRequestError", selection: articleSavingRequestError.selection), GraphQLField.fragment(type: "ArticleSavingRequestSuccess", selection: articleSavingRequestSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .sharedArticleSuccess: - let data = Objects.SharedArticleSuccess(article: data.article) - return try sharedArticleSuccess.decode(data: data) - case .sharedArticleError: - let data = Objects.SharedArticleError(errorCodes: data.errorCodes) - return try sharedArticleError.decode(data: data) + case .articleSavingRequestError: + let data = Objects.ArticleSavingRequestError(errorCodes: data.errorCodes) + return try articleSavingRequestError.decode(data: data) + case .articleSavingRequestSuccess: + let data = Objects.ArticleSavingRequestSuccess(articleSavingRequest: data.articleSavingRequest) + return try articleSavingRequestSuccess.decode(data: data) } case .mocking: - return sharedArticleSuccess.mock() + return articleSavingRequestError.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias SharedArticleResult = Selection + typealias ArticleSavingRequestResult = Selection } extension Unions { @@ -16095,8 +17271,8 @@ extension Unions { let pageInfo: [String: Objects.PageInfo] enum TypeName: String, Codable { - case articlesSuccess = "ArticlesSuccess" case articlesError = "ArticlesError" + case articlesSuccess = "ArticlesSuccess" } } } @@ -16144,21 +17320,21 @@ extension Unions.ArticlesResult: Decodable { } extension Fields where TypeLock == Unions.ArticlesResult { - func on(articlesSuccess: Selection, articlesError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "ArticlesSuccess", selection: articlesSuccess.selection), GraphQLField.fragment(type: "ArticlesError", selection: articlesError.selection)]) + func on(articlesError: Selection, articlesSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "ArticlesError", selection: articlesError.selection), GraphQLField.fragment(type: "ArticlesSuccess", selection: articlesSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .articlesSuccess: - let data = Objects.ArticlesSuccess(edges: data.edges, pageInfo: data.pageInfo) - return try articlesSuccess.decode(data: data) case .articlesError: let data = Objects.ArticlesError(errorCodes: data.errorCodes) return try articlesError.decode(data: data) + case .articlesSuccess: + let data = Objects.ArticlesSuccess(edges: data.edges, pageInfo: data.pageInfo) + return try articlesSuccess.decode(data: data) } case .mocking: - return articlesSuccess.mock() + return articlesError.mock() } } } @@ -16167,92 +17343,6 @@ extension Selection where TypeLock == Never, Type == Never { typealias ArticlesResult = Selection } -extension Unions { - struct UploadFileRequestResult { - let __typename: TypeName - let errorCodes: [String: [Enums.UploadFileRequestErrorCode]] - let id: [String: String] - let uploadFileId: [String: String] - let uploadSignedUrl: [String: String] - - enum TypeName: String, Codable { - case uploadFileRequestSuccess = "UploadFileRequestSuccess" - case uploadFileRequestError = "UploadFileRequestError" - } - } -} - -extension Unions.UploadFileRequestResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UploadFileRequestErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "id": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "uploadFileId": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "uploadSignedUrl": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - id = map["id"] - uploadFileId = map["uploadFileId"] - uploadSignedUrl = map["uploadSignedUrl"] - } -} - -extension Fields where TypeLock == Unions.UploadFileRequestResult { - func on(uploadFileRequestSuccess: Selection, uploadFileRequestError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UploadFileRequestSuccess", selection: uploadFileRequestSuccess.selection), GraphQLField.fragment(type: "UploadFileRequestError", selection: uploadFileRequestError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .uploadFileRequestSuccess: - let data = Objects.UploadFileRequestSuccess(id: data.id, uploadFileId: data.uploadFileId, uploadSignedUrl: data.uploadSignedUrl) - return try uploadFileRequestSuccess.decode(data: data) - case .uploadFileRequestError: - let data = Objects.UploadFileRequestError(errorCodes: data.errorCodes) - return try uploadFileRequestError.decode(data: data) - } - case .mocking: - return uploadFileRequestSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UploadFileRequestResult = Selection -} - extension Unions { struct CreateArticleResult { let __typename: TypeName @@ -16262,8 +17352,8 @@ extension Unions { let user: [String: Objects.User] enum TypeName: String, Codable { - case createArticleSuccess = "CreateArticleSuccess" case createArticleError = "CreateArticleError" + case createArticleSuccess = "CreateArticleSuccess" } } } @@ -16316,21 +17406,21 @@ extension Unions.CreateArticleResult: Decodable { } extension Fields where TypeLock == Unions.CreateArticleResult { - func on(createArticleSuccess: Selection, createArticleError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "CreateArticleSuccess", selection: createArticleSuccess.selection), GraphQLField.fragment(type: "CreateArticleError", selection: createArticleError.selection)]) + func on(createArticleError: Selection, createArticleSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "CreateArticleError", selection: createArticleError.selection), GraphQLField.fragment(type: "CreateArticleSuccess", selection: createArticleSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .createArticleSuccess: - let data = Objects.CreateArticleSuccess(created: data.created, createdArticle: data.createdArticle, user: data.user) - return try createArticleSuccess.decode(data: data) case .createArticleError: let data = Objects.CreateArticleError(errorCodes: data.errorCodes) return try createArticleError.decode(data: data) + case .createArticleSuccess: + let data = Objects.CreateArticleSuccess(created: data.created, createdArticle: data.createdArticle, user: data.user) + return try createArticleSuccess.decode(data: data) } case .mocking: - return createArticleSuccess.mock() + return createArticleError.mock() } } } @@ -16339,6 +17429,2090 @@ extension Selection where TypeLock == Never, Type == Never { typealias CreateArticleResult = Selection } +extension Unions { + struct CreateArticleSavingRequestResult { + let __typename: TypeName + let articleSavingRequest: [String: Objects.ArticleSavingRequest] + let errorCodes: [String: [Enums.CreateArticleSavingRequestErrorCode]] + + enum TypeName: String, Codable { + case createArticleSavingRequestError = "CreateArticleSavingRequestError" + case createArticleSavingRequestSuccess = "CreateArticleSavingRequestSuccess" + } + } +} + +extension Unions.CreateArticleSavingRequestResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "articleSavingRequest": + if let value = try container.decode(Objects.ArticleSavingRequest?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "errorCodes": + if let value = try container.decode([Enums.CreateArticleSavingRequestErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + articleSavingRequest = map["articleSavingRequest"] + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Unions.CreateArticleSavingRequestResult { + func on(createArticleSavingRequestError: Selection, createArticleSavingRequestSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "CreateArticleSavingRequestError", selection: createArticleSavingRequestError.selection), GraphQLField.fragment(type: "CreateArticleSavingRequestSuccess", selection: createArticleSavingRequestSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .createArticleSavingRequestError: + let data = Objects.CreateArticleSavingRequestError(errorCodes: data.errorCodes) + return try createArticleSavingRequestError.decode(data: data) + case .createArticleSavingRequestSuccess: + let data = Objects.CreateArticleSavingRequestSuccess(articleSavingRequest: data.articleSavingRequest) + return try createArticleSavingRequestSuccess.decode(data: data) + } + case .mocking: + return createArticleSavingRequestError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateArticleSavingRequestResult = Selection +} + +extension Unions { + struct CreateHighlightReplyResult { + let __typename: TypeName + let errorCodes: [String: [Enums.CreateHighlightReplyErrorCode]] + let highlightReply: [String: Objects.HighlightReply] + + enum TypeName: String, Codable { + case createHighlightReplyError = "CreateHighlightReplyError" + case createHighlightReplySuccess = "CreateHighlightReplySuccess" + } + } +} + +extension Unions.CreateHighlightReplyResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.CreateHighlightReplyErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "highlightReply": + if let value = try container.decode(Objects.HighlightReply?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + highlightReply = map["highlightReply"] + } +} + +extension Fields where TypeLock == Unions.CreateHighlightReplyResult { + func on(createHighlightReplyError: Selection, createHighlightReplySuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "CreateHighlightReplyError", selection: createHighlightReplyError.selection), GraphQLField.fragment(type: "CreateHighlightReplySuccess", selection: createHighlightReplySuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .createHighlightReplyError: + let data = Objects.CreateHighlightReplyError(errorCodes: data.errorCodes) + return try createHighlightReplyError.decode(data: data) + case .createHighlightReplySuccess: + let data = Objects.CreateHighlightReplySuccess(highlightReply: data.highlightReply) + return try createHighlightReplySuccess.decode(data: data) + } + case .mocking: + return createHighlightReplyError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateHighlightReplyResult = Selection +} + +extension Unions { + struct CreateHighlightResult { + let __typename: TypeName + let errorCodes: [String: [Enums.CreateHighlightErrorCode]] + let highlight: [String: Objects.Highlight] + + enum TypeName: String, Codable { + case createHighlightError = "CreateHighlightError" + case createHighlightSuccess = "CreateHighlightSuccess" + } + } +} + +extension Unions.CreateHighlightResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.CreateHighlightErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "highlight": + if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + highlight = map["highlight"] + } +} + +extension Fields where TypeLock == Unions.CreateHighlightResult { + func on(createHighlightError: Selection, createHighlightSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "CreateHighlightError", selection: createHighlightError.selection), GraphQLField.fragment(type: "CreateHighlightSuccess", selection: createHighlightSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .createHighlightError: + let data = Objects.CreateHighlightError(errorCodes: data.errorCodes) + return try createHighlightError.decode(data: data) + case .createHighlightSuccess: + let data = Objects.CreateHighlightSuccess(highlight: data.highlight) + return try createHighlightSuccess.decode(data: data) + } + case .mocking: + return createHighlightError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateHighlightResult = Selection +} + +extension Unions { + struct CreateLabelResult { + let __typename: TypeName + let errorCodes: [String: [Enums.CreateLabelErrorCode]] + let label: [String: Objects.Label] + + enum TypeName: String, Codable { + case createLabelError = "CreateLabelError" + case createLabelSuccess = "CreateLabelSuccess" + } + } +} + +extension Unions.CreateLabelResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.CreateLabelErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "label": + if let value = try container.decode(Objects.Label?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + label = map["label"] + } +} + +extension Fields where TypeLock == Unions.CreateLabelResult { + func on(createLabelError: Selection, createLabelSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "CreateLabelError", selection: createLabelError.selection), GraphQLField.fragment(type: "CreateLabelSuccess", selection: createLabelSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .createLabelError: + let data = Objects.CreateLabelError(errorCodes: data.errorCodes) + return try createLabelError.decode(data: data) + case .createLabelSuccess: + let data = Objects.CreateLabelSuccess(label: data.label) + return try createLabelSuccess.decode(data: data) + } + case .mocking: + return createLabelError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateLabelResult = Selection +} + +extension Unions { + struct CreateNewsletterEmailResult { + let __typename: TypeName + let errorCodes: [String: [Enums.CreateNewsletterEmailErrorCode]] + let newsletterEmail: [String: Objects.NewsletterEmail] + + enum TypeName: String, Codable { + case createNewsletterEmailError = "CreateNewsletterEmailError" + case createNewsletterEmailSuccess = "CreateNewsletterEmailSuccess" + } + } +} + +extension Unions.CreateNewsletterEmailResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.CreateNewsletterEmailErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "newsletterEmail": + if let value = try container.decode(Objects.NewsletterEmail?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + newsletterEmail = map["newsletterEmail"] + } +} + +extension Fields where TypeLock == Unions.CreateNewsletterEmailResult { + func on(createNewsletterEmailError: Selection, createNewsletterEmailSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "CreateNewsletterEmailError", selection: createNewsletterEmailError.selection), GraphQLField.fragment(type: "CreateNewsletterEmailSuccess", selection: createNewsletterEmailSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .createNewsletterEmailError: + let data = Objects.CreateNewsletterEmailError(errorCodes: data.errorCodes) + return try createNewsletterEmailError.decode(data: data) + case .createNewsletterEmailSuccess: + let data = Objects.CreateNewsletterEmailSuccess(newsletterEmail: data.newsletterEmail) + return try createNewsletterEmailSuccess.decode(data: data) + } + case .mocking: + return createNewsletterEmailError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateNewsletterEmailResult = Selection +} + +extension Unions { + struct CreateReactionResult { + let __typename: TypeName + let errorCodes: [String: [Enums.CreateReactionErrorCode]] + let reaction: [String: Objects.Reaction] + + enum TypeName: String, Codable { + case createReactionError = "CreateReactionError" + case createReactionSuccess = "CreateReactionSuccess" + } + } +} + +extension Unions.CreateReactionResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.CreateReactionErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "reaction": + if let value = try container.decode(Objects.Reaction?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + reaction = map["reaction"] + } +} + +extension Fields where TypeLock == Unions.CreateReactionResult { + func on(createReactionError: Selection, createReactionSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "CreateReactionError", selection: createReactionError.selection), GraphQLField.fragment(type: "CreateReactionSuccess", selection: createReactionSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .createReactionError: + let data = Objects.CreateReactionError(errorCodes: data.errorCodes) + return try createReactionError.decode(data: data) + case .createReactionSuccess: + let data = Objects.CreateReactionSuccess(reaction: data.reaction) + return try createReactionSuccess.decode(data: data) + } + case .mocking: + return createReactionError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateReactionResult = Selection +} + +extension Unions { + struct CreateReminderResult { + let __typename: TypeName + let errorCodes: [String: [Enums.CreateReminderErrorCode]] + let reminder: [String: Objects.Reminder] + + enum TypeName: String, Codable { + case createReminderError = "CreateReminderError" + case createReminderSuccess = "CreateReminderSuccess" + } + } +} + +extension Unions.CreateReminderResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.CreateReminderErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "reminder": + if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + reminder = map["reminder"] + } +} + +extension Fields where TypeLock == Unions.CreateReminderResult { + func on(createReminderError: Selection, createReminderSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "CreateReminderError", selection: createReminderError.selection), GraphQLField.fragment(type: "CreateReminderSuccess", selection: createReminderSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .createReminderError: + let data = Objects.CreateReminderError(errorCodes: data.errorCodes) + return try createReminderError.decode(data: data) + case .createReminderSuccess: + let data = Objects.CreateReminderSuccess(reminder: data.reminder) + return try createReminderSuccess.decode(data: data) + } + case .mocking: + return createReminderError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias CreateReminderResult = Selection +} + +extension Unions { + struct DeleteHighlightReplyResult { + let __typename: TypeName + let errorCodes: [String: [Enums.DeleteHighlightReplyErrorCode]] + let highlightReply: [String: Objects.HighlightReply] + + enum TypeName: String, Codable { + case deleteHighlightReplyError = "DeleteHighlightReplyError" + case deleteHighlightReplySuccess = "DeleteHighlightReplySuccess" + } + } +} + +extension Unions.DeleteHighlightReplyResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteHighlightReplyErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "highlightReply": + if let value = try container.decode(Objects.HighlightReply?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + highlightReply = map["highlightReply"] + } +} + +extension Fields where TypeLock == Unions.DeleteHighlightReplyResult { + func on(deleteHighlightReplyError: Selection, deleteHighlightReplySuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "DeleteHighlightReplyError", selection: deleteHighlightReplyError.selection), GraphQLField.fragment(type: "DeleteHighlightReplySuccess", selection: deleteHighlightReplySuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .deleteHighlightReplyError: + let data = Objects.DeleteHighlightReplyError(errorCodes: data.errorCodes) + return try deleteHighlightReplyError.decode(data: data) + case .deleteHighlightReplySuccess: + let data = Objects.DeleteHighlightReplySuccess(highlightReply: data.highlightReply) + return try deleteHighlightReplySuccess.decode(data: data) + } + case .mocking: + return deleteHighlightReplyError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteHighlightReplyResult = Selection +} + +extension Unions { + struct DeleteHighlightResult { + let __typename: TypeName + let errorCodes: [String: [Enums.DeleteHighlightErrorCode]] + let highlight: [String: Objects.Highlight] + + enum TypeName: String, Codable { + case deleteHighlightError = "DeleteHighlightError" + case deleteHighlightSuccess = "DeleteHighlightSuccess" + } + } +} + +extension Unions.DeleteHighlightResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteHighlightErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "highlight": + if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + highlight = map["highlight"] + } +} + +extension Fields where TypeLock == Unions.DeleteHighlightResult { + func on(deleteHighlightError: Selection, deleteHighlightSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "DeleteHighlightError", selection: deleteHighlightError.selection), GraphQLField.fragment(type: "DeleteHighlightSuccess", selection: deleteHighlightSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .deleteHighlightError: + let data = Objects.DeleteHighlightError(errorCodes: data.errorCodes) + return try deleteHighlightError.decode(data: data) + case .deleteHighlightSuccess: + let data = Objects.DeleteHighlightSuccess(highlight: data.highlight) + return try deleteHighlightSuccess.decode(data: data) + } + case .mocking: + return deleteHighlightError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteHighlightResult = Selection +} + +extension Unions { + struct DeleteLabelResult { + let __typename: TypeName + let errorCodes: [String: [Enums.DeleteLabelErrorCode]] + let label: [String: Objects.Label] + + enum TypeName: String, Codable { + case deleteLabelError = "DeleteLabelError" + case deleteLabelSuccess = "DeleteLabelSuccess" + } + } +} + +extension Unions.DeleteLabelResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteLabelErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "label": + if let value = try container.decode(Objects.Label?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + label = map["label"] + } +} + +extension Fields where TypeLock == Unions.DeleteLabelResult { + func on(deleteLabelError: Selection, deleteLabelSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "DeleteLabelError", selection: deleteLabelError.selection), GraphQLField.fragment(type: "DeleteLabelSuccess", selection: deleteLabelSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .deleteLabelError: + let data = Objects.DeleteLabelError(errorCodes: data.errorCodes) + return try deleteLabelError.decode(data: data) + case .deleteLabelSuccess: + let data = Objects.DeleteLabelSuccess(label: data.label) + return try deleteLabelSuccess.decode(data: data) + } + case .mocking: + return deleteLabelError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteLabelResult = Selection +} + +extension Unions { + struct DeleteNewsletterEmailResult { + let __typename: TypeName + let errorCodes: [String: [Enums.DeleteNewsletterEmailErrorCode]] + let newsletterEmail: [String: Objects.NewsletterEmail] + + enum TypeName: String, Codable { + case deleteNewsletterEmailError = "DeleteNewsletterEmailError" + case deleteNewsletterEmailSuccess = "DeleteNewsletterEmailSuccess" + } + } +} + +extension Unions.DeleteNewsletterEmailResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteNewsletterEmailErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "newsletterEmail": + if let value = try container.decode(Objects.NewsletterEmail?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + newsletterEmail = map["newsletterEmail"] + } +} + +extension Fields where TypeLock == Unions.DeleteNewsletterEmailResult { + func on(deleteNewsletterEmailError: Selection, deleteNewsletterEmailSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "DeleteNewsletterEmailError", selection: deleteNewsletterEmailError.selection), GraphQLField.fragment(type: "DeleteNewsletterEmailSuccess", selection: deleteNewsletterEmailSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .deleteNewsletterEmailError: + let data = Objects.DeleteNewsletterEmailError(errorCodes: data.errorCodes) + return try deleteNewsletterEmailError.decode(data: data) + case .deleteNewsletterEmailSuccess: + let data = Objects.DeleteNewsletterEmailSuccess(newsletterEmail: data.newsletterEmail) + return try deleteNewsletterEmailSuccess.decode(data: data) + } + case .mocking: + return deleteNewsletterEmailError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteNewsletterEmailResult = Selection +} + +extension Unions { + struct DeleteReactionResult { + let __typename: TypeName + let errorCodes: [String: [Enums.DeleteReactionErrorCode]] + let reaction: [String: Objects.Reaction] + + enum TypeName: String, Codable { + case deleteReactionError = "DeleteReactionError" + case deleteReactionSuccess = "DeleteReactionSuccess" + } + } +} + +extension Unions.DeleteReactionResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteReactionErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "reaction": + if let value = try container.decode(Objects.Reaction?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + reaction = map["reaction"] + } +} + +extension Fields where TypeLock == Unions.DeleteReactionResult { + func on(deleteReactionError: Selection, deleteReactionSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "DeleteReactionError", selection: deleteReactionError.selection), GraphQLField.fragment(type: "DeleteReactionSuccess", selection: deleteReactionSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .deleteReactionError: + let data = Objects.DeleteReactionError(errorCodes: data.errorCodes) + return try deleteReactionError.decode(data: data) + case .deleteReactionSuccess: + let data = Objects.DeleteReactionSuccess(reaction: data.reaction) + return try deleteReactionSuccess.decode(data: data) + } + case .mocking: + return deleteReactionError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteReactionResult = Selection +} + +extension Unions { + struct DeleteReminderResult { + let __typename: TypeName + let errorCodes: [String: [Enums.DeleteReminderErrorCode]] + let reminder: [String: Objects.Reminder] + + enum TypeName: String, Codable { + case deleteReminderError = "DeleteReminderError" + case deleteReminderSuccess = "DeleteReminderSuccess" + } + } +} + +extension Unions.DeleteReminderResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteReminderErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "reminder": + if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + reminder = map["reminder"] + } +} + +extension Fields where TypeLock == Unions.DeleteReminderResult { + func on(deleteReminderError: Selection, deleteReminderSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "DeleteReminderError", selection: deleteReminderError.selection), GraphQLField.fragment(type: "DeleteReminderSuccess", selection: deleteReminderSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .deleteReminderError: + let data = Objects.DeleteReminderError(errorCodes: data.errorCodes) + return try deleteReminderError.decode(data: data) + case .deleteReminderSuccess: + let data = Objects.DeleteReminderSuccess(reminder: data.reminder) + return try deleteReminderSuccess.decode(data: data) + } + case .mocking: + return deleteReminderError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteReminderResult = Selection +} + +extension Unions { + struct DeleteWebhookResult { + let __typename: TypeName + let errorCodes: [String: [Enums.DeleteWebhookErrorCode]] + let webhook: [String: Objects.Webhook] + + enum TypeName: String, Codable { + case deleteWebhookError = "DeleteWebhookError" + case deleteWebhookSuccess = "DeleteWebhookSuccess" + } + } +} + +extension Unions.DeleteWebhookResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.DeleteWebhookErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "webhook": + if let value = try container.decode(Objects.Webhook?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + webhook = map["webhook"] + } +} + +extension Fields where TypeLock == Unions.DeleteWebhookResult { + func on(deleteWebhookError: Selection, deleteWebhookSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "DeleteWebhookError", selection: deleteWebhookError.selection), GraphQLField.fragment(type: "DeleteWebhookSuccess", selection: deleteWebhookSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .deleteWebhookError: + let data = Objects.DeleteWebhookError(errorCodes: data.errorCodes) + return try deleteWebhookError.decode(data: data) + case .deleteWebhookSuccess: + let data = Objects.DeleteWebhookSuccess(webhook: data.webhook) + return try deleteWebhookSuccess.decode(data: data) + } + case .mocking: + return deleteWebhookError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias DeleteWebhookResult = Selection +} + +extension Unions { + struct FeedArticlesResult { + let __typename: TypeName + let edges: [String: [Objects.FeedArticleEdge]] + let errorCodes: [String: [Enums.FeedArticlesErrorCode]] + let pageInfo: [String: Objects.PageInfo] + + enum TypeName: String, Codable { + case feedArticlesError = "FeedArticlesError" + case feedArticlesSuccess = "FeedArticlesSuccess" + } + } +} + +extension Unions.FeedArticlesResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "edges": + if let value = try container.decode([Objects.FeedArticleEdge]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "errorCodes": + if let value = try container.decode([Enums.FeedArticlesErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "pageInfo": + if let value = try container.decode(Objects.PageInfo?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + edges = map["edges"] + errorCodes = map["errorCodes"] + pageInfo = map["pageInfo"] + } +} + +extension Fields where TypeLock == Unions.FeedArticlesResult { + func on(feedArticlesError: Selection, feedArticlesSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "FeedArticlesError", selection: feedArticlesError.selection), GraphQLField.fragment(type: "FeedArticlesSuccess", selection: feedArticlesSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .feedArticlesError: + let data = Objects.FeedArticlesError(errorCodes: data.errorCodes) + return try feedArticlesError.decode(data: data) + case .feedArticlesSuccess: + let data = Objects.FeedArticlesSuccess(edges: data.edges, pageInfo: data.pageInfo) + return try feedArticlesSuccess.decode(data: data) + } + case .mocking: + return feedArticlesError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias FeedArticlesResult = Selection +} + +extension Unions { + struct GenerateApiKeyResult { + let __typename: TypeName + let apiKey: [String: Objects.ApiKey] + let errorCodes: [String: [Enums.GenerateApiKeyErrorCode]] + + enum TypeName: String, Codable { + case generateApiKeyError = "GenerateApiKeyError" + case generateApiKeySuccess = "GenerateApiKeySuccess" + } + } +} + +extension Unions.GenerateApiKeyResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "apiKey": + if let value = try container.decode(Objects.ApiKey?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "errorCodes": + if let value = try container.decode([Enums.GenerateApiKeyErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + apiKey = map["apiKey"] + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Unions.GenerateApiKeyResult { + func on(generateApiKeyError: Selection, generateApiKeySuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "GenerateApiKeyError", selection: generateApiKeyError.selection), GraphQLField.fragment(type: "GenerateApiKeySuccess", selection: generateApiKeySuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .generateApiKeyError: + let data = Objects.GenerateApiKeyError(errorCodes: data.errorCodes) + return try generateApiKeyError.decode(data: data) + case .generateApiKeySuccess: + let data = Objects.GenerateApiKeySuccess(apiKey: data.apiKey) + return try generateApiKeySuccess.decode(data: data) + } + case .mocking: + return generateApiKeyError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias GenerateApiKeyResult = Selection +} + +extension Unions { + struct GetFollowersResult { + let __typename: TypeName + let errorCodes: [String: [Enums.GetFollowersErrorCode]] + let followers: [String: [Objects.User]] + + enum TypeName: String, Codable { + case getFollowersError = "GetFollowersError" + case getFollowersSuccess = "GetFollowersSuccess" + } + } +} + +extension Unions.GetFollowersResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.GetFollowersErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "followers": + if let value = try container.decode([Objects.User]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + followers = map["followers"] + } +} + +extension Fields where TypeLock == Unions.GetFollowersResult { + func on(getFollowersError: Selection, getFollowersSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "GetFollowersError", selection: getFollowersError.selection), GraphQLField.fragment(type: "GetFollowersSuccess", selection: getFollowersSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .getFollowersError: + let data = Objects.GetFollowersError(errorCodes: data.errorCodes) + return try getFollowersError.decode(data: data) + case .getFollowersSuccess: + let data = Objects.GetFollowersSuccess(followers: data.followers) + return try getFollowersSuccess.decode(data: data) + } + case .mocking: + return getFollowersError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias GetFollowersResult = Selection +} + +extension Unions { + struct GetFollowingResult { + let __typename: TypeName + let errorCodes: [String: [Enums.GetFollowingErrorCode]] + let following: [String: [Objects.User]] + + enum TypeName: String, Codable { + case getFollowingError = "GetFollowingError" + case getFollowingSuccess = "GetFollowingSuccess" + } + } +} + +extension Unions.GetFollowingResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.GetFollowingErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "following": + if let value = try container.decode([Objects.User]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + following = map["following"] + } +} + +extension Fields where TypeLock == Unions.GetFollowingResult { + func on(getFollowingError: Selection, getFollowingSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "GetFollowingError", selection: getFollowingError.selection), GraphQLField.fragment(type: "GetFollowingSuccess", selection: getFollowingSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .getFollowingError: + let data = Objects.GetFollowingError(errorCodes: data.errorCodes) + return try getFollowingError.decode(data: data) + case .getFollowingSuccess: + let data = Objects.GetFollowingSuccess(following: data.following) + return try getFollowingSuccess.decode(data: data) + } + case .mocking: + return getFollowingError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias GetFollowingResult = Selection +} + +extension Unions { + struct GetUserPersonalizationResult { + let __typename: TypeName + let errorCodes: [String: [Enums.GetUserPersonalizationErrorCode]] + let userPersonalization: [String: Objects.UserPersonalization] + + enum TypeName: String, Codable { + case getUserPersonalizationError = "GetUserPersonalizationError" + case getUserPersonalizationSuccess = "GetUserPersonalizationSuccess" + } + } +} + +extension Unions.GetUserPersonalizationResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.GetUserPersonalizationErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "userPersonalization": + if let value = try container.decode(Objects.UserPersonalization?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + userPersonalization = map["userPersonalization"] + } +} + +extension Fields where TypeLock == Unions.GetUserPersonalizationResult { + func on(getUserPersonalizationError: Selection, getUserPersonalizationSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "GetUserPersonalizationError", selection: getUserPersonalizationError.selection), GraphQLField.fragment(type: "GetUserPersonalizationSuccess", selection: getUserPersonalizationSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .getUserPersonalizationError: + let data = Objects.GetUserPersonalizationError(errorCodes: data.errorCodes) + return try getUserPersonalizationError.decode(data: data) + case .getUserPersonalizationSuccess: + let data = Objects.GetUserPersonalizationSuccess(userPersonalization: data.userPersonalization) + return try getUserPersonalizationSuccess.decode(data: data) + } + case .mocking: + return getUserPersonalizationError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias GetUserPersonalizationResult = Selection +} + +extension Unions { + struct GoogleSignupResult { + let __typename: TypeName + let errorCodes: [String: [Enums.SignupErrorCode?]] + let me: [String: Objects.User] + + enum TypeName: String, Codable { + case googleSignupError = "GoogleSignupError" + case googleSignupSuccess = "GoogleSignupSuccess" + } + } +} + +extension Unions.GoogleSignupResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SignupErrorCode?]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "me": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + me = map["me"] + } +} + +extension Fields where TypeLock == Unions.GoogleSignupResult { + func on(googleSignupError: Selection, googleSignupSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "GoogleSignupError", selection: googleSignupError.selection), GraphQLField.fragment(type: "GoogleSignupSuccess", selection: googleSignupSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .googleSignupError: + let data = Objects.GoogleSignupError(errorCodes: data.errorCodes) + return try googleSignupError.decode(data: data) + case .googleSignupSuccess: + let data = Objects.GoogleSignupSuccess(me: data.me) + return try googleSignupSuccess.decode(data: data) + } + case .mocking: + return googleSignupError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias GoogleSignupResult = Selection +} + +extension Unions { + struct LabelsResult { + let __typename: TypeName + let errorCodes: [String: [Enums.LabelsErrorCode]] + let labels: [String: [Objects.Label]] + + enum TypeName: String, Codable { + case labelsError = "LabelsError" + case labelsSuccess = "LabelsSuccess" + } + } +} + +extension Unions.LabelsResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.LabelsErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "labels": + if let value = try container.decode([Objects.Label]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + labels = map["labels"] + } +} + +extension Fields where TypeLock == Unions.LabelsResult { + func on(labelsError: Selection, labelsSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "LabelsError", selection: labelsError.selection), GraphQLField.fragment(type: "LabelsSuccess", selection: labelsSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .labelsError: + let data = Objects.LabelsError(errorCodes: data.errorCodes) + return try labelsError.decode(data: data) + case .labelsSuccess: + let data = Objects.LabelsSuccess(labels: data.labels) + return try labelsSuccess.decode(data: data) + } + case .mocking: + return labelsError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias LabelsResult = Selection +} + +extension Unions { + struct LoginResult { + let __typename: TypeName + let errorCodes: [String: [Enums.LoginErrorCode]] + let me: [String: Objects.User] + + enum TypeName: String, Codable { + case loginError = "LoginError" + case loginSuccess = "LoginSuccess" + } + } +} + +extension Unions.LoginResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.LoginErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "me": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + me = map["me"] + } +} + +extension Fields where TypeLock == Unions.LoginResult { + func on(loginError: Selection, loginSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "LoginError", selection: loginError.selection), GraphQLField.fragment(type: "LoginSuccess", selection: loginSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .loginError: + let data = Objects.LoginError(errorCodes: data.errorCodes) + return try loginError.decode(data: data) + case .loginSuccess: + let data = Objects.LoginSuccess(me: data.me) + return try loginSuccess.decode(data: data) + } + case .mocking: + return loginError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias LoginResult = Selection +} + +extension Unions { + struct LogOutResult { + let __typename: TypeName + let errorCodes: [String: [Enums.LogOutErrorCode]] + let message: [String: String] + + enum TypeName: String, Codable { + case logOutError = "LogOutError" + case logOutSuccess = "LogOutSuccess" + } + } +} + +extension Unions.LogOutResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.LogOutErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "message": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + message = map["message"] + } +} + +extension Fields where TypeLock == Unions.LogOutResult { + func on(logOutError: Selection, logOutSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "LogOutError", selection: logOutError.selection), GraphQLField.fragment(type: "LogOutSuccess", selection: logOutSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .logOutError: + let data = Objects.LogOutError(errorCodes: data.errorCodes) + return try logOutError.decode(data: data) + case .logOutSuccess: + let data = Objects.LogOutSuccess(message: data.message) + return try logOutSuccess.decode(data: data) + } + case .mocking: + return logOutError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias LogOutResult = Selection +} + +extension Unions { + struct MergeHighlightResult { + let __typename: TypeName + let errorCodes: [String: [Enums.MergeHighlightErrorCode]] + let highlight: [String: Objects.Highlight] + let overlapHighlightIdList: [String: [String]] + + enum TypeName: String, Codable { + case mergeHighlightError = "MergeHighlightError" + case mergeHighlightSuccess = "MergeHighlightSuccess" + } + } +} + +extension Unions.MergeHighlightResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.MergeHighlightErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "highlight": + if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "overlapHighlightIdList": + if let value = try container.decode([String]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + highlight = map["highlight"] + overlapHighlightIdList = map["overlapHighlightIdList"] + } +} + +extension Fields where TypeLock == Unions.MergeHighlightResult { + func on(mergeHighlightError: Selection, mergeHighlightSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "MergeHighlightError", selection: mergeHighlightError.selection), GraphQLField.fragment(type: "MergeHighlightSuccess", selection: mergeHighlightSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .mergeHighlightError: + let data = Objects.MergeHighlightError(errorCodes: data.errorCodes) + return try mergeHighlightError.decode(data: data) + case .mergeHighlightSuccess: + let data = Objects.MergeHighlightSuccess(highlight: data.highlight, overlapHighlightIdList: data.overlapHighlightIdList) + return try mergeHighlightSuccess.decode(data: data) + } + case .mocking: + return mergeHighlightError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias MergeHighlightResult = Selection +} + +extension Unions { + struct NewsletterEmailsResult { + let __typename: TypeName + let errorCodes: [String: [Enums.NewsletterEmailsErrorCode]] + let newsletterEmails: [String: [Objects.NewsletterEmail]] + + enum TypeName: String, Codable { + case newsletterEmailsError = "NewsletterEmailsError" + case newsletterEmailsSuccess = "NewsletterEmailsSuccess" + } + } +} + +extension Unions.NewsletterEmailsResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.NewsletterEmailsErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "newsletterEmails": + if let value = try container.decode([Objects.NewsletterEmail]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + newsletterEmails = map["newsletterEmails"] + } +} + +extension Fields where TypeLock == Unions.NewsletterEmailsResult { + func on(newsletterEmailsError: Selection, newsletterEmailsSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "NewsletterEmailsError", selection: newsletterEmailsError.selection), GraphQLField.fragment(type: "NewsletterEmailsSuccess", selection: newsletterEmailsSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .newsletterEmailsError: + let data = Objects.NewsletterEmailsError(errorCodes: data.errorCodes) + return try newsletterEmailsError.decode(data: data) + case .newsletterEmailsSuccess: + let data = Objects.NewsletterEmailsSuccess(newsletterEmails: data.newsletterEmails) + return try newsletterEmailsSuccess.decode(data: data) + } + case .mocking: + return newsletterEmailsError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias NewsletterEmailsResult = Selection +} + +extension Unions { + struct ReminderResult { + let __typename: TypeName + let errorCodes: [String: [Enums.ReminderErrorCode]] + let reminder: [String: Objects.Reminder] + + enum TypeName: String, Codable { + case reminderError = "ReminderError" + case reminderSuccess = "ReminderSuccess" + } + } +} + +extension Unions.ReminderResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.ReminderErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "reminder": + if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + reminder = map["reminder"] + } +} + +extension Fields where TypeLock == Unions.ReminderResult { + func on(reminderError: Selection, reminderSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "ReminderError", selection: reminderError.selection), GraphQLField.fragment(type: "ReminderSuccess", selection: reminderSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .reminderError: + let data = Objects.ReminderError(errorCodes: data.errorCodes) + return try reminderError.decode(data: data) + case .reminderSuccess: + let data = Objects.ReminderSuccess(reminder: data.reminder) + return try reminderSuccess.decode(data: data) + } + case .mocking: + return reminderError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias ReminderResult = Selection +} + +extension Unions { + struct RevokeApiKeyResult { + let __typename: TypeName + let apiKey: [String: Objects.ApiKey] + let errorCodes: [String: [Enums.RevokeApiKeyErrorCode]] + + enum TypeName: String, Codable { + case revokeApiKeyError = "RevokeApiKeyError" + case revokeApiKeySuccess = "RevokeApiKeySuccess" + } + } +} + +extension Unions.RevokeApiKeyResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "apiKey": + if let value = try container.decode(Objects.ApiKey?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "errorCodes": + if let value = try container.decode([Enums.RevokeApiKeyErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + apiKey = map["apiKey"] + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Unions.RevokeApiKeyResult { + func on(revokeApiKeyError: Selection, revokeApiKeySuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "RevokeApiKeyError", selection: revokeApiKeyError.selection), GraphQLField.fragment(type: "RevokeApiKeySuccess", selection: revokeApiKeySuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .revokeApiKeyError: + let data = Objects.RevokeApiKeyError(errorCodes: data.errorCodes) + return try revokeApiKeyError.decode(data: data) + case .revokeApiKeySuccess: + let data = Objects.RevokeApiKeySuccess(apiKey: data.apiKey) + return try revokeApiKeySuccess.decode(data: data) + } + case .mocking: + return revokeApiKeyError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias RevokeApiKeyResult = Selection +} + +extension Unions { + struct SaveArticleReadingProgressResult { + let __typename: TypeName + let errorCodes: [String: [Enums.SaveArticleReadingProgressErrorCode]] + let updatedArticle: [String: Objects.Article] + + enum TypeName: String, Codable { + case saveArticleReadingProgressError = "SaveArticleReadingProgressError" + case saveArticleReadingProgressSuccess = "SaveArticleReadingProgressSuccess" + } + } +} + +extension Unions.SaveArticleReadingProgressResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SaveArticleReadingProgressErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updatedArticle": + if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + updatedArticle = map["updatedArticle"] + } +} + +extension Fields where TypeLock == Unions.SaveArticleReadingProgressResult { + func on(saveArticleReadingProgressError: Selection, saveArticleReadingProgressSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SaveArticleReadingProgressError", selection: saveArticleReadingProgressError.selection), GraphQLField.fragment(type: "SaveArticleReadingProgressSuccess", selection: saveArticleReadingProgressSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .saveArticleReadingProgressError: + let data = Objects.SaveArticleReadingProgressError(errorCodes: data.errorCodes) + return try saveArticleReadingProgressError.decode(data: data) + case .saveArticleReadingProgressSuccess: + let data = Objects.SaveArticleReadingProgressSuccess(updatedArticle: data.updatedArticle) + return try saveArticleReadingProgressSuccess.decode(data: data) + } + case .mocking: + return saveArticleReadingProgressError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SaveArticleReadingProgressResult = Selection +} + extension Unions { struct SaveResult { let __typename: TypeName @@ -16348,8 +19522,8 @@ extension Unions { let url: [String: String] enum TypeName: String, Codable { - case saveSuccess = "SaveSuccess" case saveError = "SaveError" + case saveSuccess = "SaveSuccess" } } } @@ -16402,21 +19576,21 @@ extension Unions.SaveResult: Decodable { } extension Fields where TypeLock == Unions.SaveResult { - func on(saveSuccess: Selection, saveError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SaveSuccess", selection: saveSuccess.selection), GraphQLField.fragment(type: "SaveError", selection: saveError.selection)]) + func on(saveError: Selection, saveSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SaveError", selection: saveError.selection), GraphQLField.fragment(type: "SaveSuccess", selection: saveSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .saveSuccess: - let data = Objects.SaveSuccess(clientRequestId: data.clientRequestId, url: data.url) - return try saveSuccess.decode(data: data) case .saveError: let data = Objects.SaveError(errorCodes: data.errorCodes, message: data.message) return try saveError.decode(data: data) + case .saveSuccess: + let data = Objects.SaveSuccess(clientRequestId: data.clientRequestId, url: data.url) + return try saveSuccess.decode(data: data) } case .mocking: - return saveSuccess.mock() + return saveError.mock() } } } @@ -16426,19 +19600,20 @@ extension Selection where TypeLock == Never, Type == Never { } extension Unions { - struct UpdatePageResult { + struct SearchResult { let __typename: TypeName - let errorCodes: [String: [Enums.UpdatePageErrorCode]] - let updatedPage: [String: Objects.Page] + let edges: [String: [Objects.SearchItemEdge]] + let errorCodes: [String: [Enums.SearchErrorCode]] + let pageInfo: [String: Objects.PageInfo] enum TypeName: String, Codable { - case updatePageSuccess = "UpdatePageSuccess" - case updatePageError = "UpdatePageError" + case searchError = "SearchError" + case searchSuccess = "SearchSuccess" } } } -extension Unions.UpdatePageResult: Decodable { +extension Unions.SearchResult: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -16450,12 +19625,16 @@ extension Unions.UpdatePageResult: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdatePageErrorCode]?.self, forKey: codingKey) { + case "edges": + if let value = try container.decode([Objects.SearchItemEdge]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "updatedPage": - if let value = try container.decode(Objects.Page?.self, forKey: codingKey) { + case "errorCodes": + if let value = try container.decode([Enums.SearchErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "pageInfo": + if let value = try container.decode(Objects.PageInfo?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -16470,181 +19649,34 @@ extension Unions.UpdatePageResult: Decodable { __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + edges = map["edges"] errorCodes = map["errorCodes"] - updatedPage = map["updatedPage"] + pageInfo = map["pageInfo"] } } -extension Fields where TypeLock == Unions.UpdatePageResult { - func on(updatePageSuccess: Selection, updatePageError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UpdatePageSuccess", selection: updatePageSuccess.selection), GraphQLField.fragment(type: "UpdatePageError", selection: updatePageError.selection)]) +extension Fields where TypeLock == Unions.SearchResult { + func on(searchError: Selection, searchSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SearchError", selection: searchError.selection), GraphQLField.fragment(type: "SearchSuccess", selection: searchSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .updatePageSuccess: - let data = Objects.UpdatePageSuccess(updatedPage: data.updatedPage) - return try updatePageSuccess.decode(data: data) - case .updatePageError: - let data = Objects.UpdatePageError(errorCodes: data.errorCodes) - return try updatePageError.decode(data: data) + case .searchError: + let data = Objects.SearchError(errorCodes: data.errorCodes) + return try searchError.decode(data: data) + case .searchSuccess: + let data = Objects.SearchSuccess(edges: data.edges, pageInfo: data.pageInfo) + return try searchSuccess.decode(data: data) } case .mocking: - return updatePageSuccess.mock() + return searchError.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias UpdatePageResult = Selection -} - -extension Unions { - struct SetFollowResult { - let __typename: TypeName - let errorCodes: [String: [Enums.SetFollowErrorCode]] - let updatedUser: [String: Objects.User] - - enum TypeName: String, Codable { - case setFollowSuccess = "SetFollowSuccess" - case setFollowError = "SetFollowError" - } - } -} - -extension Unions.SetFollowResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SetFollowErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updatedUser": - if let value = try container.decode(Objects.User?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - updatedUser = map["updatedUser"] - } -} - -extension Fields where TypeLock == Unions.SetFollowResult { - func on(setFollowSuccess: Selection, setFollowError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SetFollowSuccess", selection: setFollowSuccess.selection), GraphQLField.fragment(type: "SetFollowError", selection: setFollowError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .setFollowSuccess: - let data = Objects.SetFollowSuccess(updatedUser: data.updatedUser) - return try setFollowSuccess.decode(data: data) - case .setFollowError: - let data = Objects.SetFollowError(errorCodes: data.errorCodes) - return try setFollowError.decode(data: data) - } - case .mocking: - return setFollowSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetFollowResult = Selection -} - -extension Unions { - struct SaveArticleReadingProgressResult { - let __typename: TypeName - let errorCodes: [String: [Enums.SaveArticleReadingProgressErrorCode]] - let updatedArticle: [String: Objects.Article] - - enum TypeName: String, Codable { - case saveArticleReadingProgressSuccess = "SaveArticleReadingProgressSuccess" - case saveArticleReadingProgressError = "SaveArticleReadingProgressError" - } - } -} - -extension Unions.SaveArticleReadingProgressResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SaveArticleReadingProgressErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updatedArticle": - if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - updatedArticle = map["updatedArticle"] - } -} - -extension Fields where TypeLock == Unions.SaveArticleReadingProgressResult { - func on(saveArticleReadingProgressSuccess: Selection, saveArticleReadingProgressError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SaveArticleReadingProgressSuccess", selection: saveArticleReadingProgressSuccess.selection), GraphQLField.fragment(type: "SaveArticleReadingProgressError", selection: saveArticleReadingProgressError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .saveArticleReadingProgressSuccess: - let data = Objects.SaveArticleReadingProgressSuccess(updatedArticle: data.updatedArticle) - return try saveArticleReadingProgressSuccess.decode(data: data) - case .saveArticleReadingProgressError: - let data = Objects.SaveArticleReadingProgressError(errorCodes: data.errorCodes) - return try saveArticleReadingProgressError.decode(data: data) - } - case .mocking: - return saveArticleReadingProgressSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SaveArticleReadingProgressResult = Selection + typealias SearchResult = Selection } extension Unions { @@ -16654,8 +19686,8 @@ extension Unions { let errorCodes: [String: [Enums.SetBookmarkArticleErrorCode]] enum TypeName: String, Codable { - case setBookmarkArticleSuccess = "SetBookmarkArticleSuccess" case setBookmarkArticleError = "SetBookmarkArticleError" + case setBookmarkArticleSuccess = "SetBookmarkArticleSuccess" } } } @@ -16698,21 +19730,21 @@ extension Unions.SetBookmarkArticleResult: Decodable { } extension Fields where TypeLock == Unions.SetBookmarkArticleResult { - func on(setBookmarkArticleSuccess: Selection, setBookmarkArticleError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SetBookmarkArticleSuccess", selection: setBookmarkArticleSuccess.selection), GraphQLField.fragment(type: "SetBookmarkArticleError", selection: setBookmarkArticleError.selection)]) + func on(setBookmarkArticleError: Selection, setBookmarkArticleSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SetBookmarkArticleError", selection: setBookmarkArticleError.selection), GraphQLField.fragment(type: "SetBookmarkArticleSuccess", selection: setBookmarkArticleSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .setBookmarkArticleSuccess: - let data = Objects.SetBookmarkArticleSuccess(bookmarkedArticle: data.bookmarkedArticle) - return try setBookmarkArticleSuccess.decode(data: data) case .setBookmarkArticleError: let data = Objects.SetBookmarkArticleError(errorCodes: data.errorCodes) return try setBookmarkArticleError.decode(data: data) + case .setBookmarkArticleSuccess: + let data = Objects.SetBookmarkArticleSuccess(bookmarkedArticle: data.bookmarkedArticle) + return try setBookmarkArticleSuccess.decode(data: data) } case .mocking: - return setBookmarkArticleSuccess.mock() + return setBookmarkArticleError.mock() } } } @@ -16722,19 +19754,19 @@ extension Selection where TypeLock == Never, Type == Never { } extension Unions { - struct CreateHighlightResult { + struct SetDeviceTokenResult { let __typename: TypeName - let errorCodes: [String: [Enums.CreateHighlightErrorCode]] - let highlight: [String: Objects.Highlight] + let deviceToken: [String: Objects.DeviceToken] + let errorCodes: [String: [Enums.SetDeviceTokenErrorCode]] enum TypeName: String, Codable { - case createHighlightSuccess = "CreateHighlightSuccess" - case createHighlightError = "CreateHighlightError" + case setDeviceTokenError = "SetDeviceTokenError" + case setDeviceTokenSuccess = "SetDeviceTokenSuccess" } } } -extension Unions.CreateHighlightResult: Decodable { +extension Unions.SetDeviceTokenResult: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -16746,12 +19778,12 @@ extension Unions.CreateHighlightResult: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateHighlightErrorCode]?.self, forKey: codingKey) { + case "deviceToken": + if let value = try container.decode(Objects.DeviceToken?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "highlight": - if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + case "errorCodes": + if let value = try container.decode([Enums.SetDeviceTokenErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -16766,50 +19798,49 @@ extension Unions.CreateHighlightResult: Decodable { __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + deviceToken = map["deviceToken"] errorCodes = map["errorCodes"] - highlight = map["highlight"] } } -extension Fields where TypeLock == Unions.CreateHighlightResult { - func on(createHighlightSuccess: Selection, createHighlightError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "CreateHighlightSuccess", selection: createHighlightSuccess.selection), GraphQLField.fragment(type: "CreateHighlightError", selection: createHighlightError.selection)]) +extension Fields where TypeLock == Unions.SetDeviceTokenResult { + func on(setDeviceTokenError: Selection, setDeviceTokenSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SetDeviceTokenError", selection: setDeviceTokenError.selection), GraphQLField.fragment(type: "SetDeviceTokenSuccess", selection: setDeviceTokenSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .createHighlightSuccess: - let data = Objects.CreateHighlightSuccess(highlight: data.highlight) - return try createHighlightSuccess.decode(data: data) - case .createHighlightError: - let data = Objects.CreateHighlightError(errorCodes: data.errorCodes) - return try createHighlightError.decode(data: data) + case .setDeviceTokenError: + let data = Objects.SetDeviceTokenError(errorCodes: data.errorCodes) + return try setDeviceTokenError.decode(data: data) + case .setDeviceTokenSuccess: + let data = Objects.SetDeviceTokenSuccess(deviceToken: data.deviceToken) + return try setDeviceTokenSuccess.decode(data: data) } case .mocking: - return createHighlightSuccess.mock() + return setDeviceTokenError.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias CreateHighlightResult = Selection + typealias SetDeviceTokenResult = Selection } extension Unions { - struct MergeHighlightResult { + struct SetFollowResult { let __typename: TypeName - let errorCodes: [String: [Enums.MergeHighlightErrorCode]] - let highlight: [String: Objects.Highlight] - let overlapHighlightIdList: [String: [String]] + let errorCodes: [String: [Enums.SetFollowErrorCode]] + let updatedUser: [String: Objects.User] enum TypeName: String, Codable { - case mergeHighlightSuccess = "MergeHighlightSuccess" - case mergeHighlightError = "MergeHighlightError" + case setFollowError = "SetFollowError" + case setFollowSuccess = "SetFollowSuccess" } } } -extension Unions.MergeHighlightResult: Decodable { +extension Unions.SetFollowResult: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -16822,15 +19853,11 @@ extension Unions.MergeHighlightResult: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.MergeHighlightErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.SetFollowErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "highlight": - if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "overlapHighlightIdList": - if let value = try container.decode([String]?.self, forKey: codingKey) { + case "updatedUser": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -16846,49 +19873,48 @@ extension Unions.MergeHighlightResult: Decodable { __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) errorCodes = map["errorCodes"] - highlight = map["highlight"] - overlapHighlightIdList = map["overlapHighlightIdList"] + updatedUser = map["updatedUser"] } } -extension Fields where TypeLock == Unions.MergeHighlightResult { - func on(mergeHighlightSuccess: Selection, mergeHighlightError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "MergeHighlightSuccess", selection: mergeHighlightSuccess.selection), GraphQLField.fragment(type: "MergeHighlightError", selection: mergeHighlightError.selection)]) +extension Fields where TypeLock == Unions.SetFollowResult { + func on(setFollowError: Selection, setFollowSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SetFollowError", selection: setFollowError.selection), GraphQLField.fragment(type: "SetFollowSuccess", selection: setFollowSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .mergeHighlightSuccess: - let data = Objects.MergeHighlightSuccess(highlight: data.highlight, overlapHighlightIdList: data.overlapHighlightIdList) - return try mergeHighlightSuccess.decode(data: data) - case .mergeHighlightError: - let data = Objects.MergeHighlightError(errorCodes: data.errorCodes) - return try mergeHighlightError.decode(data: data) + case .setFollowError: + let data = Objects.SetFollowError(errorCodes: data.errorCodes) + return try setFollowError.decode(data: data) + case .setFollowSuccess: + let data = Objects.SetFollowSuccess(updatedUser: data.updatedUser) + return try setFollowSuccess.decode(data: data) } case .mocking: - return mergeHighlightSuccess.mock() + return setFollowError.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias MergeHighlightResult = Selection + typealias SetFollowResult = Selection } extension Unions { - struct UpdateHighlightResult { + struct SetLabelsResult { let __typename: TypeName - let errorCodes: [String: [Enums.UpdateHighlightErrorCode]] - let highlight: [String: Objects.Highlight] + let errorCodes: [String: [Enums.SetLabelsErrorCode]] + let labels: [String: [Objects.Label]] enum TypeName: String, Codable { - case updateHighlightSuccess = "UpdateHighlightSuccess" - case updateHighlightError = "UpdateHighlightError" + case setLabelsError = "SetLabelsError" + case setLabelsSuccess = "SetLabelsSuccess" } } } -extension Unions.UpdateHighlightResult: Decodable { +extension Unions.SetLabelsResult: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -16901,11 +19927,11 @@ extension Unions.UpdateHighlightResult: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.UpdateHighlightErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.SetLabelsErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "highlight": - if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + case "labels": + if let value = try container.decode([Objects.Label]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -16921,556 +19947,32 @@ extension Unions.UpdateHighlightResult: Decodable { __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) errorCodes = map["errorCodes"] - highlight = map["highlight"] + labels = map["labels"] } } -extension Fields where TypeLock == Unions.UpdateHighlightResult { - func on(updateHighlightSuccess: Selection, updateHighlightError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UpdateHighlightSuccess", selection: updateHighlightSuccess.selection), GraphQLField.fragment(type: "UpdateHighlightError", selection: updateHighlightError.selection)]) +extension Fields where TypeLock == Unions.SetLabelsResult { + func on(setLabelsError: Selection, setLabelsSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SetLabelsError", selection: setLabelsError.selection), GraphQLField.fragment(type: "SetLabelsSuccess", selection: setLabelsSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .updateHighlightSuccess: - let data = Objects.UpdateHighlightSuccess(highlight: data.highlight) - return try updateHighlightSuccess.decode(data: data) - case .updateHighlightError: - let data = Objects.UpdateHighlightError(errorCodes: data.errorCodes) - return try updateHighlightError.decode(data: data) + case .setLabelsError: + let data = Objects.SetLabelsError(errorCodes: data.errorCodes) + return try setLabelsError.decode(data: data) + case .setLabelsSuccess: + let data = Objects.SetLabelsSuccess(labels: data.labels) + return try setLabelsSuccess.decode(data: data) } case .mocking: - return updateHighlightSuccess.mock() + return setLabelsError.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias UpdateHighlightResult = Selection -} - -extension Unions { - struct DeleteHighlightResult { - let __typename: TypeName - let errorCodes: [String: [Enums.DeleteHighlightErrorCode]] - let highlight: [String: Objects.Highlight] - - enum TypeName: String, Codable { - case deleteHighlightSuccess = "DeleteHighlightSuccess" - case deleteHighlightError = "DeleteHighlightError" - } - } -} - -extension Unions.DeleteHighlightResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.DeleteHighlightErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "highlight": - if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - highlight = map["highlight"] - } -} - -extension Fields where TypeLock == Unions.DeleteHighlightResult { - func on(deleteHighlightSuccess: Selection, deleteHighlightError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "DeleteHighlightSuccess", selection: deleteHighlightSuccess.selection), GraphQLField.fragment(type: "DeleteHighlightError", selection: deleteHighlightError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .deleteHighlightSuccess: - let data = Objects.DeleteHighlightSuccess(highlight: data.highlight) - return try deleteHighlightSuccess.decode(data: data) - case .deleteHighlightError: - let data = Objects.DeleteHighlightError(errorCodes: data.errorCodes) - return try deleteHighlightError.decode(data: data) - } - case .mocking: - return deleteHighlightSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteHighlightResult = Selection -} - -extension Unions { - struct CreateHighlightReplyResult { - let __typename: TypeName - let errorCodes: [String: [Enums.CreateHighlightReplyErrorCode]] - let highlightReply: [String: Objects.HighlightReply] - - enum TypeName: String, Codable { - case createHighlightReplySuccess = "CreateHighlightReplySuccess" - case createHighlightReplyError = "CreateHighlightReplyError" - } - } -} - -extension Unions.CreateHighlightReplyResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateHighlightReplyErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "highlightReply": - if let value = try container.decode(Objects.HighlightReply?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - highlightReply = map["highlightReply"] - } -} - -extension Fields where TypeLock == Unions.CreateHighlightReplyResult { - func on(createHighlightReplySuccess: Selection, createHighlightReplyError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "CreateHighlightReplySuccess", selection: createHighlightReplySuccess.selection), GraphQLField.fragment(type: "CreateHighlightReplyError", selection: createHighlightReplyError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .createHighlightReplySuccess: - let data = Objects.CreateHighlightReplySuccess(highlightReply: data.highlightReply) - return try createHighlightReplySuccess.decode(data: data) - case .createHighlightReplyError: - let data = Objects.CreateHighlightReplyError(errorCodes: data.errorCodes) - return try createHighlightReplyError.decode(data: data) - } - case .mocking: - return createHighlightReplySuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateHighlightReplyResult = Selection -} - -extension Unions { - struct UpdateHighlightReplyResult { - let __typename: TypeName - let errorCodes: [String: [Enums.UpdateHighlightReplyErrorCode]] - let highlightReply: [String: Objects.HighlightReply] - - enum TypeName: String, Codable { - case updateHighlightReplySuccess = "UpdateHighlightReplySuccess" - case updateHighlightReplyError = "UpdateHighlightReplyError" - } - } -} - -extension Unions.UpdateHighlightReplyResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateHighlightReplyErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "highlightReply": - if let value = try container.decode(Objects.HighlightReply?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - highlightReply = map["highlightReply"] - } -} - -extension Fields where TypeLock == Unions.UpdateHighlightReplyResult { - func on(updateHighlightReplySuccess: Selection, updateHighlightReplyError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UpdateHighlightReplySuccess", selection: updateHighlightReplySuccess.selection), GraphQLField.fragment(type: "UpdateHighlightReplyError", selection: updateHighlightReplyError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .updateHighlightReplySuccess: - let data = Objects.UpdateHighlightReplySuccess(highlightReply: data.highlightReply) - return try updateHighlightReplySuccess.decode(data: data) - case .updateHighlightReplyError: - let data = Objects.UpdateHighlightReplyError(errorCodes: data.errorCodes) - return try updateHighlightReplyError.decode(data: data) - } - case .mocking: - return updateHighlightReplySuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateHighlightReplyResult = Selection -} - -extension Unions { - struct DeleteHighlightReplyResult { - let __typename: TypeName - let errorCodes: [String: [Enums.DeleteHighlightReplyErrorCode]] - let highlightReply: [String: Objects.HighlightReply] - - enum TypeName: String, Codable { - case deleteHighlightReplySuccess = "DeleteHighlightReplySuccess" - case deleteHighlightReplyError = "DeleteHighlightReplyError" - } - } -} - -extension Unions.DeleteHighlightReplyResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.DeleteHighlightReplyErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "highlightReply": - if let value = try container.decode(Objects.HighlightReply?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - highlightReply = map["highlightReply"] - } -} - -extension Fields where TypeLock == Unions.DeleteHighlightReplyResult { - func on(deleteHighlightReplySuccess: Selection, deleteHighlightReplyError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "DeleteHighlightReplySuccess", selection: deleteHighlightReplySuccess.selection), GraphQLField.fragment(type: "DeleteHighlightReplyError", selection: deleteHighlightReplyError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .deleteHighlightReplySuccess: - let data = Objects.DeleteHighlightReplySuccess(highlightReply: data.highlightReply) - return try deleteHighlightReplySuccess.decode(data: data) - case .deleteHighlightReplyError: - let data = Objects.DeleteHighlightReplyError(errorCodes: data.errorCodes) - return try deleteHighlightReplyError.decode(data: data) - } - case .mocking: - return deleteHighlightReplySuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteHighlightReplyResult = Selection -} - -extension Unions { - struct CreateReactionResult { - let __typename: TypeName - let errorCodes: [String: [Enums.CreateReactionErrorCode]] - let reaction: [String: Objects.Reaction] - - enum TypeName: String, Codable { - case createReactionSuccess = "CreateReactionSuccess" - case createReactionError = "CreateReactionError" - } - } -} - -extension Unions.CreateReactionResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateReactionErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "reaction": - if let value = try container.decode(Objects.Reaction?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - reaction = map["reaction"] - } -} - -extension Fields where TypeLock == Unions.CreateReactionResult { - func on(createReactionSuccess: Selection, createReactionError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "CreateReactionSuccess", selection: createReactionSuccess.selection), GraphQLField.fragment(type: "CreateReactionError", selection: createReactionError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .createReactionSuccess: - let data = Objects.CreateReactionSuccess(reaction: data.reaction) - return try createReactionSuccess.decode(data: data) - case .createReactionError: - let data = Objects.CreateReactionError(errorCodes: data.errorCodes) - return try createReactionError.decode(data: data) - } - case .mocking: - return createReactionSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateReactionResult = Selection -} - -extension Unions { - struct DeleteReactionResult { - let __typename: TypeName - let errorCodes: [String: [Enums.DeleteReactionErrorCode]] - let reaction: [String: Objects.Reaction] - - enum TypeName: String, Codable { - case deleteReactionSuccess = "DeleteReactionSuccess" - case deleteReactionError = "DeleteReactionError" - } - } -} - -extension Unions.DeleteReactionResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.DeleteReactionErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "reaction": - if let value = try container.decode(Objects.Reaction?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - reaction = map["reaction"] - } -} - -extension Fields where TypeLock == Unions.DeleteReactionResult { - func on(deleteReactionSuccess: Selection, deleteReactionError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "DeleteReactionSuccess", selection: deleteReactionSuccess.selection), GraphQLField.fragment(type: "DeleteReactionError", selection: deleteReactionError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .deleteReactionSuccess: - let data = Objects.DeleteReactionSuccess(reaction: data.reaction) - return try deleteReactionSuccess.decode(data: data) - case .deleteReactionError: - let data = Objects.DeleteReactionError(errorCodes: data.errorCodes) - return try deleteReactionError.decode(data: data) - } - case .mocking: - return deleteReactionSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteReactionResult = Selection -} - -extension Unions { - struct FeedArticlesResult { - let __typename: TypeName - let edges: [String: [Objects.FeedArticleEdge]] - let errorCodes: [String: [Enums.FeedArticlesErrorCode]] - let pageInfo: [String: Objects.PageInfo] - - enum TypeName: String, Codable { - case feedArticlesSuccess = "FeedArticlesSuccess" - case feedArticlesError = "FeedArticlesError" - } - } -} - -extension Unions.FeedArticlesResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "edges": - if let value = try container.decode([Objects.FeedArticleEdge]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "errorCodes": - if let value = try container.decode([Enums.FeedArticlesErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "pageInfo": - if let value = try container.decode(Objects.PageInfo?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - edges = map["edges"] - errorCodes = map["errorCodes"] - pageInfo = map["pageInfo"] - } -} - -extension Fields where TypeLock == Unions.FeedArticlesResult { - func on(feedArticlesSuccess: Selection, feedArticlesError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "FeedArticlesSuccess", selection: feedArticlesSuccess.selection), GraphQLField.fragment(type: "FeedArticlesError", selection: feedArticlesError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .feedArticlesSuccess: - let data = Objects.FeedArticlesSuccess(edges: data.edges, pageInfo: data.pageInfo) - return try feedArticlesSuccess.decode(data: data) - case .feedArticlesError: - let data = Objects.FeedArticlesError(errorCodes: data.errorCodes) - return try feedArticlesError.decode(data: data) - } - case .mocking: - return feedArticlesSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias FeedArticlesResult = Selection + typealias SetLabelsResult = Selection } extension Unions { @@ -17482,8 +19984,8 @@ extension Unions { let updatedFeedArticleId: [String: String] enum TypeName: String, Codable { - case setShareArticleSuccess = "SetShareArticleSuccess" case setShareArticleError = "SetShareArticleError" + case setShareArticleSuccess = "SetShareArticleSuccess" } } } @@ -17536,21 +20038,21 @@ extension Unions.SetShareArticleResult: Decodable { } extension Fields where TypeLock == Unions.SetShareArticleResult { - func on(setShareArticleSuccess: Selection, setShareArticleError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SetShareArticleSuccess", selection: setShareArticleSuccess.selection), GraphQLField.fragment(type: "SetShareArticleError", selection: setShareArticleError.selection)]) + func on(setShareArticleError: Selection, setShareArticleSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SetShareArticleError", selection: setShareArticleError.selection), GraphQLField.fragment(type: "SetShareArticleSuccess", selection: setShareArticleSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .setShareArticleSuccess: - let data = Objects.SetShareArticleSuccess(updatedArticle: data.updatedArticle, updatedFeedArticle: data.updatedFeedArticle, updatedFeedArticleId: data.updatedFeedArticleId) - return try setShareArticleSuccess.decode(data: data) case .setShareArticleError: let data = Objects.SetShareArticleError(errorCodes: data.errorCodes) return try setShareArticleError.decode(data: data) + case .setShareArticleSuccess: + let data = Objects.SetShareArticleSuccess(updatedArticle: data.updatedArticle, updatedFeedArticle: data.updatedFeedArticle, updatedFeedArticleId: data.updatedFeedArticleId) + return try setShareArticleSuccess.decode(data: data) } case .mocking: - return setShareArticleSuccess.mock() + return setShareArticleError.mock() } } } @@ -17559,6 +20061,1042 @@ extension Selection where TypeLock == Never, Type == Never { typealias SetShareArticleResult = Selection } +extension Unions { + struct SetShareHighlightResult { + let __typename: TypeName + let errorCodes: [String: [Enums.SetShareHighlightErrorCode]] + let highlight: [String: Objects.Highlight] + + enum TypeName: String, Codable { + case setShareHighlightError = "SetShareHighlightError" + case setShareHighlightSuccess = "SetShareHighlightSuccess" + } + } +} + +extension Unions.SetShareHighlightResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SetShareHighlightErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "highlight": + if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + highlight = map["highlight"] + } +} + +extension Fields where TypeLock == Unions.SetShareHighlightResult { + func on(setShareHighlightError: Selection, setShareHighlightSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SetShareHighlightError", selection: setShareHighlightError.selection), GraphQLField.fragment(type: "SetShareHighlightSuccess", selection: setShareHighlightSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .setShareHighlightError: + let data = Objects.SetShareHighlightError(errorCodes: data.errorCodes) + return try setShareHighlightError.decode(data: data) + case .setShareHighlightSuccess: + let data = Objects.SetShareHighlightSuccess(highlight: data.highlight) + return try setShareHighlightSuccess.decode(data: data) + } + case .mocking: + return setShareHighlightError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetShareHighlightResult = Selection +} + +extension Unions { + struct SetUserPersonalizationResult { + let __typename: TypeName + let errorCodes: [String: [Enums.SetUserPersonalizationErrorCode]] + let updatedUserPersonalization: [String: Objects.UserPersonalization] + + enum TypeName: String, Codable { + case setUserPersonalizationError = "SetUserPersonalizationError" + case setUserPersonalizationSuccess = "SetUserPersonalizationSuccess" + } + } +} + +extension Unions.SetUserPersonalizationResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SetUserPersonalizationErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updatedUserPersonalization": + if let value = try container.decode(Objects.UserPersonalization?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + updatedUserPersonalization = map["updatedUserPersonalization"] + } +} + +extension Fields where TypeLock == Unions.SetUserPersonalizationResult { + func on(setUserPersonalizationError: Selection, setUserPersonalizationSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SetUserPersonalizationError", selection: setUserPersonalizationError.selection), GraphQLField.fragment(type: "SetUserPersonalizationSuccess", selection: setUserPersonalizationSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .setUserPersonalizationError: + let data = Objects.SetUserPersonalizationError(errorCodes: data.errorCodes) + return try setUserPersonalizationError.decode(data: data) + case .setUserPersonalizationSuccess: + let data = Objects.SetUserPersonalizationSuccess(updatedUserPersonalization: data.updatedUserPersonalization) + return try setUserPersonalizationSuccess.decode(data: data) + } + case .mocking: + return setUserPersonalizationError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetUserPersonalizationResult = Selection +} + +extension Unions { + struct SetWebhookResult { + let __typename: TypeName + let errorCodes: [String: [Enums.SetWebhookErrorCode]] + let webhook: [String: Objects.Webhook] + + enum TypeName: String, Codable { + case setWebhookError = "SetWebhookError" + case setWebhookSuccess = "SetWebhookSuccess" + } + } +} + +extension Unions.SetWebhookResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SetWebhookErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "webhook": + if let value = try container.decode(Objects.Webhook?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + webhook = map["webhook"] + } +} + +extension Fields where TypeLock == Unions.SetWebhookResult { + func on(setWebhookError: Selection, setWebhookSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SetWebhookError", selection: setWebhookError.selection), GraphQLField.fragment(type: "SetWebhookSuccess", selection: setWebhookSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .setWebhookError: + let data = Objects.SetWebhookError(errorCodes: data.errorCodes) + return try setWebhookError.decode(data: data) + case .setWebhookSuccess: + let data = Objects.SetWebhookSuccess(webhook: data.webhook) + return try setWebhookSuccess.decode(data: data) + } + case .mocking: + return setWebhookError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SetWebhookResult = Selection +} + +extension Unions { + struct SharedArticleResult { + let __typename: TypeName + let article: [String: Objects.Article] + let errorCodes: [String: [Enums.SharedArticleErrorCode]] + + enum TypeName: String, Codable { + case sharedArticleError = "SharedArticleError" + case sharedArticleSuccess = "SharedArticleSuccess" + } + } +} + +extension Unions.SharedArticleResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "article": + if let value = try container.decode(Objects.Article?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "errorCodes": + if let value = try container.decode([Enums.SharedArticleErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + article = map["article"] + errorCodes = map["errorCodes"] + } +} + +extension Fields where TypeLock == Unions.SharedArticleResult { + func on(sharedArticleError: Selection, sharedArticleSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SharedArticleError", selection: sharedArticleError.selection), GraphQLField.fragment(type: "SharedArticleSuccess", selection: sharedArticleSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .sharedArticleError: + let data = Objects.SharedArticleError(errorCodes: data.errorCodes) + return try sharedArticleError.decode(data: data) + case .sharedArticleSuccess: + let data = Objects.SharedArticleSuccess(article: data.article) + return try sharedArticleSuccess.decode(data: data) + } + case .mocking: + return sharedArticleError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SharedArticleResult = Selection +} + +extension Unions { + struct SignupResult { + let __typename: TypeName + let errorCodes: [String: [Enums.SignupErrorCode?]] + let me: [String: Objects.User] + + enum TypeName: String, Codable { + case signupError = "SignupError" + case signupSuccess = "SignupSuccess" + } + } +} + +extension Unions.SignupResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SignupErrorCode?]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "me": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + me = map["me"] + } +} + +extension Fields where TypeLock == Unions.SignupResult { + func on(signupError: Selection, signupSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SignupError", selection: signupError.selection), GraphQLField.fragment(type: "SignupSuccess", selection: signupSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .signupError: + let data = Objects.SignupError(errorCodes: data.errorCodes) + return try signupError.decode(data: data) + case .signupSuccess: + let data = Objects.SignupSuccess(me: data.me) + return try signupSuccess.decode(data: data) + } + case .mocking: + return signupError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SignupResult = Selection +} + +extension Unions { + struct SubscribeResult { + let __typename: TypeName + let errorCodes: [String: [Enums.SubscribeErrorCode]] + let subscriptions: [String: [Objects.Subscription]] + + enum TypeName: String, Codable { + case subscribeError = "SubscribeError" + case subscribeSuccess = "SubscribeSuccess" + } + } +} + +extension Unions.SubscribeResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SubscribeErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "subscriptions": + if let value = try container.decode([Objects.Subscription]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + subscriptions = map["subscriptions"] + } +} + +extension Fields where TypeLock == Unions.SubscribeResult { + func on(subscribeError: Selection, subscribeSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SubscribeError", selection: subscribeError.selection), GraphQLField.fragment(type: "SubscribeSuccess", selection: subscribeSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .subscribeError: + let data = Objects.SubscribeError(errorCodes: data.errorCodes) + return try subscribeError.decode(data: data) + case .subscribeSuccess: + let data = Objects.SubscribeSuccess(subscriptions: data.subscriptions) + return try subscribeSuccess.decode(data: data) + } + case .mocking: + return subscribeError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SubscribeResult = Selection +} + +extension Unions { + struct SubscriptionsResult { + let __typename: TypeName + let errorCodes: [String: [Enums.SubscriptionsErrorCode]] + let subscriptions: [String: [Objects.Subscription]] + + enum TypeName: String, Codable { + case subscriptionsError = "SubscriptionsError" + case subscriptionsSuccess = "SubscriptionsSuccess" + } + } +} + +extension Unions.SubscriptionsResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.SubscriptionsErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "subscriptions": + if let value = try container.decode([Objects.Subscription]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + subscriptions = map["subscriptions"] + } +} + +extension Fields where TypeLock == Unions.SubscriptionsResult { + func on(subscriptionsError: Selection, subscriptionsSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "SubscriptionsError", selection: subscriptionsError.selection), GraphQLField.fragment(type: "SubscriptionsSuccess", selection: subscriptionsSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .subscriptionsError: + let data = Objects.SubscriptionsError(errorCodes: data.errorCodes) + return try subscriptionsError.decode(data: data) + case .subscriptionsSuccess: + let data = Objects.SubscriptionsSuccess(subscriptions: data.subscriptions) + return try subscriptionsSuccess.decode(data: data) + } + case .mocking: + return subscriptionsError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias SubscriptionsResult = Selection +} + +extension Unions { + struct UnsubscribeResult { + let __typename: TypeName + let errorCodes: [String: [Enums.UnsubscribeErrorCode]] + let subscription: [String: Objects.Subscription] + + enum TypeName: String, Codable { + case unsubscribeError = "UnsubscribeError" + case unsubscribeSuccess = "UnsubscribeSuccess" + } + } +} + +extension Unions.UnsubscribeResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UnsubscribeErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "subscription": + if let value = try container.decode(Objects.Subscription?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + subscription = map["subscription"] + } +} + +extension Fields where TypeLock == Unions.UnsubscribeResult { + func on(unsubscribeError: Selection, unsubscribeSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UnsubscribeError", selection: unsubscribeError.selection), GraphQLField.fragment(type: "UnsubscribeSuccess", selection: unsubscribeSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .unsubscribeError: + let data = Objects.UnsubscribeError(errorCodes: data.errorCodes) + return try unsubscribeError.decode(data: data) + case .unsubscribeSuccess: + let data = Objects.UnsubscribeSuccess(subscription: data.subscription) + return try unsubscribeSuccess.decode(data: data) + } + case .mocking: + return unsubscribeError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UnsubscribeResult = Selection +} + +extension Unions { + struct UpdateHighlightReplyResult { + let __typename: TypeName + let errorCodes: [String: [Enums.UpdateHighlightReplyErrorCode]] + let highlightReply: [String: Objects.HighlightReply] + + enum TypeName: String, Codable { + case updateHighlightReplyError = "UpdateHighlightReplyError" + case updateHighlightReplySuccess = "UpdateHighlightReplySuccess" + } + } +} + +extension Unions.UpdateHighlightReplyResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UpdateHighlightReplyErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "highlightReply": + if let value = try container.decode(Objects.HighlightReply?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + highlightReply = map["highlightReply"] + } +} + +extension Fields where TypeLock == Unions.UpdateHighlightReplyResult { + func on(updateHighlightReplyError: Selection, updateHighlightReplySuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UpdateHighlightReplyError", selection: updateHighlightReplyError.selection), GraphQLField.fragment(type: "UpdateHighlightReplySuccess", selection: updateHighlightReplySuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .updateHighlightReplyError: + let data = Objects.UpdateHighlightReplyError(errorCodes: data.errorCodes) + return try updateHighlightReplyError.decode(data: data) + case .updateHighlightReplySuccess: + let data = Objects.UpdateHighlightReplySuccess(highlightReply: data.highlightReply) + return try updateHighlightReplySuccess.decode(data: data) + } + case .mocking: + return updateHighlightReplyError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateHighlightReplyResult = Selection +} + +extension Unions { + struct UpdateHighlightResult { + let __typename: TypeName + let errorCodes: [String: [Enums.UpdateHighlightErrorCode]] + let highlight: [String: Objects.Highlight] + + enum TypeName: String, Codable { + case updateHighlightError = "UpdateHighlightError" + case updateHighlightSuccess = "UpdateHighlightSuccess" + } + } +} + +extension Unions.UpdateHighlightResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UpdateHighlightErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "highlight": + if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + highlight = map["highlight"] + } +} + +extension Fields where TypeLock == Unions.UpdateHighlightResult { + func on(updateHighlightError: Selection, updateHighlightSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UpdateHighlightError", selection: updateHighlightError.selection), GraphQLField.fragment(type: "UpdateHighlightSuccess", selection: updateHighlightSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .updateHighlightError: + let data = Objects.UpdateHighlightError(errorCodes: data.errorCodes) + return try updateHighlightError.decode(data: data) + case .updateHighlightSuccess: + let data = Objects.UpdateHighlightSuccess(highlight: data.highlight) + return try updateHighlightSuccess.decode(data: data) + } + case .mocking: + return updateHighlightError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateHighlightResult = Selection +} + +extension Unions { + struct UpdateLabelResult { + let __typename: TypeName + let errorCodes: [String: [Enums.UpdateLabelErrorCode]] + let label: [String: Objects.Label] + + enum TypeName: String, Codable { + case updateLabelError = "UpdateLabelError" + case updateLabelSuccess = "UpdateLabelSuccess" + } + } +} + +extension Unions.UpdateLabelResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UpdateLabelErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "label": + if let value = try container.decode(Objects.Label?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + label = map["label"] + } +} + +extension Fields where TypeLock == Unions.UpdateLabelResult { + func on(updateLabelError: Selection, updateLabelSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UpdateLabelError", selection: updateLabelError.selection), GraphQLField.fragment(type: "UpdateLabelSuccess", selection: updateLabelSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .updateLabelError: + let data = Objects.UpdateLabelError(errorCodes: data.errorCodes) + return try updateLabelError.decode(data: data) + case .updateLabelSuccess: + let data = Objects.UpdateLabelSuccess(label: data.label) + return try updateLabelSuccess.decode(data: data) + } + case .mocking: + return updateLabelError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateLabelResult = Selection +} + +extension Unions { + struct UpdateLinkShareInfoResult { + let __typename: TypeName + let errorCodes: [String: [Enums.UpdateLinkShareInfoErrorCode]] + let message: [String: String] + + enum TypeName: String, Codable { + case updateLinkShareInfoError = "UpdateLinkShareInfoError" + case updateLinkShareInfoSuccess = "UpdateLinkShareInfoSuccess" + } + } +} + +extension Unions.UpdateLinkShareInfoResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UpdateLinkShareInfoErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "message": + if let value = try container.decode(String?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + message = map["message"] + } +} + +extension Fields where TypeLock == Unions.UpdateLinkShareInfoResult { + func on(updateLinkShareInfoError: Selection, updateLinkShareInfoSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UpdateLinkShareInfoError", selection: updateLinkShareInfoError.selection), GraphQLField.fragment(type: "UpdateLinkShareInfoSuccess", selection: updateLinkShareInfoSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .updateLinkShareInfoError: + let data = Objects.UpdateLinkShareInfoError(errorCodes: data.errorCodes) + return try updateLinkShareInfoError.decode(data: data) + case .updateLinkShareInfoSuccess: + let data = Objects.UpdateLinkShareInfoSuccess(message: data.message) + return try updateLinkShareInfoSuccess.decode(data: data) + } + case .mocking: + return updateLinkShareInfoError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateLinkShareInfoResult = Selection +} + +extension Unions { + struct UpdatePageResult { + let __typename: TypeName + let errorCodes: [String: [Enums.UpdatePageErrorCode]] + let updatedPage: [String: Objects.Page] + + enum TypeName: String, Codable { + case updatePageError = "UpdatePageError" + case updatePageSuccess = "UpdatePageSuccess" + } + } +} + +extension Unions.UpdatePageResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UpdatePageErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "updatedPage": + if let value = try container.decode(Objects.Page?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + updatedPage = map["updatedPage"] + } +} + +extension Fields where TypeLock == Unions.UpdatePageResult { + func on(updatePageError: Selection, updatePageSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UpdatePageError", selection: updatePageError.selection), GraphQLField.fragment(type: "UpdatePageSuccess", selection: updatePageSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .updatePageError: + let data = Objects.UpdatePageError(errorCodes: data.errorCodes) + return try updatePageError.decode(data: data) + case .updatePageSuccess: + let data = Objects.UpdatePageSuccess(updatedPage: data.updatedPage) + return try updatePageSuccess.decode(data: data) + } + case .mocking: + return updatePageError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdatePageResult = Selection +} + +extension Unions { + struct UpdateReminderResult { + let __typename: TypeName + let errorCodes: [String: [Enums.UpdateReminderErrorCode]] + let reminder: [String: Objects.Reminder] + + enum TypeName: String, Codable { + case updateReminderError = "UpdateReminderError" + case updateReminderSuccess = "UpdateReminderSuccess" + } + } +} + +extension Unions.UpdateReminderResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UpdateReminderErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "reminder": + if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + reminder = map["reminder"] + } +} + +extension Fields where TypeLock == Unions.UpdateReminderResult { + func on(updateReminderError: Selection, updateReminderSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UpdateReminderError", selection: updateReminderError.selection), GraphQLField.fragment(type: "UpdateReminderSuccess", selection: updateReminderSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .updateReminderError: + let data = Objects.UpdateReminderError(errorCodes: data.errorCodes) + return try updateReminderError.decode(data: data) + case .updateReminderSuccess: + let data = Objects.UpdateReminderSuccess(reminder: data.reminder) + return try updateReminderSuccess.decode(data: data) + } + case .mocking: + return updateReminderError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UpdateReminderResult = Selection +} + extension Unions { struct UpdateSharedCommentResult { let __typename: TypeName @@ -17567,8 +21105,8 @@ extension Unions { let sharedComment: [String: String] enum TypeName: String, Codable { - case updateSharedCommentSuccess = "UpdateSharedCommentSuccess" case updateSharedCommentError = "UpdateSharedCommentError" + case updateSharedCommentSuccess = "UpdateSharedCommentSuccess" } } } @@ -17616,21 +21154,21 @@ extension Unions.UpdateSharedCommentResult: Decodable { } extension Fields where TypeLock == Unions.UpdateSharedCommentResult { - func on(updateSharedCommentSuccess: Selection, updateSharedCommentError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UpdateSharedCommentSuccess", selection: updateSharedCommentSuccess.selection), GraphQLField.fragment(type: "UpdateSharedCommentError", selection: updateSharedCommentError.selection)]) + func on(updateSharedCommentError: Selection, updateSharedCommentSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UpdateSharedCommentError", selection: updateSharedCommentError.selection), GraphQLField.fragment(type: "UpdateSharedCommentSuccess", selection: updateSharedCommentSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .updateSharedCommentSuccess: - let data = Objects.UpdateSharedCommentSuccess(articleId: data.articleId, sharedComment: data.sharedComment) - return try updateSharedCommentSuccess.decode(data: data) case .updateSharedCommentError: let data = Objects.UpdateSharedCommentError(errorCodes: data.errorCodes) return try updateSharedCommentError.decode(data: data) + case .updateSharedCommentSuccess: + let data = Objects.UpdateSharedCommentSuccess(articleId: data.articleId, sharedComment: data.sharedComment) + return try updateSharedCommentSuccess.decode(data: data) } case .mocking: - return updateSharedCommentSuccess.mock() + return updateSharedCommentError.mock() } } } @@ -17640,19 +21178,19 @@ extension Selection where TypeLock == Never, Type == Never { } extension Unions { - struct GetFollowersResult { + struct UpdateUserProfileResult { let __typename: TypeName - let errorCodes: [String: [Enums.GetFollowersErrorCode]] - let followers: [String: [Objects.User]] + let errorCodes: [String: [Enums.UpdateUserProfileErrorCode]] + let user: [String: Objects.User] enum TypeName: String, Codable { - case getFollowersSuccess = "GetFollowersSuccess" - case getFollowersError = "GetFollowersError" + case updateUserProfileError = "UpdateUserProfileError" + case updateUserProfileSuccess = "UpdateUserProfileSuccess" } } } -extension Unions.GetFollowersResult: Decodable { +extension Unions.UpdateUserProfileResult: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -17665,1570 +21203,10 @@ extension Unions.GetFollowersResult: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.GetFollowersErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.UpdateUserProfileErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "followers": - if let value = try container.decode([Objects.User]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - followers = map["followers"] - } -} - -extension Fields where TypeLock == Unions.GetFollowersResult { - func on(getFollowersSuccess: Selection, getFollowersError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "GetFollowersSuccess", selection: getFollowersSuccess.selection), GraphQLField.fragment(type: "GetFollowersError", selection: getFollowersError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .getFollowersSuccess: - let data = Objects.GetFollowersSuccess(followers: data.followers) - return try getFollowersSuccess.decode(data: data) - case .getFollowersError: - let data = Objects.GetFollowersError(errorCodes: data.errorCodes) - return try getFollowersError.decode(data: data) - } - case .mocking: - return getFollowersSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias GetFollowersResult = Selection -} - -extension Unions { - struct GetFollowingResult { - let __typename: TypeName - let errorCodes: [String: [Enums.GetFollowingErrorCode]] - let following: [String: [Objects.User]] - - enum TypeName: String, Codable { - case getFollowingSuccess = "GetFollowingSuccess" - case getFollowingError = "GetFollowingError" - } - } -} - -extension Unions.GetFollowingResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.GetFollowingErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "following": - if let value = try container.decode([Objects.User]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - following = map["following"] - } -} - -extension Fields where TypeLock == Unions.GetFollowingResult { - func on(getFollowingSuccess: Selection, getFollowingError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "GetFollowingSuccess", selection: getFollowingSuccess.selection), GraphQLField.fragment(type: "GetFollowingError", selection: getFollowingError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .getFollowingSuccess: - let data = Objects.GetFollowingSuccess(following: data.following) - return try getFollowingSuccess.decode(data: data) - case .getFollowingError: - let data = Objects.GetFollowingError(errorCodes: data.errorCodes) - return try getFollowingError.decode(data: data) - } - case .mocking: - return getFollowingSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias GetFollowingResult = Selection -} - -extension Unions { - struct GetUserPersonalizationResult { - let __typename: TypeName - let errorCodes: [String: [Enums.GetUserPersonalizationErrorCode]] - let userPersonalization: [String: Objects.UserPersonalization] - - enum TypeName: String, Codable { - case getUserPersonalizationSuccess = "GetUserPersonalizationSuccess" - case getUserPersonalizationError = "GetUserPersonalizationError" - } - } -} - -extension Unions.GetUserPersonalizationResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.GetUserPersonalizationErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "userPersonalization": - if let value = try container.decode(Objects.UserPersonalization?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - userPersonalization = map["userPersonalization"] - } -} - -extension Fields where TypeLock == Unions.GetUserPersonalizationResult { - func on(getUserPersonalizationSuccess: Selection, getUserPersonalizationError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "GetUserPersonalizationSuccess", selection: getUserPersonalizationSuccess.selection), GraphQLField.fragment(type: "GetUserPersonalizationError", selection: getUserPersonalizationError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .getUserPersonalizationSuccess: - let data = Objects.GetUserPersonalizationSuccess(userPersonalization: data.userPersonalization) - return try getUserPersonalizationSuccess.decode(data: data) - case .getUserPersonalizationError: - let data = Objects.GetUserPersonalizationError(errorCodes: data.errorCodes) - return try getUserPersonalizationError.decode(data: data) - } - case .mocking: - return getUserPersonalizationSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias GetUserPersonalizationResult = Selection -} - -extension Unions { - struct SetUserPersonalizationResult { - let __typename: TypeName - let errorCodes: [String: [Enums.SetUserPersonalizationErrorCode]] - let updatedUserPersonalization: [String: Objects.UserPersonalization] - - enum TypeName: String, Codable { - case setUserPersonalizationSuccess = "SetUserPersonalizationSuccess" - case setUserPersonalizationError = "SetUserPersonalizationError" - } - } -} - -extension Unions.SetUserPersonalizationResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SetUserPersonalizationErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "updatedUserPersonalization": - if let value = try container.decode(Objects.UserPersonalization?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - updatedUserPersonalization = map["updatedUserPersonalization"] - } -} - -extension Fields where TypeLock == Unions.SetUserPersonalizationResult { - func on(setUserPersonalizationSuccess: Selection, setUserPersonalizationError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SetUserPersonalizationSuccess", selection: setUserPersonalizationSuccess.selection), GraphQLField.fragment(type: "SetUserPersonalizationError", selection: setUserPersonalizationError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .setUserPersonalizationSuccess: - let data = Objects.SetUserPersonalizationSuccess(updatedUserPersonalization: data.updatedUserPersonalization) - return try setUserPersonalizationSuccess.decode(data: data) - case .setUserPersonalizationError: - let data = Objects.SetUserPersonalizationError(errorCodes: data.errorCodes) - return try setUserPersonalizationError.decode(data: data) - } - case .mocking: - return setUserPersonalizationSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetUserPersonalizationResult = Selection -} - -extension Unions { - struct ArticleSavingRequestResult { - let __typename: TypeName - let articleSavingRequest: [String: Objects.ArticleSavingRequest] - let errorCodes: [String: [Enums.ArticleSavingRequestErrorCode]] - - enum TypeName: String, Codable { - case articleSavingRequestSuccess = "ArticleSavingRequestSuccess" - case articleSavingRequestError = "ArticleSavingRequestError" - } - } -} - -extension Unions.ArticleSavingRequestResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "articleSavingRequest": - if let value = try container.decode(Objects.ArticleSavingRequest?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "errorCodes": - if let value = try container.decode([Enums.ArticleSavingRequestErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - articleSavingRequest = map["articleSavingRequest"] - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Unions.ArticleSavingRequestResult { - func on(articleSavingRequestSuccess: Selection, articleSavingRequestError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "ArticleSavingRequestSuccess", selection: articleSavingRequestSuccess.selection), GraphQLField.fragment(type: "ArticleSavingRequestError", selection: articleSavingRequestError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .articleSavingRequestSuccess: - let data = Objects.ArticleSavingRequestSuccess(articleSavingRequest: data.articleSavingRequest) - return try articleSavingRequestSuccess.decode(data: data) - case .articleSavingRequestError: - let data = Objects.ArticleSavingRequestError(errorCodes: data.errorCodes) - return try articleSavingRequestError.decode(data: data) - } - case .mocking: - return articleSavingRequestSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ArticleSavingRequestResult = Selection -} - -extension Unions { - struct CreateArticleSavingRequestResult { - let __typename: TypeName - let articleSavingRequest: [String: Objects.ArticleSavingRequest] - let errorCodes: [String: [Enums.CreateArticleSavingRequestErrorCode]] - - enum TypeName: String, Codable { - case createArticleSavingRequestSuccess = "CreateArticleSavingRequestSuccess" - case createArticleSavingRequestError = "CreateArticleSavingRequestError" - } - } -} - -extension Unions.CreateArticleSavingRequestResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "articleSavingRequest": - if let value = try container.decode(Objects.ArticleSavingRequest?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "errorCodes": - if let value = try container.decode([Enums.CreateArticleSavingRequestErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - articleSavingRequest = map["articleSavingRequest"] - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Unions.CreateArticleSavingRequestResult { - func on(createArticleSavingRequestSuccess: Selection, createArticleSavingRequestError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "CreateArticleSavingRequestSuccess", selection: createArticleSavingRequestSuccess.selection), GraphQLField.fragment(type: "CreateArticleSavingRequestError", selection: createArticleSavingRequestError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .createArticleSavingRequestSuccess: - let data = Objects.CreateArticleSavingRequestSuccess(articleSavingRequest: data.articleSavingRequest) - return try createArticleSavingRequestSuccess.decode(data: data) - case .createArticleSavingRequestError: - let data = Objects.CreateArticleSavingRequestError(errorCodes: data.errorCodes) - return try createArticleSavingRequestError.decode(data: data) - } - case .mocking: - return createArticleSavingRequestSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateArticleSavingRequestResult = Selection -} - -extension Unions { - struct SetShareHighlightResult { - let __typename: TypeName - let errorCodes: [String: [Enums.SetShareHighlightErrorCode]] - let highlight: [String: Objects.Highlight] - - enum TypeName: String, Codable { - case setShareHighlightSuccess = "SetShareHighlightSuccess" - case setShareHighlightError = "SetShareHighlightError" - } - } -} - -extension Unions.SetShareHighlightResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SetShareHighlightErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "highlight": - if let value = try container.decode(Objects.Highlight?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - highlight = map["highlight"] - } -} - -extension Fields where TypeLock == Unions.SetShareHighlightResult { - func on(setShareHighlightSuccess: Selection, setShareHighlightError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SetShareHighlightSuccess", selection: setShareHighlightSuccess.selection), GraphQLField.fragment(type: "SetShareHighlightError", selection: setShareHighlightError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .setShareHighlightSuccess: - let data = Objects.SetShareHighlightSuccess(highlight: data.highlight) - return try setShareHighlightSuccess.decode(data: data) - case .setShareHighlightError: - let data = Objects.SetShareHighlightError(errorCodes: data.errorCodes) - return try setShareHighlightError.decode(data: data) - } - case .mocking: - return setShareHighlightSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetShareHighlightResult = Selection -} - -extension Unions { - struct UpdateLinkShareInfoResult { - let __typename: TypeName - let errorCodes: [String: [Enums.UpdateLinkShareInfoErrorCode]] - let message: [String: String] - - enum TypeName: String, Codable { - case updateLinkShareInfoSuccess = "UpdateLinkShareInfoSuccess" - case updateLinkShareInfoError = "UpdateLinkShareInfoError" - } - } -} - -extension Unions.UpdateLinkShareInfoResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateLinkShareInfoErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "message": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - message = map["message"] - } -} - -extension Fields where TypeLock == Unions.UpdateLinkShareInfoResult { - func on(updateLinkShareInfoSuccess: Selection, updateLinkShareInfoError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UpdateLinkShareInfoSuccess", selection: updateLinkShareInfoSuccess.selection), GraphQLField.fragment(type: "UpdateLinkShareInfoError", selection: updateLinkShareInfoError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .updateLinkShareInfoSuccess: - let data = Objects.UpdateLinkShareInfoSuccess(message: data.message) - return try updateLinkShareInfoSuccess.decode(data: data) - case .updateLinkShareInfoError: - let data = Objects.UpdateLinkShareInfoError(errorCodes: data.errorCodes) - return try updateLinkShareInfoError.decode(data: data) - } - case .mocking: - return updateLinkShareInfoSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateLinkShareInfoResult = Selection -} - -extension Unions { - struct ArchiveLinkResult { - let __typename: TypeName - let errorCodes: [String: [Enums.ArchiveLinkErrorCode]] - let linkId: [String: String] - let message: [String: String] - - enum TypeName: String, Codable { - case archiveLinkSuccess = "ArchiveLinkSuccess" - case archiveLinkError = "ArchiveLinkError" - } - } -} - -extension Unions.ArchiveLinkResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.ArchiveLinkErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "linkId": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "message": - if let value = try container.decode(String?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - linkId = map["linkId"] - message = map["message"] - } -} - -extension Fields where TypeLock == Unions.ArchiveLinkResult { - func on(archiveLinkSuccess: Selection, archiveLinkError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "ArchiveLinkSuccess", selection: archiveLinkSuccess.selection), GraphQLField.fragment(type: "ArchiveLinkError", selection: archiveLinkError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .archiveLinkSuccess: - let data = Objects.ArchiveLinkSuccess(linkId: data.linkId, message: data.message) - return try archiveLinkSuccess.decode(data: data) - case .archiveLinkError: - let data = Objects.ArchiveLinkError(errorCodes: data.errorCodes, message: data.message) - return try archiveLinkError.decode(data: data) - } - case .mocking: - return archiveLinkSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ArchiveLinkResult = Selection -} - -extension Unions { - struct NewsletterEmailsResult { - let __typename: TypeName - let errorCodes: [String: [Enums.NewsletterEmailsErrorCode]] - let newsletterEmails: [String: [Objects.NewsletterEmail]] - - enum TypeName: String, Codable { - case newsletterEmailsSuccess = "NewsletterEmailsSuccess" - case newsletterEmailsError = "NewsletterEmailsError" - } - } -} - -extension Unions.NewsletterEmailsResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.NewsletterEmailsErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "newsletterEmails": - if let value = try container.decode([Objects.NewsletterEmail]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - newsletterEmails = map["newsletterEmails"] - } -} - -extension Fields where TypeLock == Unions.NewsletterEmailsResult { - func on(newsletterEmailsSuccess: Selection, newsletterEmailsError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "NewsletterEmailsSuccess", selection: newsletterEmailsSuccess.selection), GraphQLField.fragment(type: "NewsletterEmailsError", selection: newsletterEmailsError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .newsletterEmailsSuccess: - let data = Objects.NewsletterEmailsSuccess(newsletterEmails: data.newsletterEmails) - return try newsletterEmailsSuccess.decode(data: data) - case .newsletterEmailsError: - let data = Objects.NewsletterEmailsError(errorCodes: data.errorCodes) - return try newsletterEmailsError.decode(data: data) - } - case .mocking: - return newsletterEmailsSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias NewsletterEmailsResult = Selection -} - -extension Unions { - struct CreateNewsletterEmailResult { - let __typename: TypeName - let errorCodes: [String: [Enums.CreateNewsletterEmailErrorCode]] - let newsletterEmail: [String: Objects.NewsletterEmail] - - enum TypeName: String, Codable { - case createNewsletterEmailSuccess = "CreateNewsletterEmailSuccess" - case createNewsletterEmailError = "CreateNewsletterEmailError" - } - } -} - -extension Unions.CreateNewsletterEmailResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateNewsletterEmailErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "newsletterEmail": - if let value = try container.decode(Objects.NewsletterEmail?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - newsletterEmail = map["newsletterEmail"] - } -} - -extension Fields where TypeLock == Unions.CreateNewsletterEmailResult { - func on(createNewsletterEmailSuccess: Selection, createNewsletterEmailError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "CreateNewsletterEmailSuccess", selection: createNewsletterEmailSuccess.selection), GraphQLField.fragment(type: "CreateNewsletterEmailError", selection: createNewsletterEmailError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .createNewsletterEmailSuccess: - let data = Objects.CreateNewsletterEmailSuccess(newsletterEmail: data.newsletterEmail) - return try createNewsletterEmailSuccess.decode(data: data) - case .createNewsletterEmailError: - let data = Objects.CreateNewsletterEmailError(errorCodes: data.errorCodes) - return try createNewsletterEmailError.decode(data: data) - } - case .mocking: - return createNewsletterEmailSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateNewsletterEmailResult = Selection -} - -extension Unions { - struct DeleteNewsletterEmailResult { - let __typename: TypeName - let errorCodes: [String: [Enums.DeleteNewsletterEmailErrorCode]] - let newsletterEmail: [String: Objects.NewsletterEmail] - - enum TypeName: String, Codable { - case deleteNewsletterEmailSuccess = "DeleteNewsletterEmailSuccess" - case deleteNewsletterEmailError = "DeleteNewsletterEmailError" - } - } -} - -extension Unions.DeleteNewsletterEmailResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.DeleteNewsletterEmailErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "newsletterEmail": - if let value = try container.decode(Objects.NewsletterEmail?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - newsletterEmail = map["newsletterEmail"] - } -} - -extension Fields where TypeLock == Unions.DeleteNewsletterEmailResult { - func on(deleteNewsletterEmailSuccess: Selection, deleteNewsletterEmailError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "DeleteNewsletterEmailSuccess", selection: deleteNewsletterEmailSuccess.selection), GraphQLField.fragment(type: "DeleteNewsletterEmailError", selection: deleteNewsletterEmailError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .deleteNewsletterEmailSuccess: - let data = Objects.DeleteNewsletterEmailSuccess(newsletterEmail: data.newsletterEmail) - return try deleteNewsletterEmailSuccess.decode(data: data) - case .deleteNewsletterEmailError: - let data = Objects.DeleteNewsletterEmailError(errorCodes: data.errorCodes) - return try deleteNewsletterEmailError.decode(data: data) - } - case .mocking: - return deleteNewsletterEmailSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteNewsletterEmailResult = Selection -} - -extension Unions { - struct ReminderResult { - let __typename: TypeName - let errorCodes: [String: [Enums.ReminderErrorCode]] - let reminder: [String: Objects.Reminder] - - enum TypeName: String, Codable { - case reminderSuccess = "ReminderSuccess" - case reminderError = "ReminderError" - } - } -} - -extension Unions.ReminderResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.ReminderErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "reminder": - if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - reminder = map["reminder"] - } -} - -extension Fields where TypeLock == Unions.ReminderResult { - func on(reminderSuccess: Selection, reminderError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "ReminderSuccess", selection: reminderSuccess.selection), GraphQLField.fragment(type: "ReminderError", selection: reminderError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .reminderSuccess: - let data = Objects.ReminderSuccess(reminder: data.reminder) - return try reminderSuccess.decode(data: data) - case .reminderError: - let data = Objects.ReminderError(errorCodes: data.errorCodes) - return try reminderError.decode(data: data) - } - case .mocking: - return reminderSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias ReminderResult = Selection -} - -extension Unions { - struct CreateReminderResult { - let __typename: TypeName - let errorCodes: [String: [Enums.CreateReminderErrorCode]] - let reminder: [String: Objects.Reminder] - - enum TypeName: String, Codable { - case createReminderSuccess = "CreateReminderSuccess" - case createReminderError = "CreateReminderError" - } - } -} - -extension Unions.CreateReminderResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateReminderErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "reminder": - if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - reminder = map["reminder"] - } -} - -extension Fields where TypeLock == Unions.CreateReminderResult { - func on(createReminderSuccess: Selection, createReminderError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "CreateReminderSuccess", selection: createReminderSuccess.selection), GraphQLField.fragment(type: "CreateReminderError", selection: createReminderError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .createReminderSuccess: - let data = Objects.CreateReminderSuccess(reminder: data.reminder) - return try createReminderSuccess.decode(data: data) - case .createReminderError: - let data = Objects.CreateReminderError(errorCodes: data.errorCodes) - return try createReminderError.decode(data: data) - } - case .mocking: - return createReminderSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateReminderResult = Selection -} - -extension Unions { - struct UpdateReminderResult { - let __typename: TypeName - let errorCodes: [String: [Enums.UpdateReminderErrorCode]] - let reminder: [String: Objects.Reminder] - - enum TypeName: String, Codable { - case updateReminderSuccess = "UpdateReminderSuccess" - case updateReminderError = "UpdateReminderError" - } - } -} - -extension Unions.UpdateReminderResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateReminderErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "reminder": - if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - reminder = map["reminder"] - } -} - -extension Fields where TypeLock == Unions.UpdateReminderResult { - func on(updateReminderSuccess: Selection, updateReminderError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UpdateReminderSuccess", selection: updateReminderSuccess.selection), GraphQLField.fragment(type: "UpdateReminderError", selection: updateReminderError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .updateReminderSuccess: - let data = Objects.UpdateReminderSuccess(reminder: data.reminder) - return try updateReminderSuccess.decode(data: data) - case .updateReminderError: - let data = Objects.UpdateReminderError(errorCodes: data.errorCodes) - return try updateReminderError.decode(data: data) - } - case .mocking: - return updateReminderSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateReminderResult = Selection -} - -extension Unions { - struct DeleteReminderResult { - let __typename: TypeName - let errorCodes: [String: [Enums.DeleteReminderErrorCode]] - let reminder: [String: Objects.Reminder] - - enum TypeName: String, Codable { - case deleteReminderSuccess = "DeleteReminderSuccess" - case deleteReminderError = "DeleteReminderError" - } - } -} - -extension Unions.DeleteReminderResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.DeleteReminderErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "reminder": - if let value = try container.decode(Objects.Reminder?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - reminder = map["reminder"] - } -} - -extension Fields where TypeLock == Unions.DeleteReminderResult { - func on(deleteReminderSuccess: Selection, deleteReminderError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "DeleteReminderSuccess", selection: deleteReminderSuccess.selection), GraphQLField.fragment(type: "DeleteReminderError", selection: deleteReminderError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .deleteReminderSuccess: - let data = Objects.DeleteReminderSuccess(reminder: data.reminder) - return try deleteReminderSuccess.decode(data: data) - case .deleteReminderError: - let data = Objects.DeleteReminderError(errorCodes: data.errorCodes) - return try deleteReminderError.decode(data: data) - } - case .mocking: - return deleteReminderSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteReminderResult = Selection -} - -extension Unions { - struct SetDeviceTokenResult { - let __typename: TypeName - let deviceToken: [String: Objects.DeviceToken] - let errorCodes: [String: [Enums.SetDeviceTokenErrorCode]] - - enum TypeName: String, Codable { - case setDeviceTokenSuccess = "SetDeviceTokenSuccess" - case setDeviceTokenError = "SetDeviceTokenError" - } - } -} - -extension Unions.SetDeviceTokenResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "deviceToken": - if let value = try container.decode(Objects.DeviceToken?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "errorCodes": - if let value = try container.decode([Enums.SetDeviceTokenErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - deviceToken = map["deviceToken"] - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Unions.SetDeviceTokenResult { - func on(setDeviceTokenSuccess: Selection, setDeviceTokenError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SetDeviceTokenSuccess", selection: setDeviceTokenSuccess.selection), GraphQLField.fragment(type: "SetDeviceTokenError", selection: setDeviceTokenError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .setDeviceTokenSuccess: - let data = Objects.SetDeviceTokenSuccess(deviceToken: data.deviceToken) - return try setDeviceTokenSuccess.decode(data: data) - case .setDeviceTokenError: - let data = Objects.SetDeviceTokenError(errorCodes: data.errorCodes) - return try setDeviceTokenError.decode(data: data) - } - case .mocking: - return setDeviceTokenSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SetDeviceTokenResult = Selection -} - -extension Unions { - struct LabelsResult { - let __typename: TypeName - let errorCodes: [String: [Enums.LabelsErrorCode]] - let labels: [String: [Objects.Label]] - - enum TypeName: String, Codable { - case labelsSuccess = "LabelsSuccess" - case labelsError = "LabelsError" - } - } -} - -extension Unions.LabelsResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.LabelsErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "labels": - if let value = try container.decode([Objects.Label]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - labels = map["labels"] - } -} - -extension Fields where TypeLock == Unions.LabelsResult { - func on(labelsSuccess: Selection, labelsError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "LabelsSuccess", selection: labelsSuccess.selection), GraphQLField.fragment(type: "LabelsError", selection: labelsError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .labelsSuccess: - let data = Objects.LabelsSuccess(labels: data.labels) - return try labelsSuccess.decode(data: data) - case .labelsError: - let data = Objects.LabelsError(errorCodes: data.errorCodes) - return try labelsError.decode(data: data) - } - case .mocking: - return labelsSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias LabelsResult = Selection -} - -extension Unions { - struct CreateLabelResult { - let __typename: TypeName - let errorCodes: [String: [Enums.CreateLabelErrorCode]] - let label: [String: Objects.Label] - - enum TypeName: String, Codable { - case createLabelSuccess = "CreateLabelSuccess" - case createLabelError = "CreateLabelError" - } - } -} - -extension Unions.CreateLabelResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.CreateLabelErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "label": - if let value = try container.decode(Objects.Label?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - label = map["label"] - } -} - -extension Fields where TypeLock == Unions.CreateLabelResult { - func on(createLabelSuccess: Selection, createLabelError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "CreateLabelSuccess", selection: createLabelSuccess.selection), GraphQLField.fragment(type: "CreateLabelError", selection: createLabelError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .createLabelSuccess: - let data = Objects.CreateLabelSuccess(label: data.label) - return try createLabelSuccess.decode(data: data) - case .createLabelError: - let data = Objects.CreateLabelError(errorCodes: data.errorCodes) - return try createLabelError.decode(data: data) - } - case .mocking: - return createLabelSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias CreateLabelResult = Selection -} - -extension Unions { - struct DeleteLabelResult { - let __typename: TypeName - let errorCodes: [String: [Enums.DeleteLabelErrorCode]] - let label: [String: Objects.Label] - - enum TypeName: String, Codable { - case deleteLabelSuccess = "DeleteLabelSuccess" - case deleteLabelError = "DeleteLabelError" - } - } -} - -extension Unions.DeleteLabelResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.DeleteLabelErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "label": - if let value = try container.decode(Objects.Label?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - label = map["label"] - } -} - -extension Fields where TypeLock == Unions.DeleteLabelResult { - func on(deleteLabelSuccess: Selection, deleteLabelError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "DeleteLabelSuccess", selection: deleteLabelSuccess.selection), GraphQLField.fragment(type: "DeleteLabelError", selection: deleteLabelError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .deleteLabelSuccess: - let data = Objects.DeleteLabelSuccess(label: data.label) - return try deleteLabelSuccess.decode(data: data) - case .deleteLabelError: - let data = Objects.DeleteLabelError(errorCodes: data.errorCodes) - return try deleteLabelError.decode(data: data) - } - case .mocking: - return deleteLabelSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias DeleteLabelResult = Selection -} - -extension Unions { - struct UpdateLabelResult { - let __typename: TypeName - let errorCodes: [String: [Enums.UpdateLabelErrorCode]] - let label: [String: Objects.Label] - - enum TypeName: String, Codable { - case updateLabelSuccess = "UpdateLabelSuccess" - case updateLabelError = "UpdateLabelError" - } - } -} - -extension Unions.UpdateLabelResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UpdateLabelErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "label": - if let value = try container.decode(Objects.Label?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - label = map["label"] - } -} - -extension Fields where TypeLock == Unions.UpdateLabelResult { - func on(updateLabelSuccess: Selection, updateLabelError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UpdateLabelSuccess", selection: updateLabelSuccess.selection), GraphQLField.fragment(type: "UpdateLabelError", selection: updateLabelError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .updateLabelSuccess: - let data = Objects.UpdateLabelSuccess(label: data.label) - return try updateLabelSuccess.decode(data: data) - case .updateLabelError: - let data = Objects.UpdateLabelError(errorCodes: data.errorCodes) - return try updateLabelError.decode(data: data) - } - case .mocking: - return updateLabelSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UpdateLabelResult = Selection -} - -extension Unions { - struct SignupResult { - let __typename: TypeName - let errorCodes: [String: [Enums.SignupErrorCode?]] - let me: [String: Objects.User] - - enum TypeName: String, Codable { - case signupSuccess = "SignupSuccess" - case signupError = "SignupError" - } - } -} - -extension Unions.SignupResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SignupErrorCode?]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "me": + case "user": if let value = try container.decode(Objects.User?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } @@ -19245,48 +21223,48 @@ extension Unions.SignupResult: Decodable { __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) errorCodes = map["errorCodes"] - me = map["me"] + user = map["user"] } } -extension Fields where TypeLock == Unions.SignupResult { - func on(signupSuccess: Selection, signupError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SignupSuccess", selection: signupSuccess.selection), GraphQLField.fragment(type: "SignupError", selection: signupError.selection)]) +extension Fields where TypeLock == Unions.UpdateUserProfileResult { + func on(updateUserProfileError: Selection, updateUserProfileSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UpdateUserProfileError", selection: updateUserProfileError.selection), GraphQLField.fragment(type: "UpdateUserProfileSuccess", selection: updateUserProfileSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .signupSuccess: - let data = Objects.SignupSuccess(me: data.me) - return try signupSuccess.decode(data: data) - case .signupError: - let data = Objects.SignupError(errorCodes: data.errorCodes) - return try signupError.decode(data: data) + case .updateUserProfileError: + let data = Objects.UpdateUserProfileError(errorCodes: data.errorCodes) + return try updateUserProfileError.decode(data: data) + case .updateUserProfileSuccess: + let data = Objects.UpdateUserProfileSuccess(user: data.user) + return try updateUserProfileSuccess.decode(data: data) } case .mocking: - return signupSuccess.mock() + return updateUserProfileError.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias SignupResult = Selection + typealias UpdateUserProfileResult = Selection } extension Unions { - struct SetLabelsResult { + struct UpdateUserResult { let __typename: TypeName - let errorCodes: [String: [Enums.SetLabelsErrorCode]] - let labels: [String: [Objects.Label]] + let errorCodes: [String: [Enums.UpdateUserErrorCode]] + let user: [String: Objects.User] enum TypeName: String, Codable { - case setLabelsSuccess = "SetLabelsSuccess" - case setLabelsError = "SetLabelsError" + case updateUserError = "UpdateUserError" + case updateUserSuccess = "UpdateUserSuccess" } } } -extension Unions.SetLabelsResult: Decodable { +extension Unions.UpdateUserResult: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -19299,11 +21277,11 @@ extension Unions.SetLabelsResult: Decodable { switch field { case "errorCodes": - if let value = try container.decode([Enums.SetLabelsErrorCode]?.self, forKey: codingKey) { + if let value = try container.decode([Enums.UpdateUserErrorCode]?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "labels": - if let value = try container.decode([Objects.Label]?.self, forKey: codingKey) { + case "user": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } default: @@ -19319,48 +21297,50 @@ extension Unions.SetLabelsResult: Decodable { __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) errorCodes = map["errorCodes"] - labels = map["labels"] + user = map["user"] } } -extension Fields where TypeLock == Unions.SetLabelsResult { - func on(setLabelsSuccess: Selection, setLabelsError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SetLabelsSuccess", selection: setLabelsSuccess.selection), GraphQLField.fragment(type: "SetLabelsError", selection: setLabelsError.selection)]) +extension Fields where TypeLock == Unions.UpdateUserResult { + func on(updateUserError: Selection, updateUserSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UpdateUserError", selection: updateUserError.selection), GraphQLField.fragment(type: "UpdateUserSuccess", selection: updateUserSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .setLabelsSuccess: - let data = Objects.SetLabelsSuccess(labels: data.labels) - return try setLabelsSuccess.decode(data: data) - case .setLabelsError: - let data = Objects.SetLabelsError(errorCodes: data.errorCodes) - return try setLabelsError.decode(data: data) + case .updateUserError: + let data = Objects.UpdateUserError(errorCodes: data.errorCodes) + return try updateUserError.decode(data: data) + case .updateUserSuccess: + let data = Objects.UpdateUserSuccess(user: data.user) + return try updateUserSuccess.decode(data: data) } case .mocking: - return setLabelsSuccess.mock() + return updateUserError.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias SetLabelsResult = Selection + typealias UpdateUserResult = Selection } extension Unions { - struct GenerateApiKeyResult { + struct UploadFileRequestResult { let __typename: TypeName - let apiKey: [String: String] - let errorCodes: [String: [Enums.GenerateApiKeyErrorCode]] + let errorCodes: [String: [Enums.UploadFileRequestErrorCode]] + let id: [String: String] + let uploadFileId: [String: String] + let uploadSignedUrl: [String: String] enum TypeName: String, Codable { - case generateApiKeySuccess = "GenerateApiKeySuccess" - case generateApiKeyError = "GenerateApiKeyError" + case uploadFileRequestError = "UploadFileRequestError" + case uploadFileRequestSuccess = "UploadFileRequestSuccess" } } } -extension Unions.GenerateApiKeyResult: Decodable { +extension Unions.UploadFileRequestResult: Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: DynamicCodingKeys.self) @@ -19372,387 +21352,19 @@ extension Unions.GenerateApiKeyResult: Decodable { let field = GraphQLField.getFieldNameFromAlias(alias) switch field { - case "apiKey": + case "errorCodes": + if let value = try container.decode([Enums.UploadFileRequestErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "id": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - case "errorCodes": - if let value = try container.decode([Enums.GenerateApiKeyErrorCode]?.self, forKey: codingKey) { + case "uploadFileId": + if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - apiKey = map["apiKey"] - errorCodes = map["errorCodes"] - } -} - -extension Fields where TypeLock == Unions.GenerateApiKeyResult { - func on(generateApiKeySuccess: Selection, generateApiKeyError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "GenerateApiKeySuccess", selection: generateApiKeySuccess.selection), GraphQLField.fragment(type: "GenerateApiKeyError", selection: generateApiKeyError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .generateApiKeySuccess: - let data = Objects.GenerateApiKeySuccess(apiKey: data.apiKey) - return try generateApiKeySuccess.decode(data: data) - case .generateApiKeyError: - let data = Objects.GenerateApiKeyError(errorCodes: data.errorCodes) - return try generateApiKeyError.decode(data: data) - } - case .mocking: - return generateApiKeySuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias GenerateApiKeyResult = Selection -} - -extension Unions { - struct SearchResult { - let __typename: TypeName - let edges: [String: [Objects.SearchItemEdge]] - let errorCodes: [String: [Enums.SearchErrorCode]] - let pageInfo: [String: Objects.PageInfo] - - enum TypeName: String, Codable { - case searchSuccess = "SearchSuccess" - case searchError = "SearchError" - } - } -} - -extension Unions.SearchResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "edges": - if let value = try container.decode([Objects.SearchItemEdge]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "errorCodes": - if let value = try container.decode([Enums.SearchErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "pageInfo": - if let value = try container.decode(Objects.PageInfo?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - edges = map["edges"] - errorCodes = map["errorCodes"] - pageInfo = map["pageInfo"] - } -} - -extension Fields where TypeLock == Unions.SearchResult { - func on(searchSuccess: Selection, searchError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SearchSuccess", selection: searchSuccess.selection), GraphQLField.fragment(type: "SearchError", selection: searchError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .searchSuccess: - let data = Objects.SearchSuccess(edges: data.edges, pageInfo: data.pageInfo) - return try searchSuccess.decode(data: data) - case .searchError: - let data = Objects.SearchError(errorCodes: data.errorCodes) - return try searchError.decode(data: data) - } - case .mocking: - return searchSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SearchResult = Selection -} - -extension Unions { - struct SubscriptionsResult { - let __typename: TypeName - let errorCodes: [String: [Enums.SubscriptionsErrorCode]] - let subscriptions: [String: [Objects.Subscription]] - - enum TypeName: String, Codable { - case subscriptionsSuccess = "SubscriptionsSuccess" - case subscriptionsError = "SubscriptionsError" - } - } -} - -extension Unions.SubscriptionsResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SubscriptionsErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "subscriptions": - if let value = try container.decode([Objects.Subscription]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - subscriptions = map["subscriptions"] - } -} - -extension Fields where TypeLock == Unions.SubscriptionsResult { - func on(subscriptionsSuccess: Selection, subscriptionsError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SubscriptionsSuccess", selection: subscriptionsSuccess.selection), GraphQLField.fragment(type: "SubscriptionsError", selection: subscriptionsError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .subscriptionsSuccess: - let data = Objects.SubscriptionsSuccess(subscriptions: data.subscriptions) - return try subscriptionsSuccess.decode(data: data) - case .subscriptionsError: - let data = Objects.SubscriptionsError(errorCodes: data.errorCodes) - return try subscriptionsError.decode(data: data) - } - case .mocking: - return subscriptionsSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SubscriptionsResult = Selection -} - -extension Unions { - struct UnsubscribeResult { - let __typename: TypeName - let errorCodes: [String: [Enums.UnsubscribeErrorCode]] - let subscription: [String: Objects.Subscription] - - enum TypeName: String, Codable { - case unsubscribeSuccess = "UnsubscribeSuccess" - case unsubscribeError = "UnsubscribeError" - } - } -} - -extension Unions.UnsubscribeResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.UnsubscribeErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "subscription": - if let value = try container.decode(Objects.Subscription?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - subscription = map["subscription"] - } -} - -extension Fields where TypeLock == Unions.UnsubscribeResult { - func on(unsubscribeSuccess: Selection, unsubscribeError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "UnsubscribeSuccess", selection: unsubscribeSuccess.selection), GraphQLField.fragment(type: "UnsubscribeError", selection: unsubscribeError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .unsubscribeSuccess: - let data = Objects.UnsubscribeSuccess(subscription: data.subscription) - return try unsubscribeSuccess.decode(data: data) - case .unsubscribeError: - let data = Objects.UnsubscribeError(errorCodes: data.errorCodes) - return try unsubscribeError.decode(data: data) - } - case .mocking: - return unsubscribeSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias UnsubscribeResult = Selection -} - -extension Unions { - struct SubscribeResult { - let __typename: TypeName - let errorCodes: [String: [Enums.SubscribeErrorCode]] - let subscriptions: [String: [Objects.Subscription]] - - enum TypeName: String, Codable { - case subscribeSuccess = "SubscribeSuccess" - case subscribeError = "SubscribeError" - } - } -} - -extension Unions.SubscribeResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.SubscribeErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "subscriptions": - if let value = try container.decode([Objects.Subscription]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - default: - throw DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: decoder.codingPath, - debugDescription: "Unknown key \(field)." - ) - ) - } - } - - __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) - - errorCodes = map["errorCodes"] - subscriptions = map["subscriptions"] - } -} - -extension Fields where TypeLock == Unions.SubscribeResult { - func on(subscribeSuccess: Selection, subscribeError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "SubscribeSuccess", selection: subscribeSuccess.selection), GraphQLField.fragment(type: "SubscribeError", selection: subscribeError.selection)]) - - switch response { - case let .decoding(data): - switch data.__typename { - case .subscribeSuccess: - let data = Objects.SubscribeSuccess(subscriptions: data.subscriptions) - return try subscribeSuccess.decode(data: data) - case .subscribeError: - let data = Objects.SubscribeError(errorCodes: data.errorCodes) - return try subscribeError.decode(data: data) - } - case .mocking: - return subscribeSuccess.mock() - } - } -} - -extension Selection where TypeLock == Never, Type == Never { - typealias SubscribeResult = Selection -} - -extension Unions { - struct AddPopularReadResult { - let __typename: TypeName - let errorCodes: [String: [Enums.AddPopularReadErrorCode]] - let pageId: [String: String] - - enum TypeName: String, Codable { - case addPopularReadSuccess = "AddPopularReadSuccess" - case addPopularReadError = "AddPopularReadError" - } - } -} - -extension Unions.AddPopularReadResult: Decodable { - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: DynamicCodingKeys.self) - - var map = HashMap() - for codingKey in container.allKeys { - if codingKey.isTypenameKey { continue } - - let alias = codingKey.stringValue - let field = GraphQLField.getFieldNameFromAlias(alias) - - switch field { - case "errorCodes": - if let value = try container.decode([Enums.AddPopularReadErrorCode]?.self, forKey: codingKey) { - map.set(key: field, hash: alias, value: value as Any) - } - case "pageId": + case "uploadSignedUrl": if let value = try container.decode(String?.self, forKey: codingKey) { map.set(key: field, hash: alias, value: value as Any) } @@ -19769,208 +21381,392 @@ extension Unions.AddPopularReadResult: Decodable { __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) errorCodes = map["errorCodes"] - pageId = map["pageId"] + id = map["id"] + uploadFileId = map["uploadFileId"] + uploadSignedUrl = map["uploadSignedUrl"] } } -extension Fields where TypeLock == Unions.AddPopularReadResult { - func on(addPopularReadSuccess: Selection, addPopularReadError: Selection) throws -> Type { - select([GraphQLField.fragment(type: "AddPopularReadSuccess", selection: addPopularReadSuccess.selection), GraphQLField.fragment(type: "AddPopularReadError", selection: addPopularReadError.selection)]) +extension Fields where TypeLock == Unions.UploadFileRequestResult { + func on(uploadFileRequestError: Selection, uploadFileRequestSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UploadFileRequestError", selection: uploadFileRequestError.selection), GraphQLField.fragment(type: "UploadFileRequestSuccess", selection: uploadFileRequestSuccess.selection)]) switch response { case let .decoding(data): switch data.__typename { - case .addPopularReadSuccess: - let data = Objects.AddPopularReadSuccess(pageId: data.pageId) - return try addPopularReadSuccess.decode(data: data) - case .addPopularReadError: - let data = Objects.AddPopularReadError(errorCodes: data.errorCodes) - return try addPopularReadError.decode(data: data) + case .uploadFileRequestError: + let data = Objects.UploadFileRequestError(errorCodes: data.errorCodes) + return try uploadFileRequestError.decode(data: data) + case .uploadFileRequestSuccess: + let data = Objects.UploadFileRequestSuccess(id: data.id, uploadFileId: data.uploadFileId, uploadSignedUrl: data.uploadSignedUrl) + return try uploadFileRequestSuccess.decode(data: data) } case .mocking: - return addPopularReadSuccess.mock() + return uploadFileRequestError.mock() } } } extension Selection where TypeLock == Never, Type == Never { - typealias AddPopularReadResult = Selection + typealias UploadFileRequestResult = Selection +} + +extension Unions { + struct UserResult { + let __typename: TypeName + let errorCodes: [String: [Enums.UserErrorCode]] + let user: [String: Objects.User] + + enum TypeName: String, Codable { + case userError = "UserError" + case userSuccess = "UserSuccess" + } + } +} + +extension Unions.UserResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UserErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "user": + if let value = try container.decode(Objects.User?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + user = map["user"] + } +} + +extension Fields where TypeLock == Unions.UserResult { + func on(userError: Selection, userSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UserError", selection: userError.selection), GraphQLField.fragment(type: "UserSuccess", selection: userSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .userError: + let data = Objects.UserError(errorCodes: data.errorCodes) + return try userError.decode(data: data) + case .userSuccess: + let data = Objects.UserSuccess(user: data.user) + return try userSuccess.decode(data: data) + } + case .mocking: + return userError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UserResult = Selection +} + +extension Unions { + struct UsersResult { + let __typename: TypeName + let errorCodes: [String: [Enums.UsersErrorCode]] + let users: [String: [Objects.User]] + + enum TypeName: String, Codable { + case usersError = "UsersError" + case usersSuccess = "UsersSuccess" + } + } +} + +extension Unions.UsersResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.UsersErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "users": + if let value = try container.decode([Objects.User]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + users = map["users"] + } +} + +extension Fields where TypeLock == Unions.UsersResult { + func on(usersError: Selection, usersSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "UsersError", selection: usersError.selection), GraphQLField.fragment(type: "UsersSuccess", selection: usersSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .usersError: + let data = Objects.UsersError(errorCodes: data.errorCodes) + return try usersError.decode(data: data) + case .usersSuccess: + let data = Objects.UsersSuccess(users: data.users) + return try usersSuccess.decode(data: data) + } + case .mocking: + return usersError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias UsersResult = Selection +} + +extension Unions { + struct WebhookResult { + let __typename: TypeName + let errorCodes: [String: [Enums.WebhookErrorCode]] + let webhook: [String: Objects.Webhook] + + enum TypeName: String, Codable { + case webhookError = "WebhookError" + case webhookSuccess = "WebhookSuccess" + } + } +} + +extension Unions.WebhookResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.WebhookErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "webhook": + if let value = try container.decode(Objects.Webhook?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + webhook = map["webhook"] + } +} + +extension Fields where TypeLock == Unions.WebhookResult { + func on(webhookError: Selection, webhookSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "WebhookError", selection: webhookError.selection), GraphQLField.fragment(type: "WebhookSuccess", selection: webhookSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .webhookError: + let data = Objects.WebhookError(errorCodes: data.errorCodes) + return try webhookError.decode(data: data) + case .webhookSuccess: + let data = Objects.WebhookSuccess(webhook: data.webhook) + return try webhookSuccess.decode(data: data) + } + case .mocking: + return webhookError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias WebhookResult = Selection +} + +extension Unions { + struct WebhooksResult { + let __typename: TypeName + let errorCodes: [String: [Enums.WebhooksErrorCode]] + let webhooks: [String: [Objects.Webhook]] + + enum TypeName: String, Codable { + case webhooksError = "WebhooksError" + case webhooksSuccess = "WebhooksSuccess" + } + } +} + +extension Unions.WebhooksResult: Decodable { + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: DynamicCodingKeys.self) + + var map = HashMap() + for codingKey in container.allKeys { + if codingKey.isTypenameKey { continue } + + let alias = codingKey.stringValue + let field = GraphQLField.getFieldNameFromAlias(alias) + + switch field { + case "errorCodes": + if let value = try container.decode([Enums.WebhooksErrorCode]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + case "webhooks": + if let value = try container.decode([Objects.Webhook]?.self, forKey: codingKey) { + map.set(key: field, hash: alias, value: value as Any) + } + default: + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unknown key \(field)." + ) + ) + } + } + + __typename = try container.decode(TypeName.self, forKey: DynamicCodingKeys(stringValue: "__typename")!) + + errorCodes = map["errorCodes"] + webhooks = map["webhooks"] + } +} + +extension Fields where TypeLock == Unions.WebhooksResult { + func on(webhooksError: Selection, webhooksSuccess: Selection) throws -> Type { + select([GraphQLField.fragment(type: "WebhooksError", selection: webhooksError.selection), GraphQLField.fragment(type: "WebhooksSuccess", selection: webhooksSuccess.selection)]) + + switch response { + case let .decoding(data): + switch data.__typename { + case .webhooksError: + let data = Objects.WebhooksError(errorCodes: data.errorCodes) + return try webhooksError.decode(data: data) + case .webhooksSuccess: + let data = Objects.WebhooksSuccess(webhooks: data.webhooks) + return try webhooksSuccess.decode(data: data) + } + case .mocking: + return webhooksError.mock() + } + } +} + +extension Selection where TypeLock == Never, Type == Never { + typealias WebhooksResult = Selection } // MARK: - Enums enum Enums {} extension Enums { - /// SortOrder - enum SortOrder: String, CaseIterable, Codable { - case ascending = "ASCENDING" - - case descending = "DESCENDING" - } -} - -extension Enums { - /// ReactionType - enum ReactionType: String, CaseIterable, Codable { - case like = "LIKE" - - case heart = "HEART" - - case smile = "SMILE" - - case hushed = "HUSHED" - - case crying = "CRYING" - - case pout = "POUT" - } -} - -extension Enums { - /// SortBy - enum SortBy: String, CaseIterable, Codable { - case updatedTime = "UPDATED_TIME" - - case score = "SCORE" - - case savedAt = "SAVED_AT" - - case publishedAt = "PUBLISHED_AT" - } -} - -extension Enums { - /// ContentReader - enum ContentReader: String, CaseIterable, Codable { - case web = "WEB" - - case pdf = "PDF" - } -} - -extension Enums { - /// UserErrorCode - enum UserErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case userNotFound = "USER_NOT_FOUND" - + /// AddPopularReadErrorCode + enum AddPopularReadErrorCode: String, CaseIterable, Codable { case badRequest = "BAD_REQUEST" - } -} -extension Enums { - /// UsersErrorCode - enum UsersErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - } -} - -extension Enums { - /// LoginErrorCode - enum LoginErrorCode: String, CaseIterable, Codable { - case authFailed = "AUTH_FAILED" - - case userAlreadyExists = "USER_ALREADY_EXISTS" - - case invalidCredentials = "INVALID_CREDENTIALS" - - case userNotFound = "USER_NOT_FOUND" - - case wrongSource = "WRONG_SOURCE" - - case accessDenied = "ACCESS_DENIED" - } -} - -extension Enums { - /// SignupErrorCode - enum SignupErrorCode: String, CaseIterable, Codable { - case unknown = "UNKNOWN" - - case accessDenied = "ACCESS_DENIED" - - case googleAuthError = "GOOGLE_AUTH_ERROR" - - case invalidUsername = "INVALID_USERNAME" - - case userExists = "USER_EXISTS" - - case expiredToken = "EXPIRED_TOKEN" - - case invalidPassword = "INVALID_PASSWORD" - } -} - -extension Enums { - /// LogOutErrorCode - enum LogOutErrorCode: String, CaseIterable, Codable { - case logOutFailed = "LOG_OUT_FAILED" - } -} - -extension Enums { - /// UpdateUserErrorCode - enum UpdateUserErrorCode: String, CaseIterable, Codable { - case emptyName = "EMPTY_NAME" - - case bioTooLong = "BIO_TOO_LONG" - - case userNotFound = "USER_NOT_FOUND" + case notFound = "NOT_FOUND" case unauthorized = "UNAUTHORIZED" } } extension Enums { - /// UpdateUserProfileErrorCode - enum UpdateUserProfileErrorCode: String, CaseIterable, Codable { + /// ApiKeysErrorCode + enum ApiKeysErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + case unauthorized = "UNAUTHORIZED" - - case forbidden = "FORBIDDEN" - - case badData = "BAD_DATA" - - case badUsername = "BAD_USERNAME" - - case usernameExists = "USERNAME_EXISTS" } } extension Enums { - /// PageType - enum PageType: String, CaseIterable, Codable { - case article = "ARTICLE" + /// ArchiveLinkErrorCode + enum ArchiveLinkErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" - case book = "BOOK" - - case file = "FILE" - - case profile = "PROFILE" - - case website = "WEBSITE" - - case highlights = "HIGHLIGHTS" - - case unknown = "UNKNOWN" + case unauthorized = "UNAUTHORIZED" } } extension Enums { /// ArticleErrorCode enum ArticleErrorCode: String, CaseIterable, Codable { - case notFound = "NOT_FOUND" - case badData = "BAD_DATA" + case notFound = "NOT_FOUND" + case unauthorized = "UNAUTHORIZED" } } extension Enums { - /// SharedArticleErrorCode - enum SharedArticleErrorCode: String, CaseIterable, Codable { + /// ArticleSavingRequestErrorCode + enum ArticleSavingRequestErrorCode: String, CaseIterable, Codable { case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// ArticleSavingRequestStatus + enum ArticleSavingRequestStatus: String, CaseIterable, Codable { + case failed = "FAILED" + + case processing = "PROCESSING" + + case succeeded = "SUCCEEDED" } } @@ -19982,209 +21778,192 @@ extension Enums { } extension Enums { - /// UploadFileStatus - enum UploadFileStatus: String, CaseIterable, Codable { - case initialized = "INITIALIZED" + /// ContentReader + enum ContentReader: String, CaseIterable, Codable { + case pdf = "PDF" - case completed = "COMPLETED" - } -} - -extension Enums { - /// UploadFileRequestErrorCode - enum UploadFileRequestErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case badInput = "BAD_INPUT" - - case failedCreate = "FAILED_CREATE" + case web = "WEB" } } extension Enums { /// CreateArticleErrorCode enum CreateArticleErrorCode: String, CaseIterable, Codable { + case elasticError = "ELASTIC_ERROR" + + case notAllowedToParse = "NOT_ALLOWED_TO_PARSE" + + case payloadTooLarge = "PAYLOAD_TOO_LARGE" + case unableToFetch = "UNABLE_TO_FETCH" case unableToParse = "UNABLE_TO_PARSE" case unauthorized = "UNAUTHORIZED" - case notAllowedToParse = "NOT_ALLOWED_TO_PARSE" - - case payloadTooLarge = "PAYLOAD_TOO_LARGE" - case uploadFileMissing = "UPLOAD_FILE_MISSING" - - case elasticError = "ELASTIC_ERROR" } } extension Enums { - /// SaveErrorCode - enum SaveErrorCode: String, CaseIterable, Codable { - case unknown = "UNKNOWN" - - case unauthorized = "UNAUTHORIZED" - } -} - -extension Enums { - /// UpdatePageErrorCode - enum UpdatePageErrorCode: String, CaseIterable, Codable { - case updateFailed = "UPDATE_FAILED" - - case unauthorized = "UNAUTHORIZED" - - case badRequest = "BAD_REQUEST" - - case notFound = "NOT_FOUND" - - case forbidden = "FORBIDDEN" - } -} - -extension Enums { - /// SetFollowErrorCode - enum SetFollowErrorCode: String, CaseIterable, Codable { - case notFound = "NOT_FOUND" - - case unauthorized = "UNAUTHORIZED" - } -} - -extension Enums { - /// SaveArticleReadingProgressErrorCode - enum SaveArticleReadingProgressErrorCode: String, CaseIterable, Codable { - case notFound = "NOT_FOUND" - + /// CreateArticleSavingRequestErrorCode + enum CreateArticleSavingRequestErrorCode: String, CaseIterable, Codable { case badData = "BAD_DATA" case unauthorized = "UNAUTHORIZED" } } -extension Enums { - /// SetBookmarkArticleErrorCode - enum SetBookmarkArticleErrorCode: String, CaseIterable, Codable { - case notFound = "NOT_FOUND" - - case bookmarkExists = "BOOKMARK_EXISTS" - } -} - extension Enums { /// CreateHighlightErrorCode enum CreateHighlightErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case forbidden = "FORBIDDEN" - - case badData = "BAD_DATA" - - case notFound = "NOT_FOUND" - case alreadyExists = "ALREADY_EXISTS" - } -} - -extension Enums { - /// MergeHighlightErrorCode - enum MergeHighlightErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case forbidden = "FORBIDDEN" case badData = "BAD_DATA" - case notFound = "NOT_FOUND" - - case alreadyExists = "ALREADY_EXISTS" - } -} - -extension Enums { - /// UpdateHighlightErrorCode - enum UpdateHighlightErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - case forbidden = "FORBIDDEN" case notFound = "NOT_FOUND" - case badData = "BAD_DATA" - } -} - -extension Enums { - /// DeleteHighlightErrorCode - enum DeleteHighlightErrorCode: String, CaseIterable, Codable { case unauthorized = "UNAUTHORIZED" - - case forbidden = "FORBIDDEN" - - case notFound = "NOT_FOUND" } } extension Enums { /// CreateHighlightReplyErrorCode enum CreateHighlightReplyErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case forbidden = "FORBIDDEN" - - case notFound = "NOT_FOUND" - case emptyAnnotation = "EMPTY_ANNOTATION" - } -} - -extension Enums { - /// UpdateHighlightReplyErrorCode - enum UpdateHighlightReplyErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" case forbidden = "FORBIDDEN" case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" } } extension Enums { - /// DeleteHighlightReplyErrorCode - enum DeleteHighlightReplyErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" + /// CreateLabelErrorCode + enum CreateLabelErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" - case forbidden = "FORBIDDEN" + case labelAlreadyExists = "LABEL_ALREADY_EXISTS" case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// CreateNewsletterEmailErrorCode + enum CreateNewsletterEmailErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case unauthorized = "UNAUTHORIZED" } } extension Enums { /// CreateReactionErrorCode enum CreateReactionErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case forbidden = "FORBIDDEN" + case badCode = "BAD_CODE" case badTarget = "BAD_TARGET" - case badCode = "BAD_CODE" + case forbidden = "FORBIDDEN" case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// CreateReminderErrorCode + enum CreateReminderErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// DeleteHighlightErrorCode + enum DeleteHighlightErrorCode: String, CaseIterable, Codable { + case forbidden = "FORBIDDEN" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// DeleteHighlightReplyErrorCode + enum DeleteHighlightReplyErrorCode: String, CaseIterable, Codable { + case forbidden = "FORBIDDEN" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// DeleteLabelErrorCode + enum DeleteLabelErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// DeleteNewsletterEmailErrorCode + enum DeleteNewsletterEmailErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" } } extension Enums { /// DeleteReactionErrorCode enum DeleteReactionErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - case forbidden = "FORBIDDEN" case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// DeleteReminderErrorCode + enum DeleteReminderErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// DeleteWebhookErrorCode + enum DeleteWebhookErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" } } @@ -20196,18 +21975,11 @@ extension Enums { } extension Enums { - /// SetShareArticleErrorCode - enum SetShareArticleErrorCode: String, CaseIterable, Codable { - case notFound = "NOT_FOUND" + /// GenerateApiKeyErrorCode + enum GenerateApiKeyErrorCode: String, CaseIterable, Codable { + case alreadyExists = "ALREADY_EXISTS" - case unauthorized = "UNAUTHORIZED" - } -} - -extension Enums { - /// UpdateSharedCommentErrorCode - enum UpdateSharedCommentErrorCode: String, CaseIterable, Codable { - case notFound = "NOT_FOUND" + case badRequest = "BAD_REQUEST" case unauthorized = "UNAUTHORIZED" } @@ -20235,230 +22007,152 @@ extension Enums { } extension Enums { - /// SetUserPersonalizationErrorCode - enum SetUserPersonalizationErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - } -} - -extension Enums { - /// ArticleSavingRequestStatus - enum ArticleSavingRequestStatus: String, CaseIterable, Codable { - case processing = "PROCESSING" - - case succeeded = "SUCCEEDED" - - case failed = "FAILED" - } -} - -extension Enums { - /// ArticleSavingRequestErrorCode - enum ArticleSavingRequestErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" + /// LabelsErrorCode + enum LabelsErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" } } extension Enums { - /// CreateArticleSavingRequestErrorCode - enum CreateArticleSavingRequestErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" + /// LoginErrorCode + enum LoginErrorCode: String, CaseIterable, Codable { + case accessDenied = "ACCESS_DENIED" + + case authFailed = "AUTH_FAILED" + + case invalidCredentials = "INVALID_CREDENTIALS" + + case userAlreadyExists = "USER_ALREADY_EXISTS" + + case userNotFound = "USER_NOT_FOUND" + + case wrongSource = "WRONG_SOURCE" + } +} + +extension Enums { + /// LogOutErrorCode + enum LogOutErrorCode: String, CaseIterable, Codable { + case logOutFailed = "LOG_OUT_FAILED" + } +} + +extension Enums { + /// MergeHighlightErrorCode + enum MergeHighlightErrorCode: String, CaseIterable, Codable { + case alreadyExists = "ALREADY_EXISTS" case badData = "BAD_DATA" - } -} -extension Enums { - /// SetShareHighlightErrorCode - enum SetShareHighlightErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" + case forbidden = "FORBIDDEN" case notFound = "NOT_FOUND" - case forbidden = "FORBIDDEN" - } -} - -extension Enums { - /// ReportType - enum ReportType: String, CaseIterable, Codable { - case spam = "SPAM" - - case abusive = "ABUSIVE" - - case contentDisplay = "CONTENT_DISPLAY" - - case contentViolation = "CONTENT_VIOLATION" - } -} - -extension Enums { - /// UpdateLinkShareInfoErrorCode - enum UpdateLinkShareInfoErrorCode: String, CaseIterable, Codable { case unauthorized = "UNAUTHORIZED" - - case badRequest = "BAD_REQUEST" - } -} - -extension Enums { - /// ArchiveLinkErrorCode - enum ArchiveLinkErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case badRequest = "BAD_REQUEST" } } extension Enums { /// NewsletterEmailsErrorCode enum NewsletterEmailsErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - case badRequest = "BAD_REQUEST" + + case unauthorized = "UNAUTHORIZED" } } extension Enums { - /// CreateNewsletterEmailErrorCode - enum CreateNewsletterEmailErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" + /// PageType + enum PageType: String, CaseIterable, Codable { + case article = "ARTICLE" - case badRequest = "BAD_REQUEST" + case book = "BOOK" + + case file = "FILE" + + case highlights = "HIGHLIGHTS" + + case profile = "PROFILE" + + case unknown = "UNKNOWN" + + case website = "WEBSITE" } } extension Enums { - /// DeleteNewsletterEmailErrorCode - enum DeleteNewsletterEmailErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" + /// ReactionType + enum ReactionType: String, CaseIterable, Codable { + case crying = "CRYING" - case badRequest = "BAD_REQUEST" + case heart = "HEART" - case notFound = "NOT_FOUND" + case hushed = "HUSHED" + + case like = "LIKE" + + case pout = "POUT" + + case smile = "SMILE" } } extension Enums { /// ReminderErrorCode enum ReminderErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case badRequest = "BAD_REQUEST" - - case notFound = "NOT_FOUND" - } -} - -extension Enums { - /// CreateReminderErrorCode - enum CreateReminderErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case badRequest = "BAD_REQUEST" - - case notFound = "NOT_FOUND" - } -} - -extension Enums { - /// UpdateReminderErrorCode - enum UpdateReminderErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case badRequest = "BAD_REQUEST" - - case notFound = "NOT_FOUND" - } -} - -extension Enums { - /// DeleteReminderErrorCode - enum DeleteReminderErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case badRequest = "BAD_REQUEST" - - case notFound = "NOT_FOUND" - } -} - -extension Enums { - /// SetDeviceTokenErrorCode - enum SetDeviceTokenErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case badRequest = "BAD_REQUEST" - - case notFound = "NOT_FOUND" - } -} - -extension Enums { - /// LabelsErrorCode - enum LabelsErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case badRequest = "BAD_REQUEST" - - case notFound = "NOT_FOUND" - } -} - -extension Enums { - /// CreateLabelErrorCode - enum CreateLabelErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - case badRequest = "BAD_REQUEST" case notFound = "NOT_FOUND" - case labelAlreadyExists = "LABEL_ALREADY_EXISTS" + case unauthorized = "UNAUTHORIZED" } } extension Enums { - /// DeleteLabelErrorCode - enum DeleteLabelErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" + /// ReportType + enum ReportType: String, CaseIterable, Codable { + case abusive = "ABUSIVE" - case badRequest = "BAD_REQUEST" + case contentDisplay = "CONTENT_DISPLAY" - case notFound = "NOT_FOUND" + case contentViolation = "CONTENT_VIOLATION" + + case spam = "SPAM" } } extension Enums { - /// UpdateLabelErrorCode - enum UpdateLabelErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - + /// RevokeApiKeyErrorCode + enum RevokeApiKeyErrorCode: String, CaseIterable, Codable { case badRequest = "BAD_REQUEST" case notFound = "NOT_FOUND" - case forbidden = "FORBIDDEN" + case unauthorized = "UNAUTHORIZED" } } extension Enums { - /// SetLabelsErrorCode - enum SetLabelsErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - - case badRequest = "BAD_REQUEST" + /// SaveArticleReadingProgressErrorCode + enum SaveArticleReadingProgressErrorCode: String, CaseIterable, Codable { + case badData = "BAD_DATA" case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" } } extension Enums { - /// GenerateApiKeyErrorCode - enum GenerateApiKeyErrorCode: String, CaseIterable, Codable { - case badRequest = "BAD_REQUEST" + /// SaveErrorCode + enum SaveErrorCode: String, CaseIterable, Codable { + case unauthorized = "UNAUTHORIZED" + + case unknown = "UNKNOWN" } } @@ -20470,61 +22164,368 @@ extension Enums { } extension Enums { - /// SubscriptionStatus - enum SubscriptionStatus: String, CaseIterable, Codable { - case active = "ACTIVE" + /// SetBookmarkArticleErrorCode + enum SetBookmarkArticleErrorCode: String, CaseIterable, Codable { + case bookmarkExists = "BOOKMARK_EXISTS" - case unsubscribed = "UNSUBSCRIBED" - - case deleted = "DELETED" + case notFound = "NOT_FOUND" } } extension Enums { - /// SubscriptionsErrorCode - enum SubscriptionsErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" - + /// SetDeviceTokenErrorCode + enum SetDeviceTokenErrorCode: String, CaseIterable, Codable { case badRequest = "BAD_REQUEST" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" } } extension Enums { - /// UnsubscribeErrorCode - enum UnsubscribeErrorCode: String, CaseIterable, Codable { + /// SetFollowErrorCode + enum SetFollowErrorCode: String, CaseIterable, Codable { + case notFound = "NOT_FOUND" + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// SetLabelsErrorCode + enum SetLabelsErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// SetShareArticleErrorCode + enum SetShareArticleErrorCode: String, CaseIterable, Codable { + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// SetShareHighlightErrorCode + enum SetShareHighlightErrorCode: String, CaseIterable, Codable { + case forbidden = "FORBIDDEN" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// SetUserPersonalizationErrorCode + enum SetUserPersonalizationErrorCode: String, CaseIterable, Codable { + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// SetWebhookErrorCode + enum SetWebhookErrorCode: String, CaseIterable, Codable { + case alreadyExists = "ALREADY_EXISTS" case badRequest = "BAD_REQUEST" case notFound = "NOT_FOUND" - case alreadyUnsubscribed = "ALREADY_UNSUBSCRIBED" + case unauthorized = "UNAUTHORIZED" + } +} - case unsubscribeMethodNotFound = "UNSUBSCRIBE_METHOD_NOT_FOUND" +extension Enums { + /// SharedArticleErrorCode + enum SharedArticleErrorCode: String, CaseIterable, Codable { + case notFound = "NOT_FOUND" + } +} + +extension Enums { + /// SignupErrorCode + enum SignupErrorCode: String, CaseIterable, Codable { + case accessDenied = "ACCESS_DENIED" + + case expiredToken = "EXPIRED_TOKEN" + + case googleAuthError = "GOOGLE_AUTH_ERROR" + + case invalidPassword = "INVALID_PASSWORD" + + case invalidUsername = "INVALID_USERNAME" + + case unknown = "UNKNOWN" + + case userExists = "USER_EXISTS" + } +} + +extension Enums { + /// SortBy + enum SortBy: String, CaseIterable, Codable { + case publishedAt = "PUBLISHED_AT" + + case savedAt = "SAVED_AT" + + case score = "SCORE" + + case updatedTime = "UPDATED_TIME" + } +} + +extension Enums { + /// SortOrder + enum SortOrder: String, CaseIterable, Codable { + case ascending = "ASCENDING" + + case descending = "DESCENDING" } } extension Enums { /// SubscribeErrorCode enum SubscribeErrorCode: String, CaseIterable, Codable { - case unauthorized = "UNAUTHORIZED" + case alreadySubscribed = "ALREADY_SUBSCRIBED" case badRequest = "BAD_REQUEST" case notFound = "NOT_FOUND" - case alreadySubscribed = "ALREADY_SUBSCRIBED" + case unauthorized = "UNAUTHORIZED" } } extension Enums { - /// AddPopularReadErrorCode - enum AddPopularReadErrorCode: String, CaseIterable, Codable { + /// SubscriptionsErrorCode + enum SubscriptionsErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// SubscriptionStatus + enum SubscriptionStatus: String, CaseIterable, Codable { + case active = "ACTIVE" + + case deleted = "DELETED" + + case unsubscribed = "UNSUBSCRIBED" + } +} + +extension Enums { + /// UnsubscribeErrorCode + enum UnsubscribeErrorCode: String, CaseIterable, Codable { + case alreadyUnsubscribed = "ALREADY_UNSUBSCRIBED" case badRequest = "BAD_REQUEST" case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + + case unsubscribeMethodNotFound = "UNSUBSCRIBE_METHOD_NOT_FOUND" + } +} + +extension Enums { + /// UpdateHighlightErrorCode + enum UpdateHighlightErrorCode: String, CaseIterable, Codable { + case badData = "BAD_DATA" + + case forbidden = "FORBIDDEN" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// UpdateHighlightReplyErrorCode + enum UpdateHighlightReplyErrorCode: String, CaseIterable, Codable { + case forbidden = "FORBIDDEN" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// UpdateLabelErrorCode + enum UpdateLabelErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case forbidden = "FORBIDDEN" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// UpdateLinkShareInfoErrorCode + enum UpdateLinkShareInfoErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// UpdatePageErrorCode + enum UpdatePageErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case forbidden = "FORBIDDEN" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + + case updateFailed = "UPDATE_FAILED" + } +} + +extension Enums { + /// UpdateReminderErrorCode + enum UpdateReminderErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// UpdateSharedCommentErrorCode + enum UpdateSharedCommentErrorCode: String, CaseIterable, Codable { + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// UpdateUserErrorCode + enum UpdateUserErrorCode: String, CaseIterable, Codable { + case bioTooLong = "BIO_TOO_LONG" + + case emptyName = "EMPTY_NAME" + + case unauthorized = "UNAUTHORIZED" + + case userNotFound = "USER_NOT_FOUND" + } +} + +extension Enums { + /// UpdateUserProfileErrorCode + enum UpdateUserProfileErrorCode: String, CaseIterable, Codable { + case badData = "BAD_DATA" + + case badUsername = "BAD_USERNAME" + + case forbidden = "FORBIDDEN" + + case unauthorized = "UNAUTHORIZED" + + case usernameExists = "USERNAME_EXISTS" + } +} + +extension Enums { + /// UploadFileRequestErrorCode + enum UploadFileRequestErrorCode: String, CaseIterable, Codable { + case badInput = "BAD_INPUT" + + case failedCreate = "FAILED_CREATE" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// UploadFileStatus + enum UploadFileStatus: String, CaseIterable, Codable { + case completed = "COMPLETED" + + case initialized = "INITIALIZED" + } +} + +extension Enums { + /// UserErrorCode + enum UserErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case unauthorized = "UNAUTHORIZED" + + case userNotFound = "USER_NOT_FOUND" + } +} + +extension Enums { + /// UsersErrorCode + enum UsersErrorCode: String, CaseIterable, Codable { + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// WebhookErrorCode + enum WebhookErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case notFound = "NOT_FOUND" + + case unauthorized = "UNAUTHORIZED" + } +} + +extension Enums { + /// WebhookEvent + enum WebhookEvent: String, CaseIterable, Codable { + case highlightCreated = "HIGHLIGHT_CREATED" + + case highlightDeleted = "HIGHLIGHT_DELETED" + + case highlightUpdated = "HIGHLIGHT_UPDATED" + + case labelCreated = "LABEL_CREATED" + + case labelDeleted = "LABEL_DELETED" + + case labelUpdated = "LABEL_UPDATED" + + case pageCreated = "PAGE_CREATED" + + case pageDeleted = "PAGE_DELETED" + + case pageUpdated = "PAGE_UPDATED" + } +} + +extension Enums { + /// WebhooksErrorCode + enum WebhooksErrorCode: String, CaseIterable, Codable { + case badRequest = "BAD_REQUEST" + + case unauthorized = "UNAUTHORIZED" } } @@ -20532,124 +22533,20 @@ extension Enums { enum InputObjects {} extension InputObjects { - struct SortParams: Encodable, Hashable { - var order: OptionalArgument = .absent() + struct ArchiveLinkInput: Encodable, Hashable { + var archived: Bool - var by: Enums.SortBy + var linkId: String func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) - if order.hasValue { try container.encode(order, forKey: .order) } - try container.encode(by, forKey: .by) + try container.encode(archived, forKey: .archived) + try container.encode(linkId, forKey: .linkId) } enum CodingKeys: String, CodingKey { - case order - case by - } - } -} - -extension InputObjects { - struct GoogleLoginInput: Encodable, Hashable { - var secret: String - - var email: String - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(secret, forKey: .secret) - try container.encode(email, forKey: .email) - } - - enum CodingKeys: String, CodingKey { - case secret - case email - } - } -} - -extension InputObjects { - struct GoogleSignupInput: Encodable, Hashable { - var secret: String - - var email: String - - var username: String - - var name: String - - var pictureUrl: String - - var sourceUserId: String - - var bio: OptionalArgument = .absent() - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(secret, forKey: .secret) - try container.encode(email, forKey: .email) - try container.encode(username, forKey: .username) - try container.encode(name, forKey: .name) - try container.encode(pictureUrl, forKey: .pictureUrl) - try container.encode(sourceUserId, forKey: .sourceUserId) - if bio.hasValue { try container.encode(bio, forKey: .bio) } - } - - enum CodingKeys: String, CodingKey { - case secret - case email - case username - case name - case pictureUrl - case sourceUserId - case bio - } - } -} - -extension InputObjects { - struct UpdateUserInput: Encodable, Hashable { - var name: String - - var bio: OptionalArgument = .absent() - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(name, forKey: .name) - if bio.hasValue { try container.encode(bio, forKey: .bio) } - } - - enum CodingKeys: String, CodingKey { - case name - case bio - } - } -} - -extension InputObjects { - struct UpdateUserProfileInput: Encodable, Hashable { - var userId: String - - var username: OptionalArgument = .absent() - - var bio: OptionalArgument = .absent() - - var pictureUrl: OptionalArgument = .absent() - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(userId, forKey: .userId) - if username.hasValue { try container.encode(username, forKey: .username) } - if bio.hasValue { try container.encode(bio, forKey: .bio) } - if pictureUrl.hasValue { try container.encode(pictureUrl, forKey: .pictureUrl) } - } - - enum CodingKeys: String, CodingKey { - case userId - case username - case bio - case pictureUrl + case archived + case linkId } } } @@ -20669,404 +22566,99 @@ extension InputObjects { } } -extension InputObjects { - struct PageInfoInput: Encodable, Hashable { - var title: OptionalArgument = .absent() - - var author: OptionalArgument = .absent() - - var description: OptionalArgument = .absent() - - var previewImage: OptionalArgument = .absent() - - var canonicalUrl: OptionalArgument = .absent() - - var publishedAt: OptionalArgument = .absent() - - var contentType: OptionalArgument = .absent() - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - if title.hasValue { try container.encode(title, forKey: .title) } - if author.hasValue { try container.encode(author, forKey: .author) } - if description.hasValue { try container.encode(description, forKey: .description) } - if previewImage.hasValue { try container.encode(previewImage, forKey: .previewImage) } - if canonicalUrl.hasValue { try container.encode(canonicalUrl, forKey: .canonicalUrl) } - if publishedAt.hasValue { try container.encode(publishedAt, forKey: .publishedAt) } - if contentType.hasValue { try container.encode(contentType, forKey: .contentType) } - } - - enum CodingKeys: String, CodingKey { - case title - case author - case description - case previewImage - case canonicalUrl - case publishedAt - case contentType - } - } -} - -extension InputObjects { - struct PreparedDocumentInput: Encodable, Hashable { - var document: String - - var pageInfo: InputObjects.PageInfoInput - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(document, forKey: .document) - try container.encode(pageInfo, forKey: .pageInfo) - } - - enum CodingKeys: String, CodingKey { - case document - case pageInfo - } - } -} - -extension InputObjects { - struct UploadFileRequestInput: Encodable, Hashable { - var url: String - - var contentType: String - - var createPageEntry: OptionalArgument = .absent() - - var clientRequestId: OptionalArgument = .absent() - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(url, forKey: .url) - try container.encode(contentType, forKey: .contentType) - if createPageEntry.hasValue { try container.encode(createPageEntry, forKey: .createPageEntry) } - if clientRequestId.hasValue { try container.encode(clientRequestId, forKey: .clientRequestId) } - } - - enum CodingKeys: String, CodingKey { - case url - case contentType - case createPageEntry - case clientRequestId - } - } -} - extension InputObjects { struct CreateArticleInput: Encodable, Hashable { - var url: String - - var preparedDocument: OptionalArgument = .absent() - var articleSavingRequestId: OptionalArgument = .absent() - var uploadFileId: OptionalArgument = .absent() + var preparedDocument: OptionalArgument = .absent() var skipParsing: OptionalArgument = .absent() var source: OptionalArgument = .absent() + var uploadFileId: OptionalArgument = .absent() + + var url: String + func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(url, forKey: .url) - if preparedDocument.hasValue { try container.encode(preparedDocument, forKey: .preparedDocument) } if articleSavingRequestId.hasValue { try container.encode(articleSavingRequestId, forKey: .articleSavingRequestId) } - if uploadFileId.hasValue { try container.encode(uploadFileId, forKey: .uploadFileId) } + if preparedDocument.hasValue { try container.encode(preparedDocument, forKey: .preparedDocument) } if skipParsing.hasValue { try container.encode(skipParsing, forKey: .skipParsing) } if source.hasValue { try container.encode(source, forKey: .source) } + if uploadFileId.hasValue { try container.encode(uploadFileId, forKey: .uploadFileId) } + try container.encode(url, forKey: .url) } enum CodingKeys: String, CodingKey { - case url - case preparedDocument case articleSavingRequestId - case uploadFileId + case preparedDocument case skipParsing case source - } - } -} - -extension InputObjects { - struct SaveFileInput: Encodable, Hashable { - var url: String - - var source: String - - var clientRequestId: String - - var uploadFileId: String - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(url, forKey: .url) - try container.encode(source, forKey: .source) - try container.encode(clientRequestId, forKey: .clientRequestId) - try container.encode(uploadFileId, forKey: .uploadFileId) - } - - enum CodingKeys: String, CodingKey { - case url - case source - case clientRequestId case uploadFileId + case url } } } extension InputObjects { - struct SavePageInput: Encodable, Hashable { + struct CreateArticleSavingRequestInput: Encodable, Hashable { var url: String - var source: String - - var clientRequestId: String - - var title: OptionalArgument = .absent() - - var originalContent: String - func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(url, forKey: .url) - try container.encode(source, forKey: .source) - try container.encode(clientRequestId, forKey: .clientRequestId) - if title.hasValue { try container.encode(title, forKey: .title) } - try container.encode(originalContent, forKey: .originalContent) } enum CodingKeys: String, CodingKey { case url - case source - case clientRequestId - case title - case originalContent - } - } -} - -extension InputObjects { - struct SaveUrlInput: Encodable, Hashable { - var url: String - - var source: String - - var clientRequestId: String - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(url, forKey: .url) - try container.encode(source, forKey: .source) - try container.encode(clientRequestId, forKey: .clientRequestId) - } - - enum CodingKeys: String, CodingKey { - case url - case source - case clientRequestId - } - } -} - -extension InputObjects { - struct UpdatePageInput: Encodable, Hashable { - var pageId: String - - var title: OptionalArgument = .absent() - - var description: OptionalArgument = .absent() - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(pageId, forKey: .pageId) - if title.hasValue { try container.encode(title, forKey: .title) } - if description.hasValue { try container.encode(description, forKey: .description) } - } - - enum CodingKeys: String, CodingKey { - case pageId - case title - case description - } - } -} - -extension InputObjects { - struct SetFollowInput: Encodable, Hashable { - var userId: String - - var follow: Bool - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(userId, forKey: .userId) - try container.encode(follow, forKey: .follow) - } - - enum CodingKeys: String, CodingKey { - case userId - case follow - } - } -} - -extension InputObjects { - struct SaveArticleReadingProgressInput: Encodable, Hashable { - var id: String - - var readingProgressPercent: Double - - var readingProgressAnchorIndex: Int - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(id, forKey: .id) - try container.encode(readingProgressPercent, forKey: .readingProgressPercent) - try container.encode(readingProgressAnchorIndex, forKey: .readingProgressAnchorIndex) - } - - enum CodingKeys: String, CodingKey { - case id - case readingProgressPercent - case readingProgressAnchorIndex - } - } -} - -extension InputObjects { - struct SetBookmarkArticleInput: Encodable, Hashable { - var articleId: String - - var bookmark: Bool - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(articleId, forKey: .articleId) - try container.encode(bookmark, forKey: .bookmark) - } - - enum CodingKeys: String, CodingKey { - case articleId = "articleID" - case bookmark } } } extension InputObjects { struct CreateHighlightInput: Encodable, Hashable { - var id: String - - var shortId: String + var annotation: OptionalArgument = .absent() var articleId: String - var patch: String + var id: String - var quote: String + var patch: String var prefix: OptionalArgument = .absent() - var suffix: OptionalArgument = .absent() - - var annotation: OptionalArgument = .absent() + var quote: String var sharedAt: OptionalArgument = .absent() - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(id, forKey: .id) - try container.encode(shortId, forKey: .shortId) - try container.encode(articleId, forKey: .articleId) - try container.encode(patch, forKey: .patch) - try container.encode(quote, forKey: .quote) - if prefix.hasValue { try container.encode(prefix, forKey: .prefix) } - if suffix.hasValue { try container.encode(suffix, forKey: .suffix) } - if annotation.hasValue { try container.encode(annotation, forKey: .annotation) } - if sharedAt.hasValue { try container.encode(sharedAt, forKey: .sharedAt) } - } - - enum CodingKeys: String, CodingKey { - case id - case shortId - case articleId - case patch - case quote - case prefix - case suffix - case annotation - case sharedAt - } - } -} - -extension InputObjects { - struct MergeHighlightInput: Encodable, Hashable { - var id: String - var shortId: String - var articleId: String - - var patch: String - - var quote: String - - var prefix: OptionalArgument = .absent() - var suffix: OptionalArgument = .absent() - var annotation: OptionalArgument = .absent() - - var overlapHighlightIdList: [String] - func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(id, forKey: .id) - try container.encode(shortId, forKey: .shortId) + if annotation.hasValue { try container.encode(annotation, forKey: .annotation) } try container.encode(articleId, forKey: .articleId) + try container.encode(id, forKey: .id) try container.encode(patch, forKey: .patch) - try container.encode(quote, forKey: .quote) if prefix.hasValue { try container.encode(prefix, forKey: .prefix) } - if suffix.hasValue { try container.encode(suffix, forKey: .suffix) } - if annotation.hasValue { try container.encode(annotation, forKey: .annotation) } - try container.encode(overlapHighlightIdList, forKey: .overlapHighlightIdList) - } - - enum CodingKeys: String, CodingKey { - case id - case shortId - case articleId - case patch - case quote - case prefix - case suffix - case annotation - case overlapHighlightIdList - } - } -} - -extension InputObjects { - struct UpdateHighlightInput: Encodable, Hashable { - var highlightId: String - - var annotation: OptionalArgument = .absent() - - var sharedAt: OptionalArgument = .absent() - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(highlightId, forKey: .highlightId) - if annotation.hasValue { try container.encode(annotation, forKey: .annotation) } + try container.encode(quote, forKey: .quote) if sharedAt.hasValue { try container.encode(sharedAt, forKey: .sharedAt) } + try container.encode(shortId, forKey: .shortId) + if suffix.hasValue { try container.encode(suffix, forKey: .suffix) } } enum CodingKeys: String, CodingKey { - case highlightId case annotation + case articleId + case id + case patch + case prefix + case quote case sharedAt + case shortId + case suffix } } } @@ -21091,43 +22683,494 @@ extension InputObjects { } extension InputObjects { - struct UpdateHighlightReplyInput: Encodable, Hashable { - var highlightReplyId: String + struct CreateLabelInput: Encodable, Hashable { + var color: String - var text: String + var description: OptionalArgument = .absent() + + var name: String func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(highlightReplyId, forKey: .highlightReplyId) - try container.encode(text, forKey: .text) + try container.encode(color, forKey: .color) + if description.hasValue { try container.encode(description, forKey: .description) } + try container.encode(name, forKey: .name) } enum CodingKeys: String, CodingKey { - case highlightReplyId - case text + case color + case description + case name } } } extension InputObjects { struct CreateReactionInput: Encodable, Hashable { + var code: Enums.ReactionType + var highlightId: OptionalArgument = .absent() var userArticleId: OptionalArgument = .absent() - var code: Enums.ReactionType - func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(code, forKey: .code) if highlightId.hasValue { try container.encode(highlightId, forKey: .highlightId) } if userArticleId.hasValue { try container.encode(userArticleId, forKey: .userArticleId) } - try container.encode(code, forKey: .code) } enum CodingKeys: String, CodingKey { + case code case highlightId case userArticleId - case code + } + } +} + +extension InputObjects { + struct CreateReminderInput: Encodable, Hashable { + var archiveUntil: Bool + + var clientRequestId: OptionalArgument = .absent() + + var linkId: OptionalArgument = .absent() + + var remindAt: DateTime + + var sendNotification: Bool + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(archiveUntil, forKey: .archiveUntil) + if clientRequestId.hasValue { try container.encode(clientRequestId, forKey: .clientRequestId) } + if linkId.hasValue { try container.encode(linkId, forKey: .linkId) } + try container.encode(remindAt, forKey: .remindAt) + try container.encode(sendNotification, forKey: .sendNotification) + } + + enum CodingKeys: String, CodingKey { + case archiveUntil + case clientRequestId + case linkId + case remindAt + case sendNotification + } + } +} + +extension InputObjects { + struct GenerateApiKeyInput: Encodable, Hashable { + var expiresAt: DateTime + + var name: String + + var scopes: OptionalArgument<[String]> = .absent() + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(expiresAt, forKey: .expiresAt) + try container.encode(name, forKey: .name) + if scopes.hasValue { try container.encode(scopes, forKey: .scopes) } + } + + enum CodingKeys: String, CodingKey { + case expiresAt + case name + case scopes + } + } +} + +extension InputObjects { + struct GoogleLoginInput: Encodable, Hashable { + var email: String + + var secret: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(email, forKey: .email) + try container.encode(secret, forKey: .secret) + } + + enum CodingKeys: String, CodingKey { + case email + case secret + } + } +} + +extension InputObjects { + struct GoogleSignupInput: Encodable, Hashable { + var bio: OptionalArgument = .absent() + + var email: String + + var name: String + + var pictureUrl: String + + var secret: String + + var sourceUserId: String + + var username: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + if bio.hasValue { try container.encode(bio, forKey: .bio) } + try container.encode(email, forKey: .email) + try container.encode(name, forKey: .name) + try container.encode(pictureUrl, forKey: .pictureUrl) + try container.encode(secret, forKey: .secret) + try container.encode(sourceUserId, forKey: .sourceUserId) + try container.encode(username, forKey: .username) + } + + enum CodingKeys: String, CodingKey { + case bio + case email + case name + case pictureUrl + case secret + case sourceUserId + case username + } + } +} + +extension InputObjects { + struct LoginInput: Encodable, Hashable { + var email: String + + var password: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(email, forKey: .email) + try container.encode(password, forKey: .password) + } + + enum CodingKeys: String, CodingKey { + case email + case password + } + } +} + +extension InputObjects { + struct MergeHighlightInput: Encodable, Hashable { + var annotation: OptionalArgument = .absent() + + var articleId: String + + var id: String + + var overlapHighlightIdList: [String] + + var patch: String + + var prefix: OptionalArgument = .absent() + + var quote: String + + var shortId: String + + var suffix: OptionalArgument = .absent() + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + if annotation.hasValue { try container.encode(annotation, forKey: .annotation) } + try container.encode(articleId, forKey: .articleId) + try container.encode(id, forKey: .id) + try container.encode(overlapHighlightIdList, forKey: .overlapHighlightIdList) + try container.encode(patch, forKey: .patch) + if prefix.hasValue { try container.encode(prefix, forKey: .prefix) } + try container.encode(quote, forKey: .quote) + try container.encode(shortId, forKey: .shortId) + if suffix.hasValue { try container.encode(suffix, forKey: .suffix) } + } + + enum CodingKeys: String, CodingKey { + case annotation + case articleId + case id + case overlapHighlightIdList + case patch + case prefix + case quote + case shortId + case suffix + } + } +} + +extension InputObjects { + struct PageInfoInput: Encodable, Hashable { + var author: OptionalArgument = .absent() + + var canonicalUrl: OptionalArgument = .absent() + + var contentType: OptionalArgument = .absent() + + var description: OptionalArgument = .absent() + + var previewImage: OptionalArgument = .absent() + + var publishedAt: OptionalArgument = .absent() + + var title: OptionalArgument = .absent() + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + if author.hasValue { try container.encode(author, forKey: .author) } + if canonicalUrl.hasValue { try container.encode(canonicalUrl, forKey: .canonicalUrl) } + if contentType.hasValue { try container.encode(contentType, forKey: .contentType) } + if description.hasValue { try container.encode(description, forKey: .description) } + if previewImage.hasValue { try container.encode(previewImage, forKey: .previewImage) } + if publishedAt.hasValue { try container.encode(publishedAt, forKey: .publishedAt) } + if title.hasValue { try container.encode(title, forKey: .title) } + } + + enum CodingKeys: String, CodingKey { + case author + case canonicalUrl + case contentType + case description + case previewImage + case publishedAt + case title + } + } +} + +extension InputObjects { + struct PreparedDocumentInput: Encodable, Hashable { + var document: String + + var pageInfo: InputObjects.PageInfoInput + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(document, forKey: .document) + try container.encode(pageInfo, forKey: .pageInfo) + } + + enum CodingKeys: String, CodingKey { + case document + case pageInfo + } + } +} + +extension InputObjects { + struct ReportItemInput: Encodable, Hashable { + var itemUrl: String + + var pageId: String + + var reportComment: String + + var reportTypes: [Enums.ReportType] + + var sharedBy: OptionalArgument = .absent() + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(itemUrl, forKey: .itemUrl) + try container.encode(pageId, forKey: .pageId) + try container.encode(reportComment, forKey: .reportComment) + try container.encode(reportTypes, forKey: .reportTypes) + if sharedBy.hasValue { try container.encode(sharedBy, forKey: .sharedBy) } + } + + enum CodingKeys: String, CodingKey { + case itemUrl + case pageId + case reportComment + case reportTypes + case sharedBy + } + } +} + +extension InputObjects { + struct SaveArticleReadingProgressInput: Encodable, Hashable { + var id: String + + var readingProgressAnchorIndex: Int + + var readingProgressPercent: Double + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(id, forKey: .id) + try container.encode(readingProgressAnchorIndex, forKey: .readingProgressAnchorIndex) + try container.encode(readingProgressPercent, forKey: .readingProgressPercent) + } + + enum CodingKeys: String, CodingKey { + case id + case readingProgressAnchorIndex + case readingProgressPercent + } + } +} + +extension InputObjects { + struct SaveFileInput: Encodable, Hashable { + var clientRequestId: String + + var source: String + + var uploadFileId: String + + var url: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(clientRequestId, forKey: .clientRequestId) + try container.encode(source, forKey: .source) + try container.encode(uploadFileId, forKey: .uploadFileId) + try container.encode(url, forKey: .url) + } + + enum CodingKeys: String, CodingKey { + case clientRequestId + case source + case uploadFileId + case url + } + } +} + +extension InputObjects { + struct SavePageInput: Encodable, Hashable { + var clientRequestId: String + + var originalContent: String + + var source: String + + var title: OptionalArgument = .absent() + + var url: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(clientRequestId, forKey: .clientRequestId) + try container.encode(originalContent, forKey: .originalContent) + try container.encode(source, forKey: .source) + if title.hasValue { try container.encode(title, forKey: .title) } + try container.encode(url, forKey: .url) + } + + enum CodingKeys: String, CodingKey { + case clientRequestId + case originalContent + case source + case title + case url + } + } +} + +extension InputObjects { + struct SaveUrlInput: Encodable, Hashable { + var clientRequestId: String + + var source: String + + var url: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(clientRequestId, forKey: .clientRequestId) + try container.encode(source, forKey: .source) + try container.encode(url, forKey: .url) + } + + enum CodingKeys: String, CodingKey { + case clientRequestId + case source + case url + } + } +} + +extension InputObjects { + struct SetBookmarkArticleInput: Encodable, Hashable { + var articleId: String + + var bookmark: Bool + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(articleId, forKey: .articleId) + try container.encode(bookmark, forKey: .bookmark) + } + + enum CodingKeys: String, CodingKey { + case articleId = "articleID" + case bookmark + } + } +} + +extension InputObjects { + struct SetDeviceTokenInput: Encodable, Hashable { + var id: OptionalArgument = .absent() + + var token: OptionalArgument = .absent() + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + if id.hasValue { try container.encode(id, forKey: .id) } + if token.hasValue { try container.encode(token, forKey: .token) } + } + + enum CodingKeys: String, CodingKey { + case id + case token + } + } +} + +extension InputObjects { + struct SetFollowInput: Encodable, Hashable { + var follow: Bool + + var userId: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(follow, forKey: .follow) + try container.encode(userId, forKey: .userId) + } + + enum CodingKeys: String, CodingKey { + case follow + case userId + } + } +} + +extension InputObjects { + struct SetLabelsInput: Encodable, Hashable { + var labelIds: [String] + + var pageId: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(labelIds, forKey: .labelIds) + try container.encode(pageId, forKey: .pageId) + } + + enum CodingKeys: String, CodingKey { + case labelIds + case pageId } } } @@ -21159,75 +23202,6 @@ extension InputObjects { } } -extension InputObjects { - struct UpdateSharedCommentInput: Encodable, Hashable { - var articleId: String - - var sharedComment: String - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(articleId, forKey: .articleId) - try container.encode(sharedComment, forKey: .sharedComment) - } - - enum CodingKeys: String, CodingKey { - case articleId = "articleID" - case sharedComment - } - } -} - -extension InputObjects { - struct SetUserPersonalizationInput: Encodable, Hashable { - var theme: OptionalArgument = .absent() - - var fontSize: OptionalArgument = .absent() - - var fontFamily: OptionalArgument = .absent() - - var margin: OptionalArgument = .absent() - - var libraryLayoutType: OptionalArgument = .absent() - - var librarySortOrder: OptionalArgument = .absent() - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - if theme.hasValue { try container.encode(theme, forKey: .theme) } - if fontSize.hasValue { try container.encode(fontSize, forKey: .fontSize) } - if fontFamily.hasValue { try container.encode(fontFamily, forKey: .fontFamily) } - if margin.hasValue { try container.encode(margin, forKey: .margin) } - if libraryLayoutType.hasValue { try container.encode(libraryLayoutType, forKey: .libraryLayoutType) } - if librarySortOrder.hasValue { try container.encode(librarySortOrder, forKey: .librarySortOrder) } - } - - enum CodingKeys: String, CodingKey { - case theme - case fontSize - case fontFamily - case margin - case libraryLayoutType - case librarySortOrder - } - } -} - -extension InputObjects { - struct CreateArticleSavingRequestInput: Encodable, Hashable { - var url: String - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(url, forKey: .url) - } - - enum CodingKeys: String, CodingKey { - case url - } - } -} - extension InputObjects { struct SetShareHighlightInput: Encodable, Hashable { var id: String @@ -21248,293 +23222,359 @@ extension InputObjects { } extension InputObjects { - struct ReportItemInput: Encodable, Hashable { - var pageId: String + struct SetUserPersonalizationInput: Encodable, Hashable { + var fontFamily: OptionalArgument = .absent() - var itemUrl: String + var fontSize: OptionalArgument = .absent() - var sharedBy: OptionalArgument = .absent() + var libraryLayoutType: OptionalArgument = .absent() - var reportTypes: [Enums.ReportType] + var librarySortOrder: OptionalArgument = .absent() - var reportComment: String + var margin: OptionalArgument = .absent() + + var theme: OptionalArgument = .absent() func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(pageId, forKey: .pageId) - try container.encode(itemUrl, forKey: .itemUrl) - if sharedBy.hasValue { try container.encode(sharedBy, forKey: .sharedBy) } - try container.encode(reportTypes, forKey: .reportTypes) - try container.encode(reportComment, forKey: .reportComment) + if fontFamily.hasValue { try container.encode(fontFamily, forKey: .fontFamily) } + if fontSize.hasValue { try container.encode(fontSize, forKey: .fontSize) } + if libraryLayoutType.hasValue { try container.encode(libraryLayoutType, forKey: .libraryLayoutType) } + if librarySortOrder.hasValue { try container.encode(librarySortOrder, forKey: .librarySortOrder) } + if margin.hasValue { try container.encode(margin, forKey: .margin) } + if theme.hasValue { try container.encode(theme, forKey: .theme) } } enum CodingKeys: String, CodingKey { - case pageId - case itemUrl - case sharedBy - case reportTypes - case reportComment + case fontFamily + case fontSize + case libraryLayoutType + case librarySortOrder + case margin + case theme } } } extension InputObjects { - struct UpdateLinkShareInfoInput: Encodable, Hashable { - var linkId: String + struct SetWebhookInput: Encodable, Hashable { + var contentType: OptionalArgument = .absent() - var title: String + var enabled: OptionalArgument = .absent() - var description: String + var eventTypes: [Enums.WebhookEvent] - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(linkId, forKey: .linkId) - try container.encode(title, forKey: .title) - try container.encode(description, forKey: .description) - } - - enum CodingKeys: String, CodingKey { - case linkId - case title - case description - } - } -} - -extension InputObjects { - struct ArchiveLinkInput: Encodable, Hashable { - var linkId: String - - var archived: Bool - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(linkId, forKey: .linkId) - try container.encode(archived, forKey: .archived) - } - - enum CodingKeys: String, CodingKey { - case linkId - case archived - } - } -} - -extension InputObjects { - struct CreateReminderInput: Encodable, Hashable { - var linkId: OptionalArgument = .absent() - - var clientRequestId: OptionalArgument = .absent() - - var archiveUntil: Bool - - var sendNotification: Bool - - var remindAt: DateTime - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - if linkId.hasValue { try container.encode(linkId, forKey: .linkId) } - if clientRequestId.hasValue { try container.encode(clientRequestId, forKey: .clientRequestId) } - try container.encode(archiveUntil, forKey: .archiveUntil) - try container.encode(sendNotification, forKey: .sendNotification) - try container.encode(remindAt, forKey: .remindAt) - } - - enum CodingKeys: String, CodingKey { - case linkId - case clientRequestId - case archiveUntil - case sendNotification - case remindAt - } - } -} - -extension InputObjects { - struct UpdateReminderInput: Encodable, Hashable { - var id: String - - var archiveUntil: Bool - - var sendNotification: Bool - - var remindAt: DateTime - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(id, forKey: .id) - try container.encode(archiveUntil, forKey: .archiveUntil) - try container.encode(sendNotification, forKey: .sendNotification) - try container.encode(remindAt, forKey: .remindAt) - } - - enum CodingKeys: String, CodingKey { - case id - case archiveUntil - case sendNotification - case remindAt - } - } -} - -extension InputObjects { - struct SetDeviceTokenInput: Encodable, Hashable { var id: OptionalArgument = .absent() - var token: OptionalArgument = .absent() + var method: OptionalArgument = .absent() + + var url: String func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) + if contentType.hasValue { try container.encode(contentType, forKey: .contentType) } + if enabled.hasValue { try container.encode(enabled, forKey: .enabled) } + try container.encode(eventTypes, forKey: .eventTypes) if id.hasValue { try container.encode(id, forKey: .id) } - if token.hasValue { try container.encode(token, forKey: .token) } + if method.hasValue { try container.encode(method, forKey: .method) } + try container.encode(url, forKey: .url) } enum CodingKeys: String, CodingKey { + case contentType + case enabled + case eventTypes case id - case token - } - } -} - -extension InputObjects { - struct CreateLabelInput: Encodable, Hashable { - var name: String - - var color: String - - var description: OptionalArgument = .absent() - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(name, forKey: .name) - try container.encode(color, forKey: .color) - if description.hasValue { try container.encode(description, forKey: .description) } - } - - enum CodingKeys: String, CodingKey { - case name - case color - case description - } - } -} - -extension InputObjects { - struct UpdateLabelInput: Encodable, Hashable { - var labelId: String - - var color: String - - var description: OptionalArgument = .absent() - - var name: String - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(labelId, forKey: .labelId) - try container.encode(color, forKey: .color) - if description.hasValue { try container.encode(description, forKey: .description) } - try container.encode(name, forKey: .name) - } - - enum CodingKeys: String, CodingKey { - case labelId - case color - case description - case name - } - } -} - -extension InputObjects { - struct LoginInput: Encodable, Hashable { - var password: String - - var email: String - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(password, forKey: .password) - try container.encode(email, forKey: .email) - } - - enum CodingKeys: String, CodingKey { - case password - case email + case method + case url } } } extension InputObjects { struct SignupInput: Encodable, Hashable { + var bio: OptionalArgument = .absent() + var email: String - var password: String - - var username: String - var name: String + var password: String + var pictureUrl: OptionalArgument = .absent() - var bio: OptionalArgument = .absent() + var username: String func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(email, forKey: .email) - try container.encode(password, forKey: .password) - try container.encode(username, forKey: .username) - try container.encode(name, forKey: .name) - if pictureUrl.hasValue { try container.encode(pictureUrl, forKey: .pictureUrl) } if bio.hasValue { try container.encode(bio, forKey: .bio) } + try container.encode(email, forKey: .email) + try container.encode(name, forKey: .name) + try container.encode(password, forKey: .password) + if pictureUrl.hasValue { try container.encode(pictureUrl, forKey: .pictureUrl) } + try container.encode(username, forKey: .username) } enum CodingKeys: String, CodingKey { - case email - case password - case username - case name - case pictureUrl case bio + case email + case name + case password + case pictureUrl + case username } } } extension InputObjects { - struct SetLabelsInput: Encodable, Hashable { + struct SortParams: Encodable, Hashable { + var by: Enums.SortBy + + var order: OptionalArgument = .absent() + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(by, forKey: .by) + if order.hasValue { try container.encode(order, forKey: .order) } + } + + enum CodingKeys: String, CodingKey { + case by + case order + } + } +} + +extension InputObjects { + struct UpdateHighlightInput: Encodable, Hashable { + var annotation: OptionalArgument = .absent() + + var highlightId: String + + var sharedAt: OptionalArgument = .absent() + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + if annotation.hasValue { try container.encode(annotation, forKey: .annotation) } + try container.encode(highlightId, forKey: .highlightId) + if sharedAt.hasValue { try container.encode(sharedAt, forKey: .sharedAt) } + } + + enum CodingKeys: String, CodingKey { + case annotation + case highlightId + case sharedAt + } + } +} + +extension InputObjects { + struct UpdateHighlightReplyInput: Encodable, Hashable { + var highlightReplyId: String + + var text: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(highlightReplyId, forKey: .highlightReplyId) + try container.encode(text, forKey: .text) + } + + enum CodingKeys: String, CodingKey { + case highlightReplyId + case text + } + } +} + +extension InputObjects { + struct UpdateLabelInput: Encodable, Hashable { + var color: String + + var description: OptionalArgument = .absent() + + var labelId: String + + var name: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(color, forKey: .color) + if description.hasValue { try container.encode(description, forKey: .description) } + try container.encode(labelId, forKey: .labelId) + try container.encode(name, forKey: .name) + } + + enum CodingKeys: String, CodingKey { + case color + case description + case labelId + case name + } + } +} + +extension InputObjects { + struct UpdateLinkShareInfoInput: Encodable, Hashable { + var description: String + + var linkId: String + + var title: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(description, forKey: .description) + try container.encode(linkId, forKey: .linkId) + try container.encode(title, forKey: .title) + } + + enum CodingKeys: String, CodingKey { + case description + case linkId + case title + } + } +} + +extension InputObjects { + struct UpdatePageInput: Encodable, Hashable { + var description: OptionalArgument = .absent() + var pageId: String - var labelIds: [String] + var title: OptionalArgument = .absent() func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) + if description.hasValue { try container.encode(description, forKey: .description) } try container.encode(pageId, forKey: .pageId) - try container.encode(labelIds, forKey: .labelIds) + if title.hasValue { try container.encode(title, forKey: .title) } } enum CodingKeys: String, CodingKey { + case description case pageId - case labelIds + case title } } } extension InputObjects { - struct GenerateApiKeyInput: Encodable, Hashable { - var scope: OptionalArgument = .absent() + struct UpdateReminderInput: Encodable, Hashable { + var archiveUntil: Bool - var expiredAt: OptionalArgument = .absent() + var id: String + + var remindAt: DateTime + + var sendNotification: Bool func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) - if scope.hasValue { try container.encode(scope, forKey: .scope) } - if expiredAt.hasValue { try container.encode(expiredAt, forKey: .expiredAt) } + try container.encode(archiveUntil, forKey: .archiveUntil) + try container.encode(id, forKey: .id) + try container.encode(remindAt, forKey: .remindAt) + try container.encode(sendNotification, forKey: .sendNotification) } enum CodingKeys: String, CodingKey { - case scope - case expiredAt + case archiveUntil + case id + case remindAt + case sendNotification + } + } +} + +extension InputObjects { + struct UpdateSharedCommentInput: Encodable, Hashable { + var articleId: String + + var sharedComment: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(articleId, forKey: .articleId) + try container.encode(sharedComment, forKey: .sharedComment) + } + + enum CodingKeys: String, CodingKey { + case articleId = "articleID" + case sharedComment + } + } +} + +extension InputObjects { + struct UpdateUserInput: Encodable, Hashable { + var bio: OptionalArgument = .absent() + + var name: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + if bio.hasValue { try container.encode(bio, forKey: .bio) } + try container.encode(name, forKey: .name) + } + + enum CodingKeys: String, CodingKey { + case bio + case name + } + } +} + +extension InputObjects { + struct UpdateUserProfileInput: Encodable, Hashable { + var bio: OptionalArgument = .absent() + + var pictureUrl: OptionalArgument = .absent() + + var userId: String + + var username: OptionalArgument = .absent() + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + if bio.hasValue { try container.encode(bio, forKey: .bio) } + if pictureUrl.hasValue { try container.encode(pictureUrl, forKey: .pictureUrl) } + try container.encode(userId, forKey: .userId) + if username.hasValue { try container.encode(username, forKey: .username) } + } + + enum CodingKeys: String, CodingKey { + case bio + case pictureUrl + case userId + case username + } + } +} + +extension InputObjects { + struct UploadFileRequestInput: Encodable, Hashable { + var clientRequestId: OptionalArgument = .absent() + + var contentType: String + + var createPageEntry: OptionalArgument = .absent() + + var url: String + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + if clientRequestId.hasValue { try container.encode(clientRequestId, forKey: .clientRequestId) } + try container.encode(contentType, forKey: .contentType) + if createPageEntry.hasValue { try container.encode(createPageEntry, forKey: .createPageEntry) } + try container.encode(url, forKey: .url) + } + + enum CodingKeys: String, CodingKey { + case clientRequestId + case contentType + case createPageEntry + case url } } } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/ArchiveLink.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/ArchiveLink.swift index 2781b7a48..d8412c8a9 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/ArchiveLink.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/ArchiveLink.swift @@ -24,16 +24,16 @@ extension DataService { let selection = Selection { try $0.on( - archiveLinkSuccess: .init { .success(linkId: try $0.linkId()) }, - archiveLinkError: .init { .error(errorCode: try $0.errorCodes().first ?? .badRequest) } + archiveLinkError: .init { .error(errorCode: try $0.errorCodes().first ?? .badRequest) }, + archiveLinkSuccess: .init { .success(linkId: try $0.linkId()) } ) } let mutation = Selection.Mutation { try $0.setLinkArchived( input: InputObjects.ArchiveLinkInput( - linkId: itemID, - archived: archived + archived: archived, + linkId: itemID ), selection: selection ) diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateHighlight.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateHighlight.swift index 9a8203ce0..5cd1ad36d 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateHighlight.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateHighlight.swift @@ -40,22 +40,22 @@ extension DataService { let selection = Selection { try $0.on( + createHighlightError: .init { .error(errorCode: try $0.errorCodes().first ?? .badData) }, createHighlightSuccess: .init { .saved(highlight: try $0.highlight(selection: highlightSelection)) - }, - createHighlightError: .init { .error(errorCode: try $0.errorCodes().first ?? .badData) } + } ) } let mutation = Selection.Mutation { try $0.createHighlight( input: InputObjects.CreateHighlightInput( - id: highlight.id, - shortId: highlight.shortId, + annotation: OptionalArgument(highlight.annotation), articleId: articleId, + id: highlight.id, patch: highlight.patch, quote: highlight.quote, - annotation: OptionalArgument(highlight.annotation) + shortId: highlight.shortId ), selection: selection ) diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateLabelPublisher.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateLabelPublisher.swift index 27e5785d0..8df8b0d4a 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateLabelPublisher.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateLabelPublisher.swift @@ -34,17 +34,17 @@ extension DataService { let selection = Selection { try $0.on( - createLabelSuccess: .init { .saved(label: try $0.label(selection: feedItemLabelSelection)) }, - createLabelError: .init { .error(errorCode: try $0.errorCodes().first ?? .badRequest) } + createLabelError: .init { .error(errorCode: try $0.errorCodes().first ?? .badRequest) }, + createLabelSuccess: .init { .saved(label: try $0.label(selection: feedItemLabelSelection)) } ) } let mutation = Selection.Mutation { try $0.createLabel( input: InputObjects.CreateLabelInput( - name: label.name, color: label.color, - description: OptionalArgument(label.labelDescription) + description: OptionalArgument(label.labelDescription), + name: label.name ), selection: selection ) diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateNewsletterEmailMutation.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateNewsletterEmailMutation.swift index d4ca80be5..f65f5400f 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateNewsletterEmailMutation.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateNewsletterEmailMutation.swift @@ -12,6 +12,9 @@ public extension DataService { let selection = Selection { try $0.on( + createNewsletterEmailError: .init { + .error(errorCode: try $0.errorCodes().first ?? .badRequest) + }, createNewsletterEmailSuccess: .init { .saved(newsletterEmail: try $0.newsletterEmail(selection: Selection.NewsletterEmail { InternalNewsletterEmail( @@ -20,9 +23,6 @@ public extension DataService { confirmationCode: try $0.confirmationCode() ) })) - }, - createNewsletterEmailError: .init { - .error(errorCode: try $0.errorCodes().first ?? .badRequest) } ) } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateReminder.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateReminder.swift index 6277dd9be..f7ad4d475 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateReminder.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/CreateReminder.swift @@ -37,21 +37,21 @@ public extension DataService { let selection = Selection { try $0.on( + createReminderError: .init { .error(errorCode: try $0.errorCodes().first ?? .badRequest) }, createReminderSuccess: .init { .complete(id: try $0.reminder(selection: Selection.Reminder { try $0.id() })) - }, - createReminderError: .init { .error(errorCode: try $0.errorCodes().first ?? .badRequest) } + } ) } let mutation = Selection.Mutation { try $0.createReminder( input: InputObjects.CreateReminderInput( - linkId: OptionalArgument(reminderItemId.linkId), - clientRequestId: OptionalArgument(reminderItemId.clientRequestId), archiveUntil: true, - sendNotification: true, - remindAt: DateTime(from: remindAt) + clientRequestId: OptionalArgument(reminderItemId.clientRequestId), + linkId: OptionalArgument(reminderItemId.linkId), + remindAt: DateTime(from: remindAt), + sendNotification: true ), selection: selection ) diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteHighlight.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteHighlight.swift index 92f657946..ff9a95b87 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteHighlight.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteHighlight.swift @@ -30,10 +30,10 @@ public extension DataService { let selection = Selection { try $0.on( + deleteHighlightError: .init { .error(errorCode: try $0.errorCodes().first ?? .unauthorized) }, deleteHighlightSuccess: .init { .saved(id: try $0.highlight(selection: Selection.Highlight { try $0.id() })) - }, - deleteHighlightError: .init { .error(errorCode: try $0.errorCodes().first ?? .unauthorized) } + } ) } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteSubscription.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteSubscription.swift index 05dbed3f2..d8bdf3289 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteSubscription.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteSubscription.swift @@ -12,8 +12,8 @@ public extension DataService { let selection = Selection { try $0.on( - unsubscribeSuccess: .init { .success(id: try $0.subscription(selection: Selection.Subscription { try $0.id() })) }, - unsubscribeError: .init { .error(errorMessage: (try $0.errorCodes().first ?? .unauthorized).rawValue) } + unsubscribeError: .init { .error(errorMessage: (try $0.errorCodes().first ?? .unauthorized).rawValue) }, + unsubscribeSuccess: .init { .success(id: try $0.subscription(selection: Selection.Subscription { try $0.id() })) } ) } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeviceToken.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeviceToken.swift index 50c4485f0..ec5692bdd 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeviceToken.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeviceToken.swift @@ -34,10 +34,10 @@ public extension DataService { let selection = Selection { try $0.on( + setDeviceTokenError: .init { .error(errorCode: try $0.errorCodes().first ?? .badRequest) }, setDeviceTokenSuccess: .init { .saved(id: try $0.deviceToken(selection: Selection.DeviceToken { try $0.id() })) - }, - setDeviceTokenError: .init { .error(errorCode: try $0.errorCodes().first ?? .badRequest) } + } ) } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/MergeHighlight.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/MergeHighlight.swift index 5b3c9d5f8..4f8eefc3f 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/MergeHighlight.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/MergeHighlight.swift @@ -46,25 +46,25 @@ extension DataService { let selection = Selection { try $0.on( + mergeHighlightError: .init { .error(errorCode: try $0.errorCodes().first ?? .badData) }, mergeHighlightSuccess: .init { .saved(highlight: try $0.highlight(selection: highlightSelection)) - }, - mergeHighlightError: .init { .error(errorCode: try $0.errorCodes().first ?? .badData) } + } ) } let mutation = Selection.Mutation { try $0.mergeHighlight( input: InputObjects.MergeHighlightInput( - id: highlight.id, - shortId: highlight.shortId, - articleId: articleId, - patch: highlight.patch, - quote: highlight.quote, - prefix: .absent(), - suffix: .absent(), annotation: .absent(), - overlapHighlightIdList: overlapHighlightIdList + articleId: articleId, + id: highlight.id, + overlapHighlightIdList: overlapHighlightIdList, + patch: highlight.patch, + prefix: .absent(), + quote: highlight.quote, + shortId: highlight.shortId, + suffix: .absent() ), selection: selection ) diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLabelPublisher.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLabelPublisher.swift index 0c10e85f8..fc7c02c2b 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLabelPublisher.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLabelPublisher.swift @@ -23,10 +23,10 @@ extension DataService { let selection = Selection { try $0.on( + deleteLabelError: .init { .error(errorCode: try $0.errorCodes().first ?? .badRequest) }, deleteLabelSuccess: .init { .success(labelID: try $0.label(selection: Selection.Label { try $0.id() })) - }, - deleteLabelError: .init { .error(errorCode: try $0.errorCodes().first ?? .badRequest) } + } ) } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLink.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLink.swift index 304b00449..d6a3e3894 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLink.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLink.swift @@ -24,14 +24,14 @@ extension DataService { let selection = Selection { try $0.on( + setBookmarkArticleError: .init { .error(errorCode: try $0.errorCodes().first ?? .notFound) }, setBookmarkArticleSuccess: .init { .success( linkId: try $0.bookmarkedArticle(selection: Selection.Article { try $0.id() }) ) - }, - setBookmarkArticleError: .init { .error(errorCode: try $0.errorCodes().first ?? .notFound) } + } ) } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SaveArticle.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SaveArticle.swift index cc7352b41..69e7e511e 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SaveArticle.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SaveArticle.swift @@ -29,6 +29,7 @@ public extension Networker { let selection = Selection { try $0.on( + articleSavingRequestError: .init { .error(errorCode: (try? $0.errorCodes().first) ?? .notFound) }, articleSavingRequestSuccess: .init { .saved( status: try $0.articleSavingRequest( @@ -40,8 +41,7 @@ public extension Networker { } ) ) - }, - articleSavingRequestError: .init { .error(errorCode: (try? $0.errorCodes().first) ?? .notFound) } + } ) } @@ -92,7 +92,7 @@ public extension DataService { } let preparedDocument: InputObjects.PreparedDocumentInput? = { - if case let .html(html, title) = pageScrapePayload.contentType { + if case let .html(html, title, _) = pageScrapePayload.contentType { return InputObjects.PreparedDocumentInput( document: html, pageInfo: InputObjects.PageInfoInput(title: OptionalArgument(title)) @@ -102,15 +102,15 @@ public extension DataService { }() let input = InputObjects.CreateArticleInput( - url: pageScrapePayload.url, preparedDocument: OptionalArgument(preparedDocument), - uploadFileId: uploadFileId != nil ? .present(uploadFileId!) : .null() + uploadFileId: uploadFileId != nil ? .present(uploadFileId!) : .null(), + url: pageScrapePayload.url ) let selection = Selection { try $0.on( - createArticleSuccess: .init { .saved(created: try $0.created()) }, - createArticleError: .init { .error(errorCode: (try? $0.errorCodes().first) ?? .unableToParse) } + createArticleError: .init { .error(errorCode: (try? $0.errorCodes().first) ?? .unableToParse) }, + createArticleSuccess: .init { .saved(created: try $0.created()) } ) } @@ -163,6 +163,7 @@ public extension DataService { let selection = Selection { try $0.on( + createArticleSavingRequestError: .init { .error(errorCode: (try? $0.errorCodes().first) ?? .badData) }, createArticleSavingRequestSuccess: .init { .saved( status: try $0.articleSavingRequest( @@ -174,8 +175,7 @@ public extension DataService { } ) ) - }, - createArticleSavingRequestError: .init { .error(errorCode: (try? $0.errorCodes().first) ?? .badData) } + } ) } @@ -219,14 +219,3 @@ public extension DataService { .eraseToAnyPublisher() } } - -private extension SaveArticleError { - static func make(from httpError: HttpError) -> SaveArticleError { - switch httpError { - case .network, .timeout: - return .network - case .badpayload, .badURL, .badstatus, .cancelled: - return .unknown(description: httpError.localizedDescription) - } - } -} diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SavePDF.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SavePDF.swift index 4267b5a6f..22017a74d 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SavePDF.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SavePDF.swift @@ -3,44 +3,29 @@ import Foundation import Models import SwiftGraphQL +public struct UploadFileRequestPayload { + public let uploadID: String? + public let uploadFileID: String? + public let urlString: String? +} + public extension DataService { - func uploadPDFPublisher( - pageScrapePayload: PageScrapePayload, - data: Data, - requestId: String - ) -> AnyPublisher { - uploadFileRequestPublisher(pageScrapePayload: pageScrapePayload, requestId: requestId) - .flatMap { self.uploadFilePublisher(fileUploadConfig: $0, data: data) } - .flatMap { self.saveFilePublisher(pageScrapePayload: pageScrapePayload, uploadFileId: $0, requestId: requestId) } - .catch { _ in self.saveUrlPublisher(pageScrapePayload: pageScrapePayload, requestId: requestId) } - .receive(on: DispatchQueue.main) - .eraseToAnyPublisher() - } -} - -private struct UploadFileRequestPayload { - let uploadID: String? - let uploadFileID: String? - let urlString: String? -} - -private extension DataService { - // swiftlint:disable:next line_length - func uploadFileRequestPublisher(pageScrapePayload: PageScrapePayload, requestId: String?) -> AnyPublisher { + func uploadFileRequest(id: String, url: String) async throws -> UploadFileRequestPayload { enum MutationResult { case success(payload: UploadFileRequestPayload) case error(errorCode: Enums.UploadFileRequestErrorCode?) } let input = InputObjects.UploadFileRequestInput( - url: pageScrapePayload.url, + clientRequestId: OptionalArgument(id), contentType: "application/pdf", - createPageEntry: OptionalArgument(true), - clientRequestId: OptionalArgument(requestId) + createPageEntry: OptionalArgument(false), + url: url ) let selection = Selection { try $0.on( + uploadFileRequestError: .init { .error(errorCode: try? $0.errorCodes().first) }, uploadFileRequestSuccess: .init { .success( payload: UploadFileRequestPayload( @@ -49,8 +34,7 @@ private extension DataService { urlString: try $0.uploadSignedUrl() ) ) - }, - uploadFileRequestError: .init { .error(errorCode: try? $0.errorCodes().first) } + } ) } @@ -61,88 +45,89 @@ private extension DataService { let path = appEnvironment.graphqlPath let headers = networker.defaultHeaders - return Deferred { - Future { promise in - send(mutation, to: path, headers: headers) { result in - switch result { - case let .success(payload): - if let graphqlError = payload.errors { - promise(.failure(.unknown(description: graphqlError.first.debugDescription))) - } - - switch payload.data { - case let .success(payload): - promise(.success(payload)) - case let .error(errorCode): - switch errorCode { - case .unauthorized: - promise(.failure(.unauthorized)) - default: - promise(.failure(.unknown(description: errorCode.debugDescription))) - } - } - case .failure: - promise(.failure(.badData)) + return try await withCheckedThrowingContinuation { continuation in + send(mutation, to: path, headers: headers) { result in + switch result { + case let .success(payload): + if let graphqlError = payload.errors { + continuation.resume( + throwing: SaveArticleError.unknown(description: graphqlError.first.debugDescription) + ) + return } + + switch payload.data { + case let .success(payload): + if let urlString = payload.urlString, let url = URL(string: urlString) { + continuation.resume(returning: payload) + } else { + continuation.resume(throwing: SaveArticleError.unknown(description: "No upload URL")) + } + case let .error(errorCode: errorCode): + switch errorCode { + case .unauthorized: + continuation.resume(throwing: SaveArticleError.unauthorized) + default: + continuation.resume(throwing: SaveArticleError.unknown(description: errorCode?.rawValue ?? "unknown")) + } + } + case let .failure(error): + continuation.resume(throwing: SaveArticleError.make(from: error)) } } } - .eraseToAnyPublisher() } - // swiftlint:disable:next line_length - func uploadFilePublisher(fileUploadConfig: UploadFileRequestPayload, data: Data) -> AnyPublisher { - let url = fileUploadConfig.urlString.flatMap { URL(string: $0) } - guard let url = url else { return Future { $0(.failure(.badData)) }.eraseToAnyPublisher() } - + func uploadFile(id _: String, localPdfURL: URL, url: URL) async throws { var request = URLRequest(url: url) request.httpMethod = "PUT" request.addValue("application/pdf", forHTTPHeaderField: "content-type") - request.httpBody = data - return networker.urlSession.dataTaskPublisher(for: request) - .tryMap { data, response -> String in - let serverResponse = ServerResponse(data: data, response: response) - if serverResponse.httpUrlResponse?.statusCode == 200, let fileUploadID = fileUploadConfig.uploadID { - return fileUploadID - } - - throw ServerError(serverResponse: serverResponse) - } - .mapError { error -> SaveArticleError in - let serverResponse = ServerResponse(error: error) - NetworkRequestLogger.log(request: request, serverResponse: serverResponse) - let serverError = ServerError(serverResponse: serverResponse) - switch serverError { - case .noConnection, .timeout: - return .network - case .unauthenticated: - return .unauthorized - case .unknown: - return .unknown(description: "upload to file server failed") + return try await withCheckedThrowingContinuation { continuation in + let task = networker.urlSession.uploadTask(with: request, fromFile: localPdfURL) { _, response, _ in + if let httpResponse = response as? HTTPURLResponse, 200 ... 299 ~= httpResponse.statusCode { + continuation.resume() + } else { + continuation.resume(throwing: SaveArticleError.unknown(description: "Invalid response")) } } - .eraseToAnyPublisher() + task.resume() + } + } + + func uploadFileInBackground(id: String, localPdfURL: String?, url: URL, usingSession session: URLSession) -> URLSessionTask? { + if let localPdfURL = localPdfURL, let localUrl = URL(string: localPdfURL) { + var request = URLRequest(url: url) + request.httpMethod = "PUT" + request.setValue("application/pdf", forHTTPHeaderField: "content-type") + request.setValue(id, forHTTPHeaderField: "clientRequestId") + + let task = session.uploadTask(with: request, fromFile: localUrl) + return task + } else { + // TODO: How should we handle this scenario? + return nil + } } // swiftlint:disable:next line_length - func saveFilePublisher(pageScrapePayload: PageScrapePayload, uploadFileId: String, requestId: String) -> AnyPublisher { + func saveFilePublisher(requestId: String, uploadFileId: String, url: String) async throws { enum MutationResult { case saved(requestId: String, url: String) case error(errorCode: Enums.SaveErrorCode) } let input = InputObjects.SaveFileInput( - url: pageScrapePayload.url, - source: "ios-file", clientRequestId: requestId, - uploadFileId: uploadFileId + source: "ios-file", + uploadFileId: uploadFileId, + url: url ) let selection = Selection { try $0.on( - saveSuccess: .init { .saved(requestId: requestId, url: (try? $0.url()) ?? "") }, - saveError: .init { .error(errorCode: (try? $0.errorCodes().first) ?? .unknown) } + saveError: .init { .error(errorCode: (try? $0.errorCodes().first) ?? .unknown) }, + saveSuccess: .init { .saved(requestId: requestId, url: (try? $0.url()) ?? "") } ) } @@ -153,34 +138,31 @@ private extension DataService { let path = appEnvironment.graphqlPath let headers = networker.defaultHeaders - return Deferred { - Future { promise in - send(mutation, to: path, headers: headers) { result in - switch result { - case let .success(payload): - if let graphqlError = payload.errors { - promise(.failure(.unknown(description: graphqlError.first.debugDescription))) - } - - switch payload.data { - case .saved: - promise(.success(())) - case let .error(errorCode: errorCode): - switch errorCode { - case .unauthorized: - promise(.failure(.unauthorized)) - default: - promise(.failure(.unknown(description: errorCode.rawValue))) - } - } - case let .failure(error): - promise(.failure(SaveError.make(from: error))) + return try await withCheckedThrowingContinuation { continuation in + send(mutation, to: path, headers: headers) { result in + switch result { + case let .success(payload): + if let graphqlError = payload.errors { + continuation.resume(throwing: SaveArticleError.unknown(description: graphqlError.first.debugDescription)) + return } + + switch payload.data { + case .saved: + continuation.resume() + case let .error(errorCode: errorCode): + switch errorCode { + case .unauthorized: + continuation.resume(throwing: SaveArticleError.unauthorized) + default: + continuation.resume(throwing: SaveArticleError.unknown(description: errorCode.rawValue)) + } + } + case let .failure(error): + continuation.resume(throwing: SaveArticleError.make(from: error)) } } } - .receive(on: DispatchQueue.main) - .eraseToAnyPublisher() } } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SavePage.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SavePage.swift index b3ae4fc12..57c2b3e79 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SavePage.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SavePage.swift @@ -1,27 +1,26 @@ -import Combine import Foundation import Models import SwiftGraphQL public extension DataService { - // swiftlint:disable:next line_length - func savePagePublisher(pageScrapePayload: PageScrapePayload, html: String, title: String?, requestId: String) -> AnyPublisher { + func savePage(id: String, url: String, title: String, originalHtml: String) async throws { enum MutationResult { case saved(requestId: String, url: String) case error(errorCode: Enums.SaveErrorCode) } let input = InputObjects.SavePageInput( - url: requestId, - source: html, - clientRequestId: "ios-page", + clientRequestId: id, + originalContent: originalHtml, + source: "ios-page", title: OptionalArgument(title), - originalContent: pageScrapePayload.url + url: url ) let selection = Selection { try $0.on( - saveSuccess: .init { .saved(requestId: requestId, url: (try? $0.url()) ?? "") }, saveError: .init { .error(errorCode: (try? $0.errorCodes().first) ?? .unknown) } + saveError: .init { .error(errorCode: (try? $0.errorCodes().first) ?? .unknown) }, + saveSuccess: .init { .saved(requestId: id, url: (try? $0.url()) ?? "") } ) } @@ -32,38 +31,36 @@ public extension DataService { let path = appEnvironment.graphqlPath let headers = networker.defaultHeaders - return Deferred { - Future { promise in - send(mutation, to: path, headers: headers) { result in - switch result { - case let .success(payload): - if let graphqlError = payload.errors { - promise(.failure(.unknown(description: graphqlError.first.debugDescription))) - } - - switch payload.data { - case .saved: - promise(.success(())) - case let .error(errorCode: errorCode): - switch errorCode { - case .unauthorized: - promise(.failure(.unauthorized)) - default: - promise(.failure(.unknown(description: errorCode.rawValue))) - } - } - case let .failure(error): - promise(.failure(SaveError.make(from: error))) + return try await withCheckedThrowingContinuation { continuation in + send(mutation, to: path, headers: headers) { result in + switch result { + case let .success(payload): + if let graphqlError = payload.errors { + continuation.resume( + throwing: SaveArticleError.unknown(description: graphqlError.first.debugDescription) + ) + return } + switch payload.data { + case .saved: + continuation.resume() + case let .error(errorCode: errorCode): + switch errorCode { + case .unauthorized: + continuation.resume(throwing: SaveArticleError.unauthorized) + default: + continuation.resume(throwing: SaveArticleError.unknown(description: errorCode.rawValue)) + } + } + case let .failure(error): + continuation.resume(throwing: SaveArticleError.make(from: error)) } } } - .receive(on: DispatchQueue.main) - .eraseToAnyPublisher() } } -private extension SaveError { +extension SaveArticleError { static func make(from httpError: HttpError) -> SaveArticleError { switch httpError { case .network, .timeout: diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SaveUrl.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SaveUrl.swift index 3a2ba77e7..34ac0ddf3 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SaveUrl.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/SaveUrl.swift @@ -1,26 +1,24 @@ -import Combine import Foundation import Models import SwiftGraphQL public extension DataService { - // swiftlint:disable:next line_length - func saveUrlPublisher(pageScrapePayload: PageScrapePayload, requestId: String) -> AnyPublisher { + func saveURL(id: String, url: String) async throws { enum MutationResult { case saved(requestId: String, url: String) case error(errorCode: Enums.SaveErrorCode) } let input = InputObjects.SaveUrlInput( - url: pageScrapePayload.url, + clientRequestId: id, source: "ios-url", - clientRequestId: requestId + url: url ) let selection = Selection { try $0.on( - saveSuccess: .init { .saved(requestId: requestId, url: (try? $0.url()) ?? "") }, - saveError: .init { .error(errorCode: (try? $0.errorCodes().first) ?? .unknown) } + saveError: .init { .error(errorCode: (try? $0.errorCodes().first) ?? .unknown) }, + saveSuccess: .init { .saved(requestId: id, url: (try? $0.url()) ?? "") } ) } @@ -31,44 +29,32 @@ public extension DataService { let path = appEnvironment.graphqlPath let headers = networker.defaultHeaders - return Deferred { - Future { promise in - send(mutation, to: path, headers: headers) { result in - switch result { - case let .success(payload): - if let graphqlError = payload.errors { - promise(.failure(.unknown(description: graphqlError.first.debugDescription))) - } - - switch payload.data { - case .saved: - promise(.success(())) - case let .error(errorCode: errorCode): - switch errorCode { - case .unauthorized: - promise(.failure(.unauthorized)) - default: - promise(.failure(.unknown(description: errorCode.rawValue))) - } - } - case let .failure(error): - promise(.failure(SaveError.make(from: error))) + return try await withCheckedThrowingContinuation { continuation in + send(mutation, to: path, headers: headers) { result in + switch result { + case let .success(payload): + if let graphqlError = payload.errors { + continuation.resume( + throwing: SaveArticleError.unknown(description: graphqlError.first.debugDescription) + ) + return } + + switch payload.data { + case .saved: + continuation.resume() + case let .error(errorCode: errorCode): + switch errorCode { + case .unauthorized: + continuation.resume(throwing: SaveArticleError.unauthorized) + default: + continuation.resume(throwing: SaveArticleError.unknown(description: errorCode.rawValue)) + } + } + case let .failure(error): + continuation.resume(throwing: SaveArticleError.make(from: error)) } } } - .receive(on: DispatchQueue.main) - .eraseToAnyPublisher() - } -} - -private extension SaveError { - static func make(from httpError: HttpError) -> SaveArticleError { - switch httpError { - case .network, .timeout: - return .network - case .badpayload, .badURL, .badstatus, .cancelled: - return .unknown(description: httpError.localizedDescription) - } } } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleLabelsPublisher.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleLabelsPublisher.swift index 0cf46dfac..cab778898 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleLabelsPublisher.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleLabelsPublisher.swift @@ -32,16 +32,16 @@ extension DataService { let selection = Selection { try $0.on( - setLabelsSuccess: .init { .saved(feedItem: try $0.labels(selection: feedItemLabelSelection.list)) }, - setLabelsError: .init { .error(errorCode: try $0.errorCodes().first ?? .badRequest) } + setLabelsError: .init { .error(errorCode: try $0.errorCodes().first ?? .badRequest) }, + setLabelsSuccess: .init { .saved(feedItem: try $0.labels(selection: feedItemLabelSelection.list)) } ) } let mutation = Selection.Mutation { try $0.setLabels( input: InputObjects.SetLabelsInput( - pageId: itemID, - labelIds: labelIDs + labelIds: labelIDs, + pageId: itemID ), selection: selection ) diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleReadingProgress.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleReadingProgress.swift index 95ba6f308..90a7bc752 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleReadingProgress.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleReadingProgress.swift @@ -33,12 +33,12 @@ extension DataService { let selection = Selection { try $0.on( + saveArticleReadingProgressError: .init { .error(errorCode: try $0.errorCodes().first ?? .badData) }, saveArticleReadingProgressSuccess: .init { .saved( readingProgress: try $0.updatedArticle(selection: Selection.Article { try $0.readingProgressPercent() }) ) - }, - saveArticleReadingProgressError: .init { .error(errorCode: try $0.errorCodes().first ?? .badData) } + } ) } @@ -46,8 +46,8 @@ extension DataService { try $0.saveArticleReadingProgress( input: InputObjects.SaveArticleReadingProgressInput( id: itemID, - readingProgressPercent: readingProgress, - readingProgressAnchorIndex: anchorIndex + readingProgressAnchorIndex: anchorIndex, + readingProgressPercent: readingProgress ), selection: selection ) diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateHighlightAttributes.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateHighlightAttributes.swift index 781306f18..ae757c230 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateHighlightAttributes.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateHighlightAttributes.swift @@ -31,18 +31,18 @@ extension DataService { let selection = Selection { try $0.on( + updateHighlightError: .init { .error(errorCode: try $0.errorCodes().first ?? .badData) }, updateHighlightSuccess: .init { .saved(highlight: try $0.highlight(selection: highlightSelection)) - }, - updateHighlightError: .init { .error(errorCode: try $0.errorCodes().first ?? .badData) } + } ) } let mutation = Selection.Mutation { try $0.updateHighlight( input: InputObjects.UpdateHighlightInput( - highlightId: highlightID, annotation: OptionalArgument(annotation), + highlightId: highlightID, sharedAt: OptionalArgument(nil) ), selection: selection diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Networking/Networker.swift b/apple/OmnivoreKit/Sources/Services/DataService/Networking/Networker.swift index 4f2869e23..5da9691de 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Networking/Networker.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Networking/Networker.swift @@ -1,9 +1,10 @@ import Foundation import Models -public final class Networker { +public final class Networker: NSObject, URLSessionTaskDelegate { let urlSession: URLSession let appEnvironment: AppEnvironment + var uploadQueue: [String: URLSessionUploadTask] = [:] var defaultHeaders: [String: String] { var headers = URLRequest.defaultHeaders @@ -15,9 +16,9 @@ public final class Networker { return headers } - public init(appEnvironment: AppEnvironment, urlSession: URLSession = .shared) { + public init(appEnvironment: AppEnvironment) { self.appEnvironment = appEnvironment - self.urlSession = urlSession + self.urlSession = .shared } } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/OfflineSync.swift b/apple/OmnivoreKit/Sources/Services/DataService/OfflineSync.swift index e64cee327..4950b7c9d 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/OfflineSync.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/OfflineSync.swift @@ -2,8 +2,8 @@ import CoreData import Foundation import Models -extension DataService { - func syncOfflineItemsWithServerIfNeeded() async throws { +public extension DataService { + internal func syncOfflineItemsWithServerIfNeeded() async throws { // TODO: send a simple request to see if we're online? var unsyncedLinkedItems = [LinkedItem]() var unsyncedHighlights = [Highlight]() @@ -35,12 +35,110 @@ extension DataService { } } + private func updateLinkedItemStatus(id: String, status: ServerSyncStatus) async throws { + try backgroundContext.performAndWait { + let fetchRequest: NSFetchRequest = LinkedItem.fetchRequest() + fetchRequest.predicate = NSPredicate(format: "id == %@", id) + + guard let linkedItem = (try? backgroundContext.fetch(fetchRequest))?.first else { return } + linkedItem.serverSyncStatus = Int64(status.rawValue) + } + } + + func syncPdf(id: String, localPdfURL: URL, url: String) async throws { + do { + let uploadRequest = try await uploadFileRequest(id: id, url: url) + if let urlString = uploadRequest.urlString, let uploadUrl = URL(string: urlString) { + try await uploadFile(id: id, localPdfURL: localPdfURL, url: uploadUrl) + // try await services.dataService.saveFilePublisher(requestId: requestId, uploadFileId: uploadFileID, url: url) + } else { + throw SaveArticleError.badData + } + + try await updateLinkedItemStatus(id: id, status: .isNSync) + try backgroundContext.performAndWait { + try backgroundContext.save() + } + } catch { + backgroundContext.performAndWait { + backgroundContext.rollback() + } + throw error + } + } + + func syncPage(id: String, originalHtml: String, title: String?, url: String) async throws { + do { + try await savePage(id: id, url: url, title: title ?? url, originalHtml: originalHtml) + try await updateLinkedItemStatus(id: id, status: .isNSync) + try backgroundContext.performAndWait { + try backgroundContext.save() + } + } catch { + backgroundContext.performAndWait { + backgroundContext.rollback() + } + throw error + } + } + + func syncUrl(id: String, url: String) async throws { + do { + try await updateLinkedItemStatus(id: id, status: .isSyncing) + try await saveURL(id: id, url: url) + try backgroundContext.performAndWait { + try backgroundContext.save() + } + } catch { + backgroundContext.performAndWait { + backgroundContext.rollback() + } + throw error + } + } + + func syncLocalCreatedLinkedItem(item: LinkedItem) { + switch item.contentReader { + case "PDF": + let id = item.unwrappedID + let localPdfURL = item.localPdfURL + let url = item.unwrappedPageURLString + + if let pdfUrlStr = localPdfURL, let localPdfURL = URL(string: pdfUrlStr) { + Task { + try await syncPdf(id: id, localPdfURL: localPdfURL, url: url) + } + } else { + // TODO: This is an invalid object, we should have a way of reflecting that with an error state + // updateLinkedItemStatus(id: id, status: .) + } + case "WEB": + let id = item.unwrappedID + let url = item.unwrappedPageURLString + let title = item.unwrappedTitle + let originalHtml = item.originalHtml + + Task { + if let originalHtml = originalHtml { + try await syncPage(id: id, originalHtml: originalHtml, title: title, url: url) + } else { + try await syncUrl(id: id, url: url) + } + } + default: + break + } + } + private func syncLinkedItems(unsyncedLinkedItems: [LinkedItem]) { for item in unsyncedLinkedItems { guard let syncStatus = ServerSyncStatus(rawValue: Int(item.serverSyncStatus)) else { continue } switch syncStatus { - case .isNSync, .isSyncing, .needsCreation: + case .needsCreation: + item.serverSyncStatus = Int64(ServerSyncStatus.isSyncing.rawValue) + syncLocalCreatedLinkedItem(item: item) + case .isNSync, .isSyncing: break case .needsDeletion: item.serverSyncStatus = Int64(ServerSyncStatus.isSyncing.rawValue) @@ -88,4 +186,23 @@ extension DataService { } } } + + @objc + func locallyCreatedItemSynced(notification: NSNotification) { + print("SYNCED LOCALLY CREATED ITEM", notification) + if let objectId = notification.userInfo?["objectID"] as? String { + do { + try backgroundContext.performAndWait { + let fetchRequest: NSFetchRequest = LinkedItem.fetchRequest() + fetchRequest.predicate = NSPredicate(format: "id == %@", objectId) + if let existingItem = try? self.backgroundContext.fetch(fetchRequest).first { + existingItem.serverSyncStatus = Int64(ServerSyncStatus.isNSync.rawValue) + try self.backgroundContext.save() + } + } + } catch { + print("ERROR", error) + } + } + } } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Queries/ArticleContentQuery.swift b/apple/OmnivoreKit/Sources/Services/DataService/Queries/ArticleContentQuery.swift index b954c3a82..89da84ecd 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Queries/ArticleContentQuery.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Queries/ArticleContentQuery.swift @@ -85,6 +85,9 @@ extension DataService { return cachedContent } + // If the page was locally created, make sure they are synced before we pull content + await syncUnsyncedArticleContent(itemID: itemID) + enum QueryResult { case success(result: ArticleProps) case error(error: String) @@ -97,6 +100,7 @@ extension DataService { title: try $0.title(), createdAt: try $0.createdAt().value ?? Date(), savedAt: try $0.savedAt().value ?? Date(), + updatedAt: try $0.updatedAt().value ?? Date(), readingProgress: try $0.readingProgressPercent(), readingProgressAnchor: try $0.readingProgressAnchorIndex(), imageURLString: try $0.image(), @@ -111,6 +115,7 @@ extension DataService { slug: try $0.slug(), isArchived: try $0.isArchived(), contentReader: try $0.contentReader().rawValue, + originalHtml: nil, labels: try $0.labels(selection: feedItemLabelSelection.list.nullable) ?? [] ), htmlContent: try $0.content(), @@ -121,17 +126,17 @@ extension DataService { let selection = Selection { try $0.on( - articleSuccess: .init { - QueryResult.success(result: try $0.article(selection: articleContentSelection)) - }, articleError: .init { QueryResult.error(error: try $0.errorCodes().description) + }, + articleSuccess: .init { + QueryResult.success(result: try $0.article(selection: articleContentSelection)) } ) } let query = Selection.Query { - try $0.article(username: username, slug: itemID, selection: selection) + try $0.article(slug: itemID, username: username, selection: selection) } let path = appEnvironment.graphqlPath @@ -217,7 +222,7 @@ extension DataService { linkedItem.isArchived = item.isArchived linkedItem.contentReader = item.contentReader - if linkedItem.isPDF, linkedItem.pdfData == nil { + if linkedItem.isPDF, linkedItem.localPdfURL == nil { do { try self.fetchPDFData(slug: linkedItem.unwrappedSlug, pageURLString: linkedItem.unwrappedPageURLString) } catch { @@ -257,9 +262,16 @@ extension DataService { let errorMessage = "pdfFetch failed. could not find LinkedItem from fetch request" throw BasicError.message(messageText: errorMessage) } - linkedItem.pdfData = data + + let subPath = UUID().uuidString + ".pdf" // linkedItem.title.isEmpty ? UUID().uuidString : linkedItem.title + + let path = FileManager.default + .urls(for: .cachesDirectory, in: .userDomainMask)[0] + .appendingPathComponent(subPath) do { + try data.write(to: path) + linkedItem.localPdfURL = path.absoluteString try self?.backgroundContext.save() logger.debug("PDF data saved succesfully") } catch { @@ -296,6 +308,49 @@ extension DataService { ) } } + + public func syncUnsyncedArticleContent(itemID: String) async { + let linkedItemFetchRequest: NSFetchRequest = LinkedItem.fetchRequest() + linkedItemFetchRequest.predicate = NSPredicate( + format: "id == %@", itemID + ) + + let context = backgroundContext + + var id: String? + var url: String? + var title: String? + var originalHtml: String? + var serverSyncStatus: Int64? + + backgroundContext.performAndWait { + guard let linkedItem = try? context.fetch(linkedItemFetchRequest).first else { return } + id = linkedItem.unwrappedID + url = linkedItem.unwrappedPageURLString + title = linkedItem.unwrappedTitle + originalHtml = linkedItem.originalHtml + serverSyncStatus = linkedItem.serverSyncStatus + } + + if let id = id, let url = url, let title = title, + let serverSyncStatus = serverSyncStatus, + serverSyncStatus != ServerSyncStatus.isNSync.rawValue + { + do { + if let originalHtml = originalHtml { + try await savePage(id: id, url: url, title: title, originalHtml: originalHtml) + } else { + try await saveURL(id: id, url: url) + } + try backgroundContext.performAndWait { + try backgroundContext.save() + } + } catch { + // We don't propogate these errors, we just let it pass through so + // the user can attempt to fetch content again. + } + } + } } private extension ArticleContentStatus { diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Queries/LabelsPublisher.swift b/apple/OmnivoreKit/Sources/Services/DataService/Queries/LabelsPublisher.swift index 9d8478d9f..b6b920a25 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Queries/LabelsPublisher.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Queries/LabelsPublisher.swift @@ -12,11 +12,11 @@ public extension DataService { let selection = Selection { try $0.on( - labelsSuccess: .init { - QueryResult.success(result: try $0.labels(selection: feedItemLabelSelection.list)) - }, labelsError: .init { QueryResult.error(error: try $0.errorCodes().description) + }, + labelsSuccess: .init { + QueryResult.success(result: try $0.labels(selection: feedItemLabelSelection.list)) } ) } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Queries/LibraryItemsQuery.swift b/apple/OmnivoreKit/Sources/Services/DataService/Queries/LibraryItemsQuery.swift index edc905154..6d2acdf74 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Queries/LibraryItemsQuery.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Queries/LibraryItemsQuery.swift @@ -24,6 +24,9 @@ public extension DataService { let selection = Selection { try $0.on( + articlesError: .init { + QueryResult.error(error: try $0.errorCodes().description) + }, articlesSuccess: .init { QueryResult.success( result: InternalHomeFeedData( @@ -33,25 +36,23 @@ public extension DataService { }) ) ) - }, - articlesError: .init { - QueryResult.error(error: try $0.errorCodes().description) } ) } let query = Selection.Query { try $0.articles( + after: OptionalArgument(cursor), + first: OptionalArgument(limit), + includePending: OptionalArgument(true), + query: OptionalArgument(searchQuery), sharedOnly: .present(false), sort: OptionalArgument( InputObjects.SortParams( - order: .present(.descending), by: .updatedTime + by: .updatedTime, + order: .present(.descending) ) ), - after: OptionalArgument(cursor), - first: OptionalArgument(limit), - query: OptionalArgument(searchQuery), - includePending: OptionalArgument(true), selection: selection ) } @@ -96,6 +97,7 @@ public extension DataService { title: try $0.title(), createdAt: try $0.createdAt().value ?? Date(), savedAt: try $0.savedAt().value ?? Date(), + updatedAt: try $0.updatedAt().value ?? Date(), readingProgress: try $0.readingProgressPercent(), readingProgressAnchor: try $0.readingProgressAnchorIndex(), imageURLString: try $0.image(), @@ -110,24 +112,25 @@ public extension DataService { slug: try $0.slug(), isArchived: try $0.isArchived(), contentReader: try $0.contentReader().rawValue, + originalHtml: nil, labels: try $0.labels(selection: feedItemLabelSelection.list.nullable) ?? [] ) } let selection = Selection { try $0.on( - articleSuccess: .init { - QueryResult.success(result: try $0.article(selection: articleSelection)) - }, articleError: .init { QueryResult.error(error: try $0.errorCodes().description) + }, + articleSuccess: .init { + QueryResult.success(result: try $0.article(selection: articleSelection)) } ) } let query = Selection.Query { // backend has a hack that allows us to pass in itemID in place of slug - try $0.article(username: username, slug: itemID, selection: selection) + try $0.article(slug: itemID, username: username, selection: selection) } let path = appEnvironment.graphqlPath @@ -160,6 +163,7 @@ private let libraryArticleSelection = Selection.Article { title: try $0.title(), createdAt: try $0.createdAt().value ?? Date(), savedAt: try $0.savedAt().value ?? Date(), + updatedAt: try $0.updatedAt().value ?? Date(), readingProgress: try $0.readingProgressPercent(), readingProgressAnchor: try $0.readingProgressAnchorIndex(), imageURLString: try $0.image(), @@ -174,6 +178,7 @@ private let libraryArticleSelection = Selection.Article { slug: try $0.slug(), isArchived: try $0.isArchived(), contentReader: try $0.contentReader().rawValue, + originalHtml: nil, labels: try $0.labels(selection: feedItemLabelSelection.list.nullable) ?? [] ) } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Queries/LinkedItemIDsQuery.swift b/apple/OmnivoreKit/Sources/Services/DataService/Queries/LinkedItemIDsQuery.swift index 1411cf1e8..f6dede0d3 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Queries/LinkedItemIDsQuery.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Queries/LinkedItemIDsQuery.swift @@ -20,6 +20,9 @@ extension DataService { let selection = Selection { try $0.on( + searchError: .init { + QueryResult.error(error: try $0.errorCodes().description) + }, searchSuccess: .init { QueryResult.success( result: LinkedItemIDFetchResult( @@ -29,9 +32,6 @@ extension DataService { }) ) ) - }, - searchError: .init { - QueryResult.error(error: try $0.errorCodes().description) } ) } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Queries/NewsletterEmailsQuery.swift b/apple/OmnivoreKit/Sources/Services/DataService/Queries/NewsletterEmailsQuery.swift index 49545956c..ff8e05bf2 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Queries/NewsletterEmailsQuery.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Queries/NewsletterEmailsQuery.swift @@ -20,11 +20,11 @@ public extension DataService { let selection = Selection { try $0.on( - newsletterEmailsSuccess: .init { - QueryResult.success(result: try $0.newsletterEmails(selection: newsletterEmailSelection.list)) - }, newsletterEmailsError: .init { QueryResult.error(error: try $0.errorCodes().description) + }, + newsletterEmailsSuccess: .init { + QueryResult.success(result: try $0.newsletterEmails(selection: newsletterEmailSelection.list)) } ) } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Queries/SubscriptionsQuery.swift b/apple/OmnivoreKit/Sources/Services/DataService/Queries/SubscriptionsQuery.swift index 962e42de6..2c2976126 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Queries/SubscriptionsQuery.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Queries/SubscriptionsQuery.swift @@ -26,11 +26,11 @@ public extension DataService { let selection = Selection { try $0.on( - subscriptionsSuccess: .init { - QueryResult.success(result: try $0.subscriptions(selection: subsciptionSelection.list)) - }, subscriptionsError: .init { QueryResult.error(error: try $0.errorCodes().description) + }, + subscriptionsSuccess: .init { + QueryResult.success(result: try $0.subscriptions(selection: subsciptionSelection.list)) } ) } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/SaveService.swift b/apple/OmnivoreKit/Sources/Services/DataService/SaveService.swift new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/apple/OmnivoreKit/Sources/Services/DataService/SaveService.swift @@ -0,0 +1 @@ + diff --git a/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift b/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift index d050c5e4f..9e60704c9 100644 --- a/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift +++ b/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift @@ -7,6 +7,7 @@ struct InternalLinkedItem { let title: String let createdAt: Date let savedAt: Date + let updatedAt: Date var readingProgress: Double var readingProgressAnchor: Int let imageURLString: String? @@ -21,6 +22,7 @@ struct InternalLinkedItem { let slug: String let isArchived: Bool let contentReader: String? + let originalHtml: String? var labels: [InternalLinkedItemLabel] var isPDF: Bool { @@ -38,6 +40,7 @@ struct InternalLinkedItem { linkedItem.title = title linkedItem.createdAt = createdAt linkedItem.savedAt = savedAt + linkedItem.updatedAt = updatedAt linkedItem.readingProgress = readingProgress linkedItem.readingProgressAnchor = Int64(readingProgressAnchor) linkedItem.imageURLString = imageURLString @@ -51,6 +54,7 @@ struct InternalLinkedItem { linkedItem.slug = slug linkedItem.isArchived = isArchived linkedItem.contentReader = contentReader + linkedItem.originalHtml = originalHtml for label in labels { linkedItem.addToLabels(label.asManagedObject(inContext: context)) @@ -93,6 +97,7 @@ extension JSONArticle { title: title, createdAt: createdAt, savedAt: savedAt, + updatedAt: updatedAt, readingProgress: readingProgressPercent, readingProgressAnchor: readingProgressAnchorIndex, imageURLString: image, @@ -107,6 +112,7 @@ extension JSONArticle { slug: slug, isArchived: isArchived, contentReader: contentReader, + originalHtml: nil, labels: [] ) diff --git a/apple/OmnivoreKit/Sources/Utils/NormalizeURL.swift b/apple/OmnivoreKit/Sources/Utils/NormalizeURL.swift new file mode 100644 index 000000000..3d31dbe52 --- /dev/null +++ b/apple/OmnivoreKit/Sources/Utils/NormalizeURL.swift @@ -0,0 +1,52 @@ +// +// NormalizeURL.swift +// +// +// Created by Jackson Harper on 6/2/22. +// + +import Foundation + +// based losesly on the normalize-url npm package which we use on the backend +public func normalizeURL(_ dirtyURL: String) -> String { + var urlString = dirtyURL + + urlString = urlString.trimmingCharacters(in: .whitespacesAndNewlines) + + if var urlObject = URLComponents(string: urlString) { + // Remove auth + if /* options.stripAuthentication */ true { + urlObject.user = nil + urlObject.password = nil + } + + // Remove hash + if /* options.stripHash */ true { + urlObject.fragment = nil + } + + urlObject.queryItems = urlObject.queryItems?.filter { item in + item.name.starts(with: "utm_") + } + + if /* options.removeTrailingSlash */ true { + urlObject.path = urlObject.path.replacingRegex(pattern: "/$", replaceWith: "") + } + + if let finalUrl = urlObject.url { + return finalUrl.absoluteString + } + } + + return dirtyURL +} + +private extension String { + func replacingRegex(pattern: String, replaceWith: String = "") -> String { + do { + let regex = try NSRegularExpression(pattern: pattern, options: [.caseInsensitive, .anchorsMatchLines]) + let range = NSRange(location: 0, length: utf16.count) + return regex.stringByReplacingMatches(in: self, options: [], range: range, withTemplate: replaceWith) + } catch { return self } + } +} diff --git a/apple/OmnivoreKit/Sources/Utils/PDFUtils.swift b/apple/OmnivoreKit/Sources/Utils/PDFUtils.swift new file mode 100644 index 000000000..87f483918 --- /dev/null +++ b/apple/OmnivoreKit/Sources/Utils/PDFUtils.swift @@ -0,0 +1,62 @@ +// +// PDFUtils.swift +// +// +// Created by Jackson Harper on 6/3/22. +// + +import CoreImage +import Foundation +import QuickLookThumbnailing +import UIKit + +public enum PDFUtils { + public static func titleFromPdfFile(_ urlStr: String) -> String { + let url = URL(string: urlStr) + if let url = url { + return url.lastPathComponent + } + return urlStr + } + + public static func titleFromUrl(_ urlStr: String) -> String { + let url = URL(string: urlStr) + if let url = url { + return url.lastPathComponent + } + return urlStr + } + + public static func thumbnailUrl(localUrl: URL) -> URL { + var thumbnailUrl = localUrl + thumbnailUrl.appendPathExtension(".jpg") + return thumbnailUrl + } + + public static func createThumbnailFor(inputUrl: URL) async throws -> URL? { + let size = CGSize(width: 80, height: 80) + let scale = await UIScreen.main.scale + let outputUrl = thumbnailUrl(localUrl: inputUrl) + + // Create the thumbnail request. + let request = + QLThumbnailGenerator.Request( + fileAt: inputUrl, + size: size, + scale: scale, + representationTypes: .all + ) + + // Retrieve the singleton instance of the thumbnail generator and generate the thumbnails. + let generator = QLThumbnailGenerator.shared + return try await withCheckedThrowingContinuation { continuation in + generator.saveBestRepresentation(for: request, to: outputUrl, contentType: UTType.jpeg.identifier) { error in + if let error = error { + continuation.resume(throwing: error) + return + } + continuation.resume(returning: outputUrl) + } + } + } +} diff --git a/apple/OmnivoreKit/Sources/Utils/UserDefaultKeys.swift b/apple/OmnivoreKit/Sources/Utils/UserDefaultKeys.swift index c32f00401..6d6b03824 100644 --- a/apple/OmnivoreKit/Sources/Utils/UserDefaultKeys.swift +++ b/apple/OmnivoreKit/Sources/Utils/UserDefaultKeys.swift @@ -1,10 +1,15 @@ import Foundation public enum UserDefaultKey: String { + case preferredWebFont case preferredWebFontSize + case preferredWebLineSpacing + case preferredWebMargin + case prefersHighContrastWebFont case userHasDeniedPushPrimer case firebasePushToken case homeFeedlayoutPreference case lastSelectedLinkedItemFilter case lastUsedAppVersion + case lastUsedAppBuildNumber } diff --git a/apple/OmnivoreKit/Sources/Views/Article/WebAppView.swift b/apple/OmnivoreKit/Sources/Views/Article/WebAppView.swift index a78344f6e..4dfc776cd 100644 --- a/apple/OmnivoreKit/Sources/Views/Article/WebAppView.swift +++ b/apple/OmnivoreKit/Sources/Views/Article/WebAppView.swift @@ -95,17 +95,17 @@ public enum WebViewManager { if annotationSaveTransactionID != context.coordinator.lastSavedAnnotationID { context.coordinator.lastSavedAnnotationID = annotationSaveTransactionID - (webView as? WebView)?.saveAnnotation(annotation: annotation) + (webView as? WebView)?.dispatchEvent(.saveAnnotation(annotation: annotation)) } if sendIncreaseFontSignal { sendIncreaseFontSignal = false - (webView as? WebView)?.increaseFontSize() + (webView as? WebView)?.updateFontSize() } if sendDecreaseFontSignal { sendDecreaseFontSignal = false - (webView as? WebView)?.decreaseFontSize() + (webView as? WebView)?.updateFontSize() } } } diff --git a/apple/OmnivoreKit/Sources/Views/Article/WebView.swift b/apple/OmnivoreKit/Sources/Views/Article/WebView.swift index b45018a91..c45fe3ad3 100644 --- a/apple/OmnivoreKit/Sources/Views/Article/WebView.swift +++ b/apple/OmnivoreKit/Sources/Views/Article/WebView.swift @@ -1,3 +1,4 @@ +import Utils import WebKit /// Describes actions that can be sent from the WebView back to native views. @@ -26,21 +27,46 @@ public final class WebView: WKWebView { fatalError("init(coder:) has not been implemented") } - public func increaseFontSize() { - dispatchEvent("increaseFontSize") + public func updateFontFamily() { + if let fontFamily = UserDefaults.standard.value(forKey: UserDefaultKey.preferredWebFont.rawValue) as? String { + dispatchEvent(.updateFontFamily(family: fontFamily)) + } } - public func decreaseFontSize() { - dispatchEvent("decreaseFontSize") + public func updateFontSize() { + if let fontSize = UserDefaults.standard.value(forKey: UserDefaultKey.preferredWebFontSize.rawValue) as? Int { + dispatchEvent(.updateFontSize(size: fontSize)) + } + } + + public func updateMargin() { + if let margin = UserDefaults.standard.value(forKey: UserDefaultKey.preferredWebMargin.rawValue) as? Int { + dispatchEvent(.updateMargin(width: margin)) + } + } + + public func updateLineHeight() { + if let height = UserDefaults.standard.value(forKey: UserDefaultKey.preferredWebLineSpacing.rawValue) as? Int { + dispatchEvent(.updateLineHeight(height: height)) + } + } + + public func updateTextContrast() { + let isHighContrast = UserDefaults.standard.value( + forKey: UserDefaultKey.prefersHighContrastWebFont.rawValue + ) as? Bool + + if let isHighContrast = isHighContrast { + dispatchEvent(.handleFontContrastChange(isHighContrast: isHighContrast)) + } } public func shareOriginalItem() { - dispatchEvent("share") + dispatchEvent(.share) } - func dispatchEvent(_ name: String) { - let dispatch = "document.dispatchEvent(new Event('\(name)'));" - evaluateJavaScript(dispatch) { obj, err in + public func dispatchEvent(_ event: WebViewDispatchEvent) { + evaluateJavaScript(event.script) { obj, err in if let err = err { print(err) } if let obj = obj { print(obj) } } @@ -50,12 +76,7 @@ public final class WebView: WKWebView { override public func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { super.traitCollectionDidChange(previousTraitCollection) guard previousTraitCollection?.userInterfaceStyle != traitCollection.userInterfaceStyle else { return } - - if traitCollection.userInterfaceStyle == .dark { - dispatchEvent("switchToDarkMode") - } else { - dispatchEvent("switchToLightMode") - } + dispatchEvent(.updateColorMode(isDark: traitCollection.userInterfaceStyle == .dark)) } #elseif os(macOS) @@ -149,28 +170,28 @@ public final class WebView: WKWebView { } @objc private func annotateSelection() { - dispatchEvent("annotate") + dispatchEvent(.annotate) hideMenu() } @objc private func highlightSelection() { - dispatchEvent("highlight") + dispatchEvent(.highlight) hideMenu() } @objc private func shareSelection() { - dispatchEvent("share") + dispatchEvent(.share) hideMenu() } @objc private func removeSelection() { - dispatchEvent("remove") + dispatchEvent(.remove) hideMenu() } @objc override public func copy(_ sender: Any?) { super.copy(sender) - dispatchEvent("copyHighlight") + dispatchEvent(.copyHighlight) hideMenu() } @@ -189,7 +210,7 @@ public final class WebView: WKWebView { private func hideMenuAndDismissHighlight() { hideMenu() - dispatchEvent("dismissHighlight") + dispatchEvent(.dismissHighlight) } private func showHighlightMenu(_ rect: CGRect) { @@ -213,14 +234,77 @@ public final class WebView: WKWebView { UIMenuController.shared.showMenu(from: self, rect: rect) } - - public func saveAnnotation(annotation: String) { - // swiftlint:disable:next line_length - let dispatch = "var event = new Event('saveAnnotation');event.annotation = '\(annotation)';document.dispatchEvent(event);" - evaluateJavaScript(dispatch) { obj, err in - if let err = err { print(err) } - if let obj = obj { print(obj) } - } - } } #endif + +public enum WebViewDispatchEvent { + case handleFontContrastChange(isHighContrast: Bool) + case updateLineHeight(height: Int) + case updateMargin(width: Int) + case updateFontSize(size: Int) + case updateColorMode(isDark: Bool) + case updateFontFamily(family: String) + case saveAnnotation(annotation: String) + case annotate + case highlight + case share + case remove + case copyHighlight + case dismissHighlight + + var script: String { + "var event = new Event('\(eventName)');\(scriptPropertyLine)document.dispatchEvent(event);" + } + + private var eventName: String { + switch self { + case .handleFontContrastChange: + return "handleFontContrastChange" + case .updateLineHeight: + return "updateLineHeight" + case .updateMargin: + return "updateMargin" + case .updateFontSize: + return "updateFontSize" + case .updateColorMode: + return "updateColorMode" + case .updateFontFamily: + return "updateFontFamily" + case .saveAnnotation: + return "saveAnnotation" + case .annotate: + return "annotate" + case .highlight: + return "highlight" + case .share: + return "share" + case .remove: + return "remove" + case .copyHighlight: + return "copyHighlight" + case .dismissHighlight: + return "dismissHighlight" + } + } + + private var scriptPropertyLine: String { + switch self { + case let .handleFontContrastChange(isHighContrast: isHighContrast): + return "event.fontContrast = '\(isHighContrast ? "high" : "normal")';" + case let .updateLineHeight(height: height): + return "event.lineHeight = '\(height)';" + case let .updateMargin(width: width): + return "event.margin = '\(width)';" + case let .updateFontSize(size: size): + return "event.fontSize = '\(size)';" + case let .updateColorMode(isDark: isDark): + return "event.isDarkMode = '\(isDark)';" + case let .updateFontFamily(family: family): + return "event.fontFamily = '\(family)';" + case let .saveAnnotation(annotation: annotation): + return "event.annotation = '\(annotation)';" + case .annotate, .highlight, .share, .remove, .copyHighlight, .dismissHighlight: + return "" + } + } +} diff --git a/apple/OmnivoreKit/Sources/Views/Buttons/AppleSignInButton.swift b/apple/OmnivoreKit/Sources/Views/Buttons/AppleSignInButton.swift index b8381201f..a4e206e52 100644 --- a/apple/OmnivoreKit/Sources/Views/Buttons/AppleSignInButton.swift +++ b/apple/OmnivoreKit/Sources/Views/Buttons/AppleSignInButton.swift @@ -18,8 +18,9 @@ public struct AppleSignInButton: View { }, onCompletion: onCompletion ) - .frame(height: 44) + .frame(height: 54) + .frame(maxWidth: 300) .cornerRadius(8) - .signInWithAppleButtonStyle(colorScheme == .dark ? .white : .black) + .signInWithAppleButtonStyle(.white) } } diff --git a/apple/OmnivoreKit/Sources/Views/Buttons/GoogleAuthButton.swift b/apple/OmnivoreKit/Sources/Views/Buttons/GoogleAuthButton.swift index 9296252c7..fdfffccef 100644 --- a/apple/OmnivoreKit/Sources/Views/Buttons/GoogleAuthButton.swift +++ b/apple/OmnivoreKit/Sources/Views/Buttons/GoogleAuthButton.swift @@ -12,13 +12,14 @@ public struct GoogleAuthButton: View { HStack(spacing: 8) { Image.googleIcon .resizable() - .frame(width: 12, height: 12) + .frame(width: 16, height: 16) Text(LocalText.googleAuthButton) - .font(isMacApp ? .appCaption : .appBody) + .font(isMacApp ? .appCaption : .appTitleThree) .foregroundColor(.black) + .fontWeight(Font.Weight.medium) } - .frame(maxWidth: .infinity) - .frame(height: isMacApp ? 30 : 44) + .frame(maxWidth: 300) + .frame(height: isMacApp ? 30 : 54) } .buttonStyle(GoogleButtonStyle()) } diff --git a/apple/OmnivoreKit/Sources/Views/Colors/Colors.xcassets/_background.colorset/Contents.json b/apple/OmnivoreKit/Sources/Views/Colors/Colors.xcassets/_background.colorset/Contents.json index f39b6241a..eddecb30f 100644 --- a/apple/OmnivoreKit/Sources/Views/Colors/Colors.xcassets/_background.colorset/Contents.json +++ b/apple/OmnivoreKit/Sources/Views/Colors/Colors.xcassets/_background.colorset/Contents.json @@ -5,9 +5,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0x9F", - "green" : "0xEA", - "red" : "0xFF" + "blue" : "0xA8", + "green" : "0xEB", + "red" : "0xFB" } }, "idiom" : "universal" @@ -23,9 +23,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0x9F", - "green" : "0xEA", - "red" : "0xFF" + "blue" : "0xA8", + "green" : "0xEB", + "red" : "0xFB" } }, "idiom" : "universal" diff --git a/apple/OmnivoreKit/Sources/Views/FontSizeAdjustmentPopoverView.swift b/apple/OmnivoreKit/Sources/Views/FontSizeAdjustmentPopoverView.swift index 11f5131d5..b211ac8ee 100644 --- a/apple/OmnivoreKit/Sources/Views/FontSizeAdjustmentPopoverView.swift +++ b/apple/OmnivoreKit/Sources/Views/FontSizeAdjustmentPopoverView.swift @@ -1,6 +1,197 @@ import SwiftUI import Utils +public enum WebFont: String, CaseIterable { + case inter = "Inter" + case merriweather = "Merriweather" + case lyon = "Lyon" + case tisa = "Tisa" + case system = "unset" + + var displayValue: String { + switch self { + case .inter, .merriweather, .lyon, .tisa: + return rawValue + case .system: + return "System Default" + } + } +} + +public struct WebPreferencesPopoverView: View { + let updateFontFamilyAction: () -> Void + let updateFontAction: () -> Void + let updateTextContrastAction: () -> Void + let updateMarginAction: () -> Void + let updateLineHeightAction: () -> Void + let dismissAction: () -> Void + + static let preferredWebFontSizeKey = UserDefaultKey.preferredWebFontSize.rawValue + #if os(macOS) + @AppStorage(preferredWebFontSizeKey) var storedFontSize = Int(NSFont.userFont(ofSize: 16)?.pointSize ?? 16) + #else + @AppStorage(preferredWebFontSizeKey) var storedFontSize: Int = UITraitCollection.current.preferredWebFontSize + #endif + + @AppStorage(UserDefaultKey.preferredWebLineSpacing.rawValue) var storedLineSpacing = 150 + @AppStorage(UserDefaultKey.preferredWebMargin.rawValue) var storedMargin = 360 + @AppStorage(UserDefaultKey.preferredWebFont.rawValue) var preferredFont = WebFont.inter.rawValue + @AppStorage(UserDefaultKey.prefersHighContrastWebFont.rawValue) var prefersHighContrastText = false + + public init( + updateFontFamilyAction: @escaping () -> Void, + updateFontAction: @escaping () -> Void, + updateTextContrastAction: @escaping () -> Void, + updateMarginAction: @escaping () -> Void, + updateLineHeightAction: @escaping () -> Void, + dismissAction: @escaping () -> Void + ) { + self.updateFontFamilyAction = updateFontFamilyAction + self.updateFontAction = updateFontAction + self.updateTextContrastAction = updateTextContrastAction + self.updateMarginAction = updateMarginAction + self.updateLineHeightAction = updateLineHeightAction + self.dismissAction = dismissAction + } + + var fontList: some View { + List { + ForEach(WebFont.allCases, id: \.self) { font in + Button( + action: { + preferredFont = font.rawValue + updateFontFamilyAction() + }, + label: { + HStack { + Text(font.displayValue).foregroundColor(.appGrayTextContrast) + Spacer() + if font.rawValue == preferredFont { + Image(systemName: "checkmark").foregroundColor(.appGrayTextContrast) + } + } + } + ) + } + } + .listStyle(.plain) + .navigationBarTitleDisplayMode(.inline) + .navigationTitle("Reader Font") + } + + public var body: some View { + NavigationView { + ScrollView(showsIndicators: false) { + VStack(alignment: .center) { + VStack { + LabelledStepper( + labelText: "Font Size:", + onIncrement: { + storedFontSize = min(storedFontSize + 2, 28) + updateFontAction() + }, + onDecrement: { + storedFontSize = max(storedFontSize - 2, 10) + updateFontAction() + } + ) + + if UIDevice.isIPad { + LabelledStepper( + labelText: "Margin:", + onIncrement: { + storedMargin = min(storedMargin + 45, 560) + updateMarginAction() + }, + onDecrement: { + storedMargin = max(storedMargin - 45, 200) + updateMarginAction() + } + ) + } + + LabelledStepper( + labelText: "Line Spacing:", + onIncrement: { + storedLineSpacing = min(storedLineSpacing + 25, 300) + updateLineHeightAction() + }, + onDecrement: { + storedLineSpacing = max(storedLineSpacing - 25, 100) + updateLineHeightAction() + } + ) + + Toggle("High Contrast Text:", isOn: $prefersHighContrastText) + .frame(height: 40) + .padding(.trailing, 6) + .onChange(of: prefersHighContrastText) { _ in + updateTextContrastAction() + } + + HStack { + NavigationLink(destination: fontList) { + Text("Change Reader Font") + } + Image(systemName: "chevron.right") + Spacer() + } + .frame(height: 40) + + Spacer() + } + } + } + .padding() + .navigationTitle("Reader Preferences") + .navigationBarTitleDisplayMode(.inline) + } + .accentColor(.appGrayTextContrast) + } +} + +struct LabelledStepper: View { + let labelText: String + let onIncrement: () -> Void + let onDecrement: () -> Void + + var body: some View { + HStack(alignment: .center, spacing: 0) { + Text(labelText) + Spacer() + HStack(spacing: 0) { + Button( + action: onDecrement, + label: { + Image(systemName: "minus") + #if os(iOS) + .foregroundColor(.systemLabel) + .padding() + #endif + } + ) + .frame(width: 55, height: 40, alignment: .center) + Divider() + .frame(height: 30) + .background(Color.systemLabel) + Button( + action: onIncrement, + label: { + Image(systemName: "plus") + #if os(iOS) + .foregroundColor(.systemLabel) + .padding() + #endif + } + ) + .frame(width: 55, height: 40, alignment: .center) + } + .background(Color.appButtonBackground) + .cornerRadius(8) + } + } +} + public struct FontSizeAdjustmentPopoverView: View { let increaseFontAction: () -> Void let decreaseFontAction: () -> Void diff --git a/apple/OmnivoreKit/Sources/Views/FormSheetWrapper.swift b/apple/OmnivoreKit/Sources/Views/FormSheetWrapper.swift index 85fc0d33c..4bab1d0d8 100644 --- a/apple/OmnivoreKit/Sources/Views/FormSheetWrapper.swift +++ b/apple/OmnivoreKit/Sources/Views/FormSheetWrapper.swift @@ -13,25 +13,32 @@ import SwiftUI var content: () -> Content var onDismiss: (() -> Void)? var modalSize: CGSize + let useSmallDetent: Bool private var hostVC: UIHostingController? @available(*, unavailable) required init?(coder _: NSCoder) { fatalError("") } - init(content: @escaping () -> Content, modalSize: CGSize) { + init(content: @escaping () -> Content, modalSize: CGSize, useSmallDetent: Bool) { self.content = content self.modalSize = modalSize + self.useSmallDetent = useSmallDetent super.init(nibName: nil, bundle: nil) } func show() { guard hostVC == nil else { return } - let controller = UIHostingController(rootView: content()) + let controller: UIHostingController = { + if UIDevice.isIPhone, useSmallDetent { + return FormSheetHostingController(rootView: content(), height: 100) + } else { + return UIHostingController(rootView: content()) + } + }() - if controller.traitCollection.userInterfaceIdiom == .phone { + if UIDevice.isIPhone { if let sheet = controller.sheetPresentationController { - sheet.preferredCornerRadius = 16 sheet.prefersGrabberVisible = false sheet.detents = [.medium()] sheet.widthFollowsPreferredContentSizeWhenEdgeAttached = true @@ -66,12 +73,17 @@ import SwiftUI @Binding var show: Bool let modalSize: CGSize + let useSmallDetent: Bool let content: () -> Content func makeUIViewController( context _: UIViewControllerRepresentableContext> ) -> FormSheetWrapper { - let controller = FormSheetWrapper(content: content, modalSize: modalSize) + let controller = FormSheetWrapper( + content: content, + modalSize: modalSize, + useSmallDetent: useSmallDetent + ) controller.onDismiss = { self.show = false } return controller } @@ -92,11 +104,55 @@ import SwiftUI func formSheet( isPresented: Binding, modalSize: CGSize = CGSize(width: 320, height: 320), + useSmallDetent: Bool = false, @ViewBuilder content: @escaping () -> Content ) -> some View { - background(FormSheet(show: isPresented, - modalSize: modalSize, - content: content)) + background( + FormSheet( + show: isPresented, + modalSize: modalSize, + useSmallDetent: useSmallDetent, + content: content + ) + ) + } + } + + final class FormSheetHostingController: UIHostingController { + let height: CGFloat + + init(rootView: Content, height: CGFloat) { + self.height = height + super.init(rootView: rootView) + } + + @available(*, unavailable) + @MainActor dynamic required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func updateViewConstraints() { + view.frame.size.height = UIScreen.main.bounds.height - height + view.frame.origin.y = height + view.roundCorners(corners: [.topLeft, .topRight], radius: 16.0) + super.updateViewConstraints() + } + } + + extension UIView { + func roundCorners(corners: UIRectCorner, radius: CGFloat) { + let path = UIBezierPath( + roundedRect: bounds, + byRoundingCorners: corners, + cornerRadii: + CGSize( + width: radius, + height: radius + ) + ) + let mask = CAShapeLayer() + mask.path = path.cgPath + layer.mask = mask } } diff --git a/apple/OmnivoreKit/Sources/Views/Images/Images.swift b/apple/OmnivoreKit/Sources/Views/Images/Images.swift index 9fbd99fe2..b8ba31b74 100644 --- a/apple/OmnivoreKit/Sources/Views/Images/Images.swift +++ b/apple/OmnivoreKit/Sources/Views/Images/Images.swift @@ -3,10 +3,7 @@ import SwiftUI public extension Image { static var smallOmnivoreLogo: Image { Image("_smallOmnivoreLogo", bundle: .module) } static var omnivoreTitleLogo: Image { Image("_omnivoreTitleLogo", bundle: .module) } - static var readingIllustration: Image { Image("_readingIllustration", bundle: .module) } - static var readingIllustrationXXL: Image { Image("_readingIllustrationXXL", bundle: .module) } static var googleIcon: Image { Image("_googleIcon", bundle: .module) } - static var feedItemPlaceholder: Image { Image("_feedItemPlaceholder", bundle: .module) } static var sunHorizon: Image { Image("_sun-horizon", bundle: .module) } static var mountains: Image { Image("_mountains", bundle: .module) } static var moon: Image { Image("_moon", bundle: .module) } diff --git a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_feedItemPlaceholder.imageset/Contents.json b/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_feedItemPlaceholder.imageset/Contents.json deleted file mode 100644 index 41df4eec6..000000000 --- a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_feedItemPlaceholder.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "imagePlaceholder.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_feedItemPlaceholder.imageset/imagePlaceholder.pdf b/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_feedItemPlaceholder.imageset/imagePlaceholder.pdf deleted file mode 100644 index 8a8ace209..000000000 Binary files a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_feedItemPlaceholder.imageset/imagePlaceholder.pdf and /dev/null differ diff --git a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustration.imageset/Contents.json b/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustration.imageset/Contents.json deleted file mode 100644 index 35363756d..000000000 --- a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustration.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "Mask Group.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "Mask Group@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "Mask Group@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustration.imageset/Mask Group.png b/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustration.imageset/Mask Group.png deleted file mode 100644 index 96f2e1d1a..000000000 Binary files a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustration.imageset/Mask Group.png and /dev/null differ diff --git a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustration.imageset/Mask Group@2x.png b/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustration.imageset/Mask Group@2x.png deleted file mode 100644 index c50cf319b..000000000 Binary files a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustration.imageset/Mask Group@2x.png and /dev/null differ diff --git a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustration.imageset/Mask Group@3x.png b/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustration.imageset/Mask Group@3x.png deleted file mode 100644 index 61dedfc11..000000000 Binary files a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustration.imageset/Mask Group@3x.png and /dev/null differ diff --git a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustrationXXL.imageset/Contents.json b/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustrationXXL.imageset/Contents.json deleted file mode 100644 index d4463ad6c..000000000 --- a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustrationXXL.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "XXLIllustration.png", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustrationXXL.imageset/XXLIllustration.png b/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustrationXXL.imageset/XXLIllustration.png deleted file mode 100644 index c94aaf30f..000000000 Binary files a/apple/OmnivoreKit/Sources/Views/Images/Images.xcassets/_readingIllustrationXXL.imageset/XXLIllustration.png and /dev/null differ diff --git a/apple/OmnivoreKit/Sources/Views/RegistrationViews/RegistrationHeroImageView.swift b/apple/OmnivoreKit/Sources/Views/RegistrationViews/RegistrationHeroImageView.swift deleted file mode 100644 index e57096d91..000000000 --- a/apple/OmnivoreKit/Sources/Views/RegistrationViews/RegistrationHeroImageView.swift +++ /dev/null @@ -1,25 +0,0 @@ -import SwiftUI - -public struct RegistrationHeroImageView: View { - let tapGestureHandler: () -> Void - - public init(tapGestureHandler: @escaping () -> Void) { - self.tapGestureHandler = tapGestureHandler - } - - public var body: some View { - ZStack(alignment: .topLeading) { - Image.readingIllustration - .resizable() - .aspectRatio(contentMode: .fit) - Image.omnivoreTitleLogo - .padding() - .gesture( - TapGesture(count: 2) - .onEnded { - tapGestureHandler() - } - ) - } - } -} diff --git a/apple/OmnivoreKit/Sources/Views/RegistrationViews/ToggleAuthFlowButton.swift b/apple/OmnivoreKit/Sources/Views/RegistrationViews/ToggleAuthFlowButton.swift deleted file mode 100644 index f7c417fd3..000000000 --- a/apple/OmnivoreKit/Sources/Views/RegistrationViews/ToggleAuthFlowButton.swift +++ /dev/null @@ -1,41 +0,0 @@ -import Models -import SwiftUI - -struct ToggleAuthFlowButton: View { - let authFlow: AuthFlow - let action: () -> Void - - var buttonTitle: String { - switch authFlow { - case .signIn: - return "Don’t have an account? " - case .signUp: - return "Already have an account? " - } - } - - var buttonTitleSuffix: String { - switch authFlow { - case .signIn: - return "Sign Up" - case .signUp: - return "Log In" - } - } - - var body: some View { - Button( - action: action, - label: { - Text(buttonTitle) - .font(.appFootnote) - .foregroundColor(.appGrayText) - + Text(buttonTitleSuffix) - .underline() - .font(.appFootnote) - .foregroundColor(.red) - } - ) - .buttonStyle(PlainButtonStyle()) - } -} diff --git a/apple/OmnivoreKit/Sources/Views/Resources/bundle.js b/apple/OmnivoreKit/Sources/Views/Resources/bundle.js index c9b5d58ea..e2616f248 100644 --- a/apple/OmnivoreKit/Sources/Views/Resources/bundle.js +++ b/apple/OmnivoreKit/Sources/Views/Resources/bundle.js @@ -1,2 +1,2 @@ /*! For license information please see bundle.js.LICENSE.txt */ -(()=>{var e,t,n={7162:(e,t,n)=>{e.exports=n(5047)},6279:function(e,t){var n="undefined"!=typeof self?self:this,r=function(){function e(){this.fetch=!1,this.DOMException=n.DOMException}return e.prototype=n,new e}();!function(e){!function(t){var n="URLSearchParams"in e,r="Symbol"in e&&"iterator"in Symbol,o="FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),i="FormData"in e,a="ArrayBuffer"in e;if(a)var l=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],s=ArrayBuffer.isView||function(e){return e&&l.indexOf(Object.prototype.toString.call(e))>-1};function u(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function c(e){return"string"!=typeof e&&(e=String(e)),e}function f(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return r&&(t[Symbol.iterator]=function(){return t}),t}function d(e){this.map={},e instanceof d?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function h(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function p(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function g(e){var t=new FileReader,n=p(t);return t.readAsArrayBuffer(e),n}function m(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function v(){return this.bodyUsed=!1,this._initBody=function(e){var t;this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:o&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:i&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:n&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():a&&o&&(t=e)&&DataView.prototype.isPrototypeOf(t)?(this._bodyArrayBuffer=m(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):a&&(ArrayBuffer.prototype.isPrototypeOf(e)||s(e))?this._bodyArrayBuffer=m(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText="",this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):n&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},o&&(this.blob=function(){var e=h(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?h(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(g)}),this.text=function(){var e,t,n,r=h(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,n=p(t=new FileReader),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r-1?r:n),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&o)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(o)}function w(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}})),t}function x(e,t){t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new d(t.headers),this.url=t.url||"",this._initBody(e)}b.prototype.clone=function(){return new b(this,{body:this._bodyInit})},v.call(b.prototype),v.call(x.prototype),x.prototype.clone=function(){return new x(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new d(this.headers),url:this.url})},x.error=function(){var e=new x(null,{status:0,statusText:""});return e.type="error",e};var E=[301,302,303,307,308];x.redirect=function(e,t){if(-1===E.indexOf(t))throw new RangeError("Invalid status code");return new x(null,{status:t,headers:{location:e}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function k(e,n){return new Promise((function(r,i){var a=new b(e,n);if(a.signal&&a.signal.aborted)return i(new t.DOMException("Aborted","AbortError"));var l=new XMLHttpRequest;function s(){l.abort()}l.onload=function(){var e,t,n={status:l.status,statusText:l.statusText,headers:(e=l.getAllResponseHeaders()||"",t=new d,e.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();t.append(r,o)}})),t)};n.url="responseURL"in l?l.responseURL:n.headers.get("X-Request-URL");var o="response"in l?l.response:l.responseText;r(new x(o,n))},l.onerror=function(){i(new TypeError("Network request failed"))},l.ontimeout=function(){i(new TypeError("Network request failed"))},l.onabort=function(){i(new t.DOMException("Aborted","AbortError"))},l.open(a.method,a.url,!0),"include"===a.credentials?l.withCredentials=!0:"omit"===a.credentials&&(l.withCredentials=!1),"responseType"in l&&o&&(l.responseType="blob"),a.headers.forEach((function(e,t){l.setRequestHeader(t,e)})),a.signal&&(a.signal.addEventListener("abort",s),l.onreadystatechange=function(){4===l.readyState&&a.signal.removeEventListener("abort",s)}),l.send(void 0===a._bodyInit?null:a._bodyInit)}))}k.polyfill=!0,e.fetch||(e.fetch=k,e.Headers=d,e.Request=b,e.Response=x),t.Headers=d,t.Request=b,t.Response=x,t.fetch=k,Object.defineProperty(t,"__esModule",{value:!0})}({})}(r),r.fetch.ponyfill=!0,delete r.fetch.polyfill;var o=r;(t=o.fetch).default=o.fetch,t.fetch=o.fetch,t.Headers=o.Headers,t.Request=o.Request,t.Response=o.Response,e.exports=t},1427:e=>{var t=function(){this.Diff_Timeout=1,this.Diff_EditCost=4,this.Match_Threshold=.5,this.Match_Distance=1e3,this.Patch_DeleteThreshold=.5,this.Patch_Margin=4,this.Match_MaxBits=32},n=-1;t.Diff=function(e,t){return[e,t]},t.prototype.diff_main=function(e,n,r,o){void 0===o&&(o=this.Diff_Timeout<=0?Number.MAX_VALUE:(new Date).getTime()+1e3*this.Diff_Timeout);var i=o;if(null==e||null==n)throw new Error("Null input. (diff_main)");if(e==n)return e?[new t.Diff(0,e)]:[];void 0===r&&(r=!0);var a=r,l=this.diff_commonPrefix(e,n),s=e.substring(0,l);e=e.substring(l),n=n.substring(l),l=this.diff_commonSuffix(e,n);var u=e.substring(e.length-l);e=e.substring(0,e.length-l),n=n.substring(0,n.length-l);var c=this.diff_compute_(e,n,a,i);return s&&c.unshift(new t.Diff(0,s)),u&&c.push(new t.Diff(0,u)),this.diff_cleanupMerge(c),c},t.prototype.diff_compute_=function(e,r,o,i){var a;if(!e)return[new t.Diff(1,r)];if(!r)return[new t.Diff(n,e)];var l=e.length>r.length?e:r,s=e.length>r.length?r:e,u=l.indexOf(s);if(-1!=u)return a=[new t.Diff(1,l.substring(0,u)),new t.Diff(0,s),new t.Diff(1,l.substring(u+s.length))],e.length>r.length&&(a[0][0]=a[2][0]=n),a;if(1==s.length)return[new t.Diff(n,e),new t.Diff(1,r)];var c=this.diff_halfMatch_(e,r);if(c){var f=c[0],d=c[1],h=c[2],p=c[3],g=c[4],m=this.diff_main(f,h,o,i),v=this.diff_main(d,p,o,i);return m.concat([new t.Diff(0,g)],v)}return o&&e.length>100&&r.length>100?this.diff_lineMode_(e,r,i):this.diff_bisect_(e,r,i)},t.prototype.diff_lineMode_=function(e,r,o){var i=this.diff_linesToChars_(e,r);e=i.chars1,r=i.chars2;var a=i.lineArray,l=this.diff_main(e,r,!1,o);this.diff_charsToLines_(l,a),this.diff_cleanupSemantic(l),l.push(new t.Diff(0,""));for(var s=0,u=0,c=0,f="",d="";s=1&&c>=1){l.splice(s-u-c,u+c),s=s-u-c;for(var h=this.diff_main(f,d,!1,o),p=h.length-1;p>=0;p--)l.splice(s,0,h[p]);s+=h.length}c=0,u=0,f="",d=""}s++}return l.pop(),l},t.prototype.diff_bisect_=function(e,r,o){for(var i=e.length,a=r.length,l=Math.ceil((i+a)/2),s=l,u=2*l,c=new Array(u),f=new Array(u),d=0;do);b++){for(var w=-b+g;w<=b-m;w+=2){for(var x=s+w,E=(O=w==-b||w!=b&&c[x-1]i)m+=2;else if(E>a)g+=2;else if(p&&(_=s+h-w)>=0&&_=(S=i-f[_]))return this.diff_bisectSplit_(e,r,O,E,o)}for(var k=-b+v;k<=b-y;k+=2){for(var S,_=s+k,C=(S=k==-b||k!=b&&f[_-1]i)y+=2;else if(C>a)v+=2;else if(!p){var O;if((x=s+h-k)>=0&&x=(S=i-S))return this.diff_bisectSplit_(e,r,O,E,o)}}}return[new t.Diff(n,e),new t.Diff(1,r)]},t.prototype.diff_bisectSplit_=function(e,t,n,r,o){var i=e.substring(0,n),a=t.substring(0,r),l=e.substring(n),s=t.substring(r),u=this.diff_main(i,a,!1,o),c=this.diff_main(l,s,!1,o);return u.concat(c)},t.prototype.diff_linesToChars_=function(e,t){var n=[],r={};function o(e){for(var t="",o=0,a=-1,l=n.length;ar?e=e.substring(n-r):nt.length?e:t,r=e.length>t.length?t:e;if(n.length<4||2*r.length=e.length?[r,i,a,l,c]:null}var a,l,s,u,c,f=i(n,r,Math.ceil(n.length/4)),d=i(n,r,Math.ceil(n.length/2));return f||d?(a=d?f&&f[4].length>d[4].length?f:d:f,e.length>t.length?(l=a[0],s=a[1],u=a[2],c=a[3]):(u=a[0],c=a[1],l=a[2],s=a[3]),[l,s,u,c,a[4]]):null},t.prototype.diff_cleanupSemantic=function(e){for(var r=!1,o=[],i=0,a=null,l=0,s=0,u=0,c=0,f=0;l0?o[i-1]:-1,s=0,u=0,c=0,f=0,a=null,r=!0)),l++;for(r&&this.diff_cleanupMerge(e),this.diff_cleanupSemanticLossless(e),l=1;l=g?(p>=d.length/2||p>=h.length/2)&&(e.splice(l,0,new t.Diff(0,h.substring(0,p))),e[l-1][1]=d.substring(0,d.length-p),e[l+1][1]=h.substring(p),l++):(g>=d.length/2||g>=h.length/2)&&(e.splice(l,0,new t.Diff(0,d.substring(0,g))),e[l-1][0]=1,e[l-1][1]=h.substring(0,h.length-g),e[l+1][0]=n,e[l+1][1]=d.substring(g),l++),l++}l++}},t.prototype.diff_cleanupSemanticLossless=function(e){function n(e,n){if(!e||!n)return 6;var r=e.charAt(e.length-1),o=n.charAt(0),i=r.match(t.nonAlphaNumericRegex_),a=o.match(t.nonAlphaNumericRegex_),l=i&&r.match(t.whitespaceRegex_),s=a&&o.match(t.whitespaceRegex_),u=l&&r.match(t.linebreakRegex_),c=s&&o.match(t.linebreakRegex_),f=u&&e.match(t.blanklineEndRegex_),d=c&&n.match(t.blanklineStartRegex_);return f||d?5:u||c?4:i&&!l&&s?3:l||s?2:i||a?1:0}for(var r=1;r=d&&(d=h,u=o,c=i,f=a)}e[r-1][1]!=u&&(u?e[r-1][1]=u:(e.splice(r-1,1),r--),e[r][1]=c,f?e[r+1][1]=f:(e.splice(r+1,1),r--))}r++}},t.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/,t.whitespaceRegex_=/\s/,t.linebreakRegex_=/[\r\n]/,t.blanklineEndRegex_=/\n\r?\n$/,t.blanklineStartRegex_=/^\r?\n\r?\n/,t.prototype.diff_cleanupEfficiency=function(e){for(var r=!1,o=[],i=0,a=null,l=0,s=!1,u=!1,c=!1,f=!1;l0?o[i-1]:-1,c=f=!1),r=!0)),l++;r&&this.diff_cleanupMerge(e)},t.prototype.diff_cleanupMerge=function(e){e.push(new t.Diff(0,""));for(var r,o=0,i=0,a=0,l="",s="";o1?(0!==i&&0!==a&&(0!==(r=this.diff_commonPrefix(s,l))&&(o-i-a>0&&0==e[o-i-a-1][0]?e[o-i-a-1][1]+=s.substring(0,r):(e.splice(0,0,new t.Diff(0,s.substring(0,r))),o++),s=s.substring(r),l=l.substring(r)),0!==(r=this.diff_commonSuffix(s,l))&&(e[o][1]=s.substring(s.length-r)+e[o][1],s=s.substring(0,s.length-r),l=l.substring(0,l.length-r))),o-=i+a,e.splice(o,i+a),l.length&&(e.splice(o,0,new t.Diff(n,l)),o++),s.length&&(e.splice(o,0,new t.Diff(1,s)),o++),o++):0!==o&&0==e[o-1][0]?(e[o-1][1]+=e[o][1],e.splice(o,1)):o++,a=0,i=0,l="",s=""}""===e[e.length-1][1]&&e.pop();var u=!1;for(o=1;ot));r++)a=o,l=i;return e.length!=r&&e[r][0]===n?l:l+(t-a)},t.prototype.diff_prettyHtml=function(e){for(var t=[],r=/&/g,o=//g,a=/\n/g,l=0;l");switch(s){case 1:t[l]=''+u+"";break;case n:t[l]=''+u+"";break;case 0:t[l]=""+u+""}}return t.join("")},t.prototype.diff_text1=function(e){for(var t=[],n=0;nthis.Match_MaxBits)throw new Error("Pattern too long for this browser.");var r=this.match_alphabet_(t),o=this;function i(e,r){var i=e/t.length,a=Math.abs(n-r);return o.Match_Distance?i+a/o.Match_Distance:a?1:i}var a=this.Match_Threshold,l=e.indexOf(t,n);-1!=l&&(a=Math.min(i(0,l),a),-1!=(l=e.lastIndexOf(t,n+t.length))&&(a=Math.min(i(0,l),a)));var s,u,c=1<=p;v--){var y=r[e.charAt(v-1)];if(m[v]=0===h?(m[v+1]<<1|1)&y:(m[v+1]<<1|1)&y|(f[v+1]|f[v])<<1|1|f[v+1],m[v]&c){var b=i(h,v-1);if(b<=a){if(a=b,!((l=v-1)>n))break;p=Math.max(1,2*n-l)}}}if(i(h+1,n)>a)break;f=m}return l},t.prototype.match_alphabet_=function(e){for(var t={},n=0;n2&&(this.diff_cleanupSemantic(a),this.diff_cleanupEfficiency(a));else if(e&&"object"==typeof e&&void 0===r&&void 0===o)a=e,i=this.diff_text1(a);else if("string"==typeof e&&r&&"object"==typeof r&&void 0===o)i=e,a=r;else{if("string"!=typeof e||"string"!=typeof r||!o||"object"!=typeof o)throw new Error("Unknown call format to patch_make.");i=e,a=o}if(0===a.length)return[];for(var l=[],s=new t.patch_obj,u=0,c=0,f=0,d=i,h=i,p=0;p=2*this.Patch_Margin&&u&&(this.patch_addContext_(s,d),l.push(s),s=new t.patch_obj,u=0,d=h,c=f)}1!==g&&(c+=m.length),g!==n&&(f+=m.length)}return u&&(this.patch_addContext_(s,d),l.push(s)),l},t.prototype.patch_deepCopy=function(e){for(var n=[],r=0;rthis.Match_MaxBits?-1!=(l=this.match_main(t,c.substring(0,this.Match_MaxBits),u))&&(-1==(f=this.match_main(t,c.substring(c.length-this.Match_MaxBits),u+c.length-this.Match_MaxBits))||l>=f)&&(l=-1):l=this.match_main(t,c,u),-1==l)i[a]=!1,o-=e[a].length2-e[a].length1;else if(i[a]=!0,o=l-u,c==(s=-1==f?t.substring(l,l+c.length):t.substring(l,f+this.Match_MaxBits)))t=t.substring(0,l)+this.diff_text2(e[a].diffs)+t.substring(l+c.length);else{var d=this.diff_main(c,s,!1);if(c.length>this.Match_MaxBits&&this.diff_levenshtein(d)/c.length>this.Patch_DeleteThreshold)i[a]=!1;else{this.diff_cleanupSemanticLossless(d);for(var h,p=0,g=0;ga[0][1].length){var l=n-a[0][1].length;a[0][1]=r.substring(a[0][1].length)+a[0][1],i.start1-=l,i.start2-=l,i.length1+=l,i.length2+=l}return 0==(a=(i=e[e.length-1]).diffs).length||0!=a[a.length-1][0]?(a.push(new t.Diff(0,r)),i.length1+=n,i.length2+=n):n>a[a.length-1][1].length&&(l=n-a[a.length-1][1].length,a[a.length-1][1]+=r.substring(0,l),i.length1+=l,i.length2+=l),r},t.prototype.patch_splitMax=function(e){for(var r=this.Match_MaxBits,o=0;o2*r?(u.length1+=d.length,a+=d.length,c=!1,u.diffs.push(new t.Diff(f,d)),i.diffs.shift()):(d=d.substring(0,r-u.length1-this.Patch_Margin),u.length1+=d.length,a+=d.length,0===f?(u.length2+=d.length,l+=d.length):c=!1,u.diffs.push(new t.Diff(f,d)),d==i.diffs[0][1]?i.diffs.shift():i.diffs[0][1]=i.diffs[0][1].substring(d.length))}s=(s=this.diff_text2(u.diffs)).substring(s.length-this.Patch_Margin);var h=this.diff_text1(i.diffs).substring(0,this.Patch_Margin);""!==h&&(u.length1+=h.length,u.length2+=h.length,0!==u.diffs.length&&0===u.diffs[u.diffs.length-1][0]?u.diffs[u.diffs.length-1][1]+=h:u.diffs.push(new t.Diff(0,h))),c||e.splice(++o,0,u)}}},t.prototype.patch_toText=function(e){for(var t=[],n=0;n{"use strict";e.exports=function(e){var t=e.uri,n=e.name,r=e.type;this.uri=t,this.name=n,this.type=r}},2929:(e,t,n)=>{"use strict";var r=n(1278);e.exports=function e(t,n,o){var i;void 0===n&&(n=""),void 0===o&&(o=r);var a=new Map;function l(e,t){var n=a.get(t);n?n.push.apply(n,e):a.set(t,e)}if(o(t))i=null,l([n],t);else{var s=n?n+".":"";if("undefined"!=typeof FileList&&t instanceof FileList)i=Array.prototype.map.call(t,(function(e,t){return l([""+s+t],e),null}));else if(Array.isArray(t))i=t.map((function(t,n){var r=e(t,""+s+n,o);return r.files.forEach(l),r.clone}));else if(t&&t.constructor===Object)for(var u in i={},t){var c=e(t[u],""+s+u,o);c.files.forEach(l),i[u]=c.clone}else i=t}return{clone:i,files:a}}},9384:(e,t,n)=>{"use strict";t.ReactNativeFile=n(7570),t.extractFiles=n(2929),t.isExtractableFile=n(1278)},1278:(e,t,n)=>{"use strict";var r=n(7570);e.exports=function(e){return"undefined"!=typeof File&&e instanceof File||"undefined"!=typeof Blob&&e instanceof Blob||e instanceof r}},1688:e=>{e.exports="object"==typeof self?self.FormData:window.FormData},1170:function(e,t){var n,r;void 0===(r="function"==typeof(n=function(){var e=function(){},t={},n={},r={};function o(e,t){if(e){var o=r[e];if(n[e]=t,o)for(;o.length;)o[0](e,t),o.splice(0,1)}}function i(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function a(t,n,r,o){var i,l,s=document,u=r.async,c=(r.numRetries||0)+1,f=r.before||e,d=t.replace(/[\?|#].*$/,""),h=t.replace(/^(css|img)!/,"");o=o||0,/(^css!|\.css$)/.test(d)?((l=s.createElement("link")).rel="stylesheet",l.href=h,(i="hideFocus"in l)&&l.relList&&(i=0,l.rel="preload",l.as="style")):/(^img!|\.(png|gif|jpg|svg|webp)$)/.test(d)?(l=s.createElement("img")).src=h:((l=s.createElement("script")).src=t,l.async=void 0===u||u),l.onload=l.onerror=l.onbeforeload=function(e){var s=e.type[0];if(i)try{l.sheet.cssText.length||(s="e")}catch(e){18!=e.code&&(s="e")}if("e"==s){if((o+=1){var r=n(7772).Symbol;e.exports=r},3366:(e,t,n)=>{var r=n(857),o=n(2107),i=n(7157),a=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":a&&a in Object(e)?o(e):i(e)}},1704:(e,t,n)=>{var r=n(2153),o=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(o,""):e}},1242:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},2107:(e,t,n)=>{var r=n(857),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,l=r?r.toStringTag:void 0;e.exports=function(e){var t=i.call(e,l),n=e[l];try{e[l]=void 0;var r=!0}catch(e){}var o=a.call(e);return r&&(t?e[l]=n:delete e[l]),o}},7157:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},7772:(e,t,n)=>{var r=n(1242),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();e.exports=i},2153:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},4073:(e,t,n)=>{var r=n(9259),o=n(1100),i=n(7642),a=Math.max,l=Math.min;e.exports=function(e,t,n){var s,u,c,f,d,h,p=0,g=!1,m=!1,v=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function y(t){var n=s,r=u;return s=u=void 0,p=t,f=e.apply(r,n)}function b(e){return p=e,d=setTimeout(x,t),g?y(e):f}function w(e){var n=e-h;return void 0===h||n>=t||n<0||m&&e-p>=c}function x(){var e=o();if(w(e))return E(e);d=setTimeout(x,function(e){var n=t-(e-h);return m?l(n,c-(e-p)):n}(e))}function E(e){return d=void 0,v&&s?y(e):(s=u=void 0,f)}function k(){var e=o(),n=w(e);if(s=arguments,u=this,h=e,n){if(void 0===d)return b(h);if(m)return clearTimeout(d),d=setTimeout(x,t),y(h)}return void 0===d&&(d=setTimeout(x,t)),f}return t=i(t)||0,r(n)&&(g=!!n.leading,c=(m="maxWait"in n)?a(i(n.maxWait)||0,t):c,v="trailing"in n?!!n.trailing:v),k.cancel=function(){void 0!==d&&clearTimeout(d),p=0,s=h=u=d=void 0},k.flush=function(){return void 0===d?f:E(o())},k}},9259:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},5125:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},4795:(e,t,n)=>{var r=n(3366),o=n(5125);e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==r(e)}},1100:(e,t,n)=>{var r=n(7772);e.exports=function(){return r.Date.now()}},7642:(e,t,n)=>{var r=n(1704),o=n(9259),i=n(4795),a=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,s=/^0o[0-7]+$/i,u=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(i(e))return NaN;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=l.test(e);return n||s.test(e)?u(e.slice(2),n?2:8):a.test(e)?NaN:+e}},104:(e,t,n)=>{"use strict";(function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}t.default=e})(n(2784)),(r=n(5977))&&r.__esModule,n(8467),n(3321),n(4329);var r,o,i=(n(1624),n(1119));null===(o=window.omnivoreEnv.__NEXT_IMAGE_OPTS)||void 0===o||o.experimentalLayoutRaw;window.omnivoreEnv.__NEXT_IMAGE_OPTS,new Set;new Map;"undefined"==typeof window&&(n.g.__NEXT_IMAGE_IMPORTED=!0);new Map([["default",function({config:e,src:t,width:n,quality:r}){return t.endsWith(".svg")&&!e.dangerouslyAllowSVG?t:`${i.normalizePathTrailingSlash(e.path)}?url=${encodeURIComponent(t)}&w=${n}&q=${r||75}`}],["imgix",function({config:e,src:t,width:n,quality:r}){const o=new URL(`${e.path}${a(t)}`),i=o.searchParams;return i.set("auto",i.get("auto")||"format"),i.set("fit",i.get("fit")||"max"),i.set("w",i.get("w")||n.toString()),r&&i.set("q",r.toString()),o.href}],["cloudinary",function({config:e,src:t,width:n,quality:r}){const o=["f_auto","c_limit","w_"+n,"q_"+(r||"auto")].join(",")+"/";return`${e.path}${o}${a(t)}`}],["akamai",function({config:e,src:t,width:n}){return`${e.path}${a(t)}?imwidth=${n}`}],["custom",function({src:e}){throw new Error(`Image with src "${e}" is missing "loader" prop.\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader`)}]]);function a(e){return"/"===e[0]?e.slice(1):e}},4529:(e,t,n)=>{"use strict";var r;(r=n(2784))&&r.__esModule,n(6640),n(9518),n(3321)},1119:(e,t)=>{"use strict";function n(e){return e.endsWith("/")&&"/"!==e?e.slice(0,-1):e}Object.defineProperty(t,"__esModule",{value:!0}),t.removePathTrailingSlash=n,t.normalizePathTrailingSlash=void 0;const r=window.omnivoreEnv.__NEXT_TRAILING_SLASH?e=>/\.[^/]+\/?$/.test(e)?n(e):e.endsWith("/")?e:e+"/":n;t.normalizePathTrailingSlash=r},1976:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.cancelIdleCallback=t.requestIdleCallback=void 0;const n="undefined"!=typeof self&&self.requestIdleCallback&&self.requestIdleCallback.bind(window)||function(e){let t=Date.now();return setTimeout((function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})}),1)};t.requestIdleCallback=n;const r="undefined"!=typeof self&&self.cancelIdleCallback&&self.cancelIdleCallback.bind(window)||function(e){return clearTimeout(e)};t.cancelIdleCallback=r},7928:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.markAssetError=u,t.isAssetError=function(e){return e&&s in e},t.getClientBuildManifest=f,t.getMiddlewareManifest=function(){return self.__MIDDLEWARE_MANIFEST?Promise.resolve(self.__MIDDLEWARE_MANIFEST):c(new Promise((e=>{const t=self.__MIDDLEWARE_MANIFEST_CB;self.__MIDDLEWARE_MANIFEST_CB=()=>{e(self.__MIDDLEWARE_MANIFEST),t&&t()}})),i,u(new Error("Failed to load client middleware manifest")))},t.createRouteLoader=function(e){const t=new Map,n=new Map,r=new Map,s=new Map;function f(e){{let t=n.get(e);return t||(document.querySelector(`script[src^="${e}"]`)?Promise.resolve():(n.set(e,t=function(e,t){return new Promise(((n,r)=>{(t=document.createElement("script")).onload=n,t.onerror=()=>r(u(new Error(`Failed to load script: ${e}`))),t.crossOrigin=window.omnivoreEnv.__NEXT_CROSS_ORIGIN,t.src=e,document.body.appendChild(t)}))}(e)),t))}}function h(e){let t=r.get(e);return t||(r.set(e,t=fetch(e).then((t=>{if(!t.ok)throw new Error(`Failed to load stylesheet: ${e}`);return t.text().then((t=>({href:e,content:t})))})).catch((e=>{throw u(e)}))),t)}return{whenEntrypoint:e=>a(e,t),onEntrypoint(e,n){(n?Promise.resolve().then((()=>n())).then((e=>({component:e&&e.default||e,exports:e})),(e=>({error:e}))):Promise.resolve(void 0)).then((n=>{const r=t.get(e);r&&"resolve"in r?n&&(t.set(e,n),r.resolve(n)):(n?t.set(e,n):t.delete(e),s.delete(e))}))},loadRoute(n,r){return a(n,s,(()=>c(d(e,n).then((({scripts:e,css:r})=>Promise.all([t.has(n)?[]:Promise.all(e.map(f)),Promise.all(r.map(h))]))).then((e=>this.whenEntrypoint(n).then((t=>({entrypoint:t,styles:e[1]}))))),i,u(new Error(`Route did not complete loading: ${n}`))).then((({entrypoint:e,styles:t})=>{const n=Object.assign({styles:t},e);return"error"in e?e:n})).catch((e=>{if(r)throw e;return{error:e}})).finally((()=>{}))))},prefetch(t){let n;return(n=navigator.connection)&&(n.saveData||/2g/.test(n.effectiveType))?Promise.resolve():d(e,t).then((e=>Promise.all(l?e.scripts.map((e=>{return t=e,n="script",new Promise(((e,o)=>{const i=`\n link[rel="prefetch"][href^="${t}"],\n link[rel="preload"][href^="${t}"],\n script[src^="${t}"]`;if(document.querySelector(i))return e();(r=document.createElement("link")).as=n,r.rel="prefetch",r.crossOrigin=window.omnivoreEnv.__NEXT_CROSS_ORIGIN,r.onload=e,r.onerror=o,r.href=t,document.head.appendChild(r)}));var t,n,r})):[]))).then((()=>{o.requestIdleCallback((()=>this.loadRoute(t,!0).catch((()=>{}))))})).catch((()=>{}))}}},(r=n(9983))&&r.__esModule;var r,o=n(1976);const i=3800;function a(e,t,n){let r,o=t.get(e);if(o)return"future"in o?o.future:Promise.resolve(o);const i=new Promise((e=>{r=e}));return t.set(e,o={resolve:r,future:i}),n?n().then((e=>(r(e),e))).catch((n=>{throw t.delete(e),n})):i}const l=function(e){try{return e=document.createElement("link"),!!window.MSInputMethodContext&&!!document.documentMode||e.relList.supports("prefetch")}catch(e){return!1}}(),s=Symbol("ASSET_LOAD_ERROR");function u(e){return Object.defineProperty(e,s,{})}function c(e,t,n){return new Promise(((r,i)=>{let a=!1;e.then((e=>{a=!0,r(e)})).catch(i),o.requestIdleCallback((()=>setTimeout((()=>{a||i(n)}),t)))}))}function f(){return self.__BUILD_MANIFEST?Promise.resolve(self.__BUILD_MANIFEST):c(new Promise((e=>{const t=self.__BUILD_MANIFEST_CB;self.__BUILD_MANIFEST_CB=()=>{e(self.__BUILD_MANIFEST),t&&t()}})),i,u(new Error("Failed to load client build manifest")))}function d(e,t){return f().then((n=>{if(!(t in n))throw u(new Error(`Failed to lookup route: ${t}`));const r=n[t].map((t=>e+"/_next/"+encodeURI(t)));return{scripts:r.filter((e=>e.endsWith(".js"))),css:r.filter((e=>e.endsWith(".css")))}}))}},9518:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"Router",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"withRouter",{enumerable:!0,get:function(){return l.default}}),t.useRouter=function(){return r.default.useContext(i.RouterContext)},t.createRouter=function(...e){return u.router=new o.default(...e),u.readyCallbacks.forEach((e=>e())),u.readyCallbacks=[],u.router},t.makePublicRouterInstance=function(e){const t=e,n={};for(const e of c)"object"!=typeof t[e]?n[e]=t[e]:n[e]=Object.assign(Array.isArray(t[e])?[]:{},t[e]);return n.events=o.default.events,f.forEach((e=>{n[e]=(...n)=>t[e](...n)})),n},t.default=void 0;var r=s(n(2784)),o=s(n(6640)),i=n(6510),a=s(n(274)),l=s(n(9564));function s(e){return e&&e.__esModule?e:{default:e}}const u={router:null,readyCallbacks:[],ready(e){if(this.router)return e();"undefined"!=typeof window&&this.readyCallbacks.push(e)}},c=["pathname","route","query","asPath","components","isFallback","basePath","locale","locales","defaultLocale","isReady","isPreview","isLocaleDomain","domainLocales"],f=["push","replace","reload","back","prefetch","beforePopState"];function d(){if(!u.router)throw new Error('No router instance found.\nYou should only use "next/router" on the client side of your app.\n');return u.router}Object.defineProperty(u,"events",{get:()=>o.default.events}),c.forEach((e=>{Object.defineProperty(u,e,{get:()=>d()[e]})})),f.forEach((e=>{u[e]=(...t)=>d()[e](...t)})),["routeChangeStart","beforeHistoryChange","routeChangeComplete","routeChangeError","hashChangeStart","hashChangeComplete"].forEach((e=>{u.ready((()=>{o.default.events.on(e,((...t)=>{const n=`on${e.charAt(0).toUpperCase()}${e.substring(1)}`,r=u;if(r[n])try{r[n](...t)}catch(e){console.error(`Error when running the Router event: ${n}`),console.error(a.default(e)?`${e.message}\n${e.stack}`:e+"")}}))}))}));var h=u;t.default=h},3321:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersection=function({rootRef:e,rootMargin:t,disabled:n}){const s=n||!i,u=r.useRef(),[c,f]=r.useState(!1),[d,h]=r.useState(e?e.current:null),p=r.useCallback((e=>{u.current&&(u.current(),u.current=void 0),s||c||e&&e.tagName&&(u.current=function(e,t,n){const{id:r,observer:o,elements:i}=function(e){const t={root:e.root||null,margin:e.rootMargin||""};let n,r=l.find((e=>e.root===t.root&&e.margin===t.margin));if(r?n=a.get(r):(n=a.get(t),l.push(t)),n)return n;const o=new Map,i=new IntersectionObserver((e=>{e.forEach((e=>{const t=o.get(e.target),n=e.isIntersecting||e.intersectionRatio>0;t&&n&&t(n)}))}),e);return a.set(t,n={id:t,observer:i,elements:o}),n}(n);return i.set(e,(e=>e&&f(e))),o.observe(e),function(){if(i.delete(e),o.unobserve(e),0===i.size){o.disconnect(),a.delete(r);let e=l.findIndex((e=>e.root===r.root&&e.margin===r.margin));e>-1&&l.splice(e,1)}}}(e,0,{root:d,rootMargin:t}))}),[s,d,t,c]);return r.useEffect((()=>{if(!i&&!c){const e=o.requestIdleCallback((()=>f(!0)));return()=>o.cancelIdleCallback(e)}}),[c]),r.useEffect((()=>{e&&h(e.current)}),[e]),[p,c]};var r=n(2784),o=n(1976);const i="undefined"!=typeof IntersectionObserver,a=new Map,l=[]},9564:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){function t(t){return o.default.createElement(e,Object.assign({router:i.useRouter()},t))}return t.getInitialProps=e.getInitialProps,t.origGetInitialProps=e.origGetInitialProps,t};var r,o=(r=n(2784))&&r.__esModule?r:{default:r},i=n(9518)},9264:(e,t)=>{"use strict";function n(e,t){void 0===t&&(t={});for(var n=function(e){for(var t=[],n=0;n=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122||95===s))break;a+=e[l++]}if(!a)throw new TypeError("Missing parameter name at "+n);t.push({type:"NAME",index:n,value:a}),n=l}else t.push({type:"CLOSE",index:n,value:e[n++]});else t.push({type:"OPEN",index:n,value:e[n++]});else t.push({type:"ESCAPED_CHAR",index:n++,value:e[n++]});else t.push({type:"MODIFIER",index:n,value:e[n++]})}return t.push({type:"END",index:n,value:""}),t}(e),r=t.prefixes,o=void 0===r?"./":r,a="[^"+i(t.delimiter||"/#?")+"]+?",l=[],s=0,u=0,c="",f=function(e){if(u-1:void 0===E;o||(g+="(?:"+p+"(?="+h+"))?"),k||(g+="(?="+p+"|"+h+")")}return new RegExp(g,a(n))}function s(e,t,r){return e instanceof RegExp?function(e,t){if(!t)return e;var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=o,t.getProperError=function(e){return o(e)?e:new Error(r.isPlainObject(e)?JSON.stringify(e):e+"")};var r=n(9910);function o(e){return"object"==typeof e&&null!==e&&"name"in e&&"message"in e}},4863:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.normalizePathSep=o,t.denormalizePagePath=function(e){return(e=o(e)).startsWith("/index/")&&!r.isDynamicRoute(e)?e=e.slice(6):"/index"===e&&(e="/"),e};var r=n(9150);function o(e){return e.replace(/\\/g,"/")}},1719:(e,t,n)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.AmpStateContext=void 0;const o=((r=n(2784))&&r.__esModule?r:{default:r}).default.createContext({});t.AmpStateContext=o},9739:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isInAmpMode=a,t.useAmp=function(){return a(o.default.useContext(i.AmpStateContext))};var r,o=(r=n(2784))&&r.__esModule?r:{default:r},i=n(1719);function a({ampFirst:e=!1,hybrid:t=!1,hasQuery:n=!1}={}){return e||t&&n}},8058:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.escapeStringRegexp=function(e){return e.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&")}},7177:(e,t,n)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.HeadManagerContext=void 0;const o=((r=n(2784))&&r.__esModule?r:{default:r}).default.createContext({});t.HeadManagerContext=o},5977:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.defaultHead=u,t.default=void 0;var r,o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(n(2784)),i=(r=n(1889))&&r.__esModule?r:{default:r},a=n(1719),l=n(7177),s=n(9739);function u(e=!1){const t=[o.default.createElement("meta",{charSet:"utf-8"})];return e||t.push(o.default.createElement("meta",{name:"viewport",content:"width=device-width"})),t}function c(e,t){return"string"==typeof t||"number"==typeof t?e:t.type===o.default.Fragment?e.concat(o.default.Children.toArray(t.props.children).reduce(((e,t)=>"string"==typeof t||"number"==typeof t?e:e.concat(t)),[])):e.concat(t)}n(1624);const f=["name","httpEquiv","charSet","itemProp"];function d(e,t){return e.reduce(((e,t)=>{const n=o.default.Children.toArray(t.props.children);return e.concat(n)}),[]).reduce(c,[]).reverse().concat(u(t.inAmpMode)).filter(function(){const e=new Set,t=new Set,n=new Set,r={};return o=>{let i=!0,a=!1;if(o.key&&"number"!=typeof o.key&&o.key.indexOf("$")>0){a=!0;const t=o.key.slice(o.key.indexOf("$")+1);e.has(t)?i=!1:e.add(t)}switch(o.type){case"title":case"base":t.has(o.type)?i=!1:t.add(o.type);break;case"meta":for(let e=0,t=f.length;e{const r=e.key||n;if(window.omnivoreEnv.__NEXT_OPTIMIZE_FONTS&&!t.inAmpMode&&"link"===e.type&&e.props.href&&["https://fonts.googleapis.com/css","https://use.typekit.net/"].some((t=>e.props.href.startsWith(t)))){const t={...e.props||{}};return t["data-href"]=t.href,t.href=void 0,t["data-optimized-fonts"]=!0,o.default.cloneElement(e,t)}return o.default.cloneElement(e,{key:r})}))}t.default=function({children:e}){const t=o.useContext(a.AmpStateContext),n=o.useContext(l.HeadManagerContext);return o.default.createElement(i.default,{reduceComponentsToState:d,headManager:n,inAmpMode:s.isInAmpMode(t)},e)}},927:(e,t)=>{"use strict";t.D=function(e,t,n){let r;if(e){n&&(n=n.toLowerCase());for(const a of e){var o,i;if(t===(null===(o=a.domain)||void 0===o?void 0:o.split(":")[0].toLowerCase())||n===a.defaultLocale.toLowerCase()||(null===(i=a.locales)||void 0===i?void 0:i.some((e=>e.toLowerCase()===n)))){r=a;break}}}return r}},816:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeLocalePath=function(e,t){let n;const r=e.split("/");return(t||[]).some((t=>!(!r[1]||r[1].toLowerCase()!==t.toLowerCase()||(n=t,r.splice(1,1),e=r.join("/")||"/",0)))),{pathname:e,detectedLocale:n}}},4329:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ImageConfigContext=void 0;var r,o=(r=n(2784))&&r.__esModule?r:{default:r},i=n(8467);const a=o.default.createContext(i.imageConfigDefault);t.ImageConfigContext=a},8467:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.imageConfigDefault=t.VALID_LOADERS=void 0,t.VALID_LOADERS=["default","imgix","cloudinary","akamai","custom"];t.imageConfigDefault={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[16,32,48,64,96,128,256,384],path:"/_next/image",loader:"default",domains:[],disableStaticImages:!1,minimumCacheTTL:60,formats:["image/webp"],dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;"}},9910:(e,t)=>{"use strict";function n(e){return Object.prototype.toString.call(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.getObjectClassLabel=n,t.isPlainObject=function(e){if("[object Object]"!==n(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}},7471:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){const e=Object.create(null);return{on(t,n){(e[t]||(e[t]=[])).push(n)},off(t,n){e[t]&&e[t].splice(e[t].indexOf(n)>>>0,1)},emit(t,...n){(e[t]||[]).slice().map((e=>{e(...n)}))}}}},6510:(e,t,n)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.RouterContext=void 0;const o=((r=n(2784))&&r.__esModule?r:{default:r}).default.createContext(null);t.RouterContext=o},6640:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getDomainLocale=function(e,t,n,r){if(window.omnivoreEnv.__NEXT_I18N_SUPPORT){t=t||l.normalizeLocalePath(e,n).detectedLocale;const o=b(r,void 0,t);return!!o&&`http${o.http?"":"s"}://${o.domain}${w||""}${t===o.defaultLocale?"":`/${t}`}${e}`}return!1},t.addLocale=k,t.delLocale=S,t.hasBasePath=C,t.addBasePath=O,t.delBasePath=P,t.isLocalURL=T,t.interpolateAs=R,t.resolveHref=j,t.default=void 0;var r=n(1119),o=n(7928),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(n(274)),a=n(4863),l=n(816),s=y(n(7471)),u=n(1624),c=n(7482),f=n(1577),d=n(646),h=y(n(5317)),p=n(3107),g=n(4794),m=n(6555),v=n(3948);function y(e){return e&&e.__esModule?e:{default:e}}let b;window.omnivoreEnv.__NEXT_I18N_SUPPORT&&(b=n(927).D);const w=window.omnivoreEnv.__NEXT_ROUTER_BASEPATH||"";function x(){return Object.assign(new Error("Route Cancelled"),{cancelled:!0})}function E(e,t){if(!e.startsWith("/")||!t)return e;const n=_(e);return r.normalizePathTrailingSlash(`${t}${n}`)+e.slice(n.length)}function k(e,t,n){if(window.omnivoreEnv.__NEXT_I18N_SUPPORT){const r=_(e).toLowerCase(),o=t&&t.toLowerCase();return t&&t!==n&&!r.startsWith("/"+o+"/")&&r!=="/"+o?E(e,"/"+t):e}return e}function S(e,t){if(window.omnivoreEnv.__NEXT_I18N_SUPPORT){const n=_(e),r=n.toLowerCase(),o=t&&t.toLowerCase();return t&&(r.startsWith("/"+o+"/")||r==="/"+o)?(n.length===t.length+1?"/":"")+e.slice(t.length+1):e}return e}function _(e){const t=e.indexOf("?"),n=e.indexOf("#");return(t>-1||n>-1)&&(e=e.substring(0,t>-1?t:n)),e}function C(e){return(e=_(e))===w||e.startsWith(w+"/")}function O(e){return E(e,w)}function P(e){return(e=e.slice(w.length)).startsWith("/")||(e=`/${e}`),e}function T(e){if(e.startsWith("/")||e.startsWith("#")||e.startsWith("?"))return!0;try{const t=u.getLocationOrigin(),n=new URL(e,t);return n.origin===t&&C(n.pathname)}catch(e){return!1}}function R(e,t,n){let r="";const o=g.getRouteRegex(e),i=o.groups,a=(t!==e?p.getRouteMatcher(o)(t):"")||n;r=e;const l=Object.keys(i);return l.every((e=>{let t=a[e]||"";const{repeat:n,optional:o}=i[e];let l=`[${n?"...":""}${e}]`;return o&&(l=`${t?"":"/"}[${l}]`),n&&!Array.isArray(t)&&(t=[t]),(o||e in a)&&(r=r.replace(l,n?t.map((e=>encodeURIComponent(e))).join("/"):encodeURIComponent(t))||"/")}))||(r=""),{params:l,result:r}}function L(e,t){const n={};return Object.keys(e).forEach((r=>{t.includes(r)||(n[r]=e[r])})),n}function j(e,t,n){let o,i="string"==typeof t?t:m.formatWithValidation(t);const a=i.match(/^[a-zA-Z]{1,}:\/\//),l=a?i.slice(a[0].length):i;if((l.split("?")[0]||"").match(/(\/\/|\\)/)){console.error(`Invalid href passed to next/router: ${i}, repeated forward-slashes (//) or backslashes \\ are not valid in the href`);const e=u.normalizeRepeatedSlashes(l);i=(a?a[0]:"")+e}if(!T(i))return n?[i]:i;try{o=new URL(i.startsWith("#")?e.asPath:e.pathname,"http://n")}catch(e){o=new URL("/","http://n")}try{const e=new URL(i,o);e.pathname=r.normalizePathTrailingSlash(e.pathname);let t="";if(c.isDynamicRoute(e.pathname)&&e.searchParams&&n){const n=d.searchParamsToUrlQuery(e.searchParams),{result:r,params:o}=R(e.pathname,e.pathname,n);r&&(t=m.formatWithValidation({pathname:r,hash:e.hash,query:L(n,o)}))}const a=e.origin===o.origin?e.href.slice(e.origin.length):e.href;return n?[a,t||a]:a}catch(e){return n?[i]:i}}function A(e){const t=u.getLocationOrigin();return e.startsWith(t)?e.substring(t.length):e}function M(e,t,n){let[r,o]=j(e,t,!0);const i=u.getLocationOrigin(),a=r.startsWith(i),l=o&&o.startsWith(i);r=A(r),o=o?A(o):o;const s=a?r:O(r),c=n?A(j(e,n)):o||r;return{url:s,as:l?c:O(c)}}function I(e,t){const n=r.removePathTrailingSlash(a.denormalizePagePath(e));return"/404"===n||"/_error"===n?e:(t.includes(n)||t.some((t=>{if(c.isDynamicRoute(t)&&g.getRouteRegex(t).re.test(n))return e=t,!0})),r.removePathTrailingSlash(e))}const D=window.omnivoreEnv.__NEXT_SCROLL_RESTORATION&&"undefined"!=typeof window&&"scrollRestoration"in window.history&&!!function(){try{let e="__next";return sessionStorage.setItem(e,e),sessionStorage.removeItem(e),!0}catch(e){}}(),N=Symbol("SSG_DATA_NOT_FOUND");function F(e,t,n){return fetch(e,{credentials:"same-origin"}).then((r=>{if(!r.ok){if(t>1&&r.status>=500)return F(e,t-1,n);if(404===r.status)return r.json().then((e=>{if(e.notFound)return{notFound:N};throw new Error("Failed to load static props")}));throw new Error("Failed to load static props")}return n.text?r.text():r.json()}))}function z(e,t,n,r,i){const{href:a}=new URL(e,window.location.href);return void 0!==r[a]?r[a]:r[a]=F(e,t?3:1,{text:n}).catch((e=>{throw t||o.markAssetError(e),e})).then((e=>(i||delete r[a],e))).catch((e=>{throw delete r[a],e}))}class ${constructor(e,t,n,{initialProps:o,pageLoader:i,App:a,wrapApp:l,Component:s,err:d,subscription:h,isFallback:p,locale:g,locales:v,defaultLocale:y,domainLocales:x,isPreview:E,isRsc:k}){this.sdc={},this.sdr={},this.sde={},this._idx=0,this.onPopState=e=>{const t=e.state;if(!t){const{pathname:e,query:t}=this;return void this.changeState("replaceState",m.formatWithValidation({pathname:O(e),query:t}),u.getURL())}if(!t.__N)return;let n;const{url:r,as:o,options:i,idx:a}=t;if(window.omnivoreEnv.__NEXT_SCROLL_RESTORATION&&D&&this._idx!==a){try{sessionStorage.setItem("__next_scroll_"+this._idx,JSON.stringify({x:self.pageXOffset,y:self.pageYOffset}))}catch{}try{const e=sessionStorage.getItem("__next_scroll_"+a);n=JSON.parse(e)}catch{n={x:0,y:0}}}this._idx=a;const{pathname:l}=f.parseRelativeUrl(r);this.isSsr&&o===O(this.asPath)&&l===O(this.pathname)||this._bps&&!this._bps(t)||this.change("replaceState",r,o,Object.assign({},i,{shallow:i.shallow&&this._shallow,locale:i.locale||this.defaultLocale}),n)};const S=r.removePathTrailingSlash(e);this.components={},"/_error"!==e&&(this.components[S]={Component:s,initial:!0,props:o,err:d,__N_SSG:o&&o.__N_SSG,__N_SSP:o&&o.__N_SSP,__N_RSC:!!k}),this.components["/_app"]={Component:a,styleSheets:[]},this.events=$.events,this.pageLoader=i;const _=c.isDynamicRoute(e)&&self.__NEXT_DATA__.autoExport;if(this.basePath=w,this.sub=h,this.clc=null,this._wrapApp=l,this.isSsr=!0,this.isLocaleDomain=!1,this.isReady=!(!(self.__NEXT_DATA__.gssp||self.__NEXT_DATA__.gip||self.__NEXT_DATA__.appGip&&!self.__NEXT_DATA__.gsp)&&(_||self.location.search||window.omnivoreEnv.__NEXT_HAS_REWRITES)),window.omnivoreEnv.__NEXT_I18N_SUPPORT&&(this.locales=v,this.defaultLocale=y,this.domainLocales=x,this.isLocaleDomain=!!b(x,self.location.hostname)),this.state={route:S,pathname:e,query:t,asPath:_?e:n,isPreview:!!E,locale:window.omnivoreEnv.__NEXT_I18N_SUPPORT?g:void 0,isFallback:p},"undefined"!=typeof window){if(!n.startsWith("//")){const r={locale:g};r._shouldResolveHref=n!==e,this.changeState("replaceState",m.formatWithValidation({pathname:O(e),query:t}),u.getURL(),r)}window.addEventListener("popstate",this.onPopState),window.omnivoreEnv.__NEXT_SCROLL_RESTORATION&&D&&(window.history.scrollRestoration="manual")}}reload(){window.location.reload()}back(){window.history.back()}push(e,t,n={}){if(window.omnivoreEnv.__NEXT_SCROLL_RESTORATION&&D)try{sessionStorage.setItem("__next_scroll_"+this._idx,JSON.stringify({x:self.pageXOffset,y:self.pageYOffset}))}catch{}return({url:e,as:t}=M(this,e,t)),this.change("pushState",e,t,n)}replace(e,t,n={}){return({url:e,as:t}=M(this,e,t)),this.change("replaceState",e,t,n)}async change(e,t,n,a,s){if(!T(t))return window.location.href=t,!1;const d=a._h||a._shouldResolveHref||_(t)===_(n),v={...this.state};a._h&&(this.isReady=!0);const y=v.locale;if(window.omnivoreEnv.__NEXT_I18N_SUPPORT){v.locale=!1===a.locale?this.defaultLocale:a.locale||v.locale,void 0===a.locale&&(a.locale=v.locale);const e=f.parseRelativeUrl(C(n)?P(n):n),r=l.normalizeLocalePath(e.pathname,this.locales);r.detectedLocale&&(v.locale=r.detectedLocale,e.pathname=O(e.pathname),n=m.formatWithValidation(e),t=O(l.normalizeLocalePath(C(t)?P(t):t,this.locales).pathname));let o=!1;var w;window.omnivoreEnv.__NEXT_I18N_SUPPORT&&((null===(w=this.locales)||void 0===w?void 0:w.includes(v.locale))||(e.pathname=k(e.pathname,v.locale),window.location.href=m.formatWithValidation(e),o=!0));const i=b(this.domainLocales,void 0,v.locale);if(window.omnivoreEnv.__NEXT_I18N_SUPPORT&&!o&&i&&this.isLocaleDomain&&self.location.hostname!==i.domain){const e=P(n);window.location.href=`http${i.http?"":"s"}://${i.domain}${O(`${v.locale===i.defaultLocale?"":`/${v.locale}`}${"/"===e?"":e}`||"/")}`,o=!0}if(o)return new Promise((()=>{}))}a._h||(this.isSsr=!1),u.ST&&performance.mark("routeChange");const{shallow:x=!1,scroll:E=!0}=a,j={shallow:x};this._inFlightRoute&&this.abortComponentLoad(this._inFlightRoute,j),n=O(k(C(n)?P(n):n,a.locale,this.defaultLocale));const A=S(C(n)?P(n):n,v.locale);this._inFlightRoute=n;let D=y!==v.locale;if(!a._h&&this.onlyAHashChange(A)&&!D)return v.asPath=A,$.events.emit("hashChangeStart",n,j),this.changeState(e,t,n,{...a,scroll:!1}),E&&this.scrollToHash(A),this.set(v,this.components[v.route],null),$.events.emit("hashChangeComplete",n,j),!0;let F,z,B=f.parseRelativeUrl(t),{pathname:U,query:H}=B;try{[F,{__rewrites:z}]=await Promise.all([this.pageLoader.getPageList(),o.getClientBuildManifest(),this.pageLoader.getMiddlewareList()])}catch(e){return window.location.href=n,!1}this.urlIsNew(A)||D||(e="replaceState");let W=n;if(U=U?r.removePathTrailingSlash(P(U)):U,d&&"/_error"!==U)if(a._shouldResolveHref=!0,window.omnivoreEnv.__NEXT_HAS_REWRITES&&n.startsWith("/")){const e=h.default(O(k(A,v.locale)),F,z,H,(e=>I(e,F)),this.locales);if(e.externalDest)return location.href=n,!0;W=e.asPath,e.matchedPage&&e.resolvedHref&&(U=e.resolvedHref,B.pathname=O(U),t=m.formatWithValidation(B))}else B.pathname=I(U,F),B.pathname!==U&&(U=B.pathname,B.pathname=O(U),t=m.formatWithValidation(B));if(!T(n))return window.location.href=n,!1;if(W=S(P(W),v.locale),(!a.shallow||1===a._h)&&(1!==a._h||c.isDynamicRoute(r.removePathTrailingSlash(U)))){const r=await this._preflightRequest({as:n,cache:!0,pages:F,pathname:U,query:H,locale:v.locale,isPreview:v.isPreview});if("rewrite"===r.type)H={...H,...r.parsedAs.query},W=r.asPath,U=r.resolvedHref,B.pathname=r.resolvedHref,t=m.formatWithValidation(B);else{if("redirect"===r.type&&r.newAs)return this.change(e,r.newUrl,r.newAs,a);if("redirect"===r.type&&r.destination)return window.location.href=r.destination,new Promise((()=>{}));if("refresh"===r.type&&n!==window.location.pathname)return window.location.href=n,new Promise((()=>{}))}}const V=r.removePathTrailingSlash(U);if(c.isDynamicRoute(V)){const e=f.parseRelativeUrl(W),r=e.pathname,o=g.getRouteRegex(V),i=p.getRouteMatcher(o)(r),a=V===r,l=a?R(V,r,H):{};if(!i||a&&!l.result){const e=Object.keys(o.groups).filter((e=>!H[e]));if(e.length>0)throw new Error((a?`The provided \`href\` (${t}) value is missing query values (${e.join(", ")}) to be interpolated properly. `:`The provided \`as\` value (${r}) is incompatible with the \`href\` value (${V}). `)+"Read more: https://nextjs.org/docs/messages/"+(a?"href-interpolation-failed":"incompatible-href-as"))}else a?n=m.formatWithValidation(Object.assign({},e,{pathname:l.result,query:L(H,l.params)})):Object.assign(H,i)}$.events.emit("routeChangeStart",n,j);try{var q,X;let r=await this.getRouteInfo(V,U,H,n,W,j,v.locale,v.isPreview),{error:o,props:i,__N_SSG:l,__N_SSP:u}=r;if((l||u)&&i){if(i.pageProps&&i.pageProps.__N_REDIRECT){const t=i.pageProps.__N_REDIRECT;if(t.startsWith("/")&&!1!==i.pageProps.__N_REDIRECT_BASE_PATH){const n=f.parseRelativeUrl(t);n.pathname=I(n.pathname,F);const{url:r,as:o}=M(this,t,t);return this.change(e,r,o,a)}return window.location.href=t,new Promise((()=>{}))}if(v.isPreview=!!i.__N_PREVIEW,i.notFound===N){let e;try{await this.fetchComponent("/404"),e="/404"}catch(t){e="/_error"}r=await this.getRouteInfo(e,e,H,n,W,{shallow:!1},v.locale,v.isPreview)}}$.events.emit("beforeHistoryChange",n,j),this.changeState(e,t,n,a),a._h&&"/_error"===U&&500===(null===(q=self.__NEXT_DATA__.props)||void 0===q||null===(X=q.pageProps)||void 0===X?void 0:X.statusCode)&&(null==i?void 0:i.pageProps)&&(i.pageProps.statusCode=500);const c=a.shallow&&v.route===V;var K;const d=(null!==(K=a.scroll)&&void 0!==K?K:!c)?{x:0,y:0}:null;if(await this.set({...v,route:V,pathname:U,query:H,asPath:A,isFallback:!1},r,null!=s?s:d).catch((e=>{if(!e.cancelled)throw e;o=o||e})),o)throw $.events.emit("routeChangeError",o,A,j),o;return window.omnivoreEnv.__NEXT_I18N_SUPPORT&&v.locale&&(document.documentElement.lang=v.locale),$.events.emit("routeChangeComplete",n,j),!0}catch(e){if(i.default(e)&&e.cancelled)return!1;throw e}}changeState(e,t,n,r={}){"pushState"===e&&u.getURL()===n||(this._shallow=r.shallow,window.history[e]({url:t,as:n,options:r,__N:!0,idx:this._idx="pushState"!==e?this._idx:this._idx+1},"",n))}async handleRouteInfoError(e,t,n,r,a,l){if(e.cancelled)throw e;if(o.isAssetError(e)||l)throw $.events.emit("routeChangeError",e,r,a),window.location.href=r,x();try{let r,o,i;void 0!==r&&void 0!==o||({page:r,styleSheets:o}=await this.fetchComponent("/_error"));const a={props:i,Component:r,styleSheets:o,err:e,error:e};if(!a.props)try{a.props=await this.getInitialProps(r,{err:e,pathname:t,query:n})}catch(e){console.error("Error in error page `getInitialProps`: ",e),a.props={}}return a}catch(e){return this.handleRouteInfoError(i.default(e)?e:new Error(e+""),t,n,r,a,!0)}}async getRouteInfo(e,t,n,r,o,a,l,s){try{const i=this.components[e];if(a.shallow&&i&&this.route===e)return i;let u;i&&!("initial"in i)&&(u=i);const c=u||await this.fetchComponent(e).then((e=>({Component:e.page,styleSheets:e.styleSheets,__N_SSG:e.mod.__N_SSG,__N_SSP:e.mod.__N_SSP,__N_RSC:!!e.mod.__next_rsc__}))),{Component:f,__N_SSG:d,__N_SSP:h,__N_RSC:p}=c;let g;(d||h||p)&&(g=this.pageLoader.getDataHref({href:m.formatWithValidation({pathname:t,query:n}),asPath:o,ssg:d,rsc:p,locale:l}));const v=await this._getData((()=>d||h?z(g,this.isSsr,!1,d?this.sdc:this.sdr,!!d&&!s):this.getInitialProps(f,{pathname:t,query:n,asPath:r,locale:l,locales:this.locales,defaultLocale:this.defaultLocale})));if(p){const{fresh:e,data:t}=await this._getData((()=>this._getFlightData(g)));v.pageProps=Object.assign(v.pageProps,{__flight_serialized__:t,__flight_fresh__:e})}return c.props=v,this.components[e]=c,c}catch(e){return this.handleRouteInfoError(i.getProperError(e),t,n,r,a)}}set(e,t,n){return this.state=e,this.sub(t,this.components["/_app"].Component,n)}beforePopState(e){this._bps=e}onlyAHashChange(e){if(!this.asPath)return!1;const[t,n]=this.asPath.split("#"),[r,o]=e.split("#");return!(!o||t!==r||n!==o)||t===r&&n!==o}scrollToHash(e){const[,t=""]=e.split("#");if(""===t||"top"===t)return void window.scrollTo(0,0);const n=document.getElementById(t);if(n)return void n.scrollIntoView();const r=document.getElementsByName(t)[0];r&&r.scrollIntoView()}urlIsNew(e){return this.asPath!==e}async prefetch(e,t=e,n={}){let i=f.parseRelativeUrl(e),{pathname:a,query:s}=i;if(window.omnivoreEnv.__NEXT_I18N_SUPPORT&&!1===n.locale){a=l.normalizeLocalePath(a,this.locales).pathname,i.pathname=a,e=m.formatWithValidation(i);let r=f.parseRelativeUrl(t);const o=l.normalizeLocalePath(r.pathname,this.locales);r.pathname=o.pathname,n.locale=o.detectedLocale||this.defaultLocale,t=m.formatWithValidation(r)}const u=await this.pageLoader.getPageList();let c=t;if(window.omnivoreEnv.__NEXT_HAS_REWRITES&&t.startsWith("/")){let n;({__rewrites:n}=await o.getClientBuildManifest());const r=h.default(O(k(t,this.locale)),u,n,i.query,(e=>I(e,u)),this.locales);if(r.externalDest)return;c=S(P(r.asPath),this.locale),r.matchedPage&&r.resolvedHref&&(a=r.resolvedHref,i.pathname=a,e=m.formatWithValidation(i))}else i.pathname=I(i.pathname,u),i.pathname!==a&&(a=i.pathname,i.pathname=a,e=m.formatWithValidation(i));const d=await this._preflightRequest({as:O(t),cache:!0,pages:u,pathname:a,query:s,locale:this.locale,isPreview:this.isPreview});"rewrite"===d.type&&(i.pathname=d.resolvedHref,a=d.resolvedHref,s={...s,...d.parsedAs.query},c=d.asPath,e=m.formatWithValidation(i));const p=r.removePathTrailingSlash(a);await Promise.all([this.pageLoader._isSsg(p).then((t=>!!t&&z(this.pageLoader.getDataHref({href:e,asPath:c,ssg:!0,locale:void 0!==n.locale?n.locale:this.locale}),!1,!1,this.sdc,!0))),this.pageLoader[n.priority?"loadPage":"prefetch"](p)])}async fetchComponent(e){let t=!1;const n=this.clc=()=>{t=!0},r=()=>{if(t){const t=new Error(`Abort fetching component for route: "${e}"`);throw t.cancelled=!0,t}n===this.clc&&(this.clc=null)};try{const t=await this.pageLoader.loadPage(e);return r(),t}catch(e){throw r(),e}}_getData(e){let t=!1;const n=()=>{t=!0};return this.clc=n,e().then((e=>{if(n===this.clc&&(this.clc=null),t){const e=new Error("Loading initial props cancelled");throw e.cancelled=!0,e}return e}))}_getFlightData(e){return z(e,!0,!0,this.sdc,!1).then((e=>({fresh:!0,data:e})))}async _preflightRequest(e){const t=_(e.as),n=S(C(t)?P(t):t,e.locale),o=(await this.pageLoader.getMiddlewareList()).map((([e,t])=>({page:e,ssr:t}))),i=v.getRoutingItems(e.pages,o);let a,s=!1;for(const e of i)if(e.match(n)){e.isMiddleware&&(s=!0);break}if(!s)return{type:"next"};try{a=await this._getPreflightData({preflightHref:e.as,shouldCache:e.cache,isPreview:e.isPreview})}catch(t){return{type:"redirect",destination:e.as}}if(a.rewrite){if(!a.rewrite.startsWith("/"))return{type:"redirect",destination:e.as};const t=f.parseRelativeUrl(l.normalizeLocalePath(C(a.rewrite)?P(a.rewrite):a.rewrite,this.locales).pathname),n=r.removePathTrailingSlash(t.pathname);let o,i;return e.pages.includes(n)?(o=!0,i=n):(i=I(n,e.pages),i!==t.pathname&&e.pages.includes(i)&&(o=!0)),{type:"rewrite",asPath:t.pathname,parsedAs:t,matchedPage:o,resolvedHref:i}}if(a.redirect){if(a.redirect.startsWith("/")){const e=r.removePathTrailingSlash(l.normalizeLocalePath(C(a.redirect)?P(a.redirect):a.redirect,this.locales).pathname),{url:t,as:n}=M(this,e,e);return{type:"redirect",newUrl:t,newAs:n}}return{type:"redirect",destination:a.redirect}}return a.refresh&&!a.ssr?{type:"refresh"}:{type:"next"}}_getPreflightData(e){const{preflightHref:t,shouldCache:n=!1,isPreview:r}=e,{href:o}=new URL(t,window.location.href);return!r&&n&&this.sde[o]?Promise.resolve(this.sde[o]):fetch(t,{method:"HEAD",credentials:"same-origin",headers:{"x-middleware-preflight":"1"}}).then((e=>{if(!e.ok)throw new Error("Failed to preflight request");return{cache:e.headers.get("x-middleware-cache"),redirect:e.headers.get("Location"),refresh:e.headers.has("x-middleware-refresh"),rewrite:e.headers.get("x-middleware-rewrite"),ssr:!!e.headers.get("x-middleware-ssr")}})).then((e=>(n&&"no-cache"!==e.cache&&(this.sde[o]=e),e))).catch((e=>{throw delete this.sde[o],e}))}getInitialProps(e,t){const{Component:n}=this.components["/_app"],r=this._wrapApp(n);return t.AppTree=r,u.loadGetInitialProps(n,{AppTree:r,Component:e,router:this,ctx:t})}abortComponentLoad(e,t){this.clc&&($.events.emit("routeChangeError",x(),e,t),this.clc(),this.clc=null)}get route(){return this.state.route}get pathname(){return this.state.pathname}get query(){return this.state.query}get asPath(){return this.state.asPath}get locale(){return this.state.locale}get isFallback(){return this.state.isFallback}get isPreview(){return this.state.isPreview}}t.default=$,$.events=s.default()},6555:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatUrl=i,t.formatWithValidation=function(e){return i(e)},t.urlObjectKeys=void 0;var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(n(646));const o=/https?|ftp|gopher|file/;function i(e){let{auth:t,hostname:n}=e,i=e.protocol||"",a=e.pathname||"",l=e.hash||"",s=e.query||"",u=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?u=t+e.host:n&&(u=t+(~n.indexOf(":")?`[${n}]`:n),e.port&&(u+=":"+e.port)),s&&"object"==typeof s&&(s=String(r.urlQueryToSearchParams(s)));let c=e.search||s&&`?${s}`||"";return i&&!i.endsWith(":")&&(i+=":"),e.slashes||(!i||o.test(i))&&!1!==u?(u="//"+(u||""),a&&"/"!==a[0]&&(a="/"+a)):u||(u=""),l&&"#"!==l[0]&&(l="#"+l),c&&"?"!==c[0]&&(c="?"+c),a=a.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${i}${u}${a}${c}${l}`}t.urlObjectKeys=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"]},9983:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t=""){return("/"===e?"/index":/^\/index(\/|$)/.test(e)?`/index${e}`:`${e}`)+t}},2763:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getMiddlewareRegex=function(e,t=!0){const n=r.getParametrizedRoute(e),i=o.test(e)?"(?!/api(?:/|$))":"";let a=t?"(?!_next($|/)).*":"",l=t?"(?:(/.*)?)":"";return"routeKeys"in n?"/"===n.parameterizedRoute?{groups:{},namedRegex:`^/${a}$`,re:new RegExp(`^/${a}$`),routeKeys:{}}:{groups:n.groups,namedRegex:`^${i}${n.namedParameterizedRoute}${l}$`,re:new RegExp(`^${i}${n.parameterizedRoute}${l}$`),routeKeys:n.routeKeys}:"/"===n.parameterizedRoute?{groups:{},re:new RegExp(`^/${a}$`)}:{groups:{},re:new RegExp(`^${i}${n.parameterizedRoute}${l}$`)}};var r=n(4794);const o=/^\/\[[^/]+?\](?=\/|$)/},9150:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getMiddlewareRegex",{enumerable:!0,get:function(){return r.getMiddlewareRegex}}),Object.defineProperty(t,"getRouteMatcher",{enumerable:!0,get:function(){return o.getRouteMatcher}}),Object.defineProperty(t,"getRouteRegex",{enumerable:!0,get:function(){return i.getRouteRegex}}),Object.defineProperty(t,"getRoutingItems",{enumerable:!0,get:function(){return a.getRoutingItems}}),Object.defineProperty(t,"RoutingItem",{enumerable:!0,get:function(){return a.RoutingItem}}),Object.defineProperty(t,"getSortedRoutes",{enumerable:!0,get:function(){return l.getSortedRoutes}}),Object.defineProperty(t,"isDynamicRoute",{enumerable:!0,get:function(){return s.isDynamicRoute}});var r=n(2763),o=n(3107),i=n(4794),a=n(3948),l=n(9036),s=n(7482)},7482:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isDynamicRoute=function(e){return n.test(e)};const n=/\/\[[^/]+?\](?=\/|$)/},1577:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseRelativeUrl=function(e,t){const n=new URL("undefined"==typeof window?"http://n":r.getLocationOrigin()),i=t?new URL(t,n):n,{pathname:a,searchParams:l,search:s,hash:u,href:c,origin:f}=new URL(e,i);if(f!==n.origin)throw new Error(`invariant: invalid relative URL, router received ${e}`);return{pathname:a,query:o.searchParamsToUrlQuery(l),search:s,hash:u,href:c.slice(n.origin.length)}};var r=n(1624),o=n(646)},2011:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseUrl=function(e){if(e.startsWith("/"))return o.parseRelativeUrl(e);const t=new URL(e);return{hash:t.hash,hostname:t.hostname,href:t.href,pathname:t.pathname,port:t.port,protocol:t.protocol,query:r.searchParamsToUrlQuery(t.searchParams),search:t.search}};var r=n(646),o=n(1577)},1095:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.customRouteMatcherOptions=t.matcherOptions=t.pathToRegexp=void 0;var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(n(9264));t.pathToRegexp=r;const o={sensitive:!1,delimiter:"/"};t.matcherOptions=o;const i={...o,strict:!0};t.customRouteMatcherOptions=i,t.default=(e=!1)=>(t,n)=>{const a=[];let l=r.pathToRegexp(t,a,e?i:o);if(n){const e=n(l.source);l=new RegExp(e,l.flags)}const s=r.regexpToFunction(l,a);return(t,n)=>{const r=null!=t&&s(t);if(!r)return!1;if(e)for(const e of a)"number"==typeof e.name&&delete r.params[e.name];return{...n,...r.params}}}},9716:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.matchHas=function(e,t,n){const r={};return!!t.every((t=>{let o,i=t.key;switch(t.type){case"header":i=i.toLowerCase(),o=e.headers[i];break;case"cookie":o=e.cookies[t.key];break;case"query":o=n[i];break;case"host":{const{host:t}=(null==e?void 0:e.headers)||{};o=null==t?void 0:t.split(":")[0].toLowerCase();break}}if(!t.value&&o)return r[function(e){let t="";for(let n=0;n64&&r<91||r>96&&r<123)&&(t+=e[n])}return t}(i)]=o,!0;if(o){const e=new RegExp(`^${t.value}$`),n=Array.isArray(o)?o.slice(-1)[0].match(e):o.match(e);if(n)return Array.isArray(n)&&(n.groups?Object.keys(n.groups).forEach((e=>{r[e]=n.groups[e]})):"host"===t.type&&n[0]&&(r.host=n[0])),!0}return!1}))&&r},t.compileNonPath=a,t.prepareDestination=function(e){const t=Object.assign({},e.query);delete t.__nextLocale,delete t.__nextDefaultLocale;let n=e.destination;for(const r of Object.keys({...e.params,...t}))s=r,n=n.replace(new RegExp(`:${o.escapeStringRegexp(s)}`,"g"),`__ESC_COLON_${s}`);var s;const u=i.parseUrl(n),c=u.query,f=l(`${u.pathname}${u.hash||""}`),d=l(u.hostname||""),h=[],p=[];r.pathToRegexp(f,h),r.pathToRegexp(d,p);const g=[];h.forEach((e=>g.push(e.name))),p.forEach((e=>g.push(e.name)));const m=r.compile(f,{validate:!1}),v=r.compile(d,{validate:!1});for(const[t,n]of Object.entries(c))Array.isArray(n)?c[t]=n.map((t=>a(l(t),e.params))):c[t]=a(l(n),e.params);let y,b=Object.keys(e.params).filter((e=>"nextInternalLocale"!==e));if(e.appendParamsToQuery&&!b.some((e=>g.includes(e))))for(const t of b)t in c||(c[t]=e.params[t]);try{y=m(e.params);const[t,n]=y.split("#");u.hostname=v(e.params),u.pathname=t,u.hash=`${n?"#":""}${n||""}`,delete u.search}catch(e){if(e.message.match(/Expected .*? to not repeat, but got an array/))throw new Error("To use a multi-match in the destination you must add `*` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match");throw e}return u.query={...t,...u.query},{newUrl:y,parsedDestination:u}};var r=n(9264),o=n(8058),i=n(2011);function a(e,t){if(!e.includes(":"))return e;for(const n of Object.keys(t))e.includes(`:${n}`)&&(e=e.replace(new RegExp(`:${n}\\*`,"g"),`:${n}--ESCAPED_PARAM_ASTERISKS`).replace(new RegExp(`:${n}\\?`,"g"),`:${n}--ESCAPED_PARAM_QUESTION`).replace(new RegExp(`:${n}\\+`,"g"),`:${n}--ESCAPED_PARAM_PLUS`).replace(new RegExp(`:${n}(?!\\w)`,"g"),`--ESCAPED_PARAM_COLON${n}`));return e=e.replace(/(:|\*|\?|\+|\(|\)|\{|\})/g,"\\$1").replace(/--ESCAPED_PARAM_PLUS/g,"+").replace(/--ESCAPED_PARAM_COLON/g,":").replace(/--ESCAPED_PARAM_QUESTION/g,"?").replace(/--ESCAPED_PARAM_ASTERISKS/g,"*"),r.compile(`/${e}`,{validate:!1})(t).slice(1)}function l(e){return e.replace(/__ESC_COLON_/gi,":")}},646:(e,t)=>{"use strict";function n(e){return"string"==typeof e||"number"==typeof e&&!isNaN(e)||"boolean"==typeof e?String(e):""}Object.defineProperty(t,"__esModule",{value:!0}),t.searchParamsToUrlQuery=function(e){const t={};return e.forEach(((e,n)=>{void 0===t[n]?t[n]=e:Array.isArray(t[n])?t[n].push(e):t[n]=[t[n],e]})),t},t.urlQueryToSearchParams=function(e){const t=new URLSearchParams;return Object.entries(e).forEach((([e,r])=>{Array.isArray(r)?r.forEach((r=>t.append(e,n(r)))):t.set(e,n(r))})),t},t.assign=function(e,...t){return t.forEach((t=>{Array.from(t.keys()).forEach((t=>e.delete(t))),t.forEach(((t,n)=>e.append(n,t)))})),e}},5317:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n,r,o,f){let d,h=!1,p=!1,g=s.parseRelativeUrl(e),m=a.removePathTrailingSlash(l.normalizeLocalePath(u.delBasePath(g.pathname),f).pathname);const v=n=>{let s=c(n.source)(g.pathname);if(n.has&&s){const e=i.matchHas({headers:{host:document.location.hostname},cookies:document.cookie.split("; ").reduce(((e,t)=>{const[n,...r]=t.split("=");return e[n]=r.join("="),e}),{})},n.has,g.query);e?Object.assign(s,e):s=!1}if(s){if(!n.destination)return p=!0,!0;const c=i.prepareDestination({appendParamsToQuery:!0,destination:n.destination,params:s,query:r});if(g=c.parsedDestination,e=c.newUrl,Object.assign(r,c.parsedDestination.query),m=a.removePathTrailingSlash(l.normalizeLocalePath(u.delBasePath(e),f).pathname),t.includes(m))return h=!0,d=m,!0;if(d=o(m),d!==e&&t.includes(d))return h=!0,!0}};let y=!1;for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getRouteMatcher=function(e){const{re:t,groups:n}=e;return e=>{const o=t.exec(e);if(!o)return!1;const i=e=>{try{return decodeURIComponent(e)}catch(e){throw new r.DecodeError("failed to decode param")}},a={};return Object.keys(n).forEach((e=>{const t=n[e],r=o[t.pos];void 0!==r&&(a[e]=~r.indexOf("/")?r.split("/").map((e=>i(e))):t.repeat?[i(r)]:i(r))})),a}};var r=n(1624)},4794:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getParametrizedRoute=i,t.getRouteRegex=function(e){const t=i(e);return"routeKeys"in t?{re:new RegExp(`^${t.parameterizedRoute}(?:/)?$`),groups:t.groups,routeKeys:t.routeKeys,namedRegex:`^${t.namedParameterizedRoute}(?:/)?$`}:{re:new RegExp(`^${t.parameterizedRoute}(?:/)?$`),groups:t.groups}};var r=n(8058);function o(e){const t=e.startsWith("[")&&e.endsWith("]");t&&(e=e.slice(1,-1));const n=e.startsWith("...");return n&&(e=e.slice(3)),{key:e,repeat:n,optional:t}}function i(e){const t=(e.replace(/\/$/,"")||"/").slice(1).split("/"),n={};let i=1;const a=t.map((e=>{if(e.startsWith("[")&&e.endsWith("]")){const{key:t,optional:r,repeat:a}=o(e.slice(1,-1));return n[t]={pos:i++,repeat:a,optional:r},a?r?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)"}return`/${r.escapeStringRegexp(e)}`})).join("");if("undefined"==typeof window){let e=97,i=1;const l=()=>{let t="";for(let n=0;n122&&(i++,e=97);return t},s={};return{parameterizedRoute:a,namedParameterizedRoute:t.map((e=>{if(e.startsWith("[")&&e.endsWith("]")){const{key:t,optional:n,repeat:r}=o(e.slice(1,-1));let i=t.replace(/\W/g,""),a=!1;return(0===i.length||i.length>30)&&(a=!0),isNaN(parseInt(i.slice(0,1)))||(a=!0),a&&(i=l()),s[i]=t,r?n?`(?:/(?<${i}>.+?))?`:`/(?<${i}>.+?)`:`/(?<${i}>[^/]+?)`}return`/${r.escapeStringRegexp(e)}`})).join(""),groups:n,routeKeys:s}}return{parameterizedRoute:a,groups:n}}},3948:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getRoutingItems=function(e,t){const n=t.map((e=>`${e.page}/_middleware`)),s=new Map(t.map((e=>[e.page,e])));return a.getSortedRoutes([...e,...n]).map((e=>{if(e.endsWith(l)){const t=e.slice(0,-l.length)||"/",{ssr:n}=s.get(t);return{match:o.getRouteMatcher(r.getMiddlewareRegex(t,!n)),page:t,ssr:n,isMiddleware:!0}}return{match:o.getRouteMatcher(i.getRouteRegex(e)),page:e}}))};var r=n(2763),o=n(3107),i=n(4794),a=n(9036);const l="/_middleware"},9036:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getSortedRoutes=function(e){const t=new n;return e.forEach((e=>t.insert(e))),t.smoosh()};class n{insert(e){this._insert(e.split("/").filter(Boolean),[],!1)}smoosh(){return this._smoosh()}_smoosh(e="/"){const t=[...this.children.keys()].sort();null!==this.slugName&&t.splice(t.indexOf("[]"),1),null!==this.restSlugName&&t.splice(t.indexOf("[...]"),1),null!==this.optionalRestSlugName&&t.splice(t.indexOf("[[...]]"),1),this.isMiddleware&&t.splice(t.indexOf("_middleware"),1);const n=t.map((t=>this.children.get(t)._smoosh(`${e}${t}/`))).reduce(((e,t)=>[...e,...t]),[]);if(null!==this.slugName&&n.push(...this.children.get("[]")._smoosh(`${e}[${this.slugName}]/`)),!this.placeholder){const t="/"===e?"/":e.slice(0,-1);if(null!=this.optionalRestSlugName)throw new Error(`You cannot define a route with the same specificity as a optional catch-all route ("${t}" and "${t}[[...${this.optionalRestSlugName}]]").`);n.unshift(t)}return this.isMiddleware&&n.unshift(...this.children.get("_middleware")._smoosh(`${e}_middleware/`)),null!==this.restSlugName&&n.push(...this.children.get("[...]")._smoosh(`${e}[...${this.restSlugName}]/`)),null!==this.optionalRestSlugName&&n.push(...this.children.get("[[...]]")._smoosh(`${e}[[...${this.optionalRestSlugName}]]/`)),n}_insert(e,t,r){if(0===e.length)return void(this.placeholder=!1);if(r)throw new Error("Catch-all must be the last part of the URL.");let o=e[0];if(o.startsWith("[")&&o.endsWith("]")){let i=o.slice(1,-1),a=!1;if(i.startsWith("[")&&i.endsWith("]")&&(i=i.slice(1,-1),a=!0),i.startsWith("...")&&(i=i.substring(3),r=!0),i.startsWith("[")||i.endsWith("]"))throw new Error(`Segment names may not start or end with extra brackets ('${i}').`);if(i.startsWith("."))throw new Error(`Segment names may not start with erroneous periods ('${i}').`);function l(e,n){if(null!==e&&e!==n)throw new Error(`You cannot use different slug names for the same dynamic path ('${e}' !== '${n}').`);t.forEach((e=>{if(e===n)throw new Error(`You cannot have the same slug name "${n}" repeat within a single dynamic path`);if(e.replace(/\W/g,"")===o.replace(/\W/g,""))throw new Error(`You cannot have the slug names "${e}" and "${n}" differ only by non-word symbols within a single dynamic path`)})),t.push(n)}if(r)if(a){if(null!=this.restSlugName)throw new Error(`You cannot use both an required and optional catch-all route at the same level ("[...${this.restSlugName}]" and "${e[0]}" ).`);l(this.optionalRestSlugName,i),this.optionalRestSlugName=i,o="[[...]]"}else{if(null!=this.optionalRestSlugName)throw new Error(`You cannot use both an optional and required catch-all route at the same level ("[[...${this.optionalRestSlugName}]]" and "${e[0]}").`);l(this.restSlugName,i),this.restSlugName=i,o="[...]"}else{if(a)throw new Error(`Optional route parameters are not yet supported ("${e[0]}").`);l(this.slugName,i),this.slugName=i,o="[]"}}else"_middleware"===o&&1===e.length&&(this.isMiddleware=!0);this.children.has(o)||this.children.set(o,new n),this.children.get(o)._insert(e.slice(1),t,r)}constructor(){this.placeholder=!0,this.children=new Map,this.slugName=null,this.restSlugName=null,this.optionalRestSlugName=null,this.isMiddleware=!1}}},1889:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};r.get||r.set?Object.defineProperty(t,n,r):t[n]=e[n]}return t.default=e,t}(n(2784));const o="undefined"==typeof window;class i extends r.Component{constructor(e){super(e),this.emitChange=()=>{this._hasHeadManager&&this.props.headManager.updateHead(this.props.reduceComponentsToState([...this.props.headManager.mountedInstances],this.props))},this._hasHeadManager=this.props.headManager&&this.props.headManager.mountedInstances,o&&this._hasHeadManager&&(this.props.headManager.mountedInstances.add(this),this.emitChange())}componentDidMount(){this._hasHeadManager&&this.props.headManager.mountedInstances.add(this),this.emitChange()}componentDidUpdate(){this.emitChange()}componentWillUnmount(){this._hasHeadManager&&this.props.headManager.mountedInstances.delete(this),this.emitChange()}render(){return null}}t.default=i},1624:(e,t)=>{"use strict";function n(){const{protocol:e,hostname:t,port:n}=window.location;return`${e}//${t}${n?":"+n:""}`}function r(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function o(e){return e.finished||e.headersSent}Object.defineProperty(t,"__esModule",{value:!0}),t.execOnce=function(e){let t,n=!1;return(...r)=>(n||(n=!0,t=e(...r)),t)},t.getLocationOrigin=n,t.getURL=function(){const{href:e}=window.location,t=n();return e.substring(t.length)},t.getDisplayName=r,t.isResSent=o,t.normalizeRepeatedSlashes=function(e){const t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")},t.loadGetInitialProps=async function e(t,n){const i=n.res||n.ctx&&n.ctx.res;if(!t.getInitialProps)return n.ctx&&n.Component?{pageProps:await e(n.Component,n.ctx)}:{};const a=await t.getInitialProps(n);if(i&&o(i))return a;if(!a){const e=`"${r(t)}.getInitialProps()" should resolve to an object. But found "${a}" instead.`;throw new Error(e)}return a},t.ST=t.SP=t.warnOnce=void 0,t.warnOnce=e=>{};const i="undefined"!=typeof performance;t.SP=i;const a=i&&"function"==typeof performance.mark&&"function"==typeof performance.measure;t.ST=a;class l extends Error{}t.DecodeError=l},6577:(e,t,n)=>{n(104)},9097:(e,t,n)=>{n(4529)},5632:(e,t,n)=>{e.exports=n(9518)},7320:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function o(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,i){for(var a,l,s=o(e),u=1;u{"use strict";var r=n(2784),o=n(7320),i=n(4616);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n