@swiftbrowser/swift 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/Package.swift +214 -0
  2. package/README.md +10 -2
  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 +61 -0
  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/FoundationBridge/Bundle.swift +119 -0
  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 +29 -0
  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/Locale.swift +86 -0
  170. package/Sources/FoundationBridge/Localization.swift +149 -0
  171. package/Sources/FoundationBridge/Locks.swift +50 -0
  172. package/Sources/FoundationBridge/Markdown.swift +527 -0
  173. package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
  174. package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
  175. package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
  176. package/Sources/FoundationBridge/Operation.swift +195 -0
  177. package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
  178. package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
  179. package/Sources/FoundationBridge/SceneStorage.swift +78 -0
  180. package/Sources/FoundationBridge/SecurityExports.swift +8 -0
  181. package/Sources/FoundationBridge/Selector.swift +226 -0
  182. package/Sources/FoundationBridge/StringComparators.swift +17 -0
  183. package/Sources/FoundationBridge/Table.swift +211 -0
  184. package/Sources/FoundationBridge/TextAttributes.swift +42 -0
  185. package/Sources/FoundationBridge/Timer.swift +53 -0
  186. package/Sources/FoundationBridge/UITextChecker.swift +30 -0
  187. package/Sources/FoundationBridge/URLSession.swift +718 -0
  188. package/Sources/FoundationBridge/UserDefaults.swift +183 -0
  189. package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
  190. package/Sources/FoundationBridge/WebSocket.swift +187 -0
  191. package/Sources/FoundationModels/FoundationModels.swift +1098 -0
  192. package/Sources/ImageIO/GIF.swift +72 -0
  193. package/Sources/ImageIO/ImageIO.swift +248 -0
  194. package/Sources/ImageIO/ImageTypes.swift +28 -0
  195. package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
  196. package/Sources/LocalAuthentication/LAContext.swift +86 -0
  197. package/Sources/MapKit/Geometry.swift +223 -0
  198. package/Sources/MapKit/Map.swift +638 -0
  199. package/Sources/MapKit/MapView.swift +229 -0
  200. package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
  201. package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
  202. package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
  203. package/Sources/OSLog/OSLog.swift +6 -0
  204. package/Sources/Photos/Photos.swift +572 -0
  205. package/Sources/PhotosUI/PhotosPicker.swift +248 -0
  206. package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
  207. package/Sources/QuickLook/QuickLook.swift +168 -0
  208. package/Sources/SafariServices/SafariServices.swift +106 -0
  209. package/Sources/Security/Security.swift +332 -0
  210. package/Sources/StoreKit/AppStore.swift +207 -0
  211. package/Sources/StoreKit/Products.swift +280 -0
  212. package/Sources/StoreKit/RequestReview.swift +28 -0
  213. package/Sources/StoreKit/StoreKit1.swift +486 -0
  214. package/Sources/StoreKit/StoreViews.swift +428 -0
  215. package/Sources/StoreKit/Transactions.swift +197 -0
  216. package/Sources/SwiftData/Macros.swift +58 -0
  217. package/Sources/SwiftData/ModelActor.swift +38 -0
  218. package/Sources/SwiftData/ModelContainer.swift +129 -0
  219. package/Sources/SwiftData/ModelContext.swift +451 -0
  220. package/Sources/SwiftData/PersistentModel.swift +238 -0
  221. package/Sources/SwiftData/Properties.swift +261 -0
  222. package/Sources/SwiftData/Query.swift +256 -0
  223. package/Sources/SwiftData/Schema.swift +192 -0
  224. package/Sources/SwiftData/Store.swift +146 -0
  225. package/Sources/SwiftData/StringPredicates.swift +125 -0
  226. package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
  227. package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
  228. package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
  229. package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
  230. package/Sources/SwiftDataMacros/Plugin.swift +18 -0
  231. package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
  232. package/Sources/SwiftUI/API/Accessibility.swift +181 -0
  233. package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
  234. package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
  235. package/Sources/SwiftUI/API/Alert.swift +221 -0
  236. package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
  237. package/Sources/SwiftUI/API/Animation.swift +285 -0
  238. package/Sources/SwiftUI/API/App.swift +87 -0
  239. package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
  240. package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
  241. package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
  242. package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
  243. package/Sources/SwiftUI/API/Canvas.swift +337 -0
  244. package/Sources/SwiftUI/API/Color.swift +237 -0
  245. package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
  246. package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
  247. package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
  248. package/Sources/SwiftUI/API/Commands.swift +106 -0
  249. package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
  250. package/Sources/SwiftUI/API/ContentShape.swift +33 -0
  251. package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
  252. package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
  253. package/Sources/SwiftUI/API/Controls.swift +300 -0
  254. package/Sources/SwiftUI/API/CustomLayout.swift +442 -0
  255. package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
  256. package/Sources/SwiftUI/API/Decorations.swift +92 -0
  257. package/Sources/SwiftUI/API/EditMode.swift +212 -0
  258. package/Sources/SwiftUI/API/Effects.swift +388 -0
  259. package/Sources/SwiftUI/API/Entry.swift +8 -0
  260. package/Sources/SwiftUI/API/Environment.swift +439 -0
  261. package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
  262. package/Sources/SwiftUI/API/Focus.swift +137 -0
  263. package/Sources/SwiftUI/API/Font.swift +131 -0
  264. package/Sources/SwiftUI/API/Gauge.swift +290 -0
  265. package/Sources/SwiftUI/API/Geometry.swift +89 -0
  266. package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
  267. package/Sources/SwiftUI/API/GeometryReader.swift +135 -0
  268. package/Sources/SwiftUI/API/GestureState.swift +65 -0
  269. package/Sources/SwiftUI/API/Gestures.swift +342 -0
  270. package/Sources/SwiftUI/API/Glass.swift +127 -0
  271. package/Sources/SwiftUI/API/Grid.swift +188 -0
  272. package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
  273. package/Sources/SwiftUI/API/KeyPress.swift +54 -0
  274. package/Sources/SwiftUI/API/LabelStyle.swift +124 -0
  275. package/Sources/SwiftUI/API/Layout.swift +220 -0
  276. package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
  277. package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
  278. package/Sources/SwiftUI/API/Lists.swift +331 -0
  279. package/Sources/SwiftUI/API/Menu.swift +58 -0
  280. package/Sources/SwiftUI/API/Modifiers.swift +313 -0
  281. package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
  282. package/Sources/SwiftUI/API/Namespace.swift +44 -0
  283. package/Sources/SwiftUI/API/Navigation.swift +386 -0
  284. package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
  285. package/Sources/SwiftUI/API/ObservableObject.swift +293 -0
  286. package/Sources/SwiftUI/API/OnChange.swift +48 -0
  287. package/Sources/SwiftUI/API/Path.swift +543 -0
  288. package/Sources/SwiftUI/API/Phase8Controls.swift +411 -0
  289. package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
  290. package/Sources/SwiftUI/API/Picker.swift +185 -0
  291. package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
  292. package/Sources/SwiftUI/API/Popover.swift +41 -0
  293. package/Sources/SwiftUI/API/Preferences.swift +262 -0
  294. package/Sources/SwiftUI/API/Presentation.swift +122 -0
  295. package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
  296. package/Sources/SwiftUI/API/Primitives.swift +517 -0
  297. package/Sources/SwiftUI/API/Publishers.swift +107 -0
  298. package/Sources/SwiftUI/API/Redaction.swift +75 -0
  299. package/Sources/SwiftUI/API/RowActions.swift +84 -0
  300. package/Sources/SwiftUI/API/Scenes.swift +131 -0
  301. package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
  302. package/Sources/SwiftUI/API/ScrollTargets.swift +104 -0
  303. package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
  304. package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
  305. package/Sources/SwiftUI/API/Shape.swift +214 -0
  306. package/Sources/SwiftUI/API/ShapeStyle.swift +409 -0
  307. package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
  308. package/Sources/SwiftUI/API/Sharing.swift +193 -0
  309. package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
  310. package/Sources/SwiftUI/API/State.swift +144 -0
  311. package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
  312. package/Sources/SwiftUI/API/StrokeStyle.swift +30 -0
  313. package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
  314. package/Sources/SwiftUI/API/TabContent.swift +841 -0
  315. package/Sources/SwiftUI/API/Table.swift +382 -0
  316. package/Sources/SwiftUI/API/Tabs.swift +263 -0
  317. package/Sources/SwiftUI/API/Tasks.swift +35 -0
  318. package/Sources/SwiftUI/API/Text.swift +386 -0
  319. package/Sources/SwiftUI/API/TextDates.swift +61 -0
  320. package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
  321. package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
  322. package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
  323. package/Sources/SwiftUI/API/Timeline.swift +212 -0
  324. package/Sources/SwiftUI/API/Toolbar.swift +251 -0
  325. package/Sources/SwiftUI/API/Transfer.swift +145 -0
  326. package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
  327. package/Sources/SwiftUI/API/Video.swift +64 -0
  328. package/Sources/SwiftUI/API/View.swift +215 -0
  329. package/Sources/SwiftUI/API/ViewModifier.swift +43 -0
  330. package/Sources/SwiftUI/API/VisualEffect.swift +155 -0
  331. package/Sources/SwiftUI/API/Windows.swift +25 -0
  332. package/Sources/SwiftUI/Charts/Axis.swift +325 -0
  333. package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
  334. package/Sources/SwiftUI/Charts/Chart.swift +660 -0
  335. package/Sources/SwiftUI/Charts/ChartContent.swift +376 -0
  336. package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
  337. package/Sources/SwiftUI/Charts/Marks.swift +204 -0
  338. package/Sources/SwiftUI/Charts/Plottable.swift +99 -0
  339. package/Sources/SwiftUI/Charts/Scales.swift +326 -0
  340. package/Sources/SwiftUI/Localization/Localization.swift +498 -0
  341. package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
  342. package/Sources/SwiftUI/Runtime/Executor.swift +85 -0
  343. package/Sources/SwiftUI/Runtime/Exports.swift +101 -0
  344. package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
  345. package/Sources/SwiftUI/Runtime/JSON.swift +143 -0
  346. package/Sources/SwiftUI/Runtime/JSONParser.swift +443 -0
  347. package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
  348. package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
  349. package/Sources/SwiftUI/Runtime/Ops.swift +152 -0
  350. package/Sources/SwiftUI/Runtime/Reconciler.swift +219 -0
  351. package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
  352. package/Sources/SwiftUI/Runtime/Runtime.swift +2146 -0
  353. package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
  354. package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
  355. package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
  356. package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
  357. package/Sources/Symbols/Symbols.swift +25 -0
  358. package/Sources/Translation/Translation.swift +423 -0
  359. package/Sources/UIKit/Activity.swift +213 -0
  360. package/Sources/UIKit/Alerts.swift +69 -0
  361. package/Sources/UIKit/AppDelegate.swift +222 -0
  362. package/Sources/UIKit/Appearance.swift +84 -0
  363. package/Sources/UIKit/ColorConversions.swift +70 -0
  364. package/Sources/UIKit/Controls.swift +225 -0
  365. package/Sources/UIKit/Device.swift +200 -0
  366. package/Sources/UIKit/Feedback.swift +65 -0
  367. package/Sources/UIKit/Font.swift +307 -0
  368. package/Sources/UIKit/Graphics.swift +204 -0
  369. package/Sources/UIKit/HostingController.swift +185 -0
  370. package/Sources/UIKit/Identity.swift +24 -0
  371. package/Sources/UIKit/Introspectable.swift +510 -0
  372. package/Sources/UIKit/Pasteboard.swift +363 -0
  373. package/Sources/UIKit/PhotoAlbum.swift +81 -0
  374. package/Sources/UIKit/RemoteNotifications.swift +15 -0
  375. package/Sources/UIKit/Representable.swift +288 -0
  376. package/Sources/UIKit/SafeArea.swift +12 -0
  377. package/Sources/UIKit/SceneDelegates.swift +132 -0
  378. package/Sources/UIKit/Scenes.swift +40 -0
  379. package/Sources/UIKit/ScrollView.swift +157 -0
  380. package/Sources/UIKit/ShortcutItems.swift +67 -0
  381. package/Sources/UIKit/SymbolConfiguration.swift +124 -0
  382. package/Sources/UIKit/TargetAction.swift +123 -0
  383. package/Sources/UIKit/TextPaste.swift +161 -0
  384. package/Sources/UIKit/TextView.swift +538 -0
  385. package/Sources/UIKit/UIKit.swift +292 -0
  386. package/Sources/UIKit/UIView.swift +855 -0
  387. package/Sources/UIKit/ViewTranslation.swift +311 -0
  388. package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
  389. package/Sources/UserNotifications/Content.swift +370 -0
  390. package/Sources/UserNotifications/NotificationCenter.swift +309 -0
  391. package/Sources/WeatherKit/WeatherKit.swift +228 -0
  392. package/Sources/WebKit/WebKit.swift +245 -0
  393. package/Sources/os/os.swift +376 -0
  394. package/Sources/zlib/zlib.swift +6 -0
  395. package/index.d.ts +2 -0
  396. package/index.mjs +16 -0
  397. package/manifest.d.mts +2 -0
  398. package/manifest.mjs +39 -0
  399. package/package.json +30 -4
  400. package/sync-sources.mjs +33 -0
@@ -0,0 +1,260 @@
1
+ //
2
+ // Publishers.HandleEvents.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 03.12.2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Performs the specified closures when publisher events occur.
11
+ ///
12
+ /// Use `handleEvents` when you want to examine elements as they progress through
13
+ /// the stages of the publisher’s lifecycle.
14
+ ///
15
+ /// In the example below, a publisher of integers shows the effect of printing
16
+ /// debugging information at each stage of the element-processing lifecycle:
17
+ ///
18
+ /// let integers = (0...2)
19
+ /// cancellable = integers.publisher
20
+ /// .handleEvents(receiveSubscription: { subs in
21
+ /// print("Subscription: \(subs.combineIdentifier)")
22
+ /// }, receiveOutput: { anInt in
23
+ /// print("in output handler, received \(anInt)")
24
+ /// }, receiveCompletion: { _ in
25
+ /// print("in completion handler")
26
+ /// }, receiveCancel: {
27
+ /// print("received cancel")
28
+ /// }, receiveRequest: { (demand) in
29
+ /// print("received demand: \(demand.description)")
30
+ /// })
31
+ /// .sink { _ in return }
32
+ ///
33
+ /// // Prints:
34
+ /// // received demand: unlimited
35
+ /// // Subscription: 0x7f81284734c0
36
+ /// // in output handler, received 0
37
+ /// // in output handler, received 1
38
+ /// // in output handler, received 2
39
+ /// // in completion handler
40
+ ///
41
+ /// - Parameters:
42
+ /// - receiveSubscription: A closure that executes when the publisher receives
43
+ /// the subscription from the upstream publisher. Defaults to `nil`.
44
+ /// - receiveOutput: A closure that executes when the publisher receives a value
45
+ /// from the upstream publisher. Defaults to `nil`.
46
+ /// - receiveCompletion: A closure that executes when the publisher receives
47
+ /// the completion from the upstream publisher. Defaults to `nil`.
48
+ /// - receiveCancel: A closure that executes when the downstream receiver cancels
49
+ /// publishing. Defaults to `nil`.
50
+ /// - receiveRequest: A closure that executes when the publisher receives a request
51
+ /// for more elements. Defaults to `nil`.
52
+ /// - Returns: A publisher that performs the specified closures when publisher events
53
+ /// occur.
54
+ public func handleEvents(
55
+ receiveSubscription: ((Subscription) -> Void)? = nil,
56
+ receiveOutput: ((Output) -> Void)? = nil,
57
+ receiveCompletion: ((Subscribers.Completion<Failure>) -> Void)? = nil,
58
+ receiveCancel: (() -> Void)? = nil,
59
+ receiveRequest: ((Subscribers.Demand) -> Void)? = nil
60
+ ) -> Publishers.HandleEvents<Self> {
61
+ return .init(upstream: self,
62
+ receiveSubscription: receiveSubscription,
63
+ receiveOutput: receiveOutput,
64
+ receiveCompletion: receiveCompletion,
65
+ receiveCancel: receiveCancel,
66
+ receiveRequest: receiveRequest)
67
+ }
68
+ }
69
+
70
+ extension Publishers {
71
+
72
+ /// A publisher that performs the specified closures when publisher events occur.
73
+ public struct HandleEvents<Upstream: Publisher>: Publisher {
74
+
75
+ public typealias Output = Upstream.Output
76
+
77
+ public typealias Failure = Upstream.Failure
78
+
79
+ /// The publisher from which this publisher receives elements.
80
+ public let upstream: Upstream
81
+
82
+ /// A closure that executes when the publisher receives the subscription from
83
+ /// the upstream publisher.
84
+ public var receiveSubscription: ((Subscription) -> Void)?
85
+
86
+ /// A closure that executes when the publisher receives a value from the upstream
87
+ /// publisher.
88
+ public var receiveOutput: ((Upstream.Output) -> Void)?
89
+
90
+ /// A closure that executes when the publisher receives the completion from
91
+ /// the upstream publisher.
92
+ public var receiveCompletion:
93
+ ((Subscribers.Completion<Upstream.Failure>) -> Void)?
94
+
95
+ /// A closure that executes when the downstream receiver cancels publishing.
96
+ public var receiveCancel: (() -> Void)?
97
+
98
+ /// A closure that executes when the publisher receives a request for more
99
+ /// elements.
100
+ public var receiveRequest: ((Subscribers.Demand) -> Void)?
101
+
102
+ public init(
103
+ upstream: Upstream,
104
+ receiveSubscription: ((Subscription) -> Void)? = nil,
105
+ receiveOutput: ((Output) -> Void)? = nil,
106
+ receiveCompletion: ((Subscribers.Completion<Failure>) -> Void)? = nil,
107
+ receiveCancel: (() -> Void)? = nil,
108
+ receiveRequest: ((Subscribers.Demand) -> Void)?
109
+ ) {
110
+ self.upstream = upstream
111
+ self.receiveSubscription = receiveSubscription
112
+ self.receiveOutput = receiveOutput
113
+ self.receiveCompletion = receiveCompletion
114
+ self.receiveCancel = receiveCancel
115
+ self.receiveRequest = receiveRequest
116
+ }
117
+
118
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
119
+ where Upstream.Failure == Downstream.Failure,
120
+ Upstream.Output == Downstream.Input
121
+ {
122
+ let inner = Inner(self, downstream: subscriber)
123
+ upstream.subscribe(inner)
124
+ }
125
+ }
126
+ }
127
+
128
+ extension Publishers.HandleEvents {
129
+ private final class Inner<Downstream: Subscriber>
130
+ : Subscriber,
131
+ Subscription,
132
+ CustomStringConvertible,
133
+ CustomReflectable,
134
+ CustomPlaygroundDisplayConvertible
135
+ where Downstream.Input == Upstream.Output, Downstream.Failure == Upstream.Failure
136
+ {
137
+ typealias Input = Upstream.Output
138
+ typealias Failure = Upstream.Failure
139
+
140
+ private var status = SubscriptionStatus.awaitingSubscription
141
+ private let lock = UnfairLock.allocate()
142
+ fileprivate var receiveSubscription: ((Subscription) -> Void)?
143
+ fileprivate var receiveOutput: ((Upstream.Output) -> Void)?
144
+ fileprivate var receiveCompletion:
145
+ ((Subscribers.Completion<Upstream.Failure>) -> Void)?
146
+ fileprivate var receiveCancel: (() -> Void)?
147
+ fileprivate var receiveRequest: ((Subscribers.Demand) -> Void)?
148
+ private let downstream: Downstream
149
+
150
+ init(_ events: Publishers.HandleEvents<Upstream>, downstream: Downstream) {
151
+ self.receiveSubscription = events.receiveSubscription
152
+ self.receiveOutput = events.receiveOutput
153
+ self.receiveCompletion = events.receiveCompletion
154
+ self.receiveCancel = events.receiveCancel
155
+ self.receiveRequest = events.receiveRequest
156
+ self.downstream = downstream
157
+ }
158
+
159
+ deinit {
160
+ lock.deallocate()
161
+ }
162
+
163
+ func receive(subscription: Subscription) {
164
+ lock.lock()
165
+ if let receiveSubscription = self.receiveSubscription {
166
+ lock.unlock()
167
+ receiveSubscription(subscription)
168
+ lock.lock()
169
+ }
170
+ guard case .awaitingSubscription = status else {
171
+ lock.unlock()
172
+ subscription.cancel()
173
+ return
174
+ }
175
+ status = .subscribed(subscription)
176
+ lock.unlock()
177
+ downstream.receive(subscription: self)
178
+ }
179
+
180
+ func receive(_ input: Input) -> Subscribers.Demand {
181
+ lock.lock()
182
+ if let receiveOutput = self.receiveOutput {
183
+ lock.unlock()
184
+ receiveOutput(input)
185
+ } else {
186
+ lock.unlock()
187
+ }
188
+ let newDemand = downstream.receive(input)
189
+ if newDemand == .none {
190
+ return newDemand
191
+ }
192
+ lock.lock()
193
+ if let receiveRequest = self.receiveRequest {
194
+ lock.unlock()
195
+ receiveRequest(newDemand)
196
+ } else {
197
+ lock.unlock()
198
+ }
199
+ return newDemand
200
+ }
201
+
202
+ func receive(completion: Subscribers.Completion<Failure>) {
203
+ lock.lock()
204
+ if let receiveCompletion = self.receiveCompletion {
205
+ lock.unlock()
206
+ receiveCompletion(completion)
207
+ lock.lock()
208
+ }
209
+ lockedTerminate()
210
+ lock.unlock()
211
+ downstream.receive(completion: completion)
212
+ }
213
+
214
+ func request(_ demand: Subscribers.Demand) {
215
+ lock.lock()
216
+ if let receiveRequest = self.receiveRequest {
217
+ lock.unlock()
218
+ receiveRequest(demand)
219
+ lock.lock()
220
+ }
221
+ guard case let .subscribed(subscription) = status else {
222
+ lock.unlock()
223
+ return
224
+ }
225
+ lock.unlock()
226
+ subscription.request(demand)
227
+ }
228
+
229
+ func cancel() {
230
+ lock.lock()
231
+ if let receiveCancel = self.receiveCancel {
232
+ lock.unlock()
233
+ receiveCancel()
234
+ lock.lock()
235
+ }
236
+ guard case let .subscribed(subscription) = status else {
237
+ lock.unlock()
238
+ return
239
+ }
240
+ lockedTerminate()
241
+ lock.unlock()
242
+ subscription.cancel()
243
+ }
244
+
245
+ var description: String { return "HandleEvents" }
246
+
247
+ var customMirror: Mirror { return Mirror(self, children: EmptyCollection()) }
248
+
249
+ var playgroundDescription: Any { return description }
250
+
251
+ private func lockedTerminate() {
252
+ receiveSubscription = nil
253
+ receiveOutput = nil
254
+ receiveCompletion = nil
255
+ receiveCancel = nil
256
+ receiveRequest = nil
257
+ status = .terminal
258
+ }
259
+ }
260
+ }
@@ -0,0 +1,109 @@
1
+ //
2
+ // Publishers.IgnoreOutput.swift
3
+ //
4
+ // Created by Eric Patey on 16.08.2019.
5
+ //
6
+
7
+ extension Publisher {
8
+
9
+ /// Ingores all upstream elements, but passes along a completion state (finished or
10
+ /// failed).
11
+ ///
12
+ /// Use the `ignoreOutput(`` operator to determine if a publisher is able to complete
13
+ /// successfully or would fail.
14
+ ///
15
+ /// In the example below, the array publisher (`numbers`) delivers the first five of
16
+ /// its elements successfully, as indicated by the `ignoreOutput()` operator.
17
+ /// The operator consumes, but doesn’t republish the elements downstream. However,
18
+ /// the sixth element, `0`, causes the error throwing closure to catch
19
+ /// a `NoZeroValuesAllowedError` that terminates the stream.
20
+ ///
21
+ /// struct NoZeroValuesAllowedError: Error {}
22
+ /// let numbers = [1, 2, 3, 4, 5, 0, 6, 7, 8, 9]
23
+ /// cancellable = numbers.publisher
24
+ /// .tryFilter({ anInt in
25
+ /// guard anInt != 0 else { throw NoZeroValuesAllowedError() }
26
+ /// return anInt < 20
27
+ /// })
28
+ /// .ignoreOutput()
29
+ /// .sink(receiveCompletion: {print("completion: \($0)")},
30
+ /// receiveValue: {print("value \($0)")})
31
+ ///
32
+ /// // Prints: "completion: failure(NoZeroValuesAllowedError())"
33
+ ///
34
+ /// The output type of this publisher is `Never`.
35
+ ///
36
+ /// - Returns: A publisher that ignores all upstream elements.
37
+ public func ignoreOutput() -> Publishers.IgnoreOutput<Self> {
38
+ return .init(upstream: self)
39
+ }
40
+ }
41
+
42
+ extension Publishers {
43
+ /// A publisher that ignores all upstream elements, but passes along a completion
44
+ /// state (finish or failed).
45
+ public struct IgnoreOutput<Upstream: Publisher>: Publisher {
46
+
47
+ public typealias Output = Never
48
+
49
+ public typealias Failure = Upstream.Failure
50
+
51
+ /// The publisher from which this publisher receives elements.
52
+ public let upstream: Upstream
53
+
54
+ public init(upstream: Upstream) {
55
+ self.upstream = upstream
56
+ }
57
+
58
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
59
+ where Downstream.Failure == Upstream.Failure, Downstream.Input == Never
60
+ {
61
+ upstream.subscribe(Inner<Downstream>(downstream: subscriber))
62
+ }
63
+ }
64
+ }
65
+
66
+ extension Publishers.IgnoreOutput {
67
+ private struct Inner<Downstream: Subscriber>
68
+ : Subscriber,
69
+ CustomStringConvertible,
70
+ CustomReflectable,
71
+ CustomPlaygroundDisplayConvertible
72
+ where Downstream.Input == Never, Downstream.Failure == Upstream.Failure
73
+ {
74
+ typealias Input = Upstream.Output
75
+
76
+ typealias Failure = Upstream.Failure
77
+
78
+ private let downstream: Downstream
79
+
80
+ let combineIdentifier = CombineIdentifier()
81
+
82
+ fileprivate init(downstream: Downstream) {
83
+ self.downstream = downstream
84
+ }
85
+
86
+ func receive(subscription: Subscription) {
87
+ downstream.receive(subscription: subscription)
88
+ subscription.request(.unlimited)
89
+ }
90
+
91
+ func receive(_ input: Input) -> Subscribers.Demand {
92
+ return .none
93
+ }
94
+
95
+ func receive(completion: Subscribers.Completion<Failure>) {
96
+ downstream.receive(completion: completion)
97
+ }
98
+
99
+ var description: String { return "IgnoreOutput" }
100
+
101
+ var customMirror: Mirror {
102
+ return Mirror(self, children: EmptyCollection())
103
+ }
104
+
105
+ var playgroundDescription: Any { return description }
106
+ }
107
+ }
108
+
109
+ extension Publishers.IgnoreOutput: Equatable where Upstream: Equatable {}
@@ -0,0 +1,252 @@
1
+ //
2
+ // Publishers.Last.swift
3
+ //
4
+ //
5
+ // Created by Joseph Spadafora on 7/9/19.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Publishes the last element of a stream, after the stream finishes.
11
+ ///
12
+ /// Use `last()` when you need to emit only the last element from an upstream
13
+ /// publisher.
14
+ ///
15
+ /// In the example below, the range publisher only emits the last element from
16
+ /// the sequence publisher, `10`, then finishes normally.
17
+ ///
18
+ /// let numbers = (-10...10)
19
+ /// cancellable = numbers.publisher
20
+ /// .last()
21
+ /// .sink { print("\($0)") }
22
+ ///
23
+ /// // Prints: "10"
24
+ ///
25
+ /// - Returns: A publisher that only publishes the last element of a stream.
26
+ public func last() -> Publishers.Last<Self> {
27
+ return .init(upstream: self)
28
+ }
29
+
30
+ /// Publishes the last element of a stream that satisfies a predicate closure,
31
+ /// after upstream finishes.
32
+ ///
33
+ /// Use `last(where:)` when you need to republish only the last element of a stream
34
+ /// that satisfies a closure you specify.
35
+ ///
36
+ /// In the example below, a range publisher emits the last element that satisfies
37
+ /// the closure’s criteria, then finishes normally:
38
+ ///
39
+ /// let numbers = (-10...10)
40
+ /// cancellable = numbers.publisher
41
+ /// .last { $0 < 6 }
42
+ /// .sink { print("\($0)") }
43
+ ///
44
+ /// // Prints: "5"
45
+ ///
46
+ /// - Parameter predicate: A closure that takes an element as its parameter and
47
+ /// returns a Boolean value that indicates whether to publish the element.
48
+ /// - Returns: A publisher that only publishes the last element satisfying the given
49
+ /// predicate.
50
+ public func last(
51
+ where predicate: @escaping (Output) -> Bool
52
+ ) -> Publishers.LastWhere<Self> {
53
+ return .init(upstream: self, predicate: predicate)
54
+ }
55
+
56
+ /// Publishes the last element of a stream that satisfies an error-throwing predicate
57
+ /// closure, after the stream finishes.
58
+ ///
59
+ /// Use `tryLast(where:)` when you need to republish the last element that satisfies
60
+ /// an error-throwing closure you specify. If the predicate closure throws an error,
61
+ /// the publisher fails.
62
+ ///
63
+ /// In the example below, a publisher emits the last element that satisfies
64
+ /// the error-throwing closure, then finishes normally:
65
+ ///
66
+ /// struct RangeError: Error {}
67
+ ///
68
+ /// let numbers = [-62, 1, 6, 10, 9, 22, 41, -1, 5]
69
+ /// cancellable = numbers.publisher
70
+ /// .tryLast {
71
+ /// guard 0 != 0 else {throw RangeError()}
72
+ /// return true
73
+ /// }
74
+ /// .sink(
75
+ /// receiveCompletion: { print ("completion: \($0)", terminator: " ") },
76
+ /// receiveValue: { print ("\($0)", terminator: " ") }
77
+ /// )
78
+ /// // Prints: "5 completion: finished"
79
+ /// // If instead the numbers array had contained a `0`, the `tryLast` operator
80
+ /// // would terminate publishing with a RangeError."
81
+ ///
82
+ /// - Parameter predicate: A closure that takes an element as its parameter and
83
+ /// returns a Boolean value that indicates whether to publish the element.
84
+ /// - Returns: A publisher that only publishes the last element satisfying the given
85
+ /// predicate.
86
+ public func tryLast(
87
+ where predicate: @escaping (Output) throws -> Bool
88
+ ) -> Publishers.TryLastWhere<Self> {
89
+ return .init(upstream: self, predicate: predicate)
90
+ }
91
+ }
92
+
93
+ extension Publishers {
94
+
95
+ /// A publisher that only publishes the last element of a stream,
96
+ /// after the stream finishes.
97
+ public struct Last<Upstream: Publisher>: Publisher {
98
+
99
+ public typealias Output = Upstream.Output
100
+
101
+ public typealias Failure = Upstream.Failure
102
+
103
+ /// The publisher from which this publisher receives elements.
104
+ public let upstream: Upstream
105
+
106
+ public init(upstream: Upstream) {
107
+ self.upstream = upstream
108
+ }
109
+
110
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
111
+ where Failure == Downstream.Failure, Output == Downstream.Input
112
+ {
113
+ upstream.subscribe(Inner(downstream: subscriber))
114
+ }
115
+ }
116
+
117
+ /// A publisher that only publishes the last element of a stream that satisfies
118
+ /// a predicate closure, once the stream finishes.
119
+ public struct LastWhere<Upstream: Publisher>: Publisher {
120
+
121
+ public typealias Output = Upstream.Output
122
+
123
+ public typealias Failure = Upstream.Failure
124
+
125
+ /// The publisher from which this publisher receives elements.
126
+ public let upstream: Upstream
127
+
128
+ /// The closure that determines whether to publish an element.
129
+ public let predicate: (Upstream.Output) -> Bool
130
+
131
+ public init(upstream: Upstream, predicate: @escaping (Output) -> Bool) {
132
+ self.upstream = upstream
133
+ self.predicate = predicate
134
+ }
135
+
136
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
137
+ where Failure == Downstream.Failure, Output == Downstream.Input
138
+ {
139
+ upstream.subscribe(Inner(downstream: subscriber, predicate: predicate))
140
+ }
141
+ }
142
+
143
+ /// A publisher that only publishes the last element of a stream that satisfies
144
+ /// an error-throwing predicate closure, once the stream finishes.
145
+ public struct TryLastWhere<Upstream: Publisher>: Publisher {
146
+
147
+ public typealias Output = Upstream.Output
148
+
149
+ public typealias Failure = Error
150
+
151
+ /// The publisher from which this publisher receives elements.
152
+ public let upstream: Upstream
153
+
154
+ /// The error-throwing closure that determines whether to publish an element.
155
+ public let predicate: (Upstream.Output) throws -> Bool
156
+
157
+ public init(upstream: Upstream, predicate: @escaping (Output) throws -> Bool) {
158
+ self.upstream = upstream
159
+ self.predicate = predicate
160
+ }
161
+
162
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
163
+ where Downstream.Failure == Error, Output == Downstream.Input
164
+ {
165
+ upstream.subscribe(Inner(downstream: subscriber, predicate: predicate))
166
+ }
167
+ }
168
+ }
169
+
170
+ extension Publishers.Last: Equatable where Upstream: Equatable {}
171
+
172
+ extension Publishers.Last {
173
+ private final class Inner<Downstream: Subscriber>
174
+ : ReduceProducer<Downstream,
175
+ Upstream.Output,
176
+ Upstream.Output,
177
+ Upstream.Failure,
178
+ Void>
179
+ where Upstream.Output == Downstream.Input, Upstream.Failure == Downstream.Failure
180
+ {
181
+ fileprivate init(downstream: Downstream) {
182
+ super.init(downstream: downstream, initial: nil, reduce: ())
183
+ }
184
+
185
+ override func receive(
186
+ newValue: Upstream.Output
187
+ ) -> PartialCompletion<Void, Downstream.Failure> {
188
+ result = newValue
189
+ return .continue
190
+ }
191
+
192
+ override var description: String { return "Last" }
193
+ }
194
+ }
195
+
196
+ extension Publishers.LastWhere {
197
+ private final class Inner<Downstream: Subscriber>
198
+ : ReduceProducer<Downstream,
199
+ Upstream.Output,
200
+ Upstream.Output,
201
+ Upstream.Failure,
202
+ (Upstream.Output) -> Bool>
203
+ where Upstream.Output == Downstream.Input, Upstream.Failure == Downstream.Failure
204
+ {
205
+ fileprivate init(downstream: Downstream,
206
+ predicate: @escaping (Upstream.Output) -> Bool) {
207
+ super.init(downstream: downstream, initial: nil, reduce: predicate)
208
+ }
209
+
210
+ override func receive(
211
+ newValue: Upstream.Output
212
+ ) -> PartialCompletion<Void, Downstream.Failure> {
213
+ if reduce(newValue) {
214
+ result = newValue
215
+ }
216
+ return .continue
217
+ }
218
+
219
+ override var description: String { return "LastWhere" }
220
+ }
221
+ }
222
+
223
+ extension Publishers.TryLastWhere {
224
+ private final class Inner<Downstream: Subscriber>
225
+ : ReduceProducer<Downstream,
226
+ Upstream.Output,
227
+ Upstream.Output,
228
+ Upstream.Failure,
229
+ (Upstream.Output) throws -> Bool>
230
+ where Upstream.Output == Downstream.Input, Downstream.Failure == Error
231
+ {
232
+ fileprivate init(downstream: Downstream,
233
+ predicate: @escaping (Upstream.Output) throws -> Bool) {
234
+ super.init(downstream: downstream, initial: nil, reduce: predicate)
235
+ }
236
+
237
+ override func receive(
238
+ newValue: Upstream.Output
239
+ ) -> PartialCompletion<Void, Downstream.Failure> {
240
+ do {
241
+ if try reduce(newValue) {
242
+ result = newValue
243
+ }
244
+ return .continue
245
+ } catch {
246
+ return .failure(error)
247
+ }
248
+ }
249
+
250
+ override var description: String { return "TryLastWhere" }
251
+ }
252
+ }