@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,437 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Publishers.Sequence.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 19.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Publishers {
|
|
9
|
+
|
|
10
|
+
/// A publisher that publishes a given sequence of elements.
|
|
11
|
+
///
|
|
12
|
+
/// When the publisher exhausts the elements in the sequence, the next request
|
|
13
|
+
/// causes the publisher to finish.
|
|
14
|
+
public struct Sequence<Elements: Swift.Sequence, Failure: Error>: Publisher {
|
|
15
|
+
|
|
16
|
+
public typealias Output = Elements.Element
|
|
17
|
+
|
|
18
|
+
/// The sequence of elements to publish.
|
|
19
|
+
public let sequence: Elements
|
|
20
|
+
|
|
21
|
+
/// Creates a publisher for a sequence of elements.
|
|
22
|
+
///
|
|
23
|
+
/// - Parameter sequence: The sequence of elements to publish.
|
|
24
|
+
public init(sequence: Elements) {
|
|
25
|
+
self.sequence = sequence
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
29
|
+
where Failure == Downstream.Failure,
|
|
30
|
+
Elements.Element == Downstream.Input
|
|
31
|
+
{
|
|
32
|
+
let inner = Inner(downstream: subscriber, sequence: sequence)
|
|
33
|
+
if inner.isExhausted {
|
|
34
|
+
subscriber.receive(subscription: Subscriptions.empty)
|
|
35
|
+
subscriber.receive(completion: .finished)
|
|
36
|
+
inner.cancel()
|
|
37
|
+
} else {
|
|
38
|
+
subscriber.receive(subscription: inner)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
extension Publishers.Sequence {
|
|
45
|
+
|
|
46
|
+
private final class Inner<Downstream: Subscriber, Elements: Sequence, Failure>
|
|
47
|
+
: Subscription,
|
|
48
|
+
CustomStringConvertible,
|
|
49
|
+
CustomReflectable,
|
|
50
|
+
CustomPlaygroundDisplayConvertible
|
|
51
|
+
where Downstream.Input == Elements.Element,
|
|
52
|
+
Downstream.Failure == Failure
|
|
53
|
+
{
|
|
54
|
+
|
|
55
|
+
typealias Iterator = Elements.Iterator
|
|
56
|
+
typealias Element = Elements.Element
|
|
57
|
+
|
|
58
|
+
private var sequence: Elements?
|
|
59
|
+
private var downstream: Downstream?
|
|
60
|
+
private var iterator: Iterator
|
|
61
|
+
private var next: Element?
|
|
62
|
+
private var pendingDemand = Subscribers.Demand.none
|
|
63
|
+
private var recursion = false
|
|
64
|
+
private var lock = UnfairLock.allocate()
|
|
65
|
+
|
|
66
|
+
fileprivate init(downstream: Downstream, sequence: Elements) {
|
|
67
|
+
self.sequence = sequence
|
|
68
|
+
self.downstream = downstream
|
|
69
|
+
self.iterator = sequence.makeIterator()
|
|
70
|
+
next = iterator.next()
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
deinit {
|
|
74
|
+
lock.deallocate()
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
fileprivate var isExhausted: Bool {
|
|
78
|
+
return next == nil
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
var description: String {
|
|
82
|
+
return sequence.map(String.init(describing:)) ?? "Sequence"
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
var customMirror: Mirror {
|
|
86
|
+
let children =
|
|
87
|
+
CollectionOfOne<Mirror.Child>(("sequence", sequence ?? [Element]()))
|
|
88
|
+
return Mirror(self, children: children)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
var playgroundDescription: Any { return description }
|
|
92
|
+
|
|
93
|
+
func request(_ demand: Subscribers.Demand) {
|
|
94
|
+
lock.lock()
|
|
95
|
+
guard downstream != nil else {
|
|
96
|
+
lock.unlock()
|
|
97
|
+
return
|
|
98
|
+
}
|
|
99
|
+
pendingDemand += demand
|
|
100
|
+
if recursion {
|
|
101
|
+
lock.unlock()
|
|
102
|
+
return
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
while let downstream = self.downstream, pendingDemand > 0 {
|
|
106
|
+
if let current = self.next {
|
|
107
|
+
pendingDemand -= 1
|
|
108
|
+
|
|
109
|
+
// Combine calls next() while the lock is held.
|
|
110
|
+
// It is possible to engineer a custom Sequence that would cause
|
|
111
|
+
// a deadlock here, but it would be something insane.
|
|
112
|
+
let next = iterator.next()
|
|
113
|
+
recursion = true
|
|
114
|
+
lock.unlock()
|
|
115
|
+
let additionalDemand = downstream.receive(current)
|
|
116
|
+
lock.lock()
|
|
117
|
+
recursion = false
|
|
118
|
+
pendingDemand += additionalDemand
|
|
119
|
+
self.next = next
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if next == nil {
|
|
123
|
+
self.downstream = nil
|
|
124
|
+
self.sequence = nil
|
|
125
|
+
lock.unlock()
|
|
126
|
+
downstream.receive(completion: .finished)
|
|
127
|
+
return
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
lock.unlock()
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
func cancel() {
|
|
135
|
+
lock.lock()
|
|
136
|
+
downstream = nil
|
|
137
|
+
sequence = nil
|
|
138
|
+
lock.unlock()
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
extension Publishers.Sequence: Equatable where Elements: Equatable {}
|
|
144
|
+
|
|
145
|
+
extension Publishers.Sequence where Failure == Never {
|
|
146
|
+
|
|
147
|
+
public func min(
|
|
148
|
+
by areInIncreasingOrder: (Elements.Element, Elements.Element) -> Bool
|
|
149
|
+
) -> Optional<Elements.Element>.OCombine.Publisher {
|
|
150
|
+
return .init(sequence.min(by: areInIncreasingOrder))
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
public func max(
|
|
154
|
+
by areInIncreasingOrder: (Elements.Element, Elements.Element) -> Bool
|
|
155
|
+
) -> Optional<Elements.Element>.OCombine.Publisher {
|
|
156
|
+
return .init(sequence.max(by: areInIncreasingOrder))
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
public func first(
|
|
160
|
+
where predicate: (Elements.Element) -> Bool
|
|
161
|
+
) -> Optional<Elements.Element>.OCombine.Publisher {
|
|
162
|
+
return .init(sequence.first(where: predicate))
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
extension Publishers.Sequence {
|
|
167
|
+
|
|
168
|
+
public func allSatisfy(
|
|
169
|
+
_ predicate: (Elements.Element) -> Bool
|
|
170
|
+
) -> Result<Bool, Failure>.OCombine.Publisher {
|
|
171
|
+
return .init(sequence.allSatisfy(predicate))
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
public func tryAllSatisfy(
|
|
175
|
+
_ predicate: (Elements.Element) throws -> Bool
|
|
176
|
+
) -> Result<Bool, Error>.OCombine.Publisher {
|
|
177
|
+
return .init(Result { try sequence.allSatisfy(predicate) })
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
public func collect() -> Result<[Elements.Element], Failure>.OCombine.Publisher {
|
|
181
|
+
return .init(Array(sequence))
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
public func compactMap<ElementOfResult>(
|
|
185
|
+
_ transform: (Elements.Element) -> ElementOfResult?
|
|
186
|
+
) -> Publishers.Sequence<[ElementOfResult], Failure> {
|
|
187
|
+
return .init(sequence: sequence.compactMap(transform))
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
public func contains(
|
|
191
|
+
where predicate: (Elements.Element) -> Bool
|
|
192
|
+
) -> Result<Bool, Failure>.OCombine.Publisher {
|
|
193
|
+
return .init(sequence.contains(where: predicate))
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
public func tryContains(
|
|
197
|
+
where predicate: (Elements.Element) throws -> Bool
|
|
198
|
+
) -> Result<Bool, Error>.OCombine.Publisher {
|
|
199
|
+
return .init(Result { try sequence.contains(where: predicate) })
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
public func drop(
|
|
203
|
+
while predicate: (Elements.Element) -> Bool
|
|
204
|
+
) -> Publishers.Sequence<DropWhileSequence<Elements>, Failure> {
|
|
205
|
+
return .init(sequence: sequence.drop(while: predicate))
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
public func dropFirst(
|
|
209
|
+
_ count: Int = 1
|
|
210
|
+
) -> Publishers.Sequence<DropFirstSequence<Elements>, Failure> {
|
|
211
|
+
return .init(sequence: sequence.dropFirst(count))
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
public func filter(
|
|
215
|
+
_ isIncluded: (Elements.Element) -> Bool
|
|
216
|
+
) -> Publishers.Sequence<[Elements.Element], Failure> {
|
|
217
|
+
return .init(sequence: sequence.filter(isIncluded))
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
public func ignoreOutput() -> Empty<Elements.Element, Failure> {
|
|
221
|
+
return .init()
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
public func map<ElementOfResult>(
|
|
225
|
+
_ transform: (Elements.Element) -> ElementOfResult
|
|
226
|
+
) -> Publishers.Sequence<[ElementOfResult], Failure> {
|
|
227
|
+
return .init(sequence: sequence.map(transform))
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
public func prefix(
|
|
231
|
+
_ maxLength: Int
|
|
232
|
+
) -> Publishers.Sequence<PrefixSequence<Elements>, Failure> {
|
|
233
|
+
return .init(sequence: sequence.prefix(maxLength))
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
public func prefix(
|
|
237
|
+
while predicate: (Elements.Element) -> Bool
|
|
238
|
+
) -> Publishers.Sequence<[Elements.Element], Failure> {
|
|
239
|
+
return .init(sequence: sequence.prefix(while: predicate))
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
public func reduce<Accumulator>(
|
|
243
|
+
_ initialResult: Accumulator,
|
|
244
|
+
_ nextPartialResult: @escaping (Accumulator, Elements.Element) -> Accumulator
|
|
245
|
+
) -> Result<Accumulator, Failure>.OCombine.Publisher {
|
|
246
|
+
return .init(sequence.reduce(initialResult, nextPartialResult))
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
public func tryReduce<Accumulator>(
|
|
250
|
+
_ initialResult: Accumulator,
|
|
251
|
+
_ nextPartialResult:
|
|
252
|
+
@escaping (Accumulator, Elements.Element) throws -> Accumulator
|
|
253
|
+
) -> Result<Accumulator, Error>.OCombine.Publisher {
|
|
254
|
+
return .init(Result { try sequence.reduce(initialResult, nextPartialResult) })
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
public func replaceNil<ElementOfResult>(
|
|
258
|
+
with output: ElementOfResult
|
|
259
|
+
) -> Publishers.Sequence<[Elements.Element], Failure>
|
|
260
|
+
where Elements.Element == ElementOfResult?
|
|
261
|
+
{
|
|
262
|
+
return .init(sequence: sequence.map { $0 ?? output })
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
public func scan<ElementOfResult>(
|
|
266
|
+
_ initialResult: ElementOfResult,
|
|
267
|
+
_ nextPartialResult:
|
|
268
|
+
@escaping (ElementOfResult, Elements.Element) -> ElementOfResult
|
|
269
|
+
) -> Publishers.Sequence<[ElementOfResult], Failure> {
|
|
270
|
+
var accumulator = initialResult
|
|
271
|
+
return .init(sequence: sequence.map {
|
|
272
|
+
accumulator = nextPartialResult(accumulator, $0)
|
|
273
|
+
return accumulator
|
|
274
|
+
})
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
public func setFailureType<NewFailure: Error>(
|
|
278
|
+
to error: NewFailure.Type
|
|
279
|
+
) -> Publishers.Sequence<Elements, NewFailure> {
|
|
280
|
+
return .init(sequence: sequence)
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
extension Publishers.Sequence where Elements.Element: Equatable {
|
|
285
|
+
|
|
286
|
+
public func removeDuplicates() -> Publishers.Sequence<[Elements.Element], Failure> {
|
|
287
|
+
var previous: Elements.Element?
|
|
288
|
+
var result = [Elements.Element]()
|
|
289
|
+
for element in sequence where element != previous {
|
|
290
|
+
result.append(element)
|
|
291
|
+
previous = element
|
|
292
|
+
}
|
|
293
|
+
return .init(sequence: result)
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
public func contains(
|
|
297
|
+
_ output: Elements.Element
|
|
298
|
+
) -> Result<Bool, Failure>.OCombine.Publisher {
|
|
299
|
+
return .init(sequence.contains(output))
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
extension Publishers.Sequence where Failure == Never, Elements.Element: Comparable {
|
|
304
|
+
|
|
305
|
+
public func min() -> Optional<Elements.Element>.OCombine.Publisher {
|
|
306
|
+
return .init(sequence.min())
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
public func max() -> Optional<Elements.Element>.OCombine.Publisher {
|
|
310
|
+
return .init(sequence.max())
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
extension Publishers.Sequence where Elements: Collection, Failure == Never {
|
|
315
|
+
|
|
316
|
+
public func first() -> Optional<Elements.Element>.OCombine.Publisher {
|
|
317
|
+
return .init(sequence.first)
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
public func output(
|
|
321
|
+
at index: Elements.Index
|
|
322
|
+
) -> Optional<Elements.Element>.OCombine.Publisher {
|
|
323
|
+
return .init(sequence.indices.contains(index) ? sequence[index] : nil)
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
extension Publishers.Sequence where Elements: Collection {
|
|
328
|
+
|
|
329
|
+
public func count() -> Result<Int, Failure>.OCombine.Publisher {
|
|
330
|
+
return .init(sequence.count)
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
public func output(
|
|
334
|
+
in range: Range<Elements.Index>
|
|
335
|
+
) -> Publishers.Sequence<[Elements.Element], Failure> {
|
|
336
|
+
return .init(sequence: Array(sequence[range]))
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
extension Publishers.Sequence where Elements: BidirectionalCollection, Failure == Never {
|
|
341
|
+
|
|
342
|
+
public func last() -> Optional<Elements.Element>.OCombine.Publisher {
|
|
343
|
+
return .init(sequence.last)
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
public func last(
|
|
347
|
+
where predicate: (Elements.Element) -> Bool
|
|
348
|
+
) -> Optional<Elements.Element>.OCombine.Publisher {
|
|
349
|
+
return .init(sequence.last(where: predicate))
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
extension Publishers.Sequence where Elements: RandomAccessCollection, Failure == Never {
|
|
354
|
+
|
|
355
|
+
public func output(
|
|
356
|
+
at index: Elements.Index
|
|
357
|
+
) -> Optional<Elements.Element>.OCombine.Publisher {
|
|
358
|
+
return .init(sequence.indices.contains(index) ? sequence[index] : nil)
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
public func count() -> Just<Int> {
|
|
362
|
+
return .init(sequence.count)
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
extension Publishers.Sequence where Elements: RandomAccessCollection {
|
|
367
|
+
|
|
368
|
+
public func output(
|
|
369
|
+
in range: Range<Elements.Index>
|
|
370
|
+
) -> Publishers.Sequence<[Elements.Element], Failure> {
|
|
371
|
+
return .init(sequence: Array(sequence[range]))
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
public func count() -> Result<Int, Failure>.OCombine.Publisher {
|
|
375
|
+
return .init(sequence.count)
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
extension Publishers.Sequence where Elements: RangeReplaceableCollection {
|
|
380
|
+
|
|
381
|
+
public func prepend(
|
|
382
|
+
_ elements: Elements.Element...
|
|
383
|
+
) -> Publishers.Sequence<Elements, Failure> {
|
|
384
|
+
return prepend(elements)
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
public func prepend<OtherSequence: Sequence>(
|
|
388
|
+
_ elements: OtherSequence
|
|
389
|
+
) -> Publishers.Sequence<Elements, Failure>
|
|
390
|
+
where OtherSequence.Element == Elements.Element
|
|
391
|
+
{
|
|
392
|
+
var result = Elements()
|
|
393
|
+
result.reserveCapacity(
|
|
394
|
+
sequence.count + elements.underestimatedCount
|
|
395
|
+
)
|
|
396
|
+
result.append(contentsOf: elements)
|
|
397
|
+
result.append(contentsOf: sequence)
|
|
398
|
+
return .init(sequence: result)
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
public func prepend(
|
|
402
|
+
_ publisher: Publishers.Sequence<Elements, Failure>
|
|
403
|
+
) -> Publishers.Sequence<Elements, Failure> {
|
|
404
|
+
var result = publisher.sequence
|
|
405
|
+
result.append(contentsOf: sequence)
|
|
406
|
+
return .init(sequence: result)
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
public func append(
|
|
410
|
+
_ elements: Elements.Element...
|
|
411
|
+
) -> Publishers.Sequence<Elements, Failure> {
|
|
412
|
+
return append(elements)
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
public func append<OtherSequence: Sequence>(
|
|
416
|
+
_ elements: OtherSequence
|
|
417
|
+
) -> Publishers.Sequence<Elements, Failure>
|
|
418
|
+
where OtherSequence.Element == Elements.Element
|
|
419
|
+
{
|
|
420
|
+
var result = sequence
|
|
421
|
+
result.append(contentsOf: elements)
|
|
422
|
+
return .init(sequence: result)
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
public func append(
|
|
426
|
+
_ publisher: Publishers.Sequence<Elements, Failure>
|
|
427
|
+
) -> Publishers.Sequence<Elements, Failure> {
|
|
428
|
+
return append(publisher.sequence)
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
extension Sequence {
|
|
433
|
+
|
|
434
|
+
public var publisher: Publishers.Sequence<Self, Never> {
|
|
435
|
+
return .init(sequence: self)
|
|
436
|
+
}
|
|
437
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Publishers.SetFailureType.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 08.07.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Publishers {
|
|
9
|
+
|
|
10
|
+
/// A publisher that appears to send a specified failure type.
|
|
11
|
+
///
|
|
12
|
+
/// The publisher cannot actually fail with the specified type and instead
|
|
13
|
+
/// just finishes normally. Use this publisher type when you need to match
|
|
14
|
+
/// the error types for two mismatched publishers.
|
|
15
|
+
public struct SetFailureType<Upstream: Publisher, Failure: Error>: Publisher
|
|
16
|
+
where Upstream.Failure == Never
|
|
17
|
+
{
|
|
18
|
+
public typealias Output = Upstream.Output
|
|
19
|
+
|
|
20
|
+
/// The publisher from which this publisher receives elements.
|
|
21
|
+
public let upstream: Upstream
|
|
22
|
+
|
|
23
|
+
/// Creates a publisher that appears to send a specified failure type.
|
|
24
|
+
///
|
|
25
|
+
/// - Parameter upstream: The publisher from which this publisher receives
|
|
26
|
+
/// elements.
|
|
27
|
+
public init(upstream: Upstream) {
|
|
28
|
+
self.upstream = upstream
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
32
|
+
where Downstream.Failure == Failure, Downstream.Input == Output
|
|
33
|
+
{
|
|
34
|
+
upstream.subscribe(Inner(downstream: subscriber))
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public func setFailureType<NewFailure: Error>(
|
|
38
|
+
to failure: NewFailure.Type
|
|
39
|
+
) -> Publishers.SetFailureType<Upstream, NewFailure> {
|
|
40
|
+
return .init(upstream: upstream)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
extension Publishers.SetFailureType: Equatable where Upstream: Equatable {}
|
|
46
|
+
|
|
47
|
+
extension Publisher where Failure == Never {
|
|
48
|
+
|
|
49
|
+
/// Changes the failure type declared by the upstream publisher.
|
|
50
|
+
///
|
|
51
|
+
/// Use `setFailureType(to:)` when you need set the error type of a publisher that
|
|
52
|
+
/// cannot fail.
|
|
53
|
+
///
|
|
54
|
+
/// Conversely, if the upstream can fail, you would use `mapError(_:)` to provide
|
|
55
|
+
/// instructions on converting the error types to needed by the downstream publisher’s
|
|
56
|
+
/// inputs.
|
|
57
|
+
///
|
|
58
|
+
/// The following example has two publishers with mismatched error types: `pub1`’s
|
|
59
|
+
/// error type is `Never`, and `pub2`’s error type is `Error`. Because of
|
|
60
|
+
/// the mismatch, the `combineLatest(_:)` operator requires that `pub1` use
|
|
61
|
+
/// `setFailureType(to:)` to make it appear that `pub1` can produce the `Error` type,
|
|
62
|
+
/// like `pub2` can.
|
|
63
|
+
///
|
|
64
|
+
/// let pub1 = [0, 1, 2, 3, 4, 5].publisher
|
|
65
|
+
/// let pub2 = CurrentValueSubject<Int, Error>(0)
|
|
66
|
+
/// let cancellable = pub1
|
|
67
|
+
/// .setFailureType(to: Error.self)
|
|
68
|
+
/// .combineLatest(pub2)
|
|
69
|
+
/// .sink(
|
|
70
|
+
/// receiveCompletion: { print ("completed: \($0)") },
|
|
71
|
+
/// receiveValue: { print ("value: \($0)")}
|
|
72
|
+
/// )
|
|
73
|
+
///
|
|
74
|
+
/// // Prints: "value: (5, 0)".
|
|
75
|
+
///
|
|
76
|
+
/// - Parameter failureType: The `Failure` type presented by this publisher.
|
|
77
|
+
/// - Returns: A publisher that appears to send the specified failure type.
|
|
78
|
+
public func setFailureType<NewFailure: Error>(
|
|
79
|
+
to failureType: NewFailure.Type
|
|
80
|
+
) -> Publishers.SetFailureType<Self, NewFailure> {
|
|
81
|
+
return .init(upstream: self)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
extension Publishers.SetFailureType {
|
|
86
|
+
private struct Inner<Downstream: Subscriber>
|
|
87
|
+
: Subscriber,
|
|
88
|
+
CustomStringConvertible,
|
|
89
|
+
CustomReflectable,
|
|
90
|
+
CustomPlaygroundDisplayConvertible
|
|
91
|
+
where Upstream.Output == Downstream.Input, Failure == Downstream.Failure
|
|
92
|
+
{
|
|
93
|
+
private let downstream: Downstream
|
|
94
|
+
let combineIdentifier = CombineIdentifier()
|
|
95
|
+
|
|
96
|
+
fileprivate init(downstream: Downstream) {
|
|
97
|
+
self.downstream = downstream
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
func receive(subscription: Subscription) {
|
|
101
|
+
downstream.receive(subscription: subscription)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
func receive(_ input: Upstream.Output) -> Subscribers.Demand {
|
|
105
|
+
return downstream.receive(input)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
func receive(completion: Subscribers.Completion<Never>) {
|
|
109
|
+
downstream.receive(completion: .finished)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
var description: String { return "SetFailureType" }
|
|
113
|
+
|
|
114
|
+
var customMirror: Mirror {
|
|
115
|
+
return Mirror(self, children: EmptyCollection())
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
var playgroundDescription: Any { return description }
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Publishers.Share
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 18/09/2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Publisher {
|
|
9
|
+
|
|
10
|
+
/// Shares the output of an upstream publisher with multiple subscribers.
|
|
11
|
+
///
|
|
12
|
+
/// The publisher returned by this operator supports multiple subscribers, all of whom
|
|
13
|
+
/// receive unchanged elements and completion states from the upstream publisher.
|
|
14
|
+
///
|
|
15
|
+
/// - Tip: `Publishers.Share` is effectively a combination of
|
|
16
|
+
/// the `Publishers.Multicast` and `PassthroughSubject` publishers, with an implicit
|
|
17
|
+
/// `autoconnect()`.
|
|
18
|
+
///
|
|
19
|
+
/// The following example uses a sequence publisher as a counter to publish three
|
|
20
|
+
/// random numbers, generated by a `map(_:)` operator. It uses a `share()` operator
|
|
21
|
+
/// to share the same random number to each of two subscribers. This example uses
|
|
22
|
+
/// a `delay(for:tolerance:scheduler:options:)` operator only to prevent the first
|
|
23
|
+
/// subscriber from exhausting the sequence publisher immediately; an asynchronous
|
|
24
|
+
/// publisher wouldn’t need this.
|
|
25
|
+
///
|
|
26
|
+
/// let pub = (1...3).publisher
|
|
27
|
+
/// .delay(for: 1, scheduler: DispatchQueue.main)
|
|
28
|
+
/// .map( { _ in return Int.random(in: 0...100) } )
|
|
29
|
+
/// .print("Random")
|
|
30
|
+
/// .share()
|
|
31
|
+
///
|
|
32
|
+
/// cancellable1 = pub
|
|
33
|
+
/// .sink { print ("Stream 1 received: \($0)")}
|
|
34
|
+
/// cancellable2 = pub
|
|
35
|
+
/// .sink { print ("Stream 2 received: \($0)")}
|
|
36
|
+
///
|
|
37
|
+
/// // Prints:
|
|
38
|
+
/// // Random: receive value: (20)
|
|
39
|
+
/// // Stream 1 received: 20
|
|
40
|
+
/// // Stream 2 received: 20
|
|
41
|
+
/// // Random: receive value: (85)
|
|
42
|
+
/// // Stream 1 received: 85
|
|
43
|
+
/// // Stream 2 received: 85
|
|
44
|
+
/// // Random: receive value: (98)
|
|
45
|
+
/// // Stream 1 received: 98
|
|
46
|
+
/// // Stream 2 received: 98
|
|
47
|
+
///
|
|
48
|
+
/// Without the `share()` operator, stream 1 receives three random values,
|
|
49
|
+
/// followed by stream 2 receiving three different random values.
|
|
50
|
+
///
|
|
51
|
+
/// Also note that `Publishers.Share` is a `class` rather than a `struct` like most
|
|
52
|
+
/// other publishers. This means you can use this operator to create a publisher
|
|
53
|
+
/// instance that uses reference semantics.
|
|
54
|
+
///
|
|
55
|
+
/// - Returns: A class instance that shares elements received from its upstream to
|
|
56
|
+
/// multiple subscribers.
|
|
57
|
+
public func share() -> Publishers.Share<Self> {
|
|
58
|
+
return .init(upstream: self)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
extension Publishers {
|
|
63
|
+
|
|
64
|
+
/// A publisher that shares the output of an upstream publisher with multiple
|
|
65
|
+
/// subscribers.
|
|
66
|
+
///
|
|
67
|
+
/// This publisher type supports multiple subscribers, all of whom receive unchanged
|
|
68
|
+
/// elements and completion states from the upstream publisher.
|
|
69
|
+
///
|
|
70
|
+
/// - Tip: `Publishers.Share` is effectively a combination of
|
|
71
|
+
/// the `Publishers.Multicast` and `PassthroughSubject` publishers,
|
|
72
|
+
/// with an implicit `autoconnect()`.
|
|
73
|
+
///
|
|
74
|
+
/// Also note that `Publishers.Share` is a `class` rather than a `struct` like most
|
|
75
|
+
/// other publishers. Use this type when you need a publisher instance that uses
|
|
76
|
+
/// reference semantics.
|
|
77
|
+
public final class Share<Upstream: Publisher>: Publisher, Equatable {
|
|
78
|
+
|
|
79
|
+
public typealias Output = Upstream.Output
|
|
80
|
+
|
|
81
|
+
public typealias Failure = Upstream.Failure
|
|
82
|
+
|
|
83
|
+
private typealias MulticastSubject = PassthroughSubject<Output, Failure>
|
|
84
|
+
|
|
85
|
+
private let inner: Autoconnect<Multicast<Upstream, MulticastSubject>>
|
|
86
|
+
|
|
87
|
+
public let upstream: Upstream
|
|
88
|
+
|
|
89
|
+
public init(upstream: Upstream) {
|
|
90
|
+
self.inner = upstream.multicast(subject: .init()).autoconnect()
|
|
91
|
+
self.upstream = upstream
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
95
|
+
where Downstream.Input == Output, Downstream.Failure == Failure
|
|
96
|
+
{
|
|
97
|
+
inner.subscribe(subscriber)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public static func == (lhs: Share, rhs: Share) -> Bool {
|
|
101
|
+
return lhs === rhs
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|