@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,82 @@
1
+ //
2
+ // Publishers.MakeConnectable.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 18/09/2019.
6
+ //
7
+
8
+ extension Publisher where Failure == Never {
9
+
10
+ /// Creates a connectable wrapper around the publisher.
11
+ ///
12
+ /// In the following example, `makeConnectable()` wraps its upstream publisher
13
+ /// (an instance of `Publishers.Share`) with a `ConnectablePublisher`. Without this,
14
+ /// the first sink subscriber would receive all the elements from the sequence
15
+ /// publisher and cause it to complete before the second subscriber attaches.
16
+ /// By making the publisher connectable, the publisher doesn’t produce any elements
17
+ /// until after the `connect()` call.
18
+ ///
19
+ /// let subject = Just<String>("Sent")
20
+ /// let pub = subject
21
+ /// .share()
22
+ /// .makeConnectable()
23
+ /// cancellable1 = pub.sink { print ("Stream 1 received: \($0)") }
24
+ ///
25
+ /// // For example purposes, use DispatchQueue to add a second subscriber
26
+ /// // a second later, and then connect to the publisher a second after that.
27
+ /// DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
28
+ /// self.cancellable2 = pub.sink { print ("Stream 2 received: \($0)") }
29
+ /// }
30
+ /// DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
31
+ /// self.connectable = pub.connect()
32
+ /// }
33
+ /// // Prints:
34
+ /// // Stream 2 received: Sent
35
+ /// // Stream 1 received: Sent
36
+ ///
37
+ /// > Note: The `connect()` operator returns a `Cancellable` instance that you must
38
+ /// retain. You can also use this instance to cancel publishing.
39
+ ///
40
+ /// - Returns: A `ConnectablePublisher` wrapping this publisher.
41
+ public func makeConnectable() -> Publishers.MakeConnectable<Self> {
42
+ return .init(upstream: self)
43
+ }
44
+ }
45
+
46
+ extension Publishers {
47
+
48
+ /// A publisher that provides explicit connectability to another publisher.
49
+ ///
50
+ /// `Publishers.MakeConnectable` is a `ConnectablePublisher`, which allows you to
51
+ /// perform configuration before publishing any elements. Call `connect()` on this
52
+ /// publisher when you want to attach to its upstream publisher and start producing
53
+ /// elements.
54
+ ///
55
+ /// Use the `makeConnectable()` operator to wrap an upstream publisher with
56
+ /// an instance of this publisher.
57
+ public struct MakeConnectable<Upstream: Publisher>: ConnectablePublisher {
58
+
59
+ public typealias Output = Upstream.Output
60
+
61
+ public typealias Failure = Upstream.Failure
62
+
63
+ private let inner: Multicast<Upstream, PassthroughSubject<Output, Failure>>
64
+
65
+ /// Creates a connectable publisher, attached to the provide upstream publisher.
66
+ ///
67
+ /// - Parameter upstream: The publisher from which to receive elements.
68
+ public init(upstream: Upstream) {
69
+ inner = upstream.multicast(subject: .init())
70
+ }
71
+
72
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
73
+ where Downstream.Failure == Failure, Downstream.Input == Output
74
+ {
75
+ inner.subscribe(subscriber)
76
+ }
77
+
78
+ public func connect() -> Cancellable {
79
+ return inner.connect()
80
+ }
81
+ }
82
+ }
@@ -0,0 +1,351 @@
1
+ //
2
+ // Publishers.Map.swift
3
+ //
4
+ //
5
+ // Created by Anton Nazarov on 25.06.2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Transforms all elements from the upstream publisher with a provided closure.
11
+ ///
12
+ /// OpenCombine’s `map(_:)` operator performs a function similar to that of `map(_:)`
13
+ /// in the Swift standard library: it uses a closure to transform each element it
14
+ /// receives from the upstream publisher. You use `map(_:)` to transform from one kind
15
+ /// of element to another.
16
+ ///
17
+ /// The following example uses an array of numbers as the source for a collection
18
+ /// based publisher. A `map(_:)` operator consumes each integer from the publisher and
19
+ /// uses a dictionary to transform it from its Arabic numeral to a Roman equivalent,
20
+ /// as a `String`.
21
+ /// If the `map(_:)`’s closure fails to look up a Roman numeral, it returns the string
22
+ /// `(unknown)`.
23
+ ///
24
+ /// let numbers = [5, 4, 3, 2, 1, 0]
25
+ /// let romanNumeralDict: [Int : String] =
26
+ /// [1:"I", 2:"II", 3:"III", 4:"IV", 5:"V"]
27
+ /// cancellable = numbers.publisher
28
+ /// .map { romanNumeralDict[$0] ?? "(unknown)" }
29
+ /// .sink { print("\($0)", terminator: " ") }
30
+ ///
31
+ /// // Prints: "V IV III II I (unknown)"
32
+ ///
33
+ /// If your closure can throw an error, use OpenCombine’s `tryMap(_:)` operator
34
+ /// instead.
35
+ ///
36
+ /// - Parameter transform: A closure that takes one element as its parameter and
37
+ /// returns a new element.
38
+ /// - Returns: A publisher that uses the provided closure to map elements from
39
+ /// the upstream publisher to new elements that it then publishes.
40
+ public func map<Result>(
41
+ _ transform: @escaping (Output) -> Result
42
+ ) -> Publishers.Map<Self, Result> {
43
+ return Publishers.Map(upstream: self, transform: transform)
44
+ }
45
+
46
+ /// Transforms all elements from the upstream publisher with a provided error-throwing
47
+ /// closure.
48
+ ///
49
+ /// OpenCombine’s `tryMap(_:)` operator performs a function similar to that of
50
+ /// `map(_:)` in the Swift standard library: it uses a closure to transform each
51
+ /// element it receives from the upstream publisher. You use `tryMap(_:)` to transform
52
+ /// from one kind of element to another, and to terminate publishing when the map’s
53
+ /// closure throws an error.
54
+ ///
55
+ /// The following example uses an array of numbers as the source for a collection
56
+ /// based publisher. A `tryMap(_:)` operator consumes each integer from the publisher
57
+ /// and uses a dictionary to transform it from its Arabic numeral to a Roman
58
+ /// equivalent, as a `String`.
59
+ /// If the `tryMap(_:)`’s closure fails to look up a Roman numeral, it throws
60
+ /// an error. The `tryMap(_:)` operator catches this error and terminates publishing,
61
+ /// sending a `Subscribers.Completion.failure(_:)` that wraps the error.
62
+ ///
63
+ /// struct ParseError: Error {}
64
+ /// func romanNumeral(from:Int) throws -> String {
65
+ /// let romanNumeralDict: [Int : String] =
66
+ /// [1:"I", 2:"II", 3:"III", 4:"IV", 5:"V"]
67
+ /// guard let numeral = romanNumeralDict[from] else {
68
+ /// throw ParseError()
69
+ /// }
70
+ /// return numeral
71
+ /// }
72
+ /// let numbers = [5, 4, 3, 2, 1, 0]
73
+ /// cancellable = numbers.publisher
74
+ /// .tryMap { try romanNumeral(from: $0) }
75
+ /// .sink(
76
+ /// receiveCompletion: { print ("completion: \($0)") },
77
+ /// receiveValue: { print ("\($0)", terminator: " ") }
78
+ /// )
79
+ ///
80
+ /// // Prints: "V IV III II I completion: failure(ParseError())"
81
+ ///
82
+ /// If your closure doesn’t throw, use `map(_:)` instead.
83
+ ///
84
+ /// - Parameter transform: A closure that takes one element as its parameter and
85
+ /// returns a new element. If the closure throws an error, the publisher fails with
86
+ /// the thrown error.
87
+ /// - Returns: A publisher that uses the provided closure to map elements from
88
+ /// the upstream publisher to new elements that it then publishes.
89
+ public func tryMap<Result>(
90
+ _ transform: @escaping (Output) throws -> Result
91
+ ) -> Publishers.TryMap<Self, Result> {
92
+ return Publishers.TryMap(upstream: self, transform: transform)
93
+ }
94
+
95
+ /// Replaces `nil` elements in the stream with the provided element.
96
+ ///
97
+ /// The `replaceNil(with:)` operator enables replacement of `nil` values in a stream
98
+ /// with a substitute value. In the example below, a collection publisher contains
99
+ /// a `nil` value. The `replaceNil(with:)` operator replaces this with `0.0`.
100
+ ///
101
+ /// let numbers: [Double?] = [1.0, 2.0, nil, 3.0]
102
+ /// numbers.publisher
103
+ /// .replaceNil(with: 0.0)
104
+ /// .sink { print("\($0)", terminator: " ") }
105
+ ///
106
+ /// // Prints: "Optional(1.0) Optional(2.0) Optional(0.0) Optional(3.0)"
107
+ ///
108
+ /// - Parameter output: The element to use when replacing `nil`.
109
+ /// - Returns: A publisher that replaces `nil` elements from the upstream publisher
110
+ /// with the provided element.
111
+ public func replaceNil<ElementOfResult>(
112
+ with output: ElementOfResult
113
+ ) -> Publishers.Map<Self, ElementOfResult>
114
+ where Output == ElementOfResult?
115
+ {
116
+ return Publishers.Map(upstream: self) { $0 ?? output }
117
+ }
118
+ }
119
+
120
+ extension Publishers {
121
+ /// A publisher that transforms all elements from the upstream publisher with
122
+ /// a provided closure.
123
+ public struct Map<Upstream: Publisher, Output>: Publisher {
124
+
125
+ public typealias Failure = Upstream.Failure
126
+
127
+ /// The publisher from which this publisher receives elements.
128
+ public let upstream: Upstream
129
+
130
+ /// The closure that transforms elements from the upstream publisher.
131
+ public let transform: (Upstream.Output) -> Output
132
+
133
+ public init(upstream: Upstream,
134
+ transform: @escaping (Upstream.Output) -> Output) {
135
+ self.upstream = upstream
136
+ self.transform = transform
137
+ }
138
+
139
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
140
+ where Output == Downstream.Input, Downstream.Failure == Upstream.Failure
141
+ {
142
+ upstream.subscribe(Inner(downstream: subscriber, map: transform))
143
+ }
144
+ }
145
+
146
+ /// A publisher that transforms all elements from the upstream publisher
147
+ /// with a provided error-throwing closure.
148
+ public struct TryMap<Upstream: Publisher, Output>: Publisher {
149
+
150
+ public typealias Failure = Error
151
+
152
+ /// The publisher from which this publisher receives elements.
153
+ public let upstream: Upstream
154
+
155
+ /// The error-throwing closure that transforms elements from
156
+ /// the upstream publisher.
157
+ public let transform: (Upstream.Output) throws -> Output
158
+
159
+ public init(upstream: Upstream,
160
+ transform: @escaping (Upstream.Output) throws -> Output) {
161
+ self.upstream = upstream
162
+ self.transform = transform
163
+ }
164
+ }
165
+ }
166
+
167
+ extension Publishers.Map {
168
+
169
+ public func map<Result>(
170
+ _ transform: @escaping (Output) -> Result
171
+ ) -> Publishers.Map<Upstream, Result> {
172
+ return .init(upstream: upstream) { transform(self.transform($0)) }
173
+ }
174
+
175
+ public func tryMap<Result>(
176
+ _ transform: @escaping (Output) throws -> Result
177
+ ) -> Publishers.TryMap<Upstream, Result> {
178
+ return .init(upstream: upstream) { try transform(self.transform($0)) }
179
+ }
180
+ }
181
+
182
+ extension Publishers.TryMap {
183
+
184
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
185
+ where Output == Downstream.Input, Downstream.Failure == Error
186
+ {
187
+ upstream.subscribe(Inner(downstream: subscriber, map: transform))
188
+ }
189
+
190
+ public func map<Result>(
191
+ _ transform: @escaping (Output) -> Result
192
+ ) -> Publishers.TryMap<Upstream, Result> {
193
+ return .init(upstream: upstream) { try transform(self.transform($0)) }
194
+ }
195
+
196
+ public func tryMap<Result>(
197
+ _ transform: @escaping (Output) throws -> Result
198
+ ) -> Publishers.TryMap<Upstream, Result> {
199
+ return .init(upstream: upstream) { try transform(self.transform($0)) }
200
+ }
201
+ }
202
+
203
+ extension Publishers.Map {
204
+
205
+ private struct Inner<Downstream: Subscriber>
206
+ : Subscriber,
207
+ CustomStringConvertible,
208
+ CustomReflectable,
209
+ CustomPlaygroundDisplayConvertible
210
+ where Downstream.Input == Output, Downstream.Failure == Upstream.Failure
211
+ {
212
+ typealias Input = Upstream.Output
213
+
214
+ typealias Failure = Upstream.Failure
215
+
216
+ private let downstream: Downstream
217
+
218
+ private let map: (Input) -> Output
219
+
220
+ let combineIdentifier = CombineIdentifier()
221
+
222
+ fileprivate init(downstream: Downstream, map: @escaping (Input) -> Output) {
223
+ self.downstream = downstream
224
+ self.map = map
225
+ }
226
+
227
+ func receive(subscription: Subscription) {
228
+ downstream.receive(subscription: subscription)
229
+ }
230
+
231
+ func receive(_ input: Input) -> Subscribers.Demand {
232
+ return downstream.receive(map(input))
233
+ }
234
+
235
+ func receive(completion: Subscribers.Completion<Failure>) {
236
+ downstream.receive(completion: completion)
237
+ }
238
+
239
+ var description: String { return "Map" }
240
+
241
+ var customMirror: Mirror {
242
+ return Mirror(self, children: EmptyCollection())
243
+ }
244
+
245
+ var playgroundDescription: Any { return description }
246
+ }
247
+ }
248
+
249
+ extension Publishers.TryMap {
250
+
251
+ private final class Inner<Downstream: Subscriber>
252
+ : Subscriber,
253
+ Subscription,
254
+ CustomStringConvertible,
255
+ CustomReflectable,
256
+ CustomPlaygroundDisplayConvertible
257
+ where Downstream.Input == Output, Downstream.Failure == Error
258
+ {
259
+ // NOTE: This class has been audited for thread-safety
260
+
261
+ typealias Input = Upstream.Output
262
+
263
+ typealias Failure = Upstream.Failure
264
+
265
+ private let downstream: Downstream
266
+
267
+ private let map: (Input) throws -> Output
268
+
269
+ private var status = SubscriptionStatus.awaitingSubscription
270
+
271
+ private let lock = UnfairLock.allocate()
272
+
273
+ let combineIdentifier = CombineIdentifier()
274
+
275
+ fileprivate init(downstream: Downstream,
276
+ map: @escaping (Input) throws -> Output) {
277
+ self.downstream = downstream
278
+ self.map = map
279
+ }
280
+
281
+ deinit {
282
+ lock.deallocate()
283
+ }
284
+
285
+ func receive(subscription: Subscription) {
286
+ lock.lock()
287
+ guard case .awaitingSubscription = status else {
288
+ lock.unlock()
289
+ subscription.cancel()
290
+ return
291
+ }
292
+ status = .subscribed(subscription)
293
+ lock.unlock()
294
+ downstream.receive(subscription: self)
295
+ }
296
+
297
+ func receive(_ input: Input) -> Subscribers.Demand {
298
+ do {
299
+ return try downstream.receive(map(input))
300
+ } catch {
301
+ lock.lock()
302
+ let subscription = status.subscription
303
+ status = .terminal
304
+ lock.unlock()
305
+ subscription?.cancel()
306
+ downstream.receive(completion: .failure(error))
307
+ return .none
308
+ }
309
+ }
310
+
311
+ func receive(completion: Subscribers.Completion<Failure>) {
312
+ lock.lock()
313
+ guard case .subscribed = status else {
314
+ lock.unlock()
315
+ return
316
+ }
317
+ status = .terminal
318
+ lock.unlock()
319
+ downstream.receive(completion: completion.eraseError())
320
+ }
321
+
322
+ func request(_ demand: Subscribers.Demand) {
323
+ lock.lock()
324
+ guard case let .subscribed(subscription) = status else {
325
+ lock.unlock()
326
+ return
327
+ }
328
+ lock.unlock()
329
+ subscription.request(demand)
330
+ }
331
+
332
+ func cancel() {
333
+ lock.lock()
334
+ guard case let .subscribed(subscription) = status else {
335
+ lock.unlock()
336
+ return
337
+ }
338
+ status = .terminal
339
+ lock.unlock()
340
+ subscription.cancel()
341
+ }
342
+
343
+ var description: String { return "TryMap" }
344
+
345
+ var customMirror: Mirror {
346
+ return Mirror(self, children: EmptyCollection())
347
+ }
348
+
349
+ var playgroundDescription: Any { return description }
350
+ }
351
+ }
@@ -0,0 +1,140 @@
1
+ //
2
+ // Publishers.MapError.swift
3
+ //
4
+ //
5
+ // Created by Joseph Spadafora on 7/4/19.
6
+ //
7
+
8
+ extension Publishers {
9
+
10
+ /// A publisher that converts any failure from the
11
+ /// upstream publisher into a new error.
12
+ public struct MapError<Upstream: Publisher, Failure: Error>: Publisher {
13
+
14
+ /// The kind of values published by this publisher.
15
+ public typealias Output = Upstream.Output
16
+
17
+ /// The publisher from which this publisher receives elements.
18
+ public let upstream: Upstream
19
+
20
+ /// The closure that converts the upstream failure into a new error.
21
+ public let transform: (Upstream.Failure) -> Failure
22
+
23
+ public init(upstream: Upstream, _ map: @escaping (Upstream.Failure) -> Failure) {
24
+ self.upstream = upstream
25
+ self.transform = map
26
+ }
27
+
28
+ /// This function is called to attach the specified `Subscriber`
29
+ /// to this `Publisher` by `subscribe(_:)`
30
+ ///
31
+ /// - SeeAlso: `subscribe(_:)`
32
+ /// - Parameters:
33
+ /// - subscriber: The subscriber to attach to this `Publisher`.
34
+ /// once attached it can begin to receive values.
35
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
36
+ where Failure == Downstream.Failure,
37
+ Upstream.Output == Downstream.Input
38
+ {
39
+ upstream.subscribe(Inner(downstream: subscriber, map: transform))
40
+ }
41
+ }
42
+ }
43
+
44
+ extension Publisher {
45
+
46
+ /// Converts any failure from the upstream publisher into a new error.
47
+ ///
48
+ /// Use the `mapError(_:)` operator when you need to replace one error type with
49
+ /// another, or where a downstream operator needs the error types of its inputs to
50
+ /// match.
51
+ ///
52
+ /// The following example uses a `tryMap(_:)` operator to divide `1` by each element
53
+ /// produced by a sequence publisher. When the publisher produces a `0`,
54
+ /// the `tryMap(_:)` fails with a `DivisionByZeroError`. The `mapError(_:)` operator
55
+ /// converts this into a `MyGenericError`.
56
+ ///
57
+ /// struct DivisionByZeroError: Error {}
58
+ /// struct MyGenericError: Error { var wrappedError: Error }
59
+ ///
60
+ /// func myDivide(_ dividend: Double, _ divisor: Double) throws -> Double {
61
+ /// guard divisor != 0 else { throw DivisionByZeroError() }
62
+ /// return dividend / divisor
63
+ /// }
64
+ ///
65
+ /// let divisors: [Double] = [5, 4, 3, 2, 1, 0]
66
+ /// divisors.publisher
67
+ /// .tryMap { try myDivide(1, $0) }
68
+ /// .mapError { MyGenericError(wrappedError: $0) }
69
+ /// .sink(
70
+ /// receiveCompletion: { print ("completion: \($0)") ,
71
+ /// receiveValue: { print ("value: \($0)") }
72
+ /// )
73
+ ///
74
+ /// // Prints:
75
+ /// // value: 0.2
76
+ /// // value: 0.25
77
+ /// // value: 0.3333333333333333
78
+ /// // value: 0.5
79
+ /// // value: 1.0
80
+ /// // completion: failure(MyGenericError(wrappedError: DivisionByZeroError()))"
81
+ ///
82
+ /// - Parameter transform: A closure that takes the upstream failure as a parameter
83
+ /// and returns a new error for the publisher to terminate with.
84
+ /// - Returns: A publisher that replaces any upstream failure with a new error
85
+ /// produced by the `transform` closure.
86
+ public func mapError<NewFailure: Error>(
87
+ _ transform: @escaping (Failure) -> NewFailure
88
+ ) -> Publishers.MapError<Self, NewFailure>
89
+ {
90
+ return Publishers.MapError(upstream: self, transform)
91
+ }
92
+ }
93
+
94
+ extension Publishers.MapError {
95
+
96
+ private struct Inner<Downstream: Subscriber>
97
+ : Subscriber,
98
+ CustomStringConvertible,
99
+ CustomReflectable,
100
+ CustomPlaygroundDisplayConvertible
101
+ where Upstream.Output == Downstream.Input
102
+ {
103
+ typealias Input = Upstream.Output
104
+ typealias Failure = Upstream.Failure
105
+
106
+ private let downstream: Downstream
107
+ private let map: (Upstream.Failure) -> Downstream.Failure
108
+
109
+ let combineIdentifier = CombineIdentifier()
110
+
111
+ var description: String { return "MapError" }
112
+
113
+ var customMirror: Mirror { return Mirror(self, children: EmptyCollection()) }
114
+
115
+ var playgroundDescription: Any { return description }
116
+
117
+ init(downstream: Downstream,
118
+ map: @escaping (Upstream.Failure) -> Downstream.Failure) {
119
+ self.downstream = downstream
120
+ self.map = map
121
+ }
122
+
123
+ func receive(subscription: Subscription) {
124
+ downstream.receive(subscription: subscription)
125
+ }
126
+
127
+ func receive(_ input: Input) -> Subscribers.Demand {
128
+ return downstream.receive(input)
129
+ }
130
+
131
+ func receive(completion: Subscribers.Completion<Failure>) {
132
+ switch completion {
133
+ case .finished:
134
+ downstream.receive(completion: .finished)
135
+ case .failure(let error):
136
+ downstream.receive(completion: .failure(map(error)))
137
+ }
138
+ }
139
+ }
140
+ }