@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,332 @@
1
+ //
2
+ // Publishers.Debounce.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 17.12.2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Publishes elements only after a specified time interval elapses between events.
11
+ ///
12
+ /// Use the `debounce(for:scheduler:options:)` operator to control the number of
13
+ /// values and time between delivery of values from the upstream publisher. This
14
+ /// operator is useful to process bursty or high-volume event streams where you need
15
+ /// to reduce the number of values delivered to the downstream to a rate you specify.
16
+ ///
17
+ /// In this example, a `PassthroughSubject` publishes elements on a schedule defined
18
+ /// by the `bounces` array. The array is composed of tuples representing a value sent
19
+ /// by the `PassthroughSubject`, and a `TimeInterval` ranging from one-quarter second
20
+ /// up to 2 seconds that drives a delivery timer. As the queue builds, elements
21
+ /// arriving faster than one-half second `debounceInterval` are discarded, while
22
+ /// elements arriving at a rate slower than `debounceInterval` are passed through to
23
+ /// the `sink(receiveValue:)` operator.
24
+ ///
25
+ /// let bounces:[(Int,TimeInterval)] = [
26
+ /// (0, 0),
27
+ /// (1, 0.25), // 0.25s interval since last index
28
+ /// (2, 1), // 0.75s interval since last index
29
+ /// (3, 1.25), // 0.25s interval since last index
30
+ /// (4, 1.5), // 0.25s interval since last index
31
+ /// (5, 2) // 0.5s interval since last index
32
+ /// ]
33
+ ///
34
+ /// let subject = PassthroughSubject<Int, Never>()
35
+ /// cancellable = subject
36
+ /// .debounce(for: .seconds(0.5), scheduler: RunLoop.main)
37
+ /// .sink { index in
38
+ /// print ("Received index \(index)")
39
+ /// }
40
+ ///
41
+ /// for bounce in bounces {
42
+ /// DispatchQueue.main.asyncAfter(deadline: .now() + bounce.1) {
43
+ /// subject.send(bounce.0)
44
+ /// }
45
+ /// }
46
+ ///
47
+ /// // Prints:
48
+ /// // Received index 1
49
+ /// // Received index 4
50
+ /// // Received index 5
51
+ ///
52
+ /// // Here is the event flow shown from the perspective of time, showing value
53
+ /// // delivery through the `debounce()` operator:
54
+ ///
55
+ /// // Time 0: Send index 0.
56
+ /// // Time 0.25: Send index 1. Index 0 was waiting and is discarded.
57
+ /// // Time 0.75: Debounce period ends, publish index 1.
58
+ /// // Time 1: Send index 2.
59
+ /// // Time 1.25: Send index 3. Index 2 was waiting and is discarded.
60
+ /// // Time 1.5: Send index 4. Index 3 was waiting and is discarded.
61
+ /// // Time 2: Debounce period ends, publish index 4. Also, send index 5.
62
+ /// // Time 2.5: Debounce period ends, publish index 5.
63
+ ///
64
+ /// - Parameters:
65
+ /// - dueTime: The time the publisher should wait before publishing an element.
66
+ /// - scheduler: The scheduler on which this publisher delivers elements
67
+ /// - options: Scheduler options that customize this publisher’s delivery
68
+ /// of elements.
69
+ /// - Returns: A publisher that publishes events only after a specified time elapses.
70
+ public func debounce<Context: Scheduler>(
71
+ for dueTime: Context.SchedulerTimeType.Stride,
72
+ scheduler: Context,
73
+ options: Context.SchedulerOptions? = nil
74
+ ) -> Publishers.Debounce<Self, Context> {
75
+ return .init(upstream: self,
76
+ dueTime: dueTime,
77
+ scheduler: scheduler,
78
+ options: options)
79
+ }
80
+ }
81
+
82
+ extension Publishers {
83
+
84
+ /// A publisher that publishes elements only after a specified time interval elapses
85
+ /// between events.
86
+ public struct Debounce<Upstream: Publisher, Context: Scheduler>: Publisher {
87
+
88
+ public typealias Output = Upstream.Output
89
+
90
+ public typealias Failure = Upstream.Failure
91
+
92
+ /// The publisher from which this publisher receives elements.
93
+ public let upstream: Upstream
94
+
95
+ /// The amount of time the publisher should wait before publishing an element.
96
+ public let dueTime: Context.SchedulerTimeType.Stride
97
+
98
+ /// The scheduler on which this publisher delivers elements.
99
+ public let scheduler: Context
100
+
101
+ /// Scheduler options that customize this publisher’s delivery of elements.
102
+ public let options: Context.SchedulerOptions?
103
+
104
+ public init(upstream: Upstream,
105
+ dueTime: Context.SchedulerTimeType.Stride,
106
+ scheduler: Context,
107
+ options: Context.SchedulerOptions?) {
108
+ self.upstream = upstream
109
+ self.dueTime = dueTime
110
+ self.scheduler = scheduler
111
+ self.options = options
112
+ }
113
+
114
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
115
+ where Downstream.Failure == Failure, Downstream.Input == Output
116
+ {
117
+ let inner = Inner(downstream: subscriber,
118
+ dueTime: dueTime,
119
+ scheduler: scheduler,
120
+ options: options)
121
+ upstream.subscribe(inner)
122
+ }
123
+ }
124
+ }
125
+
126
+ extension Publishers.Debounce {
127
+ private final class Inner<Downstream: Subscriber>
128
+ : Subscriber,
129
+ Subscription,
130
+ CustomStringConvertible,
131
+ CustomReflectable,
132
+ CustomPlaygroundDisplayConvertible
133
+ where Upstream.Output == Downstream.Input,
134
+ Upstream.Failure == Downstream.Failure
135
+ {
136
+ typealias Input = Upstream.Output
137
+
138
+ typealias Failure = Upstream.Failure
139
+
140
+ private typealias Generation = UInt64
141
+
142
+ private enum CancellerState {
143
+ case pending
144
+ case active(Cancellable)
145
+
146
+ fileprivate func cancel() {
147
+ if case let .active(cancellable) = self {
148
+ cancellable.cancel()
149
+ }
150
+ }
151
+ }
152
+
153
+ private let lock = UnfairLock.allocate()
154
+
155
+ private let downstreamLock = UnfairRecursiveLock.allocate()
156
+
157
+ private let downstream: Downstream
158
+
159
+ private let dueTime: Context.SchedulerTimeType.Stride
160
+
161
+ private let scheduler: Context
162
+
163
+ private let options: Context.SchedulerOptions?
164
+
165
+ private var state = SubscriptionStatus.awaitingSubscription
166
+
167
+ private var currentCancellers = [Generation : CancellerState]()
168
+
169
+ private var currentValue: Output?
170
+
171
+ private var currentGeneration: Generation = 0
172
+
173
+ private var downstreamDemand = Subscribers.Demand.none
174
+
175
+ init(downstream: Downstream,
176
+ dueTime: Context.SchedulerTimeType.Stride,
177
+ scheduler: Context,
178
+ options: Context.SchedulerOptions?) {
179
+ self.downstream = downstream
180
+ self.dueTime = dueTime
181
+ self.scheduler = scheduler
182
+ self.options = options
183
+ }
184
+
185
+ deinit {
186
+ lock.deallocate()
187
+ downstreamLock.deallocate()
188
+ }
189
+
190
+ func receive(subscription: Subscription) {
191
+ lock.lock()
192
+ guard case .awaitingSubscription = state else {
193
+ lock.unlock()
194
+ subscription.cancel()
195
+ return
196
+ }
197
+ state = .subscribed(subscription)
198
+ lock.unlock()
199
+ downstreamLock.lock()
200
+ downstream.receive(subscription: self)
201
+ downstreamLock.unlock()
202
+ subscription.request(.unlimited)
203
+ }
204
+
205
+ func receive(_ input: Input) -> Subscribers.Demand {
206
+ lock.lock()
207
+ guard case .subscribed = state else {
208
+ lock.unlock()
209
+ return .none
210
+ }
211
+ currentGeneration += 1
212
+ let generation = currentGeneration
213
+ currentValue = input
214
+ let due = scheduler.now.advanced(by: dueTime)
215
+ let previousCancellers = self.currentCancellers.take()
216
+ currentCancellers[generation] = .pending
217
+ lock.unlock()
218
+ let newCanceller = scheduler.schedule(after: due,
219
+ interval: dueTime,
220
+ tolerance: scheduler.minimumTolerance,
221
+ options: options) {
222
+ self.due(generation: generation)
223
+ }
224
+ lock.lock()
225
+ currentCancellers[generation] = .active(newCanceller)
226
+ lock.unlock()
227
+ for canceller in previousCancellers.values {
228
+ canceller.cancel()
229
+ }
230
+ return .none
231
+ }
232
+
233
+ func receive(completion: Subscribers.Completion<Failure>) {
234
+ lock.lock()
235
+ guard case .subscribed = state else {
236
+ lock.unlock()
237
+ return
238
+ }
239
+ state = .terminal
240
+ let previousCancellers = currentCancellers.take()
241
+ lock.unlock()
242
+ for canceller in previousCancellers.values {
243
+ canceller.cancel()
244
+ }
245
+ scheduler.schedule {
246
+ self.downstreamLock.lock()
247
+ self.downstream.receive(completion: completion)
248
+ self.downstreamLock.unlock()
249
+ }
250
+ }
251
+
252
+ func request(_ demand: Subscribers.Demand) {
253
+ lock.lock()
254
+ guard case .subscribed = state else {
255
+ lock.unlock()
256
+ return
257
+ }
258
+ downstreamDemand += demand
259
+ lock.unlock()
260
+ }
261
+
262
+ func cancel() {
263
+ lock.lock()
264
+ guard case .subscribed(let subscription) = state else {
265
+ lock.unlock()
266
+ return
267
+ }
268
+ state = .terminal
269
+ let previousCancellers = currentCancellers.take()
270
+ lock.unlock()
271
+ for canceller in previousCancellers.values {
272
+ canceller.cancel()
273
+ }
274
+ subscription.cancel()
275
+ }
276
+
277
+ var description: String { return "Debounce" }
278
+
279
+ var customMirror: Mirror {
280
+ let children: [Mirror.Child] = [
281
+ ("downstream", downstream),
282
+ ("downstreamDemand", downstreamDemand),
283
+ ("currentValue", currentValue as Any)
284
+ ]
285
+ return Mirror(self, children: children)
286
+ }
287
+
288
+ var playgroundDescription: Any { return description }
289
+
290
+ private func due(generation: Generation) {
291
+ lock.lock()
292
+ guard case .subscribed = state else {
293
+ lock.unlock()
294
+ return
295
+ }
296
+
297
+ // If this condition holds, it means that no values were received
298
+ // in this time frame => we should propagate the current value downstream.
299
+ guard generation == currentGeneration, let value = currentValue else {
300
+ let canceller = currentCancellers[generation]
301
+ lock.unlock()
302
+ canceller?.cancel()
303
+ return
304
+ }
305
+
306
+ guard let canceller = currentCancellers[generation].take() else {
307
+ lock.unlock()
308
+ return
309
+ }
310
+
311
+ let hasAnyDemand = downstreamDemand != .none
312
+ if hasAnyDemand {
313
+ downstreamDemand -= 1
314
+ }
315
+
316
+ lock.unlock()
317
+ canceller.cancel()
318
+
319
+ guard hasAnyDemand else { return }
320
+
321
+ downstreamLock.lock()
322
+ let newDemand = downstream.receive(value)
323
+ downstreamLock.unlock()
324
+
325
+ if newDemand == .none { return }
326
+
327
+ lock.lock()
328
+ downstreamDemand += newDemand
329
+ lock.unlock()
330
+ }
331
+ }
332
+ }
@@ -0,0 +1,269 @@
1
+ //
2
+ // Publishers.Delay.swift
3
+ // OpenCombine
4
+ //
5
+ // Created by Евгений Богомолов on 07/09/2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Delays delivery of all output to the downstream receiver by a specified amount of
11
+ /// time on a particular scheduler.
12
+ ///
13
+ /// Use `delay(for:tolerance:scheduler:options:)` when you need to delay the delivery
14
+ /// of elements to a downstream by a specified amount of time.
15
+ ///
16
+ /// In this example, a `Timer` publishes an event every second.
17
+ /// The `delay(for:tolerance:scheduler:options:)` operator holds the delivery of
18
+ /// the initial element for 3 seconds (±0.5 seconds), after which each element is
19
+ /// delivered to the downstream on the main run loop after the specified delay:
20
+ ///
21
+ /// let df = DateFormatter()
22
+ /// df.dateStyle = .none
23
+ /// df.timeStyle = .long
24
+ /// cancellable = Timer.publish(every: 1.0, on: .main, in: .default)
25
+ /// .autoconnect()
26
+ /// .handleEvents(receiveOutput: { date in
27
+ /// print ("Sending Timestamp \'\(df.string(from: date))\' to delay()")
28
+ /// })
29
+ /// .delay(for: .seconds(3), scheduler: RunLoop.main, options: .none)
30
+ /// .sink(
31
+ /// receiveCompletion: { print ("completion: \($0)", terminator: "\n") },
32
+ /// receiveValue: { value in
33
+ /// let now = Date()
34
+ /// print("""
35
+ /// At \(df.string(from: now)) received Timestamp \
36
+ /// \'\(df.string(from: value))\' \
37
+ /// sent: \(String(format: "%.2f", now.timeIntervalSince(value)))
38
+ /// secs ago
39
+ /// """)
40
+ /// }
41
+ /// )
42
+ ///
43
+ /// // Prints:
44
+ /// // Sending Timestamp '5:02:33 PM PDT' to delay()
45
+ /// // Sending Timestamp '5:02:34 PM PDT' to delay()
46
+ /// // Sending Timestamp '5:02:35 PM PDT' to delay()
47
+ /// // Sending Timestamp '5:02:36 PM PDT' to delay()
48
+ /// // At 5:02:36 PM PDT received Timestamp '5:02:33 PM PDT' sent: 3.00
49
+ /// // secs ago
50
+ /// // Sending Timestamp '5:02:37 PM PDT' to delay()
51
+ /// // At 5:02:37 PM PDT received Timestamp '5:02:34 PM PDT' sent: 3.00
52
+ /// // secs ago
53
+ /// // Sending Timestamp '5:02:38 PM PDT' to delay()
54
+ /// // At 5:02:38 PM PDT received Timestamp '5:02:35 PM PDT' sent: 3.00
55
+ /// // secs ago
56
+ ///
57
+ /// The delay affects the delivery of elements and completion, but not of the original
58
+ /// subscription.
59
+ ///
60
+ /// - Parameters:
61
+ /// - interval: The amount of time to delay.
62
+ /// - tolerance: The allowed tolerance in firing delayed events.
63
+ /// - scheduler: The scheduler to deliver the delayed events.
64
+ /// - options: Options relevant to the scheduler’s behavior.
65
+ /// - Returns: A publisher that delays delivery of elements and completion to
66
+ /// the downstream receiver.
67
+ public func delay<Context: Scheduler>(
68
+ for interval: Context.SchedulerTimeType.Stride,
69
+ tolerance: Context.SchedulerTimeType.Stride? = nil,
70
+ scheduler: Context,
71
+ options: Context.SchedulerOptions? = nil
72
+ ) -> Publishers.Delay<Self, Context> {
73
+ return .init(upstream: self,
74
+ interval: interval,
75
+ tolerance: tolerance ?? scheduler.minimumTolerance,
76
+ scheduler: scheduler,
77
+ options: options)
78
+ }
79
+ }
80
+
81
+ extension Publishers {
82
+
83
+ /// A publisher that delays delivery of elements and completion
84
+ /// to the downstream receiver.
85
+ public struct Delay<Upstream: Publisher, Context: Scheduler>: Publisher {
86
+
87
+ public typealias Output = Upstream.Output
88
+
89
+ public typealias Failure = Upstream.Failure
90
+
91
+ /// The publisher that this publisher receives elements from.
92
+ public let upstream: Upstream
93
+
94
+ /// The amount of time to delay.
95
+ public let interval: Context.SchedulerTimeType.Stride
96
+
97
+ /// The allowed tolerance in firing delayed events.
98
+ public let tolerance: Context.SchedulerTimeType.Stride
99
+
100
+ /// The scheduler to deliver the delayed events.
101
+ public let scheduler: Context
102
+
103
+ public let options: Context.SchedulerOptions?
104
+
105
+ public init(upstream: Upstream,
106
+ interval: Context.SchedulerTimeType.Stride,
107
+ tolerance: Context.SchedulerTimeType.Stride,
108
+ scheduler: Context,
109
+ options: Context.SchedulerOptions? = nil)
110
+ {
111
+ self.upstream = upstream
112
+ self.interval = interval
113
+ self.tolerance = tolerance
114
+ self.scheduler = scheduler
115
+ self.options = options
116
+ }
117
+
118
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
119
+ where Upstream.Failure == Downstream.Failure,
120
+ Upstream.Output == Downstream.Input
121
+ {
122
+ let inner = Inner(downstream: subscriber,
123
+ interval: interval,
124
+ tolerance: tolerance,
125
+ scheduler: scheduler,
126
+ options: options)
127
+ upstream.subscribe(inner)
128
+ }
129
+ }
130
+ }
131
+
132
+ extension Publishers.Delay {
133
+ private final class Inner<Downstream: Subscriber>
134
+ : Subscriber,
135
+ Subscription
136
+ where Downstream.Input == Upstream.Output, Downstream.Failure == Upstream.Failure
137
+ {
138
+ typealias Input = Upstream.Output
139
+ typealias Failure = Upstream.Failure
140
+
141
+ private let lock = UnfairLock.allocate()
142
+ private let downstream: Downstream
143
+ private let interval: Context.SchedulerTimeType.Stride
144
+ private let tolerance: Context.SchedulerTimeType.Stride
145
+ private let scheduler: Context
146
+ private let options: Context.SchedulerOptions?
147
+ private var state = SubscriptionStatus.awaitingSubscription
148
+ private let downstreamLock = UnfairRecursiveLock.allocate()
149
+
150
+ fileprivate init(downstream: Downstream,
151
+ interval: Context.SchedulerTimeType.Stride,
152
+ tolerance: Context.SchedulerTimeType.Stride,
153
+ scheduler: Context,
154
+ options: Context.SchedulerOptions?) {
155
+ self.downstream = downstream
156
+ self.interval = interval
157
+ self.tolerance = tolerance
158
+ self.scheduler = scheduler
159
+ self.options = options
160
+ }
161
+
162
+ deinit {
163
+ lock.deallocate()
164
+ downstreamLock.deallocate()
165
+ }
166
+
167
+ private func schedule(_ work: @escaping () -> Void) {
168
+ scheduler
169
+ .schedule(after: scheduler.now.advanced(by: interval),
170
+ tolerance: tolerance,
171
+ options: options,
172
+ work)
173
+ }
174
+
175
+ func receive(subscription: Subscription) {
176
+ lock.lock()
177
+ guard case .awaitingSubscription = state else {
178
+ lock.unlock()
179
+ subscription.cancel()
180
+ return
181
+ }
182
+ state = .subscribed(subscription)
183
+ lock.unlock()
184
+ downstreamLock.lock()
185
+ downstream.receive(subscription: self)
186
+ downstreamLock.unlock()
187
+ }
188
+
189
+ func receive(_ input: Input) -> Subscribers.Demand {
190
+ lock.lock()
191
+ guard case .subscribed = state else {
192
+ lock.unlock()
193
+ return .none
194
+ }
195
+ lock.unlock()
196
+ schedule {
197
+ self.scheduledReceive(input)
198
+ }
199
+ return .none
200
+ }
201
+
202
+ private func scheduledReceive(_ input: Input) {
203
+ lock.lock()
204
+ guard state.subscription != nil else {
205
+ lock.unlock()
206
+ return
207
+ }
208
+ lock.unlock()
209
+ downstreamLock.lock()
210
+ let newDemand = downstream.receive(input)
211
+ downstreamLock.unlock()
212
+ if newDemand == .none { return }
213
+ lock.lock()
214
+ let subscription = state.subscription
215
+ lock.unlock()
216
+ subscription?.request(newDemand)
217
+ }
218
+
219
+ func receive(completion: Subscribers.Completion<Failure>) {
220
+ lock.lock()
221
+ guard case let .subscribed(subscription) = state else {
222
+ lock.unlock()
223
+ return
224
+ }
225
+ state = .pendingTerminal(subscription)
226
+ lock.unlock()
227
+ schedule {
228
+ self.scheduledReceive(completion: completion)
229
+ }
230
+ }
231
+
232
+ private func scheduledReceive(completion: Subscribers.Completion<Failure>) {
233
+ lock.lock()
234
+ guard case .pendingTerminal = state else {
235
+ assertionFailure(
236
+ "This branch should not be reachable! Please report a bug."
237
+ )
238
+ lock.unlock()
239
+ return
240
+ }
241
+ state = .terminal
242
+ lock.unlock()
243
+ downstreamLock.lock()
244
+ downstream.receive(completion: completion)
245
+ downstreamLock.unlock()
246
+ }
247
+
248
+ func request(_ demand: Subscribers.Demand) {
249
+ lock.lock()
250
+ guard case let .subscribed(subscription) = state else {
251
+ lock.unlock()
252
+ return
253
+ }
254
+ lock.unlock()
255
+ subscription.request(demand)
256
+ }
257
+
258
+ func cancel() {
259
+ lock.lock()
260
+ guard case let .subscribed(subscription) = state else {
261
+ lock.unlock()
262
+ return
263
+ }
264
+ state = .terminal
265
+ lock.unlock()
266
+ subscription.cancel()
267
+ }
268
+ }
269
+ }