@swiftbrowser/swift 0.0.0-stage → 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 +214 -0
- package/README.md +10 -2
- 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 +61 -0
- 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/FoundationBridge/Bundle.swift +119 -0
- 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 +29 -0
- 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/Locale.swift +86 -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 +53 -0
- package/Sources/FoundationBridge/UITextChecker.swift +30 -0
- package/Sources/FoundationBridge/URLSession.swift +718 -0
- package/Sources/FoundationBridge/UserDefaults.swift +183 -0
- 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 +181 -0
- package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
- package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
- package/Sources/SwiftUI/API/Alert.swift +221 -0
- package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
- package/Sources/SwiftUI/API/Animation.swift +285 -0
- package/Sources/SwiftUI/API/App.swift +87 -0
- 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 +237 -0
- 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 +300 -0
- package/Sources/SwiftUI/API/CustomLayout.swift +442 -0
- package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
- package/Sources/SwiftUI/API/Decorations.swift +92 -0
- package/Sources/SwiftUI/API/EditMode.swift +212 -0
- package/Sources/SwiftUI/API/Effects.swift +388 -0
- package/Sources/SwiftUI/API/Entry.swift +8 -0
- package/Sources/SwiftUI/API/Environment.swift +439 -0
- package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
- package/Sources/SwiftUI/API/Focus.swift +137 -0
- package/Sources/SwiftUI/API/Font.swift +131 -0
- package/Sources/SwiftUI/API/Gauge.swift +290 -0
- package/Sources/SwiftUI/API/Geometry.swift +89 -0
- package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
- package/Sources/SwiftUI/API/GeometryReader.swift +135 -0
- package/Sources/SwiftUI/API/GestureState.swift +65 -0
- package/Sources/SwiftUI/API/Gestures.swift +342 -0
- package/Sources/SwiftUI/API/Glass.swift +127 -0
- package/Sources/SwiftUI/API/Grid.swift +188 -0
- package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
- package/Sources/SwiftUI/API/KeyPress.swift +54 -0
- package/Sources/SwiftUI/API/LabelStyle.swift +124 -0
- package/Sources/SwiftUI/API/Layout.swift +220 -0
- package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
- package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
- package/Sources/SwiftUI/API/Lists.swift +331 -0
- package/Sources/SwiftUI/API/Menu.swift +58 -0
- package/Sources/SwiftUI/API/Modifiers.swift +313 -0
- package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
- package/Sources/SwiftUI/API/Namespace.swift +44 -0
- package/Sources/SwiftUI/API/Navigation.swift +386 -0
- package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
- package/Sources/SwiftUI/API/ObservableObject.swift +293 -0
- package/Sources/SwiftUI/API/OnChange.swift +48 -0
- package/Sources/SwiftUI/API/Path.swift +543 -0
- package/Sources/SwiftUI/API/Phase8Controls.swift +411 -0
- package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
- package/Sources/SwiftUI/API/Picker.swift +185 -0
- 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 +122 -0
- package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
- package/Sources/SwiftUI/API/Primitives.swift +517 -0
- package/Sources/SwiftUI/API/Publishers.swift +107 -0
- package/Sources/SwiftUI/API/Redaction.swift +75 -0
- package/Sources/SwiftUI/API/RowActions.swift +84 -0
- package/Sources/SwiftUI/API/Scenes.swift +131 -0
- package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
- package/Sources/SwiftUI/API/ScrollTargets.swift +104 -0
- 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 +409 -0
- 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 +144 -0
- package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
- package/Sources/SwiftUI/API/StrokeStyle.swift +30 -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 +263 -0
- package/Sources/SwiftUI/API/Tasks.swift +35 -0
- 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/Timeline.swift +212 -0
- package/Sources/SwiftUI/API/Toolbar.swift +251 -0
- 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 +215 -0
- package/Sources/SwiftUI/API/ViewModifier.swift +43 -0
- package/Sources/SwiftUI/API/VisualEffect.swift +155 -0
- package/Sources/SwiftUI/API/Windows.swift +25 -0
- package/Sources/SwiftUI/Charts/Axis.swift +325 -0
- package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
- package/Sources/SwiftUI/Charts/Chart.swift +660 -0
- package/Sources/SwiftUI/Charts/ChartContent.swift +376 -0
- package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
- package/Sources/SwiftUI/Charts/Marks.swift +204 -0
- package/Sources/SwiftUI/Charts/Plottable.swift +99 -0
- package/Sources/SwiftUI/Charts/Scales.swift +326 -0
- package/Sources/SwiftUI/Localization/Localization.swift +498 -0
- package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
- package/Sources/SwiftUI/Runtime/Executor.swift +85 -0
- package/Sources/SwiftUI/Runtime/Exports.swift +101 -0
- package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
- package/Sources/SwiftUI/Runtime/JSON.swift +143 -0
- package/Sources/SwiftUI/Runtime/JSONParser.swift +443 -0
- package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
- package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
- package/Sources/SwiftUI/Runtime/Ops.swift +152 -0
- package/Sources/SwiftUI/Runtime/Reconciler.swift +219 -0
- package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
- package/Sources/SwiftUI/Runtime/Runtime.swift +2146 -0
- 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 +2 -0
- package/index.mjs +16 -0
- package/manifest.d.mts +2 -0
- package/manifest.mjs +39 -0
- package/package.json +30 -4
- package/sync-sources.mjs +33 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Publishers.MakeConnectable.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 18/09/2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Publisher where Failure == Never {
|
|
9
|
+
|
|
10
|
+
/// Creates a connectable wrapper around the publisher.
|
|
11
|
+
///
|
|
12
|
+
/// In the following example, `makeConnectable()` wraps its upstream publisher
|
|
13
|
+
/// (an instance of `Publishers.Share`) with a `ConnectablePublisher`. Without this,
|
|
14
|
+
/// the first sink subscriber would receive all the elements from the sequence
|
|
15
|
+
/// publisher and cause it to complete before the second subscriber attaches.
|
|
16
|
+
/// By making the publisher connectable, the publisher doesn’t produce any elements
|
|
17
|
+
/// until after the `connect()` call.
|
|
18
|
+
///
|
|
19
|
+
/// let subject = Just<String>("Sent")
|
|
20
|
+
/// let pub = subject
|
|
21
|
+
/// .share()
|
|
22
|
+
/// .makeConnectable()
|
|
23
|
+
/// cancellable1 = pub.sink { print ("Stream 1 received: \($0)") }
|
|
24
|
+
///
|
|
25
|
+
/// // For example purposes, use DispatchQueue to add a second subscriber
|
|
26
|
+
/// // a second later, and then connect to the publisher a second after that.
|
|
27
|
+
/// DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
|
28
|
+
/// self.cancellable2 = pub.sink { print ("Stream 2 received: \($0)") }
|
|
29
|
+
/// }
|
|
30
|
+
/// DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
|
|
31
|
+
/// self.connectable = pub.connect()
|
|
32
|
+
/// }
|
|
33
|
+
/// // Prints:
|
|
34
|
+
/// // Stream 2 received: Sent
|
|
35
|
+
/// // Stream 1 received: Sent
|
|
36
|
+
///
|
|
37
|
+
/// > Note: The `connect()` operator returns a `Cancellable` instance that you must
|
|
38
|
+
/// retain. You can also use this instance to cancel publishing.
|
|
39
|
+
///
|
|
40
|
+
/// - Returns: A `ConnectablePublisher` wrapping this publisher.
|
|
41
|
+
public func makeConnectable() -> Publishers.MakeConnectable<Self> {
|
|
42
|
+
return .init(upstream: self)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
extension Publishers {
|
|
47
|
+
|
|
48
|
+
/// A publisher that provides explicit connectability to another publisher.
|
|
49
|
+
///
|
|
50
|
+
/// `Publishers.MakeConnectable` is a `ConnectablePublisher`, which allows you to
|
|
51
|
+
/// perform configuration before publishing any elements. Call `connect()` on this
|
|
52
|
+
/// publisher when you want to attach to its upstream publisher and start producing
|
|
53
|
+
/// elements.
|
|
54
|
+
///
|
|
55
|
+
/// Use the `makeConnectable()` operator to wrap an upstream publisher with
|
|
56
|
+
/// an instance of this publisher.
|
|
57
|
+
public struct MakeConnectable<Upstream: Publisher>: ConnectablePublisher {
|
|
58
|
+
|
|
59
|
+
public typealias Output = Upstream.Output
|
|
60
|
+
|
|
61
|
+
public typealias Failure = Upstream.Failure
|
|
62
|
+
|
|
63
|
+
private let inner: Multicast<Upstream, PassthroughSubject<Output, Failure>>
|
|
64
|
+
|
|
65
|
+
/// Creates a connectable publisher, attached to the provide upstream publisher.
|
|
66
|
+
///
|
|
67
|
+
/// - Parameter upstream: The publisher from which to receive elements.
|
|
68
|
+
public init(upstream: Upstream) {
|
|
69
|
+
inner = upstream.multicast(subject: .init())
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
73
|
+
where Downstream.Failure == Failure, Downstream.Input == Output
|
|
74
|
+
{
|
|
75
|
+
inner.subscribe(subscriber)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
public func connect() -> Cancellable {
|
|
79
|
+
return inner.connect()
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Publishers.Map.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Anton Nazarov on 25.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Publisher {
|
|
9
|
+
|
|
10
|
+
/// Transforms all elements from the upstream publisher with a provided closure.
|
|
11
|
+
///
|
|
12
|
+
/// OpenCombine’s `map(_:)` operator performs a function similar to that of `map(_:)`
|
|
13
|
+
/// in the Swift standard library: it uses a closure to transform each element it
|
|
14
|
+
/// receives from the upstream publisher. You use `map(_:)` to transform from one kind
|
|
15
|
+
/// of element to another.
|
|
16
|
+
///
|
|
17
|
+
/// The following example uses an array of numbers as the source for a collection
|
|
18
|
+
/// based publisher. A `map(_:)` operator consumes each integer from the publisher and
|
|
19
|
+
/// uses a dictionary to transform it from its Arabic numeral to a Roman equivalent,
|
|
20
|
+
/// as a `String`.
|
|
21
|
+
/// If the `map(_:)`’s closure fails to look up a Roman numeral, it returns the string
|
|
22
|
+
/// `(unknown)`.
|
|
23
|
+
///
|
|
24
|
+
/// let numbers = [5, 4, 3, 2, 1, 0]
|
|
25
|
+
/// let romanNumeralDict: [Int : String] =
|
|
26
|
+
/// [1:"I", 2:"II", 3:"III", 4:"IV", 5:"V"]
|
|
27
|
+
/// cancellable = numbers.publisher
|
|
28
|
+
/// .map { romanNumeralDict[$0] ?? "(unknown)" }
|
|
29
|
+
/// .sink { print("\($0)", terminator: " ") }
|
|
30
|
+
///
|
|
31
|
+
/// // Prints: "V IV III II I (unknown)"
|
|
32
|
+
///
|
|
33
|
+
/// If your closure can throw an error, use OpenCombine’s `tryMap(_:)` operator
|
|
34
|
+
/// instead.
|
|
35
|
+
///
|
|
36
|
+
/// - Parameter transform: A closure that takes one element as its parameter and
|
|
37
|
+
/// returns a new element.
|
|
38
|
+
/// - Returns: A publisher that uses the provided closure to map elements from
|
|
39
|
+
/// the upstream publisher to new elements that it then publishes.
|
|
40
|
+
public func map<Result>(
|
|
41
|
+
_ transform: @escaping (Output) -> Result
|
|
42
|
+
) -> Publishers.Map<Self, Result> {
|
|
43
|
+
return Publishers.Map(upstream: self, transform: transform)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/// Transforms all elements from the upstream publisher with a provided error-throwing
|
|
47
|
+
/// closure.
|
|
48
|
+
///
|
|
49
|
+
/// OpenCombine’s `tryMap(_:)` operator performs a function similar to that of
|
|
50
|
+
/// `map(_:)` in the Swift standard library: it uses a closure to transform each
|
|
51
|
+
/// element it receives from the upstream publisher. You use `tryMap(_:)` to transform
|
|
52
|
+
/// from one kind of element to another, and to terminate publishing when the map’s
|
|
53
|
+
/// closure throws an error.
|
|
54
|
+
///
|
|
55
|
+
/// The following example uses an array of numbers as the source for a collection
|
|
56
|
+
/// based publisher. A `tryMap(_:)` operator consumes each integer from the publisher
|
|
57
|
+
/// and uses a dictionary to transform it from its Arabic numeral to a Roman
|
|
58
|
+
/// equivalent, as a `String`.
|
|
59
|
+
/// If the `tryMap(_:)`’s closure fails to look up a Roman numeral, it throws
|
|
60
|
+
/// an error. The `tryMap(_:)` operator catches this error and terminates publishing,
|
|
61
|
+
/// sending a `Subscribers.Completion.failure(_:)` that wraps the error.
|
|
62
|
+
///
|
|
63
|
+
/// struct ParseError: Error {}
|
|
64
|
+
/// func romanNumeral(from:Int) throws -> String {
|
|
65
|
+
/// let romanNumeralDict: [Int : String] =
|
|
66
|
+
/// [1:"I", 2:"II", 3:"III", 4:"IV", 5:"V"]
|
|
67
|
+
/// guard let numeral = romanNumeralDict[from] else {
|
|
68
|
+
/// throw ParseError()
|
|
69
|
+
/// }
|
|
70
|
+
/// return numeral
|
|
71
|
+
/// }
|
|
72
|
+
/// let numbers = [5, 4, 3, 2, 1, 0]
|
|
73
|
+
/// cancellable = numbers.publisher
|
|
74
|
+
/// .tryMap { try romanNumeral(from: $0) }
|
|
75
|
+
/// .sink(
|
|
76
|
+
/// receiveCompletion: { print ("completion: \($0)") },
|
|
77
|
+
/// receiveValue: { print ("\($0)", terminator: " ") }
|
|
78
|
+
/// )
|
|
79
|
+
///
|
|
80
|
+
/// // Prints: "V IV III II I completion: failure(ParseError())"
|
|
81
|
+
///
|
|
82
|
+
/// If your closure doesn’t throw, use `map(_:)` instead.
|
|
83
|
+
///
|
|
84
|
+
/// - Parameter transform: A closure that takes one element as its parameter and
|
|
85
|
+
/// returns a new element. If the closure throws an error, the publisher fails with
|
|
86
|
+
/// the thrown error.
|
|
87
|
+
/// - Returns: A publisher that uses the provided closure to map elements from
|
|
88
|
+
/// the upstream publisher to new elements that it then publishes.
|
|
89
|
+
public func tryMap<Result>(
|
|
90
|
+
_ transform: @escaping (Output) throws -> Result
|
|
91
|
+
) -> Publishers.TryMap<Self, Result> {
|
|
92
|
+
return Publishers.TryMap(upstream: self, transform: transform)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/// Replaces `nil` elements in the stream with the provided element.
|
|
96
|
+
///
|
|
97
|
+
/// The `replaceNil(with:)` operator enables replacement of `nil` values in a stream
|
|
98
|
+
/// with a substitute value. In the example below, a collection publisher contains
|
|
99
|
+
/// a `nil` value. The `replaceNil(with:)` operator replaces this with `0.0`.
|
|
100
|
+
///
|
|
101
|
+
/// let numbers: [Double?] = [1.0, 2.0, nil, 3.0]
|
|
102
|
+
/// numbers.publisher
|
|
103
|
+
/// .replaceNil(with: 0.0)
|
|
104
|
+
/// .sink { print("\($0)", terminator: " ") }
|
|
105
|
+
///
|
|
106
|
+
/// // Prints: "Optional(1.0) Optional(2.0) Optional(0.0) Optional(3.0)"
|
|
107
|
+
///
|
|
108
|
+
/// - Parameter output: The element to use when replacing `nil`.
|
|
109
|
+
/// - Returns: A publisher that replaces `nil` elements from the upstream publisher
|
|
110
|
+
/// with the provided element.
|
|
111
|
+
public func replaceNil<ElementOfResult>(
|
|
112
|
+
with output: ElementOfResult
|
|
113
|
+
) -> Publishers.Map<Self, ElementOfResult>
|
|
114
|
+
where Output == ElementOfResult?
|
|
115
|
+
{
|
|
116
|
+
return Publishers.Map(upstream: self) { $0 ?? output }
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
extension Publishers {
|
|
121
|
+
/// A publisher that transforms all elements from the upstream publisher with
|
|
122
|
+
/// a provided closure.
|
|
123
|
+
public struct Map<Upstream: Publisher, Output>: Publisher {
|
|
124
|
+
|
|
125
|
+
public typealias Failure = Upstream.Failure
|
|
126
|
+
|
|
127
|
+
/// The publisher from which this publisher receives elements.
|
|
128
|
+
public let upstream: Upstream
|
|
129
|
+
|
|
130
|
+
/// The closure that transforms elements from the upstream publisher.
|
|
131
|
+
public let transform: (Upstream.Output) -> Output
|
|
132
|
+
|
|
133
|
+
public init(upstream: Upstream,
|
|
134
|
+
transform: @escaping (Upstream.Output) -> Output) {
|
|
135
|
+
self.upstream = upstream
|
|
136
|
+
self.transform = transform
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
140
|
+
where Output == Downstream.Input, Downstream.Failure == Upstream.Failure
|
|
141
|
+
{
|
|
142
|
+
upstream.subscribe(Inner(downstream: subscriber, map: transform))
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/// A publisher that transforms all elements from the upstream publisher
|
|
147
|
+
/// with a provided error-throwing closure.
|
|
148
|
+
public struct TryMap<Upstream: Publisher, Output>: Publisher {
|
|
149
|
+
|
|
150
|
+
public typealias Failure = Error
|
|
151
|
+
|
|
152
|
+
/// The publisher from which this publisher receives elements.
|
|
153
|
+
public let upstream: Upstream
|
|
154
|
+
|
|
155
|
+
/// The error-throwing closure that transforms elements from
|
|
156
|
+
/// the upstream publisher.
|
|
157
|
+
public let transform: (Upstream.Output) throws -> Output
|
|
158
|
+
|
|
159
|
+
public init(upstream: Upstream,
|
|
160
|
+
transform: @escaping (Upstream.Output) throws -> Output) {
|
|
161
|
+
self.upstream = upstream
|
|
162
|
+
self.transform = transform
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
extension Publishers.Map {
|
|
168
|
+
|
|
169
|
+
public func map<Result>(
|
|
170
|
+
_ transform: @escaping (Output) -> Result
|
|
171
|
+
) -> Publishers.Map<Upstream, Result> {
|
|
172
|
+
return .init(upstream: upstream) { transform(self.transform($0)) }
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
public func tryMap<Result>(
|
|
176
|
+
_ transform: @escaping (Output) throws -> Result
|
|
177
|
+
) -> Publishers.TryMap<Upstream, Result> {
|
|
178
|
+
return .init(upstream: upstream) { try transform(self.transform($0)) }
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
extension Publishers.TryMap {
|
|
183
|
+
|
|
184
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
185
|
+
where Output == Downstream.Input, Downstream.Failure == Error
|
|
186
|
+
{
|
|
187
|
+
upstream.subscribe(Inner(downstream: subscriber, map: transform))
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
public func map<Result>(
|
|
191
|
+
_ transform: @escaping (Output) -> Result
|
|
192
|
+
) -> Publishers.TryMap<Upstream, Result> {
|
|
193
|
+
return .init(upstream: upstream) { try transform(self.transform($0)) }
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
public func tryMap<Result>(
|
|
197
|
+
_ transform: @escaping (Output) throws -> Result
|
|
198
|
+
) -> Publishers.TryMap<Upstream, Result> {
|
|
199
|
+
return .init(upstream: upstream) { try transform(self.transform($0)) }
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
extension Publishers.Map {
|
|
204
|
+
|
|
205
|
+
private struct Inner<Downstream: Subscriber>
|
|
206
|
+
: Subscriber,
|
|
207
|
+
CustomStringConvertible,
|
|
208
|
+
CustomReflectable,
|
|
209
|
+
CustomPlaygroundDisplayConvertible
|
|
210
|
+
where Downstream.Input == Output, Downstream.Failure == Upstream.Failure
|
|
211
|
+
{
|
|
212
|
+
typealias Input = Upstream.Output
|
|
213
|
+
|
|
214
|
+
typealias Failure = Upstream.Failure
|
|
215
|
+
|
|
216
|
+
private let downstream: Downstream
|
|
217
|
+
|
|
218
|
+
private let map: (Input) -> Output
|
|
219
|
+
|
|
220
|
+
let combineIdentifier = CombineIdentifier()
|
|
221
|
+
|
|
222
|
+
fileprivate init(downstream: Downstream, map: @escaping (Input) -> Output) {
|
|
223
|
+
self.downstream = downstream
|
|
224
|
+
self.map = map
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
func receive(subscription: Subscription) {
|
|
228
|
+
downstream.receive(subscription: subscription)
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
func receive(_ input: Input) -> Subscribers.Demand {
|
|
232
|
+
return downstream.receive(map(input))
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
236
|
+
downstream.receive(completion: completion)
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
var description: String { return "Map" }
|
|
240
|
+
|
|
241
|
+
var customMirror: Mirror {
|
|
242
|
+
return Mirror(self, children: EmptyCollection())
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
var playgroundDescription: Any { return description }
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
extension Publishers.TryMap {
|
|
250
|
+
|
|
251
|
+
private final class Inner<Downstream: Subscriber>
|
|
252
|
+
: Subscriber,
|
|
253
|
+
Subscription,
|
|
254
|
+
CustomStringConvertible,
|
|
255
|
+
CustomReflectable,
|
|
256
|
+
CustomPlaygroundDisplayConvertible
|
|
257
|
+
where Downstream.Input == Output, Downstream.Failure == Error
|
|
258
|
+
{
|
|
259
|
+
// NOTE: This class has been audited for thread-safety
|
|
260
|
+
|
|
261
|
+
typealias Input = Upstream.Output
|
|
262
|
+
|
|
263
|
+
typealias Failure = Upstream.Failure
|
|
264
|
+
|
|
265
|
+
private let downstream: Downstream
|
|
266
|
+
|
|
267
|
+
private let map: (Input) throws -> Output
|
|
268
|
+
|
|
269
|
+
private var status = SubscriptionStatus.awaitingSubscription
|
|
270
|
+
|
|
271
|
+
private let lock = UnfairLock.allocate()
|
|
272
|
+
|
|
273
|
+
let combineIdentifier = CombineIdentifier()
|
|
274
|
+
|
|
275
|
+
fileprivate init(downstream: Downstream,
|
|
276
|
+
map: @escaping (Input) throws -> Output) {
|
|
277
|
+
self.downstream = downstream
|
|
278
|
+
self.map = map
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
deinit {
|
|
282
|
+
lock.deallocate()
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
func receive(subscription: Subscription) {
|
|
286
|
+
lock.lock()
|
|
287
|
+
guard case .awaitingSubscription = status else {
|
|
288
|
+
lock.unlock()
|
|
289
|
+
subscription.cancel()
|
|
290
|
+
return
|
|
291
|
+
}
|
|
292
|
+
status = .subscribed(subscription)
|
|
293
|
+
lock.unlock()
|
|
294
|
+
downstream.receive(subscription: self)
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
func receive(_ input: Input) -> Subscribers.Demand {
|
|
298
|
+
do {
|
|
299
|
+
return try downstream.receive(map(input))
|
|
300
|
+
} catch {
|
|
301
|
+
lock.lock()
|
|
302
|
+
let subscription = status.subscription
|
|
303
|
+
status = .terminal
|
|
304
|
+
lock.unlock()
|
|
305
|
+
subscription?.cancel()
|
|
306
|
+
downstream.receive(completion: .failure(error))
|
|
307
|
+
return .none
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
312
|
+
lock.lock()
|
|
313
|
+
guard case .subscribed = status else {
|
|
314
|
+
lock.unlock()
|
|
315
|
+
return
|
|
316
|
+
}
|
|
317
|
+
status = .terminal
|
|
318
|
+
lock.unlock()
|
|
319
|
+
downstream.receive(completion: completion.eraseError())
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
func request(_ demand: Subscribers.Demand) {
|
|
323
|
+
lock.lock()
|
|
324
|
+
guard case let .subscribed(subscription) = status else {
|
|
325
|
+
lock.unlock()
|
|
326
|
+
return
|
|
327
|
+
}
|
|
328
|
+
lock.unlock()
|
|
329
|
+
subscription.request(demand)
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
func cancel() {
|
|
333
|
+
lock.lock()
|
|
334
|
+
guard case let .subscribed(subscription) = status else {
|
|
335
|
+
lock.unlock()
|
|
336
|
+
return
|
|
337
|
+
}
|
|
338
|
+
status = .terminal
|
|
339
|
+
lock.unlock()
|
|
340
|
+
subscription.cancel()
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
var description: String { return "TryMap" }
|
|
344
|
+
|
|
345
|
+
var customMirror: Mirror {
|
|
346
|
+
return Mirror(self, children: EmptyCollection())
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
var playgroundDescription: Any { return description }
|
|
350
|
+
}
|
|
351
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Publishers.MapError.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Joseph Spadafora on 7/4/19.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Publishers {
|
|
9
|
+
|
|
10
|
+
/// A publisher that converts any failure from the
|
|
11
|
+
/// upstream publisher into a new error.
|
|
12
|
+
public struct MapError<Upstream: Publisher, Failure: Error>: Publisher {
|
|
13
|
+
|
|
14
|
+
/// The kind of values published by this publisher.
|
|
15
|
+
public typealias Output = Upstream.Output
|
|
16
|
+
|
|
17
|
+
/// The publisher from which this publisher receives elements.
|
|
18
|
+
public let upstream: Upstream
|
|
19
|
+
|
|
20
|
+
/// The closure that converts the upstream failure into a new error.
|
|
21
|
+
public let transform: (Upstream.Failure) -> Failure
|
|
22
|
+
|
|
23
|
+
public init(upstream: Upstream, _ map: @escaping (Upstream.Failure) -> Failure) {
|
|
24
|
+
self.upstream = upstream
|
|
25
|
+
self.transform = map
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/// This function is called to attach the specified `Subscriber`
|
|
29
|
+
/// to this `Publisher` by `subscribe(_:)`
|
|
30
|
+
///
|
|
31
|
+
/// - SeeAlso: `subscribe(_:)`
|
|
32
|
+
/// - Parameters:
|
|
33
|
+
/// - subscriber: The subscriber to attach to this `Publisher`.
|
|
34
|
+
/// once attached it can begin to receive values.
|
|
35
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
36
|
+
where Failure == Downstream.Failure,
|
|
37
|
+
Upstream.Output == Downstream.Input
|
|
38
|
+
{
|
|
39
|
+
upstream.subscribe(Inner(downstream: subscriber, map: transform))
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
extension Publisher {
|
|
45
|
+
|
|
46
|
+
/// Converts any failure from the upstream publisher into a new error.
|
|
47
|
+
///
|
|
48
|
+
/// Use the `mapError(_:)` operator when you need to replace one error type with
|
|
49
|
+
/// another, or where a downstream operator needs the error types of its inputs to
|
|
50
|
+
/// match.
|
|
51
|
+
///
|
|
52
|
+
/// The following example uses a `tryMap(_:)` operator to divide `1` by each element
|
|
53
|
+
/// produced by a sequence publisher. When the publisher produces a `0`,
|
|
54
|
+
/// the `tryMap(_:)` fails with a `DivisionByZeroError`. The `mapError(_:)` operator
|
|
55
|
+
/// converts this into a `MyGenericError`.
|
|
56
|
+
///
|
|
57
|
+
/// struct DivisionByZeroError: Error {}
|
|
58
|
+
/// struct MyGenericError: Error { var wrappedError: Error }
|
|
59
|
+
///
|
|
60
|
+
/// func myDivide(_ dividend: Double, _ divisor: Double) throws -> Double {
|
|
61
|
+
/// guard divisor != 0 else { throw DivisionByZeroError() }
|
|
62
|
+
/// return dividend / divisor
|
|
63
|
+
/// }
|
|
64
|
+
///
|
|
65
|
+
/// let divisors: [Double] = [5, 4, 3, 2, 1, 0]
|
|
66
|
+
/// divisors.publisher
|
|
67
|
+
/// .tryMap { try myDivide(1, $0) }
|
|
68
|
+
/// .mapError { MyGenericError(wrappedError: $0) }
|
|
69
|
+
/// .sink(
|
|
70
|
+
/// receiveCompletion: { print ("completion: \($0)") ,
|
|
71
|
+
/// receiveValue: { print ("value: \($0)") }
|
|
72
|
+
/// )
|
|
73
|
+
///
|
|
74
|
+
/// // Prints:
|
|
75
|
+
/// // value: 0.2
|
|
76
|
+
/// // value: 0.25
|
|
77
|
+
/// // value: 0.3333333333333333
|
|
78
|
+
/// // value: 0.5
|
|
79
|
+
/// // value: 1.0
|
|
80
|
+
/// // completion: failure(MyGenericError(wrappedError: DivisionByZeroError()))"
|
|
81
|
+
///
|
|
82
|
+
/// - Parameter transform: A closure that takes the upstream failure as a parameter
|
|
83
|
+
/// and returns a new error for the publisher to terminate with.
|
|
84
|
+
/// - Returns: A publisher that replaces any upstream failure with a new error
|
|
85
|
+
/// produced by the `transform` closure.
|
|
86
|
+
public func mapError<NewFailure: Error>(
|
|
87
|
+
_ transform: @escaping (Failure) -> NewFailure
|
|
88
|
+
) -> Publishers.MapError<Self, NewFailure>
|
|
89
|
+
{
|
|
90
|
+
return Publishers.MapError(upstream: self, transform)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
extension Publishers.MapError {
|
|
95
|
+
|
|
96
|
+
private struct Inner<Downstream: Subscriber>
|
|
97
|
+
: Subscriber,
|
|
98
|
+
CustomStringConvertible,
|
|
99
|
+
CustomReflectable,
|
|
100
|
+
CustomPlaygroundDisplayConvertible
|
|
101
|
+
where Upstream.Output == Downstream.Input
|
|
102
|
+
{
|
|
103
|
+
typealias Input = Upstream.Output
|
|
104
|
+
typealias Failure = Upstream.Failure
|
|
105
|
+
|
|
106
|
+
private let downstream: Downstream
|
|
107
|
+
private let map: (Upstream.Failure) -> Downstream.Failure
|
|
108
|
+
|
|
109
|
+
let combineIdentifier = CombineIdentifier()
|
|
110
|
+
|
|
111
|
+
var description: String { return "MapError" }
|
|
112
|
+
|
|
113
|
+
var customMirror: Mirror { return Mirror(self, children: EmptyCollection()) }
|
|
114
|
+
|
|
115
|
+
var playgroundDescription: Any { return description }
|
|
116
|
+
|
|
117
|
+
init(downstream: Downstream,
|
|
118
|
+
map: @escaping (Upstream.Failure) -> Downstream.Failure) {
|
|
119
|
+
self.downstream = downstream
|
|
120
|
+
self.map = map
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
func receive(subscription: Subscription) {
|
|
124
|
+
downstream.receive(subscription: subscription)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
func receive(_ input: Input) -> Subscribers.Demand {
|
|
128
|
+
return downstream.receive(input)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
132
|
+
switch completion {
|
|
133
|
+
case .finished:
|
|
134
|
+
downstream.receive(completion: .finished)
|
|
135
|
+
case .failure(let error):
|
|
136
|
+
downstream.receive(completion: .failure(map(error)))
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|