@swiftbrowser/swift 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/Package.swift +200 -9
  2. package/README.md +7 -9
  3. package/Sources/AVFoundation/AVFoundation.swift +131 -0
  4. package/Sources/AVFoundation/Asset.swift +487 -0
  5. package/Sources/AVFoundation/AudioSession.swift +144 -0
  6. package/Sources/AVFoundation/CMTime.swift +303 -0
  7. package/Sources/AVFoundation/Capture.swift +688 -0
  8. package/Sources/AVFoundation/Player.swift +749 -0
  9. package/Sources/AVFoundation/PlayerView.swift +117 -0
  10. package/Sources/AVKit/AVKit.swift +132 -0
  11. package/Sources/Accelerate/Accelerate.swift +122 -0
  12. package/Sources/AppIntents/AppIntents.swift +144 -0
  13. package/Sources/AppIntents/Parameters.swift +220 -0
  14. package/Sources/AppIntents/Shortcuts.swift +159 -0
  15. package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
  16. package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
  17. package/Sources/AuthenticationServices/Authorization.swift +251 -0
  18. package/Sources/Charts/Charts.swift +0 -4
  19. package/Sources/Combine/AnyCancellable.swift +65 -0
  20. package/Sources/Combine/AnyPublisher.swift +148 -0
  21. package/Sources/Combine/AnySubscriber.swift +230 -0
  22. package/Sources/Combine/Cancellable.swift +35 -0
  23. package/Sources/Combine/Codable.swift +29 -0
  24. package/Sources/Combine/CombineIdentifier.swift +45 -0
  25. package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
  26. package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
  27. package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
  28. package/Sources/Combine/CurrentValueSubject.swift +252 -0
  29. package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
  30. package/Sources/Combine/Future.swift +228 -0
  31. package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
  32. package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
  33. package/Sources/Combine/Helpers/ConduitList.swift +59 -0
  34. package/Sources/Combine/Helpers/DebugHook.swift +177 -0
  35. package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
  36. package/Sources/Combine/Helpers/Locking.swift +30 -0
  37. package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
  38. package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
  39. package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
  40. package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
  41. package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
  42. package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
  43. package/Sources/Combine/Helpers/Utils.swift +30 -0
  44. package/Sources/Combine/Helpers/Violations.swift +33 -0
  45. package/Sources/Combine/ImmediateScheduler.swift +178 -0
  46. package/Sources/Combine/LICENSE +21 -0
  47. package/Sources/Combine/NotificationPublisher.swift +48 -0
  48. package/Sources/Combine/ObjectWillChange.swift +46 -0
  49. package/Sources/Combine/PassthroughSubject.swift +222 -0
  50. package/Sources/Combine/Publisher+Subscribe.swift +53 -0
  51. package/Sources/Combine/Publishers/Deferred.swift +48 -0
  52. package/Sources/Combine/Publishers/Empty.swift +54 -0
  53. package/Sources/Combine/Publishers/Fail.swift +42 -0
  54. package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
  55. package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
  56. package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
  57. package/Sources/Combine/Publishers/Just.swift +313 -0
  58. package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
  59. package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
  60. package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
  61. package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
  62. package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
  63. package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
  64. package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
  65. package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
  66. package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
  67. package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
  68. package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
  69. package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
  70. package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
  71. package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
  72. package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
  73. package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
  74. package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
  75. package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
  76. package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
  77. package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
  78. package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
  79. package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
  80. package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
  81. package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
  82. package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
  83. package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
  84. package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
  85. package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
  86. package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
  87. package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
  88. package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
  89. package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
  90. package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
  91. package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
  92. package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
  93. package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
  94. package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
  95. package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
  96. package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
  97. package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
  98. package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
  99. package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
  100. package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
  101. package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
  102. package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
  103. package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
  104. package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
  105. package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
  106. package/Sources/Combine/Publishers/Publishers.swift +13 -0
  107. package/Sources/Combine/Publishers/Record.swift +237 -0
  108. package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
  109. package/Sources/Combine/Result.swift +46 -0
  110. package/Sources/Combine/Scheduler.swift +89 -0
  111. package/Sources/Combine/Schedulers.swift +211 -0
  112. package/Sources/Combine/Subject+Void.swift +17 -0
  113. package/Sources/Combine/Subscriber+Void.swift +20 -0
  114. package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
  115. package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
  116. package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
  117. package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
  118. package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
  119. package/Sources/Combine/Subscription.swift +22 -0
  120. package/Sources/Combine/Subscriptions.swift +42 -0
  121. package/Sources/Combine/SwiftUIObservation.swift +10 -0
  122. package/Sources/Combine/_Introspection.swift +107 -0
  123. package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
  124. package/Sources/Compression/Compression.swift +365 -0
  125. package/Sources/Compression/Deflate.swift +407 -0
  126. package/Sources/Compression/Zlib.swift +179 -0
  127. package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
  128. package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
  129. package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
  130. package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
  131. package/Sources/CoreImage/CIColor.swift +41 -0
  132. package/Sources/CoreImage/CIContext.swift +31 -0
  133. package/Sources/CoreImage/CIDetector.swift +57 -0
  134. package/Sources/CoreImage/CIFilter.swift +243 -0
  135. package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
  136. package/Sources/CoreImage/CIImage.swift +162 -0
  137. package/Sources/CoreImage/QRCode.swift +393 -0
  138. package/Sources/CoreLocation/Coordinate.swift +30 -0
  139. package/Sources/CoreLocation/Location.swift +65 -0
  140. package/Sources/CoreML/Evaluation.swift +414 -0
  141. package/Sources/CoreML/FeatureValue.swift +266 -0
  142. package/Sources/CoreML/Model.swift +269 -0
  143. package/Sources/CoreML/MultiArray.swift +92 -0
  144. package/Sources/CoreML/Specification.swift +233 -0
  145. package/Sources/CoreText/CoreText.swift +64 -0
  146. package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
  147. package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
  148. package/Sources/CryptoKit/CryptoKit.swift +375 -0
  149. package/Sources/CryptoKit/Curve25519.swift +317 -0
  150. package/Sources/CryptoKit/P256.swift +321 -0
  151. package/Sources/FoundationBridge/AppStorage.swift +165 -0
  152. package/Sources/FoundationBridge/AssetResources.swift +90 -0
  153. package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
  154. package/Sources/FoundationBridge/AsyncImage.swift +116 -0
  155. package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
  156. package/Sources/{_FoundationCommon → FoundationBridge}/Bundle.swift +41 -4
  157. package/Sources/FoundationBridge/CombineExports.swift +8 -0
  158. package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
  159. package/Sources/FoundationBridge/Dispatch.swift +458 -0
  160. package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
  161. package/Sources/FoundationBridge/FileImporter.swift +128 -0
  162. package/Sources/FoundationBridge/FileSystem.swift +68 -0
  163. package/Sources/FoundationBridge/FoundationBridge.swift +24 -72
  164. package/Sources/FoundationBridge/HostResolution.swift +31 -0
  165. package/Sources/FoundationBridge/ItemProvider.swift +655 -0
  166. package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
  167. package/Sources/FoundationBridge/Links.swift +127 -0
  168. package/Sources/FoundationBridge/ListFormatter.swift +32 -0
  169. package/Sources/FoundationBridge/Localization.swift +149 -0
  170. package/Sources/FoundationBridge/Locks.swift +50 -0
  171. package/Sources/FoundationBridge/Markdown.swift +527 -0
  172. package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
  173. package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
  174. package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
  175. package/Sources/FoundationBridge/Operation.swift +195 -0
  176. package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
  177. package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
  178. package/Sources/FoundationBridge/SceneStorage.swift +78 -0
  179. package/Sources/FoundationBridge/SecurityExports.swift +8 -0
  180. package/Sources/FoundationBridge/Selector.swift +226 -0
  181. package/Sources/FoundationBridge/StringComparators.swift +17 -0
  182. package/Sources/FoundationBridge/Table.swift +211 -0
  183. package/Sources/FoundationBridge/TextAttributes.swift +42 -0
  184. package/Sources/FoundationBridge/Timer.swift +6 -1
  185. package/Sources/FoundationBridge/URLSession.swift +718 -0
  186. package/Sources/{_FoundationCommon → FoundationBridge}/UserDefaults.swift +17 -4
  187. package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
  188. package/Sources/FoundationBridge/WebSocket.swift +187 -0
  189. package/Sources/FoundationModels/FoundationModels.swift +1098 -0
  190. package/Sources/ImageIO/GIF.swift +72 -0
  191. package/Sources/ImageIO/ImageIO.swift +248 -0
  192. package/Sources/ImageIO/ImageTypes.swift +28 -0
  193. package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
  194. package/Sources/LocalAuthentication/LAContext.swift +86 -0
  195. package/Sources/MapKit/Geometry.swift +223 -0
  196. package/Sources/MapKit/Map.swift +638 -0
  197. package/Sources/MapKit/MapView.swift +229 -0
  198. package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
  199. package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
  200. package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
  201. package/Sources/OSLog/OSLog.swift +6 -0
  202. package/Sources/Photos/Photos.swift +572 -0
  203. package/Sources/PhotosUI/PhotosPicker.swift +248 -0
  204. package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
  205. package/Sources/QuickLook/QuickLook.swift +168 -0
  206. package/Sources/SafariServices/SafariServices.swift +106 -0
  207. package/Sources/Security/Security.swift +332 -0
  208. package/Sources/StoreKit/AppStore.swift +207 -0
  209. package/Sources/StoreKit/Products.swift +280 -0
  210. package/Sources/StoreKit/RequestReview.swift +28 -0
  211. package/Sources/StoreKit/StoreKit1.swift +486 -0
  212. package/Sources/StoreKit/StoreViews.swift +428 -0
  213. package/Sources/StoreKit/Transactions.swift +197 -0
  214. package/Sources/SwiftData/Macros.swift +58 -0
  215. package/Sources/SwiftData/ModelActor.swift +38 -0
  216. package/Sources/SwiftData/ModelContainer.swift +129 -0
  217. package/Sources/SwiftData/ModelContext.swift +451 -0
  218. package/Sources/SwiftData/PersistentModel.swift +238 -0
  219. package/Sources/SwiftData/Properties.swift +261 -0
  220. package/Sources/SwiftData/Query.swift +256 -0
  221. package/Sources/SwiftData/Schema.swift +192 -0
  222. package/Sources/SwiftData/Store.swift +146 -0
  223. package/Sources/SwiftData/StringPredicates.swift +125 -0
  224. package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
  225. package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
  226. package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
  227. package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
  228. package/Sources/SwiftDataMacros/Plugin.swift +18 -0
  229. package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
  230. package/Sources/SwiftUI/API/Accessibility.swift +55 -6
  231. package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
  232. package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
  233. package/Sources/SwiftUI/API/Alert.swift +1 -1
  234. package/Sources/SwiftUI/API/AlignmentGuides.swift +68 -0
  235. package/Sources/SwiftUI/API/Animation.swift +37 -5
  236. package/Sources/SwiftUI/API/App.swift +31 -1
  237. package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
  238. package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
  239. package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
  240. package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
  241. package/Sources/SwiftUI/API/Canvas.swift +337 -0
  242. package/Sources/SwiftUI/API/Color.swift +104 -28
  243. package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
  244. package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
  245. package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
  246. package/Sources/SwiftUI/API/Commands.swift +106 -0
  247. package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
  248. package/Sources/SwiftUI/API/ContentShape.swift +33 -0
  249. package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
  250. package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
  251. package/Sources/SwiftUI/API/Controls.swift +59 -27
  252. package/Sources/SwiftUI/API/CustomLayout.swift +49 -10
  253. package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
  254. package/Sources/SwiftUI/API/Decorations.swift +1 -1
  255. package/Sources/SwiftUI/API/EditMode.swift +25 -82
  256. package/Sources/SwiftUI/API/Effects.swift +125 -10
  257. package/Sources/SwiftUI/API/Entry.swift +8 -0
  258. package/Sources/SwiftUI/API/Environment.swift +100 -9
  259. package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
  260. package/Sources/SwiftUI/API/Focus.swift +11 -3
  261. package/Sources/SwiftUI/API/Gauge.swift +26 -10
  262. package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
  263. package/Sources/SwiftUI/API/GeometryReader.swift +13 -2
  264. package/Sources/SwiftUI/API/GestureState.swift +65 -0
  265. package/Sources/SwiftUI/API/Gestures.swift +1 -1
  266. package/Sources/SwiftUI/API/Glass.swift +127 -0
  267. package/Sources/SwiftUI/API/Grid.swift +1 -1
  268. package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
  269. package/Sources/SwiftUI/API/KeyPress.swift +54 -0
  270. package/Sources/SwiftUI/API/LabelStyle.swift +13 -6
  271. package/Sources/SwiftUI/API/Layout.swift +71 -12
  272. package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
  273. package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
  274. package/Sources/SwiftUI/API/Lists.swift +61 -6
  275. package/Sources/SwiftUI/API/Menu.swift +8 -1
  276. package/Sources/SwiftUI/API/Modifiers.swift +88 -12
  277. package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
  278. package/Sources/SwiftUI/API/Namespace.swift +44 -0
  279. package/Sources/SwiftUI/API/Navigation.swift +24 -9
  280. package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
  281. package/Sources/SwiftUI/API/ObservableObject.swift +16 -2
  282. package/Sources/SwiftUI/API/Path.swift +543 -0
  283. package/Sources/SwiftUI/API/Phase8Controls.swift +48 -31
  284. package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
  285. package/Sources/SwiftUI/API/Picker.swift +14 -4
  286. package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
  287. package/Sources/SwiftUI/API/Popover.swift +41 -0
  288. package/Sources/SwiftUI/API/Preferences.swift +262 -0
  289. package/Sources/SwiftUI/API/Presentation.swift +17 -4
  290. package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
  291. package/Sources/SwiftUI/API/Primitives.swift +168 -39
  292. package/Sources/SwiftUI/API/Publishers.swift +4 -4
  293. package/Sources/SwiftUI/API/Redaction.swift +75 -0
  294. package/Sources/SwiftUI/API/RowActions.swift +3 -2
  295. package/Sources/SwiftUI/API/Scenes.swift +131 -0
  296. package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
  297. package/Sources/SwiftUI/API/ScrollTargets.swift +3 -3
  298. package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
  299. package/Sources/SwiftUI/API/SectionSupplements.swift +86 -0
  300. package/Sources/SwiftUI/API/Shape.swift +214 -0
  301. package/Sources/SwiftUI/API/ShapeStyle.swift +187 -8
  302. package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
  303. package/Sources/SwiftUI/API/Sharing.swift +193 -0
  304. package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
  305. package/Sources/SwiftUI/API/State.swift +18 -1
  306. package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
  307. package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
  308. package/Sources/SwiftUI/API/TabContent.swift +841 -0
  309. package/Sources/SwiftUI/API/Table.swift +382 -0
  310. package/Sources/SwiftUI/API/Tabs.swift +148 -4
  311. package/Sources/SwiftUI/API/Tasks.swift +2 -2
  312. package/Sources/SwiftUI/API/Text.swift +386 -0
  313. package/Sources/SwiftUI/API/TextDates.swift +61 -0
  314. package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
  315. package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
  316. package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
  317. package/Sources/SwiftUI/API/Toolbar.swift +52 -16
  318. package/Sources/SwiftUI/API/Transfer.swift +145 -0
  319. package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
  320. package/Sources/SwiftUI/API/Video.swift +64 -0
  321. package/Sources/SwiftUI/API/View.swift +46 -2
  322. package/Sources/SwiftUI/API/ViewModifier.swift +4 -1
  323. package/Sources/SwiftUI/API/VisualEffect.swift +74 -1
  324. package/Sources/SwiftUI/API/Windows.swift +25 -0
  325. package/Sources/SwiftUI/Charts/Axis.swift +7 -1
  326. package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
  327. package/Sources/SwiftUI/Charts/Chart.swift +17 -3
  328. package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
  329. package/Sources/SwiftUI/Localization/Localization.swift +524 -0
  330. package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
  331. package/Sources/SwiftUI/Runtime/Executor.swift +2 -0
  332. package/Sources/SwiftUI/Runtime/Exports.swift +37 -1
  333. package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
  334. package/Sources/SwiftUI/Runtime/JSON.swift +76 -4
  335. package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
  336. package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
  337. package/Sources/SwiftUI/Runtime/Ops.swift +58 -12
  338. package/Sources/SwiftUI/Runtime/Reconciler.swift +10 -1
  339. package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
  340. package/Sources/SwiftUI/Runtime/Runtime.swift +977 -198
  341. package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
  342. package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
  343. package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
  344. package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
  345. package/Sources/Symbols/Symbols.swift +25 -0
  346. package/Sources/Translation/Translation.swift +423 -0
  347. package/Sources/UIKit/Activity.swift +213 -0
  348. package/Sources/UIKit/Alerts.swift +69 -0
  349. package/Sources/UIKit/AppDelegate.swift +222 -0
  350. package/Sources/UIKit/Appearance.swift +84 -0
  351. package/Sources/UIKit/ColorConversions.swift +70 -0
  352. package/Sources/UIKit/Controls.swift +225 -0
  353. package/Sources/UIKit/Device.swift +200 -0
  354. package/Sources/UIKit/Feedback.swift +65 -0
  355. package/Sources/UIKit/Font.swift +307 -0
  356. package/Sources/UIKit/Graphics.swift +204 -0
  357. package/Sources/UIKit/HostingController.swift +185 -0
  358. package/Sources/UIKit/Identity.swift +24 -0
  359. package/Sources/UIKit/Introspectable.swift +510 -0
  360. package/Sources/UIKit/Pasteboard.swift +363 -0
  361. package/Sources/UIKit/PhotoAlbum.swift +81 -0
  362. package/Sources/UIKit/RemoteNotifications.swift +15 -0
  363. package/Sources/UIKit/Representable.swift +288 -0
  364. package/Sources/UIKit/SafeArea.swift +12 -0
  365. package/Sources/UIKit/SceneDelegates.swift +132 -0
  366. package/Sources/UIKit/Scenes.swift +40 -0
  367. package/Sources/UIKit/ScrollView.swift +157 -0
  368. package/Sources/UIKit/ShortcutItems.swift +67 -0
  369. package/Sources/UIKit/SymbolConfiguration.swift +124 -0
  370. package/Sources/UIKit/TargetAction.swift +123 -0
  371. package/Sources/UIKit/TextPaste.swift +161 -0
  372. package/Sources/UIKit/TextView.swift +538 -0
  373. package/Sources/UIKit/UIKit.swift +292 -0
  374. package/Sources/UIKit/UIView.swift +855 -0
  375. package/Sources/UIKit/ViewTranslation.swift +311 -0
  376. package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
  377. package/Sources/UserNotifications/Content.swift +370 -0
  378. package/Sources/UserNotifications/NotificationCenter.swift +309 -0
  379. package/Sources/WeatherKit/WeatherKit.swift +228 -0
  380. package/Sources/WebKit/WebKit.swift +245 -0
  381. package/Sources/os/os.swift +376 -0
  382. package/Sources/zlib/zlib.swift +6 -0
  383. package/index.d.ts +1 -1
  384. package/index.mjs +2 -2
  385. package/manifest.d.mts +2 -0
  386. package/manifest.mjs +41 -0
  387. package/package.json +5 -3
  388. package/sync-sources.mjs +21 -7
  389. package/Sources/FoundationLite/Common.swift +0 -3
  390. package/Sources/FoundationLite/FoundationLite.swift +0 -171
  391. package/Sources/FoundationLite/Interaction.swift +0 -146
  392. package/Sources/FoundationLite/Timer.swift +0 -48
  393. package/Sources/_FoundationCommon/_FoundationCommon.swift +0 -10
@@ -0,0 +1,274 @@
1
+ //
2
+ // Publishers.Retry.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 28.06.2020.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Attempts to recreate a failed subscription with the upstream publisher up to
11
+ /// the number of times you specify.
12
+ ///
13
+ /// Use `retry(_:)` to try connecting to an upstream publisher after a failed
14
+ /// connection attempt.
15
+ ///
16
+ /// In the example below, a `URLSession.DataTaskPublisher` attempts to connect to
17
+ /// a remote URL. If the connection attempt succeeds, it publishes the remote
18
+ /// service’s HTML to the downstream publisher and completes normally. Otherwise,
19
+ /// the retry operator attempts to reestablish the connection. If after three attempts
20
+ /// the publisher still can’t connect to the remote URL, the `catch(_:)` operator
21
+ /// replaces the error with a new publisher that publishes a “connection timed out”
22
+ /// HTML page. After the downstream subscriber receives the timed out message,
23
+ /// the stream completes normally.
24
+ ///
25
+ /// struct WebSiteData: Codable {
26
+ /// var rawHTML: String
27
+ /// }
28
+ ///
29
+ /// let myURL = URL(string: "https://www.example.com")
30
+ ///
31
+ /// cancellable = URLSession.shared.dataTaskPublisher(for: myURL!)
32
+ /// .retry(3)
33
+ /// .map { page -> WebSiteData in
34
+ /// WebSiteData(rawHTML: String(decoding: page.data, as: UTF8.self))
35
+ /// }
36
+ /// .catch { error in
37
+ /// Just(
38
+ /// WebSiteData(
39
+ /// rawHTML: "<HTML>Unable to load page - timed out.</HTML>"
40
+ /// )
41
+ /// )
42
+ /// }
43
+ /// .sink(receiveCompletion: { print ("completion: \($0)") },
44
+ /// receiveValue: { print ("value: \($0)") })
45
+ ///
46
+ /// // Prints: The HTML content from the remote URL upon a successful connection,
47
+ /// // or returns "<HTML>Unable to load page - timed out.</HTML>" if
48
+ /// // the number of retries exceeds the specified value.
49
+ ///
50
+ /// After exceeding the specified number of retries, the publisher passes the failure
51
+ /// to the downstream receiver.
52
+ /// - Parameter retries: The number of times to attempt to recreate the subscription.
53
+ /// - Returns: A publisher that attempts to recreate its subscription to a failed
54
+ /// upstream publisher.
55
+ public func retry(_ retries: Int) -> Publishers.Retry<Self> {
56
+ return .init(upstream: self, retries: retries)
57
+ }
58
+ }
59
+
60
+ extension Publishers {
61
+
62
+ /// A publisher that attempts to recreate its subscription to a failed upstream
63
+ /// publisher.
64
+ public struct Retry<Upstream: Publisher>: Publisher {
65
+
66
+ public typealias Output = Upstream.Output
67
+
68
+ public typealias Failure = Upstream.Failure
69
+
70
+ /// The publisher from which this publisher receives elements.
71
+ public let upstream: Upstream
72
+
73
+ /// The maximum number of retry attempts to perform.
74
+ ///
75
+ /// If `nil`, this publisher attempts to reconnect with the upstream publisher
76
+ /// an unlimited number of times.
77
+ public let retries: Int?
78
+
79
+ /// Creates a publisher that attempts to recreate its subscription to a failed
80
+ /// upstream publisher.
81
+ ///
82
+ /// - Parameters:
83
+ /// - upstream: The publisher from which this publisher receives its elements.
84
+ /// - retries: The maximum number of retry attempts to perform. If `nil`, this
85
+ /// publisher attempts to reconnect with the upstream publisher an unlimited
86
+ /// number of times.
87
+ public init(upstream: Upstream, retries: Int?) {
88
+ self.upstream = upstream
89
+ self.retries = retries
90
+ }
91
+
92
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
93
+ where Downstream.Input == Output, Downstream.Failure == Failure
94
+ {
95
+ upstream.subscribe(Inner(parent: self, downstream: subscriber))
96
+ }
97
+ }
98
+ }
99
+
100
+ extension Publishers.Retry: Equatable where Upstream: Equatable {}
101
+
102
+ extension Publishers.Retry {
103
+ private final class Inner<Downstream: Subscriber>
104
+ : Subscriber,
105
+ Subscription,
106
+ CustomStringConvertible,
107
+ CustomReflectable,
108
+ CustomPlaygroundDisplayConvertible
109
+ where Downstream.Failure == Failure, Downstream.Input == Output
110
+ {
111
+ typealias Input = Upstream.Output
112
+
113
+ typealias Failure = Upstream.Failure
114
+
115
+ private enum State {
116
+ case ready(Publishers.Retry<Upstream>, Downstream)
117
+ case terminal
118
+ }
119
+
120
+ private enum Chances {
121
+ case finite(Int)
122
+ case infinite
123
+ }
124
+
125
+ private let lock = UnfairLock.allocate()
126
+
127
+ private var state: State
128
+
129
+ private var upstreamSubscription: Subscription?
130
+
131
+ private var remaining: Chances
132
+
133
+ private var downstreamNeedsSubscription = true
134
+
135
+ private var downstreamDemand = Subscribers.Demand.none
136
+
137
+ private var completionRecursion = false
138
+
139
+ private var needsSubscribe = false
140
+
141
+ init(parent: Publishers.Retry<Upstream>, downstream: Downstream) {
142
+ state = .ready(parent, downstream)
143
+ remaining = parent.retries.map(Chances.finite) ?? .infinite
144
+ }
145
+
146
+ deinit {
147
+ lock.deallocate()
148
+ }
149
+
150
+ func receive(subscription: Subscription) {
151
+ lock.lock()
152
+ guard case let .ready(_, downstream) = state, upstreamSubscription == nil
153
+ else {
154
+ lock.unlock()
155
+ subscription.cancel()
156
+ return
157
+ }
158
+ upstreamSubscription = subscription
159
+ let downstreamDemand = self.downstreamDemand
160
+ let downstreamNeedsSubscription = self.downstreamNeedsSubscription
161
+ self.downstreamNeedsSubscription = false
162
+ lock.unlock()
163
+ if downstreamNeedsSubscription {
164
+ downstream.receive(subscription: self)
165
+ }
166
+ if downstreamDemand != .none {
167
+ subscription.request(downstreamDemand)
168
+ }
169
+ }
170
+
171
+ func receive(_ input: Input) -> Subscribers.Demand {
172
+ lock.lock()
173
+ guard case let .ready(_, downstream) = state else {
174
+ lock.unlock()
175
+ return .none
176
+ }
177
+ downstreamDemand -= 1
178
+ lock.unlock()
179
+
180
+ let newDemand = downstream.receive(input)
181
+
182
+ if newDemand == .none { return .none }
183
+
184
+ lock.lock()
185
+ downstreamDemand += newDemand
186
+
187
+ if let upstreamSubscription = self.upstreamSubscription {
188
+ lock.unlock()
189
+ upstreamSubscription.request(newDemand)
190
+ } else {
191
+ lock.unlock()
192
+ }
193
+
194
+ return .none
195
+ }
196
+
197
+ func receive(completion: Subscribers.Completion<Failure>) {
198
+ lock.lock()
199
+ guard case let .ready(parent, downstream) = state else {
200
+ lock.unlock()
201
+ return
202
+ }
203
+
204
+ if case .failure = completion {
205
+ upstreamSubscription = nil
206
+ switch remaining {
207
+ case .finite(0):
208
+ break
209
+ case .finite(let attempts):
210
+ remaining = .finite(attempts - 1)
211
+ fallthrough
212
+ case .infinite:
213
+ if completionRecursion {
214
+ needsSubscribe = true
215
+ lock.unlock()
216
+ return
217
+ }
218
+ repeat {
219
+ completionRecursion = true
220
+ needsSubscribe = false
221
+ lock.unlock()
222
+ parent.upstream.subscribe(self)
223
+ lock.lock()
224
+ completionRecursion = false
225
+ } while needsSubscribe
226
+ lock.unlock()
227
+ return
228
+ }
229
+ }
230
+
231
+ state = .terminal
232
+ lock.unlock()
233
+ downstream.receive(completion: completion)
234
+ }
235
+
236
+ func request(_ demand: Subscribers.Demand) {
237
+ lock.lock()
238
+ guard case .ready = state else {
239
+ lock.unlock()
240
+ return
241
+ }
242
+ downstreamDemand += demand
243
+ if let upstreamSubscription = self.upstreamSubscription {
244
+ lock.unlock()
245
+ upstreamSubscription.request(demand)
246
+ } else {
247
+ lock.unlock()
248
+ }
249
+ }
250
+
251
+ func cancel() {
252
+ lock.lock()
253
+ guard case .ready = state else {
254
+ lock.unlock()
255
+ return
256
+ }
257
+ state = .terminal
258
+ if let upstreamSubscription = self.upstreamSubscription {
259
+ lock.unlock()
260
+ upstreamSubscription.cancel()
261
+ } else {
262
+ lock.unlock()
263
+ }
264
+ }
265
+
266
+ var description: String { return "Retry" }
267
+
268
+ var customMirror: Mirror {
269
+ return Mirror(self, children: EmptyCollection())
270
+ }
271
+
272
+ var playgroundDescription: Any { return description }
273
+ }
274
+ }
@@ -0,0 +1,331 @@
1
+ //
2
+ // Publishers.Scan.swift
3
+ //
4
+ // Created by Eric Patey on 26.08.2019.
5
+ //
6
+
7
+ extension Publisher {
8
+
9
+ /// Transforms elements from the upstream publisher by providing the current
10
+ /// element to a closure along with the last value returned by the closure.
11
+ ///
12
+ /// Use `scan(_:_:)` to accumulate all previously-published values into a single
13
+ /// value, which you then combine with each newly-published value.
14
+ ///
15
+ /// The following example logs a running total of all values received
16
+ /// from the sequence publisher.
17
+ ///
18
+ /// let range = (0...5)
19
+ /// cancellable = range.publisher
20
+ /// .scan(0) { return $0 + $1 }
21
+ /// .sink { print ("\($0)", terminator: " ") }
22
+ /// // Prints: "0 1 3 6 10 15 ".
23
+ ///
24
+ /// - Parameters:
25
+ /// - initialResult: The previous result returned by the `nextPartialResult`
26
+ /// closure.
27
+ /// - nextPartialResult: A closure that takes as its arguments the previous value
28
+ /// returned by the closure and the next element emitted from the upstream
29
+ /// publisher.
30
+ /// - Returns: A publisher that transforms elements by applying a closure that
31
+ /// receives its previous return value and the next element from the upstream
32
+ /// publisher.
33
+ public func scan<Result>(
34
+ _ initialResult: Result,
35
+ _ nextPartialResult: @escaping (Result, Output) -> Result
36
+ ) -> Publishers.Scan<Self, Result> {
37
+ return .init(upstream: self,
38
+ initialResult: initialResult,
39
+ nextPartialResult: nextPartialResult)
40
+ }
41
+
42
+ /// Transforms elements from the upstream publisher by providing the current element
43
+ /// to an error-throwing closure along with the last value returned by the closure.
44
+ ///
45
+ /// Use `tryScan(_:_:)` to accumulate all previously-published values into a single
46
+ /// value, which you then combine with each newly-published value.
47
+ /// If your accumulator closure throws an error, the publisher terminates with
48
+ /// the error.
49
+ ///
50
+ /// In the example below, `tryScan(_:_:)` calls a division function on elements of
51
+ /// a collection publisher. The `Publishers.TryScan` publisher publishes each result
52
+ /// until the function encounters a `DivisionByZeroError`, which terminates
53
+ /// the publisher.
54
+ ///
55
+ /// struct DivisionByZeroError: Error {}
56
+ ///
57
+ /// /// A function that throws a DivisionByZeroError if `current` provided by the
58
+ /// /// TryScan publisher is zero.
59
+ /// func myThrowingFunction(_ lastValue: Int, _ currentValue: Int) throws -> Int {
60
+ /// guard currentValue != 0 else { throw DivisionByZeroError() }
61
+ /// return (lastValue + currentValue) / currentValue
62
+ /// }
63
+ ///
64
+ /// let numbers = [1,2,3,4,5,0,6,7,8,9]
65
+ /// cancellable = numbers.publisher
66
+ /// .tryScan(10) { try myThrowingFunction($0, $1) }
67
+ /// .sink(
68
+ /// receiveCompletion: { print ("\($0)") },
69
+ /// receiveValue: { print ("\($0)", terminator: " ") }
70
+ /// )
71
+ ///
72
+ /// // Prints: "11 6 3 1 1 -1 failure(DivisionByZeroError())".
73
+ ///
74
+ /// If the closure throws an error, the publisher fails with the error.
75
+ ///
76
+ /// - Parameters:
77
+ /// - initialResult: The previous result returned by the `nextPartialResult`
78
+ /// closure.
79
+ /// - nextPartialResult: An error-throwing closure that takes as its arguments the
80
+ /// previous value returned by the closure and the next element emitted from the
81
+ /// upstream publisher.
82
+ /// - Returns: A publisher that transforms elements by applying a closure that
83
+ /// receives its previous return value and the next element from the upstream
84
+ /// publisher.
85
+ public func tryScan<Result>(
86
+ _ initialResult: Result,
87
+ _ nextPartialResult: @escaping (Result, Output) throws -> Result
88
+ ) -> Publishers.TryScan<Self, Result> {
89
+ return .init(upstream: self,
90
+ initialResult: initialResult,
91
+ nextPartialResult: nextPartialResult)
92
+ }
93
+ }
94
+
95
+ extension Publishers {
96
+
97
+ public struct Scan<Upstream: Publisher, Output>: Publisher {
98
+
99
+ public typealias Failure = Upstream.Failure
100
+
101
+ public let upstream: Upstream
102
+
103
+ public let initialResult: Output
104
+
105
+ public let nextPartialResult: (Output, Upstream.Output) -> Output
106
+
107
+ public init(upstream: Upstream,
108
+ initialResult: Output,
109
+ nextPartialResult: @escaping (Output, Upstream.Output) -> Output) {
110
+ self.upstream = upstream
111
+ self.initialResult = initialResult
112
+ self.nextPartialResult = nextPartialResult
113
+ }
114
+
115
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
116
+ where Output == Downstream.Input, Upstream.Failure == Downstream.Failure
117
+ {
118
+ upstream.subscribe(Inner(downstream: subscriber,
119
+ initialResult: initialResult,
120
+ nextPartialResult: nextPartialResult))
121
+ }
122
+ }
123
+
124
+ public struct TryScan<Upstream: Publisher, Output>: Publisher {
125
+
126
+ public typealias Failure = Error
127
+
128
+ public let upstream: Upstream
129
+
130
+ public let initialResult: Output
131
+
132
+ public let nextPartialResult: (Output, Upstream.Output) throws -> Output
133
+
134
+ public init(
135
+ upstream: Upstream,
136
+ initialResult: Output,
137
+ nextPartialResult: @escaping (Output, Upstream.Output) throws -> Output
138
+ ) {
139
+ self.upstream = upstream
140
+ self.initialResult = initialResult
141
+ self.nextPartialResult = nextPartialResult
142
+ }
143
+
144
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
145
+ where Output == Downstream.Input, Downstream.Failure == Error
146
+ {
147
+ upstream.subscribe(Inner(downstream: subscriber,
148
+ initialResult: initialResult,
149
+ nextPartialResult: nextPartialResult))
150
+ }
151
+ }
152
+ }
153
+
154
+ extension Publishers.Scan {
155
+
156
+ private final class Inner<Downstream: Subscriber>
157
+ : Subscriber,
158
+ CustomStringConvertible,
159
+ CustomReflectable,
160
+ CustomPlaygroundDisplayConvertible
161
+ where Upstream.Failure == Downstream.Failure
162
+ {
163
+ // NOTE: this class has been audited for thread safety.
164
+ // Combine doesn't use any locking here.
165
+
166
+ typealias Input = Upstream.Output
167
+
168
+ typealias Failure = Upstream.Failure
169
+
170
+ private let downstream: Downstream
171
+
172
+ private let nextPartialResult: (Downstream.Input, Input) -> Downstream.Input
173
+
174
+ private var result: Downstream.Input
175
+
176
+ fileprivate init(
177
+ downstream: Downstream,
178
+ initialResult: Downstream.Input,
179
+ nextPartialResult: @escaping (Downstream.Input, Input) -> Downstream.Input
180
+ )
181
+ {
182
+ self.downstream = downstream
183
+ self.result = initialResult
184
+ self.nextPartialResult = nextPartialResult
185
+ }
186
+
187
+ func receive(subscription: Subscription) {
188
+ downstream.receive(subscription: subscription)
189
+ }
190
+
191
+ func receive(_ input: Input) -> Subscribers.Demand {
192
+ result = nextPartialResult(result, input)
193
+ return downstream.receive(result)
194
+ }
195
+
196
+ func receive(completion: Subscribers.Completion<Failure>) {
197
+ downstream.receive(completion: completion)
198
+ }
199
+
200
+ var description: String { return "Scan" }
201
+
202
+ var customMirror: Mirror {
203
+ let children: [Mirror.Child] = [
204
+ ("downstream", downstream),
205
+ ("result", result)
206
+ ]
207
+ return Mirror(self, children: children)
208
+ }
209
+
210
+ var playgroundDescription: Any { return description }
211
+ }
212
+ }
213
+
214
+ extension Publishers.TryScan {
215
+ private final class Inner<Downstream: Subscriber>
216
+ : Subscriber,
217
+ Subscription,
218
+ CustomStringConvertible,
219
+ CustomReflectable,
220
+ CustomPlaygroundDisplayConvertible
221
+ where Downstream.Failure == Error
222
+ {
223
+ // NOTE: this class has been audited for thread safety.
224
+
225
+ typealias Input = Upstream.Output
226
+
227
+ typealias Failure = Upstream.Failure
228
+
229
+ private let downstream: Downstream
230
+
231
+ private let nextPartialResult:
232
+ (Downstream.Input, Input) throws -> Downstream.Input
233
+
234
+ private var result: Downstream.Input
235
+
236
+ private var status = SubscriptionStatus.awaitingSubscription
237
+
238
+ private let lock = UnfairLock.allocate()
239
+
240
+ private var finished = false
241
+
242
+ fileprivate init(
243
+ downstream: Downstream,
244
+ initialResult: Downstream.Input,
245
+ nextPartialResult:
246
+ @escaping (Downstream.Input, Input) throws -> Downstream.Input
247
+ ) {
248
+ self.downstream = downstream
249
+ self.nextPartialResult = nextPartialResult
250
+ self.result = initialResult
251
+ }
252
+
253
+ deinit {
254
+ lock.deallocate()
255
+ }
256
+
257
+ func receive(subscription: Subscription) {
258
+ lock.lock()
259
+ guard case .awaitingSubscription = status else {
260
+ lock.unlock()
261
+ subscription.cancel()
262
+ return
263
+ }
264
+ status = .subscribed(subscription)
265
+ lock.unlock()
266
+ downstream.receive(subscription: self)
267
+ }
268
+
269
+ func receive(_ input: Input) -> Subscribers.Demand {
270
+ do {
271
+ result = try nextPartialResult(result, input)
272
+ return downstream.receive(result)
273
+ } catch {
274
+ lock.lock()
275
+ guard case let .subscribed(subscription) = status else {
276
+ lock.unlock()
277
+ return .none
278
+ }
279
+ status = .terminal
280
+ lock.unlock()
281
+ subscription.cancel()
282
+ downstream.receive(completion: .failure(error))
283
+ return .none
284
+ }
285
+ }
286
+
287
+ func receive(completion: Subscribers.Completion<Upstream.Failure>) {
288
+ // Combine doesn't use locking in this method!
289
+ guard case .subscribed = status else {
290
+ return
291
+ }
292
+ downstream.receive(completion: completion.eraseError())
293
+ }
294
+
295
+ func request(_ demand: Subscribers.Demand) {
296
+ lock.lock()
297
+ guard case let .subscribed(subscription) = status else {
298
+ lock.unlock()
299
+ return
300
+ }
301
+ lock.unlock()
302
+ subscription.request(demand)
303
+ }
304
+
305
+ func cancel() {
306
+ lock.lock()
307
+ guard case let .subscribed(subscription) = status else {
308
+ lock.unlock()
309
+ return
310
+ }
311
+ status = .terminal
312
+ lock.unlock()
313
+ subscription.cancel()
314
+ }
315
+
316
+ var description: String { return "TryScan" }
317
+
318
+ var customMirror: Mirror {
319
+ lock.lock()
320
+ defer { lock.unlock() }
321
+ let children: [Mirror.Child] = [
322
+ ("downstream", downstream),
323
+ ("status", status),
324
+ ("result", result)
325
+ ]
326
+ return Mirror(self, children: children)
327
+ }
328
+
329
+ var playgroundDescription: Any { return description }
330
+ }
331
+ }