@swiftbrowser/swift 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Package.swift +200 -9
- package/README.md +7 -9
- package/Sources/AVFoundation/AVFoundation.swift +131 -0
- package/Sources/AVFoundation/Asset.swift +487 -0
- package/Sources/AVFoundation/AudioSession.swift +144 -0
- package/Sources/AVFoundation/CMTime.swift +303 -0
- package/Sources/AVFoundation/Capture.swift +688 -0
- package/Sources/AVFoundation/Player.swift +749 -0
- package/Sources/AVFoundation/PlayerView.swift +117 -0
- package/Sources/AVKit/AVKit.swift +132 -0
- package/Sources/Accelerate/Accelerate.swift +122 -0
- package/Sources/AppIntents/AppIntents.swift +144 -0
- package/Sources/AppIntents/Parameters.swift +220 -0
- package/Sources/AppIntents/Shortcuts.swift +159 -0
- package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
- package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
- package/Sources/AuthenticationServices/Authorization.swift +251 -0
- package/Sources/Charts/Charts.swift +0 -4
- package/Sources/Combine/AnyCancellable.swift +65 -0
- package/Sources/Combine/AnyPublisher.swift +148 -0
- package/Sources/Combine/AnySubscriber.swift +230 -0
- package/Sources/Combine/Cancellable.swift +35 -0
- package/Sources/Combine/Codable.swift +29 -0
- package/Sources/Combine/CombineIdentifier.swift +45 -0
- package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
- package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
- package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
- package/Sources/Combine/CurrentValueSubject.swift +252 -0
- package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
- package/Sources/Combine/Future.swift +228 -0
- package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
- package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
- package/Sources/Combine/Helpers/ConduitList.swift +59 -0
- package/Sources/Combine/Helpers/DebugHook.swift +177 -0
- package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
- package/Sources/Combine/Helpers/Locking.swift +30 -0
- package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
- package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
- package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
- package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
- package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
- package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
- package/Sources/Combine/Helpers/Utils.swift +30 -0
- package/Sources/Combine/Helpers/Violations.swift +33 -0
- package/Sources/Combine/ImmediateScheduler.swift +178 -0
- package/Sources/Combine/LICENSE +21 -0
- package/Sources/Combine/NotificationPublisher.swift +48 -0
- package/Sources/Combine/ObjectWillChange.swift +46 -0
- package/Sources/Combine/PassthroughSubject.swift +222 -0
- package/Sources/Combine/Publisher+Subscribe.swift +53 -0
- package/Sources/Combine/Publishers/Deferred.swift +48 -0
- package/Sources/Combine/Publishers/Empty.swift +54 -0
- package/Sources/Combine/Publishers/Fail.swift +42 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
- package/Sources/Combine/Publishers/Just.swift +313 -0
- package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
- package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
- package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
- package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
- package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
- package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
- package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
- package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
- package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
- package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
- package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
- package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
- package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
- package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
- package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
- package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
- package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
- package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
- package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
- package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
- package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
- package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
- package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
- package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
- package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
- package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
- package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
- package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
- package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
- package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
- package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
- package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
- package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
- package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
- package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
- package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
- package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
- package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
- package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
- package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
- package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
- package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
- package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
- package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
- package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
- package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
- package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
- package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
- package/Sources/Combine/Publishers/Publishers.swift +13 -0
- package/Sources/Combine/Publishers/Record.swift +237 -0
- package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
- package/Sources/Combine/Result.swift +46 -0
- package/Sources/Combine/Scheduler.swift +89 -0
- package/Sources/Combine/Schedulers.swift +211 -0
- package/Sources/Combine/Subject+Void.swift +17 -0
- package/Sources/Combine/Subscriber+Void.swift +20 -0
- package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
- package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
- package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
- package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
- package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
- package/Sources/Combine/Subscription.swift +22 -0
- package/Sources/Combine/Subscriptions.swift +42 -0
- package/Sources/Combine/SwiftUIObservation.swift +10 -0
- package/Sources/Combine/_Introspection.swift +107 -0
- package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
- package/Sources/Compression/Compression.swift +365 -0
- package/Sources/Compression/Deflate.swift +407 -0
- package/Sources/Compression/Zlib.swift +179 -0
- package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
- package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
- package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
- package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
- package/Sources/CoreImage/CIColor.swift +41 -0
- package/Sources/CoreImage/CIContext.swift +31 -0
- package/Sources/CoreImage/CIDetector.swift +57 -0
- package/Sources/CoreImage/CIFilter.swift +243 -0
- package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
- package/Sources/CoreImage/CIImage.swift +162 -0
- package/Sources/CoreImage/QRCode.swift +393 -0
- package/Sources/CoreLocation/Coordinate.swift +30 -0
- package/Sources/CoreLocation/Location.swift +65 -0
- package/Sources/CoreML/Evaluation.swift +414 -0
- package/Sources/CoreML/FeatureValue.swift +266 -0
- package/Sources/CoreML/Model.swift +269 -0
- package/Sources/CoreML/MultiArray.swift +92 -0
- package/Sources/CoreML/Specification.swift +233 -0
- package/Sources/CoreText/CoreText.swift +64 -0
- package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
- package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
- package/Sources/CryptoKit/CryptoKit.swift +375 -0
- package/Sources/CryptoKit/Curve25519.swift +317 -0
- package/Sources/CryptoKit/P256.swift +321 -0
- package/Sources/FoundationBridge/AppStorage.swift +165 -0
- package/Sources/FoundationBridge/AssetResources.swift +90 -0
- package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
- package/Sources/FoundationBridge/AsyncImage.swift +116 -0
- package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
- package/Sources/{_FoundationCommon → FoundationBridge}/Bundle.swift +41 -4
- package/Sources/FoundationBridge/CombineExports.swift +8 -0
- package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
- package/Sources/FoundationBridge/Dispatch.swift +458 -0
- package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
- package/Sources/FoundationBridge/FileImporter.swift +128 -0
- package/Sources/FoundationBridge/FileSystem.swift +68 -0
- package/Sources/FoundationBridge/FoundationBridge.swift +24 -72
- package/Sources/FoundationBridge/HostResolution.swift +31 -0
- package/Sources/FoundationBridge/ItemProvider.swift +655 -0
- package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
- package/Sources/FoundationBridge/Links.swift +127 -0
- package/Sources/FoundationBridge/ListFormatter.swift +32 -0
- package/Sources/FoundationBridge/Localization.swift +149 -0
- package/Sources/FoundationBridge/Locks.swift +50 -0
- package/Sources/FoundationBridge/Markdown.swift +527 -0
- package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
- package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
- package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
- package/Sources/FoundationBridge/Operation.swift +195 -0
- package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
- package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
- package/Sources/FoundationBridge/SceneStorage.swift +78 -0
- package/Sources/FoundationBridge/SecurityExports.swift +8 -0
- package/Sources/FoundationBridge/Selector.swift +226 -0
- package/Sources/FoundationBridge/StringComparators.swift +17 -0
- package/Sources/FoundationBridge/Table.swift +211 -0
- package/Sources/FoundationBridge/TextAttributes.swift +42 -0
- package/Sources/FoundationBridge/Timer.swift +6 -1
- package/Sources/FoundationBridge/URLSession.swift +718 -0
- package/Sources/{_FoundationCommon → FoundationBridge}/UserDefaults.swift +17 -4
- package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
- package/Sources/FoundationBridge/WebSocket.swift +187 -0
- package/Sources/FoundationModels/FoundationModels.swift +1098 -0
- package/Sources/ImageIO/GIF.swift +72 -0
- package/Sources/ImageIO/ImageIO.swift +248 -0
- package/Sources/ImageIO/ImageTypes.swift +28 -0
- package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
- package/Sources/LocalAuthentication/LAContext.swift +86 -0
- package/Sources/MapKit/Geometry.swift +223 -0
- package/Sources/MapKit/Map.swift +638 -0
- package/Sources/MapKit/MapView.swift +229 -0
- package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
- package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
- package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
- package/Sources/OSLog/OSLog.swift +6 -0
- package/Sources/Photos/Photos.swift +572 -0
- package/Sources/PhotosUI/PhotosPicker.swift +248 -0
- package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
- package/Sources/QuickLook/QuickLook.swift +168 -0
- package/Sources/SafariServices/SafariServices.swift +106 -0
- package/Sources/Security/Security.swift +332 -0
- package/Sources/StoreKit/AppStore.swift +207 -0
- package/Sources/StoreKit/Products.swift +280 -0
- package/Sources/StoreKit/RequestReview.swift +28 -0
- package/Sources/StoreKit/StoreKit1.swift +486 -0
- package/Sources/StoreKit/StoreViews.swift +428 -0
- package/Sources/StoreKit/Transactions.swift +197 -0
- package/Sources/SwiftData/Macros.swift +58 -0
- package/Sources/SwiftData/ModelActor.swift +38 -0
- package/Sources/SwiftData/ModelContainer.swift +129 -0
- package/Sources/SwiftData/ModelContext.swift +451 -0
- package/Sources/SwiftData/PersistentModel.swift +238 -0
- package/Sources/SwiftData/Properties.swift +261 -0
- package/Sources/SwiftData/Query.swift +256 -0
- package/Sources/SwiftData/Schema.swift +192 -0
- package/Sources/SwiftData/Store.swift +146 -0
- package/Sources/SwiftData/StringPredicates.swift +125 -0
- package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
- package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
- package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
- package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
- package/Sources/SwiftDataMacros/Plugin.swift +18 -0
- package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
- package/Sources/SwiftUI/API/Accessibility.swift +55 -6
- package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
- package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
- package/Sources/SwiftUI/API/Alert.swift +1 -1
- package/Sources/SwiftUI/API/AlignmentGuides.swift +68 -0
- package/Sources/SwiftUI/API/Animation.swift +37 -5
- package/Sources/SwiftUI/API/App.swift +31 -1
- package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
- package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
- package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
- package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
- package/Sources/SwiftUI/API/Canvas.swift +337 -0
- package/Sources/SwiftUI/API/Color.swift +104 -28
- package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
- package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
- package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
- package/Sources/SwiftUI/API/Commands.swift +106 -0
- package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
- package/Sources/SwiftUI/API/ContentShape.swift +33 -0
- package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
- package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
- package/Sources/SwiftUI/API/Controls.swift +59 -27
- package/Sources/SwiftUI/API/CustomLayout.swift +49 -10
- package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
- package/Sources/SwiftUI/API/Decorations.swift +1 -1
- package/Sources/SwiftUI/API/EditMode.swift +25 -82
- package/Sources/SwiftUI/API/Effects.swift +125 -10
- package/Sources/SwiftUI/API/Entry.swift +8 -0
- package/Sources/SwiftUI/API/Environment.swift +100 -9
- package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
- package/Sources/SwiftUI/API/Focus.swift +11 -3
- package/Sources/SwiftUI/API/Gauge.swift +26 -10
- package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
- package/Sources/SwiftUI/API/GeometryReader.swift +13 -2
- package/Sources/SwiftUI/API/GestureState.swift +65 -0
- package/Sources/SwiftUI/API/Gestures.swift +1 -1
- package/Sources/SwiftUI/API/Glass.swift +127 -0
- package/Sources/SwiftUI/API/Grid.swift +1 -1
- package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
- package/Sources/SwiftUI/API/KeyPress.swift +54 -0
- package/Sources/SwiftUI/API/LabelStyle.swift +13 -6
- package/Sources/SwiftUI/API/Layout.swift +71 -12
- package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
- package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
- package/Sources/SwiftUI/API/Lists.swift +61 -6
- package/Sources/SwiftUI/API/Menu.swift +8 -1
- package/Sources/SwiftUI/API/Modifiers.swift +88 -12
- package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
- package/Sources/SwiftUI/API/Namespace.swift +44 -0
- package/Sources/SwiftUI/API/Navigation.swift +24 -9
- package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
- package/Sources/SwiftUI/API/ObservableObject.swift +16 -2
- package/Sources/SwiftUI/API/Path.swift +543 -0
- package/Sources/SwiftUI/API/Phase8Controls.swift +48 -31
- package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
- package/Sources/SwiftUI/API/Picker.swift +14 -4
- package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
- package/Sources/SwiftUI/API/Popover.swift +41 -0
- package/Sources/SwiftUI/API/Preferences.swift +262 -0
- package/Sources/SwiftUI/API/Presentation.swift +17 -4
- package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
- package/Sources/SwiftUI/API/Primitives.swift +168 -39
- package/Sources/SwiftUI/API/Publishers.swift +4 -4
- package/Sources/SwiftUI/API/Redaction.swift +75 -0
- package/Sources/SwiftUI/API/RowActions.swift +3 -2
- package/Sources/SwiftUI/API/Scenes.swift +131 -0
- package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
- package/Sources/SwiftUI/API/ScrollTargets.swift +3 -3
- package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
- package/Sources/SwiftUI/API/SectionSupplements.swift +86 -0
- package/Sources/SwiftUI/API/Shape.swift +214 -0
- package/Sources/SwiftUI/API/ShapeStyle.swift +187 -8
- package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
- package/Sources/SwiftUI/API/Sharing.swift +193 -0
- package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
- package/Sources/SwiftUI/API/State.swift +18 -1
- package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
- package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
- package/Sources/SwiftUI/API/TabContent.swift +841 -0
- package/Sources/SwiftUI/API/Table.swift +382 -0
- package/Sources/SwiftUI/API/Tabs.swift +148 -4
- package/Sources/SwiftUI/API/Tasks.swift +2 -2
- package/Sources/SwiftUI/API/Text.swift +386 -0
- package/Sources/SwiftUI/API/TextDates.swift +61 -0
- package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
- package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
- package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
- package/Sources/SwiftUI/API/Toolbar.swift +52 -16
- package/Sources/SwiftUI/API/Transfer.swift +145 -0
- package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
- package/Sources/SwiftUI/API/Video.swift +64 -0
- package/Sources/SwiftUI/API/View.swift +46 -2
- package/Sources/SwiftUI/API/ViewModifier.swift +4 -1
- package/Sources/SwiftUI/API/VisualEffect.swift +74 -1
- package/Sources/SwiftUI/API/Windows.swift +25 -0
- package/Sources/SwiftUI/Charts/Axis.swift +7 -1
- package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
- package/Sources/SwiftUI/Charts/Chart.swift +17 -3
- package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
- package/Sources/SwiftUI/Localization/Localization.swift +524 -0
- package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
- package/Sources/SwiftUI/Runtime/Executor.swift +2 -0
- package/Sources/SwiftUI/Runtime/Exports.swift +37 -1
- package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
- package/Sources/SwiftUI/Runtime/JSON.swift +76 -4
- package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
- package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
- package/Sources/SwiftUI/Runtime/Ops.swift +58 -12
- package/Sources/SwiftUI/Runtime/Reconciler.swift +10 -1
- package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
- package/Sources/SwiftUI/Runtime/Runtime.swift +977 -198
- package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
- package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
- package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
- package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
- package/Sources/Symbols/Symbols.swift +25 -0
- package/Sources/Translation/Translation.swift +423 -0
- package/Sources/UIKit/Activity.swift +213 -0
- package/Sources/UIKit/Alerts.swift +69 -0
- package/Sources/UIKit/AppDelegate.swift +222 -0
- package/Sources/UIKit/Appearance.swift +84 -0
- package/Sources/UIKit/ColorConversions.swift +70 -0
- package/Sources/UIKit/Controls.swift +225 -0
- package/Sources/UIKit/Device.swift +200 -0
- package/Sources/UIKit/Feedback.swift +65 -0
- package/Sources/UIKit/Font.swift +307 -0
- package/Sources/UIKit/Graphics.swift +204 -0
- package/Sources/UIKit/HostingController.swift +185 -0
- package/Sources/UIKit/Identity.swift +24 -0
- package/Sources/UIKit/Introspectable.swift +510 -0
- package/Sources/UIKit/Pasteboard.swift +363 -0
- package/Sources/UIKit/PhotoAlbum.swift +81 -0
- package/Sources/UIKit/RemoteNotifications.swift +15 -0
- package/Sources/UIKit/Representable.swift +288 -0
- package/Sources/UIKit/SafeArea.swift +12 -0
- package/Sources/UIKit/SceneDelegates.swift +132 -0
- package/Sources/UIKit/Scenes.swift +40 -0
- package/Sources/UIKit/ScrollView.swift +157 -0
- package/Sources/UIKit/ShortcutItems.swift +67 -0
- package/Sources/UIKit/SymbolConfiguration.swift +124 -0
- package/Sources/UIKit/TargetAction.swift +123 -0
- package/Sources/UIKit/TextPaste.swift +161 -0
- package/Sources/UIKit/TextView.swift +538 -0
- package/Sources/UIKit/UIKit.swift +292 -0
- package/Sources/UIKit/UIView.swift +855 -0
- package/Sources/UIKit/ViewTranslation.swift +311 -0
- package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
- package/Sources/UserNotifications/Content.swift +370 -0
- package/Sources/UserNotifications/NotificationCenter.swift +309 -0
- package/Sources/WeatherKit/WeatherKit.swift +228 -0
- package/Sources/WebKit/WebKit.swift +245 -0
- package/Sources/os/os.swift +376 -0
- package/Sources/zlib/zlib.swift +6 -0
- package/index.d.ts +1 -1
- package/index.mjs +2 -2
- package/manifest.d.mts +2 -0
- package/manifest.mjs +41 -0
- package/package.json +5 -3
- package/sync-sources.mjs +21 -7
- package/Sources/FoundationLite/Common.swift +0 -3
- package/Sources/FoundationLite/FoundationLite.swift +0 -171
- package/Sources/FoundationLite/Interaction.swift +0 -146
- package/Sources/FoundationLite/Timer.swift +0 -48
- package/Sources/_FoundationCommon/_FoundationCommon.swift +0 -10
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Publishers.MeasureInterval.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 03.12.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Publisher {
|
|
9
|
+
|
|
10
|
+
/// Measures and emits the time interval between events received from an upstream
|
|
11
|
+
/// publisher.
|
|
12
|
+
///
|
|
13
|
+
/// Use `measureInterval(using:options:)` to measure the time between events delivered
|
|
14
|
+
/// from an upstream publisher.
|
|
15
|
+
///
|
|
16
|
+
/// In the example below, a 1-second `Timer` is used as the data source for an event
|
|
17
|
+
/// publisher; the `measureInterval(using:options:)` operator reports the elapsed time
|
|
18
|
+
/// between the reception of events on the main run loop:
|
|
19
|
+
///
|
|
20
|
+
/// cancellable = Timer.publish(every: 1, on: .main, in: .default)
|
|
21
|
+
/// .autoconnect()
|
|
22
|
+
/// .measureInterval(using: RunLoop.main)
|
|
23
|
+
/// .sink { print("\($0)", terminator: "\n") }
|
|
24
|
+
///
|
|
25
|
+
/// // Prints:
|
|
26
|
+
/// // Stride(magnitude: 1.0013610124588013)
|
|
27
|
+
/// // Stride(magnitude: 0.9992760419845581)
|
|
28
|
+
///
|
|
29
|
+
/// The output type of the returned publisher is the time interval of the provided
|
|
30
|
+
/// scheduler.
|
|
31
|
+
///
|
|
32
|
+
/// This operator uses the provided scheduler’s `now` property to measure intervals
|
|
33
|
+
/// between events.
|
|
34
|
+
///
|
|
35
|
+
/// - Parameters:
|
|
36
|
+
/// - scheduler: A scheduler to use for tracking the timing of events.
|
|
37
|
+
/// - options: Options that customize the delivery of elements.
|
|
38
|
+
/// - Returns: A publisher that emits elements representing the time interval between
|
|
39
|
+
/// the elements it receives.
|
|
40
|
+
public func measureInterval<Context: Scheduler>(
|
|
41
|
+
using scheduler: Context,
|
|
42
|
+
options: Context.SchedulerOptions? = nil
|
|
43
|
+
) -> Publishers.MeasureInterval<Self, Context> {
|
|
44
|
+
return .init(upstream: self, scheduler: scheduler)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
extension Publishers {
|
|
49
|
+
|
|
50
|
+
/// A publisher that measures and emits the time interval between events received from
|
|
51
|
+
/// an upstream publisher.
|
|
52
|
+
public struct MeasureInterval<Upstream: Publisher, Context: Scheduler>: Publisher {
|
|
53
|
+
|
|
54
|
+
public typealias Output = Context.SchedulerTimeType.Stride
|
|
55
|
+
|
|
56
|
+
public typealias Failure = Upstream.Failure
|
|
57
|
+
|
|
58
|
+
/// The publisher from which this publisher receives elements.
|
|
59
|
+
public let upstream: Upstream
|
|
60
|
+
|
|
61
|
+
/// The scheduler used for tracking the timing of events.
|
|
62
|
+
public let scheduler: Context
|
|
63
|
+
|
|
64
|
+
/// Creates a publisher that measures and emits the time interval between events
|
|
65
|
+
/// received from an upstream publisher.
|
|
66
|
+
///
|
|
67
|
+
/// - Parameters:
|
|
68
|
+
/// - upstream: The publisher from which this publisher receives elements.
|
|
69
|
+
/// - scheduler: A scheduler to use for tracking the timing of events.
|
|
70
|
+
public init(upstream: Upstream, scheduler: Context) {
|
|
71
|
+
self.upstream = upstream
|
|
72
|
+
self.scheduler = scheduler
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
76
|
+
where Upstream.Failure == Downstream.Failure,
|
|
77
|
+
Downstream.Input == Context.SchedulerTimeType.Stride
|
|
78
|
+
{
|
|
79
|
+
upstream.subscribe(Inner(scheduler: scheduler, downstream: subscriber))
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
extension Publishers.MeasureInterval {
|
|
85
|
+
private final class Inner<Downstream: Subscriber>
|
|
86
|
+
: Subscriber,
|
|
87
|
+
Subscription,
|
|
88
|
+
CustomStringConvertible,
|
|
89
|
+
CustomReflectable,
|
|
90
|
+
CustomPlaygroundDisplayConvertible
|
|
91
|
+
where Downstream.Input == Context.SchedulerTimeType.Stride,
|
|
92
|
+
Downstream.Failure == Upstream.Failure
|
|
93
|
+
{
|
|
94
|
+
typealias Input = Upstream.Output
|
|
95
|
+
typealias Failure = Upstream.Failure
|
|
96
|
+
|
|
97
|
+
private let lock = UnfairLock.allocate()
|
|
98
|
+
|
|
99
|
+
private let downstream: Downstream
|
|
100
|
+
|
|
101
|
+
private let scheduler: Context
|
|
102
|
+
|
|
103
|
+
private var state = SubscriptionStatus.awaitingSubscription
|
|
104
|
+
|
|
105
|
+
private var last: Context.SchedulerTimeType?
|
|
106
|
+
|
|
107
|
+
init(scheduler: Context, downstream: Downstream) {
|
|
108
|
+
self.downstream = downstream
|
|
109
|
+
self.scheduler = scheduler
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
deinit {
|
|
113
|
+
lock.deallocate()
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
func receive(subscription: Subscription) {
|
|
117
|
+
lock.lock()
|
|
118
|
+
guard case .awaitingSubscription = state else {
|
|
119
|
+
lock.unlock()
|
|
120
|
+
subscription.cancel()
|
|
121
|
+
return
|
|
122
|
+
}
|
|
123
|
+
state = .subscribed(subscription)
|
|
124
|
+
last = scheduler.now
|
|
125
|
+
lock.unlock()
|
|
126
|
+
downstream.receive(subscription: self)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
func receive(_: Input) -> Subscribers.Demand {
|
|
130
|
+
lock.lock()
|
|
131
|
+
guard case let .subscribed(subscription) = state,
|
|
132
|
+
let previousTime = last else
|
|
133
|
+
{
|
|
134
|
+
lock.unlock()
|
|
135
|
+
return .none
|
|
136
|
+
}
|
|
137
|
+
let now = scheduler.now
|
|
138
|
+
last = now
|
|
139
|
+
lock.unlock()
|
|
140
|
+
let newDemand = downstream.receive(previousTime.distance(to: now))
|
|
141
|
+
if newDemand > 0 {
|
|
142
|
+
subscription.request(newDemand)
|
|
143
|
+
}
|
|
144
|
+
return .none
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
148
|
+
lock.lock()
|
|
149
|
+
guard case .subscribed = state else {
|
|
150
|
+
lock.unlock()
|
|
151
|
+
return
|
|
152
|
+
}
|
|
153
|
+
state = .terminal
|
|
154
|
+
last = nil
|
|
155
|
+
lock.unlock()
|
|
156
|
+
downstream.receive(completion: completion)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
func request(_ demand: Subscribers.Demand) {
|
|
160
|
+
lock.lock()
|
|
161
|
+
guard case let .subscribed(subscription) = state else {
|
|
162
|
+
lock.unlock()
|
|
163
|
+
return
|
|
164
|
+
}
|
|
165
|
+
lock.unlock()
|
|
166
|
+
subscription.request(demand)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
func cancel() {
|
|
170
|
+
lock.lock()
|
|
171
|
+
guard case let .subscribed(subscription) = state else {
|
|
172
|
+
lock.unlock()
|
|
173
|
+
return
|
|
174
|
+
}
|
|
175
|
+
state = .terminal
|
|
176
|
+
last = nil
|
|
177
|
+
lock.unlock()
|
|
178
|
+
subscription.cancel()
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
var description: String { return "MeasureInterval" }
|
|
182
|
+
|
|
183
|
+
var customMirror: Mirror { return Mirror(self, children: EmptyCollection()) }
|
|
184
|
+
|
|
185
|
+
var playgroundDescription: Any { return description }
|
|
186
|
+
}
|
|
187
|
+
}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Publishers.Multicast.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 14.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Publisher {
|
|
9
|
+
|
|
10
|
+
/// Applies a closure to create a subject that delivers elements to subscribers.
|
|
11
|
+
///
|
|
12
|
+
/// Use a multicast publisher when you have multiple downstream subscribers, but you
|
|
13
|
+
/// want upstream publishers to only process one `receive(_:)` call per event.
|
|
14
|
+
/// This is useful when upstream publishers are doing expensive work you don’t want
|
|
15
|
+
/// to duplicate, like performing network requests.
|
|
16
|
+
///
|
|
17
|
+
/// In contrast with `multicast(subject:)`, this method produces a publisher that
|
|
18
|
+
/// creates a separate `Subject` for each subscriber.
|
|
19
|
+
///
|
|
20
|
+
/// The following example uses a sequence publisher as a counter to publish three
|
|
21
|
+
/// random numbers, generated by a `map(_:)` operator.
|
|
22
|
+
/// It uses a `multicast(_:)` operator whose closure creates a `PassthroughSubject`
|
|
23
|
+
/// to share the same random number to each of two subscribers. Because the multicast
|
|
24
|
+
/// publisher is a `ConnectablePublisher`, publishing only begins after a call to
|
|
25
|
+
/// `connect()`.
|
|
26
|
+
///
|
|
27
|
+
/// let pub = ["First", "Second", "Third"].publisher
|
|
28
|
+
/// .map( { return ($0, Int.random(in: 0...100)) } )
|
|
29
|
+
/// .print("Random")
|
|
30
|
+
/// .multicast { PassthroughSubject<(String, Int), Never>() }
|
|
31
|
+
///
|
|
32
|
+
/// cancellable1 = pub
|
|
33
|
+
/// .sink { print ("Stream 1 received: \($0)")}
|
|
34
|
+
/// cancellable2 = pub
|
|
35
|
+
/// .sink { print ("Stream 2 received: \($0)")}
|
|
36
|
+
/// pub.connect()
|
|
37
|
+
///
|
|
38
|
+
/// // Prints:
|
|
39
|
+
/// // Random: receive value: (("First", 9))
|
|
40
|
+
/// // Stream 2 received: ("First", 9)
|
|
41
|
+
/// // Stream 1 received: ("First", 9)
|
|
42
|
+
/// // Random: receive value: (("Second", 46))
|
|
43
|
+
/// // Stream 2 received: ("Second", 46)
|
|
44
|
+
/// // Stream 1 received: ("Second", 46)
|
|
45
|
+
/// // Random: receive value: (("Third", 26))
|
|
46
|
+
/// // Stream 2 received: ("Third", 26)
|
|
47
|
+
/// // Stream 1 received: ("Third", 26)
|
|
48
|
+
///
|
|
49
|
+
/// In this example, the output shows that the `print(_:to:)` operator receives each
|
|
50
|
+
/// random value only one time, and then sends the value to both subscribers.
|
|
51
|
+
///
|
|
52
|
+
/// - Parameter createSubject: A closure to create a new `Subject` each time
|
|
53
|
+
/// a subscriber attaches to the multicast publisher.
|
|
54
|
+
public func multicast<SubjectType: Subject>(
|
|
55
|
+
_ createSubject: @escaping () -> SubjectType
|
|
56
|
+
) -> Publishers.Multicast<Self, SubjectType>
|
|
57
|
+
where Failure == SubjectType.Failure, Output == SubjectType.Output
|
|
58
|
+
{
|
|
59
|
+
return Publishers.Multicast(upstream: self, createSubject: createSubject)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/// Provides a subject to deliver elements to multiple subscribers.
|
|
63
|
+
///
|
|
64
|
+
/// Use a multicast publisher when you have multiple downstream subscribers, but you
|
|
65
|
+
/// want upstream publishers to only process one `receive(_:)` call per event.
|
|
66
|
+
/// This is useful when upstream publishers are doing expensive work you don’t want
|
|
67
|
+
/// to duplicate, like performing network requests.
|
|
68
|
+
///
|
|
69
|
+
/// In contrast with `multicast(_:)`, this method produces a publisher that shares
|
|
70
|
+
/// the provided `Subject` among all the downstream subscribers.
|
|
71
|
+
///
|
|
72
|
+
/// The following example uses a sequence publisher as a counter to publish three
|
|
73
|
+
/// random numbers, generated by a `map(_:)` operator.
|
|
74
|
+
/// It uses a `multicast(subject:)` operator with a `PassthroughSubject` to share
|
|
75
|
+
/// the same random number to each of two subscribers. Because the multicast publisher
|
|
76
|
+
/// is a `ConnectablePublisher`, publishing only begins after a call to `connect()`.
|
|
77
|
+
///
|
|
78
|
+
/// let pub = ["First", "Second", "Third"].publisher
|
|
79
|
+
/// .map( { return ($0, Int.random(in: 0...100)) } )
|
|
80
|
+
/// .print("Random")
|
|
81
|
+
/// .multicast(subject: PassthroughSubject<(String, Int), Never>())
|
|
82
|
+
///
|
|
83
|
+
/// cancellable1 = pub
|
|
84
|
+
/// .sink { print ("Stream 1 received: \($0)")}
|
|
85
|
+
/// cancellable2 = pub
|
|
86
|
+
/// .sink { print ("Stream 2 received: \($0)")}
|
|
87
|
+
/// pub.connect()
|
|
88
|
+
///
|
|
89
|
+
/// // Prints:
|
|
90
|
+
/// // Random: receive value: (("First", 78))
|
|
91
|
+
/// // Stream 2 received: ("First", 78)
|
|
92
|
+
/// // Stream 1 received: ("First", 78)
|
|
93
|
+
/// // Random: receive value: (("Second", 98))
|
|
94
|
+
/// // Stream 2 received: ("Second", 98)
|
|
95
|
+
/// // Stream 1 received: ("Second", 98)
|
|
96
|
+
/// // Random: receive value: (("Third", 61))
|
|
97
|
+
/// // Stream 2 received: ("Third", 61)
|
|
98
|
+
/// // Stream 1 received: ("Third", 61)
|
|
99
|
+
///
|
|
100
|
+
/// In this example, the output shows that the `print(_:to:)` operator receives each
|
|
101
|
+
/// random value only one time, and then sends the value to both subscribers.
|
|
102
|
+
///
|
|
103
|
+
/// - Parameter subject: A subject to deliver elements to downstream subscribers.
|
|
104
|
+
public func multicast<SubjectType: Subject>(
|
|
105
|
+
subject: SubjectType
|
|
106
|
+
) -> Publishers.Multicast<Self, SubjectType>
|
|
107
|
+
where Failure == SubjectType.Failure, Output == SubjectType.Output
|
|
108
|
+
{
|
|
109
|
+
return multicast { subject }
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
extension Publishers {
|
|
114
|
+
|
|
115
|
+
/// A publisher that uses a subject to deliver elements to multiple subscribers.
|
|
116
|
+
///
|
|
117
|
+
/// Use a multicast publisher when you have multiple downstream subscribers, but you
|
|
118
|
+
/// want upstream publishers to only process one `receive(_:)` call per event.
|
|
119
|
+
public final class Multicast<Upstream: Publisher, SubjectType: Subject>
|
|
120
|
+
: ConnectablePublisher
|
|
121
|
+
where Upstream.Failure == SubjectType.Failure,
|
|
122
|
+
Upstream.Output == SubjectType.Output
|
|
123
|
+
{
|
|
124
|
+
public typealias Output = Upstream.Output
|
|
125
|
+
|
|
126
|
+
public typealias Failure = Upstream.Failure
|
|
127
|
+
|
|
128
|
+
/// The publisher that this publisher receives elements from.
|
|
129
|
+
public let upstream: Upstream
|
|
130
|
+
|
|
131
|
+
/// A closure to create a new Subject each time a subscriber attaches
|
|
132
|
+
/// to the multicast publisher.
|
|
133
|
+
public let createSubject: () -> SubjectType
|
|
134
|
+
|
|
135
|
+
private let lock = UnfairLock.allocate()
|
|
136
|
+
|
|
137
|
+
private var subject: SubjectType?
|
|
138
|
+
|
|
139
|
+
private var lazySubject: SubjectType {
|
|
140
|
+
lock.lock()
|
|
141
|
+
if let subject = subject {
|
|
142
|
+
lock.unlock()
|
|
143
|
+
return subject
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
let subject = createSubject()
|
|
147
|
+
self.subject = subject
|
|
148
|
+
lock.unlock()
|
|
149
|
+
return subject
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/// Creates a multicast publisher that applies a closure to create a subject that
|
|
153
|
+
/// delivers elements to subscribers.
|
|
154
|
+
///
|
|
155
|
+
/// - Parameter createSubject: A closure that returns a `Subject` each time
|
|
156
|
+
/// a subscriber attaches to the multicast publisher.
|
|
157
|
+
public init(upstream: Upstream, createSubject: @escaping () -> SubjectType) {
|
|
158
|
+
self.upstream = upstream
|
|
159
|
+
self.createSubject = createSubject
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
deinit {
|
|
163
|
+
lock.deallocate()
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
167
|
+
where SubjectType.Failure == Downstream.Failure,
|
|
168
|
+
SubjectType.Output == Downstream.Input
|
|
169
|
+
{
|
|
170
|
+
lazySubject.subscribe(Inner(parent: self, downstream: subscriber))
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
public func connect() -> Cancellable {
|
|
174
|
+
return upstream.subscribe(lazySubject)
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
extension Publishers.Multicast {
|
|
180
|
+
|
|
181
|
+
private final class Inner<Downstream: Subscriber>
|
|
182
|
+
: Subscriber,
|
|
183
|
+
Subscription,
|
|
184
|
+
CustomStringConvertible,
|
|
185
|
+
CustomReflectable,
|
|
186
|
+
CustomPlaygroundDisplayConvertible
|
|
187
|
+
where Upstream.Output == Downstream.Input, Upstream.Failure == Downstream.Failure
|
|
188
|
+
{
|
|
189
|
+
// NOTE: This class has been audited for thread safety
|
|
190
|
+
|
|
191
|
+
typealias Input = Upstream.Output
|
|
192
|
+
|
|
193
|
+
typealias Failure = Upstream.Failure
|
|
194
|
+
|
|
195
|
+
private enum State {
|
|
196
|
+
case ready(upstream: Upstream, downstream: Downstream)
|
|
197
|
+
case subscribed(upstream: Upstream,
|
|
198
|
+
downstream: Downstream,
|
|
199
|
+
subjectSubscription: Subscription)
|
|
200
|
+
case terminal
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
private let lock = UnfairLock.allocate()
|
|
204
|
+
|
|
205
|
+
private var state: State
|
|
206
|
+
|
|
207
|
+
fileprivate init(parent: Publishers.Multicast<Upstream, SubjectType>,
|
|
208
|
+
downstream: Downstream) {
|
|
209
|
+
state = .ready(upstream: parent.upstream, downstream: downstream)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
deinit {
|
|
213
|
+
lock.deallocate()
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
fileprivate var description: String { return "Multicast" }
|
|
217
|
+
|
|
218
|
+
fileprivate var customMirror: Mirror {
|
|
219
|
+
return Mirror(self, children: EmptyCollection())
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
fileprivate var playgroundDescription: Any { return description }
|
|
223
|
+
|
|
224
|
+
func receive(subscription: Subscription) {
|
|
225
|
+
lock.lock()
|
|
226
|
+
guard case let .ready(upstream, downstream) = state else {
|
|
227
|
+
lock.unlock()
|
|
228
|
+
subscription.cancel()
|
|
229
|
+
return
|
|
230
|
+
}
|
|
231
|
+
state = .subscribed(upstream: upstream,
|
|
232
|
+
downstream: downstream,
|
|
233
|
+
subjectSubscription: subscription)
|
|
234
|
+
lock.unlock()
|
|
235
|
+
downstream.receive(subscription: self)
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
func receive(_ input: Input) -> Subscribers.Demand {
|
|
239
|
+
lock.lock()
|
|
240
|
+
guard case let .subscribed(_, downstream, subjectSubscription) = state else {
|
|
241
|
+
lock.unlock()
|
|
242
|
+
return .none
|
|
243
|
+
}
|
|
244
|
+
lock.unlock()
|
|
245
|
+
let newDemand = downstream.receive(input)
|
|
246
|
+
if newDemand > 0 {
|
|
247
|
+
subjectSubscription.request(newDemand)
|
|
248
|
+
}
|
|
249
|
+
return .none
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
253
|
+
lock.lock()
|
|
254
|
+
guard case let .subscribed(_, downstream, _) = state else {
|
|
255
|
+
lock.unlock()
|
|
256
|
+
return
|
|
257
|
+
}
|
|
258
|
+
state = .terminal
|
|
259
|
+
lock.unlock()
|
|
260
|
+
downstream.receive(completion: completion)
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
func request(_ demand: Subscribers.Demand) {
|
|
264
|
+
lock.lock()
|
|
265
|
+
guard case let .subscribed(_, _, subjectSubscription) = state else {
|
|
266
|
+
lock.unlock()
|
|
267
|
+
return
|
|
268
|
+
}
|
|
269
|
+
lock.unlock()
|
|
270
|
+
subjectSubscription.request(demand)
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
func cancel() {
|
|
274
|
+
lock.lock()
|
|
275
|
+
guard case let .subscribed(_, _, subjectSubscription) = state else {
|
|
276
|
+
lock.unlock()
|
|
277
|
+
return
|
|
278
|
+
}
|
|
279
|
+
state = .terminal
|
|
280
|
+
lock.unlock()
|
|
281
|
+
subjectSubscription.cancel()
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|