@swiftbrowser/swift 0.1.0 → 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 +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 +65 -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 +105 -7
- package/Sources/SwiftUI/API/Entry.swift +8 -0
- package/Sources/SwiftUI/API/Environment.swift +93 -9
- package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
- package/Sources/SwiftUI/API/Focus.swift +11 -3
- package/Sources/SwiftUI/API/Gauge.swift +3 -2
- 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 +67 -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 +80 -10
- 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 +11 -2
- 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 +164 -37
- 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 +96 -0
- package/Sources/SwiftUI/API/Shape.swift +214 -0
- package/Sources/SwiftUI/API/ShapeStyle.swift +105 -7
- 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 +10 -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 +498 -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 +39 -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,148 @@
|
|
|
1
|
+
//
|
|
2
|
+
// AnyPublisher.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 10.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
extension Publisher {
|
|
9
|
+
|
|
10
|
+
/// Wraps this publisher with a type eraser.
|
|
11
|
+
///
|
|
12
|
+
/// Use `eraseToAnyPublisher()` to expose an instance of `AnyPublisher`` to
|
|
13
|
+
/// the downstream subscriber, rather than this publisher’s actual type.
|
|
14
|
+
/// This form of _type erasure_ preserves abstraction across API boundaries, such as
|
|
15
|
+
/// different modules.
|
|
16
|
+
/// When you expose your publishers as the `AnyPublisher` type, you can change
|
|
17
|
+
/// the underlying implementation over time without affecting existing clients.
|
|
18
|
+
///
|
|
19
|
+
/// The following example shows two types that each have a `publisher` property.
|
|
20
|
+
/// `TypeWithSubject` exposes this property as its actual type, `PassthroughSubject`,
|
|
21
|
+
/// while `TypeWithErasedSubject` uses `eraseToAnyPublisher()` to expose it as
|
|
22
|
+
/// an `AnyPublisher`. As seen in the output, a caller from another module can access
|
|
23
|
+
/// `TypeWithSubject.publisher` as its native type. This means you can’t change your
|
|
24
|
+
/// publisher to a different type without breaking the caller. By comparison,
|
|
25
|
+
/// `TypeWithErasedSubject.publisher` appears to callers as an `AnyPublisher`, so you
|
|
26
|
+
/// can change the underlying publisher type at will.
|
|
27
|
+
///
|
|
28
|
+
/// public class TypeWithSubject {
|
|
29
|
+
/// public let publisher: some Publisher = PassthroughSubject<Int,Never>()
|
|
30
|
+
/// }
|
|
31
|
+
/// public class TypeWithErasedSubject {
|
|
32
|
+
/// public let publisher: some Publisher = PassthroughSubject<Int,Never>()
|
|
33
|
+
/// .eraseToAnyPublisher()
|
|
34
|
+
/// }
|
|
35
|
+
///
|
|
36
|
+
/// // In another module:
|
|
37
|
+
/// let nonErased = TypeWithSubject()
|
|
38
|
+
/// if let subject = nonErased.publisher as? PassthroughSubject<Int,Never> {
|
|
39
|
+
/// print("Successfully cast nonErased.publisher.")
|
|
40
|
+
/// }
|
|
41
|
+
/// let erased = TypeWithErasedSubject()
|
|
42
|
+
/// if let subject = erased.publisher as? PassthroughSubject<Int,Never> {
|
|
43
|
+
/// print("Successfully cast erased.publisher.")
|
|
44
|
+
/// }
|
|
45
|
+
///
|
|
46
|
+
/// // Prints "Successfully cast nonErased.publisher."
|
|
47
|
+
///
|
|
48
|
+
/// - Returns: An ``AnyPublisher`` wrapping this publisher.
|
|
49
|
+
@inlinable
|
|
50
|
+
public func eraseToAnyPublisher() -> AnyPublisher<Output, Failure> {
|
|
51
|
+
return .init(self)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/// A type-erasing publisher.
|
|
56
|
+
///
|
|
57
|
+
/// Use `AnyPublisher` to wrap a publisher whose type has details you don’t want to expose
|
|
58
|
+
/// across API boundaries, such as different modules. Wrapping a `Subject` with
|
|
59
|
+
/// `AnyPublisher` also prevents callers from accessing its `send(_:)` method. When you
|
|
60
|
+
/// use type erasure this way, you can change the underlying publisher implementation over
|
|
61
|
+
/// time without affecting existing clients.
|
|
62
|
+
///
|
|
63
|
+
/// You can use OpenCombine’s `eraseToAnyPublisher()` operator to wrap a publisher with
|
|
64
|
+
/// `AnyPublisher`.
|
|
65
|
+
public struct AnyPublisher<Output, Failure: Error>
|
|
66
|
+
: CustomStringConvertible,
|
|
67
|
+
CustomPlaygroundDisplayConvertible
|
|
68
|
+
{
|
|
69
|
+
@usableFromInline
|
|
70
|
+
internal let box: PublisherBoxBase<Output, Failure>
|
|
71
|
+
|
|
72
|
+
/// Creates a type-erasing publisher to wrap the provided publisher.
|
|
73
|
+
///
|
|
74
|
+
/// - Parameter publisher: A publisher to wrap with a type-eraser.
|
|
75
|
+
@inlinable
|
|
76
|
+
public init<PublisherType: Publisher>(_ publisher: PublisherType)
|
|
77
|
+
where Output == PublisherType.Output, Failure == PublisherType.Failure
|
|
78
|
+
{
|
|
79
|
+
// If this has already been boxed, avoid boxing again
|
|
80
|
+
if let erased = publisher as? AnyPublisher<Output, Failure> {
|
|
81
|
+
box = erased.box
|
|
82
|
+
} else {
|
|
83
|
+
box = PublisherBox(base: publisher)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
public var description: String {
|
|
88
|
+
return "AnyPublisher"
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
public var playgroundDescription: Any {
|
|
92
|
+
return description
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
extension AnyPublisher: Publisher {
|
|
97
|
+
|
|
98
|
+
/// This function is called to attach the specified `Subscriber` to this `Publisher`
|
|
99
|
+
/// by `subscribe(_:)`
|
|
100
|
+
///
|
|
101
|
+
/// - SeeAlso: `subscribe(_:)`
|
|
102
|
+
/// - Parameters:
|
|
103
|
+
/// - subscriber: The subscriber to attach to this `Publisher`.
|
|
104
|
+
/// once attached it can begin to receive values.
|
|
105
|
+
@inlinable
|
|
106
|
+
public func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
107
|
+
where Output == Downstream.Input, Failure == Downstream.Failure
|
|
108
|
+
{
|
|
109
|
+
box.receive(subscriber: subscriber)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/// A type-erasing base class. Its concrete subclass is generic over the underlying
|
|
114
|
+
/// publisher.
|
|
115
|
+
@usableFromInline
|
|
116
|
+
internal class PublisherBoxBase<Output, Failure: Error>: Publisher {
|
|
117
|
+
|
|
118
|
+
@inlinable
|
|
119
|
+
internal init() {}
|
|
120
|
+
|
|
121
|
+
@usableFromInline
|
|
122
|
+
internal func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
123
|
+
where Failure == Downstream.Failure, Output == Downstream.Input
|
|
124
|
+
{
|
|
125
|
+
abstractMethod()
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@usableFromInline
|
|
130
|
+
internal final class PublisherBox<PublisherType: Publisher>
|
|
131
|
+
: PublisherBoxBase<PublisherType.Output, PublisherType.Failure>
|
|
132
|
+
{
|
|
133
|
+
@usableFromInline
|
|
134
|
+
internal let base: PublisherType
|
|
135
|
+
|
|
136
|
+
@inlinable
|
|
137
|
+
internal init(base: PublisherType) {
|
|
138
|
+
self.base = base
|
|
139
|
+
super.init()
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
@inlinable
|
|
143
|
+
override internal func receive<Downstream: Subscriber>(subscriber: Downstream)
|
|
144
|
+
where Failure == Downstream.Failure, Output == Downstream.Input
|
|
145
|
+
{
|
|
146
|
+
base.receive(subscriber: subscriber)
|
|
147
|
+
}
|
|
148
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
//
|
|
2
|
+
// AnySubscriber.swift
|
|
3
|
+
// OpenCombine
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 10.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
/// A type-erasing subscriber.
|
|
9
|
+
///
|
|
10
|
+
/// Use an `AnySubscriber` to wrap an existing subscriber whose details you don’t want to
|
|
11
|
+
/// expose. You can also use `AnySubscriber` to create a custom subscriber by providing
|
|
12
|
+
/// closures for the methods defined in `Subscriber`, rather than implementing
|
|
13
|
+
/// `Subscriber` directly.
|
|
14
|
+
public struct AnySubscriber<Input, Failure: Error>: Subscriber,
|
|
15
|
+
CustomStringConvertible,
|
|
16
|
+
CustomReflectable,
|
|
17
|
+
CustomPlaygroundDisplayConvertible
|
|
18
|
+
{
|
|
19
|
+
@usableFromInline
|
|
20
|
+
internal let box: AnySubscriberBase<Input, Failure>
|
|
21
|
+
|
|
22
|
+
@usableFromInline
|
|
23
|
+
internal let descriptionThunk: () -> String
|
|
24
|
+
|
|
25
|
+
@usableFromInline
|
|
26
|
+
internal let customMirrorThunk: () -> Mirror
|
|
27
|
+
|
|
28
|
+
@usableFromInline
|
|
29
|
+
internal let playgroundDescriptionThunk: () -> Any
|
|
30
|
+
|
|
31
|
+
public let combineIdentifier: CombineIdentifier
|
|
32
|
+
|
|
33
|
+
public var description: String { return descriptionThunk() }
|
|
34
|
+
|
|
35
|
+
public var customMirror: Mirror { return customMirrorThunk() }
|
|
36
|
+
|
|
37
|
+
/// A custom playground description for this instance.
|
|
38
|
+
public var playgroundDescription: Any { return playgroundDescriptionThunk() }
|
|
39
|
+
|
|
40
|
+
/// Creates a type-erasing subscriber to wrap an existing subscriber.
|
|
41
|
+
///
|
|
42
|
+
/// - Parameter s: The subscriber to type-erase.
|
|
43
|
+
@inline(__always)
|
|
44
|
+
@inlinable
|
|
45
|
+
public init<Subscriber: Combine.Subscriber>(_ subscriber: Subscriber)
|
|
46
|
+
where Input == Subscriber.Input, Failure == Subscriber.Failure
|
|
47
|
+
{
|
|
48
|
+
if let erased = subscriber as? AnySubscriber<Input, Failure> {
|
|
49
|
+
self = erased
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
combineIdentifier = subscriber.combineIdentifier
|
|
54
|
+
|
|
55
|
+
box = AnySubscriberBox(subscriber)
|
|
56
|
+
|
|
57
|
+
if let description = subscriber as? CustomStringConvertible {
|
|
58
|
+
descriptionThunk = { description.description }
|
|
59
|
+
} else {
|
|
60
|
+
let fixedDescription = String(describing: type(of: subscriber))
|
|
61
|
+
descriptionThunk = { fixedDescription }
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
customMirrorThunk = {
|
|
65
|
+
(subscriber as? CustomReflectable)?.customMirror
|
|
66
|
+
?? Mirror(subscriber, children: EmptyCollection())
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if let playgroundDescription = subscriber as? CustomPlaygroundDisplayConvertible {
|
|
70
|
+
playgroundDescriptionThunk = { playgroundDescription.playgroundDescription }
|
|
71
|
+
} else if let description = subscriber as? CustomStringConvertible {
|
|
72
|
+
playgroundDescriptionThunk = { description.description }
|
|
73
|
+
} else {
|
|
74
|
+
let fixedDescription = String(describing: type(of: subscriber))
|
|
75
|
+
playgroundDescriptionThunk = { fixedDescription }
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
public init<Subject: Combine.Subject>(_ subject: Subject)
|
|
80
|
+
where Input == Subject.Output, Failure == Subject.Failure
|
|
81
|
+
{
|
|
82
|
+
self.init(SubjectSubscriber(subject))
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/// Creates a type-erasing subscriber that executes the provided closures.
|
|
86
|
+
///
|
|
87
|
+
/// - Parameters:
|
|
88
|
+
/// - receiveSubscription: A closure to execute when the subscriber receives
|
|
89
|
+
/// the initial subscription from the publisher.
|
|
90
|
+
/// - receiveValue: A closure to execute when the subscriber receives a value from
|
|
91
|
+
/// the publisher.
|
|
92
|
+
/// - receiveCompletion: A closure to execute when the subscriber receives
|
|
93
|
+
/// a completion callback from the publisher.
|
|
94
|
+
@inline(__always)
|
|
95
|
+
@inlinable
|
|
96
|
+
public init(receiveSubscription: ((Subscription) -> Void)? = nil,
|
|
97
|
+
receiveValue: ((Input) -> Subscribers.Demand)? = nil,
|
|
98
|
+
receiveCompletion: ((Subscribers.Completion<Failure>) -> Void)? = nil) {
|
|
99
|
+
|
|
100
|
+
box = ClosureBasedAnySubscriber(
|
|
101
|
+
receiveSubscription ?? { _ in },
|
|
102
|
+
receiveValue ?? { _ in .none },
|
|
103
|
+
receiveCompletion ?? { _ in }
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
combineIdentifier = CombineIdentifier()
|
|
107
|
+
descriptionThunk = { "Anonymous AnySubscriber" }
|
|
108
|
+
customMirrorThunk = { Mirror(reflecting: "Anonymous AnySubscriber") }
|
|
109
|
+
playgroundDescriptionThunk = { "Anonymous AnySubscriber" }
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@inline(__always)
|
|
113
|
+
@inlinable
|
|
114
|
+
public func receive(subscription: Subscription) {
|
|
115
|
+
box.receive(subscription: subscription)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@inline(__always)
|
|
119
|
+
@inlinable
|
|
120
|
+
public func receive(_ value: Input) -> Subscribers.Demand {
|
|
121
|
+
return box.receive(value)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@inline(__always)
|
|
125
|
+
@inlinable
|
|
126
|
+
public func receive(completion: Subscribers.Completion<Failure>) {
|
|
127
|
+
box.receive(completion: completion)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// A type-erasing base class. Its concrete subclass is generic over the underlying
|
|
132
|
+
/// subscriber.
|
|
133
|
+
@usableFromInline
|
|
134
|
+
internal class AnySubscriberBase<Input, Failure: Error>: Subscriber {
|
|
135
|
+
|
|
136
|
+
@inline(__always)
|
|
137
|
+
@inlinable
|
|
138
|
+
internal init() {}
|
|
139
|
+
|
|
140
|
+
@inline(__always)
|
|
141
|
+
@inlinable
|
|
142
|
+
deinit {}
|
|
143
|
+
|
|
144
|
+
@usableFromInline
|
|
145
|
+
internal func receive(subscription: Subscription) {
|
|
146
|
+
abstractMethod()
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
@usableFromInline
|
|
150
|
+
internal func receive(_ input: Input) -> Subscribers.Demand {
|
|
151
|
+
abstractMethod()
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
@usableFromInline
|
|
155
|
+
internal func receive(completion: Subscribers.Completion<Failure>) {
|
|
156
|
+
abstractMethod()
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
@usableFromInline
|
|
161
|
+
internal final class AnySubscriberBox<Base: Subscriber>
|
|
162
|
+
: AnySubscriberBase<Base.Input, Base.Failure>
|
|
163
|
+
{
|
|
164
|
+
@usableFromInline
|
|
165
|
+
internal let base: Base
|
|
166
|
+
|
|
167
|
+
@inlinable
|
|
168
|
+
internal init(_ base: Base) {
|
|
169
|
+
self.base = base
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
@inlinable
|
|
173
|
+
deinit {}
|
|
174
|
+
|
|
175
|
+
@inlinable
|
|
176
|
+
override internal func receive(subscription: Subscription) {
|
|
177
|
+
base.receive(subscription: subscription)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
@inlinable
|
|
181
|
+
override internal func receive(_ input: Base.Input) -> Subscribers.Demand {
|
|
182
|
+
return base.receive(input)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@inlinable
|
|
186
|
+
override internal func receive(completion: Subscribers.Completion<Base.Failure>) {
|
|
187
|
+
base.receive(completion: completion)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
@usableFromInline
|
|
192
|
+
internal final class ClosureBasedAnySubscriber<Input, Failure: Error>
|
|
193
|
+
: AnySubscriberBase<Input, Failure>
|
|
194
|
+
{
|
|
195
|
+
@usableFromInline
|
|
196
|
+
internal let receiveSubscriptionThunk: (Subscription) -> Void
|
|
197
|
+
|
|
198
|
+
@usableFromInline
|
|
199
|
+
internal let receiveValueThunk: (Input) -> Subscribers.Demand
|
|
200
|
+
|
|
201
|
+
@usableFromInline
|
|
202
|
+
internal let receiveCompletionThunk: (Subscribers.Completion<Failure>) -> Void
|
|
203
|
+
|
|
204
|
+
@inlinable
|
|
205
|
+
internal init(_ rcvSubscription: @escaping (Subscription) -> Void,
|
|
206
|
+
_ rcvValue: @escaping (Input) -> Subscribers.Demand,
|
|
207
|
+
_ rcvCompletion: @escaping (Subscribers.Completion<Failure>) -> Void) {
|
|
208
|
+
receiveSubscriptionThunk = rcvSubscription
|
|
209
|
+
receiveValueThunk = rcvValue
|
|
210
|
+
receiveCompletionThunk = rcvCompletion
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@inlinable
|
|
214
|
+
deinit {}
|
|
215
|
+
|
|
216
|
+
@inlinable
|
|
217
|
+
override internal func receive(subscription: Subscription) {
|
|
218
|
+
receiveSubscriptionThunk(subscription)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
@inlinable
|
|
222
|
+
override internal func receive(_ input: Input) -> Subscribers.Demand {
|
|
223
|
+
return receiveValueThunk(input)
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
@inlinable
|
|
227
|
+
override internal func receive(completion: Subscribers.Completion<Failure>) {
|
|
228
|
+
receiveCompletionThunk(completion)
|
|
229
|
+
}
|
|
230
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Cancellable.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 10.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
/// A protocol indicating that an activity or action supports cancellation.
|
|
9
|
+
///
|
|
10
|
+
/// Calling `cancel()` frees up any allocated resources. It also stops side effects such
|
|
11
|
+
/// as timers, network access, or disk I/O.
|
|
12
|
+
public protocol Cancellable {
|
|
13
|
+
|
|
14
|
+
/// Cancel the activity.
|
|
15
|
+
func cancel()
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
extension Cancellable {
|
|
19
|
+
|
|
20
|
+
/// Stores this cancellable instance in the specified collection.
|
|
21
|
+
///
|
|
22
|
+
/// - Parameter collection: The collection in which to store this `Cancellable`.
|
|
23
|
+
public func store<Cancellables: RangeReplaceableCollection>(
|
|
24
|
+
in collection: inout Cancellables
|
|
25
|
+
) where Cancellables.Element == AnyCancellable {
|
|
26
|
+
AnyCancellable(self).store(in: &collection)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/// Stores this cancellable instance in the specified set.
|
|
30
|
+
///
|
|
31
|
+
/// - Parameter set: The set in which to store this `Cancellable`.
|
|
32
|
+
public func store(in set: inout Set<AnyCancellable>) {
|
|
33
|
+
AnyCancellable(self).store(in: &set)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Codable.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 11.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
/// A type that defines methods for decoding.
|
|
9
|
+
public protocol TopLevelDecoder {
|
|
10
|
+
|
|
11
|
+
/// The type this decoder accepts.
|
|
12
|
+
associatedtype Input
|
|
13
|
+
|
|
14
|
+
/// Decodes an instance of the indicated type.
|
|
15
|
+
func decode<DecodablyType: Decodable>(_ type: DecodablyType.Type,
|
|
16
|
+
from: Input) throws -> DecodablyType
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/// A type that defines methods for encoding.
|
|
20
|
+
public protocol TopLevelEncoder {
|
|
21
|
+
|
|
22
|
+
/// The type this encoder produces.
|
|
23
|
+
associatedtype Output
|
|
24
|
+
|
|
25
|
+
/// Encodes an instance of the indicated type.
|
|
26
|
+
///
|
|
27
|
+
/// - Parameter value: The instance to encode.
|
|
28
|
+
func encode<EncodableType: Encodable>(_ value: EncodableType) throws -> Output
|
|
29
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//
|
|
2
|
+
// CombineIdentifier.swift
|
|
3
|
+
// OpenCombine
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 10.06.2019.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#if canImport(COpenCombineHelpers)
|
|
9
|
+
import COpenCombineHelpers
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
#if WASI
|
|
13
|
+
private var __identifier: UInt64 = 0
|
|
14
|
+
|
|
15
|
+
internal func __nextCombineIdentifier() -> UInt64 {
|
|
16
|
+
defer { __identifier += 1 }
|
|
17
|
+
return __identifier
|
|
18
|
+
}
|
|
19
|
+
#endif // WASI
|
|
20
|
+
|
|
21
|
+
/// A unique identifier for identifying publisher streams.
|
|
22
|
+
///
|
|
23
|
+
/// To conform to `CustomCombineIdentifierConvertible` in a
|
|
24
|
+
/// `Subscription` or `Subject` that you implement as a structure, create an instance of
|
|
25
|
+
/// `CombineIdentifier` as follows:
|
|
26
|
+
///
|
|
27
|
+
/// let combineIdentifier = CombineIdentifier()
|
|
28
|
+
public struct CombineIdentifier: Hashable, CustomStringConvertible {
|
|
29
|
+
|
|
30
|
+
private let rawValue: UInt64
|
|
31
|
+
|
|
32
|
+
/// Creates a unique Combine identifier.
|
|
33
|
+
public init() {
|
|
34
|
+
rawValue = __nextCombineIdentifier()
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/// Creates a Combine identifier, using the bit pattern of the provided object.
|
|
38
|
+
public init(_ obj: AnyObject) {
|
|
39
|
+
rawValue = UInt64(UInt(bitPattern: ObjectIdentifier(obj)))
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public var description: String {
|
|
43
|
+
return "0x\(String(rawValue, radix: 16))"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ConcurrencyHelpers.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 14.11.2022.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#if canImport(_Concurrency) && compiler(>=5.5)
|
|
9
|
+
import _Concurrency
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
#if (canImport(_Concurrency) && compiler(>=5.5) || compiler(>=5.5.1)) && swift(<5.7)
|
|
13
|
+
/// A polyfill for pre-5.7 Swift versions.
|
|
14
|
+
@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
|
|
15
|
+
internal func withTaskCancellationHandler<T>( // swiftlint:disable:this generic_type_name
|
|
16
|
+
operation: () async throws -> T,
|
|
17
|
+
onCancel handler: @Sendable () -> Void
|
|
18
|
+
) async rethrows -> T {
|
|
19
|
+
return try await withTaskCancellationHandler(
|
|
20
|
+
handler: handler,
|
|
21
|
+
operation: operation
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
#endif
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Future+Concurrency.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Sergej Jaskiewicz on 28.08.2021.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#if canImport(_Concurrency) && compiler(>=5.5)
|
|
9
|
+
import _Concurrency
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
#if canImport(_Concurrency) && compiler(>=5.5) || compiler(>=5.5.1)
|
|
13
|
+
extension Future where Failure == Never {
|
|
14
|
+
|
|
15
|
+
/// The published value of the future, delivered asynchronously.
|
|
16
|
+
///
|
|
17
|
+
/// This property subscribes to the `Future` and delivers the value asynchronously
|
|
18
|
+
/// when the `Future` publishes it. Use this property when you want to use
|
|
19
|
+
/// the `async`-`await` syntax with a `Future`.
|
|
20
|
+
@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
|
|
21
|
+
public var value: Output {
|
|
22
|
+
get async {
|
|
23
|
+
await ContinuationSubscriber.withUnsafeSubscription(self)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
extension Future {
|
|
29
|
+
|
|
30
|
+
/// The published value of the future or an error, delivered asynchronously.
|
|
31
|
+
///
|
|
32
|
+
/// This property subscribes to the `Future` and delivers the value asynchronously
|
|
33
|
+
/// when the `Future` publishes it. If the `Future` terminates with an error,
|
|
34
|
+
/// the awaiting caller receives the error instead. Use this property when you want
|
|
35
|
+
/// to the `async`-`await` syntax with a `Future` whose `Failure` type is not `Never`.
|
|
36
|
+
@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
|
|
37
|
+
public var value: Output {
|
|
38
|
+
get async throws {
|
|
39
|
+
try await ContinuationSubscriber.withUnsafeThrowingSubscription(self)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
|
|
45
|
+
private final class ContinuationSubscriber<Input,
|
|
46
|
+
UpstreamFailure: Error,
|
|
47
|
+
ErrorOrNever: Error>
|
|
48
|
+
: Subscriber
|
|
49
|
+
{
|
|
50
|
+
typealias Failure = UpstreamFailure
|
|
51
|
+
|
|
52
|
+
private var continuation: UnsafeContinuation<Input, ErrorOrNever>?
|
|
53
|
+
private var subscription: Subscription?
|
|
54
|
+
private let lock = UnfairLock.allocate()
|
|
55
|
+
|
|
56
|
+
private init(_ continuation: UnsafeContinuation<Input, ErrorOrNever>) {
|
|
57
|
+
self.continuation = continuation
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
deinit {
|
|
61
|
+
lock.deallocate()
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
func receive(subscription: Subscription) {
|
|
65
|
+
lock.lock()
|
|
66
|
+
guard self.subscription == nil else {
|
|
67
|
+
assertionFailure("Unexpected state: received subscription twice")
|
|
68
|
+
lock.unlock()
|
|
69
|
+
subscription.cancel()
|
|
70
|
+
return
|
|
71
|
+
}
|
|
72
|
+
self.subscription = subscription
|
|
73
|
+
lock.unlock()
|
|
74
|
+
subscription.request(.max(1))
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
func receive(_ input: Input) -> Subscribers.Demand {
|
|
78
|
+
lock.lock()
|
|
79
|
+
if let continuation = self.continuation.take() {
|
|
80
|
+
lock.unlock()
|
|
81
|
+
continuation.resume(returning: input)
|
|
82
|
+
} else {
|
|
83
|
+
assertionFailure("Unexpected state: already completed")
|
|
84
|
+
lock.unlock()
|
|
85
|
+
}
|
|
86
|
+
return .none
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
func receive(completion: Subscribers.Completion<Failure>) {
|
|
90
|
+
lock.lock()
|
|
91
|
+
subscription = nil
|
|
92
|
+
lock.unlock()
|
|
93
|
+
completion.failure.map(handleFailure)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
private func handleFailure(_ error: Failure) {
|
|
97
|
+
lock.lock()
|
|
98
|
+
if let continuation = self.continuation.take() {
|
|
99
|
+
lock.unlock()
|
|
100
|
+
continuation.resume(throwing: error as! ErrorOrNever)
|
|
101
|
+
} else {
|
|
102
|
+
assertionFailure("Unexpected state: already completed")
|
|
103
|
+
lock.unlock()
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
|
|
109
|
+
extension ContinuationSubscriber where ErrorOrNever == Error {
|
|
110
|
+
fileprivate static func withUnsafeThrowingSubscription<Upstream: Publisher>(
|
|
111
|
+
_ upstream: Upstream
|
|
112
|
+
) async throws -> Input
|
|
113
|
+
where Upstream.Output == Input,
|
|
114
|
+
Upstream.Failure == UpstreamFailure
|
|
115
|
+
{
|
|
116
|
+
try await withUnsafeThrowingContinuation { continuation in
|
|
117
|
+
upstream.subscribe(ContinuationSubscriber(continuation))
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
|
|
123
|
+
extension ContinuationSubscriber where UpstreamFailure == Never, ErrorOrNever == Never {
|
|
124
|
+
fileprivate static func withUnsafeSubscription<Upstream: Publisher>(
|
|
125
|
+
_ upstream: Upstream
|
|
126
|
+
) async -> Input
|
|
127
|
+
where Upstream.Output == Input,
|
|
128
|
+
Upstream.Failure == Never
|
|
129
|
+
{
|
|
130
|
+
await withUnsafeContinuation { continuation in
|
|
131
|
+
upstream.subscribe(ContinuationSubscriber(continuation))
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
#endif
|