@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,206 @@
1
+ //
2
+ // Publishers.Print.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 16.06.2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Prints log messages for all publishing events.
11
+ ///
12
+ /// Use `print(_:to:)` to log messages the console.
13
+ ///
14
+ /// In the example below, log messages are printed on the console:
15
+ ///
16
+ /// let integers = (1...2)
17
+ /// cancellable = integers.publisher
18
+ /// .print("Logged a message", to: nil)
19
+ /// .sink { _ in }
20
+ ///
21
+ /// // Prints:
22
+ /// // Logged a message: receive subscription: (1..<2)
23
+ /// // Logged a message: request unlimited
24
+ /// // Logged a message: receive value: (1)
25
+ /// // Logged a message: receive finished
26
+ ///
27
+ /// - Parameters:
28
+ /// - prefix: A string — which defaults to empty — with which to prefix all log
29
+ /// messages.
30
+ /// - stream: A stream for text output that receives messages, and which directs
31
+ /// output to the console by default. A custom stream can be used to log messages
32
+ /// to other destinations.
33
+ /// - Returns: A publisher that prints log messages for all publishing events.
34
+ public func print(_ prefix: String = "",
35
+ to stream: TextOutputStream? = nil) -> Publishers.Print<Self> {
36
+ return .init(upstream: self, prefix: prefix, to: stream)
37
+ }
38
+ }
39
+
40
+ extension Publishers {
41
+
42
+ /// A publisher that prints log messages for all publishing events, optionally
43
+ /// prefixed with a given string.
44
+ ///
45
+ /// This publisher prints log messages when receiving the following events:
46
+ ///
47
+ /// - subscription
48
+ /// - value
49
+ /// - normal completion
50
+ /// - failure
51
+ /// - cancellation
52
+ public struct Print<Upstream: Publisher>: Publisher {
53
+
54
+ public typealias Output = Upstream.Output
55
+
56
+ public typealias Failure = Upstream.Failure
57
+
58
+ /// A string with which to prefix all log messages.
59
+ public let prefix: String
60
+
61
+ /// The publisher from which this publisher receives elements.
62
+ public let upstream: Upstream
63
+
64
+ public let stream: TextOutputStream?
65
+
66
+ /// Creates a publisher that prints log messages for all publishing events.
67
+ ///
68
+ /// - Parameters:
69
+ /// - upstream: The publisher from which this publisher receives elements.
70
+ /// - prefix: A string with which to prefix all log messages.
71
+ public init(upstream: Upstream,
72
+ prefix: String,
73
+ to stream: TextOutputStream? = nil) {
74
+ self.upstream = upstream
75
+ self.prefix = prefix
76
+ self.stream = stream
77
+ }
78
+
79
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
80
+ where Failure == Downstream.Failure, Output == Downstream.Input
81
+ {
82
+ let inner = Inner(downstream: subscriber, prefix: prefix, stream: stream)
83
+ upstream.subscribe(inner)
84
+ }
85
+ }
86
+ }
87
+
88
+ extension Publishers.Print {
89
+ private final class Inner<Downstream: Subscriber>: Subscriber,
90
+ Subscription,
91
+ CustomStringConvertible,
92
+ CustomReflectable,
93
+ CustomPlaygroundDisplayConvertible
94
+ {
95
+ typealias Input = Downstream.Input
96
+ typealias Failure = Downstream.Failure
97
+
98
+ /// A concrete type wrapper around an abstract stream.
99
+ private struct PrintTarget: TextOutputStream {
100
+
101
+ var stream: TextOutputStream
102
+
103
+ mutating func write(_ string: String) {
104
+ stream.write(string)
105
+ }
106
+ }
107
+
108
+ private var downstream: Downstream
109
+ private let prefix: String
110
+ private var stream: PrintTarget?
111
+ private var status = SubscriptionStatus.awaitingSubscription
112
+ private let lock = UnfairLock.allocate()
113
+
114
+ init(downstream: Downstream, prefix: String, stream: TextOutputStream?) {
115
+ self.downstream = downstream
116
+ self.prefix = prefix.isEmpty ? "" : "\(prefix): "
117
+ self.stream = stream.map(PrintTarget.init)
118
+ }
119
+
120
+ deinit {
121
+ lock.deallocate()
122
+ }
123
+
124
+ func receive(subscription: Subscription) {
125
+ log("\(prefix)receive subscription: (\(subscription))")
126
+ lock.lock()
127
+ guard case .awaitingSubscription = status else {
128
+ lock.unlock()
129
+ subscription.cancel()
130
+ return
131
+ }
132
+ status = .subscribed(subscription)
133
+ lock.unlock()
134
+ downstream.receive(subscription: self)
135
+ }
136
+
137
+ func receive(_ input: Input) -> Subscribers.Demand {
138
+ log("\(prefix)receive value: (\(input))")
139
+ let demand = downstream.receive(input)
140
+
141
+ if let max = demand.max {
142
+ log("\(prefix)request max: (\(max)) (synchronous)")
143
+ } else {
144
+ log("\(prefix)request unlimited (synchronous)")
145
+ }
146
+
147
+ return demand
148
+ }
149
+
150
+ func receive(completion: Subscribers.Completion<Failure>) {
151
+ switch completion {
152
+ case .finished:
153
+ log("\(prefix)receive finished")
154
+ case .failure(let error):
155
+ log("\(prefix)receive error: (\(error))")
156
+ }
157
+ lock.lock()
158
+ status = .terminal
159
+ lock.unlock()
160
+ downstream.receive(completion: completion)
161
+ }
162
+
163
+ func request(_ demand: Subscribers.Demand) {
164
+ if let max = demand.max {
165
+ log("\(prefix)request max: (\(max))")
166
+ } else {
167
+ log("\(prefix)request unlimited")
168
+ }
169
+ lock.lock()
170
+ guard case let .subscribed(subscription) = status else {
171
+ lock.unlock()
172
+ return
173
+ }
174
+ lock.unlock()
175
+ subscription.request(demand)
176
+ }
177
+
178
+ func cancel() {
179
+ log("\(prefix)receive cancel")
180
+ lock.lock()
181
+ guard case let .subscribed(subscription) = status else {
182
+ lock.unlock()
183
+ return
184
+ }
185
+ status = .terminal
186
+ lock.unlock()
187
+ subscription.cancel()
188
+ }
189
+
190
+ var description: String { return "Print" }
191
+
192
+ var customMirror: Mirror { return Mirror(self, children: EmptyCollection()) }
193
+
194
+ var playgroundDescription: Any { return description }
195
+
196
+ // MARK: - Private
197
+
198
+ private func log(_ text: String) {
199
+ if var stream = stream {
200
+ Swift.print(text, to: &stream)
201
+ } else {
202
+ Swift.print(text)
203
+ }
204
+ }
205
+ }
206
+ }
@@ -0,0 +1,227 @@
1
+ //
2
+ // Publishers.ReceiveOn.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 02.12.2019.
6
+ //
7
+
8
+ extension Publisher {
9
+ /// Specifies the scheduler on which to receive elements from the publisher.
10
+ ///
11
+ /// You use the `receive(on:options:)` operator to receive results and completion on
12
+ /// a specific scheduler, such as performing UI work on the main run loop. In contrast
13
+ /// with `subscribe(on:options:)`, which affects upstream messages,
14
+ /// `receive(on:options:)` changes the execution context of downstream messages.
15
+ ///
16
+ /// In the following example, the `subscribe(on:options:)` operator causes
17
+ /// `jsonPublisher` to receive requests on `backgroundQueue`, while
18
+ /// the `receive(on:options:)` causes `labelUpdater` to receive elements and
19
+ /// completion on `RunLoop.main`.
20
+ ///
21
+ /// // Some publisher.
22
+ /// let jsonPublisher = MyJSONLoaderPublisher()
23
+ ///
24
+ /// // Some subscriber that updates the UI.
25
+ /// let labelUpdater = MyLabelUpdateSubscriber()
26
+ ///
27
+ /// jsonPublisher
28
+ /// .subscribe(on: backgroundQueue)
29
+ /// .receive(on: RunLoop.main)
30
+ /// .subscribe(labelUpdater)
31
+ ///
32
+ ///
33
+ /// Prefer `receive(on:options:)` over explicit use of dispatch queues when performing
34
+ /// work in subscribers. For example, instead of the following pattern:
35
+ ///
36
+ /// pub.sink {
37
+ /// DispatchQueue.main.async {
38
+ /// // Do something.
39
+ /// }
40
+ /// }
41
+ ///
42
+ /// Use this pattern instead:
43
+ ///
44
+ /// pub.receive(on: DispatchQueue.main).sink {
45
+ /// // Do something.
46
+ /// }
47
+ ///
48
+ /// > Note: `receive(on:options:)` doesn’t affect the scheduler used to cal
49
+ /// the subscriber’s `receive(subscription:)` method.
50
+ ///
51
+ /// - Parameters:
52
+ /// - scheduler: The scheduler the publisher uses for element delivery.
53
+ /// - options: Scheduler options used to customize element delivery.
54
+ /// - Returns: A publisher that delivers elements using the specified scheduler.
55
+ public func receive<Context: Scheduler>(
56
+ on scheduler: Context,
57
+ options: Context.SchedulerOptions? = nil
58
+ ) -> Publishers.ReceiveOn<Self, Context> {
59
+ return .init(upstream: self, scheduler: scheduler, options: options)
60
+ }
61
+ }
62
+
63
+ extension Publishers {
64
+
65
+ /// A publisher that delivers elements to its downstream subscriber on a specific
66
+ /// scheduler.
67
+ public struct ReceiveOn<Upstream: Publisher, Context: Scheduler>: Publisher {
68
+
69
+ public typealias Output = Upstream.Output
70
+
71
+ public typealias Failure = Upstream.Failure
72
+
73
+ /// The publisher from which this publisher receives elements.
74
+ public let upstream: Upstream
75
+
76
+ /// The scheduler the publisher is to use for element delivery.
77
+ public let scheduler: Context
78
+
79
+ /// Scheduler options that customize the delivery of elements.
80
+ public let options: Context.SchedulerOptions?
81
+
82
+ public init(upstream: Upstream,
83
+ scheduler: Context,
84
+ options: Context.SchedulerOptions?) {
85
+ self.upstream = upstream
86
+ self.scheduler = scheduler
87
+ self.options = options
88
+ }
89
+
90
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
91
+ where Upstream.Failure == Downstream.Failure,
92
+ Upstream.Output == Downstream.Input
93
+ {
94
+ let inner = Inner(scheduler: scheduler,
95
+ options: options,
96
+ downstream: subscriber)
97
+ upstream.subscribe(inner)
98
+ }
99
+ }
100
+ }
101
+
102
+ extension Publishers.ReceiveOn {
103
+ private final class Inner<Downstream: Subscriber>
104
+ : Subscriber,
105
+ Subscription,
106
+ CustomStringConvertible,
107
+ CustomReflectable,
108
+ CustomPlaygroundDisplayConvertible
109
+ where Downstream.Input == Upstream.Output, Downstream.Failure == Upstream.Failure
110
+ {
111
+ typealias Input = Upstream.Output
112
+ typealias Failure = Upstream.Failure
113
+
114
+ private let lock = UnfairLock.allocate()
115
+ private let downstream: Downstream
116
+ private let scheduler: Context
117
+ private let options: Context.SchedulerOptions?
118
+ private var state = SubscriptionStatus.awaitingSubscription
119
+ private let downstreamLock = UnfairRecursiveLock.allocate()
120
+
121
+ init(scheduler: Context,
122
+ options: Context.SchedulerOptions?,
123
+ downstream: Downstream) {
124
+ self.downstream = downstream
125
+ self.scheduler = scheduler
126
+ self.options = options
127
+ }
128
+
129
+ deinit {
130
+ lock.deallocate()
131
+ downstreamLock.deallocate()
132
+ }
133
+
134
+ func receive(subscription: Subscription) {
135
+ lock.lock()
136
+ guard case .awaitingSubscription = state else {
137
+ lock.unlock()
138
+ subscription.cancel()
139
+ return
140
+ }
141
+ state = .subscribed(subscription)
142
+ lock.unlock()
143
+ downstreamLock.lock()
144
+ downstream.receive(subscription: self)
145
+ downstreamLock.unlock()
146
+ }
147
+
148
+ func receive(_ input: Input) -> Subscribers.Demand {
149
+ lock.lock()
150
+ guard case .subscribed = state else {
151
+ lock.unlock()
152
+ return .none
153
+ }
154
+ lock.unlock()
155
+ scheduler.schedule(options: options) {
156
+ self.scheduledReceive(input)
157
+ }
158
+ return .none
159
+ }
160
+
161
+ private func scheduledReceive(_ input: Input) {
162
+ lock.lock()
163
+ guard state.subscription != nil else {
164
+ lock.unlock()
165
+ return
166
+ }
167
+ lock.unlock()
168
+ downstreamLock.lock()
169
+ let newDemand = downstream.receive(input)
170
+ downstreamLock.unlock()
171
+ if newDemand == .none { return }
172
+ lock.lock()
173
+ let subscription = state.subscription
174
+ lock.unlock()
175
+ subscription?.request(newDemand)
176
+ }
177
+
178
+ func receive(completion: Subscribers.Completion<Failure>) {
179
+ lock.lock()
180
+ guard case let .subscribed(subscription) = state else {
181
+ lock.unlock()
182
+ return
183
+ }
184
+ state = .pendingTerminal(subscription)
185
+ lock.unlock()
186
+ scheduler.schedule(options: options) {
187
+ self.scheduledReceive(completion: completion)
188
+ }
189
+ }
190
+
191
+ private func scheduledReceive(completion: Subscribers.Completion<Failure>) {
192
+ lock.lock()
193
+ state = .terminal
194
+ lock.unlock()
195
+ downstreamLock.lock()
196
+ downstream.receive(completion: completion)
197
+ downstreamLock.unlock()
198
+ }
199
+
200
+ func request(_ demand: Subscribers.Demand) {
201
+ lock.lock()
202
+ guard case let .subscribed(subscription) = state else {
203
+ lock.unlock()
204
+ return
205
+ }
206
+ lock.unlock()
207
+ subscription.request(demand)
208
+ }
209
+
210
+ func cancel() {
211
+ lock.lock()
212
+ guard case let .subscribed(subscription) = state else {
213
+ lock.unlock()
214
+ return
215
+ }
216
+ state = .terminal
217
+ lock.unlock()
218
+ subscription.cancel()
219
+ }
220
+
221
+ var description: String { return "ReceiveOn" }
222
+
223
+ var customMirror: Mirror { return Mirror(self, children: EmptyCollection()) }
224
+
225
+ var playgroundDescription: Any { return description }
226
+ }
227
+ }
@@ -0,0 +1,204 @@
1
+ //
2
+ // Publishers.Reduce.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 09.10.2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Applies a closure that collects each element of a stream and publishes a final
11
+ /// result upon completion.
12
+ ///
13
+ /// Use `reduce(_:_:)` to collect a stream of elements and produce an accumulated
14
+ /// value based on a closure you provide.
15
+ ///
16
+ /// In the following example, the `reduce(_:_:)` operator collects all the integer
17
+ /// values it receives from its upstream publisher:
18
+ ///
19
+ /// let numbers = (0...10)
20
+ /// cancellable = numbers.publisher
21
+ /// .reduce(0, { accum, next in accum + next })
22
+ /// .sink { print("\($0)") }
23
+ ///
24
+ /// // Prints: "55"
25
+ ///
26
+ /// - Parameters:
27
+ /// - initialResult: The value that the closure receives the first time it’s called.
28
+ /// - nextPartialResult: A closure that produces a new value by taking
29
+ /// the previously-accumulated value and the next element it receives from
30
+ /// the upstream publisher.
31
+ /// - Returns: A publisher that applies the closure to all received elements and
32
+ /// produces an accumulated value when the upstream publisher finishes.
33
+ /// If `reduce(_:_:)` receives an error from the upstream publisher, the operator
34
+ /// delivers it to the downstream subscriber, the publisher terminates and publishes
35
+ /// no value.
36
+ public func reduce<Accumulator>(
37
+ _ initialResult: Accumulator,
38
+ _ nextPartialResult: @escaping (Accumulator, Output) -> Accumulator
39
+ ) -> Publishers.Reduce<Self, Accumulator> {
40
+ return .init(upstream: self,
41
+ initial: initialResult,
42
+ nextPartialResult: nextPartialResult)
43
+ }
44
+
45
+ /// Applies an error-throwing closure that collects each element of a stream and
46
+ /// publishes a final result upon completion.
47
+ ///
48
+ /// Use `tryReduce(_:_:)` to collect a stream of elements and produce an accumulated
49
+ /// value based on an error-throwing closure you provide.
50
+ /// If the closure throws an error, the publisher fails and passes the error to its
51
+ /// subscriber.
52
+ ///
53
+ /// In the example below, the publisher’s `0` element causes the `myDivide(_:_:)`
54
+ /// function to throw an error and publish the `Double.nan` result:
55
+ ///
56
+ /// struct DivisionByZeroError: Error {}
57
+ /// func myDivide(_ dividend: Double, _ divisor: Double) throws -> Double {
58
+ /// guard divisor != 0 else { throw DivisionByZeroError() }
59
+ /// return dividend / divisor
60
+ /// }
61
+ ///
62
+ /// var numbers: [Double] = [5, 4, 3, 2, 1, 0]
63
+ /// numbers.publisher
64
+ /// .tryReduce(numbers.first!, { accum, next in try myDivide(accum, next) })
65
+ /// .catch({ _ in Just(Double.nan) })
66
+ /// .sink { print("\($0)") }
67
+ ///
68
+
69
+ /// - Parameters:
70
+ /// - initialResult: The value that the closure receives the first time it’s called.
71
+ /// - nextPartialResult: An error-throwing closure that takes
72
+ /// the previously-accumulated value and the next element from the upstream
73
+ /// publisher to produce a new value.
74
+ ///
75
+ /// - Returns: A publisher that applies the closure to all received elements and
76
+ /// produces an accumulated value when the upstream publisher finishes.
77
+ public func tryReduce<Accumulator>(
78
+ _ initialResult: Accumulator,
79
+ _ nextPartialResult: @escaping (Accumulator, Output) throws -> Accumulator
80
+ ) -> Publishers.TryReduce<Self, Accumulator> {
81
+ return .init(upstream: self,
82
+ initial: initialResult,
83
+ nextPartialResult: nextPartialResult)
84
+ }
85
+ }
86
+
87
+ extension Publishers {
88
+
89
+ /// A publisher that applies a closure to all received elements and produces
90
+ /// an accumulated value when the upstream publisher finishes.
91
+ public struct Reduce<Upstream: Publisher, Output>: Publisher {
92
+
93
+ public typealias Failure = Upstream.Failure
94
+
95
+ public let upstream: Upstream
96
+
97
+ /// The initial value provided on the first invocation of the closure.
98
+ public let initial: Output
99
+
100
+ /// A closure that takes the previously-accumulated value and the next element
101
+ /// from the upstream publisher to produce a new value.
102
+ public let nextPartialResult: (Output, Upstream.Output) -> Output
103
+
104
+ public init(upstream: Upstream,
105
+ initial: Output,
106
+ nextPartialResult: @escaping (Output, Upstream.Output) -> Output) {
107
+ self.upstream = upstream
108
+ self.initial = initial
109
+ self.nextPartialResult = nextPartialResult
110
+ }
111
+
112
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
113
+ where Output == Downstream.Input, Upstream.Failure == Downstream.Failure
114
+ {
115
+ let inner = Inner(downstream: subscriber,
116
+ initial: initial,
117
+ reduce: nextPartialResult)
118
+ upstream.subscribe(inner)
119
+ }
120
+ }
121
+
122
+ /// A publisher that applies an error-throwing closure to all received elements and
123
+ /// produces an accumulated value when the upstream publisher finishes.
124
+ public struct TryReduce<Upstream: Publisher, Output>: Publisher {
125
+
126
+ public typealias Failure = Error
127
+
128
+ /// The publisher from which this publisher receives elements.
129
+ public let upstream: Upstream
130
+
131
+ /// The initial value provided on the first invocation of the closure.
132
+ public let initial: Output
133
+
134
+ /// An error-throwing closure that takes the previously-accumulated value and
135
+ /// the next element from the upstream to produce a new value.
136
+ ///
137
+ /// If this closure throws an error, the publisher fails and passes the error
138
+ /// to its subscriber.
139
+ public let nextPartialResult: (Output, Upstream.Output) throws -> Output
140
+
141
+ public init(
142
+ upstream: Upstream,
143
+ initial: Output,
144
+ nextPartialResult: @escaping (Output, Upstream.Output) throws -> Output
145
+ ) {
146
+ self.upstream = upstream
147
+ self.initial = initial
148
+ self.nextPartialResult = nextPartialResult
149
+ }
150
+
151
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
152
+ where Output == Downstream.Input, Downstream.Failure == Error
153
+ {
154
+ let inner = Inner(downstream: subscriber,
155
+ initial: initial,
156
+ reduce: nextPartialResult)
157
+ upstream.subscribe(inner)
158
+ }
159
+ }
160
+ }
161
+
162
+ extension Publishers.Reduce {
163
+ private final class Inner<Downstream: Subscriber>
164
+ : ReduceProducer<Downstream,
165
+ Upstream.Output,
166
+ Output,
167
+ Upstream.Failure,
168
+ (Output, Upstream.Output) -> Output>
169
+ where Downstream.Input == Output, Upstream.Failure == Downstream.Failure
170
+ {
171
+ override func receive(
172
+ newValue: Upstream.Output
173
+ ) -> PartialCompletion<Void, Downstream.Failure> {
174
+ result = reduce(result!, newValue)
175
+ return .continue
176
+ }
177
+
178
+ override var description: String { return "Reduce" }
179
+ }
180
+ }
181
+
182
+ extension Publishers.TryReduce {
183
+ private final class Inner<Downstream: Subscriber>
184
+ : ReduceProducer<Downstream,
185
+ Upstream.Output,
186
+ Output,
187
+ Upstream.Failure,
188
+ (Output, Upstream.Output) throws -> Output>
189
+ where Downstream.Input == Output, Downstream.Failure == Error
190
+ {
191
+ override func receive(
192
+ newValue: Upstream.Output
193
+ ) -> PartialCompletion<Void, Downstream.Failure> {
194
+ do {
195
+ result = try reduce(result!, newValue)
196
+ return .continue
197
+ } catch {
198
+ return .failure(error)
199
+ }
200
+ }
201
+
202
+ override var description: String { return "TryReduce" }
203
+ }
204
+ }