@swiftbrowser/swift 0.1.0 → 0.3.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 +68 -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 +125 -10
- package/Sources/SwiftUI/API/Entry.swift +8 -0
- package/Sources/SwiftUI/API/Environment.swift +100 -9
- package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
- package/Sources/SwiftUI/API/Focus.swift +11 -3
- package/Sources/SwiftUI/API/Gauge.swift +26 -10
- 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 +71 -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 +88 -12
- 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 +14 -4
- 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 +168 -39
- 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 +86 -0
- package/Sources/SwiftUI/API/Shape.swift +214 -0
- package/Sources/SwiftUI/API/ShapeStyle.swift +187 -8
- 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 +46 -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 +524 -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 +41 -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,378 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Publishers.DropWhile.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 16.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Publisher {
|
|
9
|
+
|
|
10
|
+
/// Omits elements from the upstream publisher until a given closure returns false,
|
|
11
|
+
/// before republishing all remaining elements.
|
|
12
|
+
///
|
|
13
|
+
/// Use `drop(while:)` to omit elements from an upstream publisher until the element
|
|
14
|
+
/// received meets a condition you specify.
|
|
15
|
+
///
|
|
16
|
+
/// In the example below, the operator omits all elements in the stream until
|
|
17
|
+
/// the first element arrives that’s a positive integer, after which the operator
|
|
18
|
+
/// publishes all remaining elements:
|
|
19
|
+
///
|
|
20
|
+
/// let numbers = [-62, -1, 0, 10, 0, 22, 41, -1, 5]
|
|
21
|
+
/// cancellable = numbers.publisher
|
|
22
|
+
/// .drop { $0 <= 0 }
|
|
23
|
+
/// .sink { print("\($0)") }
|
|
24
|
+
///
|
|
25
|
+
/// // Prints: "10 0 22 41 -1 5"
|
|
26
|
+
///
|
|
27
|
+
///
|
|
28
|
+
/// - Parameter predicate: A closure that takes an element as a parameter and returns
|
|
29
|
+
/// a Boolean value indicating whether to drop the element from the publisher’s
|
|
30
|
+
/// output.
|
|
31
|
+
/// - Returns: A publisher that skips over elements until the provided closure returns
|
|
32
|
+
/// `false`.
|
|
33
|
+
public func drop(
|
|
34
|
+
while predicate: @escaping (Output) -> Bool
|
|
35
|
+
) -> Publishers.DropWhile<Self> {
|
|
36
|
+
return .init(upstream: self, predicate: predicate)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/// Omits elements from the upstream publisher until an error-throwing closure returns
|
|
40
|
+
/// false, before republishing all remaining elements.
|
|
41
|
+
///
|
|
42
|
+
/// Use `Publisher/tryDrop(while:)` to omit elements from an upstream until
|
|
43
|
+
/// an error-throwing closure you provide returns false, after which the remaining
|
|
44
|
+
/// items in the stream are published. If the closure throws, no elements are emitted
|
|
45
|
+
/// and the publisher fails with an error.
|
|
46
|
+
///
|
|
47
|
+
/// In the example below, elements are ignored until `-1` is encountered in the stream
|
|
48
|
+
/// and the closure returns `false`. The publisher then republishes the remaining
|
|
49
|
+
/// elements and finishes normally. Conversely, if the `guard` value in the closure
|
|
50
|
+
/// had been encountered, the closure would throw and the publisher would fail with
|
|
51
|
+
/// an error.
|
|
52
|
+
///
|
|
53
|
+
/// struct RangeError: Error {}
|
|
54
|
+
/// var numbers = [1, 2, 3, 4, 5, 6, -1, 7, 8, 9, 10]
|
|
55
|
+
/// let range: CountableClosedRange<Int> = (1...100)
|
|
56
|
+
/// cancellable = numbers.publisher
|
|
57
|
+
/// .tryDrop {
|
|
58
|
+
/// guard $0 != 0 else { throw RangeError() }
|
|
59
|
+
/// return range.contains($0)
|
|
60
|
+
/// }
|
|
61
|
+
/// .sink(
|
|
62
|
+
/// receiveCompletion: { print ("completion: \($0)") },
|
|
63
|
+
/// receiveValue: { print ("value: \($0)") }
|
|
64
|
+
/// )
|
|
65
|
+
///
|
|
66
|
+
/// // Prints: "-1 7 8 9 10 completion: finished"
|
|
67
|
+
/// // If instead numbers was [1, 2, 3, 4, 5, 6, 0, -1, 7, 8, 9, 10],
|
|
68
|
+
/// // tryDrop(while:) would fail with a RangeError.
|
|
69
|
+
///
|
|
70
|
+
/// - Parameter predicate: A closure that takes an element as a parameter and returns
|
|
71
|
+
/// a Boolean value indicating whether to drop the element from the publisher’s
|
|
72
|
+
/// output.
|
|
73
|
+
/// - Returns: A publisher that skips over elements until the provided closure returns
|
|
74
|
+
/// `false`, and then republishes all remaining elements. If the predicate closure
|
|
75
|
+
/// throws, the publisher fails with an error.
|
|
76
|
+
public func tryDrop(
|
|
77
|
+
while predicate: @escaping (Output) throws -> Bool
|
|
78
|
+
) -> Publishers.TryDropWhile<Self> {
|
|
79
|
+
return .init(upstream: self, predicate: predicate)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
extension Publishers {
|
|
84
|
+
|
|
85
|
+
/// A publisher that omits elements from an upstream publisher until a given closure
|
|
86
|
+
/// returns false.
|
|
87
|
+
public struct DropWhile<Upstream: Publisher>: Publisher {
|
|
88
|
+
|
|
89
|
+
public typealias Output = Upstream.Output
|
|
90
|
+
|
|
91
|
+
public typealias Failure = Upstream.Failure
|
|
92
|
+
|
|
93
|
+
/// The publisher from which this publisher receives elements.
|
|
94
|
+
public let upstream: Upstream
|
|
95
|
+
|
|
96
|
+
/// The closure that indicates whether to drop the element.
|
|
97
|
+
public let predicate: (Output) -> Bool
|
|
98
|
+
|
|
99
|
+
public init(upstream: Upstream, predicate: @escaping (Output) -> Bool) {
|
|
100
|
+
self.upstream = upstream
|
|
101
|
+
self.predicate = predicate
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
105
|
+
where Failure == Downstream.Failure, Output == Downstream.Input
|
|
106
|
+
{
|
|
107
|
+
upstream.subscribe(Inner(downstream: subscriber, predicate: predicate))
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/// A publisher that omits elements from an upstream publisher until a given
|
|
112
|
+
/// error-throwing closure returns false.
|
|
113
|
+
public struct TryDropWhile<Upstream: Publisher>: Publisher {
|
|
114
|
+
|
|
115
|
+
public typealias Output = Upstream.Output
|
|
116
|
+
|
|
117
|
+
public typealias Failure = Error
|
|
118
|
+
|
|
119
|
+
/// The publisher from which this publisher receives elements.
|
|
120
|
+
public let upstream: Upstream
|
|
121
|
+
|
|
122
|
+
/// The error-throwing closure that indicates whether to drop the element.
|
|
123
|
+
public let predicate: (Upstream.Output) throws -> Bool
|
|
124
|
+
|
|
125
|
+
public init(upstream: Upstream, predicate: @escaping (Output) throws -> Bool) {
|
|
126
|
+
self.upstream = upstream
|
|
127
|
+
self.predicate = predicate
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
131
|
+
where Output == Downstream.Input, Downstream.Failure == Error
|
|
132
|
+
{
|
|
133
|
+
upstream.subscribe(Inner(downstream: subscriber, predicate: predicate))
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
extension Publishers.DropWhile {
|
|
139
|
+
private final class Inner<Downstream: Subscriber>
|
|
140
|
+
: Subscriber,
|
|
141
|
+
Subscription,
|
|
142
|
+
CustomStringConvertible,
|
|
143
|
+
CustomReflectable,
|
|
144
|
+
CustomPlaygroundDisplayConvertible
|
|
145
|
+
where Upstream.Output == Downstream.Input, Downstream.Failure == Upstream.Failure
|
|
146
|
+
{
|
|
147
|
+
// NOTE: This class has been audited for thread safety.
|
|
148
|
+
|
|
149
|
+
typealias Input = Upstream.Output
|
|
150
|
+
|
|
151
|
+
typealias Failure = Upstream.Failure
|
|
152
|
+
|
|
153
|
+
private var status = SubscriptionStatus.awaitingSubscription
|
|
154
|
+
|
|
155
|
+
private let downstream: Downstream
|
|
156
|
+
|
|
157
|
+
private var predicate: ((Input) -> Bool)?
|
|
158
|
+
|
|
159
|
+
private var dropping = true
|
|
160
|
+
|
|
161
|
+
private let lock = UnfairLock.allocate()
|
|
162
|
+
|
|
163
|
+
fileprivate init(downstream: Downstream, predicate: @escaping (Input) -> Bool) {
|
|
164
|
+
self.downstream = downstream
|
|
165
|
+
self.predicate = predicate
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
deinit {
|
|
169
|
+
lock.deallocate()
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
func receive(subscription: Subscription) {
|
|
173
|
+
lock.lock()
|
|
174
|
+
guard case .awaitingSubscription = status else {
|
|
175
|
+
lock.unlock()
|
|
176
|
+
subscription.cancel()
|
|
177
|
+
return
|
|
178
|
+
}
|
|
179
|
+
status = .subscribed(subscription)
|
|
180
|
+
lock.unlock()
|
|
181
|
+
downstream.receive(subscription: self)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
func receive(_ input: Input) -> Subscribers.Demand {
|
|
185
|
+
lock.lock()
|
|
186
|
+
guard case .subscribed = status, let shouldDrop = predicate else {
|
|
187
|
+
lock.unlock()
|
|
188
|
+
return .none
|
|
189
|
+
}
|
|
190
|
+
let dropping = self.dropping
|
|
191
|
+
lock.unlock()
|
|
192
|
+
|
|
193
|
+
if dropping {
|
|
194
|
+
if shouldDrop(input) {
|
|
195
|
+
return .max(1)
|
|
196
|
+
} else {
|
|
197
|
+
lock.lock()
|
|
198
|
+
self.dropping = false
|
|
199
|
+
lock.unlock()
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return downstream.receive(input)
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
207
|
+
lock.lock()
|
|
208
|
+
guard case .subscribed = status else {
|
|
209
|
+
lock.unlock()
|
|
210
|
+
return
|
|
211
|
+
}
|
|
212
|
+
status = .terminal
|
|
213
|
+
predicate = nil
|
|
214
|
+
lock.unlock()
|
|
215
|
+
downstream.receive(completion: completion)
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
func request(_ demand: Subscribers.Demand) {
|
|
219
|
+
demand.assertNonZero()
|
|
220
|
+
lock.lock()
|
|
221
|
+
guard case let .subscribed(subscription) = status else {
|
|
222
|
+
lock.unlock()
|
|
223
|
+
return
|
|
224
|
+
}
|
|
225
|
+
lock.unlock()
|
|
226
|
+
subscription.request(demand)
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
func cancel() {
|
|
230
|
+
lock.lock()
|
|
231
|
+
guard case let .subscribed(subscription) = status else {
|
|
232
|
+
lock.unlock()
|
|
233
|
+
return
|
|
234
|
+
}
|
|
235
|
+
status = .terminal
|
|
236
|
+
predicate = nil
|
|
237
|
+
lock.unlock()
|
|
238
|
+
subscription.cancel()
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
var description: String { return "DropWhile" }
|
|
242
|
+
|
|
243
|
+
var customMirror: Mirror { return Mirror(self, children: EmptyCollection()) }
|
|
244
|
+
|
|
245
|
+
var playgroundDescription: Any { return description }
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
extension Publishers.TryDropWhile {
|
|
250
|
+
private final class Inner<Downstream: Subscriber>
|
|
251
|
+
: Subscriber,
|
|
252
|
+
Subscription,
|
|
253
|
+
CustomStringConvertible,
|
|
254
|
+
CustomReflectable,
|
|
255
|
+
CustomPlaygroundDisplayConvertible
|
|
256
|
+
where Upstream.Output == Downstream.Input, Downstream.Failure == Error
|
|
257
|
+
{
|
|
258
|
+
// NOTE: This class has been audited for thread safety.
|
|
259
|
+
|
|
260
|
+
typealias Input = Upstream.Output
|
|
261
|
+
|
|
262
|
+
typealias Failure = Upstream.Failure
|
|
263
|
+
|
|
264
|
+
private var status = SubscriptionStatus.awaitingSubscription
|
|
265
|
+
|
|
266
|
+
private let downstream: Downstream
|
|
267
|
+
|
|
268
|
+
private var predicate: ((Input) throws -> Bool)?
|
|
269
|
+
|
|
270
|
+
private var dropping = true
|
|
271
|
+
|
|
272
|
+
private var finished = false
|
|
273
|
+
|
|
274
|
+
private let lock = UnfairLock.allocate()
|
|
275
|
+
|
|
276
|
+
fileprivate init(downstream: Downstream,
|
|
277
|
+
predicate: @escaping (Input) throws -> Bool) {
|
|
278
|
+
self.downstream = downstream
|
|
279
|
+
self.predicate = predicate
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
deinit {
|
|
283
|
+
lock.deallocate()
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
func receive(subscription: Subscription) {
|
|
287
|
+
lock.lock()
|
|
288
|
+
guard case .awaitingSubscription = status else {
|
|
289
|
+
lock.unlock()
|
|
290
|
+
subscription.cancel()
|
|
291
|
+
return
|
|
292
|
+
}
|
|
293
|
+
status = .subscribed(subscription)
|
|
294
|
+
lock.unlock()
|
|
295
|
+
downstream.receive(subscription: self)
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
func receive(_ input: Upstream.Output) -> Subscribers.Demand {
|
|
299
|
+
lock.lock()
|
|
300
|
+
guard case let .subscribed(subscription) = status,
|
|
301
|
+
let shouldDrop = predicate else {
|
|
302
|
+
lock.unlock()
|
|
303
|
+
return .none
|
|
304
|
+
}
|
|
305
|
+
let dropping = self.dropping
|
|
306
|
+
lock.unlock()
|
|
307
|
+
|
|
308
|
+
if dropping {
|
|
309
|
+
do {
|
|
310
|
+
if try shouldDrop(input) {
|
|
311
|
+
return .max(1)
|
|
312
|
+
} else {
|
|
313
|
+
lock.lock()
|
|
314
|
+
self.dropping = false
|
|
315
|
+
lock.unlock()
|
|
316
|
+
}
|
|
317
|
+
} catch {
|
|
318
|
+
lock.lock()
|
|
319
|
+
status = .terminal
|
|
320
|
+
predicate = nil
|
|
321
|
+
finished = true
|
|
322
|
+
lock.unlock()
|
|
323
|
+
subscription.cancel()
|
|
324
|
+
downstream.receive(completion: .failure(error))
|
|
325
|
+
return .none
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
return downstream.receive(input)
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
333
|
+
lock.lock()
|
|
334
|
+
guard case .subscribed = status else {
|
|
335
|
+
lock.unlock()
|
|
336
|
+
return
|
|
337
|
+
}
|
|
338
|
+
status = .terminal
|
|
339
|
+
let wasFinished = finished
|
|
340
|
+
finished = true
|
|
341
|
+
lock.unlock()
|
|
342
|
+
|
|
343
|
+
if !wasFinished {
|
|
344
|
+
downstream.receive(completion: completion.eraseError())
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
func request(_ demand: Subscribers.Demand) {
|
|
349
|
+
demand.assertNonZero()
|
|
350
|
+
lock.lock()
|
|
351
|
+
guard case let .subscribed(subscription) = status else {
|
|
352
|
+
lock.unlock()
|
|
353
|
+
return
|
|
354
|
+
}
|
|
355
|
+
lock.unlock()
|
|
356
|
+
subscription.request(demand)
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
func cancel() {
|
|
360
|
+
lock.lock()
|
|
361
|
+
guard case let .subscribed(subscription) = status else {
|
|
362
|
+
lock.unlock()
|
|
363
|
+
return
|
|
364
|
+
}
|
|
365
|
+
status = .terminal
|
|
366
|
+
predicate = nil
|
|
367
|
+
finished = true
|
|
368
|
+
lock.unlock()
|
|
369
|
+
subscription.cancel()
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
var description: String { return "TryDropWhile" }
|
|
373
|
+
|
|
374
|
+
var customMirror: Mirror { return Mirror(self, children: EmptyCollection()) }
|
|
375
|
+
|
|
376
|
+
var playgroundDescription: Any { return description }
|
|
377
|
+
}
|
|
378
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Publishers.Filter.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Joseph Spadafora on 7/3/19.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Publisher {
|
|
9
|
+
|
|
10
|
+
/// Republishes all elements that match a provided closure.
|
|
11
|
+
///
|
|
12
|
+
/// OpenCombine’s `filter(_:)` operator performs an operation similar to that of
|
|
13
|
+
/// `filter(_:)` in the Swift Standard Library: it uses a closure to test each element
|
|
14
|
+
/// to determine whether to republish the element to the downstream subscriber.
|
|
15
|
+
///
|
|
16
|
+
/// The following example, uses a filter operation that receives an `Int` and only
|
|
17
|
+
/// republishes a value if it’s even.
|
|
18
|
+
///
|
|
19
|
+
/// let numbers: [Int] = [1, 2, 3, 4, 5]
|
|
20
|
+
/// cancellable = numbers.publisher
|
|
21
|
+
/// .filter { $0 % 2 == 0 }
|
|
22
|
+
/// .sink { print("\($0)", terminator: " ") }
|
|
23
|
+
///
|
|
24
|
+
/// // Prints: "2 4"
|
|
25
|
+
///
|
|
26
|
+
/// - Parameter isIncluded: A closure that takes one element and returns
|
|
27
|
+
/// a Boolean value indicating whether to republish the element.
|
|
28
|
+
/// - Returns: A publisher that republishes all elements that satisfy the closure.
|
|
29
|
+
public func filter(
|
|
30
|
+
_ isIncluded: @escaping (Output) -> Bool
|
|
31
|
+
) -> Publishers.Filter<Self> {
|
|
32
|
+
return Publishers.Filter(upstream: self, isIncluded: isIncluded)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/// Republishes all elements that match a provided error-throwing closure.
|
|
36
|
+
///
|
|
37
|
+
/// Use `tryFilter(_:)` to filter elements evaluated in an error-throwing closure.
|
|
38
|
+
/// If the `isIncluded` closure throws an error, the publisher fails with that error.
|
|
39
|
+
///
|
|
40
|
+
/// In the example below, `tryFilter(_:)` checks to see if the divisor provided by
|
|
41
|
+
/// the publisher is zero, and throws a `DivisionByZeroError` and then terminates
|
|
42
|
+
/// the publisher with the thrown error:
|
|
43
|
+
///
|
|
44
|
+
/// struct DivisionByZeroError: Error {}
|
|
45
|
+
///
|
|
46
|
+
/// let numbers: [Int] = [1, 2, 3, 4, 0, 5]
|
|
47
|
+
/// cancellable = numbers.publisher
|
|
48
|
+
/// .tryFilter {
|
|
49
|
+
/// if $0 == 0 {
|
|
50
|
+
/// throw DivisionByZeroError()
|
|
51
|
+
/// } else {
|
|
52
|
+
/// return $0 % 2 == 0
|
|
53
|
+
/// }
|
|
54
|
+
/// }
|
|
55
|
+
/// .sink(
|
|
56
|
+
/// receiveCompletion: { print ("\($0)") },
|
|
57
|
+
/// receiveValue: { print ("\($0)", terminator: " ") }
|
|
58
|
+
/// )
|
|
59
|
+
///
|
|
60
|
+
/// // Prints: "2 4 failure(DivisionByZeroError())".
|
|
61
|
+
///
|
|
62
|
+
/// - Parameter isIncluded: A closure that takes one element and returns a Boolean
|
|
63
|
+
/// value that indicated whether to republish the element or throws an error.
|
|
64
|
+
/// - Returns: A publisher that republishes all elements that satisfy the closure.
|
|
65
|
+
public func tryFilter(
|
|
66
|
+
_ isIncluded: @escaping (Output) throws -> Bool
|
|
67
|
+
) -> Publishers.TryFilter<Self> {
|
|
68
|
+
return Publishers.TryFilter(upstream: self, isIncluded: isIncluded)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
extension Publishers.Filter {
|
|
73
|
+
|
|
74
|
+
public func filter(
|
|
75
|
+
_ isIncluded: @escaping (Output) -> Bool
|
|
76
|
+
) -> Publishers.Filter<Upstream> {
|
|
77
|
+
return .init(upstream: upstream) { self.isIncluded($0) && isIncluded($0) }
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public func tryFilter(
|
|
81
|
+
_ isIncluded: @escaping (Output) throws -> Bool
|
|
82
|
+
) -> Publishers.TryFilter<Upstream> {
|
|
83
|
+
return .init(upstream: upstream) { try self.isIncluded($0) && isIncluded($0) }
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
extension Publishers.TryFilter {
|
|
88
|
+
|
|
89
|
+
public func filter(
|
|
90
|
+
_ isIncluded: @escaping (Output) -> Bool
|
|
91
|
+
) -> Publishers.TryFilter<Upstream> {
|
|
92
|
+
return .init(upstream: upstream) { try self.isIncluded($0) && isIncluded($0) }
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
public func tryFilter(
|
|
96
|
+
_ isIncluded: @escaping (Output) throws -> Bool
|
|
97
|
+
) -> Publishers.TryFilter<Upstream> {
|
|
98
|
+
return .init(upstream: upstream) { try self.isIncluded($0) && isIncluded($0) }
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
extension Publishers {
|
|
103
|
+
|
|
104
|
+
/// A publisher that republishes all elements that match a provided closure.
|
|
105
|
+
public struct Filter<Upstream: Publisher>: Publisher {
|
|
106
|
+
|
|
107
|
+
/// The kind of values published by this publisher.
|
|
108
|
+
public typealias Output = Upstream.Output
|
|
109
|
+
|
|
110
|
+
/// The kind of errors this publisher might publish.
|
|
111
|
+
///
|
|
112
|
+
/// Use `Never` if this `Publisher` does not publish errors.
|
|
113
|
+
public typealias Failure = Upstream.Failure
|
|
114
|
+
|
|
115
|
+
/// The publisher from which this publisher receives elements.
|
|
116
|
+
public let upstream: Upstream
|
|
117
|
+
|
|
118
|
+
/// A closure that indicates whether to republish an element.
|
|
119
|
+
public let isIncluded: (Upstream.Output) -> Bool
|
|
120
|
+
|
|
121
|
+
public init(upstream: Upstream, isIncluded: @escaping (Output) -> Bool) {
|
|
122
|
+
self.upstream = upstream
|
|
123
|
+
self.isIncluded = isIncluded
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/// This function is called to attach the specified `Subscriber`
|
|
127
|
+
/// to this `Publisher` by `subscribe(_:)`
|
|
128
|
+
///
|
|
129
|
+
/// - SeeAlso: `subscribe(_:)`
|
|
130
|
+
/// - Parameters:
|
|
131
|
+
/// - subscriber: The subscriber to attach to this `Publisher`.
|
|
132
|
+
/// once attached it can begin to receive values.
|
|
133
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
134
|
+
where Upstream.Failure == Downstream.Failure,
|
|
135
|
+
Upstream.Output == Downstream.Input
|
|
136
|
+
{
|
|
137
|
+
upstream.subscribe(Inner(downstream: subscriber, filter: isIncluded))
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/// A publisher that republishes all elements that match
|
|
142
|
+
/// a provided error-throwing closure.
|
|
143
|
+
public struct TryFilter<Upstream>: Publisher where Upstream: Publisher {
|
|
144
|
+
|
|
145
|
+
/// The kind of values published by this publisher.
|
|
146
|
+
public typealias Output = Upstream.Output
|
|
147
|
+
|
|
148
|
+
/// The kind of errors this publisher might publish.
|
|
149
|
+
///
|
|
150
|
+
/// Use `Never` if this `Publisher` does not publish errors.
|
|
151
|
+
public typealias Failure = Error
|
|
152
|
+
|
|
153
|
+
/// The publisher from which this publisher receives elements.
|
|
154
|
+
public let upstream: Upstream
|
|
155
|
+
|
|
156
|
+
/// A error-throwing closure that indicates whether to republish an element.
|
|
157
|
+
public let isIncluded: (Upstream.Output) throws -> Bool
|
|
158
|
+
|
|
159
|
+
public init(upstream: Upstream,
|
|
160
|
+
isIncluded: @escaping (Upstream.Output) throws -> Bool) {
|
|
161
|
+
self.upstream = upstream
|
|
162
|
+
self.isIncluded = isIncluded
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/// This function is called to attach the specified `Subscriber`
|
|
166
|
+
/// to this `Publisher` by `subscribe(_:)`
|
|
167
|
+
///
|
|
168
|
+
/// - SeeAlso: `subscribe(_:)`
|
|
169
|
+
/// - Parameters:
|
|
170
|
+
/// - subscriber: The subscriber to attach to this `Publisher`.
|
|
171
|
+
/// once attached it can begin to receive values.
|
|
172
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
173
|
+
where Upstream.Output == Downstream.Input,
|
|
174
|
+
Downstream.Failure == Failure
|
|
175
|
+
{
|
|
176
|
+
upstream.subscribe(Inner(downstream: subscriber, filter: isIncluded))
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
extension Publishers.Filter {
|
|
182
|
+
private struct Inner<Downstream: Subscriber>
|
|
183
|
+
: Subscriber,
|
|
184
|
+
CustomStringConvertible,
|
|
185
|
+
CustomReflectable,
|
|
186
|
+
CustomPlaygroundDisplayConvertible
|
|
187
|
+
where Upstream.Output == Downstream.Input, Upstream.Failure == Downstream.Failure
|
|
188
|
+
{
|
|
189
|
+
typealias Input = Upstream.Output
|
|
190
|
+
typealias Failure = Upstream.Failure
|
|
191
|
+
|
|
192
|
+
private let downstream: Downstream
|
|
193
|
+
private let filter: (Input) -> Bool
|
|
194
|
+
|
|
195
|
+
let combineIdentifier = CombineIdentifier()
|
|
196
|
+
|
|
197
|
+
init(downstream: Downstream, filter: @escaping (Input) -> Bool) {
|
|
198
|
+
self.downstream = downstream
|
|
199
|
+
self.filter = filter
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
func receive(subscription: Subscription) {
|
|
203
|
+
downstream.receive(subscription: subscription)
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
func receive(_ input: Input) -> Subscribers.Demand {
|
|
207
|
+
if filter(input) {
|
|
208
|
+
return downstream.receive(input)
|
|
209
|
+
}
|
|
210
|
+
return .max(1)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
214
|
+
downstream.receive(completion: completion)
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
var description: String { return "Filter" }
|
|
218
|
+
|
|
219
|
+
var customMirror: Mirror {
|
|
220
|
+
return Mirror(self, children: EmptyCollection())
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
var playgroundDescription: Any { return description }
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
extension Publishers.TryFilter {
|
|
228
|
+
private final class Inner<Downstream: Subscriber>
|
|
229
|
+
: FilterProducer<Downstream,
|
|
230
|
+
Upstream.Output,
|
|
231
|
+
Upstream.Output,
|
|
232
|
+
Upstream.Failure,
|
|
233
|
+
(Upstream.Output) throws -> Bool>
|
|
234
|
+
where Downstream.Input == Upstream.Output, Downstream.Failure == Error
|
|
235
|
+
{
|
|
236
|
+
override func receive(
|
|
237
|
+
newValue: Upstream.Output
|
|
238
|
+
) -> PartialCompletion<Upstream.Output?, Error> {
|
|
239
|
+
do {
|
|
240
|
+
return try filter(newValue) ? .continue(newValue) : .continue(nil)
|
|
241
|
+
} catch {
|
|
242
|
+
return .failure(error)
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
override var description: String { return "TryFilter" }
|
|
247
|
+
}
|
|
248
|
+
}
|