@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,178 @@
1
+ //
2
+ // ImmediateScheduler.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 11.06.2019.
6
+ //
7
+
8
+ /// A scheduler for performing synchronous actions.
9
+ ///
10
+ /// You can only use this scheduler for immediate actions. If you attempt to schedule
11
+ /// actions after a specific date, this scheduler ignores the date and performs them
12
+ /// immediately.
13
+ public struct ImmediateScheduler: Scheduler {
14
+
15
+ /// The time type used by the immediate scheduler.
16
+ public struct SchedulerTimeType: Strideable {
17
+
18
+ fileprivate init() {}
19
+
20
+ /// Returns the distance to another immediate scheduler time; this distance is
21
+ /// always `0` in the context of an immediate scheduler.
22
+ ///
23
+ /// - Parameter other: The other scheduler time.
24
+ /// - Returns: `0`, as a `Stride`.
25
+ public func distance(to other: SchedulerTimeType) -> Stride { return 0 }
26
+
27
+ /// Advances the time by the specified amount; this is meaningless in the context
28
+ /// of an immediate scheduler.
29
+ ///
30
+ /// - Parameter n: The amount to advance by. The `ImmediateScheduler` ignores this
31
+ /// value.
32
+ /// - Returns: An empty `SchedulerTimeType`.
33
+ public func advanced(by _: Stride) -> SchedulerTimeType {
34
+ return SchedulerTimeType()
35
+ }
36
+
37
+ /// The increment by which the immediate scheduler counts time.
38
+ public struct Stride: ExpressibleByFloatLiteral,
39
+ Comparable,
40
+ SignedNumeric,
41
+ Codable,
42
+ SchedulerTimeIntervalConvertible {
43
+
44
+ /// The type used when evaluating floating-point literals.
45
+ public typealias FloatLiteralType = Double
46
+
47
+ /// The type used when evaluating integer literals.
48
+ public typealias IntegerLiteralType = Int
49
+
50
+ /// The type used for expressing the stride’s magnitude.
51
+ public typealias Magnitude = Int
52
+
53
+ /// The value of this time interval in seconds.
54
+ public var magnitude: Int
55
+
56
+ /// Creates an immediate scheduler time interval from the given time interval.
57
+ @inlinable
58
+ public init(_ value: Int) {
59
+ magnitude = value
60
+ }
61
+
62
+ /// Creates an immediate scheduler time interval from an integer seconds
63
+ /// value.
64
+ @inlinable
65
+ public init(integerLiteral value: Int) {
66
+ self.init(value)
67
+ }
68
+
69
+ /// Creates an immediate scheduler time interval from a floating-point seconds
70
+ /// value.
71
+ @inlinable
72
+ public init(floatLiteral value: Double) {
73
+ self.init(Int(value))
74
+ }
75
+
76
+ /// Creates an immediate scheduler time interval from a binary integer type.
77
+ ///
78
+ /// If `exactly` can’t convert to an `Int`, the resulting time interval is
79
+ /// `nil`.
80
+ @inlinable
81
+ public init?<BinaryIntegerType: BinaryInteger>(
82
+ exactly source: BinaryIntegerType
83
+ ) {
84
+ guard let magnitude = Int(exactly: source) else {
85
+ return nil
86
+ }
87
+ self.init(magnitude)
88
+ }
89
+
90
+ @inlinable
91
+ public static func < (lhs: Stride, rhs: Stride) -> Bool {
92
+ return lhs.magnitude < rhs.magnitude
93
+ }
94
+
95
+ @inlinable
96
+ public static func * (lhs: Stride, rhs: Stride) -> Stride {
97
+ return Stride(lhs.magnitude * rhs.magnitude)
98
+ }
99
+
100
+ @inlinable
101
+ public static func + (lhs: Stride, rhs: Stride) -> Stride {
102
+ return Stride(lhs.magnitude + rhs.magnitude)
103
+ }
104
+
105
+ @inlinable
106
+ public static func - (lhs: Stride, rhs: Stride) -> Stride {
107
+ return Stride(lhs.magnitude - rhs.magnitude)
108
+ }
109
+
110
+ @inlinable
111
+ public static func -= (lhs: inout Stride, rhs: Stride) {
112
+ lhs.magnitude -= rhs.magnitude
113
+ }
114
+
115
+ public static func *= (lhs: inout Stride, rhs: Stride) {
116
+ lhs.magnitude *= rhs.magnitude
117
+ }
118
+
119
+ public static func += (lhs: inout Stride, rhs: Stride) {
120
+ lhs.magnitude += rhs.magnitude
121
+ }
122
+
123
+ public static func seconds(_: Int) -> Stride { return 0 }
124
+
125
+ public static func seconds(_: Double) -> Stride { return 0 }
126
+
127
+ public static func milliseconds(_: Int) -> Stride { return 0 }
128
+
129
+ public static func microseconds(_: Int) -> Stride { return 0 }
130
+
131
+ public static func nanoseconds(_: Int) -> Stride { return 0 }
132
+ }
133
+ }
134
+
135
+ /// A type that defines options accepted by the immediate scheduler.
136
+ public typealias SchedulerOptions = Never
137
+
138
+ /// The shared instance of the immediate scheduler.
139
+ ///
140
+ /// You cannot create instances of the immediate scheduler yourself. Use only
141
+ /// the shared instance.
142
+ public static let shared = ImmediateScheduler()
143
+
144
+ /// Performs the action at the next possible opportunity.
145
+ @inlinable
146
+ public func schedule(options: SchedulerOptions?, _ action: @escaping () -> Void) {
147
+ action()
148
+ }
149
+
150
+ /// The immediate scheduler’s definition of the current moment in time.
151
+ public var now: SchedulerTimeType { return SchedulerTimeType() }
152
+
153
+ /// The minimum tolerance allowed by the immediate scheduler.
154
+ public var minimumTolerance: SchedulerTimeType.Stride { return 0 }
155
+
156
+ /// Performs the action at some time after the specified date.
157
+ ///
158
+ /// The immediate scheduler ignores `date` and performs the action immediately.
159
+ public func schedule(after date: SchedulerTimeType,
160
+ tolerance: SchedulerTimeType.Stride,
161
+ options: SchedulerOptions?,
162
+ _ action: @escaping () -> Void) {
163
+ action()
164
+ }
165
+
166
+ /// Performs the action at some time after the specified date, at the specified
167
+ /// frequency, optionally taking into account tolerance if possible.
168
+ ///
169
+ /// The immediate scheduler ignores `date` and performs the action immediately.
170
+ public func schedule(after date: SchedulerTimeType,
171
+ interval: SchedulerTimeType.Stride,
172
+ tolerance: SchedulerTimeType.Stride,
173
+ options: SchedulerOptions?,
174
+ _ action: @escaping () -> Void) -> Cancellable {
175
+ action()
176
+ return Subscriptions.empty
177
+ }
178
+ }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 Sergej Jaskiewicz
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,48 @@
1
+ // `NotificationCenter.default.publisher(for:)` as a Combine publisher, as
2
+ // Apple's Foundation makes it: subscribers receive the matching
3
+ // notifications, as many as they have asked for, until they cancel.
4
+ // (FoundationBridge declares the publisher, which SwiftUI's `onReceive` takes
5
+ // without Combine.)
6
+
7
+ import Foundation
8
+ import FoundationBridge
9
+
10
+ extension FoundationBridge.NotificationCenter.Publisher: Publisher {
11
+ public typealias Failure = Never
12
+
13
+ public func receive<S: Subscriber>(subscriber: S) where S.Input == Notification, S.Failure == Never {
14
+ subscriber.receive(subscription: NotificationSubscription(subscriber: subscriber, publisher: self))
15
+ }
16
+ }
17
+
18
+ private final class NotificationSubscription<Downstream: Subscriber>: Subscription, @unchecked Sendable
19
+ where Downstream.Input == Notification, Downstream.Failure == Never {
20
+ private var downstream: Downstream?
21
+ private var demand = Subscribers.Demand.none
22
+ private let center: FoundationBridge.NotificationCenter
23
+ private var token: (any NSObjectProtocol)?
24
+
25
+ init(subscriber: Downstream, publisher: FoundationBridge.NotificationCenter.Publisher) {
26
+ downstream = subscriber
27
+ center = publisher.center
28
+ token = publisher.center.addObserver(forName: publisher.name, object: publisher.object, queue: nil) { [weak self] note in
29
+ self?.deliver(note)
30
+ }
31
+ }
32
+
33
+ func request(_ demand: Subscribers.Demand) {
34
+ self.demand += demand
35
+ }
36
+
37
+ private func deliver(_ note: Notification) {
38
+ guard let downstream, demand > 0 else { return }
39
+ demand -= 1
40
+ demand += downstream.receive(note)
41
+ }
42
+
43
+ func cancel() {
44
+ if let token { center.removeObserver(token) }
45
+ token = nil
46
+ downstream = nil
47
+ }
48
+ }
@@ -0,0 +1,46 @@
1
+ // `objectWillChange` as a Combine publisher. The SwiftUI shim's
2
+ // `ObservableObjectPublisher` tells the views that observe its object; this
3
+ // makes it a `Publisher` of `Void` too, so `object.objectWillChange.sink { }`
4
+ // (ButtonKit forwards one model's changes to another this way) and the
5
+ // operators work. A subscriber hears every `send()` while it has demand,
6
+ // until it cancels.
7
+
8
+ import SwiftUI
9
+
10
+ extension ObservableObjectPublisher: Publisher {
11
+ public typealias Output = Void
12
+ public typealias Failure = Never
13
+
14
+ public func receive<S: Subscriber>(subscriber: S) where S.Input == Void, S.Failure == Never {
15
+ subscriber.receive(subscription: ObjectWillChangeSubscription(publisher: self, subscriber: subscriber))
16
+ }
17
+ }
18
+
19
+ private final class ObjectWillChangeSubscription<S: Subscriber>: Subscription where S.Input == Void, S.Failure == Never {
20
+ private weak var publisher: ObservableObjectPublisher?
21
+ private var subscriber: S?
22
+ private var token: AnyObject?
23
+ private var demand = Subscribers.Demand.none
24
+
25
+ init(publisher: ObservableObjectPublisher, subscriber: S) {
26
+ self.publisher = publisher
27
+ self.subscriber = subscriber
28
+ token = publisher._subscribe { [weak self] in self?.receive() }
29
+ }
30
+
31
+ private func receive() {
32
+ guard demand > 0, let subscriber else { return }
33
+ demand -= 1
34
+ demand += subscriber.receive(())
35
+ }
36
+
37
+ func request(_ demand: Subscribers.Demand) {
38
+ self.demand += demand
39
+ }
40
+
41
+ func cancel() {
42
+ if let token { publisher?._unsubscribe(token) }
43
+ token = nil
44
+ subscriber = nil
45
+ }
46
+ }
@@ -0,0 +1,222 @@
1
+ //
2
+ // PassthroughSubject.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 11.06.2019.
6
+ //
7
+
8
+ /// A subject that broadcasts elements to downstream subscribers.
9
+ ///
10
+ /// As a concrete implementation of `Subject`, the `PassthroughSubject` provides
11
+ /// a convenient way to adapt existing imperative code to the Combine model.
12
+ ///
13
+ /// Unlike `CurrentValueSubject`, a `PassthroughSubject` doesn’t have an initial value or
14
+ /// a buffer of the most recently-published element.
15
+ /// A `PassthroughSubject` drops values if there are no subscribers, or its current demand
16
+ /// is zero.
17
+ public final class PassthroughSubject<Output, Failure: Error>: Subject {
18
+
19
+ private let lock = UnfairLock.allocate()
20
+
21
+ private var active = true
22
+
23
+ private var completion: Subscribers.Completion<Failure>?
24
+
25
+ private var downstreams = ConduitList<Output, Failure>.empty
26
+
27
+ internal var upstreamSubscriptions: [Subscription] = []
28
+
29
+ internal var hasAnyDownstreamDemand = false
30
+
31
+ public init() {}
32
+
33
+ deinit {
34
+ for subscription in upstreamSubscriptions {
35
+ subscription.cancel()
36
+ }
37
+ lock.deallocate()
38
+ }
39
+
40
+ public func send(subscription: Subscription) {
41
+ lock.lock()
42
+ upstreamSubscriptions.append(subscription)
43
+ let hasAnyDownstreamDemand = self.hasAnyDownstreamDemand
44
+ lock.unlock()
45
+ if hasAnyDownstreamDemand {
46
+ subscription.request(.unlimited)
47
+ }
48
+ }
49
+
50
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
51
+ where Output == Downstream.Input, Failure == Downstream.Failure
52
+ {
53
+ lock.lock()
54
+ if active {
55
+ let conduit = Conduit(parent: self, downstream: subscriber)
56
+ downstreams.insert(conduit)
57
+ lock.unlock()
58
+ subscriber.receive(subscription: conduit)
59
+ } else {
60
+ let completion = self.completion!
61
+ lock.unlock()
62
+ subscriber.receive(subscription: Subscriptions.empty)
63
+ subscriber.receive(completion: completion)
64
+ }
65
+ }
66
+
67
+ public func send(_ input: Output) {
68
+ lock.lock()
69
+ guard active else {
70
+ lock.unlock()
71
+ return
72
+ }
73
+ let downstreams = self.downstreams
74
+ lock.unlock()
75
+ downstreams.forEach { conduit in
76
+ conduit.offer(input)
77
+ }
78
+ }
79
+
80
+ public func send(completion: Subscribers.Completion<Failure>) {
81
+ lock.lock()
82
+ guard active else {
83
+ lock.unlock()
84
+ return
85
+ }
86
+ active = false
87
+ self.completion = completion
88
+ let downstreams = self.downstreams.take()
89
+ lock.unlock()
90
+ downstreams.forEach { conduit in
91
+ conduit.finish(completion: completion)
92
+ }
93
+ }
94
+
95
+ private func acknowledgeDownstreamDemand() {
96
+ lock.lock()
97
+ if hasAnyDownstreamDemand {
98
+ lock.unlock()
99
+ return
100
+ }
101
+ hasAnyDownstreamDemand = true
102
+ let upstreamSubscriptions = self.upstreamSubscriptions
103
+ lock.unlock()
104
+ for subscription in upstreamSubscriptions {
105
+ subscription.request(.unlimited)
106
+ }
107
+ }
108
+
109
+ private func disassociate(_ conduit: ConduitBase<Output, Failure>) {
110
+ lock.lock()
111
+ guard active else {
112
+ lock.unlock()
113
+ return
114
+ }
115
+ downstreams.remove(conduit)
116
+ lock.unlock()
117
+ }
118
+ }
119
+
120
+ extension PassthroughSubject {
121
+
122
+ private final class Conduit<Downstream: Subscriber>
123
+ : ConduitBase<Output, Failure>,
124
+ CustomStringConvertible,
125
+ CustomReflectable,
126
+ CustomPlaygroundDisplayConvertible
127
+ where Downstream.Input == Output, Downstream.Failure == Failure
128
+ {
129
+
130
+ fileprivate var parent: PassthroughSubject?
131
+
132
+ fileprivate var downstream: Downstream?
133
+
134
+ fileprivate var demand = Subscribers.Demand.none
135
+
136
+ private var lock = UnfairLock.allocate()
137
+
138
+ private var downstreamLock = UnfairRecursiveLock.allocate()
139
+
140
+ fileprivate init(parent: PassthroughSubject,
141
+ downstream: Downstream) {
142
+ self.parent = parent
143
+ self.downstream = downstream
144
+ }
145
+
146
+ deinit {
147
+ lock.deallocate()
148
+ downstreamLock.deallocate()
149
+ }
150
+
151
+ override func offer(_ output: Output) {
152
+ lock.lock()
153
+ guard demand > 0, let downstream = self.downstream else {
154
+ lock.unlock()
155
+ return
156
+ }
157
+ demand -= 1
158
+ lock.unlock()
159
+ downstreamLock.lock()
160
+ let newDemand = downstream.receive(output)
161
+ downstreamLock.unlock()
162
+ guard newDemand > 0 else { return }
163
+ lock.lock()
164
+ demand += newDemand
165
+ lock.unlock()
166
+ }
167
+
168
+ override func finish(completion: Subscribers.Completion<Failure>) {
169
+ lock.lock()
170
+ guard let downstream = self.downstream.take() else {
171
+ lock.unlock()
172
+ return
173
+ }
174
+ let parent = self.parent.take()
175
+ lock.unlock()
176
+ parent?.disassociate(self)
177
+ downstreamLock.lock()
178
+ downstream.receive(completion: completion)
179
+ downstreamLock.unlock()
180
+ }
181
+
182
+ override func request(_ demand: Subscribers.Demand) {
183
+ demand.assertNonZero()
184
+ lock.lock()
185
+ if self.downstream == nil {
186
+ lock.unlock()
187
+ return
188
+ }
189
+ self.demand += demand
190
+ let parent = self.parent
191
+ lock.unlock()
192
+ parent?.acknowledgeDownstreamDemand()
193
+ }
194
+
195
+ override func cancel() {
196
+ lock.lock()
197
+ if downstream.take() == nil {
198
+ lock.unlock()
199
+ return
200
+ }
201
+ let parent = self.parent.take()
202
+ lock.unlock()
203
+ parent?.disassociate(self)
204
+ }
205
+
206
+ var description: String { return "PassthroughSubject" }
207
+
208
+ var customMirror: Mirror {
209
+ lock.lock()
210
+ defer { lock.unlock() }
211
+ let children: [Mirror.Child] = [
212
+ ("parent", parent as Any),
213
+ ("downstream", downstream as Any),
214
+ ("demand", demand),
215
+ ("subject", parent as Any)
216
+ ]
217
+ return Mirror(self, children: children)
218
+ }
219
+
220
+ var playgroundDescription: Any { return description }
221
+ }
222
+ }
@@ -0,0 +1,53 @@
1
+ //
2
+ // Publisher+Subscribe.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 23.04.2023.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Attaches the specified subscriber to this publisher.
11
+ ///
12
+ /// Always call this function instead of `receive(subscriber:)`.
13
+ /// Adopters of `Publisher` must implement `receive(subscriber:)`.
14
+ /// The implementation of `subscribe(_:)` in this extension calls through to
15
+ /// `receive(subscriber:)`.
16
+ /// - SeeAlso: `receive(subscriber:)`
17
+ /// - Parameters:
18
+ /// - subscriber: The subscriber to attach to this `Publisher`. After attaching,
19
+ /// the subscriber can start to receive values.
20
+ public func subscribe<Subscriber: Combine.Subscriber>(_ subscriber: Subscriber)
21
+ where Failure == Subscriber.Failure, Output == Subscriber.Input
22
+ {
23
+ if let hook = DebugHook.getGlobalHook() {
24
+ if var marker = subscriber as? SubscriberTapMarker {
25
+ let anySubscriber = marker.inner
26
+ as! AnySubscriber<Subscriber.Input, Subscriber.Failure>
27
+ hook.willReceive(publisher: self, subscriber: anySubscriber)
28
+ receive(subscriber: subscriber)
29
+ hook.didReceive(publisher: self, subscriber: anySubscriber)
30
+ } else {
31
+ let tap = SubscriberTap(subscriber: subscriber)
32
+ hook.willReceive(publisher: self, subscriber: subscriber)
33
+ receive(subscriber: tap)
34
+ hook.didReceive(publisher: self, subscriber: subscriber)
35
+ }
36
+ } else {
37
+ receive(subscriber: subscriber)
38
+ }
39
+ }
40
+
41
+ /// Attaches the specified subject to this publisher.
42
+ ///
43
+ /// - Parameter subject: The subject to attach to this publisher.
44
+ public func subscribe<Subject: Combine.Subject>(
45
+ _ subject: Subject
46
+ ) -> AnyCancellable
47
+ where Failure == Subject.Failure, Output == Subject.Output
48
+ {
49
+ let subscriber = SubjectSubscriber(subject)
50
+ self.subscribe(subscriber)
51
+ return AnyCancellable(subscriber)
52
+ }
53
+ }
@@ -0,0 +1,48 @@
1
+ //
2
+ // Deferred.swift
3
+ //
4
+ //
5
+ // Created by Joseph Spadafora on 7/7/19.
6
+ //
7
+
8
+ /// A publisher that awaits subscription before running the supplied closure
9
+ /// to create a publisher for the new subscriber.
10
+ public struct Deferred<DeferredPublisher: Publisher>: Publisher {
11
+
12
+ /// The kind of values published by this publisher.
13
+ public typealias Output = DeferredPublisher.Output
14
+
15
+ /// The kind of errors this publisher might publish.
16
+ ///
17
+ /// Use `Never` if this `Publisher` does not publish errors.
18
+ public typealias Failure = DeferredPublisher.Failure
19
+
20
+ /// The closure to execute when this deferred publisher receives a subscription.
21
+ ///
22
+ /// The publisher returned by this closure immediately
23
+ /// receives the incoming subscription.
24
+ public let createPublisher: () -> DeferredPublisher
25
+
26
+ /// Creates a deferred publisher.
27
+ ///
28
+ /// - Parameter createPublisher: The closure to execute
29
+ /// when calling `subscribe(_:)`.
30
+ public init(createPublisher: @escaping () -> DeferredPublisher) {
31
+ self.createPublisher = createPublisher
32
+ }
33
+
34
+ /// This function is called to attach the specified `Subscriber`
35
+ /// to this `Publisher` by `subscribe(_:)`
36
+ ///
37
+ /// - SeeAlso: `subscribe(_:)`
38
+ /// - Parameters:
39
+ /// - subscriber: The subscriber to attach to this `Publisher`.
40
+ /// once attached it can begin to receive values.
41
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
42
+ where Failure == Downstream.Failure,
43
+ Output == Downstream.Input
44
+ {
45
+ let deferredPublisher = createPublisher()
46
+ deferredPublisher.subscribe(subscriber)
47
+ }
48
+ }
@@ -0,0 +1,54 @@
1
+ //
2
+ // Empty.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 16.06.2019.
6
+ //
7
+
8
+ /// A publisher that never publishes any values, and optionally finishes immediately.
9
+ ///
10
+ /// You can create a ”Never” publisher — one which never sends values and never
11
+ /// finishes or fails — with the initializer `Empty(completeImmediately: false)`.
12
+ public struct Empty<Output, Failure: Error>: Publisher, Equatable {
13
+
14
+ /// Creates an empty publisher.
15
+ ///
16
+ /// - Parameter completeImmediately: A Boolean value that indicates whether
17
+ /// the publisher should immediately finish.
18
+ public init(completeImmediately: Bool = true) {
19
+ self.completeImmediately = completeImmediately
20
+ }
21
+
22
+ /// Creates an empty publisher with the given completion behavior and output and
23
+ /// failure types.
24
+ ///
25
+ /// Use this initializer to connect the empty publisher to subscribers or other
26
+ /// publishers that have specific output and failure types.
27
+ ///
28
+ /// - Parameters:
29
+ /// - completeImmediately: A Boolean value that indicates whether the publisher
30
+ /// should immediately finish.
31
+ /// - outputType: The output type exposed by this publisher.
32
+ /// - failureType: The failure type exposed by this publisher.
33
+ public init(completeImmediately: Bool = true,
34
+ outputType: Output.Type,
35
+ failureType: Failure.Type) {
36
+ self.init(completeImmediately: completeImmediately)
37
+ }
38
+
39
+ /// A Boolean value that indicates whether the publisher immediately sends
40
+ /// a completion.
41
+ ///
42
+ /// If `true`, the publisher finishes immediately after sending a subscription
43
+ /// to the subscriber. If `false`, it never completes.
44
+ public let completeImmediately: Bool
45
+
46
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
47
+ where Output == Downstream.Input, Failure == Downstream.Failure
48
+ {
49
+ subscriber.receive(subscription: Subscriptions.empty)
50
+ if completeImmediately {
51
+ subscriber.receive(completion: .finished)
52
+ }
53
+ }
54
+ }