@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,378 @@
1
+ //
2
+ // Publishers.DropWhile.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 16.06.2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Omits elements from the upstream publisher until a given closure returns false,
11
+ /// before republishing all remaining elements.
12
+ ///
13
+ /// Use `drop(while:)` to omit elements from an upstream publisher until the element
14
+ /// received meets a condition you specify.
15
+ ///
16
+ /// In the example below, the operator omits all elements in the stream until
17
+ /// the first element arrives that’s a positive integer, after which the operator
18
+ /// publishes all remaining elements:
19
+ ///
20
+ /// let numbers = [-62, -1, 0, 10, 0, 22, 41, -1, 5]
21
+ /// cancellable = numbers.publisher
22
+ /// .drop { $0 <= 0 }
23
+ /// .sink { print("\($0)") }
24
+ ///
25
+ /// // Prints: "10 0 22 41 -1 5"
26
+ ///
27
+ ///
28
+ /// - Parameter predicate: A closure that takes an element as a parameter and returns
29
+ /// a Boolean value indicating whether to drop the element from the publisher’s
30
+ /// output.
31
+ /// - Returns: A publisher that skips over elements until the provided closure returns
32
+ /// `false`.
33
+ public func drop(
34
+ while predicate: @escaping (Output) -> Bool
35
+ ) -> Publishers.DropWhile<Self> {
36
+ return .init(upstream: self, predicate: predicate)
37
+ }
38
+
39
+ /// Omits elements from the upstream publisher until an error-throwing closure returns
40
+ /// false, before republishing all remaining elements.
41
+ ///
42
+ /// Use `Publisher/tryDrop(while:)` to omit elements from an upstream until
43
+ /// an error-throwing closure you provide returns false, after which the remaining
44
+ /// items in the stream are published. If the closure throws, no elements are emitted
45
+ /// and the publisher fails with an error.
46
+ ///
47
+ /// In the example below, elements are ignored until `-1` is encountered in the stream
48
+ /// and the closure returns `false`. The publisher then republishes the remaining
49
+ /// elements and finishes normally. Conversely, if the `guard` value in the closure
50
+ /// had been encountered, the closure would throw and the publisher would fail with
51
+ /// an error.
52
+ ///
53
+ /// struct RangeError: Error {}
54
+ /// var numbers = [1, 2, 3, 4, 5, 6, -1, 7, 8, 9, 10]
55
+ /// let range: CountableClosedRange<Int> = (1...100)
56
+ /// cancellable = numbers.publisher
57
+ /// .tryDrop {
58
+ /// guard $0 != 0 else { throw RangeError() }
59
+ /// return range.contains($0)
60
+ /// }
61
+ /// .sink(
62
+ /// receiveCompletion: { print ("completion: \($0)") },
63
+ /// receiveValue: { print ("value: \($0)") }
64
+ /// )
65
+ ///
66
+ /// // Prints: "-1 7 8 9 10 completion: finished"
67
+ /// // If instead numbers was [1, 2, 3, 4, 5, 6, 0, -1, 7, 8, 9, 10],
68
+ /// // tryDrop(while:) would fail with a RangeError.
69
+ ///
70
+ /// - Parameter predicate: A closure that takes an element as a parameter and returns
71
+ /// a Boolean value indicating whether to drop the element from the publisher’s
72
+ /// output.
73
+ /// - Returns: A publisher that skips over elements until the provided closure returns
74
+ /// `false`, and then republishes all remaining elements. If the predicate closure
75
+ /// throws, the publisher fails with an error.
76
+ public func tryDrop(
77
+ while predicate: @escaping (Output) throws -> Bool
78
+ ) -> Publishers.TryDropWhile<Self> {
79
+ return .init(upstream: self, predicate: predicate)
80
+ }
81
+ }
82
+
83
+ extension Publishers {
84
+
85
+ /// A publisher that omits elements from an upstream publisher until a given closure
86
+ /// returns false.
87
+ public struct DropWhile<Upstream: Publisher>: Publisher {
88
+
89
+ public typealias Output = Upstream.Output
90
+
91
+ public typealias Failure = Upstream.Failure
92
+
93
+ /// The publisher from which this publisher receives elements.
94
+ public let upstream: Upstream
95
+
96
+ /// The closure that indicates whether to drop the element.
97
+ public let predicate: (Output) -> Bool
98
+
99
+ public init(upstream: Upstream, predicate: @escaping (Output) -> Bool) {
100
+ self.upstream = upstream
101
+ self.predicate = predicate
102
+ }
103
+
104
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
105
+ where Failure == Downstream.Failure, Output == Downstream.Input
106
+ {
107
+ upstream.subscribe(Inner(downstream: subscriber, predicate: predicate))
108
+ }
109
+ }
110
+
111
+ /// A publisher that omits elements from an upstream publisher until a given
112
+ /// error-throwing closure returns false.
113
+ public struct TryDropWhile<Upstream: Publisher>: Publisher {
114
+
115
+ public typealias Output = Upstream.Output
116
+
117
+ public typealias Failure = Error
118
+
119
+ /// The publisher from which this publisher receives elements.
120
+ public let upstream: Upstream
121
+
122
+ /// The error-throwing closure that indicates whether to drop the element.
123
+ public let predicate: (Upstream.Output) throws -> Bool
124
+
125
+ public init(upstream: Upstream, predicate: @escaping (Output) throws -> Bool) {
126
+ self.upstream = upstream
127
+ self.predicate = predicate
128
+ }
129
+
130
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
131
+ where Output == Downstream.Input, Downstream.Failure == Error
132
+ {
133
+ upstream.subscribe(Inner(downstream: subscriber, predicate: predicate))
134
+ }
135
+ }
136
+ }
137
+
138
+ extension Publishers.DropWhile {
139
+ private final class Inner<Downstream: Subscriber>
140
+ : Subscriber,
141
+ Subscription,
142
+ CustomStringConvertible,
143
+ CustomReflectable,
144
+ CustomPlaygroundDisplayConvertible
145
+ where Upstream.Output == Downstream.Input, Downstream.Failure == Upstream.Failure
146
+ {
147
+ // NOTE: This class has been audited for thread safety.
148
+
149
+ typealias Input = Upstream.Output
150
+
151
+ typealias Failure = Upstream.Failure
152
+
153
+ private var status = SubscriptionStatus.awaitingSubscription
154
+
155
+ private let downstream: Downstream
156
+
157
+ private var predicate: ((Input) -> Bool)?
158
+
159
+ private var dropping = true
160
+
161
+ private let lock = UnfairLock.allocate()
162
+
163
+ fileprivate init(downstream: Downstream, predicate: @escaping (Input) -> Bool) {
164
+ self.downstream = downstream
165
+ self.predicate = predicate
166
+ }
167
+
168
+ deinit {
169
+ lock.deallocate()
170
+ }
171
+
172
+ func receive(subscription: Subscription) {
173
+ lock.lock()
174
+ guard case .awaitingSubscription = status else {
175
+ lock.unlock()
176
+ subscription.cancel()
177
+ return
178
+ }
179
+ status = .subscribed(subscription)
180
+ lock.unlock()
181
+ downstream.receive(subscription: self)
182
+ }
183
+
184
+ func receive(_ input: Input) -> Subscribers.Demand {
185
+ lock.lock()
186
+ guard case .subscribed = status, let shouldDrop = predicate else {
187
+ lock.unlock()
188
+ return .none
189
+ }
190
+ let dropping = self.dropping
191
+ lock.unlock()
192
+
193
+ if dropping {
194
+ if shouldDrop(input) {
195
+ return .max(1)
196
+ } else {
197
+ lock.lock()
198
+ self.dropping = false
199
+ lock.unlock()
200
+ }
201
+ }
202
+
203
+ return downstream.receive(input)
204
+ }
205
+
206
+ func receive(completion: Subscribers.Completion<Failure>) {
207
+ lock.lock()
208
+ guard case .subscribed = status else {
209
+ lock.unlock()
210
+ return
211
+ }
212
+ status = .terminal
213
+ predicate = nil
214
+ lock.unlock()
215
+ downstream.receive(completion: completion)
216
+ }
217
+
218
+ func request(_ demand: Subscribers.Demand) {
219
+ demand.assertNonZero()
220
+ lock.lock()
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
+ guard case let .subscribed(subscription) = status else {
232
+ lock.unlock()
233
+ return
234
+ }
235
+ status = .terminal
236
+ predicate = nil
237
+ lock.unlock()
238
+ subscription.cancel()
239
+ }
240
+
241
+ var description: String { return "DropWhile" }
242
+
243
+ var customMirror: Mirror { return Mirror(self, children: EmptyCollection()) }
244
+
245
+ var playgroundDescription: Any { return description }
246
+ }
247
+ }
248
+
249
+ extension Publishers.TryDropWhile {
250
+ private final class Inner<Downstream: Subscriber>
251
+ : Subscriber,
252
+ Subscription,
253
+ CustomStringConvertible,
254
+ CustomReflectable,
255
+ CustomPlaygroundDisplayConvertible
256
+ where Upstream.Output == Downstream.Input, Downstream.Failure == Error
257
+ {
258
+ // NOTE: This class has been audited for thread safety.
259
+
260
+ typealias Input = Upstream.Output
261
+
262
+ typealias Failure = Upstream.Failure
263
+
264
+ private var status = SubscriptionStatus.awaitingSubscription
265
+
266
+ private let downstream: Downstream
267
+
268
+ private var predicate: ((Input) throws -> Bool)?
269
+
270
+ private var dropping = true
271
+
272
+ private var finished = false
273
+
274
+ private let lock = UnfairLock.allocate()
275
+
276
+ fileprivate init(downstream: Downstream,
277
+ predicate: @escaping (Input) throws -> Bool) {
278
+ self.downstream = downstream
279
+ self.predicate = predicate
280
+ }
281
+
282
+ deinit {
283
+ lock.deallocate()
284
+ }
285
+
286
+ func receive(subscription: Subscription) {
287
+ lock.lock()
288
+ guard case .awaitingSubscription = status else {
289
+ lock.unlock()
290
+ subscription.cancel()
291
+ return
292
+ }
293
+ status = .subscribed(subscription)
294
+ lock.unlock()
295
+ downstream.receive(subscription: self)
296
+ }
297
+
298
+ func receive(_ input: Upstream.Output) -> Subscribers.Demand {
299
+ lock.lock()
300
+ guard case let .subscribed(subscription) = status,
301
+ let shouldDrop = predicate else {
302
+ lock.unlock()
303
+ return .none
304
+ }
305
+ let dropping = self.dropping
306
+ lock.unlock()
307
+
308
+ if dropping {
309
+ do {
310
+ if try shouldDrop(input) {
311
+ return .max(1)
312
+ } else {
313
+ lock.lock()
314
+ self.dropping = false
315
+ lock.unlock()
316
+ }
317
+ } catch {
318
+ lock.lock()
319
+ status = .terminal
320
+ predicate = nil
321
+ finished = true
322
+ lock.unlock()
323
+ subscription.cancel()
324
+ downstream.receive(completion: .failure(error))
325
+ return .none
326
+ }
327
+ }
328
+
329
+ return downstream.receive(input)
330
+ }
331
+
332
+ func receive(completion: Subscribers.Completion<Failure>) {
333
+ lock.lock()
334
+ guard case .subscribed = status else {
335
+ lock.unlock()
336
+ return
337
+ }
338
+ status = .terminal
339
+ let wasFinished = finished
340
+ finished = true
341
+ lock.unlock()
342
+
343
+ if !wasFinished {
344
+ downstream.receive(completion: completion.eraseError())
345
+ }
346
+ }
347
+
348
+ func request(_ demand: Subscribers.Demand) {
349
+ demand.assertNonZero()
350
+ lock.lock()
351
+ guard case let .subscribed(subscription) = status else {
352
+ lock.unlock()
353
+ return
354
+ }
355
+ lock.unlock()
356
+ subscription.request(demand)
357
+ }
358
+
359
+ func cancel() {
360
+ lock.lock()
361
+ guard case let .subscribed(subscription) = status else {
362
+ lock.unlock()
363
+ return
364
+ }
365
+ status = .terminal
366
+ predicate = nil
367
+ finished = true
368
+ lock.unlock()
369
+ subscription.cancel()
370
+ }
371
+
372
+ var description: String { return "TryDropWhile" }
373
+
374
+ var customMirror: Mirror { return Mirror(self, children: EmptyCollection()) }
375
+
376
+ var playgroundDescription: Any { return description }
377
+ }
378
+ }
@@ -0,0 +1,248 @@
1
+ //
2
+ // Publishers.Filter.swift
3
+ //
4
+ //
5
+ // Created by Joseph Spadafora on 7/3/19.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Republishes all elements that match a provided closure.
11
+ ///
12
+ /// OpenCombine’s `filter(_:)` operator performs an operation similar to that of
13
+ /// `filter(_:)` in the Swift Standard Library: it uses a closure to test each element
14
+ /// to determine whether to republish the element to the downstream subscriber.
15
+ ///
16
+ /// The following example, uses a filter operation that receives an `Int` and only
17
+ /// republishes a value if it’s even.
18
+ ///
19
+ /// let numbers: [Int] = [1, 2, 3, 4, 5]
20
+ /// cancellable = numbers.publisher
21
+ /// .filter { $0 % 2 == 0 }
22
+ /// .sink { print("\($0)", terminator: " ") }
23
+ ///
24
+ /// // Prints: "2 4"
25
+ ///
26
+ /// - Parameter isIncluded: A closure that takes one element and returns
27
+ /// a Boolean value indicating whether to republish the element.
28
+ /// - Returns: A publisher that republishes all elements that satisfy the closure.
29
+ public func filter(
30
+ _ isIncluded: @escaping (Output) -> Bool
31
+ ) -> Publishers.Filter<Self> {
32
+ return Publishers.Filter(upstream: self, isIncluded: isIncluded)
33
+ }
34
+
35
+ /// Republishes all elements that match a provided error-throwing closure.
36
+ ///
37
+ /// Use `tryFilter(_:)` to filter elements evaluated in an error-throwing closure.
38
+ /// If the `isIncluded` closure throws an error, the publisher fails with that error.
39
+ ///
40
+ /// In the example below, `tryFilter(_:)` checks to see if the divisor provided by
41
+ /// the publisher is zero, and throws a `DivisionByZeroError` and then terminates
42
+ /// the publisher with the thrown error:
43
+ ///
44
+ /// struct DivisionByZeroError: Error {}
45
+ ///
46
+ /// let numbers: [Int] = [1, 2, 3, 4, 0, 5]
47
+ /// cancellable = numbers.publisher
48
+ /// .tryFilter {
49
+ /// if $0 == 0 {
50
+ /// throw DivisionByZeroError()
51
+ /// } else {
52
+ /// return $0 % 2 == 0
53
+ /// }
54
+ /// }
55
+ /// .sink(
56
+ /// receiveCompletion: { print ("\($0)") },
57
+ /// receiveValue: { print ("\($0)", terminator: " ") }
58
+ /// )
59
+ ///
60
+ /// // Prints: "2 4 failure(DivisionByZeroError())".
61
+ ///
62
+ /// - Parameter isIncluded: A closure that takes one element and returns a Boolean
63
+ /// value that indicated whether to republish the element or throws an error.
64
+ /// - Returns: A publisher that republishes all elements that satisfy the closure.
65
+ public func tryFilter(
66
+ _ isIncluded: @escaping (Output) throws -> Bool
67
+ ) -> Publishers.TryFilter<Self> {
68
+ return Publishers.TryFilter(upstream: self, isIncluded: isIncluded)
69
+ }
70
+ }
71
+
72
+ extension Publishers.Filter {
73
+
74
+ public func filter(
75
+ _ isIncluded: @escaping (Output) -> Bool
76
+ ) -> Publishers.Filter<Upstream> {
77
+ return .init(upstream: upstream) { self.isIncluded($0) && isIncluded($0) }
78
+ }
79
+
80
+ public func tryFilter(
81
+ _ isIncluded: @escaping (Output) throws -> Bool
82
+ ) -> Publishers.TryFilter<Upstream> {
83
+ return .init(upstream: upstream) { try self.isIncluded($0) && isIncluded($0) }
84
+ }
85
+ }
86
+
87
+ extension Publishers.TryFilter {
88
+
89
+ public func filter(
90
+ _ isIncluded: @escaping (Output) -> Bool
91
+ ) -> Publishers.TryFilter<Upstream> {
92
+ return .init(upstream: upstream) { try self.isIncluded($0) && isIncluded($0) }
93
+ }
94
+
95
+ public func tryFilter(
96
+ _ isIncluded: @escaping (Output) throws -> Bool
97
+ ) -> Publishers.TryFilter<Upstream> {
98
+ return .init(upstream: upstream) { try self.isIncluded($0) && isIncluded($0) }
99
+ }
100
+ }
101
+
102
+ extension Publishers {
103
+
104
+ /// A publisher that republishes all elements that match a provided closure.
105
+ public struct Filter<Upstream: Publisher>: Publisher {
106
+
107
+ /// The kind of values published by this publisher.
108
+ public typealias Output = Upstream.Output
109
+
110
+ /// The kind of errors this publisher might publish.
111
+ ///
112
+ /// Use `Never` if this `Publisher` does not publish errors.
113
+ public typealias Failure = Upstream.Failure
114
+
115
+ /// The publisher from which this publisher receives elements.
116
+ public let upstream: Upstream
117
+
118
+ /// A closure that indicates whether to republish an element.
119
+ public let isIncluded: (Upstream.Output) -> Bool
120
+
121
+ public init(upstream: Upstream, isIncluded: @escaping (Output) -> Bool) {
122
+ self.upstream = upstream
123
+ self.isIncluded = isIncluded
124
+ }
125
+
126
+ /// This function is called to attach the specified `Subscriber`
127
+ /// to this `Publisher` by `subscribe(_:)`
128
+ ///
129
+ /// - SeeAlso: `subscribe(_:)`
130
+ /// - Parameters:
131
+ /// - subscriber: The subscriber to attach to this `Publisher`.
132
+ /// once attached it can begin to receive values.
133
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
134
+ where Upstream.Failure == Downstream.Failure,
135
+ Upstream.Output == Downstream.Input
136
+ {
137
+ upstream.subscribe(Inner(downstream: subscriber, filter: isIncluded))
138
+ }
139
+ }
140
+
141
+ /// A publisher that republishes all elements that match
142
+ /// a provided error-throwing closure.
143
+ public struct TryFilter<Upstream>: Publisher where Upstream: Publisher {
144
+
145
+ /// The kind of values published by this publisher.
146
+ public typealias Output = Upstream.Output
147
+
148
+ /// The kind of errors this publisher might publish.
149
+ ///
150
+ /// Use `Never` if this `Publisher` does not publish errors.
151
+ public typealias Failure = Error
152
+
153
+ /// The publisher from which this publisher receives elements.
154
+ public let upstream: Upstream
155
+
156
+ /// A error-throwing closure that indicates whether to republish an element.
157
+ public let isIncluded: (Upstream.Output) throws -> Bool
158
+
159
+ public init(upstream: Upstream,
160
+ isIncluded: @escaping (Upstream.Output) throws -> Bool) {
161
+ self.upstream = upstream
162
+ self.isIncluded = isIncluded
163
+ }
164
+
165
+ /// This function is called to attach the specified `Subscriber`
166
+ /// to this `Publisher` by `subscribe(_:)`
167
+ ///
168
+ /// - SeeAlso: `subscribe(_:)`
169
+ /// - Parameters:
170
+ /// - subscriber: The subscriber to attach to this `Publisher`.
171
+ /// once attached it can begin to receive values.
172
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
173
+ where Upstream.Output == Downstream.Input,
174
+ Downstream.Failure == Failure
175
+ {
176
+ upstream.subscribe(Inner(downstream: subscriber, filter: isIncluded))
177
+ }
178
+ }
179
+ }
180
+
181
+ extension Publishers.Filter {
182
+ private struct Inner<Downstream: Subscriber>
183
+ : Subscriber,
184
+ CustomStringConvertible,
185
+ CustomReflectable,
186
+ CustomPlaygroundDisplayConvertible
187
+ where Upstream.Output == Downstream.Input, Upstream.Failure == Downstream.Failure
188
+ {
189
+ typealias Input = Upstream.Output
190
+ typealias Failure = Upstream.Failure
191
+
192
+ private let downstream: Downstream
193
+ private let filter: (Input) -> Bool
194
+
195
+ let combineIdentifier = CombineIdentifier()
196
+
197
+ init(downstream: Downstream, filter: @escaping (Input) -> Bool) {
198
+ self.downstream = downstream
199
+ self.filter = filter
200
+ }
201
+
202
+ func receive(subscription: Subscription) {
203
+ downstream.receive(subscription: subscription)
204
+ }
205
+
206
+ func receive(_ input: Input) -> Subscribers.Demand {
207
+ if filter(input) {
208
+ return downstream.receive(input)
209
+ }
210
+ return .max(1)
211
+ }
212
+
213
+ func receive(completion: Subscribers.Completion<Failure>) {
214
+ downstream.receive(completion: completion)
215
+ }
216
+
217
+ var description: String { return "Filter" }
218
+
219
+ var customMirror: Mirror {
220
+ return Mirror(self, children: EmptyCollection())
221
+ }
222
+
223
+ var playgroundDescription: Any { return description }
224
+ }
225
+ }
226
+
227
+ extension Publishers.TryFilter {
228
+ private final class Inner<Downstream: Subscriber>
229
+ : FilterProducer<Downstream,
230
+ Upstream.Output,
231
+ Upstream.Output,
232
+ Upstream.Failure,
233
+ (Upstream.Output) throws -> Bool>
234
+ where Downstream.Input == Upstream.Output, Downstream.Failure == Error
235
+ {
236
+ override func receive(
237
+ newValue: Upstream.Output
238
+ ) -> PartialCompletion<Upstream.Output?, Error> {
239
+ do {
240
+ return try filter(newValue) ? .continue(newValue) : .continue(nil)
241
+ } catch {
242
+ return .failure(error)
243
+ }
244
+ }
245
+
246
+ override var description: String { return "TryFilter" }
247
+ }
248
+ }