@swiftbrowser/swift 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +65 -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 +105 -7
  257. package/Sources/SwiftUI/API/Entry.swift +8 -0
  258. package/Sources/SwiftUI/API/Environment.swift +93 -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 +3 -2
  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 +67 -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 +80 -10
  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 +11 -2
  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 +164 -37
  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 +96 -0
  300. package/Sources/SwiftUI/API/Shape.swift +214 -0
  301. package/Sources/SwiftUI/API/ShapeStyle.swift +105 -7
  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 +10 -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 +498 -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 +39 -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,241 @@
1
+ //
2
+ // Publishers.Output.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 24.10.2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Republishes elements up to the specified maximum count.
11
+ ///
12
+ /// Use `prefix(_:)` to limit the number of elements republished to the downstream
13
+ /// subscriber.
14
+ ///
15
+ /// In the example below, the `prefix(_:)` operator limits its output to the first
16
+ /// two elements before finishing normally:
17
+ ///
18
+ /// let numbers = (0...10)
19
+ /// cancellable = numbers.publisher
20
+ /// .prefix(2)
21
+ /// .sink { print("\($0)", terminator: " ") }
22
+ ///
23
+ /// // Prints: "0 1"
24
+ ///
25
+ /// - Parameter maxLength: The maximum number of elements to republish.
26
+ /// - Returns: A publisher that publishes up to the specified number of elements
27
+ /// before completing.
28
+ public func prefix(_ maxLength: Int) -> Publishers.Output<Self> {
29
+ return output(in: ..<maxLength)
30
+ }
31
+ }
32
+
33
+ extension Publisher {
34
+
35
+ /// Publishes a specific element, indicated by its index in the sequence of published
36
+ /// elements.
37
+ ///
38
+ /// Use `output(at:)` when you need to republish a specific element specified by
39
+ /// its position in the stream. If the publisher completes normally or with an error
40
+ /// before publishing the specified element, then the publisher doesn’t produce any
41
+ /// elements.
42
+ ///
43
+ /// In the example below, the array publisher emits the fifth element in the sequence
44
+ /// of published elements:
45
+ ///
46
+ /// let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
47
+ /// numbers.publisher
48
+ /// .output(at: 5)
49
+ /// .sink { print("\($0)") }
50
+ ///
51
+ /// // Prints: "6"
52
+ ///
53
+ /// - Parameter index: The index that indicates the element to publish.
54
+ /// - Returns: A publisher that publishes a specific indexed element.
55
+ public func output(at index: Int) -> Publishers.Output<Self> {
56
+ return output(in: index...index)
57
+ }
58
+
59
+ /// Publishes elements specified by their range in the sequence of published elements.
60
+ ///
61
+ /// Use `output(in:)` to republish a range indices you specify in the published
62
+ /// stream. After publishing all elements, the publisher finishes normally.
63
+ /// If the publisher completes normally or with an error before producing all
64
+ /// the elements in the range, it doesn’t publish the remaining elements.
65
+ ///
66
+ /// In the example below, an array publisher emits the subset of elements at
67
+ /// the indices in the specified range:
68
+ ///
69
+ /// let numbers = [1, 1, 2, 2, 2, 3, 4, 5, 6]
70
+ /// numbers.publisher
71
+ /// .output(in: (3...5))
72
+ /// .sink { print("\($0)", terminator: " ") }
73
+ ///
74
+ /// // Prints: "2 2 3"
75
+ ///
76
+ /// - Parameter range: A range that indicates which elements to publish.
77
+ /// - Returns: A publisher that publishes elements specified by a range.
78
+ public func output<Range: RangeExpression>(in range: Range) -> Publishers.Output<Self>
79
+ where Range.Bound == Int
80
+ {
81
+ return .init(upstream: self, range: range.relative(to: 0 ..< .max))
82
+ }
83
+ }
84
+
85
+ extension Publishers {
86
+
87
+ /// A publisher that publishes elements specified by a range in the sequence of
88
+ /// published elements.
89
+ public struct Output<Upstream: Publisher>: Publisher {
90
+
91
+ public typealias Output = Upstream.Output
92
+
93
+ public typealias Failure = Upstream.Failure
94
+
95
+ /// The publisher that this publisher receives elements from.
96
+ public let upstream: Upstream
97
+
98
+ /// The range of elements to publish.
99
+ public let range: CountableRange<Int>
100
+
101
+ /// Creates a publisher that publishes elements specified by a range.
102
+ ///
103
+ /// - Parameters:
104
+ /// - upstream: The publisher that this publisher receives elements from.
105
+ /// - range: The range of elements to publish.
106
+ public init(upstream: Upstream, range: CountableRange<Int>) {
107
+ precondition(range.lowerBound >= 0, "lowerBound must not be negative")
108
+ precondition(range.upperBound >= 0, "upperBound must not be negative")
109
+ self.upstream = upstream
110
+ self.range = range
111
+ }
112
+
113
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
114
+ where Upstream.Failure == Downstream.Failure,
115
+ Upstream.Output == Downstream.Input
116
+ {
117
+ upstream.subscribe(Inner(downstream: subscriber, range: range))
118
+ }
119
+ }
120
+ }
121
+
122
+ extension Publishers.Output: Equatable where Upstream: Equatable {}
123
+
124
+ extension Publishers.Output {
125
+ private final class Inner<Downstream: Subscriber>
126
+ : Subscriber,
127
+ Subscription,
128
+ CustomStringConvertible,
129
+ CustomReflectable,
130
+ CustomPlaygroundDisplayConvertible
131
+ where Downstream.Input == Upstream.Output, Downstream.Failure == Upstream.Failure
132
+ {
133
+ // NOTE: This class has been audited for thread safety
134
+
135
+ typealias Input = Upstream.Output
136
+
137
+ typealias Failure = Upstream.Failure
138
+
139
+ private let downstream: Downstream
140
+
141
+ private var status = SubscriptionStatus.awaitingSubscription
142
+
143
+ private var remainingUntilStart: Int
144
+
145
+ private var remainingCount: Int
146
+
147
+ private let lock = UnfairLock.allocate()
148
+
149
+ fileprivate init(downstream: Downstream, range: CountableRange<Int>) {
150
+ self.downstream = downstream
151
+ self.remainingUntilStart = range.lowerBound
152
+ self.remainingCount = range.count
153
+ }
154
+
155
+ deinit {
156
+ lock.deallocate()
157
+ }
158
+
159
+ func receive(subscription: Subscription) {
160
+ lock.lock()
161
+ guard case .awaitingSubscription = status else {
162
+ lock.unlock()
163
+ subscription.cancel()
164
+ return
165
+ }
166
+ status = .subscribed(subscription)
167
+ lock.unlock()
168
+ downstream.receive(subscription: self)
169
+ }
170
+
171
+ func receive(_ input: Upstream.Output) -> Subscribers.Demand {
172
+ if remainingUntilStart > 0 {
173
+ remainingUntilStart -= 1
174
+ return .max(1)
175
+ }
176
+
177
+ let newDemand: Subscribers.Demand
178
+ if remainingCount > 0 {
179
+ remainingCount -= 1
180
+ newDemand = downstream.receive(input)
181
+ } else {
182
+ newDemand = .none
183
+ cancelUpstreamAndFinish()
184
+ }
185
+ return newDemand
186
+ }
187
+
188
+ func receive(completion: Subscribers.Completion<Upstream.Failure>) {
189
+ lock.lock()
190
+ guard case .subscribed = status else {
191
+ lock.unlock()
192
+ return
193
+ }
194
+ status = .terminal
195
+ lock.unlock()
196
+ downstream.receive(completion: completion)
197
+ }
198
+
199
+ func request(_ demand: Subscribers.Demand) {
200
+ lock.lock()
201
+ guard case let .subscribed(subscription) = status else {
202
+ lock.unlock()
203
+ return
204
+ }
205
+ lock.unlock()
206
+ subscription.request(demand)
207
+ }
208
+
209
+ func cancel() {
210
+ lock.lock()
211
+ guard case let .subscribed(subscription) = status else {
212
+ lock.unlock()
213
+ return
214
+ }
215
+ status = .terminal
216
+ lock.unlock()
217
+ subscription.cancel()
218
+ }
219
+
220
+ var description: String { return "Output" }
221
+
222
+ var customMirror: Mirror { return Mirror(self, children: EmptyCollection()) }
223
+
224
+ var playgroundDescription: Any { return description }
225
+
226
+ // MARK: - Private
227
+
228
+ private func cancelUpstreamAndFinish() {
229
+ assert(remainingCount == 0)
230
+ lock.lock()
231
+ guard case let .subscribed(subscription) = status else {
232
+ lock.unlock()
233
+ return
234
+ }
235
+ status = .terminal
236
+ lock.unlock()
237
+ subscription.cancel()
238
+ downstream.receive(completion: .finished)
239
+ }
240
+ }
241
+ }
@@ -0,0 +1,197 @@
1
+ //
2
+ // Publishers.PrefixUntilOutput.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 08.11.2020.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Republishes elements until another publisher emits an element.
11
+ ///
12
+ /// After the second publisher publishes an element, the publisher returned by this
13
+ /// method finishes.
14
+ ///
15
+ /// - Parameter publisher: A second publisher.
16
+ /// - Returns: A publisher that republishes elements until the second publisher
17
+ /// publishes an element.
18
+ public func prefix<Other: Publisher>(
19
+ untilOutputFrom publisher: Other
20
+ ) -> Publishers.PrefixUntilOutput<Self, Other> {
21
+ return .init(upstream: self, other: publisher)
22
+ }
23
+ }
24
+
25
+ extension Publishers {
26
+ public struct PrefixUntilOutput<Upstream: Publisher, Other: Publisher>: Publisher {
27
+
28
+ public typealias Output = Upstream.Output
29
+
30
+ public typealias Failure = Upstream.Failure
31
+
32
+ /// The publisher from which this publisher receives elements.
33
+ public let upstream: Upstream
34
+
35
+ /// Another publisher, whose first output causes this publisher to finish.
36
+ public let other: Other
37
+
38
+ public init(upstream: Upstream, other: Other) {
39
+ self.upstream = upstream
40
+ self.other = other
41
+ }
42
+
43
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
44
+ where Downstream.Failure == Failure, Downstream.Input == Output
45
+ {
46
+ upstream.subscribe(Inner(downstream: subscriber, trigger: other))
47
+ }
48
+ }
49
+ }
50
+
51
+ extension Publishers.PrefixUntilOutput {
52
+ private final class Inner<Downstream: Subscriber>
53
+ : Subscriber,
54
+ Subscription
55
+ where Downstream.Input == Upstream.Output, Downstream.Failure == Upstream.Failure
56
+ {
57
+ typealias Input = Upstream.Output
58
+
59
+ typealias Failure = Upstream.Failure
60
+
61
+ private struct Termination: Subscriber {
62
+
63
+ let inner: Inner
64
+
65
+ var combineIdentifier: CombineIdentifier {
66
+ return inner.combineIdentifier
67
+ }
68
+
69
+ func receive(subscription: Subscription) {
70
+ inner.terminationReceive(subscription: subscription)
71
+ }
72
+
73
+ func receive(_ input: Other.Output) -> Subscribers.Demand {
74
+ return inner.terminationReceive(input)
75
+ }
76
+
77
+ func receive(completion: Subscribers.Completion<Other.Failure>) {
78
+ inner.terminationReceive(completion: completion)
79
+ }
80
+ }
81
+
82
+ private var termination: Termination?
83
+ private var prefixState = SubscriptionStatus.awaitingSubscription
84
+ private var terminationState = SubscriptionStatus.awaitingSubscription
85
+ private var triggered = false
86
+ private let lock = UnfairLock.allocate()
87
+ private let downstream: Downstream
88
+
89
+ init(downstream: Downstream, trigger: Other) {
90
+ self.downstream = downstream
91
+ let termination = Termination(inner: self)
92
+ self.termination = termination
93
+ trigger.subscribe(termination)
94
+ }
95
+
96
+ deinit {
97
+ lock.deallocate()
98
+ }
99
+
100
+ func receive(subscription: Subscription) {
101
+ lock.lock()
102
+ guard case .awaitingSubscription = prefixState else {
103
+ lock.unlock()
104
+ subscription.cancel()
105
+ return
106
+ }
107
+ prefixState = triggered ? .terminal : .subscribed(subscription)
108
+ lock.unlock()
109
+ downstream.receive(subscription: self)
110
+ }
111
+
112
+ func receive(_ input: Input) -> Subscribers.Demand {
113
+ lock.lock()
114
+ guard case .subscribed = prefixState else {
115
+ lock.unlock()
116
+ return .none
117
+ }
118
+ lock.unlock()
119
+ return downstream.receive(input)
120
+ }
121
+
122
+ func receive(completion: Subscribers.Completion<Failure>) {
123
+ lock.lock()
124
+ let prefixState = self.prefixState
125
+ let terminationSubscription = terminationState.subscription
126
+ self.prefixState = .terminal
127
+ terminationState = .terminal
128
+ termination = nil
129
+ lock.unlock()
130
+ terminationSubscription?.cancel()
131
+ if case .subscribed = prefixState {
132
+ downstream.receive(completion: completion)
133
+ }
134
+ }
135
+
136
+ func request(_ demand: Subscribers.Demand) {
137
+ lock.lock()
138
+ guard case let .subscribed(subscription) = prefixState else {
139
+ lock.unlock()
140
+ return
141
+ }
142
+ lock.unlock()
143
+ subscription.request(demand)
144
+ }
145
+
146
+ func cancel() {
147
+ lock.lock()
148
+ let prefixSubscription = prefixState.subscription
149
+ let terminationSubscription = terminationState.subscription
150
+ prefixState = .terminal
151
+ terminationState = .terminal
152
+ lock.unlock()
153
+ prefixSubscription?.cancel()
154
+ terminationSubscription?.cancel()
155
+ }
156
+
157
+ // MARK: - Private
158
+
159
+ private func terminationReceive(subscription: Subscription) {
160
+ lock.lock()
161
+ guard case .awaitingSubscription = terminationState else {
162
+ lock.unlock()
163
+ subscription.cancel()
164
+ return
165
+ }
166
+ terminationState = .subscribed(subscription)
167
+ lock.unlock()
168
+ subscription.request(.max(1))
169
+ }
170
+
171
+ private func terminationReceive(_ input: Other.Output) -> Subscribers.Demand {
172
+ lock.lock()
173
+ guard case .subscribed = terminationState else {
174
+ lock.unlock()
175
+ return .none
176
+ }
177
+ let prefixSubscription = prefixState.subscription
178
+ prefixState = .terminal
179
+ terminationState = .terminal
180
+ termination = nil
181
+ triggered = true
182
+ lock.unlock()
183
+ prefixSubscription?.cancel()
184
+ downstream.receive(completion: .finished)
185
+ return .none
186
+ }
187
+
188
+ private func terminationReceive(
189
+ completion: Subscribers.Completion<Other.Failure>
190
+ ) {
191
+ lock.lock()
192
+ terminationState = .terminal
193
+ termination = nil
194
+ lock.unlock()
195
+ }
196
+ }
197
+ }
@@ -0,0 +1,176 @@
1
+ //
2
+ // Publishers.PrefixWhile.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 24.10.2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Republishes elements while a predicate closure indicates publishing should
11
+ /// continue.
12
+ ///
13
+ /// Use `prefix(while:)` to emit values while elements from the upstream publishe
14
+ /// meet a condition you specify. The publisher finishes when the closure returns
15
+ /// `false`.
16
+ ///
17
+ /// In the example below, the `prefix(while:)` operator emits values while the element
18
+ /// it receives is less than five:
19
+ ///
20
+ /// let numbers = (0...10)
21
+ /// numbers.publisher
22
+ /// .prefix { $0 < 5 }
23
+ /// .sink { print("\($0)", terminator: " ") }
24
+ ///
25
+ /// // Prints: "0 1 2 3 4"
26
+ ///
27
+ /// - Parameter predicate: A closure that takes an element as its parameter and
28
+ /// returns a Boolean value that indicates whether publishing should continue.
29
+ /// - Returns: A publisher that passes through elements until the predicate indicates
30
+ /// publishing should finish.
31
+ public func prefix(
32
+ while predicate: @escaping (Output) -> Bool
33
+ ) -> Publishers.PrefixWhile<Self> {
34
+ return .init(upstream: self, predicate: predicate)
35
+ }
36
+
37
+ /// Republishes elements while an error-throwing predicate closure indicates
38
+ /// publishing should continue.
39
+ ///
40
+ /// Use `tryPrefix(while:)` to emit values from the upstream publisher that meet
41
+ /// a condition you specify in an error-throwing closure.
42
+ /// The publisher finishes when the closure returns `false`. If the closure throws
43
+ /// an error, the publisher fails with that error.
44
+ ///
45
+ /// struct OutOfRangeError: Error {}
46
+ ///
47
+ /// let numbers = (0...10).reversed()
48
+ /// cancellable = numbers.publisher
49
+ /// .tryPrefix {
50
+ /// guard $0 != 0 else { throw OutOfRangeError() }
51
+ /// return $0 <= numbers.max()!
52
+ /// }
53
+ /// .sink(
54
+ /// receiveCompletion: { print ("completion: \($0)", terminator: " ") },
55
+ /// receiveValue: { print ("\($0)", terminator: " ") }
56
+ /// )
57
+ ///
58
+ /// // Prints: "10 9 8 7 6 5 4 3 2 1 completion: failure(OutOfRangeError()) "
59
+ ///
60
+ /// - Parameter predicate: A closure that takes an element as its parameter and
61
+ /// returns a Boolean value indicating whether publishing should continue.
62
+ /// - Returns: A publisher that passes through elements until the predicate throws or
63
+ /// indicates publishing should finish.
64
+ public func tryPrefix(
65
+ while predicate: @escaping (Output) throws -> Bool
66
+ ) -> Publishers.TryPrefixWhile<Self> {
67
+ return .init(upstream: self, predicate: predicate)
68
+ }
69
+ }
70
+
71
+ extension Publishers {
72
+
73
+ /// A publisher that republishes elements while a predicate closure indicates
74
+ /// publishing should continue.
75
+ public struct PrefixWhile<Upstream: Publisher>: Publisher {
76
+
77
+ public typealias Output = Upstream.Output
78
+
79
+ public typealias Failure = Upstream.Failure
80
+
81
+ /// The publisher from which this publisher receives elements.
82
+ public let upstream: Upstream
83
+
84
+ /// The closure that determines whether whether publishing should continue.
85
+ public let predicate: (Upstream.Output) -> Bool
86
+
87
+ public init(upstream: Upstream, predicate: @escaping (Upstream.Output) -> Bool) {
88
+ self.upstream = upstream
89
+ self.predicate = predicate
90
+ }
91
+
92
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
93
+ where Upstream.Failure == Downstream.Failure,
94
+ Upstream.Output == Downstream.Input
95
+ {
96
+ upstream.subscribe(Inner(downstream: subscriber, filter: predicate))
97
+ }
98
+ }
99
+
100
+ /// A publisher that republishes elements while an error-throwing predicate closure
101
+ /// indicates publishing should continue.
102
+ public struct TryPrefixWhile<Upstream: Publisher>: Publisher {
103
+
104
+ public typealias Output = Upstream.Output
105
+
106
+ public typealias Failure = Error
107
+
108
+ /// The publisher from which this publisher receives elements.
109
+ public let upstream: Upstream
110
+
111
+ /// The error-throwing closure that determines whether publishing should continue.
112
+ public let predicate: (Upstream.Output) throws -> Bool
113
+
114
+ public init(upstream: Upstream,
115
+ predicate: @escaping (Upstream.Output) throws -> Bool) {
116
+ self.upstream = upstream
117
+ self.predicate = predicate
118
+ }
119
+
120
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
121
+ where Upstream.Output == Downstream.Input, Downstream.Failure == Error
122
+ {
123
+ upstream.subscribe(Inner(downstream: subscriber, filter: predicate))
124
+ }
125
+ }
126
+ }
127
+
128
+ extension Publishers.PrefixWhile {
129
+ private final class Inner<Downstream: Subscriber>
130
+ : FilterProducer<Downstream,
131
+ Upstream.Output,
132
+ Upstream.Output,
133
+ Upstream.Failure,
134
+ (Upstream.Output) -> Bool>
135
+ where Downstream.Input == Upstream.Output, Downstream.Failure == Upstream.Failure
136
+ {
137
+ typealias Input = Upstream.Output
138
+
139
+ typealias Failure = Upstream.Failure
140
+
141
+ override func receive(
142
+ newValue: Input
143
+ ) -> PartialCompletion<Upstream.Output?, Downstream.Failure> {
144
+ return filter(newValue) ? .continue(newValue) : .finished
145
+ }
146
+
147
+ override var description: String { return "PrefixWhile" }
148
+ }
149
+ }
150
+
151
+ extension Publishers.TryPrefixWhile {
152
+ private final class Inner<Downstream: Subscriber>
153
+ : FilterProducer<Downstream,
154
+ Upstream.Output,
155
+ Upstream.Output,
156
+ Upstream.Failure,
157
+ (Upstream.Output) throws -> Bool>
158
+ where Downstream.Input == Upstream.Output, Downstream.Failure == Error
159
+ {
160
+ typealias Input = Upstream.Output
161
+
162
+ typealias Failure = Upstream.Failure
163
+
164
+ override func receive(
165
+ newValue: Input
166
+ ) -> PartialCompletion<Upstream.Output?, Downstream.Failure> {
167
+ do {
168
+ return try filter(newValue) ? .continue(newValue) : .finished
169
+ } catch {
170
+ return .failure(error)
171
+ }
172
+ }
173
+
174
+ override var description: String { return "TryPrefixWhile" }
175
+ }
176
+ }