@swiftbrowser/swift 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/Package.swift +200 -9
  2. package/README.md +7 -9
  3. package/Sources/AVFoundation/AVFoundation.swift +131 -0
  4. package/Sources/AVFoundation/Asset.swift +487 -0
  5. package/Sources/AVFoundation/AudioSession.swift +144 -0
  6. package/Sources/AVFoundation/CMTime.swift +303 -0
  7. package/Sources/AVFoundation/Capture.swift +688 -0
  8. package/Sources/AVFoundation/Player.swift +749 -0
  9. package/Sources/AVFoundation/PlayerView.swift +117 -0
  10. package/Sources/AVKit/AVKit.swift +132 -0
  11. package/Sources/Accelerate/Accelerate.swift +122 -0
  12. package/Sources/AppIntents/AppIntents.swift +144 -0
  13. package/Sources/AppIntents/Parameters.swift +220 -0
  14. package/Sources/AppIntents/Shortcuts.swift +159 -0
  15. package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
  16. package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
  17. package/Sources/AuthenticationServices/Authorization.swift +251 -0
  18. package/Sources/Charts/Charts.swift +0 -4
  19. package/Sources/Combine/AnyCancellable.swift +65 -0
  20. package/Sources/Combine/AnyPublisher.swift +148 -0
  21. package/Sources/Combine/AnySubscriber.swift +230 -0
  22. package/Sources/Combine/Cancellable.swift +35 -0
  23. package/Sources/Combine/Codable.swift +29 -0
  24. package/Sources/Combine/CombineIdentifier.swift +45 -0
  25. package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
  26. package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
  27. package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
  28. package/Sources/Combine/CurrentValueSubject.swift +252 -0
  29. package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
  30. package/Sources/Combine/Future.swift +228 -0
  31. package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
  32. package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
  33. package/Sources/Combine/Helpers/ConduitList.swift +59 -0
  34. package/Sources/Combine/Helpers/DebugHook.swift +177 -0
  35. package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
  36. package/Sources/Combine/Helpers/Locking.swift +30 -0
  37. package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
  38. package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
  39. package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
  40. package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
  41. package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
  42. package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
  43. package/Sources/Combine/Helpers/Utils.swift +30 -0
  44. package/Sources/Combine/Helpers/Violations.swift +33 -0
  45. package/Sources/Combine/ImmediateScheduler.swift +178 -0
  46. package/Sources/Combine/LICENSE +21 -0
  47. package/Sources/Combine/NotificationPublisher.swift +48 -0
  48. package/Sources/Combine/ObjectWillChange.swift +46 -0
  49. package/Sources/Combine/PassthroughSubject.swift +222 -0
  50. package/Sources/Combine/Publisher+Subscribe.swift +53 -0
  51. package/Sources/Combine/Publishers/Deferred.swift +48 -0
  52. package/Sources/Combine/Publishers/Empty.swift +54 -0
  53. package/Sources/Combine/Publishers/Fail.swift +42 -0
  54. package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
  55. package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
  56. package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
  57. package/Sources/Combine/Publishers/Just.swift +313 -0
  58. package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
  59. package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
  60. package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
  61. package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
  62. package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
  63. package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
  64. package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
  65. package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
  66. package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
  67. package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
  68. package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
  69. package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
  70. package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
  71. package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
  72. package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
  73. package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
  74. package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
  75. package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
  76. package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
  77. package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
  78. package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
  79. package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
  80. package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
  81. package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
  82. package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
  83. package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
  84. package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
  85. package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
  86. package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
  87. package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
  88. package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
  89. package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
  90. package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
  91. package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
  92. package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
  93. package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
  94. package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
  95. package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
  96. package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
  97. package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
  98. package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
  99. package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
  100. package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
  101. package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
  102. package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
  103. package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
  104. package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
  105. package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
  106. package/Sources/Combine/Publishers/Publishers.swift +13 -0
  107. package/Sources/Combine/Publishers/Record.swift +237 -0
  108. package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
  109. package/Sources/Combine/Result.swift +46 -0
  110. package/Sources/Combine/Scheduler.swift +89 -0
  111. package/Sources/Combine/Schedulers.swift +211 -0
  112. package/Sources/Combine/Subject+Void.swift +17 -0
  113. package/Sources/Combine/Subscriber+Void.swift +20 -0
  114. package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
  115. package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
  116. package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
  117. package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
  118. package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
  119. package/Sources/Combine/Subscription.swift +22 -0
  120. package/Sources/Combine/Subscriptions.swift +42 -0
  121. package/Sources/Combine/SwiftUIObservation.swift +10 -0
  122. package/Sources/Combine/_Introspection.swift +107 -0
  123. package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
  124. package/Sources/Compression/Compression.swift +365 -0
  125. package/Sources/Compression/Deflate.swift +407 -0
  126. package/Sources/Compression/Zlib.swift +179 -0
  127. package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
  128. package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
  129. package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
  130. package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
  131. package/Sources/CoreImage/CIColor.swift +41 -0
  132. package/Sources/CoreImage/CIContext.swift +31 -0
  133. package/Sources/CoreImage/CIDetector.swift +57 -0
  134. package/Sources/CoreImage/CIFilter.swift +243 -0
  135. package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
  136. package/Sources/CoreImage/CIImage.swift +162 -0
  137. package/Sources/CoreImage/QRCode.swift +393 -0
  138. package/Sources/CoreLocation/Coordinate.swift +30 -0
  139. package/Sources/CoreLocation/Location.swift +65 -0
  140. package/Sources/CoreML/Evaluation.swift +414 -0
  141. package/Sources/CoreML/FeatureValue.swift +266 -0
  142. package/Sources/CoreML/Model.swift +269 -0
  143. package/Sources/CoreML/MultiArray.swift +92 -0
  144. package/Sources/CoreML/Specification.swift +233 -0
  145. package/Sources/CoreText/CoreText.swift +64 -0
  146. package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
  147. package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
  148. package/Sources/CryptoKit/CryptoKit.swift +375 -0
  149. package/Sources/CryptoKit/Curve25519.swift +317 -0
  150. package/Sources/CryptoKit/P256.swift +321 -0
  151. package/Sources/FoundationBridge/AppStorage.swift +165 -0
  152. package/Sources/FoundationBridge/AssetResources.swift +90 -0
  153. package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
  154. package/Sources/FoundationBridge/AsyncImage.swift +116 -0
  155. package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
  156. package/Sources/{_FoundationCommon → FoundationBridge}/Bundle.swift +41 -4
  157. package/Sources/FoundationBridge/CombineExports.swift +8 -0
  158. package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
  159. package/Sources/FoundationBridge/Dispatch.swift +458 -0
  160. package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
  161. package/Sources/FoundationBridge/FileImporter.swift +128 -0
  162. package/Sources/FoundationBridge/FileSystem.swift +68 -0
  163. package/Sources/FoundationBridge/FoundationBridge.swift +24 -72
  164. package/Sources/FoundationBridge/HostResolution.swift +31 -0
  165. package/Sources/FoundationBridge/ItemProvider.swift +655 -0
  166. package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
  167. package/Sources/FoundationBridge/Links.swift +127 -0
  168. package/Sources/FoundationBridge/ListFormatter.swift +32 -0
  169. package/Sources/FoundationBridge/Localization.swift +149 -0
  170. package/Sources/FoundationBridge/Locks.swift +50 -0
  171. package/Sources/FoundationBridge/Markdown.swift +527 -0
  172. package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
  173. package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
  174. package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
  175. package/Sources/FoundationBridge/Operation.swift +195 -0
  176. package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
  177. package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
  178. package/Sources/FoundationBridge/SceneStorage.swift +78 -0
  179. package/Sources/FoundationBridge/SecurityExports.swift +8 -0
  180. package/Sources/FoundationBridge/Selector.swift +226 -0
  181. package/Sources/FoundationBridge/StringComparators.swift +17 -0
  182. package/Sources/FoundationBridge/Table.swift +211 -0
  183. package/Sources/FoundationBridge/TextAttributes.swift +42 -0
  184. package/Sources/FoundationBridge/Timer.swift +6 -1
  185. package/Sources/FoundationBridge/URLSession.swift +718 -0
  186. package/Sources/{_FoundationCommon → FoundationBridge}/UserDefaults.swift +17 -4
  187. package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
  188. package/Sources/FoundationBridge/WebSocket.swift +187 -0
  189. package/Sources/FoundationModels/FoundationModels.swift +1098 -0
  190. package/Sources/ImageIO/GIF.swift +72 -0
  191. package/Sources/ImageIO/ImageIO.swift +248 -0
  192. package/Sources/ImageIO/ImageTypes.swift +28 -0
  193. package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
  194. package/Sources/LocalAuthentication/LAContext.swift +86 -0
  195. package/Sources/MapKit/Geometry.swift +223 -0
  196. package/Sources/MapKit/Map.swift +638 -0
  197. package/Sources/MapKit/MapView.swift +229 -0
  198. package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
  199. package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
  200. package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
  201. package/Sources/OSLog/OSLog.swift +6 -0
  202. package/Sources/Photos/Photos.swift +572 -0
  203. package/Sources/PhotosUI/PhotosPicker.swift +248 -0
  204. package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
  205. package/Sources/QuickLook/QuickLook.swift +168 -0
  206. package/Sources/SafariServices/SafariServices.swift +106 -0
  207. package/Sources/Security/Security.swift +332 -0
  208. package/Sources/StoreKit/AppStore.swift +207 -0
  209. package/Sources/StoreKit/Products.swift +280 -0
  210. package/Sources/StoreKit/RequestReview.swift +28 -0
  211. package/Sources/StoreKit/StoreKit1.swift +486 -0
  212. package/Sources/StoreKit/StoreViews.swift +428 -0
  213. package/Sources/StoreKit/Transactions.swift +197 -0
  214. package/Sources/SwiftData/Macros.swift +58 -0
  215. package/Sources/SwiftData/ModelActor.swift +38 -0
  216. package/Sources/SwiftData/ModelContainer.swift +129 -0
  217. package/Sources/SwiftData/ModelContext.swift +451 -0
  218. package/Sources/SwiftData/PersistentModel.swift +238 -0
  219. package/Sources/SwiftData/Properties.swift +261 -0
  220. package/Sources/SwiftData/Query.swift +256 -0
  221. package/Sources/SwiftData/Schema.swift +192 -0
  222. package/Sources/SwiftData/Store.swift +146 -0
  223. package/Sources/SwiftData/StringPredicates.swift +125 -0
  224. package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
  225. package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
  226. package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
  227. package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
  228. package/Sources/SwiftDataMacros/Plugin.swift +18 -0
  229. package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
  230. package/Sources/SwiftUI/API/Accessibility.swift +55 -6
  231. package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
  232. package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
  233. package/Sources/SwiftUI/API/Alert.swift +1 -1
  234. package/Sources/SwiftUI/API/AlignmentGuides.swift +68 -0
  235. package/Sources/SwiftUI/API/Animation.swift +37 -5
  236. package/Sources/SwiftUI/API/App.swift +31 -1
  237. package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
  238. package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
  239. package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
  240. package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
  241. package/Sources/SwiftUI/API/Canvas.swift +337 -0
  242. package/Sources/SwiftUI/API/Color.swift +104 -28
  243. package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
  244. package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
  245. package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
  246. package/Sources/SwiftUI/API/Commands.swift +106 -0
  247. package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
  248. package/Sources/SwiftUI/API/ContentShape.swift +33 -0
  249. package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
  250. package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
  251. package/Sources/SwiftUI/API/Controls.swift +59 -27
  252. package/Sources/SwiftUI/API/CustomLayout.swift +49 -10
  253. package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
  254. package/Sources/SwiftUI/API/Decorations.swift +1 -1
  255. package/Sources/SwiftUI/API/EditMode.swift +25 -82
  256. package/Sources/SwiftUI/API/Effects.swift +125 -10
  257. package/Sources/SwiftUI/API/Entry.swift +8 -0
  258. package/Sources/SwiftUI/API/Environment.swift +100 -9
  259. package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
  260. package/Sources/SwiftUI/API/Focus.swift +11 -3
  261. package/Sources/SwiftUI/API/Gauge.swift +26 -10
  262. package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
  263. package/Sources/SwiftUI/API/GeometryReader.swift +13 -2
  264. package/Sources/SwiftUI/API/GestureState.swift +65 -0
  265. package/Sources/SwiftUI/API/Gestures.swift +1 -1
  266. package/Sources/SwiftUI/API/Glass.swift +127 -0
  267. package/Sources/SwiftUI/API/Grid.swift +1 -1
  268. package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
  269. package/Sources/SwiftUI/API/KeyPress.swift +54 -0
  270. package/Sources/SwiftUI/API/LabelStyle.swift +13 -6
  271. package/Sources/SwiftUI/API/Layout.swift +71 -12
  272. package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
  273. package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
  274. package/Sources/SwiftUI/API/Lists.swift +61 -6
  275. package/Sources/SwiftUI/API/Menu.swift +8 -1
  276. package/Sources/SwiftUI/API/Modifiers.swift +88 -12
  277. package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
  278. package/Sources/SwiftUI/API/Namespace.swift +44 -0
  279. package/Sources/SwiftUI/API/Navigation.swift +24 -9
  280. package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
  281. package/Sources/SwiftUI/API/ObservableObject.swift +16 -2
  282. package/Sources/SwiftUI/API/Path.swift +543 -0
  283. package/Sources/SwiftUI/API/Phase8Controls.swift +48 -31
  284. package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
  285. package/Sources/SwiftUI/API/Picker.swift +14 -4
  286. package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
  287. package/Sources/SwiftUI/API/Popover.swift +41 -0
  288. package/Sources/SwiftUI/API/Preferences.swift +262 -0
  289. package/Sources/SwiftUI/API/Presentation.swift +17 -4
  290. package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
  291. package/Sources/SwiftUI/API/Primitives.swift +168 -39
  292. package/Sources/SwiftUI/API/Publishers.swift +4 -4
  293. package/Sources/SwiftUI/API/Redaction.swift +75 -0
  294. package/Sources/SwiftUI/API/RowActions.swift +3 -2
  295. package/Sources/SwiftUI/API/Scenes.swift +131 -0
  296. package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
  297. package/Sources/SwiftUI/API/ScrollTargets.swift +3 -3
  298. package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
  299. package/Sources/SwiftUI/API/SectionSupplements.swift +86 -0
  300. package/Sources/SwiftUI/API/Shape.swift +214 -0
  301. package/Sources/SwiftUI/API/ShapeStyle.swift +187 -8
  302. package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
  303. package/Sources/SwiftUI/API/Sharing.swift +193 -0
  304. package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
  305. package/Sources/SwiftUI/API/State.swift +18 -1
  306. package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
  307. package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
  308. package/Sources/SwiftUI/API/TabContent.swift +841 -0
  309. package/Sources/SwiftUI/API/Table.swift +382 -0
  310. package/Sources/SwiftUI/API/Tabs.swift +148 -4
  311. package/Sources/SwiftUI/API/Tasks.swift +2 -2
  312. package/Sources/SwiftUI/API/Text.swift +386 -0
  313. package/Sources/SwiftUI/API/TextDates.swift +61 -0
  314. package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
  315. package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
  316. package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
  317. package/Sources/SwiftUI/API/Toolbar.swift +52 -16
  318. package/Sources/SwiftUI/API/Transfer.swift +145 -0
  319. package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
  320. package/Sources/SwiftUI/API/Video.swift +64 -0
  321. package/Sources/SwiftUI/API/View.swift +46 -2
  322. package/Sources/SwiftUI/API/ViewModifier.swift +4 -1
  323. package/Sources/SwiftUI/API/VisualEffect.swift +74 -1
  324. package/Sources/SwiftUI/API/Windows.swift +25 -0
  325. package/Sources/SwiftUI/Charts/Axis.swift +7 -1
  326. package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
  327. package/Sources/SwiftUI/Charts/Chart.swift +17 -3
  328. package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
  329. package/Sources/SwiftUI/Localization/Localization.swift +524 -0
  330. package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
  331. package/Sources/SwiftUI/Runtime/Executor.swift +2 -0
  332. package/Sources/SwiftUI/Runtime/Exports.swift +37 -1
  333. package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
  334. package/Sources/SwiftUI/Runtime/JSON.swift +76 -4
  335. package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
  336. package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
  337. package/Sources/SwiftUI/Runtime/Ops.swift +58 -12
  338. package/Sources/SwiftUI/Runtime/Reconciler.swift +10 -1
  339. package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
  340. package/Sources/SwiftUI/Runtime/Runtime.swift +977 -198
  341. package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
  342. package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
  343. package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
  344. package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
  345. package/Sources/Symbols/Symbols.swift +25 -0
  346. package/Sources/Translation/Translation.swift +423 -0
  347. package/Sources/UIKit/Activity.swift +213 -0
  348. package/Sources/UIKit/Alerts.swift +69 -0
  349. package/Sources/UIKit/AppDelegate.swift +222 -0
  350. package/Sources/UIKit/Appearance.swift +84 -0
  351. package/Sources/UIKit/ColorConversions.swift +70 -0
  352. package/Sources/UIKit/Controls.swift +225 -0
  353. package/Sources/UIKit/Device.swift +200 -0
  354. package/Sources/UIKit/Feedback.swift +65 -0
  355. package/Sources/UIKit/Font.swift +307 -0
  356. package/Sources/UIKit/Graphics.swift +204 -0
  357. package/Sources/UIKit/HostingController.swift +185 -0
  358. package/Sources/UIKit/Identity.swift +24 -0
  359. package/Sources/UIKit/Introspectable.swift +510 -0
  360. package/Sources/UIKit/Pasteboard.swift +363 -0
  361. package/Sources/UIKit/PhotoAlbum.swift +81 -0
  362. package/Sources/UIKit/RemoteNotifications.swift +15 -0
  363. package/Sources/UIKit/Representable.swift +288 -0
  364. package/Sources/UIKit/SafeArea.swift +12 -0
  365. package/Sources/UIKit/SceneDelegates.swift +132 -0
  366. package/Sources/UIKit/Scenes.swift +40 -0
  367. package/Sources/UIKit/ScrollView.swift +157 -0
  368. package/Sources/UIKit/ShortcutItems.swift +67 -0
  369. package/Sources/UIKit/SymbolConfiguration.swift +124 -0
  370. package/Sources/UIKit/TargetAction.swift +123 -0
  371. package/Sources/UIKit/TextPaste.swift +161 -0
  372. package/Sources/UIKit/TextView.swift +538 -0
  373. package/Sources/UIKit/UIKit.swift +292 -0
  374. package/Sources/UIKit/UIView.swift +855 -0
  375. package/Sources/UIKit/ViewTranslation.swift +311 -0
  376. package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
  377. package/Sources/UserNotifications/Content.swift +370 -0
  378. package/Sources/UserNotifications/NotificationCenter.swift +309 -0
  379. package/Sources/WeatherKit/WeatherKit.swift +228 -0
  380. package/Sources/WebKit/WebKit.swift +245 -0
  381. package/Sources/os/os.swift +376 -0
  382. package/Sources/zlib/zlib.swift +6 -0
  383. package/index.d.ts +1 -1
  384. package/index.mjs +2 -2
  385. package/manifest.d.mts +2 -0
  386. package/manifest.mjs +41 -0
  387. package/package.json +5 -3
  388. package/sync-sources.mjs +21 -7
  389. package/Sources/FoundationLite/Common.swift +0 -3
  390. package/Sources/FoundationLite/FoundationLite.swift +0 -171
  391. package/Sources/FoundationLite/Interaction.swift +0 -146
  392. package/Sources/FoundationLite/Timer.swift +0 -48
  393. package/Sources/_FoundationCommon/_FoundationCommon.swift +0 -10
@@ -0,0 +1,437 @@
1
+ //
2
+ // Publishers.Sequence.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 19.06.2019.
6
+ //
7
+
8
+ extension Publishers {
9
+
10
+ /// A publisher that publishes a given sequence of elements.
11
+ ///
12
+ /// When the publisher exhausts the elements in the sequence, the next request
13
+ /// causes the publisher to finish.
14
+ public struct Sequence<Elements: Swift.Sequence, Failure: Error>: Publisher {
15
+
16
+ public typealias Output = Elements.Element
17
+
18
+ /// The sequence of elements to publish.
19
+ public let sequence: Elements
20
+
21
+ /// Creates a publisher for a sequence of elements.
22
+ ///
23
+ /// - Parameter sequence: The sequence of elements to publish.
24
+ public init(sequence: Elements) {
25
+ self.sequence = sequence
26
+ }
27
+
28
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
29
+ where Failure == Downstream.Failure,
30
+ Elements.Element == Downstream.Input
31
+ {
32
+ let inner = Inner(downstream: subscriber, sequence: sequence)
33
+ if inner.isExhausted {
34
+ subscriber.receive(subscription: Subscriptions.empty)
35
+ subscriber.receive(completion: .finished)
36
+ inner.cancel()
37
+ } else {
38
+ subscriber.receive(subscription: inner)
39
+ }
40
+ }
41
+ }
42
+ }
43
+
44
+ extension Publishers.Sequence {
45
+
46
+ private final class Inner<Downstream: Subscriber, Elements: Sequence, Failure>
47
+ : Subscription,
48
+ CustomStringConvertible,
49
+ CustomReflectable,
50
+ CustomPlaygroundDisplayConvertible
51
+ where Downstream.Input == Elements.Element,
52
+ Downstream.Failure == Failure
53
+ {
54
+
55
+ typealias Iterator = Elements.Iterator
56
+ typealias Element = Elements.Element
57
+
58
+ private var sequence: Elements?
59
+ private var downstream: Downstream?
60
+ private var iterator: Iterator
61
+ private var next: Element?
62
+ private var pendingDemand = Subscribers.Demand.none
63
+ private var recursion = false
64
+ private var lock = UnfairLock.allocate()
65
+
66
+ fileprivate init(downstream: Downstream, sequence: Elements) {
67
+ self.sequence = sequence
68
+ self.downstream = downstream
69
+ self.iterator = sequence.makeIterator()
70
+ next = iterator.next()
71
+ }
72
+
73
+ deinit {
74
+ lock.deallocate()
75
+ }
76
+
77
+ fileprivate var isExhausted: Bool {
78
+ return next == nil
79
+ }
80
+
81
+ var description: String {
82
+ return sequence.map(String.init(describing:)) ?? "Sequence"
83
+ }
84
+
85
+ var customMirror: Mirror {
86
+ let children =
87
+ CollectionOfOne<Mirror.Child>(("sequence", sequence ?? [Element]()))
88
+ return Mirror(self, children: children)
89
+ }
90
+
91
+ var playgroundDescription: Any { return description }
92
+
93
+ func request(_ demand: Subscribers.Demand) {
94
+ lock.lock()
95
+ guard downstream != nil else {
96
+ lock.unlock()
97
+ return
98
+ }
99
+ pendingDemand += demand
100
+ if recursion {
101
+ lock.unlock()
102
+ return
103
+ }
104
+
105
+ while let downstream = self.downstream, pendingDemand > 0 {
106
+ if let current = self.next {
107
+ pendingDemand -= 1
108
+
109
+ // Combine calls next() while the lock is held.
110
+ // It is possible to engineer a custom Sequence that would cause
111
+ // a deadlock here, but it would be something insane.
112
+ let next = iterator.next()
113
+ recursion = true
114
+ lock.unlock()
115
+ let additionalDemand = downstream.receive(current)
116
+ lock.lock()
117
+ recursion = false
118
+ pendingDemand += additionalDemand
119
+ self.next = next
120
+ }
121
+
122
+ if next == nil {
123
+ self.downstream = nil
124
+ self.sequence = nil
125
+ lock.unlock()
126
+ downstream.receive(completion: .finished)
127
+ return
128
+ }
129
+ }
130
+
131
+ lock.unlock()
132
+ }
133
+
134
+ func cancel() {
135
+ lock.lock()
136
+ downstream = nil
137
+ sequence = nil
138
+ lock.unlock()
139
+ }
140
+ }
141
+ }
142
+
143
+ extension Publishers.Sequence: Equatable where Elements: Equatable {}
144
+
145
+ extension Publishers.Sequence where Failure == Never {
146
+
147
+ public func min(
148
+ by areInIncreasingOrder: (Elements.Element, Elements.Element) -> Bool
149
+ ) -> Optional<Elements.Element>.OCombine.Publisher {
150
+ return .init(sequence.min(by: areInIncreasingOrder))
151
+ }
152
+
153
+ public func max(
154
+ by areInIncreasingOrder: (Elements.Element, Elements.Element) -> Bool
155
+ ) -> Optional<Elements.Element>.OCombine.Publisher {
156
+ return .init(sequence.max(by: areInIncreasingOrder))
157
+ }
158
+
159
+ public func first(
160
+ where predicate: (Elements.Element) -> Bool
161
+ ) -> Optional<Elements.Element>.OCombine.Publisher {
162
+ return .init(sequence.first(where: predicate))
163
+ }
164
+ }
165
+
166
+ extension Publishers.Sequence {
167
+
168
+ public func allSatisfy(
169
+ _ predicate: (Elements.Element) -> Bool
170
+ ) -> Result<Bool, Failure>.OCombine.Publisher {
171
+ return .init(sequence.allSatisfy(predicate))
172
+ }
173
+
174
+ public func tryAllSatisfy(
175
+ _ predicate: (Elements.Element) throws -> Bool
176
+ ) -> Result<Bool, Error>.OCombine.Publisher {
177
+ return .init(Result { try sequence.allSatisfy(predicate) })
178
+ }
179
+
180
+ public func collect() -> Result<[Elements.Element], Failure>.OCombine.Publisher {
181
+ return .init(Array(sequence))
182
+ }
183
+
184
+ public func compactMap<ElementOfResult>(
185
+ _ transform: (Elements.Element) -> ElementOfResult?
186
+ ) -> Publishers.Sequence<[ElementOfResult], Failure> {
187
+ return .init(sequence: sequence.compactMap(transform))
188
+ }
189
+
190
+ public func contains(
191
+ where predicate: (Elements.Element) -> Bool
192
+ ) -> Result<Bool, Failure>.OCombine.Publisher {
193
+ return .init(sequence.contains(where: predicate))
194
+ }
195
+
196
+ public func tryContains(
197
+ where predicate: (Elements.Element) throws -> Bool
198
+ ) -> Result<Bool, Error>.OCombine.Publisher {
199
+ return .init(Result { try sequence.contains(where: predicate) })
200
+ }
201
+
202
+ public func drop(
203
+ while predicate: (Elements.Element) -> Bool
204
+ ) -> Publishers.Sequence<DropWhileSequence<Elements>, Failure> {
205
+ return .init(sequence: sequence.drop(while: predicate))
206
+ }
207
+
208
+ public func dropFirst(
209
+ _ count: Int = 1
210
+ ) -> Publishers.Sequence<DropFirstSequence<Elements>, Failure> {
211
+ return .init(sequence: sequence.dropFirst(count))
212
+ }
213
+
214
+ public func filter(
215
+ _ isIncluded: (Elements.Element) -> Bool
216
+ ) -> Publishers.Sequence<[Elements.Element], Failure> {
217
+ return .init(sequence: sequence.filter(isIncluded))
218
+ }
219
+
220
+ public func ignoreOutput() -> Empty<Elements.Element, Failure> {
221
+ return .init()
222
+ }
223
+
224
+ public func map<ElementOfResult>(
225
+ _ transform: (Elements.Element) -> ElementOfResult
226
+ ) -> Publishers.Sequence<[ElementOfResult], Failure> {
227
+ return .init(sequence: sequence.map(transform))
228
+ }
229
+
230
+ public func prefix(
231
+ _ maxLength: Int
232
+ ) -> Publishers.Sequence<PrefixSequence<Elements>, Failure> {
233
+ return .init(sequence: sequence.prefix(maxLength))
234
+ }
235
+
236
+ public func prefix(
237
+ while predicate: (Elements.Element) -> Bool
238
+ ) -> Publishers.Sequence<[Elements.Element], Failure> {
239
+ return .init(sequence: sequence.prefix(while: predicate))
240
+ }
241
+
242
+ public func reduce<Accumulator>(
243
+ _ initialResult: Accumulator,
244
+ _ nextPartialResult: @escaping (Accumulator, Elements.Element) -> Accumulator
245
+ ) -> Result<Accumulator, Failure>.OCombine.Publisher {
246
+ return .init(sequence.reduce(initialResult, nextPartialResult))
247
+ }
248
+
249
+ public func tryReduce<Accumulator>(
250
+ _ initialResult: Accumulator,
251
+ _ nextPartialResult:
252
+ @escaping (Accumulator, Elements.Element) throws -> Accumulator
253
+ ) -> Result<Accumulator, Error>.OCombine.Publisher {
254
+ return .init(Result { try sequence.reduce(initialResult, nextPartialResult) })
255
+ }
256
+
257
+ public func replaceNil<ElementOfResult>(
258
+ with output: ElementOfResult
259
+ ) -> Publishers.Sequence<[Elements.Element], Failure>
260
+ where Elements.Element == ElementOfResult?
261
+ {
262
+ return .init(sequence: sequence.map { $0 ?? output })
263
+ }
264
+
265
+ public func scan<ElementOfResult>(
266
+ _ initialResult: ElementOfResult,
267
+ _ nextPartialResult:
268
+ @escaping (ElementOfResult, Elements.Element) -> ElementOfResult
269
+ ) -> Publishers.Sequence<[ElementOfResult], Failure> {
270
+ var accumulator = initialResult
271
+ return .init(sequence: sequence.map {
272
+ accumulator = nextPartialResult(accumulator, $0)
273
+ return accumulator
274
+ })
275
+ }
276
+
277
+ public func setFailureType<NewFailure: Error>(
278
+ to error: NewFailure.Type
279
+ ) -> Publishers.Sequence<Elements, NewFailure> {
280
+ return .init(sequence: sequence)
281
+ }
282
+ }
283
+
284
+ extension Publishers.Sequence where Elements.Element: Equatable {
285
+
286
+ public func removeDuplicates() -> Publishers.Sequence<[Elements.Element], Failure> {
287
+ var previous: Elements.Element?
288
+ var result = [Elements.Element]()
289
+ for element in sequence where element != previous {
290
+ result.append(element)
291
+ previous = element
292
+ }
293
+ return .init(sequence: result)
294
+ }
295
+
296
+ public func contains(
297
+ _ output: Elements.Element
298
+ ) -> Result<Bool, Failure>.OCombine.Publisher {
299
+ return .init(sequence.contains(output))
300
+ }
301
+ }
302
+
303
+ extension Publishers.Sequence where Failure == Never, Elements.Element: Comparable {
304
+
305
+ public func min() -> Optional<Elements.Element>.OCombine.Publisher {
306
+ return .init(sequence.min())
307
+ }
308
+
309
+ public func max() -> Optional<Elements.Element>.OCombine.Publisher {
310
+ return .init(sequence.max())
311
+ }
312
+ }
313
+
314
+ extension Publishers.Sequence where Elements: Collection, Failure == Never {
315
+
316
+ public func first() -> Optional<Elements.Element>.OCombine.Publisher {
317
+ return .init(sequence.first)
318
+ }
319
+
320
+ public func output(
321
+ at index: Elements.Index
322
+ ) -> Optional<Elements.Element>.OCombine.Publisher {
323
+ return .init(sequence.indices.contains(index) ? sequence[index] : nil)
324
+ }
325
+ }
326
+
327
+ extension Publishers.Sequence where Elements: Collection {
328
+
329
+ public func count() -> Result<Int, Failure>.OCombine.Publisher {
330
+ return .init(sequence.count)
331
+ }
332
+
333
+ public func output(
334
+ in range: Range<Elements.Index>
335
+ ) -> Publishers.Sequence<[Elements.Element], Failure> {
336
+ return .init(sequence: Array(sequence[range]))
337
+ }
338
+ }
339
+
340
+ extension Publishers.Sequence where Elements: BidirectionalCollection, Failure == Never {
341
+
342
+ public func last() -> Optional<Elements.Element>.OCombine.Publisher {
343
+ return .init(sequence.last)
344
+ }
345
+
346
+ public func last(
347
+ where predicate: (Elements.Element) -> Bool
348
+ ) -> Optional<Elements.Element>.OCombine.Publisher {
349
+ return .init(sequence.last(where: predicate))
350
+ }
351
+ }
352
+
353
+ extension Publishers.Sequence where Elements: RandomAccessCollection, Failure == Never {
354
+
355
+ public func output(
356
+ at index: Elements.Index
357
+ ) -> Optional<Elements.Element>.OCombine.Publisher {
358
+ return .init(sequence.indices.contains(index) ? sequence[index] : nil)
359
+ }
360
+
361
+ public func count() -> Just<Int> {
362
+ return .init(sequence.count)
363
+ }
364
+ }
365
+
366
+ extension Publishers.Sequence where Elements: RandomAccessCollection {
367
+
368
+ public func output(
369
+ in range: Range<Elements.Index>
370
+ ) -> Publishers.Sequence<[Elements.Element], Failure> {
371
+ return .init(sequence: Array(sequence[range]))
372
+ }
373
+
374
+ public func count() -> Result<Int, Failure>.OCombine.Publisher {
375
+ return .init(sequence.count)
376
+ }
377
+ }
378
+
379
+ extension Publishers.Sequence where Elements: RangeReplaceableCollection {
380
+
381
+ public func prepend(
382
+ _ elements: Elements.Element...
383
+ ) -> Publishers.Sequence<Elements, Failure> {
384
+ return prepend(elements)
385
+ }
386
+
387
+ public func prepend<OtherSequence: Sequence>(
388
+ _ elements: OtherSequence
389
+ ) -> Publishers.Sequence<Elements, Failure>
390
+ where OtherSequence.Element == Elements.Element
391
+ {
392
+ var result = Elements()
393
+ result.reserveCapacity(
394
+ sequence.count + elements.underestimatedCount
395
+ )
396
+ result.append(contentsOf: elements)
397
+ result.append(contentsOf: sequence)
398
+ return .init(sequence: result)
399
+ }
400
+
401
+ public func prepend(
402
+ _ publisher: Publishers.Sequence<Elements, Failure>
403
+ ) -> Publishers.Sequence<Elements, Failure> {
404
+ var result = publisher.sequence
405
+ result.append(contentsOf: sequence)
406
+ return .init(sequence: result)
407
+ }
408
+
409
+ public func append(
410
+ _ elements: Elements.Element...
411
+ ) -> Publishers.Sequence<Elements, Failure> {
412
+ return append(elements)
413
+ }
414
+
415
+ public func append<OtherSequence: Sequence>(
416
+ _ elements: OtherSequence
417
+ ) -> Publishers.Sequence<Elements, Failure>
418
+ where OtherSequence.Element == Elements.Element
419
+ {
420
+ var result = sequence
421
+ result.append(contentsOf: elements)
422
+ return .init(sequence: result)
423
+ }
424
+
425
+ public func append(
426
+ _ publisher: Publishers.Sequence<Elements, Failure>
427
+ ) -> Publishers.Sequence<Elements, Failure> {
428
+ return append(publisher.sequence)
429
+ }
430
+ }
431
+
432
+ extension Sequence {
433
+
434
+ public var publisher: Publishers.Sequence<Self, Never> {
435
+ return .init(sequence: self)
436
+ }
437
+ }
@@ -0,0 +1,120 @@
1
+ //
2
+ // Publishers.SetFailureType.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 08.07.2019.
6
+ //
7
+
8
+ extension Publishers {
9
+
10
+ /// A publisher that appears to send a specified failure type.
11
+ ///
12
+ /// The publisher cannot actually fail with the specified type and instead
13
+ /// just finishes normally. Use this publisher type when you need to match
14
+ /// the error types for two mismatched publishers.
15
+ public struct SetFailureType<Upstream: Publisher, Failure: Error>: Publisher
16
+ where Upstream.Failure == Never
17
+ {
18
+ public typealias Output = Upstream.Output
19
+
20
+ /// The publisher from which this publisher receives elements.
21
+ public let upstream: Upstream
22
+
23
+ /// Creates a publisher that appears to send a specified failure type.
24
+ ///
25
+ /// - Parameter upstream: The publisher from which this publisher receives
26
+ /// elements.
27
+ public init(upstream: Upstream) {
28
+ self.upstream = upstream
29
+ }
30
+
31
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
32
+ where Downstream.Failure == Failure, Downstream.Input == Output
33
+ {
34
+ upstream.subscribe(Inner(downstream: subscriber))
35
+ }
36
+
37
+ public func setFailureType<NewFailure: Error>(
38
+ to failure: NewFailure.Type
39
+ ) -> Publishers.SetFailureType<Upstream, NewFailure> {
40
+ return .init(upstream: upstream)
41
+ }
42
+ }
43
+ }
44
+
45
+ extension Publishers.SetFailureType: Equatable where Upstream: Equatable {}
46
+
47
+ extension Publisher where Failure == Never {
48
+
49
+ /// Changes the failure type declared by the upstream publisher.
50
+ ///
51
+ /// Use `setFailureType(to:)` when you need set the error type of a publisher that
52
+ /// cannot fail.
53
+ ///
54
+ /// Conversely, if the upstream can fail, you would use `mapError(_:)` to provide
55
+ /// instructions on converting the error types to needed by the downstream publisher’s
56
+ /// inputs.
57
+ ///
58
+ /// The following example has two publishers with mismatched error types: `pub1`’s
59
+ /// error type is `Never`, and `pub2`’s error type is `Error`. Because of
60
+ /// the mismatch, the `combineLatest(_:)` operator requires that `pub1` use
61
+ /// `setFailureType(to:)` to make it appear that `pub1` can produce the `Error` type,
62
+ /// like `pub2` can.
63
+ ///
64
+ /// let pub1 = [0, 1, 2, 3, 4, 5].publisher
65
+ /// let pub2 = CurrentValueSubject<Int, Error>(0)
66
+ /// let cancellable = pub1
67
+ /// .setFailureType(to: Error.self)
68
+ /// .combineLatest(pub2)
69
+ /// .sink(
70
+ /// receiveCompletion: { print ("completed: \($0)") },
71
+ /// receiveValue: { print ("value: \($0)")}
72
+ /// )
73
+ ///
74
+ /// // Prints: "value: (5, 0)".
75
+ ///
76
+ /// - Parameter failureType: The `Failure` type presented by this publisher.
77
+ /// - Returns: A publisher that appears to send the specified failure type.
78
+ public func setFailureType<NewFailure: Error>(
79
+ to failureType: NewFailure.Type
80
+ ) -> Publishers.SetFailureType<Self, NewFailure> {
81
+ return .init(upstream: self)
82
+ }
83
+ }
84
+
85
+ extension Publishers.SetFailureType {
86
+ private struct Inner<Downstream: Subscriber>
87
+ : Subscriber,
88
+ CustomStringConvertible,
89
+ CustomReflectable,
90
+ CustomPlaygroundDisplayConvertible
91
+ where Upstream.Output == Downstream.Input, Failure == Downstream.Failure
92
+ {
93
+ private let downstream: Downstream
94
+ let combineIdentifier = CombineIdentifier()
95
+
96
+ fileprivate init(downstream: Downstream) {
97
+ self.downstream = downstream
98
+ }
99
+
100
+ func receive(subscription: Subscription) {
101
+ downstream.receive(subscription: subscription)
102
+ }
103
+
104
+ func receive(_ input: Upstream.Output) -> Subscribers.Demand {
105
+ return downstream.receive(input)
106
+ }
107
+
108
+ func receive(completion: Subscribers.Completion<Never>) {
109
+ downstream.receive(completion: .finished)
110
+ }
111
+
112
+ var description: String { return "SetFailureType" }
113
+
114
+ var customMirror: Mirror {
115
+ return Mirror(self, children: EmptyCollection())
116
+ }
117
+
118
+ var playgroundDescription: Any { return description }
119
+ }
120
+ }
@@ -0,0 +1,104 @@
1
+ //
2
+ // Publishers.Share
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 18/09/2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Shares the output of an upstream publisher with multiple subscribers.
11
+ ///
12
+ /// The publisher returned by this operator supports multiple subscribers, all of whom
13
+ /// receive unchanged elements and completion states from the upstream publisher.
14
+ ///
15
+ /// - Tip: `Publishers.Share` is effectively a combination of
16
+ /// the `Publishers.Multicast` and `PassthroughSubject` publishers, with an implicit
17
+ /// `autoconnect()`.
18
+ ///
19
+ /// The following example uses a sequence publisher as a counter to publish three
20
+ /// random numbers, generated by a `map(_:)` operator. It uses a `share()` operator
21
+ /// to share the same random number to each of two subscribers. This example uses
22
+ /// a `delay(for:tolerance:scheduler:options:)` operator only to prevent the first
23
+ /// subscriber from exhausting the sequence publisher immediately; an asynchronous
24
+ /// publisher wouldn’t need this.
25
+ ///
26
+ /// let pub = (1...3).publisher
27
+ /// .delay(for: 1, scheduler: DispatchQueue.main)
28
+ /// .map( { _ in return Int.random(in: 0...100) } )
29
+ /// .print("Random")
30
+ /// .share()
31
+ ///
32
+ /// cancellable1 = pub
33
+ /// .sink { print ("Stream 1 received: \($0)")}
34
+ /// cancellable2 = pub
35
+ /// .sink { print ("Stream 2 received: \($0)")}
36
+ ///
37
+ /// // Prints:
38
+ /// // Random: receive value: (20)
39
+ /// // Stream 1 received: 20
40
+ /// // Stream 2 received: 20
41
+ /// // Random: receive value: (85)
42
+ /// // Stream 1 received: 85
43
+ /// // Stream 2 received: 85
44
+ /// // Random: receive value: (98)
45
+ /// // Stream 1 received: 98
46
+ /// // Stream 2 received: 98
47
+ ///
48
+ /// Without the `share()` operator, stream 1 receives three random values,
49
+ /// followed by stream 2 receiving three different random values.
50
+ ///
51
+ /// Also note that `Publishers.Share` is a `class` rather than a `struct` like most
52
+ /// other publishers. This means you can use this operator to create a publisher
53
+ /// instance that uses reference semantics.
54
+ ///
55
+ /// - Returns: A class instance that shares elements received from its upstream to
56
+ /// multiple subscribers.
57
+ public func share() -> Publishers.Share<Self> {
58
+ return .init(upstream: self)
59
+ }
60
+ }
61
+
62
+ extension Publishers {
63
+
64
+ /// A publisher that shares the output of an upstream publisher with multiple
65
+ /// subscribers.
66
+ ///
67
+ /// This publisher type supports multiple subscribers, all of whom receive unchanged
68
+ /// elements and completion states from the upstream publisher.
69
+ ///
70
+ /// - Tip: `Publishers.Share` is effectively a combination of
71
+ /// the `Publishers.Multicast` and `PassthroughSubject` publishers,
72
+ /// with an implicit `autoconnect()`.
73
+ ///
74
+ /// Also note that `Publishers.Share` is a `class` rather than a `struct` like most
75
+ /// other publishers. Use this type when you need a publisher instance that uses
76
+ /// reference semantics.
77
+ public final class Share<Upstream: Publisher>: Publisher, Equatable {
78
+
79
+ public typealias Output = Upstream.Output
80
+
81
+ public typealias Failure = Upstream.Failure
82
+
83
+ private typealias MulticastSubject = PassthroughSubject<Output, Failure>
84
+
85
+ private let inner: Autoconnect<Multicast<Upstream, MulticastSubject>>
86
+
87
+ public let upstream: Upstream
88
+
89
+ public init(upstream: Upstream) {
90
+ self.inner = upstream.multicast(subject: .init()).autoconnect()
91
+ self.upstream = upstream
92
+ }
93
+
94
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
95
+ where Downstream.Input == Output, Downstream.Failure == Failure
96
+ {
97
+ inner.subscribe(subscriber)
98
+ }
99
+
100
+ public static func == (lhs: Share, rhs: Share) -> Bool {
101
+ return lhs === rhs
102
+ }
103
+ }
104
+ }