@swiftbrowser/swift 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Package.swift +200 -9
- package/README.md +7 -9
- package/Sources/AVFoundation/AVFoundation.swift +131 -0
- package/Sources/AVFoundation/Asset.swift +487 -0
- package/Sources/AVFoundation/AudioSession.swift +144 -0
- package/Sources/AVFoundation/CMTime.swift +303 -0
- package/Sources/AVFoundation/Capture.swift +688 -0
- package/Sources/AVFoundation/Player.swift +749 -0
- package/Sources/AVFoundation/PlayerView.swift +117 -0
- package/Sources/AVKit/AVKit.swift +132 -0
- package/Sources/Accelerate/Accelerate.swift +122 -0
- package/Sources/AppIntents/AppIntents.swift +144 -0
- package/Sources/AppIntents/Parameters.swift +220 -0
- package/Sources/AppIntents/Shortcuts.swift +159 -0
- package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
- package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
- package/Sources/AuthenticationServices/Authorization.swift +251 -0
- package/Sources/Charts/Charts.swift +0 -4
- package/Sources/Combine/AnyCancellable.swift +65 -0
- package/Sources/Combine/AnyPublisher.swift +148 -0
- package/Sources/Combine/AnySubscriber.swift +230 -0
- package/Sources/Combine/Cancellable.swift +35 -0
- package/Sources/Combine/Codable.swift +29 -0
- package/Sources/Combine/CombineIdentifier.swift +45 -0
- package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
- package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
- package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
- package/Sources/Combine/CurrentValueSubject.swift +252 -0
- package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
- package/Sources/Combine/Future.swift +228 -0
- package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
- package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
- package/Sources/Combine/Helpers/ConduitList.swift +59 -0
- package/Sources/Combine/Helpers/DebugHook.swift +177 -0
- package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
- package/Sources/Combine/Helpers/Locking.swift +30 -0
- package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
- package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
- package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
- package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
- package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
- package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
- package/Sources/Combine/Helpers/Utils.swift +30 -0
- package/Sources/Combine/Helpers/Violations.swift +33 -0
- package/Sources/Combine/ImmediateScheduler.swift +178 -0
- package/Sources/Combine/LICENSE +21 -0
- package/Sources/Combine/NotificationPublisher.swift +48 -0
- package/Sources/Combine/ObjectWillChange.swift +46 -0
- package/Sources/Combine/PassthroughSubject.swift +222 -0
- package/Sources/Combine/Publisher+Subscribe.swift +53 -0
- package/Sources/Combine/Publishers/Deferred.swift +48 -0
- package/Sources/Combine/Publishers/Empty.swift +54 -0
- package/Sources/Combine/Publishers/Fail.swift +42 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
- package/Sources/Combine/Publishers/Just.swift +313 -0
- package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
- package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
- package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
- package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
- package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
- package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
- package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
- package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
- package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
- package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
- package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
- package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
- package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
- package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
- package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
- package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
- package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
- package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
- package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
- package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
- package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
- package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
- package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
- package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
- package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
- package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
- package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
- package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
- package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
- package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
- package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
- package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
- package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
- package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
- package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
- package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
- package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
- package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
- package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
- package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
- package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
- package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
- package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
- package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
- package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
- package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
- package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
- package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
- package/Sources/Combine/Publishers/Publishers.swift +13 -0
- package/Sources/Combine/Publishers/Record.swift +237 -0
- package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
- package/Sources/Combine/Result.swift +46 -0
- package/Sources/Combine/Scheduler.swift +89 -0
- package/Sources/Combine/Schedulers.swift +211 -0
- package/Sources/Combine/Subject+Void.swift +17 -0
- package/Sources/Combine/Subscriber+Void.swift +20 -0
- package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
- package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
- package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
- package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
- package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
- package/Sources/Combine/Subscription.swift +22 -0
- package/Sources/Combine/Subscriptions.swift +42 -0
- package/Sources/Combine/SwiftUIObservation.swift +10 -0
- package/Sources/Combine/_Introspection.swift +107 -0
- package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
- package/Sources/Compression/Compression.swift +365 -0
- package/Sources/Compression/Deflate.swift +407 -0
- package/Sources/Compression/Zlib.swift +179 -0
- package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
- package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
- package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
- package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
- package/Sources/CoreImage/CIColor.swift +41 -0
- package/Sources/CoreImage/CIContext.swift +31 -0
- package/Sources/CoreImage/CIDetector.swift +57 -0
- package/Sources/CoreImage/CIFilter.swift +243 -0
- package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
- package/Sources/CoreImage/CIImage.swift +162 -0
- package/Sources/CoreImage/QRCode.swift +393 -0
- package/Sources/CoreLocation/Coordinate.swift +30 -0
- package/Sources/CoreLocation/Location.swift +65 -0
- package/Sources/CoreML/Evaluation.swift +414 -0
- package/Sources/CoreML/FeatureValue.swift +266 -0
- package/Sources/CoreML/Model.swift +269 -0
- package/Sources/CoreML/MultiArray.swift +92 -0
- package/Sources/CoreML/Specification.swift +233 -0
- package/Sources/CoreText/CoreText.swift +64 -0
- package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
- package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
- package/Sources/CryptoKit/CryptoKit.swift +375 -0
- package/Sources/CryptoKit/Curve25519.swift +317 -0
- package/Sources/CryptoKit/P256.swift +321 -0
- package/Sources/FoundationBridge/AppStorage.swift +165 -0
- package/Sources/FoundationBridge/AssetResources.swift +90 -0
- package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
- package/Sources/FoundationBridge/AsyncImage.swift +116 -0
- package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
- package/Sources/{_FoundationCommon → FoundationBridge}/Bundle.swift +41 -4
- package/Sources/FoundationBridge/CombineExports.swift +8 -0
- package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
- package/Sources/FoundationBridge/Dispatch.swift +458 -0
- package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
- package/Sources/FoundationBridge/FileImporter.swift +128 -0
- package/Sources/FoundationBridge/FileSystem.swift +68 -0
- package/Sources/FoundationBridge/FoundationBridge.swift +24 -72
- package/Sources/FoundationBridge/HostResolution.swift +31 -0
- package/Sources/FoundationBridge/ItemProvider.swift +655 -0
- package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
- package/Sources/FoundationBridge/Links.swift +127 -0
- package/Sources/FoundationBridge/ListFormatter.swift +32 -0
- package/Sources/FoundationBridge/Localization.swift +149 -0
- package/Sources/FoundationBridge/Locks.swift +50 -0
- package/Sources/FoundationBridge/Markdown.swift +527 -0
- package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
- package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
- package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
- package/Sources/FoundationBridge/Operation.swift +195 -0
- package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
- package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
- package/Sources/FoundationBridge/SceneStorage.swift +78 -0
- package/Sources/FoundationBridge/SecurityExports.swift +8 -0
- package/Sources/FoundationBridge/Selector.swift +226 -0
- package/Sources/FoundationBridge/StringComparators.swift +17 -0
- package/Sources/FoundationBridge/Table.swift +211 -0
- package/Sources/FoundationBridge/TextAttributes.swift +42 -0
- package/Sources/FoundationBridge/Timer.swift +6 -1
- package/Sources/FoundationBridge/URLSession.swift +718 -0
- package/Sources/{_FoundationCommon → FoundationBridge}/UserDefaults.swift +17 -4
- package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
- package/Sources/FoundationBridge/WebSocket.swift +187 -0
- package/Sources/FoundationModels/FoundationModels.swift +1098 -0
- package/Sources/ImageIO/GIF.swift +72 -0
- package/Sources/ImageIO/ImageIO.swift +248 -0
- package/Sources/ImageIO/ImageTypes.swift +28 -0
- package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
- package/Sources/LocalAuthentication/LAContext.swift +86 -0
- package/Sources/MapKit/Geometry.swift +223 -0
- package/Sources/MapKit/Map.swift +638 -0
- package/Sources/MapKit/MapView.swift +229 -0
- package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
- package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
- package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
- package/Sources/OSLog/OSLog.swift +6 -0
- package/Sources/Photos/Photos.swift +572 -0
- package/Sources/PhotosUI/PhotosPicker.swift +248 -0
- package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
- package/Sources/QuickLook/QuickLook.swift +168 -0
- package/Sources/SafariServices/SafariServices.swift +106 -0
- package/Sources/Security/Security.swift +332 -0
- package/Sources/StoreKit/AppStore.swift +207 -0
- package/Sources/StoreKit/Products.swift +280 -0
- package/Sources/StoreKit/RequestReview.swift +28 -0
- package/Sources/StoreKit/StoreKit1.swift +486 -0
- package/Sources/StoreKit/StoreViews.swift +428 -0
- package/Sources/StoreKit/Transactions.swift +197 -0
- package/Sources/SwiftData/Macros.swift +58 -0
- package/Sources/SwiftData/ModelActor.swift +38 -0
- package/Sources/SwiftData/ModelContainer.swift +129 -0
- package/Sources/SwiftData/ModelContext.swift +451 -0
- package/Sources/SwiftData/PersistentModel.swift +238 -0
- package/Sources/SwiftData/Properties.swift +261 -0
- package/Sources/SwiftData/Query.swift +256 -0
- package/Sources/SwiftData/Schema.swift +192 -0
- package/Sources/SwiftData/Store.swift +146 -0
- package/Sources/SwiftData/StringPredicates.swift +125 -0
- package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
- package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
- package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
- package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
- package/Sources/SwiftDataMacros/Plugin.swift +18 -0
- package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
- package/Sources/SwiftUI/API/Accessibility.swift +55 -6
- package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
- package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
- package/Sources/SwiftUI/API/Alert.swift +1 -1
- package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
- package/Sources/SwiftUI/API/Animation.swift +37 -5
- package/Sources/SwiftUI/API/App.swift +31 -1
- package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
- package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
- package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
- package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
- package/Sources/SwiftUI/API/Canvas.swift +337 -0
- package/Sources/SwiftUI/API/Color.swift +104 -28
- package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
- package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
- package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
- package/Sources/SwiftUI/API/Commands.swift +106 -0
- package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
- package/Sources/SwiftUI/API/ContentShape.swift +33 -0
- package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
- package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
- package/Sources/SwiftUI/API/Controls.swift +59 -27
- package/Sources/SwiftUI/API/CustomLayout.swift +49 -10
- package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
- package/Sources/SwiftUI/API/Decorations.swift +1 -1
- package/Sources/SwiftUI/API/EditMode.swift +25 -82
- package/Sources/SwiftUI/API/Effects.swift +105 -7
- package/Sources/SwiftUI/API/Entry.swift +8 -0
- package/Sources/SwiftUI/API/Environment.swift +93 -9
- package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
- package/Sources/SwiftUI/API/Focus.swift +11 -3
- package/Sources/SwiftUI/API/Gauge.swift +3 -2
- package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
- package/Sources/SwiftUI/API/GeometryReader.swift +13 -2
- package/Sources/SwiftUI/API/GestureState.swift +65 -0
- package/Sources/SwiftUI/API/Gestures.swift +1 -1
- package/Sources/SwiftUI/API/Glass.swift +127 -0
- package/Sources/SwiftUI/API/Grid.swift +1 -1
- package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
- package/Sources/SwiftUI/API/KeyPress.swift +54 -0
- package/Sources/SwiftUI/API/LabelStyle.swift +13 -6
- package/Sources/SwiftUI/API/Layout.swift +67 -12
- package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
- package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
- package/Sources/SwiftUI/API/Lists.swift +61 -6
- package/Sources/SwiftUI/API/Menu.swift +8 -1
- package/Sources/SwiftUI/API/Modifiers.swift +80 -10
- package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
- package/Sources/SwiftUI/API/Namespace.swift +44 -0
- package/Sources/SwiftUI/API/Navigation.swift +24 -9
- package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
- package/Sources/SwiftUI/API/ObservableObject.swift +16 -2
- package/Sources/SwiftUI/API/Path.swift +543 -0
- package/Sources/SwiftUI/API/Phase8Controls.swift +48 -31
- package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
- package/Sources/SwiftUI/API/Picker.swift +11 -2
- package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
- package/Sources/SwiftUI/API/Popover.swift +41 -0
- package/Sources/SwiftUI/API/Preferences.swift +262 -0
- package/Sources/SwiftUI/API/Presentation.swift +17 -4
- package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
- package/Sources/SwiftUI/API/Primitives.swift +164 -37
- package/Sources/SwiftUI/API/Publishers.swift +4 -4
- package/Sources/SwiftUI/API/Redaction.swift +75 -0
- package/Sources/SwiftUI/API/RowActions.swift +3 -2
- package/Sources/SwiftUI/API/Scenes.swift +131 -0
- package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
- package/Sources/SwiftUI/API/ScrollTargets.swift +3 -3
- package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
- package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
- package/Sources/SwiftUI/API/Shape.swift +214 -0
- package/Sources/SwiftUI/API/ShapeStyle.swift +105 -7
- package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
- package/Sources/SwiftUI/API/Sharing.swift +193 -0
- package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
- package/Sources/SwiftUI/API/State.swift +18 -1
- package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
- package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
- package/Sources/SwiftUI/API/TabContent.swift +841 -0
- package/Sources/SwiftUI/API/Table.swift +382 -0
- package/Sources/SwiftUI/API/Tabs.swift +148 -4
- package/Sources/SwiftUI/API/Tasks.swift +2 -2
- package/Sources/SwiftUI/API/Text.swift +386 -0
- package/Sources/SwiftUI/API/TextDates.swift +61 -0
- package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
- package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
- package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
- package/Sources/SwiftUI/API/Toolbar.swift +52 -16
- package/Sources/SwiftUI/API/Transfer.swift +145 -0
- package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
- package/Sources/SwiftUI/API/Video.swift +64 -0
- package/Sources/SwiftUI/API/View.swift +10 -2
- package/Sources/SwiftUI/API/ViewModifier.swift +4 -1
- package/Sources/SwiftUI/API/VisualEffect.swift +74 -1
- package/Sources/SwiftUI/API/Windows.swift +25 -0
- package/Sources/SwiftUI/Charts/Axis.swift +7 -1
- package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
- package/Sources/SwiftUI/Charts/Chart.swift +17 -3
- package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
- package/Sources/SwiftUI/Localization/Localization.swift +498 -0
- package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
- package/Sources/SwiftUI/Runtime/Executor.swift +2 -0
- package/Sources/SwiftUI/Runtime/Exports.swift +37 -1
- package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
- package/Sources/SwiftUI/Runtime/JSON.swift +76 -4
- package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
- package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
- package/Sources/SwiftUI/Runtime/Ops.swift +58 -12
- package/Sources/SwiftUI/Runtime/Reconciler.swift +10 -1
- package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
- package/Sources/SwiftUI/Runtime/Runtime.swift +977 -198
- package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
- package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
- package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
- package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
- package/Sources/Symbols/Symbols.swift +25 -0
- package/Sources/Translation/Translation.swift +423 -0
- package/Sources/UIKit/Activity.swift +213 -0
- package/Sources/UIKit/Alerts.swift +69 -0
- package/Sources/UIKit/AppDelegate.swift +222 -0
- package/Sources/UIKit/Appearance.swift +84 -0
- package/Sources/UIKit/ColorConversions.swift +70 -0
- package/Sources/UIKit/Controls.swift +225 -0
- package/Sources/UIKit/Device.swift +200 -0
- package/Sources/UIKit/Feedback.swift +65 -0
- package/Sources/UIKit/Font.swift +307 -0
- package/Sources/UIKit/Graphics.swift +204 -0
- package/Sources/UIKit/HostingController.swift +185 -0
- package/Sources/UIKit/Identity.swift +24 -0
- package/Sources/UIKit/Introspectable.swift +510 -0
- package/Sources/UIKit/Pasteboard.swift +363 -0
- package/Sources/UIKit/PhotoAlbum.swift +81 -0
- package/Sources/UIKit/RemoteNotifications.swift +15 -0
- package/Sources/UIKit/Representable.swift +288 -0
- package/Sources/UIKit/SafeArea.swift +12 -0
- package/Sources/UIKit/SceneDelegates.swift +132 -0
- package/Sources/UIKit/Scenes.swift +40 -0
- package/Sources/UIKit/ScrollView.swift +157 -0
- package/Sources/UIKit/ShortcutItems.swift +67 -0
- package/Sources/UIKit/SymbolConfiguration.swift +124 -0
- package/Sources/UIKit/TargetAction.swift +123 -0
- package/Sources/UIKit/TextPaste.swift +161 -0
- package/Sources/UIKit/TextView.swift +538 -0
- package/Sources/UIKit/UIKit.swift +292 -0
- package/Sources/UIKit/UIView.swift +855 -0
- package/Sources/UIKit/ViewTranslation.swift +311 -0
- package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
- package/Sources/UserNotifications/Content.swift +370 -0
- package/Sources/UserNotifications/NotificationCenter.swift +309 -0
- package/Sources/WeatherKit/WeatherKit.swift +228 -0
- package/Sources/WebKit/WebKit.swift +245 -0
- package/Sources/os/os.swift +376 -0
- package/Sources/zlib/zlib.swift +6 -0
- package/index.d.ts +1 -1
- package/index.mjs +2 -2
- package/manifest.d.mts +2 -0
- package/manifest.mjs +39 -0
- package/package.json +5 -3
- package/sync-sources.mjs +21 -7
- package/Sources/FoundationLite/Common.swift +0 -3
- package/Sources/FoundationLite/FoundationLite.swift +0 -171
- package/Sources/FoundationLite/Interaction.swift +0 -146
- package/Sources/FoundationLite/Timer.swift +0 -48
- package/Sources/_FoundationCommon/_FoundationCommon.swift +0 -10
|
@@ -0,0 +1,673 @@
|
|
|
1
|
+
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
|
2
|
+
// ┃ ┃
|
|
3
|
+
// ┃ Auto-generated from GYB template. DO NOT EDIT! ┃
|
|
4
|
+
// ┃ ┃
|
|
5
|
+
// ┃ ┃
|
|
6
|
+
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
7
|
+
//
|
|
8
|
+
// Publishers.Catch.swift
|
|
9
|
+
//
|
|
10
|
+
//
|
|
11
|
+
// Created by Sergej Jaskiewicz on 25.12.2019.
|
|
12
|
+
//
|
|
13
|
+
|
|
14
|
+
extension Publisher {
|
|
15
|
+
|
|
16
|
+
/// Handles errors from an upstream publisher by replacing it with another publisher.
|
|
17
|
+
///
|
|
18
|
+
/// Use `catch()` to replace an error from an upstream publisher with a new publisher.
|
|
19
|
+
///
|
|
20
|
+
/// In the example below, the `catch()` operator handles the `SimpleError` thrown by
|
|
21
|
+
/// the upstream publisher by replacing the error with a `Just` publisher. This
|
|
22
|
+
/// continues the stream by publishing a single value and completing normally.
|
|
23
|
+
///
|
|
24
|
+
/// struct SimpleError: Error {}
|
|
25
|
+
/// let numbers = [5, 4, 3, 2, 1, 0, 9, 8, 7, 6]
|
|
26
|
+
/// cancellable = numbers.publisher
|
|
27
|
+
/// .tryLast(where: {
|
|
28
|
+
/// guard $0 != 0 else { throw SimpleError() }
|
|
29
|
+
/// return true
|
|
30
|
+
/// })
|
|
31
|
+
/// .catch { error in
|
|
32
|
+
/// Just(-1)
|
|
33
|
+
/// }
|
|
34
|
+
/// .sink { print("\($0)") }
|
|
35
|
+
/// // Prints: -1
|
|
36
|
+
///
|
|
37
|
+
/// Backpressure note: This publisher passes through `request` and `cancel` to
|
|
38
|
+
/// the upstream. After receiving an error, the publisher sends sends any unfulfilled
|
|
39
|
+
/// demand to the new `Publisher`.
|
|
40
|
+
///
|
|
41
|
+
/// - SeeAlso: `replaceError`
|
|
42
|
+
/// - Parameter handler: A closure that accepts the upstream failure as input and
|
|
43
|
+
/// returns a publisher to replace the upstream publisher.
|
|
44
|
+
/// - Returns: A publisher that handles errors from an upstream publisher by replacing
|
|
45
|
+
/// the failed publisher with another publisher.
|
|
46
|
+
public func `catch`<NewPublisher: Publisher>(
|
|
47
|
+
_ handler: @escaping (Failure) -> NewPublisher
|
|
48
|
+
) -> Publishers.Catch<Self, NewPublisher>
|
|
49
|
+
where NewPublisher.Output == Output
|
|
50
|
+
{
|
|
51
|
+
return .init(upstream: self, handler: handler)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/// Handles errors from an upstream publisher by either replacing it with another
|
|
55
|
+
/// publisher or throwing a new error.
|
|
56
|
+
///
|
|
57
|
+
/// Use `tryCatch(_:)` to decide how to handle from an upstream publisher by either
|
|
58
|
+
/// replacing the publisher with a new publisher, or throwing a new error.
|
|
59
|
+
///
|
|
60
|
+
/// In the example below, an array publisher emits values that a `tryMap(_:)` operator
|
|
61
|
+
/// evaluates to ensure the values are greater than zero. If the values aren’t greater
|
|
62
|
+
/// than zero, the operator throws an error to the downstream subscriber to let it
|
|
63
|
+
/// know there was a problem. The subscriber, `tryCatch(_:)`, replaces the error with
|
|
64
|
+
/// a new publisher using ``Just`` to publish a final value before the stream ends
|
|
65
|
+
/// normally.
|
|
66
|
+
///
|
|
67
|
+
/// enum SimpleError: Error { case error }
|
|
68
|
+
/// var numbers = [5, 4, 3, 2, 1, -1, 7, 8, 9, 10]
|
|
69
|
+
///
|
|
70
|
+
/// cancellable = numbers.publisher
|
|
71
|
+
/// .tryMap { v in
|
|
72
|
+
/// if v > 0 {
|
|
73
|
+
/// return v
|
|
74
|
+
/// } else {
|
|
75
|
+
/// throw SimpleError.error
|
|
76
|
+
/// }
|
|
77
|
+
/// }
|
|
78
|
+
/// .tryCatch { error in
|
|
79
|
+
/// Just(0) // Send a final value before completing normally.
|
|
80
|
+
/// // Alternatively, throw a new error to terminate the stream.
|
|
81
|
+
/// }
|
|
82
|
+
/// .sink(receiveCompletion: { print ("Completion: \($0).") },
|
|
83
|
+
/// receiveValue: { print ("Received \($0).") })
|
|
84
|
+
/// // Received 5.
|
|
85
|
+
/// // Received 4.
|
|
86
|
+
/// // Received 3.
|
|
87
|
+
/// // Received 2.
|
|
88
|
+
/// // Received 1.
|
|
89
|
+
/// // Received 0.
|
|
90
|
+
/// // Completion: finished.
|
|
91
|
+
///
|
|
92
|
+
/// - Parameter handler: A throwing closure that accepts the upstream failure as
|
|
93
|
+
/// input. This closure can either replace the upstream publisher with a new one,
|
|
94
|
+
/// or throw a new error to the downstream subscriber.
|
|
95
|
+
/// - Returns: A publisher that handles errors from an upstream publisher by replacing
|
|
96
|
+
/// the failed publisher with another publisher, or an error.
|
|
97
|
+
public func tryCatch<NewPublisher: Publisher>(
|
|
98
|
+
_ handler: @escaping (Failure) throws -> NewPublisher
|
|
99
|
+
) -> Publishers.TryCatch<Self, NewPublisher>
|
|
100
|
+
where NewPublisher.Output == Output
|
|
101
|
+
{
|
|
102
|
+
return .init(upstream: self, handler: handler)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
extension Publishers {
|
|
107
|
+
|
|
108
|
+
/// A publisher that handles errors from an upstream publisher by replacing the failed
|
|
109
|
+
/// publisher with another publisher.
|
|
110
|
+
public struct Catch<Upstream: Publisher, NewPublisher: Publisher>: Publisher
|
|
111
|
+
where Upstream.Output == NewPublisher.Output
|
|
112
|
+
{
|
|
113
|
+
public typealias Output = Upstream.Output
|
|
114
|
+
|
|
115
|
+
public typealias Failure = NewPublisher.Failure
|
|
116
|
+
|
|
117
|
+
/// The publisher that this publisher receives elements from.
|
|
118
|
+
public let upstream: Upstream
|
|
119
|
+
|
|
120
|
+
/// A closure that accepts the upstream failure as input and returns a publisher
|
|
121
|
+
/// to replace the upstream publisher.
|
|
122
|
+
public let handler: (Upstream.Failure) -> NewPublisher
|
|
123
|
+
|
|
124
|
+
/// Creates a publisher that handles errors from an upstream publisher by
|
|
125
|
+
/// replacing the failed publisher with another publisher.
|
|
126
|
+
///
|
|
127
|
+
/// - Parameters:
|
|
128
|
+
/// - upstream: The publisher that this publisher receives elements from.
|
|
129
|
+
/// - handler: A closure that accepts the upstream failure as input and returns
|
|
130
|
+
/// a publisher to replace the upstream publisher.
|
|
131
|
+
public init(upstream: Upstream,
|
|
132
|
+
handler: @escaping (Upstream.Failure) -> NewPublisher) {
|
|
133
|
+
self.upstream = upstream
|
|
134
|
+
self.handler = handler
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
138
|
+
where Downstream.Input == Output, Downstream.Failure == Failure
|
|
139
|
+
{
|
|
140
|
+
let inner = Inner(downstream: subscriber, handler: handler)
|
|
141
|
+
let uncaughtS = Inner.UncaughtS(inner: inner)
|
|
142
|
+
upstream.subscribe(uncaughtS)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/// A publisher that handles errors from an upstream publisher by replacing
|
|
147
|
+
/// the failed publisher with another publisher or producing a new error.
|
|
148
|
+
///
|
|
149
|
+
/// Because this publisher’s handler can throw an error, `Publishers.TryCatch` defines
|
|
150
|
+
/// its `Failure` type as `Error`. This is different from `Publishers.Catch`, which
|
|
151
|
+
/// gets its failure type from the replacement publisher.
|
|
152
|
+
public struct TryCatch<Upstream: Publisher, NewPublisher: Publisher>: Publisher
|
|
153
|
+
where Upstream.Output == NewPublisher.Output
|
|
154
|
+
{
|
|
155
|
+
public typealias Output = Upstream.Output
|
|
156
|
+
|
|
157
|
+
public typealias Failure = Error
|
|
158
|
+
|
|
159
|
+
/// The publisher that this publisher receives elements from.
|
|
160
|
+
public let upstream: Upstream
|
|
161
|
+
|
|
162
|
+
/// A closure that accepts the upstream failure as input and either returns
|
|
163
|
+
/// a publisher to replace the upstream publisher or throws an error.
|
|
164
|
+
public let handler: (Upstream.Failure) throws -> NewPublisher
|
|
165
|
+
|
|
166
|
+
/// Creates a publisher that handles errors from an upstream publisher by
|
|
167
|
+
/// replacing the failed publisher with another publisher or by throwing an error.
|
|
168
|
+
///
|
|
169
|
+
/// - Parameters:
|
|
170
|
+
/// - upstream: The publisher that this publisher receives elements from.
|
|
171
|
+
/// - handler: A closure that accepts the upstream failure as input and either
|
|
172
|
+
/// returns a publisher to replace the upstream publisher. If this closure
|
|
173
|
+
/// throws an error, the publisher terminates with the thrown error.
|
|
174
|
+
public init(upstream: Upstream,
|
|
175
|
+
handler: @escaping (Upstream.Failure) throws -> NewPublisher) {
|
|
176
|
+
self.upstream = upstream
|
|
177
|
+
self.handler = handler
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
181
|
+
where Downstream.Input == Output, Downstream.Failure == Failure
|
|
182
|
+
{
|
|
183
|
+
let inner = Inner(downstream: subscriber, handler: handler)
|
|
184
|
+
let uncaughtS = Inner.UncaughtS(inner: inner)
|
|
185
|
+
upstream.subscribe(uncaughtS)
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
extension Publishers.Catch {
|
|
191
|
+
private final class Inner<Downstream: Subscriber>
|
|
192
|
+
: Subscription,
|
|
193
|
+
CustomStringConvertible,
|
|
194
|
+
CustomReflectable,
|
|
195
|
+
CustomPlaygroundDisplayConvertible
|
|
196
|
+
where Downstream.Input == Upstream.Output,
|
|
197
|
+
Downstream.Failure == NewPublisher.Failure
|
|
198
|
+
{
|
|
199
|
+
struct UncaughtS: Subscriber,
|
|
200
|
+
CustomStringConvertible,
|
|
201
|
+
CustomReflectable,
|
|
202
|
+
CustomPlaygroundDisplayConvertible
|
|
203
|
+
{
|
|
204
|
+
typealias Input = Upstream.Output
|
|
205
|
+
|
|
206
|
+
typealias Failure = Upstream.Failure
|
|
207
|
+
|
|
208
|
+
let inner: Inner
|
|
209
|
+
|
|
210
|
+
var combineIdentifier: CombineIdentifier { return inner.combineIdentifier }
|
|
211
|
+
|
|
212
|
+
func receive(subscription: Subscription) {
|
|
213
|
+
inner.receivePre(subscription: subscription)
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
func receive(_ input: Input) -> Subscribers.Demand {
|
|
217
|
+
return inner.receivePre(input)
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
221
|
+
return inner.receivePre(completion: completion)
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
var description: String { return inner.description }
|
|
225
|
+
|
|
226
|
+
var customMirror: Mirror { return inner.customMirror }
|
|
227
|
+
|
|
228
|
+
var playgroundDescription: Any { return description }
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
struct CaughtS: Subscriber,
|
|
232
|
+
CustomStringConvertible,
|
|
233
|
+
CustomReflectable,
|
|
234
|
+
CustomPlaygroundDisplayConvertible
|
|
235
|
+
{
|
|
236
|
+
typealias Input = NewPublisher.Output
|
|
237
|
+
|
|
238
|
+
typealias Failure = NewPublisher.Failure
|
|
239
|
+
|
|
240
|
+
let inner: Inner
|
|
241
|
+
|
|
242
|
+
var combineIdentifier: CombineIdentifier { return inner.combineIdentifier }
|
|
243
|
+
|
|
244
|
+
func receive(subscription: Subscription) {
|
|
245
|
+
inner.receivePost(subscription: subscription)
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
func receive(_ input: Input) -> Subscribers.Demand {
|
|
249
|
+
return inner.receivePost(input)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
253
|
+
inner.receivePost(completion: completion)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
var description: String { return inner.description }
|
|
257
|
+
|
|
258
|
+
var customMirror: Mirror { return inner.customMirror }
|
|
259
|
+
|
|
260
|
+
var playgroundDescription: Any { return description }
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
private enum State {
|
|
264
|
+
case pendingPre
|
|
265
|
+
case pre(Subscription)
|
|
266
|
+
case pendingPost
|
|
267
|
+
case post(Subscription)
|
|
268
|
+
case cancelled
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
private let lock = UnfairLock.allocate()
|
|
272
|
+
|
|
273
|
+
private var demand = Subscribers.Demand.none
|
|
274
|
+
|
|
275
|
+
private var state = State.pendingPre
|
|
276
|
+
|
|
277
|
+
private let downstream: Downstream
|
|
278
|
+
|
|
279
|
+
private let handler: (Upstream.Failure) -> NewPublisher
|
|
280
|
+
|
|
281
|
+
init(downstream: Downstream,
|
|
282
|
+
handler: @escaping (Upstream.Failure) -> NewPublisher) {
|
|
283
|
+
self.downstream = downstream
|
|
284
|
+
self.handler = handler
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
deinit {
|
|
288
|
+
lock.deallocate()
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
func receivePre(subscription: Subscription) {
|
|
292
|
+
lock.lock()
|
|
293
|
+
guard case .pendingPre = state else {
|
|
294
|
+
lock.unlock()
|
|
295
|
+
subscription.cancel()
|
|
296
|
+
return
|
|
297
|
+
}
|
|
298
|
+
state = .pre(subscription)
|
|
299
|
+
lock.unlock()
|
|
300
|
+
downstream.receive(subscription: self)
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
func receivePre(_ input: Upstream.Output) -> Subscribers.Demand {
|
|
304
|
+
lock.lock()
|
|
305
|
+
demand -= 1
|
|
306
|
+
lock.unlock()
|
|
307
|
+
let newDemand = downstream.receive(input)
|
|
308
|
+
lock.lock()
|
|
309
|
+
demand += newDemand
|
|
310
|
+
lock.unlock()
|
|
311
|
+
return newDemand
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
func receivePre(completion: Subscribers.Completion<Upstream.Failure>) {
|
|
315
|
+
switch completion {
|
|
316
|
+
case .finished:
|
|
317
|
+
lock.lock()
|
|
318
|
+
switch state {
|
|
319
|
+
case .pre:
|
|
320
|
+
state = .cancelled
|
|
321
|
+
lock.unlock()
|
|
322
|
+
downstream.receive(completion: .finished)
|
|
323
|
+
case .pendingPre, .pendingPost, .post, .cancelled:
|
|
324
|
+
lock.unlock()
|
|
325
|
+
}
|
|
326
|
+
case .failure(let error):
|
|
327
|
+
lock.lock()
|
|
328
|
+
switch state {
|
|
329
|
+
case .pre:
|
|
330
|
+
state = .pendingPost
|
|
331
|
+
lock.unlock()
|
|
332
|
+
handler(error).subscribe(CaughtS(inner: self))
|
|
333
|
+
case .cancelled:
|
|
334
|
+
lock.unlock()
|
|
335
|
+
case .pendingPre, .post, .pendingPost:
|
|
336
|
+
completionBeforeSubscription()
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
func receivePost(subscription: Subscription) {
|
|
342
|
+
lock.lock()
|
|
343
|
+
guard case .pendingPost = state else {
|
|
344
|
+
lock.unlock()
|
|
345
|
+
subscription.cancel()
|
|
346
|
+
return
|
|
347
|
+
}
|
|
348
|
+
state = .post(subscription)
|
|
349
|
+
let demand = self.demand
|
|
350
|
+
lock.unlock()
|
|
351
|
+
if demand > 0 {
|
|
352
|
+
subscription.request(demand)
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
func receivePost(_ input: NewPublisher.Output) -> Subscribers.Demand {
|
|
357
|
+
return downstream.receive(input)
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
func receivePost(completion: Subscribers.Completion<NewPublisher.Failure>) {
|
|
361
|
+
lock.lock()
|
|
362
|
+
guard case .post = state else {
|
|
363
|
+
lock.unlock()
|
|
364
|
+
return
|
|
365
|
+
}
|
|
366
|
+
state = .cancelled
|
|
367
|
+
lock.unlock()
|
|
368
|
+
downstream.receive(completion: completion)
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
func request(_ demand: Subscribers.Demand) {
|
|
372
|
+
demand.assertNonZero()
|
|
373
|
+
lock.lock()
|
|
374
|
+
switch state {
|
|
375
|
+
case .pendingPre:
|
|
376
|
+
// The client is only able to call the `request` method after we've sent
|
|
377
|
+
// `self` downstream. We only do it in the `receivePre(subscription:)`
|
|
378
|
+
// method, after setting `state` to `pre`.
|
|
379
|
+
// After that `state` never becomes `pendingPre`.
|
|
380
|
+
requestBeforeSubscription()
|
|
381
|
+
case let .pre(subscription):
|
|
382
|
+
self.demand += demand
|
|
383
|
+
lock.unlock()
|
|
384
|
+
subscription.request(demand)
|
|
385
|
+
case .pendingPost:
|
|
386
|
+
self.demand += demand
|
|
387
|
+
lock.unlock()
|
|
388
|
+
case let .post(subscription):
|
|
389
|
+
lock.unlock()
|
|
390
|
+
subscription.request(demand)
|
|
391
|
+
case .cancelled:
|
|
392
|
+
lock.unlock()
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
func cancel() {
|
|
397
|
+
lock.lock()
|
|
398
|
+
switch state {
|
|
399
|
+
case let .pre(subscription), let .post(subscription):
|
|
400
|
+
state = .cancelled
|
|
401
|
+
lock.unlock()
|
|
402
|
+
subscription.cancel()
|
|
403
|
+
case .pendingPre, .pendingPost, .cancelled:
|
|
404
|
+
lock.unlock()
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
var description: String { return "Catch" }
|
|
409
|
+
|
|
410
|
+
var customMirror: Mirror {
|
|
411
|
+
let children: [Mirror.Child] = [
|
|
412
|
+
("downstream", downstream),
|
|
413
|
+
("demand", demand)
|
|
414
|
+
]
|
|
415
|
+
return Mirror(self, children: children)
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
var playgroundDescription: Any { return description }
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
extension Publishers.TryCatch {
|
|
423
|
+
private final class Inner<Downstream: Subscriber>
|
|
424
|
+
: Subscription,
|
|
425
|
+
CustomStringConvertible,
|
|
426
|
+
CustomReflectable,
|
|
427
|
+
CustomPlaygroundDisplayConvertible
|
|
428
|
+
where Downstream.Input == Upstream.Output,
|
|
429
|
+
Downstream.Failure == Error
|
|
430
|
+
{
|
|
431
|
+
struct UncaughtS: Subscriber,
|
|
432
|
+
CustomStringConvertible,
|
|
433
|
+
CustomReflectable,
|
|
434
|
+
CustomPlaygroundDisplayConvertible
|
|
435
|
+
{
|
|
436
|
+
typealias Input = Upstream.Output
|
|
437
|
+
|
|
438
|
+
typealias Failure = Upstream.Failure
|
|
439
|
+
|
|
440
|
+
let inner: Inner
|
|
441
|
+
|
|
442
|
+
var combineIdentifier: CombineIdentifier { return inner.combineIdentifier }
|
|
443
|
+
|
|
444
|
+
func receive(subscription: Subscription) {
|
|
445
|
+
inner.receivePre(subscription: subscription)
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
func receive(_ input: Input) -> Subscribers.Demand {
|
|
449
|
+
return inner.receivePre(input)
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
453
|
+
return inner.receivePre(completion: completion)
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
var description: String { return inner.description }
|
|
457
|
+
|
|
458
|
+
var customMirror: Mirror { return inner.customMirror }
|
|
459
|
+
|
|
460
|
+
var playgroundDescription: Any { return description }
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
struct CaughtS: Subscriber,
|
|
464
|
+
CustomStringConvertible,
|
|
465
|
+
CustomReflectable,
|
|
466
|
+
CustomPlaygroundDisplayConvertible
|
|
467
|
+
{
|
|
468
|
+
typealias Input = NewPublisher.Output
|
|
469
|
+
|
|
470
|
+
typealias Failure = NewPublisher.Failure
|
|
471
|
+
|
|
472
|
+
let inner: Inner
|
|
473
|
+
|
|
474
|
+
var combineIdentifier: CombineIdentifier { return inner.combineIdentifier }
|
|
475
|
+
|
|
476
|
+
func receive(subscription: Subscription) {
|
|
477
|
+
inner.receivePost(subscription: subscription)
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
func receive(_ input: Input) -> Subscribers.Demand {
|
|
481
|
+
return inner.receivePost(input)
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
485
|
+
inner.receivePost(completion: completion)
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
var description: String { return inner.description }
|
|
489
|
+
|
|
490
|
+
var customMirror: Mirror { return inner.customMirror }
|
|
491
|
+
|
|
492
|
+
var playgroundDescription: Any { return description }
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
private enum State {
|
|
496
|
+
case pendingPre
|
|
497
|
+
case pre(Subscription)
|
|
498
|
+
case pendingPost
|
|
499
|
+
case post(Subscription)
|
|
500
|
+
case cancelled
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
private let lock = UnfairLock.allocate()
|
|
504
|
+
|
|
505
|
+
private var demand = Subscribers.Demand.none
|
|
506
|
+
|
|
507
|
+
private var state = State.pendingPre
|
|
508
|
+
|
|
509
|
+
private let downstream: Downstream
|
|
510
|
+
|
|
511
|
+
private let handler: (Upstream.Failure) throws -> NewPublisher
|
|
512
|
+
|
|
513
|
+
init(downstream: Downstream,
|
|
514
|
+
handler: @escaping (Upstream.Failure) throws -> NewPublisher) {
|
|
515
|
+
self.downstream = downstream
|
|
516
|
+
self.handler = handler
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
deinit {
|
|
520
|
+
lock.deallocate()
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
func receivePre(subscription: Subscription) {
|
|
524
|
+
lock.lock()
|
|
525
|
+
guard case .pendingPre = state else {
|
|
526
|
+
lock.unlock()
|
|
527
|
+
subscription.cancel()
|
|
528
|
+
return
|
|
529
|
+
}
|
|
530
|
+
state = .pre(subscription)
|
|
531
|
+
lock.unlock()
|
|
532
|
+
downstream.receive(subscription: self)
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
func receivePre(_ input: Upstream.Output) -> Subscribers.Demand {
|
|
536
|
+
lock.lock()
|
|
537
|
+
demand -= 1
|
|
538
|
+
lock.unlock()
|
|
539
|
+
let newDemand = downstream.receive(input)
|
|
540
|
+
lock.lock()
|
|
541
|
+
demand += newDemand
|
|
542
|
+
lock.unlock()
|
|
543
|
+
return newDemand
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
func receivePre(completion: Subscribers.Completion<Upstream.Failure>) {
|
|
547
|
+
switch completion {
|
|
548
|
+
case .finished:
|
|
549
|
+
lock.lock()
|
|
550
|
+
switch state {
|
|
551
|
+
case .pre:
|
|
552
|
+
state = .cancelled
|
|
553
|
+
lock.unlock()
|
|
554
|
+
downstream.receive(completion: .finished)
|
|
555
|
+
case .pendingPre, .pendingPost, .post, .cancelled:
|
|
556
|
+
lock.unlock()
|
|
557
|
+
}
|
|
558
|
+
case .failure(let error):
|
|
559
|
+
lock.lock()
|
|
560
|
+
switch state {
|
|
561
|
+
case .pre:
|
|
562
|
+
state = .pendingPost
|
|
563
|
+
lock.unlock()
|
|
564
|
+
do {
|
|
565
|
+
try handler(error).subscribe(CaughtS(inner: self))
|
|
566
|
+
} catch let anotherError {
|
|
567
|
+
lock.lock()
|
|
568
|
+
state = .cancelled
|
|
569
|
+
lock.unlock()
|
|
570
|
+
downstream.receive(completion: .failure(anotherError))
|
|
571
|
+
}
|
|
572
|
+
case .cancelled:
|
|
573
|
+
lock.unlock()
|
|
574
|
+
case .pendingPre, .post, .pendingPost:
|
|
575
|
+
completionBeforeSubscription()
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
func receivePost(subscription: Subscription) {
|
|
581
|
+
lock.lock()
|
|
582
|
+
guard case .pendingPost = state else {
|
|
583
|
+
lock.unlock()
|
|
584
|
+
subscription.cancel()
|
|
585
|
+
return
|
|
586
|
+
}
|
|
587
|
+
state = .post(subscription)
|
|
588
|
+
let demand = self.demand
|
|
589
|
+
lock.unlock()
|
|
590
|
+
if demand > 0 {
|
|
591
|
+
subscription.request(demand)
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
func receivePost(_ input: NewPublisher.Output) -> Subscribers.Demand {
|
|
596
|
+
return downstream.receive(input)
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
func receivePost(completion: Subscribers.Completion<NewPublisher.Failure>) {
|
|
600
|
+
lock.lock()
|
|
601
|
+
guard case .post = state else {
|
|
602
|
+
lock.unlock()
|
|
603
|
+
return
|
|
604
|
+
}
|
|
605
|
+
state = .cancelled
|
|
606
|
+
lock.unlock()
|
|
607
|
+
downstream.receive(completion: completion.eraseError())
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
func request(_ demand: Subscribers.Demand) {
|
|
611
|
+
demand.assertNonZero()
|
|
612
|
+
lock.lock()
|
|
613
|
+
switch state {
|
|
614
|
+
case .pendingPre:
|
|
615
|
+
// The client is only able to call the `request` method after we've sent
|
|
616
|
+
// `self` downstream. We only do it in the `receivePre(subscription:)`
|
|
617
|
+
// method, after setting `state` to `pre`.
|
|
618
|
+
// After that `state` never becomes `pendingPre`.
|
|
619
|
+
requestBeforeSubscription()
|
|
620
|
+
case let .pre(subscription):
|
|
621
|
+
self.demand += demand
|
|
622
|
+
lock.unlock()
|
|
623
|
+
subscription.request(demand)
|
|
624
|
+
case .pendingPost:
|
|
625
|
+
self.demand += demand
|
|
626
|
+
lock.unlock()
|
|
627
|
+
case let .post(subscription):
|
|
628
|
+
lock.unlock()
|
|
629
|
+
subscription.request(demand)
|
|
630
|
+
case .cancelled:
|
|
631
|
+
lock.unlock()
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
func cancel() {
|
|
636
|
+
lock.lock()
|
|
637
|
+
switch state {
|
|
638
|
+
case let .pre(subscription), let .post(subscription):
|
|
639
|
+
state = .cancelled
|
|
640
|
+
lock.unlock()
|
|
641
|
+
subscription.cancel()
|
|
642
|
+
case .pendingPre, .pendingPost, .cancelled:
|
|
643
|
+
lock.unlock()
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
var description: String { return "TryCatch" }
|
|
648
|
+
|
|
649
|
+
var customMirror: Mirror {
|
|
650
|
+
let children: [Mirror.Child] = [
|
|
651
|
+
("downstream", downstream),
|
|
652
|
+
("demand", demand)
|
|
653
|
+
]
|
|
654
|
+
return Mirror(self, children: children)
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
var playgroundDescription: Any { return description }
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
private func completionBeforeSubscription(file: StaticString = #file,
|
|
662
|
+
line: UInt = #line) -> Never {
|
|
663
|
+
fatalError("Unexpected state: received completion but do not have subscription",
|
|
664
|
+
file: file,
|
|
665
|
+
line: line)
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
private func requestBeforeSubscription(file: StaticString = #file,
|
|
669
|
+
line: UInt = #line) -> Never {
|
|
670
|
+
fatalError("Unexpected state: request before subscription sent",
|
|
671
|
+
file: file,
|
|
672
|
+
line: line)
|
|
673
|
+
}
|