@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,476 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Subscribers.Demand.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 10.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
// swiftlint:disable attributes
|
|
9
|
+
|
|
10
|
+
#if canImport(_Concurrency) && compiler(>=5.5)
|
|
11
|
+
import _Concurrency
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
extension Subscribers {
|
|
15
|
+
|
|
16
|
+
/// A requested number of items, sent to a publisher from a subscriber through
|
|
17
|
+
/// the subscription.
|
|
18
|
+
public struct Demand: Equatable,
|
|
19
|
+
Comparable,
|
|
20
|
+
Hashable,
|
|
21
|
+
Codable,
|
|
22
|
+
CustomStringConvertible
|
|
23
|
+
{
|
|
24
|
+
@usableFromInline
|
|
25
|
+
internal let rawValue: UInt
|
|
26
|
+
|
|
27
|
+
@inline(__always)
|
|
28
|
+
@inlinable
|
|
29
|
+
internal init(rawValue: UInt) {
|
|
30
|
+
self.rawValue = min(UInt(Int.max) + 1, rawValue)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/// A request for as many values as the publisher can produce.
|
|
34
|
+
@inline(__always)
|
|
35
|
+
@inlinable
|
|
36
|
+
public static var unlimited: Demand {
|
|
37
|
+
return Demand(rawValue: .max)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/// A request for no elements from the publisher.
|
|
41
|
+
///
|
|
42
|
+
/// This is equivalent to `Demand.max(0)`.
|
|
43
|
+
@inline(__always)
|
|
44
|
+
@inlinable
|
|
45
|
+
public static var none: Demand { return .max(0) }
|
|
46
|
+
|
|
47
|
+
/// Creates a demand for the given maximum number of elements.
|
|
48
|
+
///
|
|
49
|
+
/// The publisher is free to send fewer than the requested maximum number of
|
|
50
|
+
/// elements.
|
|
51
|
+
///
|
|
52
|
+
/// - Parameter value: The maximum number of elements. Providing a negative value
|
|
53
|
+
/// for this parameter results in a fatal error.
|
|
54
|
+
@inline(__always)
|
|
55
|
+
@inlinable
|
|
56
|
+
public static func max(_ value: Int) -> Demand {
|
|
57
|
+
precondition(value >= 0, "demand cannot be negative")
|
|
58
|
+
return Demand(rawValue: UInt(value))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public var description: String {
|
|
62
|
+
if self == .unlimited {
|
|
63
|
+
return "unlimited"
|
|
64
|
+
} else {
|
|
65
|
+
return "max(\(rawValue))"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/// Returns the result of adding two demands.
|
|
70
|
+
/// When adding any value to `.unlimited`, the result is `.unlimited`.
|
|
71
|
+
@inline(__always)
|
|
72
|
+
@inlinable
|
|
73
|
+
public static func + (lhs: Demand, rhs: Demand) -> Demand {
|
|
74
|
+
switch (lhs, rhs) {
|
|
75
|
+
case (.unlimited, _):
|
|
76
|
+
return .unlimited
|
|
77
|
+
case (_, .unlimited):
|
|
78
|
+
return .unlimited
|
|
79
|
+
default:
|
|
80
|
+
let (sum, isOverflow) = Int(lhs.rawValue)
|
|
81
|
+
.addingReportingOverflow(Int(rhs.rawValue))
|
|
82
|
+
return isOverflow ? .unlimited : .max(sum)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/// Adds two demands, and assigns the result to the first demand.
|
|
87
|
+
/// When adding any value to `.unlimited`, the result is `.unlimited`.
|
|
88
|
+
@inline(__always)
|
|
89
|
+
@inlinable
|
|
90
|
+
public static func += (lhs: inout Demand, rhs: Demand) {
|
|
91
|
+
if lhs == .unlimited { return }
|
|
92
|
+
lhs = lhs + rhs
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/// Returns the result of adding an integer to a demand.
|
|
96
|
+
/// When adding any value to` .unlimited`, the result is `.unlimited`.
|
|
97
|
+
@inline(__always)
|
|
98
|
+
@inlinable
|
|
99
|
+
public static func + (lhs: Demand, rhs: Int) -> Demand {
|
|
100
|
+
if lhs == .unlimited {
|
|
101
|
+
return .unlimited
|
|
102
|
+
}
|
|
103
|
+
let (sum, isOverflow) = Int(lhs.rawValue).addingReportingOverflow(rhs)
|
|
104
|
+
return isOverflow ? .unlimited : .max(sum)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/// Adds an integer to a demand, and assigns the result to the demand.
|
|
108
|
+
/// When adding any value to `.unlimited`, the result is `.unlimited`.
|
|
109
|
+
@inline(__always)
|
|
110
|
+
@inlinable
|
|
111
|
+
public static func += (lhs: inout Demand, rhs: Int) {
|
|
112
|
+
lhs = lhs + rhs
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/// Returns the result of multiplying a demand by an integer.
|
|
116
|
+
/// When multiplying any value by `.unlimited`, the result is `.unlimited`. If
|
|
117
|
+
/// the multiplication operation overflows, the result is `.unlimited`.
|
|
118
|
+
public static func * (lhs: Demand, rhs: Int) -> Demand {
|
|
119
|
+
if lhs == .unlimited {
|
|
120
|
+
return .unlimited
|
|
121
|
+
}
|
|
122
|
+
let (product, isOverflow) = Int(lhs.rawValue)
|
|
123
|
+
.multipliedReportingOverflow(by: rhs)
|
|
124
|
+
return isOverflow ? .unlimited : .max(product)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/// Multiplies a demand by an integer, and assigns the result to the demand.
|
|
128
|
+
/// When multiplying any value by `.unlimited`, the result is `.unlimited`. If
|
|
129
|
+
/// the multiplication operation overflows, the result is `.unlimited`.
|
|
130
|
+
@inline(__always)
|
|
131
|
+
@inlinable
|
|
132
|
+
public static func *= (lhs: inout Demand, rhs: Int) {
|
|
133
|
+
lhs = lhs * rhs
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/// Returns the result of subtracting one demand from another.
|
|
137
|
+
/// When subtracting any value (including `.unlimited`) from `.unlimited`,
|
|
138
|
+
/// the result is still `.unlimited`. Subtracting `.unlimited` from any value
|
|
139
|
+
/// (except `.unlimited`) results in `.max(0)`. A negative demand is not possible;
|
|
140
|
+
/// any operation that would result in a negative value is clamped to `.max(0)`.
|
|
141
|
+
@inline(__always)
|
|
142
|
+
@inlinable
|
|
143
|
+
public static func - (lhs: Demand, rhs: Demand) -> Demand {
|
|
144
|
+
switch (lhs, rhs) {
|
|
145
|
+
case (.unlimited, _):
|
|
146
|
+
return .unlimited
|
|
147
|
+
case (_, .unlimited):
|
|
148
|
+
return .none
|
|
149
|
+
default:
|
|
150
|
+
let (difference, isOverflow) = Int(lhs.rawValue)
|
|
151
|
+
.subtractingReportingOverflow(Int(rhs.rawValue))
|
|
152
|
+
return isOverflow ? .none : .max(difference)
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/// Subtracts one demand from another, and assigns the result to the first demand.
|
|
157
|
+
/// When subtracting any value (including `.unlimited`) from `.unlimited`,
|
|
158
|
+
/// the result is still `.unlimited`. Subtracting unlimited from any value
|
|
159
|
+
/// (except `.unlimited`) results in `.max(0)`. A negative demand is not possible;
|
|
160
|
+
/// any operation that would result in a negative value is clamped to `.max(0)`.
|
|
161
|
+
/// but be aware that it is not usable when requesting values in a subscription.
|
|
162
|
+
@inline(__always)
|
|
163
|
+
@inlinable
|
|
164
|
+
public static func -= (lhs: inout Demand, rhs: Demand) {
|
|
165
|
+
lhs = lhs - rhs
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/// Returns the result of subtracting an integer from a demand.
|
|
169
|
+
/// When subtracting any value from `.unlimited`, the result is still
|
|
170
|
+
/// `.unlimited`.
|
|
171
|
+
/// A negative demand is not possible; any operation that would result in
|
|
172
|
+
/// a negative value is clamped to `.max(0)`
|
|
173
|
+
@inline(__always)
|
|
174
|
+
@inlinable
|
|
175
|
+
public static func - (lhs: Demand, rhs: Int) -> Demand {
|
|
176
|
+
if lhs == .unlimited {
|
|
177
|
+
return .unlimited
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
let (difference, isOverflow) = Int(lhs.rawValue)
|
|
181
|
+
.subtractingReportingOverflow(rhs)
|
|
182
|
+
return isOverflow ? .none : .max(difference)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/// Subtracts an integer from a demand, and assigns the result to the demand.
|
|
186
|
+
/// When subtracting any value from `.unlimited,` the result is still
|
|
187
|
+
/// `.unlimited`.
|
|
188
|
+
/// A negative demand is not possible; any operation that would result in
|
|
189
|
+
/// a negative value is clamped to `.max(0)`
|
|
190
|
+
@inline(__always)
|
|
191
|
+
@inlinable
|
|
192
|
+
public static func -= (lhs: inout Demand, rhs: Int) {
|
|
193
|
+
if lhs == .unlimited { return }
|
|
194
|
+
lhs = lhs - rhs
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/// Returns a Boolean that indicates whether the demand requests more than
|
|
198
|
+
/// the given number of elements.
|
|
199
|
+
/// If `lhs` is `.unlimited`, then the result is always `true`.
|
|
200
|
+
/// Otherwise, the operator compares the demand’s `max` value to `rhs`.
|
|
201
|
+
@inline(__always)
|
|
202
|
+
@inlinable
|
|
203
|
+
public static func > (lhs: Demand, rhs: Int) -> Bool {
|
|
204
|
+
if lhs == .unlimited {
|
|
205
|
+
return true
|
|
206
|
+
} else {
|
|
207
|
+
return Int(lhs.rawValue) > rhs
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/// Returns a Boolean that indicates whether the first demand requests more or
|
|
212
|
+
/// the same number of elements as the second.
|
|
213
|
+
/// If `lhs` is `.unlimited`, then the result is always `true`.
|
|
214
|
+
/// Otherwise, the operator compares the demand’s `max` value to `rhs`.
|
|
215
|
+
@inline(__always)
|
|
216
|
+
@inlinable
|
|
217
|
+
public static func >= (lhs: Demand, rhs: Int) -> Bool {
|
|
218
|
+
if lhs == .unlimited {
|
|
219
|
+
return true
|
|
220
|
+
} else {
|
|
221
|
+
return Int(lhs.rawValue) >= rhs
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/// Returns a Boolean that indicates a given number of elements is greater than
|
|
226
|
+
/// the maximum specified by the demand.
|
|
227
|
+
/// If `rhs` is `.unlimited`, then the result is always `false`.
|
|
228
|
+
/// Otherwise, the operator compares the demand’s `max` value to `lhs`.
|
|
229
|
+
@inline(__always)
|
|
230
|
+
@inlinable
|
|
231
|
+
public static func > (lhs: Int, rhs: Demand) -> Bool {
|
|
232
|
+
if rhs == .unlimited {
|
|
233
|
+
return false
|
|
234
|
+
} else {
|
|
235
|
+
return lhs > Int(rhs.rawValue)
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/// Returns a Boolean that indicates a given number of elements is greater than
|
|
240
|
+
/// or equal to the maximum specified by the demand.
|
|
241
|
+
/// If `rhs` is `.unlimited`, then the result is always `false`.
|
|
242
|
+
/// Otherwise, the operator compares the demand’s `max` value to `lhs`.
|
|
243
|
+
@inline(__always)
|
|
244
|
+
@inlinable
|
|
245
|
+
public static func >= (lhs: Int, rhs: Demand) -> Bool {
|
|
246
|
+
if rhs == .unlimited {
|
|
247
|
+
return false
|
|
248
|
+
} else {
|
|
249
|
+
return lhs >= Int(rhs.rawValue)
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/// Returns a Boolean that indicates whether the demand requests fewer than
|
|
254
|
+
/// the given number of elements.
|
|
255
|
+
/// If `lhs` is `.unlimited`, then the result is always `false`.
|
|
256
|
+
/// Otherwise, the operator compares the demand’s `max` value to `rhs`.
|
|
257
|
+
@inline(__always)
|
|
258
|
+
@inlinable
|
|
259
|
+
public static func < (lhs: Demand, rhs: Int) -> Bool {
|
|
260
|
+
if lhs == .unlimited {
|
|
261
|
+
return false
|
|
262
|
+
} else {
|
|
263
|
+
return Int(lhs.rawValue) < rhs
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/// Returns a Boolean that indicates a given number of elements is less than
|
|
268
|
+
/// the maximum specified by the demand.
|
|
269
|
+
/// If `rhs` is `.unlimited`, then the result is always `true`.
|
|
270
|
+
/// Otherwise, the operator compares the demand’s `max` value to `lhs`.
|
|
271
|
+
@inline(__always)
|
|
272
|
+
@inlinable
|
|
273
|
+
public static func < (lhs: Int, rhs: Demand) -> Bool {
|
|
274
|
+
if rhs == .unlimited {
|
|
275
|
+
return true
|
|
276
|
+
} else {
|
|
277
|
+
return lhs < Int(rhs.rawValue)
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/// Returns a Boolean that indicates whether the demand requests fewer or
|
|
282
|
+
/// the same number of elements as the given integer.
|
|
283
|
+
/// If `lhs` is `.unlimited`, then the result is always `false`.
|
|
284
|
+
/// Otherwise, the operator compares the demand’s `max` value to `rhs`.
|
|
285
|
+
@inline(__always)
|
|
286
|
+
@inlinable
|
|
287
|
+
public static func <= (lhs: Demand, rhs: Int) -> Bool {
|
|
288
|
+
if lhs == .unlimited {
|
|
289
|
+
return false
|
|
290
|
+
} else {
|
|
291
|
+
return Int(lhs.rawValue) <= rhs
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/// Returns a Boolean value that indicates a given number of elements is less
|
|
296
|
+
/// than or equal the maximum specified by the demand.
|
|
297
|
+
/// If `rhs` is `.unlimited`, then the result is always `true`.
|
|
298
|
+
/// Otherwise, the operator compares the demand’s `max` value to `lhs`.
|
|
299
|
+
@inline(__always)
|
|
300
|
+
@inlinable
|
|
301
|
+
public static func <= (lhs: Int, rhs: Demand) -> Bool {
|
|
302
|
+
if rhs == .unlimited {
|
|
303
|
+
return true
|
|
304
|
+
} else {
|
|
305
|
+
return lhs <= Int(rhs.rawValue)
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/// Returns a Boolean value that indicates whether the first demand requests fewer
|
|
310
|
+
/// elements than the second.
|
|
311
|
+
/// If both sides are `.unlimited`, the result is always `false`.
|
|
312
|
+
/// If `lhs` is `.unlimited`, then the result is always `false`.
|
|
313
|
+
/// If `rhs` is `.unlimited`, then the result is always `true`.
|
|
314
|
+
/// Otherwise, this operator compares the demands’ `max` values.
|
|
315
|
+
@inline(__always)
|
|
316
|
+
@inlinable
|
|
317
|
+
public static func < (lhs: Demand, rhs: Demand) -> Bool {
|
|
318
|
+
switch (lhs, rhs) {
|
|
319
|
+
case (.unlimited, _):
|
|
320
|
+
return false
|
|
321
|
+
case (_, .unlimited):
|
|
322
|
+
return true
|
|
323
|
+
default:
|
|
324
|
+
return lhs.rawValue < rhs.rawValue
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/// Returns a Boolean value that indicates whether the first demand requests fewer
|
|
329
|
+
/// or the same number of elements as the second.
|
|
330
|
+
/// If both sides are `.unlimited`, the result is always `true`.
|
|
331
|
+
/// If `lhs` is `.unlimited`, then the result is always `false`.
|
|
332
|
+
/// If `rhs` is `.unlimited` then the result is always `true`.
|
|
333
|
+
/// Otherwise, this operator compares the demands’ `max` values.
|
|
334
|
+
@inline(__always)
|
|
335
|
+
@inlinable
|
|
336
|
+
public static func <= (lhs: Demand, rhs: Demand) -> Bool {
|
|
337
|
+
switch (lhs, rhs) {
|
|
338
|
+
case (.unlimited, .unlimited):
|
|
339
|
+
return true
|
|
340
|
+
case (.unlimited, _):
|
|
341
|
+
return false
|
|
342
|
+
case (_, .unlimited):
|
|
343
|
+
return true
|
|
344
|
+
default:
|
|
345
|
+
return lhs.rawValue <= rhs.rawValue
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/// Returns a Boolean that indicates whether the first demand requests more or
|
|
350
|
+
/// the same number of elements as the second.
|
|
351
|
+
/// If both sides are `.unlimited`, the result is always `false`.
|
|
352
|
+
/// If `lhs` is `.unlimited`, then the result is always `true`.
|
|
353
|
+
/// If rhs is `.unlimited` then the result is always `false`.
|
|
354
|
+
/// Otherwise, this operator compares the demands’ `max` values.
|
|
355
|
+
@inline(__always)
|
|
356
|
+
@inlinable
|
|
357
|
+
public static func >= (lhs: Demand, rhs: Demand) -> Bool {
|
|
358
|
+
switch (lhs, rhs) {
|
|
359
|
+
case (.unlimited, .unlimited):
|
|
360
|
+
return true
|
|
361
|
+
case (.unlimited, _):
|
|
362
|
+
return true
|
|
363
|
+
case (_, .unlimited):
|
|
364
|
+
return false
|
|
365
|
+
default:
|
|
366
|
+
return lhs.rawValue >= rhs.rawValue
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/// Returns a Boolean that indicates whether the first demand requests more
|
|
371
|
+
/// elements than the second.
|
|
372
|
+
/// If both sides are `.unlimited`, the result is always `false`.
|
|
373
|
+
/// If `lhs` is `.unlimited`, then the result is always `true`.
|
|
374
|
+
/// If `rhs` is `.unlimited` then the result is always `false`.
|
|
375
|
+
/// Otherwise, this operator compares the demands’ `max` values.
|
|
376
|
+
@inline(__always)
|
|
377
|
+
@inlinable
|
|
378
|
+
public static func > (lhs: Demand, rhs: Demand) -> Bool {
|
|
379
|
+
switch (lhs, rhs) {
|
|
380
|
+
case (.unlimited, .unlimited):
|
|
381
|
+
return false
|
|
382
|
+
case (.unlimited, _):
|
|
383
|
+
return true
|
|
384
|
+
case (_, .unlimited):
|
|
385
|
+
return false
|
|
386
|
+
default:
|
|
387
|
+
return lhs.rawValue > rhs.rawValue
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/// Returns a Boolean value indicating whether a demand requests the given number
|
|
392
|
+
/// of elements.
|
|
393
|
+
/// An `.unlimited` demand doesn’t match any integer.
|
|
394
|
+
@inline(__always)
|
|
395
|
+
@inlinable
|
|
396
|
+
public static func == (lhs: Demand, rhs: Int) -> Bool {
|
|
397
|
+
if lhs == .unlimited {
|
|
398
|
+
return false
|
|
399
|
+
} else {
|
|
400
|
+
return Int(lhs.rawValue) == rhs
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/// Returns a Boolean value indicating whether a demand is not equal to
|
|
405
|
+
/// an integer.
|
|
406
|
+
/// The `.unlimited` value isn’t equal to any integer.
|
|
407
|
+
@inlinable
|
|
408
|
+
public static func != (lhs: Demand, rhs: Int) -> Bool {
|
|
409
|
+
if lhs == .unlimited {
|
|
410
|
+
return true
|
|
411
|
+
} else {
|
|
412
|
+
return Int(lhs.rawValue) != rhs
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/// Returns a Boolean value indicating whether a given number of elements matches
|
|
417
|
+
/// the request of a given demand.
|
|
418
|
+
/// An `.unlimited` demand doesn’t match any integer.
|
|
419
|
+
@inlinable
|
|
420
|
+
public static func == (lhs: Int, rhs: Demand) -> Bool {
|
|
421
|
+
if rhs == .unlimited {
|
|
422
|
+
return false
|
|
423
|
+
} else {
|
|
424
|
+
return rhs.rawValue == lhs
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/// Returns a Boolean value indicating whether an integer is not equal to
|
|
429
|
+
/// a demand.
|
|
430
|
+
/// The `.unlimited` value isn’t equal to any integer.
|
|
431
|
+
@inlinable
|
|
432
|
+
public static func != (lhs: Int, rhs: Demand) -> Bool {
|
|
433
|
+
if rhs == .unlimited {
|
|
434
|
+
return true
|
|
435
|
+
} else {
|
|
436
|
+
return Int(rhs.rawValue) != lhs
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
@inlinable
|
|
441
|
+
public static func == (lhs: Demand, rhs: Demand) -> Bool {
|
|
442
|
+
return lhs.rawValue == rhs.rawValue
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/// The number of requested values.
|
|
446
|
+
///
|
|
447
|
+
/// The value is `nil` if the demand is `Subscribers.Demand.unlimited`.
|
|
448
|
+
@inlinable public var max: Int? {
|
|
449
|
+
if self == .unlimited {
|
|
450
|
+
return nil
|
|
451
|
+
} else {
|
|
452
|
+
return Int(rawValue)
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/// Creates a demand instance from a decoder.
|
|
457
|
+
///
|
|
458
|
+
/// - Parameter decoder: The decoder of a previously-encoded `Subscribers.Demand`
|
|
459
|
+
/// instance.
|
|
460
|
+
public init(from decoder: Decoder) throws {
|
|
461
|
+
try self.init(rawValue: decoder.singleValueContainer().decode(UInt.self))
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
/// Encodes the demand to the provided encoder.
|
|
465
|
+
///
|
|
466
|
+
/// - Parameter encoder: An encoder instance.
|
|
467
|
+
public func encode(to encoder: Encoder) throws {
|
|
468
|
+
var container = encoder.singleValueContainer()
|
|
469
|
+
try container.encode(rawValue)
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
#if canImport(_Concurrency) && compiler(>=5.5) || compiler(>=5.5.1)
|
|
475
|
+
extension Subscribers.Demand: Sendable {}
|
|
476
|
+
#endif
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Subscribers.Sink.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 16.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Subscribers {
|
|
9
|
+
|
|
10
|
+
/// A simple subscriber that requests an unlimited number of values upon subscription.
|
|
11
|
+
public final class Sink<Input, Failure: Error>
|
|
12
|
+
: Subscriber,
|
|
13
|
+
Cancellable,
|
|
14
|
+
CustomStringConvertible,
|
|
15
|
+
CustomReflectable,
|
|
16
|
+
CustomPlaygroundDisplayConvertible
|
|
17
|
+
{
|
|
18
|
+
|
|
19
|
+
/// The closure to execute on receipt of a value.
|
|
20
|
+
public var receiveValue: (Input) -> Void
|
|
21
|
+
|
|
22
|
+
/// The closure to execute on completion.
|
|
23
|
+
public var receiveCompletion: (Subscribers.Completion<Failure>) -> Void
|
|
24
|
+
|
|
25
|
+
private var status = SubscriptionStatus.awaitingSubscription
|
|
26
|
+
|
|
27
|
+
private let lock = UnfairLock.allocate()
|
|
28
|
+
|
|
29
|
+
public var description: String { return "Sink" }
|
|
30
|
+
|
|
31
|
+
public var customMirror: Mirror {
|
|
32
|
+
return Mirror(self, children: EmptyCollection())
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public var playgroundDescription: Any { return description }
|
|
36
|
+
|
|
37
|
+
/// Initializes a sink with the provided closures.
|
|
38
|
+
///
|
|
39
|
+
/// - Parameters:
|
|
40
|
+
/// - receiveCompletion: The closure to execute on completion.
|
|
41
|
+
/// - receiveValue: The closure to execute on receipt of a value.
|
|
42
|
+
public init(
|
|
43
|
+
receiveCompletion: @escaping (Subscribers.Completion<Failure>) -> Void,
|
|
44
|
+
receiveValue: @escaping ((Input) -> Void)
|
|
45
|
+
) {
|
|
46
|
+
self.receiveCompletion = receiveCompletion
|
|
47
|
+
self.receiveValue = receiveValue
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
deinit {
|
|
51
|
+
lock.deallocate()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public func receive(subscription: Subscription) {
|
|
55
|
+
lock.lock()
|
|
56
|
+
guard case .awaitingSubscription = status else {
|
|
57
|
+
lock.unlock()
|
|
58
|
+
subscription.cancel()
|
|
59
|
+
return
|
|
60
|
+
}
|
|
61
|
+
status = .subscribed(subscription)
|
|
62
|
+
lock.unlock()
|
|
63
|
+
subscription.request(.unlimited)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public func receive(_ value: Input) -> Subscribers.Demand {
|
|
67
|
+
lock.lock()
|
|
68
|
+
let receiveValue = self.receiveValue
|
|
69
|
+
lock.unlock()
|
|
70
|
+
receiveValue(value)
|
|
71
|
+
return .none
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
public func receive(completion: Subscribers.Completion<Failure>) {
|
|
75
|
+
lock.lock()
|
|
76
|
+
status = .terminal
|
|
77
|
+
let receiveCompletion = self.receiveCompletion
|
|
78
|
+
self.receiveCompletion = { _ in }
|
|
79
|
+
|
|
80
|
+
// We MUST release the closures AFTER unlocking the lock,
|
|
81
|
+
// since releasing a closure may trigger execution of arbitrary code,
|
|
82
|
+
// for example, if the closure captures an object with a deinit.
|
|
83
|
+
// When closure deallocates, the object's deinit is called, and holding
|
|
84
|
+
// the lock at that moment can lead to deadlocks.
|
|
85
|
+
// See https://github.com/OpenCombine/OpenCombine/issues/208
|
|
86
|
+
|
|
87
|
+
withExtendedLifetime(receiveValue) {
|
|
88
|
+
receiveValue = { _ in }
|
|
89
|
+
lock.unlock()
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
receiveCompletion(completion)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
public func cancel() {
|
|
96
|
+
lock.lock()
|
|
97
|
+
guard case let .subscribed(subscription) = status else {
|
|
98
|
+
lock.unlock()
|
|
99
|
+
return
|
|
100
|
+
}
|
|
101
|
+
status = .terminal
|
|
102
|
+
|
|
103
|
+
// We MUST release the closures AFTER unlocking the lock,
|
|
104
|
+
// since releasing a closure may trigger execution of arbitrary code,
|
|
105
|
+
// for example, if the closure captures an object with a deinit.
|
|
106
|
+
// When closure deallocates, the object's deinit is called, and holding
|
|
107
|
+
// the lock at that moment can lead to deadlocks.
|
|
108
|
+
// See https://github.com/OpenCombine/OpenCombine/issues/208
|
|
109
|
+
|
|
110
|
+
withExtendedLifetime((receiveValue, receiveCompletion)) {
|
|
111
|
+
receiveCompletion = { _ in }
|
|
112
|
+
receiveValue = { _ in }
|
|
113
|
+
lock.unlock()
|
|
114
|
+
}
|
|
115
|
+
subscription.cancel()
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
extension Publisher {
|
|
121
|
+
|
|
122
|
+
/// Attaches a subscriber with closure-based behavior.
|
|
123
|
+
///
|
|
124
|
+
/// Use `sink(receiveCompletion:receiveValue:)` to observe values received by
|
|
125
|
+
/// the publisher and process them using a closure you specify.
|
|
126
|
+
///
|
|
127
|
+
/// In this example, a `Range` publisher publishes integers to
|
|
128
|
+
/// a `sink(receiveCompletion:receiveValue:)` operator’s `receiveValue` closure that
|
|
129
|
+
/// prints them to the console. Upon completion
|
|
130
|
+
/// the `sink(receiveCompletion:receiveValue:)` operator’s `receiveCompletion` closure
|
|
131
|
+
/// indicates the successful termination of the stream.
|
|
132
|
+
///
|
|
133
|
+
/// let myRange = (0...3)
|
|
134
|
+
/// cancellable = myRange.publisher
|
|
135
|
+
/// .sink(receiveCompletion: { print ("completion: \($0)") },
|
|
136
|
+
/// receiveValue: { print ("value: \($0)") })
|
|
137
|
+
///
|
|
138
|
+
/// // Prints:
|
|
139
|
+
/// // value: 0
|
|
140
|
+
/// // value: 1
|
|
141
|
+
/// // value: 2
|
|
142
|
+
/// // value: 3
|
|
143
|
+
/// // completion: finished
|
|
144
|
+
///
|
|
145
|
+
/// This method creates the subscriber and immediately requests an unlimited number
|
|
146
|
+
/// of values, prior to returning the subscriber.
|
|
147
|
+
/// The return value should be held, otherwise the stream will be canceled.
|
|
148
|
+
///
|
|
149
|
+
/// - parameter receiveComplete: The closure to execute on completion.
|
|
150
|
+
/// - parameter receiveValue: The closure to execute on receipt of a value.
|
|
151
|
+
/// - Returns: A cancellable instance, which you use when you end assignment of
|
|
152
|
+
/// the received value. Deallocation of the result will tear down the subscription
|
|
153
|
+
/// stream.
|
|
154
|
+
public func sink(
|
|
155
|
+
receiveCompletion: @escaping (Subscribers.Completion<Failure>) -> Void,
|
|
156
|
+
receiveValue: @escaping ((Output) -> Void)
|
|
157
|
+
) -> AnyCancellable {
|
|
158
|
+
let subscriber = Subscribers.Sink<Output, Failure>(
|
|
159
|
+
receiveCompletion: receiveCompletion,
|
|
160
|
+
receiveValue: receiveValue
|
|
161
|
+
)
|
|
162
|
+
subscribe(subscriber)
|
|
163
|
+
return AnyCancellable(subscriber)
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
extension Publisher where Failure == Never {
|
|
168
|
+
|
|
169
|
+
/// Attaches a subscriber with closure-based behavior to a publisher that never fails.
|
|
170
|
+
///
|
|
171
|
+
/// Use `sink(receiveValue:)` to observe values received by the publisher and print
|
|
172
|
+
/// them to the console. This operator can only be used when the stream doesn’t fail,
|
|
173
|
+
/// that is, when the publisher’s `Failure` type is `Never`.
|
|
174
|
+
///
|
|
175
|
+
/// In this example, a `Range` publisher publishes integers to a `sink(receiveValue:)`
|
|
176
|
+
/// operator’s `receiveValue` closure that prints them to the console:
|
|
177
|
+
///
|
|
178
|
+
/// let integers = (0...3)
|
|
179
|
+
/// integers.publisher
|
|
180
|
+
/// .sink { print("Received \($0)") }
|
|
181
|
+
///
|
|
182
|
+
/// // Prints:
|
|
183
|
+
/// // Received 0
|
|
184
|
+
/// // Received 1
|
|
185
|
+
/// // Received 2
|
|
186
|
+
/// // Received 3
|
|
187
|
+
///
|
|
188
|
+
/// This method creates the subscriber and immediately requests an unlimited number of
|
|
189
|
+
/// values, prior to returning the subscriber.
|
|
190
|
+
/// The return value should be held, otherwise the stream will be canceled.
|
|
191
|
+
///
|
|
192
|
+
/// - parameter receiveValue: The closure to execute on receipt of a value.
|
|
193
|
+
/// - Returns: A cancellable instance, which you use when you end assignment of
|
|
194
|
+
/// the received value. Deallocation of the result will tear down the subscription
|
|
195
|
+
/// stream.
|
|
196
|
+
public func sink(
|
|
197
|
+
receiveValue: @escaping (Output) -> Void
|
|
198
|
+
) -> AnyCancellable {
|
|
199
|
+
let subscriber = Subscribers.Sink<Output, Failure>(
|
|
200
|
+
receiveCompletion: { _ in },
|
|
201
|
+
receiveValue: receiveValue
|
|
202
|
+
)
|
|
203
|
+
subscribe(subscriber)
|
|
204
|
+
return AnyCancellable(subscriber)
|
|
205
|
+
}
|
|
206
|
+
}
|