@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,89 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Scheduler.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 11.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
/// A protocol that provides a scheduler with an expression for relative time.
|
|
9
|
+
public protocol SchedulerTimeIntervalConvertible {
|
|
10
|
+
|
|
11
|
+
/// Converts the specified number of seconds into an instance of this scheduler time
|
|
12
|
+
/// type.
|
|
13
|
+
static func seconds(_ s: Int) -> Self
|
|
14
|
+
|
|
15
|
+
/// Converts the specified number of seconds, as a floating-point value, into
|
|
16
|
+
/// an instance of this scheduler time type.
|
|
17
|
+
static func seconds(_ s: Double) -> Self
|
|
18
|
+
|
|
19
|
+
/// Converts the specified number of milliseconds into an instance of this scheduler
|
|
20
|
+
/// time type.
|
|
21
|
+
static func milliseconds(_ ms: Int) -> Self
|
|
22
|
+
|
|
23
|
+
/// Converts the specified number of microseconds into an instance of this scheduler
|
|
24
|
+
/// time type.
|
|
25
|
+
static func microseconds(_ us: Int) -> Self
|
|
26
|
+
|
|
27
|
+
/// Converts the specified number of nanoseconds into an instance of this scheduler
|
|
28
|
+
/// time type.
|
|
29
|
+
static func nanoseconds(_ ns: Int) -> Self
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
extension Scheduler {
|
|
33
|
+
|
|
34
|
+
/// Performs the action at some time after the specified date, using the scheduler’s
|
|
35
|
+
/// minimum tolerance.
|
|
36
|
+
///
|
|
37
|
+
/// The immediate scheduler ignores `date` and performs the action immediately.
|
|
38
|
+
@inlinable
|
|
39
|
+
public func schedule(after date: SchedulerTimeType,
|
|
40
|
+
_ action: @escaping () -> Void) {
|
|
41
|
+
schedule(after: date, tolerance: minimumTolerance, action)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/// Performs the action at the next possible opportunity, without options.
|
|
45
|
+
@inlinable
|
|
46
|
+
public func schedule(_ action: @escaping () -> Void) {
|
|
47
|
+
schedule(options: nil, action)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/// Performs the action at some time after the specified date.
|
|
51
|
+
///
|
|
52
|
+
/// The immediate scheduler ignores `date` and performs the action immediately.
|
|
53
|
+
@inlinable
|
|
54
|
+
public func schedule(after date: SchedulerTimeType,
|
|
55
|
+
tolerance: SchedulerTimeType.Stride,
|
|
56
|
+
_ action: @escaping () -> Void) {
|
|
57
|
+
schedule(after: date, tolerance: tolerance, options: nil, action)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// Performs the action at some time after the specified date, at the specified
|
|
61
|
+
/// frequency, taking into account tolerance if possible.
|
|
62
|
+
///
|
|
63
|
+
/// The immediate scheduler ignores `date` and performs the action immediately.
|
|
64
|
+
@inlinable
|
|
65
|
+
public func schedule(after date: SchedulerTimeType,
|
|
66
|
+
interval: SchedulerTimeType.Stride,
|
|
67
|
+
tolerance: SchedulerTimeType.Stride,
|
|
68
|
+
_ action: @escaping () -> Void) -> Cancellable {
|
|
69
|
+
return schedule(after: date,
|
|
70
|
+
interval: interval,
|
|
71
|
+
tolerance: tolerance,
|
|
72
|
+
options: nil,
|
|
73
|
+
action)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/// Performs the action at some time after the specified date, at the specified
|
|
77
|
+
/// frequency, using minimum tolerance possible for this Scheduler.
|
|
78
|
+
///
|
|
79
|
+
/// The immediate scheduler ignores `date` and performs the action immediately.
|
|
80
|
+
@inlinable
|
|
81
|
+
public func schedule(after date: SchedulerTimeType,
|
|
82
|
+
interval: SchedulerTimeType.Stride,
|
|
83
|
+
_ action: @escaping () -> Void) -> Cancellable {
|
|
84
|
+
return schedule(after: date,
|
|
85
|
+
interval: interval,
|
|
86
|
+
tolerance: minimumTolerance,
|
|
87
|
+
action)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
// FoundationBridge's `DispatchQueue` and `RunLoop` as Combine schedulers, as
|
|
2
|
+
// Apple's Combine makes Dispatch's and Foundation's, so that
|
|
3
|
+
// `.debounce(for: .milliseconds(500), scheduler: DispatchQueue.main)` and
|
|
4
|
+
// `.receive(on: RunLoop.main)` work. Every queue is the main queue
|
|
5
|
+
// (FoundationBridge/Dispatch.swift): an action runs on the main actor's next
|
|
6
|
+
// turn, a later one after a sleep on the executor's clock (so headless runs
|
|
7
|
+
// keep their virtual time), and a repeating one until cancelled. Tolerances
|
|
8
|
+
// and options are accepted.
|
|
9
|
+
//
|
|
10
|
+
// `View.onReceive` takes Combine's publishers too (the SwiftUI shim's own
|
|
11
|
+
// takes its `_Publisher`s): values are delivered on the main actor while the
|
|
12
|
+
// view is on screen.
|
|
13
|
+
|
|
14
|
+
import Foundation
|
|
15
|
+
import FoundationBridge
|
|
16
|
+
import SwiftUI
|
|
17
|
+
|
|
18
|
+
// MARK: - DispatchQueue
|
|
19
|
+
|
|
20
|
+
extension FoundationBridge.DispatchQueue: Scheduler {
|
|
21
|
+
/// An instant: a `DispatchTime`.
|
|
22
|
+
public struct SchedulerTimeType: Strideable, Codable, Hashable, Sendable {
|
|
23
|
+
public var dispatchTime: FoundationBridge.DispatchTime
|
|
24
|
+
|
|
25
|
+
public init(_ time: FoundationBridge.DispatchTime) { dispatchTime = time }
|
|
26
|
+
|
|
27
|
+
public func distance(to other: SchedulerTimeType) -> Stride {
|
|
28
|
+
Stride(Int(Int64(bitPattern: other.dispatchTime.uptimeNanoseconds &- dispatchTime.uptimeNanoseconds)))
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public func advanced(by n: Stride) -> SchedulerTimeType {
|
|
32
|
+
SchedulerTimeType(dispatchTime._adding(nanoseconds: Double(n.magnitude)))
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public init(from decoder: any Decoder) throws {
|
|
36
|
+
self.init(FoundationBridge.DispatchTime(uptimeNanoseconds: try UInt64(from: decoder)))
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public func encode(to encoder: any Encoder) throws {
|
|
40
|
+
try dispatchTime.uptimeNanoseconds.encode(to: encoder)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/// A span of time, in nanoseconds.
|
|
44
|
+
public struct Stride: SchedulerTimeIntervalConvertible, Comparable, SignedNumeric, ExpressibleByFloatLiteral,
|
|
45
|
+
Hashable, Codable, Sendable {
|
|
46
|
+
public var magnitude: Int
|
|
47
|
+
|
|
48
|
+
public init(_ nanoseconds: Int) { magnitude = nanoseconds }
|
|
49
|
+
public init(integerLiteral value: Int) { magnitude = value * 1_000_000_000 }
|
|
50
|
+
public init(floatLiteral value: Double) { magnitude = Int(value * 1_000_000_000) }
|
|
51
|
+
public init?<T: BinaryInteger>(exactly source: T) {
|
|
52
|
+
guard let value = Int(exactly: source) else { return nil }
|
|
53
|
+
magnitude = value
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public static func seconds(_ s: Int) -> Stride { Stride(s * 1_000_000_000) }
|
|
57
|
+
public static func seconds(_ s: Double) -> Stride { Stride(Int(s * 1_000_000_000)) }
|
|
58
|
+
public static func milliseconds(_ ms: Int) -> Stride { Stride(ms * 1_000_000) }
|
|
59
|
+
public static func microseconds(_ us: Int) -> Stride { Stride(us * 1_000) }
|
|
60
|
+
public static func nanoseconds(_ ns: Int) -> Stride { Stride(ns) }
|
|
61
|
+
|
|
62
|
+
public static func < (lhs: Stride, rhs: Stride) -> Bool { lhs.magnitude < rhs.magnitude }
|
|
63
|
+
public static func + (lhs: Stride, rhs: Stride) -> Stride { Stride(lhs.magnitude + rhs.magnitude) }
|
|
64
|
+
public static func - (lhs: Stride, rhs: Stride) -> Stride { Stride(lhs.magnitude - rhs.magnitude) }
|
|
65
|
+
public static func * (lhs: Stride, rhs: Stride) -> Stride { Stride(lhs.magnitude * rhs.magnitude) }
|
|
66
|
+
public static func += (lhs: inout Stride, rhs: Stride) { lhs = lhs + rhs }
|
|
67
|
+
public static func -= (lhs: inout Stride, rhs: Stride) { lhs = lhs - rhs }
|
|
68
|
+
public static func *= (lhs: inout Stride, rhs: Stride) { lhs = lhs * rhs }
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public struct SchedulerOptions: Sendable {}
|
|
73
|
+
|
|
74
|
+
public var now: SchedulerTimeType { SchedulerTimeType(.now()) }
|
|
75
|
+
public var minimumTolerance: SchedulerTimeType.Stride { SchedulerTimeType.Stride(0) }
|
|
76
|
+
|
|
77
|
+
public func schedule(options: SchedulerOptions?, _ action: @escaping () -> Void) {
|
|
78
|
+
async(execute: action)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
public func schedule(after date: SchedulerTimeType, tolerance: SchedulerTimeType.Stride,
|
|
82
|
+
options: SchedulerOptions?, _ action: @escaping () -> Void) {
|
|
83
|
+
asyncAfter(deadline: date.dispatchTime, execute: action)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
public func schedule(after date: SchedulerTimeType, interval: SchedulerTimeType.Stride,
|
|
87
|
+
tolerance: SchedulerTimeType.Stride, options: SchedulerOptions?,
|
|
88
|
+
_ action: @escaping () -> Void) -> any Cancellable {
|
|
89
|
+
_RepeatingSchedule.start(delay: max(0, Double(now.distance(to: date).magnitude)) / 1e9,
|
|
90
|
+
interval: Double(interval.magnitude) / 1e9, action: action)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// MARK: - RunLoop
|
|
95
|
+
|
|
96
|
+
extension FoundationBridge.RunLoop: Scheduler {
|
|
97
|
+
/// An instant: a `Date`.
|
|
98
|
+
public struct SchedulerTimeType: Strideable, Codable, Hashable, Sendable {
|
|
99
|
+
public var date: Date
|
|
100
|
+
|
|
101
|
+
public init(_ date: Date) { self.date = date }
|
|
102
|
+
|
|
103
|
+
public func distance(to other: SchedulerTimeType) -> Stride {
|
|
104
|
+
Stride(other.date.timeIntervalSince(date))
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
public func advanced(by n: Stride) -> SchedulerTimeType {
|
|
108
|
+
SchedulerTimeType(date.addingTimeInterval(n.magnitude))
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/// A span of time, in seconds.
|
|
112
|
+
public struct Stride: SchedulerTimeIntervalConvertible, Comparable, SignedNumeric, ExpressibleByFloatLiteral,
|
|
113
|
+
Hashable, Codable, Sendable {
|
|
114
|
+
public var magnitude: TimeInterval
|
|
115
|
+
|
|
116
|
+
public init(_ timeInterval: TimeInterval) { magnitude = timeInterval }
|
|
117
|
+
public init(integerLiteral value: Int) { magnitude = TimeInterval(value) }
|
|
118
|
+
public init(floatLiteral value: Double) { magnitude = value }
|
|
119
|
+
public init?<T: BinaryInteger>(exactly source: T) {
|
|
120
|
+
guard let value = TimeInterval(exactly: source) else { return nil }
|
|
121
|
+
magnitude = value
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
public static func seconds(_ s: Int) -> Stride { Stride(TimeInterval(s)) }
|
|
125
|
+
public static func seconds(_ s: Double) -> Stride { Stride(s) }
|
|
126
|
+
public static func milliseconds(_ ms: Int) -> Stride { Stride(TimeInterval(ms) / 1e3) }
|
|
127
|
+
public static func microseconds(_ us: Int) -> Stride { Stride(TimeInterval(us) / 1e6) }
|
|
128
|
+
public static func nanoseconds(_ ns: Int) -> Stride { Stride(TimeInterval(ns) / 1e9) }
|
|
129
|
+
|
|
130
|
+
public static func < (lhs: Stride, rhs: Stride) -> Bool { lhs.magnitude < rhs.magnitude }
|
|
131
|
+
public static func + (lhs: Stride, rhs: Stride) -> Stride { Stride(lhs.magnitude + rhs.magnitude) }
|
|
132
|
+
public static func - (lhs: Stride, rhs: Stride) -> Stride { Stride(lhs.magnitude - rhs.magnitude) }
|
|
133
|
+
public static func * (lhs: Stride, rhs: Stride) -> Stride { Stride(lhs.magnitude * rhs.magnitude) }
|
|
134
|
+
public static func += (lhs: inout Stride, rhs: Stride) { lhs = lhs + rhs }
|
|
135
|
+
public static func -= (lhs: inout Stride, rhs: Stride) { lhs = lhs - rhs }
|
|
136
|
+
public static func *= (lhs: inout Stride, rhs: Stride) { lhs = lhs * rhs }
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
public struct SchedulerOptions: Sendable {}
|
|
141
|
+
|
|
142
|
+
public var now: SchedulerTimeType { SchedulerTimeType(Date()) }
|
|
143
|
+
public var minimumTolerance: SchedulerTimeType.Stride { SchedulerTimeType.Stride(0) }
|
|
144
|
+
|
|
145
|
+
public func schedule(options: SchedulerOptions?, _ action: @escaping () -> Void) {
|
|
146
|
+
FoundationBridge.DispatchQueue.main.async(execute: action)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
public func schedule(after date: SchedulerTimeType, tolerance: SchedulerTimeType.Stride,
|
|
150
|
+
options: SchedulerOptions?, _ action: @escaping () -> Void) {
|
|
151
|
+
FoundationBridge.DispatchQueue.main.asyncAfter(deadline: .now() + max(0, date.date.timeIntervalSinceNow),
|
|
152
|
+
execute: action)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
public func schedule(after date: SchedulerTimeType, interval: SchedulerTimeType.Stride,
|
|
156
|
+
tolerance: SchedulerTimeType.Stride, options: SchedulerOptions?,
|
|
157
|
+
_ action: @escaping () -> Void) -> any Cancellable {
|
|
158
|
+
_RepeatingSchedule.start(delay: max(0, date.date.timeIntervalSinceNow), interval: interval.magnitude, action: action)
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/// A repeating action on the executor's clock, until cancelled.
|
|
163
|
+
final class _RepeatingSchedule: Cancellable, @unchecked Sendable {
|
|
164
|
+
private var task: Task<Void, Never>?
|
|
165
|
+
|
|
166
|
+
static func start(delay: Double, interval: Double, action: @escaping () -> Void) -> _RepeatingSchedule {
|
|
167
|
+
let schedule = _RepeatingSchedule()
|
|
168
|
+
nonisolated(unsafe) let action = action
|
|
169
|
+
schedule.task = Task { @MainActor in
|
|
170
|
+
try? await Task.sleep(for: .seconds(delay))
|
|
171
|
+
while !Task.isCancelled {
|
|
172
|
+
action()
|
|
173
|
+
try? await Task.sleep(for: .seconds(max(interval, 0.001)))
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return schedule
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
func cancel() {
|
|
180
|
+
task?.cancel()
|
|
181
|
+
task = nil
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// MARK: - onReceive
|
|
186
|
+
|
|
187
|
+
/// A Combine publisher as the shim's `_Publisher`, for `onReceive`.
|
|
188
|
+
struct _CombinePublisher<Upstream: Publisher>: _Publisher where Upstream.Failure == Never {
|
|
189
|
+
let upstream: Upstream
|
|
190
|
+
|
|
191
|
+
@MainActor func _subscribe(_ receive: @escaping @MainActor (Upstream.Output) -> Void) -> any _Cancellable {
|
|
192
|
+
let cancellable = upstream.sink { value in
|
|
193
|
+
MainActor.assumeIsolated { receive(value) }
|
|
194
|
+
}
|
|
195
|
+
return _CombineCancellable(cancellable: cancellable)
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
struct _CombineCancellable: _Cancellable, @unchecked Sendable {
|
|
200
|
+
let cancellable: AnyCancellable
|
|
201
|
+
func cancel() { cancellable.cancel() }
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
extension View {
|
|
205
|
+
/// Runs `action` with each value the Combine publisher sends while the view is on screen.
|
|
206
|
+
@_disfavoredOverload
|
|
207
|
+
public func onReceive<P: Publisher>(_ publisher: P, perform action: @escaping (P.Output) -> Void) -> some View
|
|
208
|
+
where P.Failure == Never {
|
|
209
|
+
onReceive(_CombinePublisher(upstream: publisher), perform: action)
|
|
210
|
+
}
|
|
211
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Subject+Void.swift
|
|
3
|
+
// OpenCombine
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 10.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Subject where Output == Void {
|
|
9
|
+
|
|
10
|
+
/// Sends a void value to the subscriber.
|
|
11
|
+
///
|
|
12
|
+
/// Use `Void` inputs and outputs when you want to signal that an event has occurred,
|
|
13
|
+
/// but don’t need to send the event itself.
|
|
14
|
+
public func send() {
|
|
15
|
+
send(())
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Subscriber+Void.swift
|
|
3
|
+
// OpenCombine
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 10.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Subscriber where Input == Void {
|
|
9
|
+
|
|
10
|
+
/// Tells the subscriber that a publisher of void elements is ready to receive further
|
|
11
|
+
/// requests.
|
|
12
|
+
///
|
|
13
|
+
/// Use `Void` inputs and outputs when you want to signal that an event has occurred,
|
|
14
|
+
/// but don’t need to send the event itself.
|
|
15
|
+
/// - Returns: A `Subscribers.Demand` instance indicating how many more elements
|
|
16
|
+
/// the subscriber expects to receive.
|
|
17
|
+
public func receive() -> Subscribers.Demand {
|
|
18
|
+
return receive(())
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Subscribers.Assign.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 15.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Subscribers {
|
|
9
|
+
|
|
10
|
+
/// A simple subscriber that assigns received elements to a property indicated by
|
|
11
|
+
/// a key path.
|
|
12
|
+
public final class Assign<Root, Input>: Subscriber,
|
|
13
|
+
Cancellable,
|
|
14
|
+
CustomStringConvertible,
|
|
15
|
+
CustomReflectable,
|
|
16
|
+
CustomPlaygroundDisplayConvertible
|
|
17
|
+
{
|
|
18
|
+
public typealias Failure = Never
|
|
19
|
+
|
|
20
|
+
private let lock = UnfairLock.allocate()
|
|
21
|
+
|
|
22
|
+
/// The object that contains the property to assign.
|
|
23
|
+
///
|
|
24
|
+
/// The subscriber holds a strong reference to this object until the upstream
|
|
25
|
+
/// publisher calls `Subscriber.receive(completion:)`, at which point
|
|
26
|
+
/// the subscriber sets this property to `nil`.
|
|
27
|
+
public private(set) var object: Root?
|
|
28
|
+
|
|
29
|
+
/// The key path that indicates the property to assign.
|
|
30
|
+
public let keyPath: ReferenceWritableKeyPath<Root, Input>
|
|
31
|
+
|
|
32
|
+
private var status = SubscriptionStatus.awaitingSubscription
|
|
33
|
+
|
|
34
|
+
/// A textual representation of this subscriber.
|
|
35
|
+
public var description: String { return "Assign \(Root.self)." }
|
|
36
|
+
|
|
37
|
+
/// A mirror that reflects the subscriber.
|
|
38
|
+
public var customMirror: Mirror {
|
|
39
|
+
let children: [Mirror.Child] = [
|
|
40
|
+
("object", object as Any),
|
|
41
|
+
("keyPath", keyPath),
|
|
42
|
+
("status", status as Any)
|
|
43
|
+
]
|
|
44
|
+
return Mirror(self, children: children)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public var playgroundDescription: Any { return description }
|
|
48
|
+
|
|
49
|
+
/// Creates a subscriber to assign the value of a property indicated by
|
|
50
|
+
/// a key path.
|
|
51
|
+
///
|
|
52
|
+
/// - Parameters:
|
|
53
|
+
/// - object: The object that contains the property. The subscriber assigns
|
|
54
|
+
/// the object’s property every time it receives a new value.
|
|
55
|
+
/// - keyPath: A key path that indicates the property to assign. See
|
|
56
|
+
/// [Key-Path Expression](https://docs.swift.org/swift-book/ReferenceManual/Expressions.html#ID563)
|
|
57
|
+
/// in _The Swift Programming Language_ to learn how to use key paths to
|
|
58
|
+
/// specify a property of an object.
|
|
59
|
+
public init(object: Root, keyPath: ReferenceWritableKeyPath<Root, Input>) {
|
|
60
|
+
self.object = object
|
|
61
|
+
self.keyPath = keyPath
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
deinit {
|
|
65
|
+
lock.deallocate()
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public func receive(subscription: Subscription) {
|
|
69
|
+
lock.lock()
|
|
70
|
+
guard case .awaitingSubscription = status else {
|
|
71
|
+
lock.unlock()
|
|
72
|
+
subscription.cancel()
|
|
73
|
+
return
|
|
74
|
+
}
|
|
75
|
+
status = .subscribed(subscription)
|
|
76
|
+
lock.unlock()
|
|
77
|
+
subscription.request(.unlimited)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public func receive(_ value: Input) -> Subscribers.Demand {
|
|
81
|
+
lock.lock()
|
|
82
|
+
guard case .subscribed = status, let object = self.object else {
|
|
83
|
+
lock.unlock()
|
|
84
|
+
return .none
|
|
85
|
+
}
|
|
86
|
+
lock.unlock()
|
|
87
|
+
object[keyPath: keyPath] = value
|
|
88
|
+
return .none
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
public func receive(completion: Subscribers.Completion<Never>) {
|
|
92
|
+
lock.lock()
|
|
93
|
+
guard case .subscribed = status else {
|
|
94
|
+
lock.unlock()
|
|
95
|
+
return
|
|
96
|
+
}
|
|
97
|
+
terminateAndConsumeLock()
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public func cancel() {
|
|
101
|
+
lock.lock()
|
|
102
|
+
guard case let .subscribed(subscription) = status else {
|
|
103
|
+
lock.unlock()
|
|
104
|
+
return
|
|
105
|
+
}
|
|
106
|
+
terminateAndConsumeLock()
|
|
107
|
+
subscription.cancel()
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private func terminateAndConsumeLock() {
|
|
111
|
+
#if DEBUG
|
|
112
|
+
lock.assertOwner()
|
|
113
|
+
#endif
|
|
114
|
+
status = .terminal
|
|
115
|
+
|
|
116
|
+
// We MUST release the object AFTER unlocking the lock,
|
|
117
|
+
// since releasing it may trigger execution of arbitrary code,
|
|
118
|
+
// for example, if the object has a deinit.
|
|
119
|
+
// When the object deallocates, its deinit is called, and holding
|
|
120
|
+
// the lock at that moment can lead to deadlocks.
|
|
121
|
+
|
|
122
|
+
withExtendedLifetime(object) {
|
|
123
|
+
object = nil
|
|
124
|
+
lock.unlock()
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
extension Publisher where Failure == Never {
|
|
131
|
+
|
|
132
|
+
/// Assigns each element from a publisher to a property on an object.
|
|
133
|
+
///
|
|
134
|
+
/// Use the `assign(to:on:)` subscriber when you want to set a given property each
|
|
135
|
+
/// time a publisher produces a value.
|
|
136
|
+
///
|
|
137
|
+
/// In this example, the `assign(to:on:)` sets the value of the `anInt` property on
|
|
138
|
+
/// an instance of `MyClass`:
|
|
139
|
+
///
|
|
140
|
+
/// class MyClass {
|
|
141
|
+
/// var anInt: Int = 0 {
|
|
142
|
+
/// didSet {
|
|
143
|
+
/// print("anInt was set to: \(anInt)", terminator: "; ")
|
|
144
|
+
/// }
|
|
145
|
+
/// }
|
|
146
|
+
/// }
|
|
147
|
+
///
|
|
148
|
+
/// var myObject = MyClass()
|
|
149
|
+
/// let myRange = (0...2)
|
|
150
|
+
/// cancellable = myRange.publisher
|
|
151
|
+
/// .assign(to: \.anInt, on: myObject)
|
|
152
|
+
///
|
|
153
|
+
/// // Prints: "anInt was set to: 0; anInt was set to: 1; anInt was set to: 2"
|
|
154
|
+
///
|
|
155
|
+
/// > Important: The `Subscribers.Assign` instance created by this operator maintains
|
|
156
|
+
/// a strong reference to `object`, and sets it to `nil` when the upstream publisher
|
|
157
|
+
/// completes (either normally or with an error).
|
|
158
|
+
///
|
|
159
|
+
/// - Parameters:
|
|
160
|
+
/// - keyPath: A key path that indicates the property to assign. See
|
|
161
|
+
/// [Key-Path Expression](https://docs.swift.org/swift-book/ReferenceManual/Expressions.html#ID563)
|
|
162
|
+
/// in _The Swift Programming Language_ to learn how to use key paths to specify
|
|
163
|
+
/// a property of an object.
|
|
164
|
+
/// - object: The object that contains the property. The subscriber assigns
|
|
165
|
+
/// the object’s property every time it receives a new value.
|
|
166
|
+
/// - Returns: An `AnyCancellable` instance. Call `cancel()` on this instance when you
|
|
167
|
+
/// no longer want the publisher to automatically assign the property.
|
|
168
|
+
/// Deinitializing this instance will also cancel automatic assignment.
|
|
169
|
+
public func assign<Root>(to keyPath: ReferenceWritableKeyPath<Root, Output>,
|
|
170
|
+
on object: Root) -> AnyCancellable {
|
|
171
|
+
let subscriber = Subscribers.Assign(object: object, keyPath: keyPath)
|
|
172
|
+
subscribe(subscriber)
|
|
173
|
+
return AnyCancellable(subscriber)
|
|
174
|
+
}
|
|
175
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Subscribers.Completion.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 11.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#if canImport(_Concurrency) && compiler(>=5.5)
|
|
9
|
+
import _Concurrency
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
extension Subscribers {
|
|
13
|
+
|
|
14
|
+
/// A signal that a publisher doesn’t produce additional elements, either due to
|
|
15
|
+
/// normal completion or an error.
|
|
16
|
+
public enum Completion<Failure: Error> {
|
|
17
|
+
|
|
18
|
+
/// The publisher finished normally.
|
|
19
|
+
case finished
|
|
20
|
+
|
|
21
|
+
/// The publisher stopped publishing due to the indicated error.
|
|
22
|
+
case failure(Failure)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
extension Subscribers.Completion: Equatable where Failure: Equatable {}
|
|
27
|
+
|
|
28
|
+
extension Subscribers.Completion: Hashable where Failure: Hashable {}
|
|
29
|
+
|
|
30
|
+
#if canImport(_Concurrency) && compiler(>=5.5) || compiler(>=5.5.1)
|
|
31
|
+
extension Subscribers.Completion: Sendable {}
|
|
32
|
+
#endif
|
|
33
|
+
|
|
34
|
+
extension Subscribers.Completion {
|
|
35
|
+
private enum CodingKeys: String, CodingKey {
|
|
36
|
+
case success = "success"
|
|
37
|
+
case error = "error"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
extension Subscribers.Completion: Encodable where Failure: Encodable {
|
|
42
|
+
|
|
43
|
+
public func encode(to encoder: Encoder) throws {
|
|
44
|
+
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
45
|
+
switch self {
|
|
46
|
+
case .finished:
|
|
47
|
+
try container.encode(true, forKey: .success)
|
|
48
|
+
case .failure(let error):
|
|
49
|
+
try container.encode(false, forKey: .success)
|
|
50
|
+
try container.encode(error, forKey: .error)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
extension Subscribers.Completion: Decodable where Failure: Decodable {
|
|
56
|
+
public init(from decoder: Decoder) throws {
|
|
57
|
+
let container = try decoder.container(keyedBy: CodingKeys.self)
|
|
58
|
+
let success = try container.decode(Bool.self, forKey: .success)
|
|
59
|
+
if success {
|
|
60
|
+
self = .finished
|
|
61
|
+
} else {
|
|
62
|
+
let error = try container.decode(Failure.self, forKey: .error)
|
|
63
|
+
self = .failure(error)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
extension Subscribers.Completion {
|
|
69
|
+
|
|
70
|
+
/// Erases the `Failure` type to `Swift.Error`. This function exists
|
|
71
|
+
/// because in Swift user-defined generic types are always
|
|
72
|
+
/// [invariant](https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)).
|
|
73
|
+
internal func eraseError() -> Subscribers.Completion<Error> {
|
|
74
|
+
switch self {
|
|
75
|
+
case .finished:
|
|
76
|
+
return .finished
|
|
77
|
+
case .failure(let error):
|
|
78
|
+
return .failure(error)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
internal var failure: Failure? {
|
|
83
|
+
switch self {
|
|
84
|
+
case .finished:
|
|
85
|
+
return nil
|
|
86
|
+
case .failure(let failure):
|
|
87
|
+
return failure
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|