@swiftbrowser/swift 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/Package.swift +214 -0
  2. package/README.md +10 -2
  3. package/Sources/AVFoundation/AVFoundation.swift +131 -0
  4. package/Sources/AVFoundation/Asset.swift +487 -0
  5. package/Sources/AVFoundation/AudioSession.swift +144 -0
  6. package/Sources/AVFoundation/CMTime.swift +303 -0
  7. package/Sources/AVFoundation/Capture.swift +688 -0
  8. package/Sources/AVFoundation/Player.swift +749 -0
  9. package/Sources/AVFoundation/PlayerView.swift +117 -0
  10. package/Sources/AVKit/AVKit.swift +132 -0
  11. package/Sources/Accelerate/Accelerate.swift +122 -0
  12. package/Sources/AppIntents/AppIntents.swift +144 -0
  13. package/Sources/AppIntents/Parameters.swift +220 -0
  14. package/Sources/AppIntents/Shortcuts.swift +159 -0
  15. package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
  16. package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
  17. package/Sources/AuthenticationServices/Authorization.swift +251 -0
  18. package/Sources/Charts/Charts.swift +61 -0
  19. package/Sources/Combine/AnyCancellable.swift +65 -0
  20. package/Sources/Combine/AnyPublisher.swift +148 -0
  21. package/Sources/Combine/AnySubscriber.swift +230 -0
  22. package/Sources/Combine/Cancellable.swift +35 -0
  23. package/Sources/Combine/Codable.swift +29 -0
  24. package/Sources/Combine/CombineIdentifier.swift +45 -0
  25. package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
  26. package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
  27. package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
  28. package/Sources/Combine/CurrentValueSubject.swift +252 -0
  29. package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
  30. package/Sources/Combine/Future.swift +228 -0
  31. package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
  32. package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
  33. package/Sources/Combine/Helpers/ConduitList.swift +59 -0
  34. package/Sources/Combine/Helpers/DebugHook.swift +177 -0
  35. package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
  36. package/Sources/Combine/Helpers/Locking.swift +30 -0
  37. package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
  38. package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
  39. package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
  40. package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
  41. package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
  42. package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
  43. package/Sources/Combine/Helpers/Utils.swift +30 -0
  44. package/Sources/Combine/Helpers/Violations.swift +33 -0
  45. package/Sources/Combine/ImmediateScheduler.swift +178 -0
  46. package/Sources/Combine/LICENSE +21 -0
  47. package/Sources/Combine/NotificationPublisher.swift +48 -0
  48. package/Sources/Combine/ObjectWillChange.swift +46 -0
  49. package/Sources/Combine/PassthroughSubject.swift +222 -0
  50. package/Sources/Combine/Publisher+Subscribe.swift +53 -0
  51. package/Sources/Combine/Publishers/Deferred.swift +48 -0
  52. package/Sources/Combine/Publishers/Empty.swift +54 -0
  53. package/Sources/Combine/Publishers/Fail.swift +42 -0
  54. package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
  55. package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
  56. package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
  57. package/Sources/Combine/Publishers/Just.swift +313 -0
  58. package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
  59. package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
  60. package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
  61. package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
  62. package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
  63. package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
  64. package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
  65. package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
  66. package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
  67. package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
  68. package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
  69. package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
  70. package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
  71. package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
  72. package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
  73. package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
  74. package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
  75. package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
  76. package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
  77. package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
  78. package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
  79. package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
  80. package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
  81. package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
  82. package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
  83. package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
  84. package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
  85. package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
  86. package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
  87. package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
  88. package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
  89. package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
  90. package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
  91. package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
  92. package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
  93. package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
  94. package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
  95. package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
  96. package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
  97. package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
  98. package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
  99. package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
  100. package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
  101. package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
  102. package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
  103. package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
  104. package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
  105. package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
  106. package/Sources/Combine/Publishers/Publishers.swift +13 -0
  107. package/Sources/Combine/Publishers/Record.swift +237 -0
  108. package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
  109. package/Sources/Combine/Result.swift +46 -0
  110. package/Sources/Combine/Scheduler.swift +89 -0
  111. package/Sources/Combine/Schedulers.swift +211 -0
  112. package/Sources/Combine/Subject+Void.swift +17 -0
  113. package/Sources/Combine/Subscriber+Void.swift +20 -0
  114. package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
  115. package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
  116. package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
  117. package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
  118. package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
  119. package/Sources/Combine/Subscription.swift +22 -0
  120. package/Sources/Combine/Subscriptions.swift +42 -0
  121. package/Sources/Combine/SwiftUIObservation.swift +10 -0
  122. package/Sources/Combine/_Introspection.swift +107 -0
  123. package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
  124. package/Sources/Compression/Compression.swift +365 -0
  125. package/Sources/Compression/Deflate.swift +407 -0
  126. package/Sources/Compression/Zlib.swift +179 -0
  127. package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
  128. package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
  129. package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
  130. package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
  131. package/Sources/CoreImage/CIColor.swift +41 -0
  132. package/Sources/CoreImage/CIContext.swift +31 -0
  133. package/Sources/CoreImage/CIDetector.swift +57 -0
  134. package/Sources/CoreImage/CIFilter.swift +243 -0
  135. package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
  136. package/Sources/CoreImage/CIImage.swift +162 -0
  137. package/Sources/CoreImage/QRCode.swift +393 -0
  138. package/Sources/CoreLocation/Coordinate.swift +30 -0
  139. package/Sources/CoreLocation/Location.swift +65 -0
  140. package/Sources/CoreML/Evaluation.swift +414 -0
  141. package/Sources/CoreML/FeatureValue.swift +266 -0
  142. package/Sources/CoreML/Model.swift +269 -0
  143. package/Sources/CoreML/MultiArray.swift +92 -0
  144. package/Sources/CoreML/Specification.swift +233 -0
  145. package/Sources/CoreText/CoreText.swift +64 -0
  146. package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
  147. package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
  148. package/Sources/CryptoKit/CryptoKit.swift +375 -0
  149. package/Sources/CryptoKit/Curve25519.swift +317 -0
  150. package/Sources/CryptoKit/P256.swift +321 -0
  151. package/Sources/FoundationBridge/AppStorage.swift +165 -0
  152. package/Sources/FoundationBridge/AssetResources.swift +90 -0
  153. package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
  154. package/Sources/FoundationBridge/AsyncImage.swift +116 -0
  155. package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
  156. package/Sources/FoundationBridge/Bundle.swift +119 -0
  157. package/Sources/FoundationBridge/CombineExports.swift +8 -0
  158. package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
  159. package/Sources/FoundationBridge/Dispatch.swift +458 -0
  160. package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
  161. package/Sources/FoundationBridge/FileImporter.swift +128 -0
  162. package/Sources/FoundationBridge/FileSystem.swift +68 -0
  163. package/Sources/FoundationBridge/FoundationBridge.swift +29 -0
  164. package/Sources/FoundationBridge/HostResolution.swift +31 -0
  165. package/Sources/FoundationBridge/ItemProvider.swift +655 -0
  166. package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
  167. package/Sources/FoundationBridge/Links.swift +127 -0
  168. package/Sources/FoundationBridge/ListFormatter.swift +32 -0
  169. package/Sources/FoundationBridge/Locale.swift +86 -0
  170. package/Sources/FoundationBridge/Localization.swift +149 -0
  171. package/Sources/FoundationBridge/Locks.swift +50 -0
  172. package/Sources/FoundationBridge/Markdown.swift +527 -0
  173. package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
  174. package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
  175. package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
  176. package/Sources/FoundationBridge/Operation.swift +195 -0
  177. package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
  178. package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
  179. package/Sources/FoundationBridge/SceneStorage.swift +78 -0
  180. package/Sources/FoundationBridge/SecurityExports.swift +8 -0
  181. package/Sources/FoundationBridge/Selector.swift +226 -0
  182. package/Sources/FoundationBridge/StringComparators.swift +17 -0
  183. package/Sources/FoundationBridge/Table.swift +211 -0
  184. package/Sources/FoundationBridge/TextAttributes.swift +42 -0
  185. package/Sources/FoundationBridge/Timer.swift +53 -0
  186. package/Sources/FoundationBridge/UITextChecker.swift +30 -0
  187. package/Sources/FoundationBridge/URLSession.swift +718 -0
  188. package/Sources/FoundationBridge/UserDefaults.swift +183 -0
  189. package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
  190. package/Sources/FoundationBridge/WebSocket.swift +187 -0
  191. package/Sources/FoundationModels/FoundationModels.swift +1098 -0
  192. package/Sources/ImageIO/GIF.swift +72 -0
  193. package/Sources/ImageIO/ImageIO.swift +248 -0
  194. package/Sources/ImageIO/ImageTypes.swift +28 -0
  195. package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
  196. package/Sources/LocalAuthentication/LAContext.swift +86 -0
  197. package/Sources/MapKit/Geometry.swift +223 -0
  198. package/Sources/MapKit/Map.swift +638 -0
  199. package/Sources/MapKit/MapView.swift +229 -0
  200. package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
  201. package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
  202. package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
  203. package/Sources/OSLog/OSLog.swift +6 -0
  204. package/Sources/Photos/Photos.swift +572 -0
  205. package/Sources/PhotosUI/PhotosPicker.swift +248 -0
  206. package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
  207. package/Sources/QuickLook/QuickLook.swift +168 -0
  208. package/Sources/SafariServices/SafariServices.swift +106 -0
  209. package/Sources/Security/Security.swift +332 -0
  210. package/Sources/StoreKit/AppStore.swift +207 -0
  211. package/Sources/StoreKit/Products.swift +280 -0
  212. package/Sources/StoreKit/RequestReview.swift +28 -0
  213. package/Sources/StoreKit/StoreKit1.swift +486 -0
  214. package/Sources/StoreKit/StoreViews.swift +428 -0
  215. package/Sources/StoreKit/Transactions.swift +197 -0
  216. package/Sources/SwiftData/Macros.swift +58 -0
  217. package/Sources/SwiftData/ModelActor.swift +38 -0
  218. package/Sources/SwiftData/ModelContainer.swift +129 -0
  219. package/Sources/SwiftData/ModelContext.swift +451 -0
  220. package/Sources/SwiftData/PersistentModel.swift +238 -0
  221. package/Sources/SwiftData/Properties.swift +261 -0
  222. package/Sources/SwiftData/Query.swift +256 -0
  223. package/Sources/SwiftData/Schema.swift +192 -0
  224. package/Sources/SwiftData/Store.swift +146 -0
  225. package/Sources/SwiftData/StringPredicates.swift +125 -0
  226. package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
  227. package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
  228. package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
  229. package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
  230. package/Sources/SwiftDataMacros/Plugin.swift +18 -0
  231. package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
  232. package/Sources/SwiftUI/API/Accessibility.swift +181 -0
  233. package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
  234. package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
  235. package/Sources/SwiftUI/API/Alert.swift +221 -0
  236. package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
  237. package/Sources/SwiftUI/API/Animation.swift +285 -0
  238. package/Sources/SwiftUI/API/App.swift +87 -0
  239. package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
  240. package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
  241. package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
  242. package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
  243. package/Sources/SwiftUI/API/Canvas.swift +337 -0
  244. package/Sources/SwiftUI/API/Color.swift +237 -0
  245. package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
  246. package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
  247. package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
  248. package/Sources/SwiftUI/API/Commands.swift +106 -0
  249. package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
  250. package/Sources/SwiftUI/API/ContentShape.swift +33 -0
  251. package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
  252. package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
  253. package/Sources/SwiftUI/API/Controls.swift +300 -0
  254. package/Sources/SwiftUI/API/CustomLayout.swift +442 -0
  255. package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
  256. package/Sources/SwiftUI/API/Decorations.swift +92 -0
  257. package/Sources/SwiftUI/API/EditMode.swift +212 -0
  258. package/Sources/SwiftUI/API/Effects.swift +388 -0
  259. package/Sources/SwiftUI/API/Entry.swift +8 -0
  260. package/Sources/SwiftUI/API/Environment.swift +439 -0
  261. package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
  262. package/Sources/SwiftUI/API/Focus.swift +137 -0
  263. package/Sources/SwiftUI/API/Font.swift +131 -0
  264. package/Sources/SwiftUI/API/Gauge.swift +290 -0
  265. package/Sources/SwiftUI/API/Geometry.swift +89 -0
  266. package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
  267. package/Sources/SwiftUI/API/GeometryReader.swift +135 -0
  268. package/Sources/SwiftUI/API/GestureState.swift +65 -0
  269. package/Sources/SwiftUI/API/Gestures.swift +342 -0
  270. package/Sources/SwiftUI/API/Glass.swift +127 -0
  271. package/Sources/SwiftUI/API/Grid.swift +188 -0
  272. package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
  273. package/Sources/SwiftUI/API/KeyPress.swift +54 -0
  274. package/Sources/SwiftUI/API/LabelStyle.swift +124 -0
  275. package/Sources/SwiftUI/API/Layout.swift +220 -0
  276. package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
  277. package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
  278. package/Sources/SwiftUI/API/Lists.swift +331 -0
  279. package/Sources/SwiftUI/API/Menu.swift +58 -0
  280. package/Sources/SwiftUI/API/Modifiers.swift +313 -0
  281. package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
  282. package/Sources/SwiftUI/API/Namespace.swift +44 -0
  283. package/Sources/SwiftUI/API/Navigation.swift +386 -0
  284. package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
  285. package/Sources/SwiftUI/API/ObservableObject.swift +293 -0
  286. package/Sources/SwiftUI/API/OnChange.swift +48 -0
  287. package/Sources/SwiftUI/API/Path.swift +543 -0
  288. package/Sources/SwiftUI/API/Phase8Controls.swift +411 -0
  289. package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
  290. package/Sources/SwiftUI/API/Picker.swift +185 -0
  291. package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
  292. package/Sources/SwiftUI/API/Popover.swift +41 -0
  293. package/Sources/SwiftUI/API/Preferences.swift +262 -0
  294. package/Sources/SwiftUI/API/Presentation.swift +122 -0
  295. package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
  296. package/Sources/SwiftUI/API/Primitives.swift +517 -0
  297. package/Sources/SwiftUI/API/Publishers.swift +107 -0
  298. package/Sources/SwiftUI/API/Redaction.swift +75 -0
  299. package/Sources/SwiftUI/API/RowActions.swift +84 -0
  300. package/Sources/SwiftUI/API/Scenes.swift +131 -0
  301. package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
  302. package/Sources/SwiftUI/API/ScrollTargets.swift +104 -0
  303. package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
  304. package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
  305. package/Sources/SwiftUI/API/Shape.swift +214 -0
  306. package/Sources/SwiftUI/API/ShapeStyle.swift +409 -0
  307. package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
  308. package/Sources/SwiftUI/API/Sharing.swift +193 -0
  309. package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
  310. package/Sources/SwiftUI/API/State.swift +144 -0
  311. package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
  312. package/Sources/SwiftUI/API/StrokeStyle.swift +30 -0
  313. package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
  314. package/Sources/SwiftUI/API/TabContent.swift +841 -0
  315. package/Sources/SwiftUI/API/Table.swift +382 -0
  316. package/Sources/SwiftUI/API/Tabs.swift +263 -0
  317. package/Sources/SwiftUI/API/Tasks.swift +35 -0
  318. package/Sources/SwiftUI/API/Text.swift +386 -0
  319. package/Sources/SwiftUI/API/TextDates.swift +61 -0
  320. package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
  321. package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
  322. package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
  323. package/Sources/SwiftUI/API/Timeline.swift +212 -0
  324. package/Sources/SwiftUI/API/Toolbar.swift +251 -0
  325. package/Sources/SwiftUI/API/Transfer.swift +145 -0
  326. package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
  327. package/Sources/SwiftUI/API/Video.swift +64 -0
  328. package/Sources/SwiftUI/API/View.swift +215 -0
  329. package/Sources/SwiftUI/API/ViewModifier.swift +43 -0
  330. package/Sources/SwiftUI/API/VisualEffect.swift +155 -0
  331. package/Sources/SwiftUI/API/Windows.swift +25 -0
  332. package/Sources/SwiftUI/Charts/Axis.swift +325 -0
  333. package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
  334. package/Sources/SwiftUI/Charts/Chart.swift +660 -0
  335. package/Sources/SwiftUI/Charts/ChartContent.swift +376 -0
  336. package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
  337. package/Sources/SwiftUI/Charts/Marks.swift +204 -0
  338. package/Sources/SwiftUI/Charts/Plottable.swift +99 -0
  339. package/Sources/SwiftUI/Charts/Scales.swift +326 -0
  340. package/Sources/SwiftUI/Localization/Localization.swift +498 -0
  341. package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
  342. package/Sources/SwiftUI/Runtime/Executor.swift +85 -0
  343. package/Sources/SwiftUI/Runtime/Exports.swift +101 -0
  344. package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
  345. package/Sources/SwiftUI/Runtime/JSON.swift +143 -0
  346. package/Sources/SwiftUI/Runtime/JSONParser.swift +443 -0
  347. package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
  348. package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
  349. package/Sources/SwiftUI/Runtime/Ops.swift +152 -0
  350. package/Sources/SwiftUI/Runtime/Reconciler.swift +219 -0
  351. package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
  352. package/Sources/SwiftUI/Runtime/Runtime.swift +2146 -0
  353. package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
  354. package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
  355. package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
  356. package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
  357. package/Sources/Symbols/Symbols.swift +25 -0
  358. package/Sources/Translation/Translation.swift +423 -0
  359. package/Sources/UIKit/Activity.swift +213 -0
  360. package/Sources/UIKit/Alerts.swift +69 -0
  361. package/Sources/UIKit/AppDelegate.swift +222 -0
  362. package/Sources/UIKit/Appearance.swift +84 -0
  363. package/Sources/UIKit/ColorConversions.swift +70 -0
  364. package/Sources/UIKit/Controls.swift +225 -0
  365. package/Sources/UIKit/Device.swift +200 -0
  366. package/Sources/UIKit/Feedback.swift +65 -0
  367. package/Sources/UIKit/Font.swift +307 -0
  368. package/Sources/UIKit/Graphics.swift +204 -0
  369. package/Sources/UIKit/HostingController.swift +185 -0
  370. package/Sources/UIKit/Identity.swift +24 -0
  371. package/Sources/UIKit/Introspectable.swift +510 -0
  372. package/Sources/UIKit/Pasteboard.swift +363 -0
  373. package/Sources/UIKit/PhotoAlbum.swift +81 -0
  374. package/Sources/UIKit/RemoteNotifications.swift +15 -0
  375. package/Sources/UIKit/Representable.swift +288 -0
  376. package/Sources/UIKit/SafeArea.swift +12 -0
  377. package/Sources/UIKit/SceneDelegates.swift +132 -0
  378. package/Sources/UIKit/Scenes.swift +40 -0
  379. package/Sources/UIKit/ScrollView.swift +157 -0
  380. package/Sources/UIKit/ShortcutItems.swift +67 -0
  381. package/Sources/UIKit/SymbolConfiguration.swift +124 -0
  382. package/Sources/UIKit/TargetAction.swift +123 -0
  383. package/Sources/UIKit/TextPaste.swift +161 -0
  384. package/Sources/UIKit/TextView.swift +538 -0
  385. package/Sources/UIKit/UIKit.swift +292 -0
  386. package/Sources/UIKit/UIView.swift +855 -0
  387. package/Sources/UIKit/ViewTranslation.swift +311 -0
  388. package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
  389. package/Sources/UserNotifications/Content.swift +370 -0
  390. package/Sources/UserNotifications/NotificationCenter.swift +309 -0
  391. package/Sources/WeatherKit/WeatherKit.swift +228 -0
  392. package/Sources/WebKit/WebKit.swift +245 -0
  393. package/Sources/os/os.swift +376 -0
  394. package/Sources/zlib/zlib.swift +6 -0
  395. package/index.d.ts +2 -0
  396. package/index.mjs +16 -0
  397. package/manifest.d.mts +2 -0
  398. package/manifest.mjs +39 -0
  399. package/package.json +30 -4
  400. package/sync-sources.mjs +33 -0
@@ -0,0 +1,315 @@
1
+ //
2
+ // Optional.Publisher.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 17.06.2019.
6
+ //
7
+
8
+ extension Optional {
9
+
10
+ /// A namespace for disambiguation when both OpenCombine and Combine are imported.
11
+ ///
12
+ /// Combine extends `Optional` with a nested type `Publisher`.
13
+ /// If you import both OpenCombine and Combine (either explicitly or implicitly,
14
+ /// e. g. when importing Foundation), you will not be able to write
15
+ /// `Optional<Int>.Publisher`, because Swift is unable to understand
16
+ /// which `Publisher` you're referring to.
17
+ ///
18
+ /// So you have to write `Optional<Int>.OCombine.Publisher`.
19
+ ///
20
+ /// This bug is tracked [here](https://bugs.swift.org/browse/SR-11183).
21
+ ///
22
+ /// You can omit this whenever Combine is not available (e. g. on Linux).
23
+ public struct OCombine {
24
+
25
+ fileprivate let optional: Optional
26
+
27
+ fileprivate init(_ optional: Optional) {
28
+ self.optional = optional
29
+ }
30
+
31
+ public var publisher: Publisher {
32
+ return Publisher(optional)
33
+ }
34
+
35
+ /// The type of a Combine publisher that publishes the value of a Swift optional
36
+ /// instance to each subscriber exactly once, if the instance has any value at
37
+ /// all.
38
+ ///
39
+ /// In contrast with the `Just` publisher, which always produces a single value,
40
+ /// this publisher might not send any values and instead finish normally,
41
+ /// if `output` is `nil`.
42
+ public struct Publisher: Combine.Publisher {
43
+
44
+ /// The kind of value published by this publisher.
45
+ ///
46
+ /// This publisher produces the type wrapped by the optional.
47
+ public typealias Output = Wrapped
48
+
49
+ /// The kind of error this publisher might publish.
50
+ ///
51
+ /// The optional publisher never produces errors.
52
+ public typealias Failure = Never
53
+
54
+ /// The output to deliver to each subscriber.
55
+ public let output: Wrapped?
56
+
57
+ /// Creates a publisher to emit the value of the optional, or to finish
58
+ /// immediately if the optional doesn't have a value.
59
+ ///
60
+ /// - Parameter output: The result to deliver to each subscriber.
61
+ public init(_ output: Output?) {
62
+ self.output = output
63
+ }
64
+
65
+ /// Implements the Publisher protocol by accepting the subscriber and
66
+ /// immediately publishing the optional’s value if it has one, or finishing
67
+ /// normally if it doesn’t.
68
+ ///
69
+ /// - Parameter subscriber: The subscriber to add.
70
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
71
+ where Output == Downstream.Input, Failure == Downstream.Failure
72
+ {
73
+ if let output = output {
74
+ subscriber.receive(subscription: Inner(value: output,
75
+ downstream: subscriber))
76
+ } else {
77
+ subscriber.receive(subscription: Subscriptions.empty)
78
+ subscriber.receive(completion: .finished)
79
+ }
80
+ }
81
+ }
82
+ }
83
+
84
+ public var ocombine: OCombine {
85
+ return .init(self)
86
+ }
87
+
88
+ #if !canImport(Combine)
89
+ /// The type of a Combine publisher that publishes the value of a Swift optional
90
+ /// instance to each subscriber exactly once, if the instance has any value at
91
+ /// all.
92
+ ///
93
+ /// In contrast with the `Just` publisher, which always produces a single value,
94
+ /// this publisher might not send any values and instead finish normally,
95
+ /// if `output` is `nil`.
96
+ public typealias Publisher = OCombine.Publisher
97
+
98
+ public var publisher: Publisher {
99
+ return Publisher(self)
100
+ }
101
+ #endif
102
+ }
103
+
104
+ extension Optional.OCombine {
105
+ private final class Inner<Downstream: Subscriber>
106
+ : Subscription,
107
+ CustomStringConvertible,
108
+ CustomReflectable,
109
+ CustomPlaygroundDisplayConvertible
110
+ where Downstream.Input == Wrapped
111
+ {
112
+ // NOTE: this class has been audited for thread safety.
113
+ // Combine doesn't use any locking here.
114
+
115
+ private var downstream: Downstream?
116
+ private let output: Wrapped
117
+
118
+ init(value: Wrapped, downstream: Downstream) {
119
+ self.output = value
120
+ self.downstream = downstream
121
+ }
122
+
123
+ func request(_ demand: Subscribers.Demand) {
124
+ demand.assertNonZero()
125
+ guard let downstream = self.downstream.take() else { return }
126
+ _ = downstream.receive(output)
127
+ downstream.receive(completion: .finished)
128
+ }
129
+
130
+ func cancel() {
131
+ downstream = nil
132
+ }
133
+
134
+ var description: String { return "Optional" }
135
+
136
+ var customMirror: Mirror {
137
+ return Mirror(self, unlabeledChildren: CollectionOfOne(output))
138
+ }
139
+
140
+ var playgroundDescription: Any { return description }
141
+ }
142
+ }
143
+
144
+ extension Optional.OCombine.Publisher: Equatable where Wrapped: Equatable {}
145
+
146
+ extension Optional.OCombine.Publisher where Wrapped: Equatable {
147
+
148
+ public func contains(_ output: Output) -> Optional<Bool>.OCombine.Publisher {
149
+ return .init(self.output.map { $0 == output })
150
+ }
151
+
152
+ public func removeDuplicates() -> Optional<Wrapped>.OCombine.Publisher {
153
+ return self
154
+ }
155
+ }
156
+
157
+ extension Optional.OCombine.Publisher where Wrapped: Comparable {
158
+
159
+ public func min() -> Optional<Wrapped>.OCombine.Publisher {
160
+ return self
161
+ }
162
+
163
+ public func max() -> Optional<Wrapped>.OCombine.Publisher {
164
+ return self
165
+ }
166
+ }
167
+
168
+ extension Optional.OCombine.Publisher {
169
+
170
+ public func allSatisfy(
171
+ _ predicate: (Output) -> Bool
172
+ ) -> Optional<Bool>.OCombine.Publisher {
173
+ return .init(self.output.map(predicate))
174
+ }
175
+
176
+ public func collect() -> Optional<[Output]>.OCombine.Publisher {
177
+ return .init(self.output.map { [$0] } ?? [])
178
+ }
179
+
180
+ public func compactMap<ElementOfResult>(
181
+ _ transform: (Output) -> ElementOfResult?
182
+ ) -> Optional<ElementOfResult>.OCombine.Publisher {
183
+ return .init(self.output.flatMap(transform))
184
+ }
185
+
186
+ public func min(
187
+ by areInIncreasingOrder: (Output, Output) -> Bool
188
+ ) -> Optional<Output>.OCombine.Publisher {
189
+ return self
190
+ }
191
+
192
+ public func max(
193
+ by areInIncreasingOrder: (Output, Output) -> Bool
194
+ ) -> Optional<Output>.OCombine.Publisher {
195
+ return self
196
+ }
197
+
198
+ public func contains(
199
+ where predicate: (Output) -> Bool
200
+ ) -> Optional<Bool>.OCombine.Publisher {
201
+ return .init(self.output.map(predicate))
202
+ }
203
+
204
+ public func count() -> Optional<Int>.OCombine.Publisher {
205
+ return .init(self.output.map { _ in 1 })
206
+ }
207
+
208
+ public func dropFirst(_ count: Int = 1) -> Optional<Output>.OCombine.Publisher {
209
+ precondition(count >= 0, "count must not be negative")
210
+ return .init(self.output.flatMap { count == 0 ? $0 : nil })
211
+ }
212
+
213
+ public func drop(
214
+ while predicate: (Output) -> Bool
215
+ ) -> Optional<Output>.OCombine.Publisher {
216
+ return .init(self.output.flatMap { predicate($0) ? nil : $0 })
217
+ }
218
+
219
+ public func first() -> Optional<Output>.OCombine.Publisher {
220
+ return self
221
+ }
222
+
223
+ public func first(
224
+ where predicate: (Output) -> Bool
225
+ ) -> Optional<Output>.OCombine.Publisher {
226
+ return .init(output.flatMap { predicate($0) ? $0 : nil })
227
+ }
228
+
229
+ public func last() -> Optional<Output>.OCombine.Publisher {
230
+ return self
231
+ }
232
+
233
+ public func last(
234
+ where predicate: (Output) -> Bool
235
+ ) -> Optional<Output>.OCombine.Publisher {
236
+ return .init(output.flatMap { predicate($0) ? $0 : nil })
237
+ }
238
+
239
+ public func filter(
240
+ _ isIncluded: (Output) -> Bool
241
+ ) -> Optional<Output>.OCombine.Publisher {
242
+ return .init(output.flatMap { isIncluded($0) ? $0 : nil })
243
+ }
244
+
245
+ public func ignoreOutput() -> Empty<Output, Failure> {
246
+ return .init()
247
+ }
248
+
249
+ public func map<ElementOfResult>(
250
+ _ transform: (Output) -> ElementOfResult
251
+ ) -> Optional<ElementOfResult>.OCombine.Publisher {
252
+ return .init(output.map(transform))
253
+ }
254
+
255
+ public func output(at index: Int) -> Optional<Output>.OCombine.Publisher {
256
+ precondition(index >= 0, "index must not be negative")
257
+ return .init(output.flatMap { index == 0 ? $0 : nil })
258
+ }
259
+
260
+ public func output<RangeExpression: Swift.RangeExpression>(
261
+ in range: RangeExpression
262
+ ) -> Optional<Output>.OCombine.Publisher where RangeExpression.Bound == Int {
263
+ let range = range.relative(to: 0 ..< Int.max)
264
+ precondition(range.lowerBound >= 0, "lowerBound must not be negative")
265
+
266
+ // I don't know why, but Combine has this precondition
267
+ precondition(range.upperBound < .max - 1)
268
+ return .init(
269
+ output.flatMap { (range.lowerBound == 0 && range.upperBound != 0) ? $0 : nil }
270
+ )
271
+ }
272
+
273
+ public func prefix(_ maxLength: Int) -> Optional<Output>.OCombine.Publisher {
274
+ precondition(maxLength >= 0, "maxLength must not be negative")
275
+ return .init(output.flatMap { maxLength > 0 ? $0 : nil })
276
+ }
277
+
278
+ public func prefix(
279
+ while predicate: (Output) -> Bool
280
+ ) -> Optional<Output>.OCombine.Publisher {
281
+ return .init(output.flatMap { predicate($0) ? $0 : nil })
282
+ }
283
+
284
+ public func reduce<Accumulator>(
285
+ _ initialResult: Accumulator,
286
+ _ nextPartialResult: (Accumulator, Output) -> Accumulator
287
+ ) -> Optional<Accumulator>.OCombine.Publisher {
288
+ return .init(output.map { nextPartialResult(initialResult, $0) })
289
+ }
290
+
291
+ public func scan<ElementOfResult>(
292
+ _ initialResult: ElementOfResult,
293
+ _ nextPartialResult: (ElementOfResult, Output) -> ElementOfResult
294
+ ) -> Optional<ElementOfResult>.OCombine.Publisher {
295
+ return .init(output.map { nextPartialResult(initialResult, $0) })
296
+ }
297
+
298
+ public func removeDuplicates(
299
+ by predicate: (Output, Output) -> Bool
300
+ ) -> Optional<Output>.OCombine.Publisher {
301
+ return self
302
+ }
303
+
304
+ public func replaceError(with output: Output) -> Optional<Output>.OCombine.Publisher {
305
+ return self
306
+ }
307
+
308
+ public func replaceEmpty(with output: Output) -> Just<Output> {
309
+ return .init(self.output ?? output)
310
+ }
311
+
312
+ public func retry(_ times: Int) -> Optional<Output>.OCombine.Publisher {
313
+ return self
314
+ }
315
+ }
@@ -0,0 +1,217 @@
1
+ //
2
+ // Publishers.AllSatisfy.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 09.10.2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Publishes a single Boolean value that indicates whether all received elements pass
11
+ /// a given predicate.
12
+ ///
13
+ /// Use the `allSatisfy(_:)` operator to determine if all elements in a stream satisfy
14
+ /// a criteria you provide. When this publisher receives an element, it runs
15
+ /// the predicate against the element. If the predicate returns `false`, the publisher
16
+ /// produces a `false` value and finishes. If the upstream publisher finishes
17
+ /// normally, this publisher produces a `true` value and finishes.
18
+ ///
19
+ /// In the example below, the `allSatisfy(_:)` operator tests if each an integer array
20
+ /// publisher’s elements fall into the `targetRange`:
21
+ ///
22
+ /// let targetRange = (-1...100)
23
+ /// let numbers = [-1, 0, 10, 5]
24
+ /// numbers.publisher
25
+ /// .allSatisfy { targetRange.contains($0) }
26
+ /// .sink { print("\($0)") }
27
+ ///
28
+ /// // Prints: "true"
29
+ ///
30
+ /// With operators similar to `reduce(_:_:)`, this publisher produces at most one
31
+ /// value.
32
+ ///
33
+ /// > Note: Upon receiving any request greater than zero, this publisher requests
34
+ /// unlimited elements from the upstream publisher.
35
+ ///
36
+ /// - Parameter predicate: A closure that evaluates each received element.
37
+ /// Return `true` to continue, or `false` to cancel the upstream and complete.
38
+ /// - Returns: A publisher that publishes a Boolean value that indicates whether
39
+ /// all received elements pass a given predicate.
40
+ public func allSatisfy(
41
+ _ predicate: @escaping (Output) -> Bool
42
+ ) -> Publishers.AllSatisfy<Self> {
43
+ return .init(upstream: self, predicate: predicate)
44
+ }
45
+
46
+ /// Publishes a single Boolean value that indicates whether all received elements pass
47
+ /// a given error-throwing predicate.
48
+ ///
49
+ /// Use the `tryAllSatisfy(_:)` operator to determine if all elements in a stream
50
+ /// satisfy a criteria in an error-throwing predicate you provide. When this publisher
51
+ /// receives an element, it runs the predicate against the element. If the predicate
52
+ /// returns `false`, the publisher produces a `false` value and finishes.
53
+ /// If the upstream publisher finishes normally, this publisher produces a `true`
54
+ /// value and finishes. If the predicate throws an error, the publisher fails and
55
+ /// passes the error to its downstream subscriber.
56
+ ///
57
+ /// In the example below, an error-throwing predicate tests if each of an integer
58
+ /// array publisher’s elements fall into the `targetRange`; the predicate throws
59
+ /// an error if an element is zero and terminates the stream.
60
+ ///
61
+ /// let targetRange = (-1...100)
62
+ /// let numbers = [-1, 10, 5, 0]
63
+ ///
64
+ /// numbers.publisher
65
+ /// .tryAllSatisfy { anInt in
66
+ /// guard anInt != 0 else { throw RangeError() }
67
+ /// return targetRange.contains(anInt)
68
+ /// }
69
+ /// .sink(
70
+ /// receiveCompletion: { print ("completion: \($0)") },
71
+ /// receiveValue: { print ("value: \($0)") }
72
+ /// )
73
+ ///
74
+ /// // Prints: "completion: failure(RangeError())"
75
+ ///
76
+ /// With operators similar to `reduce(_:_:)`, this publisher produces at most one
77
+ /// value.
78
+ ///
79
+ /// > Note: Upon receiving any request greater than zero, this publisher requests
80
+ /// unlimited elements from the upstream publisher.
81
+ ///
82
+ /// - Parameter predicate: A closure that evaluates each received element. Return
83
+ /// `true` to continue, or `false` to cancel the upstream and complete. The closure
84
+ /// may throw an error, in which case the publisher cancels the upstream publisher
85
+ /// and fails with the thrown error.
86
+ /// - Returns: A publisher that publishes a Boolean value that indicates whether all
87
+ /// received elements pass a given predicate.
88
+ public func tryAllSatisfy(
89
+ _ predicate: @escaping (Output) throws -> Bool
90
+ ) -> Publishers.TryAllSatisfy<Self> {
91
+ return .init(upstream: self, predicate: predicate)
92
+ }
93
+ }
94
+
95
+ extension Publishers {
96
+
97
+ /// A publisher that publishes a single Boolean value that indicates whether
98
+ /// all received elements pass a given predicate.
99
+ public struct AllSatisfy<Upstream: Publisher>: Publisher {
100
+
101
+ public typealias Output = Bool
102
+
103
+ public typealias Failure = Upstream.Failure
104
+
105
+ /// The publisher from which this publisher receives elements.
106
+ public let upstream: Upstream
107
+
108
+ /// A closure that evaluates each received element.
109
+ ///
110
+ /// Return `true` to continue, or `false` to cancel the upstream and finish.
111
+ public let predicate: (Upstream.Output) -> Bool
112
+
113
+ public init(upstream: Upstream, predicate: @escaping (Upstream.Output) -> Bool) {
114
+ self.upstream = upstream
115
+ self.predicate = predicate
116
+ }
117
+
118
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
119
+ where Upstream.Failure == Downstream.Failure, Downstream.Input == Bool
120
+ {
121
+ upstream.subscribe(Inner(downstream: subscriber, predicate: predicate))
122
+ }
123
+ }
124
+
125
+ /// A publisher that publishes a single Boolean value that indicates whether
126
+ /// all received elements pass a given error-throwing predicate.
127
+ public struct TryAllSatisfy<Upstream: Publisher>: Publisher {
128
+
129
+ public typealias Output = Bool
130
+
131
+ public typealias Failure = Error
132
+
133
+ /// The publisher from which this publisher receives elements.
134
+ public let upstream: Upstream
135
+
136
+ /// A closure that evaluates each received element.
137
+ ///
138
+ /// Return `true` to continue, or `false` to cancel the upstream and complete.
139
+ /// The closure may throw, in which case the publisher cancels the upstream
140
+ /// publisher and fails with the thrown error.
141
+ public let predicate: (Upstream.Output) throws -> Bool
142
+
143
+ public init(upstream: Upstream,
144
+ predicate: @escaping (Upstream.Output) throws -> Bool) {
145
+ self.upstream = upstream
146
+ self.predicate = predicate
147
+ }
148
+
149
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
150
+ where Downstream.Failure == Error, Downstream.Input == Bool
151
+ {
152
+ upstream.subscribe(Inner(downstream: subscriber, predicate: predicate))
153
+ }
154
+ }
155
+ }
156
+
157
+ extension Publishers.AllSatisfy {
158
+ private final class Inner<Downstream: Subscriber>
159
+ : ReduceProducer<Downstream,
160
+ Upstream.Output,
161
+ Bool,
162
+ Upstream.Failure,
163
+ (Upstream.Output) -> Bool>
164
+ where Downstream.Input == Output, Upstream.Failure == Downstream.Failure
165
+ {
166
+ fileprivate init(downstream: Downstream,
167
+ predicate: @escaping (Upstream.Output) -> Bool) {
168
+ super.init(downstream: downstream, initial: true, reduce: predicate)
169
+ }
170
+
171
+ override func receive(
172
+ newValue: Upstream.Output
173
+ ) -> PartialCompletion<Void, Downstream.Failure> {
174
+ if !reduce(newValue) {
175
+ result = false
176
+ return .finished
177
+ }
178
+
179
+ return .continue
180
+ }
181
+
182
+ override var description: String { return "AllSatisfy" }
183
+ }
184
+ }
185
+
186
+ extension Publishers.TryAllSatisfy {
187
+ private final class Inner<Downstream: Subscriber>
188
+ : ReduceProducer<Downstream,
189
+ Upstream.Output,
190
+ Bool,
191
+ Upstream.Failure,
192
+ (Upstream.Output) throws -> Bool>
193
+ where Downstream.Input == Output, Downstream.Failure == Error
194
+ {
195
+ fileprivate init(downstream: Downstream,
196
+ predicate: @escaping (Upstream.Output) throws -> Bool) {
197
+ super.init(downstream: downstream, initial: true, reduce: predicate)
198
+ }
199
+
200
+ override func receive(
201
+ newValue: Upstream.Output
202
+ ) -> PartialCompletion<Void, Downstream.Failure> {
203
+ do {
204
+ if try !reduce(newValue) {
205
+ result = false
206
+ return .finished
207
+ }
208
+ } catch {
209
+ return .failure(error)
210
+ }
211
+
212
+ return .continue
213
+ }
214
+
215
+ override var description: String { return "TryAllSatisfy" }
216
+ }
217
+ }
@@ -0,0 +1,158 @@
1
+ //
2
+ // Publishers.AssertNoFailure.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 25.12.2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Raises a fatal error when its upstream publisher fails, and otherwise republishes
11
+ /// all received input.
12
+ ///
13
+ /// Use `assertNoFailure()` for internal integrity checks that are active during
14
+ /// testing. However, it is important to note that, like its Swift counterpart
15
+ /// `fatalError(_:)`, the `assertNoFailure()` operator asserts a fatal exception when
16
+ /// triggered during development and testing, _and_ in shipping versions of code.
17
+ ///
18
+ /// In the example below, a `CurrentValueSubject` publishes the initial and second
19
+ /// values successfully. The third value, containing a `genericSubjectError`, causes
20
+ /// the `assertNoFailure()` operator to assert a fatal exception stopping the process:
21
+ ///
22
+ /// public enum SubjectError: Error {
23
+ /// case genericSubjectError
24
+ /// }
25
+ ///
26
+ /// let subject = CurrentValueSubject<String, Error>("initial value")
27
+ /// subject
28
+ /// .assertNoFailure()
29
+ /// .sink(receiveCompletion: { print ("completion: \($0)") },
30
+ /// receiveValue: { print ("value: \($0).") }
31
+ /// )
32
+ ///
33
+ /// subject.send("second value")
34
+ /// subject.send(completion: .failure(SubjectError.genericSubjectError))
35
+ ///
36
+ /// // Prints:
37
+ /// // value: initial value.
38
+ /// // value: second value.
39
+ /// // The process then terminates in the debugger as the assertNoFailure
40
+ /// // operator catches the genericSubjectError.
41
+ ///
42
+ /// - Parameters:
43
+ /// - prefix: A string used at the beginning of the fatal error message.
44
+ /// - file: A filename used in the error message. This defaults to `#file`.
45
+ /// - line: A line number used in the error message. This defaults to `#line`.
46
+ /// - Returns: A publisher that raises a fatal error when its upstream publisher
47
+ /// fails.
48
+ public func assertNoFailure(_ prefix: String = "",
49
+ file: StaticString = #file,
50
+ line: UInt = #line) -> Publishers.AssertNoFailure<Self> {
51
+ return .init(upstream: self, prefix: prefix, file: file, line: line)
52
+ }
53
+ }
54
+
55
+ extension Publishers {
56
+
57
+ /// A publisher that raises a fatal error upon receiving any failure, and otherwise
58
+ /// republishes all received input.
59
+ ///
60
+ /// Use this function for internal integrity checks that are active during testing but
61
+ /// don't affect performance of shipping code.
62
+ public struct AssertNoFailure<Upstream: Publisher>: Publisher {
63
+
64
+ public typealias Output = Upstream.Output
65
+
66
+ public typealias Failure = Never
67
+
68
+ /// The publisher from which this publisher receives elements.
69
+ public let upstream: Upstream
70
+
71
+ /// The string used at the beginning of the fatal error message.
72
+ public let prefix: String
73
+
74
+ /// The filename used in the error message.
75
+ public let file: StaticString
76
+
77
+ /// The line number used in the error message.
78
+ public let line: UInt
79
+
80
+ public init(upstream: Upstream, prefix: String, file: StaticString, line: UInt) {
81
+ self.upstream = upstream
82
+ self.prefix = prefix
83
+ self.file = file
84
+ self.line = line
85
+ }
86
+
87
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
88
+ where Downstream.Input == Output, Downstream.Failure == Never
89
+ {
90
+ upstream.subscribe(Inner(downstream: subscriber,
91
+ prefix: prefix,
92
+ file: file,
93
+ line: line))
94
+ }
95
+ }
96
+ }
97
+
98
+ extension Publishers.AssertNoFailure {
99
+ private struct Inner<Downstream: Subscriber>
100
+ : Subscriber,
101
+ CustomStringConvertible,
102
+ CustomReflectable,
103
+ CustomPlaygroundDisplayConvertible
104
+ where Downstream.Input == Upstream.Output, Downstream.Failure == Never
105
+ {
106
+ typealias Input = Upstream.Output
107
+
108
+ typealias Failure = Upstream.Failure
109
+
110
+ private let downstream: Downstream
111
+
112
+ private let prefix: String
113
+
114
+ private let file: StaticString
115
+
116
+ private let line: UInt
117
+
118
+ let combineIdentifier = CombineIdentifier()
119
+
120
+ init(downstream: Downstream, prefix: String, file: StaticString, line: UInt) {
121
+ self.downstream = downstream
122
+ self.prefix = prefix
123
+ self.file = file
124
+ self.line = line
125
+ }
126
+
127
+ func receive(subscription: Subscription) {
128
+ downstream.receive(subscription: subscription)
129
+ }
130
+
131
+ func receive(_ input: Input) -> Subscribers.Demand {
132
+ return downstream.receive(input)
133
+ }
134
+
135
+ func receive(completion: Subscribers.Completion<Failure>) {
136
+ switch completion {
137
+ case .finished:
138
+ downstream.receive(completion: .finished)
139
+ case .failure(let error):
140
+ let prefix = self.prefix.isEmpty ? "" : self.prefix + ": "
141
+ fatalError("\(prefix)\(error)", file: file, line: line)
142
+ }
143
+ }
144
+
145
+ var description: String { return "AssertNoFailure" }
146
+
147
+ var customMirror: Mirror {
148
+ let children: [Mirror.Child] = [
149
+ ("file", file),
150
+ ("line", line),
151
+ ("prefix", prefix)
152
+ ]
153
+ return Mirror(self, children: children)
154
+ }
155
+
156
+ var playgroundDescription: Any { return description }
157
+ }
158
+ }