@swiftbrowser/swift 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/Package.swift +200 -9
  2. package/README.md +7 -9
  3. package/Sources/AVFoundation/AVFoundation.swift +131 -0
  4. package/Sources/AVFoundation/Asset.swift +487 -0
  5. package/Sources/AVFoundation/AudioSession.swift +144 -0
  6. package/Sources/AVFoundation/CMTime.swift +303 -0
  7. package/Sources/AVFoundation/Capture.swift +688 -0
  8. package/Sources/AVFoundation/Player.swift +749 -0
  9. package/Sources/AVFoundation/PlayerView.swift +117 -0
  10. package/Sources/AVKit/AVKit.swift +132 -0
  11. package/Sources/Accelerate/Accelerate.swift +122 -0
  12. package/Sources/AppIntents/AppIntents.swift +144 -0
  13. package/Sources/AppIntents/Parameters.swift +220 -0
  14. package/Sources/AppIntents/Shortcuts.swift +159 -0
  15. package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
  16. package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
  17. package/Sources/AuthenticationServices/Authorization.swift +251 -0
  18. package/Sources/Charts/Charts.swift +0 -4
  19. package/Sources/Combine/AnyCancellable.swift +65 -0
  20. package/Sources/Combine/AnyPublisher.swift +148 -0
  21. package/Sources/Combine/AnySubscriber.swift +230 -0
  22. package/Sources/Combine/Cancellable.swift +35 -0
  23. package/Sources/Combine/Codable.swift +29 -0
  24. package/Sources/Combine/CombineIdentifier.swift +45 -0
  25. package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
  26. package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
  27. package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
  28. package/Sources/Combine/CurrentValueSubject.swift +252 -0
  29. package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
  30. package/Sources/Combine/Future.swift +228 -0
  31. package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
  32. package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
  33. package/Sources/Combine/Helpers/ConduitList.swift +59 -0
  34. package/Sources/Combine/Helpers/DebugHook.swift +177 -0
  35. package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
  36. package/Sources/Combine/Helpers/Locking.swift +30 -0
  37. package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
  38. package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
  39. package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
  40. package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
  41. package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
  42. package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
  43. package/Sources/Combine/Helpers/Utils.swift +30 -0
  44. package/Sources/Combine/Helpers/Violations.swift +33 -0
  45. package/Sources/Combine/ImmediateScheduler.swift +178 -0
  46. package/Sources/Combine/LICENSE +21 -0
  47. package/Sources/Combine/NotificationPublisher.swift +48 -0
  48. package/Sources/Combine/ObjectWillChange.swift +46 -0
  49. package/Sources/Combine/PassthroughSubject.swift +222 -0
  50. package/Sources/Combine/Publisher+Subscribe.swift +53 -0
  51. package/Sources/Combine/Publishers/Deferred.swift +48 -0
  52. package/Sources/Combine/Publishers/Empty.swift +54 -0
  53. package/Sources/Combine/Publishers/Fail.swift +42 -0
  54. package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
  55. package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
  56. package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
  57. package/Sources/Combine/Publishers/Just.swift +313 -0
  58. package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
  59. package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
  60. package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
  61. package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
  62. package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
  63. package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
  64. package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
  65. package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
  66. package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
  67. package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
  68. package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
  69. package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
  70. package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
  71. package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
  72. package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
  73. package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
  74. package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
  75. package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
  76. package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
  77. package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
  78. package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
  79. package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
  80. package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
  81. package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
  82. package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
  83. package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
  84. package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
  85. package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
  86. package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
  87. package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
  88. package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
  89. package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
  90. package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
  91. package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
  92. package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
  93. package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
  94. package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
  95. package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
  96. package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
  97. package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
  98. package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
  99. package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
  100. package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
  101. package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
  102. package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
  103. package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
  104. package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
  105. package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
  106. package/Sources/Combine/Publishers/Publishers.swift +13 -0
  107. package/Sources/Combine/Publishers/Record.swift +237 -0
  108. package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
  109. package/Sources/Combine/Result.swift +46 -0
  110. package/Sources/Combine/Scheduler.swift +89 -0
  111. package/Sources/Combine/Schedulers.swift +211 -0
  112. package/Sources/Combine/Subject+Void.swift +17 -0
  113. package/Sources/Combine/Subscriber+Void.swift +20 -0
  114. package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
  115. package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
  116. package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
  117. package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
  118. package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
  119. package/Sources/Combine/Subscription.swift +22 -0
  120. package/Sources/Combine/Subscriptions.swift +42 -0
  121. package/Sources/Combine/SwiftUIObservation.swift +10 -0
  122. package/Sources/Combine/_Introspection.swift +107 -0
  123. package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
  124. package/Sources/Compression/Compression.swift +365 -0
  125. package/Sources/Compression/Deflate.swift +407 -0
  126. package/Sources/Compression/Zlib.swift +179 -0
  127. package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
  128. package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
  129. package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
  130. package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
  131. package/Sources/CoreImage/CIColor.swift +41 -0
  132. package/Sources/CoreImage/CIContext.swift +31 -0
  133. package/Sources/CoreImage/CIDetector.swift +57 -0
  134. package/Sources/CoreImage/CIFilter.swift +243 -0
  135. package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
  136. package/Sources/CoreImage/CIImage.swift +162 -0
  137. package/Sources/CoreImage/QRCode.swift +393 -0
  138. package/Sources/CoreLocation/Coordinate.swift +30 -0
  139. package/Sources/CoreLocation/Location.swift +65 -0
  140. package/Sources/CoreML/Evaluation.swift +414 -0
  141. package/Sources/CoreML/FeatureValue.swift +266 -0
  142. package/Sources/CoreML/Model.swift +269 -0
  143. package/Sources/CoreML/MultiArray.swift +92 -0
  144. package/Sources/CoreML/Specification.swift +233 -0
  145. package/Sources/CoreText/CoreText.swift +64 -0
  146. package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
  147. package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
  148. package/Sources/CryptoKit/CryptoKit.swift +375 -0
  149. package/Sources/CryptoKit/Curve25519.swift +317 -0
  150. package/Sources/CryptoKit/P256.swift +321 -0
  151. package/Sources/FoundationBridge/AppStorage.swift +165 -0
  152. package/Sources/FoundationBridge/AssetResources.swift +90 -0
  153. package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
  154. package/Sources/FoundationBridge/AsyncImage.swift +116 -0
  155. package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
  156. package/Sources/{_FoundationCommon → FoundationBridge}/Bundle.swift +41 -4
  157. package/Sources/FoundationBridge/CombineExports.swift +8 -0
  158. package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
  159. package/Sources/FoundationBridge/Dispatch.swift +458 -0
  160. package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
  161. package/Sources/FoundationBridge/FileImporter.swift +128 -0
  162. package/Sources/FoundationBridge/FileSystem.swift +68 -0
  163. package/Sources/FoundationBridge/FoundationBridge.swift +24 -72
  164. package/Sources/FoundationBridge/HostResolution.swift +31 -0
  165. package/Sources/FoundationBridge/ItemProvider.swift +655 -0
  166. package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
  167. package/Sources/FoundationBridge/Links.swift +127 -0
  168. package/Sources/FoundationBridge/ListFormatter.swift +32 -0
  169. package/Sources/FoundationBridge/Localization.swift +149 -0
  170. package/Sources/FoundationBridge/Locks.swift +50 -0
  171. package/Sources/FoundationBridge/Markdown.swift +527 -0
  172. package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
  173. package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
  174. package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
  175. package/Sources/FoundationBridge/Operation.swift +195 -0
  176. package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
  177. package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
  178. package/Sources/FoundationBridge/SceneStorage.swift +78 -0
  179. package/Sources/FoundationBridge/SecurityExports.swift +8 -0
  180. package/Sources/FoundationBridge/Selector.swift +226 -0
  181. package/Sources/FoundationBridge/StringComparators.swift +17 -0
  182. package/Sources/FoundationBridge/Table.swift +211 -0
  183. package/Sources/FoundationBridge/TextAttributes.swift +42 -0
  184. package/Sources/FoundationBridge/Timer.swift +6 -1
  185. package/Sources/FoundationBridge/URLSession.swift +718 -0
  186. package/Sources/{_FoundationCommon → FoundationBridge}/UserDefaults.swift +17 -4
  187. package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
  188. package/Sources/FoundationBridge/WebSocket.swift +187 -0
  189. package/Sources/FoundationModels/FoundationModels.swift +1098 -0
  190. package/Sources/ImageIO/GIF.swift +72 -0
  191. package/Sources/ImageIO/ImageIO.swift +248 -0
  192. package/Sources/ImageIO/ImageTypes.swift +28 -0
  193. package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
  194. package/Sources/LocalAuthentication/LAContext.swift +86 -0
  195. package/Sources/MapKit/Geometry.swift +223 -0
  196. package/Sources/MapKit/Map.swift +638 -0
  197. package/Sources/MapKit/MapView.swift +229 -0
  198. package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
  199. package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
  200. package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
  201. package/Sources/OSLog/OSLog.swift +6 -0
  202. package/Sources/Photos/Photos.swift +572 -0
  203. package/Sources/PhotosUI/PhotosPicker.swift +248 -0
  204. package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
  205. package/Sources/QuickLook/QuickLook.swift +168 -0
  206. package/Sources/SafariServices/SafariServices.swift +106 -0
  207. package/Sources/Security/Security.swift +332 -0
  208. package/Sources/StoreKit/AppStore.swift +207 -0
  209. package/Sources/StoreKit/Products.swift +280 -0
  210. package/Sources/StoreKit/RequestReview.swift +28 -0
  211. package/Sources/StoreKit/StoreKit1.swift +486 -0
  212. package/Sources/StoreKit/StoreViews.swift +428 -0
  213. package/Sources/StoreKit/Transactions.swift +197 -0
  214. package/Sources/SwiftData/Macros.swift +58 -0
  215. package/Sources/SwiftData/ModelActor.swift +38 -0
  216. package/Sources/SwiftData/ModelContainer.swift +129 -0
  217. package/Sources/SwiftData/ModelContext.swift +451 -0
  218. package/Sources/SwiftData/PersistentModel.swift +238 -0
  219. package/Sources/SwiftData/Properties.swift +261 -0
  220. package/Sources/SwiftData/Query.swift +256 -0
  221. package/Sources/SwiftData/Schema.swift +192 -0
  222. package/Sources/SwiftData/Store.swift +146 -0
  223. package/Sources/SwiftData/StringPredicates.swift +125 -0
  224. package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
  225. package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
  226. package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
  227. package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
  228. package/Sources/SwiftDataMacros/Plugin.swift +18 -0
  229. package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
  230. package/Sources/SwiftUI/API/Accessibility.swift +55 -6
  231. package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
  232. package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
  233. package/Sources/SwiftUI/API/Alert.swift +1 -1
  234. package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
  235. package/Sources/SwiftUI/API/Animation.swift +37 -5
  236. package/Sources/SwiftUI/API/App.swift +31 -1
  237. package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
  238. package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
  239. package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
  240. package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
  241. package/Sources/SwiftUI/API/Canvas.swift +337 -0
  242. package/Sources/SwiftUI/API/Color.swift +104 -28
  243. package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
  244. package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
  245. package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
  246. package/Sources/SwiftUI/API/Commands.swift +106 -0
  247. package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
  248. package/Sources/SwiftUI/API/ContentShape.swift +33 -0
  249. package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
  250. package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
  251. package/Sources/SwiftUI/API/Controls.swift +59 -27
  252. package/Sources/SwiftUI/API/CustomLayout.swift +49 -10
  253. package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
  254. package/Sources/SwiftUI/API/Decorations.swift +1 -1
  255. package/Sources/SwiftUI/API/EditMode.swift +25 -82
  256. package/Sources/SwiftUI/API/Effects.swift +105 -7
  257. package/Sources/SwiftUI/API/Entry.swift +8 -0
  258. package/Sources/SwiftUI/API/Environment.swift +93 -9
  259. package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
  260. package/Sources/SwiftUI/API/Focus.swift +11 -3
  261. package/Sources/SwiftUI/API/Gauge.swift +3 -2
  262. package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
  263. package/Sources/SwiftUI/API/GeometryReader.swift +13 -2
  264. package/Sources/SwiftUI/API/GestureState.swift +65 -0
  265. package/Sources/SwiftUI/API/Gestures.swift +1 -1
  266. package/Sources/SwiftUI/API/Glass.swift +127 -0
  267. package/Sources/SwiftUI/API/Grid.swift +1 -1
  268. package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
  269. package/Sources/SwiftUI/API/KeyPress.swift +54 -0
  270. package/Sources/SwiftUI/API/LabelStyle.swift +13 -6
  271. package/Sources/SwiftUI/API/Layout.swift +67 -12
  272. package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
  273. package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
  274. package/Sources/SwiftUI/API/Lists.swift +61 -6
  275. package/Sources/SwiftUI/API/Menu.swift +8 -1
  276. package/Sources/SwiftUI/API/Modifiers.swift +80 -10
  277. package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
  278. package/Sources/SwiftUI/API/Namespace.swift +44 -0
  279. package/Sources/SwiftUI/API/Navigation.swift +24 -9
  280. package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
  281. package/Sources/SwiftUI/API/ObservableObject.swift +16 -2
  282. package/Sources/SwiftUI/API/Path.swift +543 -0
  283. package/Sources/SwiftUI/API/Phase8Controls.swift +48 -31
  284. package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
  285. package/Sources/SwiftUI/API/Picker.swift +11 -2
  286. package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
  287. package/Sources/SwiftUI/API/Popover.swift +41 -0
  288. package/Sources/SwiftUI/API/Preferences.swift +262 -0
  289. package/Sources/SwiftUI/API/Presentation.swift +17 -4
  290. package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
  291. package/Sources/SwiftUI/API/Primitives.swift +164 -37
  292. package/Sources/SwiftUI/API/Publishers.swift +4 -4
  293. package/Sources/SwiftUI/API/Redaction.swift +75 -0
  294. package/Sources/SwiftUI/API/RowActions.swift +3 -2
  295. package/Sources/SwiftUI/API/Scenes.swift +131 -0
  296. package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
  297. package/Sources/SwiftUI/API/ScrollTargets.swift +3 -3
  298. package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
  299. package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
  300. package/Sources/SwiftUI/API/Shape.swift +214 -0
  301. package/Sources/SwiftUI/API/ShapeStyle.swift +105 -7
  302. package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
  303. package/Sources/SwiftUI/API/Sharing.swift +193 -0
  304. package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
  305. package/Sources/SwiftUI/API/State.swift +18 -1
  306. package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
  307. package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
  308. package/Sources/SwiftUI/API/TabContent.swift +841 -0
  309. package/Sources/SwiftUI/API/Table.swift +382 -0
  310. package/Sources/SwiftUI/API/Tabs.swift +148 -4
  311. package/Sources/SwiftUI/API/Tasks.swift +2 -2
  312. package/Sources/SwiftUI/API/Text.swift +386 -0
  313. package/Sources/SwiftUI/API/TextDates.swift +61 -0
  314. package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
  315. package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
  316. package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
  317. package/Sources/SwiftUI/API/Toolbar.swift +52 -16
  318. package/Sources/SwiftUI/API/Transfer.swift +145 -0
  319. package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
  320. package/Sources/SwiftUI/API/Video.swift +64 -0
  321. package/Sources/SwiftUI/API/View.swift +10 -2
  322. package/Sources/SwiftUI/API/ViewModifier.swift +4 -1
  323. package/Sources/SwiftUI/API/VisualEffect.swift +74 -1
  324. package/Sources/SwiftUI/API/Windows.swift +25 -0
  325. package/Sources/SwiftUI/Charts/Axis.swift +7 -1
  326. package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
  327. package/Sources/SwiftUI/Charts/Chart.swift +17 -3
  328. package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
  329. package/Sources/SwiftUI/Localization/Localization.swift +498 -0
  330. package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
  331. package/Sources/SwiftUI/Runtime/Executor.swift +2 -0
  332. package/Sources/SwiftUI/Runtime/Exports.swift +37 -1
  333. package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
  334. package/Sources/SwiftUI/Runtime/JSON.swift +76 -4
  335. package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
  336. package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
  337. package/Sources/SwiftUI/Runtime/Ops.swift +58 -12
  338. package/Sources/SwiftUI/Runtime/Reconciler.swift +10 -1
  339. package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
  340. package/Sources/SwiftUI/Runtime/Runtime.swift +977 -198
  341. package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
  342. package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
  343. package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
  344. package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
  345. package/Sources/Symbols/Symbols.swift +25 -0
  346. package/Sources/Translation/Translation.swift +423 -0
  347. package/Sources/UIKit/Activity.swift +213 -0
  348. package/Sources/UIKit/Alerts.swift +69 -0
  349. package/Sources/UIKit/AppDelegate.swift +222 -0
  350. package/Sources/UIKit/Appearance.swift +84 -0
  351. package/Sources/UIKit/ColorConversions.swift +70 -0
  352. package/Sources/UIKit/Controls.swift +225 -0
  353. package/Sources/UIKit/Device.swift +200 -0
  354. package/Sources/UIKit/Feedback.swift +65 -0
  355. package/Sources/UIKit/Font.swift +307 -0
  356. package/Sources/UIKit/Graphics.swift +204 -0
  357. package/Sources/UIKit/HostingController.swift +185 -0
  358. package/Sources/UIKit/Identity.swift +24 -0
  359. package/Sources/UIKit/Introspectable.swift +510 -0
  360. package/Sources/UIKit/Pasteboard.swift +363 -0
  361. package/Sources/UIKit/PhotoAlbum.swift +81 -0
  362. package/Sources/UIKit/RemoteNotifications.swift +15 -0
  363. package/Sources/UIKit/Representable.swift +288 -0
  364. package/Sources/UIKit/SafeArea.swift +12 -0
  365. package/Sources/UIKit/SceneDelegates.swift +132 -0
  366. package/Sources/UIKit/Scenes.swift +40 -0
  367. package/Sources/UIKit/ScrollView.swift +157 -0
  368. package/Sources/UIKit/ShortcutItems.swift +67 -0
  369. package/Sources/UIKit/SymbolConfiguration.swift +124 -0
  370. package/Sources/UIKit/TargetAction.swift +123 -0
  371. package/Sources/UIKit/TextPaste.swift +161 -0
  372. package/Sources/UIKit/TextView.swift +538 -0
  373. package/Sources/UIKit/UIKit.swift +292 -0
  374. package/Sources/UIKit/UIView.swift +855 -0
  375. package/Sources/UIKit/ViewTranslation.swift +311 -0
  376. package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
  377. package/Sources/UserNotifications/Content.swift +370 -0
  378. package/Sources/UserNotifications/NotificationCenter.swift +309 -0
  379. package/Sources/WeatherKit/WeatherKit.swift +228 -0
  380. package/Sources/WebKit/WebKit.swift +245 -0
  381. package/Sources/os/os.swift +376 -0
  382. package/Sources/zlib/zlib.swift +6 -0
  383. package/index.d.ts +1 -1
  384. package/index.mjs +2 -2
  385. package/manifest.d.mts +2 -0
  386. package/manifest.mjs +39 -0
  387. package/package.json +5 -3
  388. package/sync-sources.mjs +21 -7
  389. package/Sources/FoundationLite/Common.swift +0 -3
  390. package/Sources/FoundationLite/FoundationLite.swift +0 -171
  391. package/Sources/FoundationLite/Interaction.swift +0 -146
  392. package/Sources/FoundationLite/Timer.swift +0 -48
  393. package/Sources/_FoundationCommon/_FoundationCommon.swift +0 -10
@@ -0,0 +1,673 @@
1
+ // ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
2
+ // ┃ ┃
3
+ // ┃ Auto-generated from GYB template. DO NOT EDIT! ┃
4
+ // ┃ ┃
5
+ // ┃ ┃
6
+ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
7
+ //
8
+ // Publishers.Catch.swift
9
+ //
10
+ //
11
+ // Created by Sergej Jaskiewicz on 25.12.2019.
12
+ //
13
+
14
+ extension Publisher {
15
+
16
+ /// Handles errors from an upstream publisher by replacing it with another publisher.
17
+ ///
18
+ /// Use `catch()` to replace an error from an upstream publisher with a new publisher.
19
+ ///
20
+ /// In the example below, the `catch()` operator handles the `SimpleError` thrown by
21
+ /// the upstream publisher by replacing the error with a `Just` publisher. This
22
+ /// continues the stream by publishing a single value and completing normally.
23
+ ///
24
+ /// struct SimpleError: Error {}
25
+ /// let numbers = [5, 4, 3, 2, 1, 0, 9, 8, 7, 6]
26
+ /// cancellable = numbers.publisher
27
+ /// .tryLast(where: {
28
+ /// guard $0 != 0 else { throw SimpleError() }
29
+ /// return true
30
+ /// })
31
+ /// .catch { error in
32
+ /// Just(-1)
33
+ /// }
34
+ /// .sink { print("\($0)") }
35
+ /// // Prints: -1
36
+ ///
37
+ /// Backpressure note: This publisher passes through `request` and `cancel` to
38
+ /// the upstream. After receiving an error, the publisher sends sends any unfulfilled
39
+ /// demand to the new `Publisher`.
40
+ ///
41
+ /// - SeeAlso: `replaceError`
42
+ /// - Parameter handler: A closure that accepts the upstream failure as input and
43
+ /// returns a publisher to replace the upstream publisher.
44
+ /// - Returns: A publisher that handles errors from an upstream publisher by replacing
45
+ /// the failed publisher with another publisher.
46
+ public func `catch`<NewPublisher: Publisher>(
47
+ _ handler: @escaping (Failure) -> NewPublisher
48
+ ) -> Publishers.Catch<Self, NewPublisher>
49
+ where NewPublisher.Output == Output
50
+ {
51
+ return .init(upstream: self, handler: handler)
52
+ }
53
+
54
+ /// Handles errors from an upstream publisher by either replacing it with another
55
+ /// publisher or throwing a new error.
56
+ ///
57
+ /// Use `tryCatch(_:)` to decide how to handle from an upstream publisher by either
58
+ /// replacing the publisher with a new publisher, or throwing a new error.
59
+ ///
60
+ /// In the example below, an array publisher emits values that a `tryMap(_:)` operator
61
+ /// evaluates to ensure the values are greater than zero. If the values aren’t greater
62
+ /// than zero, the operator throws an error to the downstream subscriber to let it
63
+ /// know there was a problem. The subscriber, `tryCatch(_:)`, replaces the error with
64
+ /// a new publisher using ``Just`` to publish a final value before the stream ends
65
+ /// normally.
66
+ ///
67
+ /// enum SimpleError: Error { case error }
68
+ /// var numbers = [5, 4, 3, 2, 1, -1, 7, 8, 9, 10]
69
+ ///
70
+ /// cancellable = numbers.publisher
71
+ /// .tryMap { v in
72
+ /// if v > 0 {
73
+ /// return v
74
+ /// } else {
75
+ /// throw SimpleError.error
76
+ /// }
77
+ /// }
78
+ /// .tryCatch { error in
79
+ /// Just(0) // Send a final value before completing normally.
80
+ /// // Alternatively, throw a new error to terminate the stream.
81
+ /// }
82
+ /// .sink(receiveCompletion: { print ("Completion: \($0).") },
83
+ /// receiveValue: { print ("Received \($0).") })
84
+ /// // Received 5.
85
+ /// // Received 4.
86
+ /// // Received 3.
87
+ /// // Received 2.
88
+ /// // Received 1.
89
+ /// // Received 0.
90
+ /// // Completion: finished.
91
+ ///
92
+ /// - Parameter handler: A throwing closure that accepts the upstream failure as
93
+ /// input. This closure can either replace the upstream publisher with a new one,
94
+ /// or throw a new error to the downstream subscriber.
95
+ /// - Returns: A publisher that handles errors from an upstream publisher by replacing
96
+ /// the failed publisher with another publisher, or an error.
97
+ public func tryCatch<NewPublisher: Publisher>(
98
+ _ handler: @escaping (Failure) throws -> NewPublisher
99
+ ) -> Publishers.TryCatch<Self, NewPublisher>
100
+ where NewPublisher.Output == Output
101
+ {
102
+ return .init(upstream: self, handler: handler)
103
+ }
104
+ }
105
+
106
+ extension Publishers {
107
+
108
+ /// A publisher that handles errors from an upstream publisher by replacing the failed
109
+ /// publisher with another publisher.
110
+ public struct Catch<Upstream: Publisher, NewPublisher: Publisher>: Publisher
111
+ where Upstream.Output == NewPublisher.Output
112
+ {
113
+ public typealias Output = Upstream.Output
114
+
115
+ public typealias Failure = NewPublisher.Failure
116
+
117
+ /// The publisher that this publisher receives elements from.
118
+ public let upstream: Upstream
119
+
120
+ /// A closure that accepts the upstream failure as input and returns a publisher
121
+ /// to replace the upstream publisher.
122
+ public let handler: (Upstream.Failure) -> NewPublisher
123
+
124
+ /// Creates a publisher that handles errors from an upstream publisher by
125
+ /// replacing the failed publisher with another publisher.
126
+ ///
127
+ /// - Parameters:
128
+ /// - upstream: The publisher that this publisher receives elements from.
129
+ /// - handler: A closure that accepts the upstream failure as input and returns
130
+ /// a publisher to replace the upstream publisher.
131
+ public init(upstream: Upstream,
132
+ handler: @escaping (Upstream.Failure) -> NewPublisher) {
133
+ self.upstream = upstream
134
+ self.handler = handler
135
+ }
136
+
137
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
138
+ where Downstream.Input == Output, Downstream.Failure == Failure
139
+ {
140
+ let inner = Inner(downstream: subscriber, handler: handler)
141
+ let uncaughtS = Inner.UncaughtS(inner: inner)
142
+ upstream.subscribe(uncaughtS)
143
+ }
144
+ }
145
+
146
+ /// A publisher that handles errors from an upstream publisher by replacing
147
+ /// the failed publisher with another publisher or producing a new error.
148
+ ///
149
+ /// Because this publisher’s handler can throw an error, `Publishers.TryCatch` defines
150
+ /// its `Failure` type as `Error`. This is different from `Publishers.Catch`, which
151
+ /// gets its failure type from the replacement publisher.
152
+ public struct TryCatch<Upstream: Publisher, NewPublisher: Publisher>: Publisher
153
+ where Upstream.Output == NewPublisher.Output
154
+ {
155
+ public typealias Output = Upstream.Output
156
+
157
+ public typealias Failure = Error
158
+
159
+ /// The publisher that this publisher receives elements from.
160
+ public let upstream: Upstream
161
+
162
+ /// A closure that accepts the upstream failure as input and either returns
163
+ /// a publisher to replace the upstream publisher or throws an error.
164
+ public let handler: (Upstream.Failure) throws -> NewPublisher
165
+
166
+ /// Creates a publisher that handles errors from an upstream publisher by
167
+ /// replacing the failed publisher with another publisher or by throwing an error.
168
+ ///
169
+ /// - Parameters:
170
+ /// - upstream: The publisher that this publisher receives elements from.
171
+ /// - handler: A closure that accepts the upstream failure as input and either
172
+ /// returns a publisher to replace the upstream publisher. If this closure
173
+ /// throws an error, the publisher terminates with the thrown error.
174
+ public init(upstream: Upstream,
175
+ handler: @escaping (Upstream.Failure) throws -> NewPublisher) {
176
+ self.upstream = upstream
177
+ self.handler = handler
178
+ }
179
+
180
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
181
+ where Downstream.Input == Output, Downstream.Failure == Failure
182
+ {
183
+ let inner = Inner(downstream: subscriber, handler: handler)
184
+ let uncaughtS = Inner.UncaughtS(inner: inner)
185
+ upstream.subscribe(uncaughtS)
186
+ }
187
+ }
188
+ }
189
+
190
+ extension Publishers.Catch {
191
+ private final class Inner<Downstream: Subscriber>
192
+ : Subscription,
193
+ CustomStringConvertible,
194
+ CustomReflectable,
195
+ CustomPlaygroundDisplayConvertible
196
+ where Downstream.Input == Upstream.Output,
197
+ Downstream.Failure == NewPublisher.Failure
198
+ {
199
+ struct UncaughtS: Subscriber,
200
+ CustomStringConvertible,
201
+ CustomReflectable,
202
+ CustomPlaygroundDisplayConvertible
203
+ {
204
+ typealias Input = Upstream.Output
205
+
206
+ typealias Failure = Upstream.Failure
207
+
208
+ let inner: Inner
209
+
210
+ var combineIdentifier: CombineIdentifier { return inner.combineIdentifier }
211
+
212
+ func receive(subscription: Subscription) {
213
+ inner.receivePre(subscription: subscription)
214
+ }
215
+
216
+ func receive(_ input: Input) -> Subscribers.Demand {
217
+ return inner.receivePre(input)
218
+ }
219
+
220
+ func receive(completion: Subscribers.Completion<Failure>) {
221
+ return inner.receivePre(completion: completion)
222
+ }
223
+
224
+ var description: String { return inner.description }
225
+
226
+ var customMirror: Mirror { return inner.customMirror }
227
+
228
+ var playgroundDescription: Any { return description }
229
+ }
230
+
231
+ struct CaughtS: Subscriber,
232
+ CustomStringConvertible,
233
+ CustomReflectable,
234
+ CustomPlaygroundDisplayConvertible
235
+ {
236
+ typealias Input = NewPublisher.Output
237
+
238
+ typealias Failure = NewPublisher.Failure
239
+
240
+ let inner: Inner
241
+
242
+ var combineIdentifier: CombineIdentifier { return inner.combineIdentifier }
243
+
244
+ func receive(subscription: Subscription) {
245
+ inner.receivePost(subscription: subscription)
246
+ }
247
+
248
+ func receive(_ input: Input) -> Subscribers.Demand {
249
+ return inner.receivePost(input)
250
+ }
251
+
252
+ func receive(completion: Subscribers.Completion<Failure>) {
253
+ inner.receivePost(completion: completion)
254
+ }
255
+
256
+ var description: String { return inner.description }
257
+
258
+ var customMirror: Mirror { return inner.customMirror }
259
+
260
+ var playgroundDescription: Any { return description }
261
+ }
262
+
263
+ private enum State {
264
+ case pendingPre
265
+ case pre(Subscription)
266
+ case pendingPost
267
+ case post(Subscription)
268
+ case cancelled
269
+ }
270
+
271
+ private let lock = UnfairLock.allocate()
272
+
273
+ private var demand = Subscribers.Demand.none
274
+
275
+ private var state = State.pendingPre
276
+
277
+ private let downstream: Downstream
278
+
279
+ private let handler: (Upstream.Failure) -> NewPublisher
280
+
281
+ init(downstream: Downstream,
282
+ handler: @escaping (Upstream.Failure) -> NewPublisher) {
283
+ self.downstream = downstream
284
+ self.handler = handler
285
+ }
286
+
287
+ deinit {
288
+ lock.deallocate()
289
+ }
290
+
291
+ func receivePre(subscription: Subscription) {
292
+ lock.lock()
293
+ guard case .pendingPre = state else {
294
+ lock.unlock()
295
+ subscription.cancel()
296
+ return
297
+ }
298
+ state = .pre(subscription)
299
+ lock.unlock()
300
+ downstream.receive(subscription: self)
301
+ }
302
+
303
+ func receivePre(_ input: Upstream.Output) -> Subscribers.Demand {
304
+ lock.lock()
305
+ demand -= 1
306
+ lock.unlock()
307
+ let newDemand = downstream.receive(input)
308
+ lock.lock()
309
+ demand += newDemand
310
+ lock.unlock()
311
+ return newDemand
312
+ }
313
+
314
+ func receivePre(completion: Subscribers.Completion<Upstream.Failure>) {
315
+ switch completion {
316
+ case .finished:
317
+ lock.lock()
318
+ switch state {
319
+ case .pre:
320
+ state = .cancelled
321
+ lock.unlock()
322
+ downstream.receive(completion: .finished)
323
+ case .pendingPre, .pendingPost, .post, .cancelled:
324
+ lock.unlock()
325
+ }
326
+ case .failure(let error):
327
+ lock.lock()
328
+ switch state {
329
+ case .pre:
330
+ state = .pendingPost
331
+ lock.unlock()
332
+ handler(error).subscribe(CaughtS(inner: self))
333
+ case .cancelled:
334
+ lock.unlock()
335
+ case .pendingPre, .post, .pendingPost:
336
+ completionBeforeSubscription()
337
+ }
338
+ }
339
+ }
340
+
341
+ func receivePost(subscription: Subscription) {
342
+ lock.lock()
343
+ guard case .pendingPost = state else {
344
+ lock.unlock()
345
+ subscription.cancel()
346
+ return
347
+ }
348
+ state = .post(subscription)
349
+ let demand = self.demand
350
+ lock.unlock()
351
+ if demand > 0 {
352
+ subscription.request(demand)
353
+ }
354
+ }
355
+
356
+ func receivePost(_ input: NewPublisher.Output) -> Subscribers.Demand {
357
+ return downstream.receive(input)
358
+ }
359
+
360
+ func receivePost(completion: Subscribers.Completion<NewPublisher.Failure>) {
361
+ lock.lock()
362
+ guard case .post = state else {
363
+ lock.unlock()
364
+ return
365
+ }
366
+ state = .cancelled
367
+ lock.unlock()
368
+ downstream.receive(completion: completion)
369
+ }
370
+
371
+ func request(_ demand: Subscribers.Demand) {
372
+ demand.assertNonZero()
373
+ lock.lock()
374
+ switch state {
375
+ case .pendingPre:
376
+ // The client is only able to call the `request` method after we've sent
377
+ // `self` downstream. We only do it in the `receivePre(subscription:)`
378
+ // method, after setting `state` to `pre`.
379
+ // After that `state` never becomes `pendingPre`.
380
+ requestBeforeSubscription()
381
+ case let .pre(subscription):
382
+ self.demand += demand
383
+ lock.unlock()
384
+ subscription.request(demand)
385
+ case .pendingPost:
386
+ self.demand += demand
387
+ lock.unlock()
388
+ case let .post(subscription):
389
+ lock.unlock()
390
+ subscription.request(demand)
391
+ case .cancelled:
392
+ lock.unlock()
393
+ }
394
+ }
395
+
396
+ func cancel() {
397
+ lock.lock()
398
+ switch state {
399
+ case let .pre(subscription), let .post(subscription):
400
+ state = .cancelled
401
+ lock.unlock()
402
+ subscription.cancel()
403
+ case .pendingPre, .pendingPost, .cancelled:
404
+ lock.unlock()
405
+ }
406
+ }
407
+
408
+ var description: String { return "Catch" }
409
+
410
+ var customMirror: Mirror {
411
+ let children: [Mirror.Child] = [
412
+ ("downstream", downstream),
413
+ ("demand", demand)
414
+ ]
415
+ return Mirror(self, children: children)
416
+ }
417
+
418
+ var playgroundDescription: Any { return description }
419
+ }
420
+ }
421
+
422
+ extension Publishers.TryCatch {
423
+ private final class Inner<Downstream: Subscriber>
424
+ : Subscription,
425
+ CustomStringConvertible,
426
+ CustomReflectable,
427
+ CustomPlaygroundDisplayConvertible
428
+ where Downstream.Input == Upstream.Output,
429
+ Downstream.Failure == Error
430
+ {
431
+ struct UncaughtS: Subscriber,
432
+ CustomStringConvertible,
433
+ CustomReflectable,
434
+ CustomPlaygroundDisplayConvertible
435
+ {
436
+ typealias Input = Upstream.Output
437
+
438
+ typealias Failure = Upstream.Failure
439
+
440
+ let inner: Inner
441
+
442
+ var combineIdentifier: CombineIdentifier { return inner.combineIdentifier }
443
+
444
+ func receive(subscription: Subscription) {
445
+ inner.receivePre(subscription: subscription)
446
+ }
447
+
448
+ func receive(_ input: Input) -> Subscribers.Demand {
449
+ return inner.receivePre(input)
450
+ }
451
+
452
+ func receive(completion: Subscribers.Completion<Failure>) {
453
+ return inner.receivePre(completion: completion)
454
+ }
455
+
456
+ var description: String { return inner.description }
457
+
458
+ var customMirror: Mirror { return inner.customMirror }
459
+
460
+ var playgroundDescription: Any { return description }
461
+ }
462
+
463
+ struct CaughtS: Subscriber,
464
+ CustomStringConvertible,
465
+ CustomReflectable,
466
+ CustomPlaygroundDisplayConvertible
467
+ {
468
+ typealias Input = NewPublisher.Output
469
+
470
+ typealias Failure = NewPublisher.Failure
471
+
472
+ let inner: Inner
473
+
474
+ var combineIdentifier: CombineIdentifier { return inner.combineIdentifier }
475
+
476
+ func receive(subscription: Subscription) {
477
+ inner.receivePost(subscription: subscription)
478
+ }
479
+
480
+ func receive(_ input: Input) -> Subscribers.Demand {
481
+ return inner.receivePost(input)
482
+ }
483
+
484
+ func receive(completion: Subscribers.Completion<Failure>) {
485
+ inner.receivePost(completion: completion)
486
+ }
487
+
488
+ var description: String { return inner.description }
489
+
490
+ var customMirror: Mirror { return inner.customMirror }
491
+
492
+ var playgroundDescription: Any { return description }
493
+ }
494
+
495
+ private enum State {
496
+ case pendingPre
497
+ case pre(Subscription)
498
+ case pendingPost
499
+ case post(Subscription)
500
+ case cancelled
501
+ }
502
+
503
+ private let lock = UnfairLock.allocate()
504
+
505
+ private var demand = Subscribers.Demand.none
506
+
507
+ private var state = State.pendingPre
508
+
509
+ private let downstream: Downstream
510
+
511
+ private let handler: (Upstream.Failure) throws -> NewPublisher
512
+
513
+ init(downstream: Downstream,
514
+ handler: @escaping (Upstream.Failure) throws -> NewPublisher) {
515
+ self.downstream = downstream
516
+ self.handler = handler
517
+ }
518
+
519
+ deinit {
520
+ lock.deallocate()
521
+ }
522
+
523
+ func receivePre(subscription: Subscription) {
524
+ lock.lock()
525
+ guard case .pendingPre = state else {
526
+ lock.unlock()
527
+ subscription.cancel()
528
+ return
529
+ }
530
+ state = .pre(subscription)
531
+ lock.unlock()
532
+ downstream.receive(subscription: self)
533
+ }
534
+
535
+ func receivePre(_ input: Upstream.Output) -> Subscribers.Demand {
536
+ lock.lock()
537
+ demand -= 1
538
+ lock.unlock()
539
+ let newDemand = downstream.receive(input)
540
+ lock.lock()
541
+ demand += newDemand
542
+ lock.unlock()
543
+ return newDemand
544
+ }
545
+
546
+ func receivePre(completion: Subscribers.Completion<Upstream.Failure>) {
547
+ switch completion {
548
+ case .finished:
549
+ lock.lock()
550
+ switch state {
551
+ case .pre:
552
+ state = .cancelled
553
+ lock.unlock()
554
+ downstream.receive(completion: .finished)
555
+ case .pendingPre, .pendingPost, .post, .cancelled:
556
+ lock.unlock()
557
+ }
558
+ case .failure(let error):
559
+ lock.lock()
560
+ switch state {
561
+ case .pre:
562
+ state = .pendingPost
563
+ lock.unlock()
564
+ do {
565
+ try handler(error).subscribe(CaughtS(inner: self))
566
+ } catch let anotherError {
567
+ lock.lock()
568
+ state = .cancelled
569
+ lock.unlock()
570
+ downstream.receive(completion: .failure(anotherError))
571
+ }
572
+ case .cancelled:
573
+ lock.unlock()
574
+ case .pendingPre, .post, .pendingPost:
575
+ completionBeforeSubscription()
576
+ }
577
+ }
578
+ }
579
+
580
+ func receivePost(subscription: Subscription) {
581
+ lock.lock()
582
+ guard case .pendingPost = state else {
583
+ lock.unlock()
584
+ subscription.cancel()
585
+ return
586
+ }
587
+ state = .post(subscription)
588
+ let demand = self.demand
589
+ lock.unlock()
590
+ if demand > 0 {
591
+ subscription.request(demand)
592
+ }
593
+ }
594
+
595
+ func receivePost(_ input: NewPublisher.Output) -> Subscribers.Demand {
596
+ return downstream.receive(input)
597
+ }
598
+
599
+ func receivePost(completion: Subscribers.Completion<NewPublisher.Failure>) {
600
+ lock.lock()
601
+ guard case .post = state else {
602
+ lock.unlock()
603
+ return
604
+ }
605
+ state = .cancelled
606
+ lock.unlock()
607
+ downstream.receive(completion: completion.eraseError())
608
+ }
609
+
610
+ func request(_ demand: Subscribers.Demand) {
611
+ demand.assertNonZero()
612
+ lock.lock()
613
+ switch state {
614
+ case .pendingPre:
615
+ // The client is only able to call the `request` method after we've sent
616
+ // `self` downstream. We only do it in the `receivePre(subscription:)`
617
+ // method, after setting `state` to `pre`.
618
+ // After that `state` never becomes `pendingPre`.
619
+ requestBeforeSubscription()
620
+ case let .pre(subscription):
621
+ self.demand += demand
622
+ lock.unlock()
623
+ subscription.request(demand)
624
+ case .pendingPost:
625
+ self.demand += demand
626
+ lock.unlock()
627
+ case let .post(subscription):
628
+ lock.unlock()
629
+ subscription.request(demand)
630
+ case .cancelled:
631
+ lock.unlock()
632
+ }
633
+ }
634
+
635
+ func cancel() {
636
+ lock.lock()
637
+ switch state {
638
+ case let .pre(subscription), let .post(subscription):
639
+ state = .cancelled
640
+ lock.unlock()
641
+ subscription.cancel()
642
+ case .pendingPre, .pendingPost, .cancelled:
643
+ lock.unlock()
644
+ }
645
+ }
646
+
647
+ var description: String { return "TryCatch" }
648
+
649
+ var customMirror: Mirror {
650
+ let children: [Mirror.Child] = [
651
+ ("downstream", downstream),
652
+ ("demand", demand)
653
+ ]
654
+ return Mirror(self, children: children)
655
+ }
656
+
657
+ var playgroundDescription: Any { return description }
658
+ }
659
+ }
660
+
661
+ private func completionBeforeSubscription(file: StaticString = #file,
662
+ line: UInt = #line) -> Never {
663
+ fatalError("Unexpected state: received completion but do not have subscription",
664
+ file: file,
665
+ line: line)
666
+ }
667
+
668
+ private func requestBeforeSubscription(file: StaticString = #file,
669
+ line: UInt = #line) -> Never {
670
+ fatalError("Unexpected state: request before subscription sent",
671
+ file: file,
672
+ line: line)
673
+ }