@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,148 @@
1
+ //
2
+ // AnyPublisher.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 10.06.2019.
6
+ //
7
+
8
+ extension Publisher {
9
+
10
+ /// Wraps this publisher with a type eraser.
11
+ ///
12
+ /// Use `eraseToAnyPublisher()` to expose an instance of `AnyPublisher`` to
13
+ /// the downstream subscriber, rather than this publisher’s actual type.
14
+ /// This form of _type erasure_ preserves abstraction across API boundaries, such as
15
+ /// different modules.
16
+ /// When you expose your publishers as the `AnyPublisher` type, you can change
17
+ /// the underlying implementation over time without affecting existing clients.
18
+ ///
19
+ /// The following example shows two types that each have a `publisher` property.
20
+ /// `TypeWithSubject` exposes this property as its actual type, `PassthroughSubject`,
21
+ /// while `TypeWithErasedSubject` uses `eraseToAnyPublisher()` to expose it as
22
+ /// an `AnyPublisher`. As seen in the output, a caller from another module can access
23
+ /// `TypeWithSubject.publisher` as its native type. This means you can’t change your
24
+ /// publisher to a different type without breaking the caller. By comparison,
25
+ /// `TypeWithErasedSubject.publisher` appears to callers as an `AnyPublisher`, so you
26
+ /// can change the underlying publisher type at will.
27
+ ///
28
+ /// public class TypeWithSubject {
29
+ /// public let publisher: some Publisher = PassthroughSubject<Int,Never>()
30
+ /// }
31
+ /// public class TypeWithErasedSubject {
32
+ /// public let publisher: some Publisher = PassthroughSubject<Int,Never>()
33
+ /// .eraseToAnyPublisher()
34
+ /// }
35
+ ///
36
+ /// // In another module:
37
+ /// let nonErased = TypeWithSubject()
38
+ /// if let subject = nonErased.publisher as? PassthroughSubject<Int,Never> {
39
+ /// print("Successfully cast nonErased.publisher.")
40
+ /// }
41
+ /// let erased = TypeWithErasedSubject()
42
+ /// if let subject = erased.publisher as? PassthroughSubject<Int,Never> {
43
+ /// print("Successfully cast erased.publisher.")
44
+ /// }
45
+ ///
46
+ /// // Prints "Successfully cast nonErased.publisher."
47
+ ///
48
+ /// - Returns: An ``AnyPublisher`` wrapping this publisher.
49
+ @inlinable
50
+ public func eraseToAnyPublisher() -> AnyPublisher<Output, Failure> {
51
+ return .init(self)
52
+ }
53
+ }
54
+
55
+ /// A type-erasing publisher.
56
+ ///
57
+ /// Use `AnyPublisher` to wrap a publisher whose type has details you don’t want to expose
58
+ /// across API boundaries, such as different modules. Wrapping a `Subject` with
59
+ /// `AnyPublisher` also prevents callers from accessing its `send(_:)` method. When you
60
+ /// use type erasure this way, you can change the underlying publisher implementation over
61
+ /// time without affecting existing clients.
62
+ ///
63
+ /// You can use OpenCombine’s `eraseToAnyPublisher()` operator to wrap a publisher with
64
+ /// `AnyPublisher`.
65
+ public struct AnyPublisher<Output, Failure: Error>
66
+ : CustomStringConvertible,
67
+ CustomPlaygroundDisplayConvertible
68
+ {
69
+ @usableFromInline
70
+ internal let box: PublisherBoxBase<Output, Failure>
71
+
72
+ /// Creates a type-erasing publisher to wrap the provided publisher.
73
+ ///
74
+ /// - Parameter publisher: A publisher to wrap with a type-eraser.
75
+ @inlinable
76
+ public init<PublisherType: Publisher>(_ publisher: PublisherType)
77
+ where Output == PublisherType.Output, Failure == PublisherType.Failure
78
+ {
79
+ // If this has already been boxed, avoid boxing again
80
+ if let erased = publisher as? AnyPublisher<Output, Failure> {
81
+ box = erased.box
82
+ } else {
83
+ box = PublisherBox(base: publisher)
84
+ }
85
+ }
86
+
87
+ public var description: String {
88
+ return "AnyPublisher"
89
+ }
90
+
91
+ public var playgroundDescription: Any {
92
+ return description
93
+ }
94
+ }
95
+
96
+ extension AnyPublisher: Publisher {
97
+
98
+ /// This function is called to attach the specified `Subscriber` to this `Publisher`
99
+ /// by `subscribe(_:)`
100
+ ///
101
+ /// - SeeAlso: `subscribe(_:)`
102
+ /// - Parameters:
103
+ /// - subscriber: The subscriber to attach to this `Publisher`.
104
+ /// once attached it can begin to receive values.
105
+ @inlinable
106
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
107
+ where Output == Downstream.Input, Failure == Downstream.Failure
108
+ {
109
+ box.receive(subscriber: subscriber)
110
+ }
111
+ }
112
+
113
+ /// A type-erasing base class. Its concrete subclass is generic over the underlying
114
+ /// publisher.
115
+ @usableFromInline
116
+ internal class PublisherBoxBase<Output, Failure: Error>: Publisher {
117
+
118
+ @inlinable
119
+ internal init() {}
120
+
121
+ @usableFromInline
122
+ internal func receive<Downstream: Subscriber>(subscriber: Downstream)
123
+ where Failure == Downstream.Failure, Output == Downstream.Input
124
+ {
125
+ abstractMethod()
126
+ }
127
+ }
128
+
129
+ @usableFromInline
130
+ internal final class PublisherBox<PublisherType: Publisher>
131
+ : PublisherBoxBase<PublisherType.Output, PublisherType.Failure>
132
+ {
133
+ @usableFromInline
134
+ internal let base: PublisherType
135
+
136
+ @inlinable
137
+ internal init(base: PublisherType) {
138
+ self.base = base
139
+ super.init()
140
+ }
141
+
142
+ @inlinable
143
+ override internal func receive<Downstream: Subscriber>(subscriber: Downstream)
144
+ where Failure == Downstream.Failure, Output == Downstream.Input
145
+ {
146
+ base.receive(subscriber: subscriber)
147
+ }
148
+ }
@@ -0,0 +1,230 @@
1
+ //
2
+ // AnySubscriber.swift
3
+ // OpenCombine
4
+ //
5
+ // Created by Sergej Jaskiewicz on 10.06.2019.
6
+ //
7
+
8
+ /// A type-erasing subscriber.
9
+ ///
10
+ /// Use an `AnySubscriber` to wrap an existing subscriber whose details you don’t want to
11
+ /// expose. You can also use `AnySubscriber` to create a custom subscriber by providing
12
+ /// closures for the methods defined in `Subscriber`, rather than implementing
13
+ /// `Subscriber` directly.
14
+ public struct AnySubscriber<Input, Failure: Error>: Subscriber,
15
+ CustomStringConvertible,
16
+ CustomReflectable,
17
+ CustomPlaygroundDisplayConvertible
18
+ {
19
+ @usableFromInline
20
+ internal let box: AnySubscriberBase<Input, Failure>
21
+
22
+ @usableFromInline
23
+ internal let descriptionThunk: () -> String
24
+
25
+ @usableFromInline
26
+ internal let customMirrorThunk: () -> Mirror
27
+
28
+ @usableFromInline
29
+ internal let playgroundDescriptionThunk: () -> Any
30
+
31
+ public let combineIdentifier: CombineIdentifier
32
+
33
+ public var description: String { return descriptionThunk() }
34
+
35
+ public var customMirror: Mirror { return customMirrorThunk() }
36
+
37
+ /// A custom playground description for this instance.
38
+ public var playgroundDescription: Any { return playgroundDescriptionThunk() }
39
+
40
+ /// Creates a type-erasing subscriber to wrap an existing subscriber.
41
+ ///
42
+ /// - Parameter s: The subscriber to type-erase.
43
+ @inline(__always)
44
+ @inlinable
45
+ public init<Subscriber: Combine.Subscriber>(_ subscriber: Subscriber)
46
+ where Input == Subscriber.Input, Failure == Subscriber.Failure
47
+ {
48
+ if let erased = subscriber as? AnySubscriber<Input, Failure> {
49
+ self = erased
50
+ return
51
+ }
52
+
53
+ combineIdentifier = subscriber.combineIdentifier
54
+
55
+ box = AnySubscriberBox(subscriber)
56
+
57
+ if let description = subscriber as? CustomStringConvertible {
58
+ descriptionThunk = { description.description }
59
+ } else {
60
+ let fixedDescription = String(describing: type(of: subscriber))
61
+ descriptionThunk = { fixedDescription }
62
+ }
63
+
64
+ customMirrorThunk = {
65
+ (subscriber as? CustomReflectable)?.customMirror
66
+ ?? Mirror(subscriber, children: EmptyCollection())
67
+ }
68
+
69
+ if let playgroundDescription = subscriber as? CustomPlaygroundDisplayConvertible {
70
+ playgroundDescriptionThunk = { playgroundDescription.playgroundDescription }
71
+ } else if let description = subscriber as? CustomStringConvertible {
72
+ playgroundDescriptionThunk = { description.description }
73
+ } else {
74
+ let fixedDescription = String(describing: type(of: subscriber))
75
+ playgroundDescriptionThunk = { fixedDescription }
76
+ }
77
+ }
78
+
79
+ public init<Subject: Combine.Subject>(_ subject: Subject)
80
+ where Input == Subject.Output, Failure == Subject.Failure
81
+ {
82
+ self.init(SubjectSubscriber(subject))
83
+ }
84
+
85
+ /// Creates a type-erasing subscriber that executes the provided closures.
86
+ ///
87
+ /// - Parameters:
88
+ /// - receiveSubscription: A closure to execute when the subscriber receives
89
+ /// the initial subscription from the publisher.
90
+ /// - receiveValue: A closure to execute when the subscriber receives a value from
91
+ /// the publisher.
92
+ /// - receiveCompletion: A closure to execute when the subscriber receives
93
+ /// a completion callback from the publisher.
94
+ @inline(__always)
95
+ @inlinable
96
+ public init(receiveSubscription: ((Subscription) -> Void)? = nil,
97
+ receiveValue: ((Input) -> Subscribers.Demand)? = nil,
98
+ receiveCompletion: ((Subscribers.Completion<Failure>) -> Void)? = nil) {
99
+
100
+ box = ClosureBasedAnySubscriber(
101
+ receiveSubscription ?? { _ in },
102
+ receiveValue ?? { _ in .none },
103
+ receiveCompletion ?? { _ in }
104
+ )
105
+
106
+ combineIdentifier = CombineIdentifier()
107
+ descriptionThunk = { "Anonymous AnySubscriber" }
108
+ customMirrorThunk = { Mirror(reflecting: "Anonymous AnySubscriber") }
109
+ playgroundDescriptionThunk = { "Anonymous AnySubscriber" }
110
+ }
111
+
112
+ @inline(__always)
113
+ @inlinable
114
+ public func receive(subscription: Subscription) {
115
+ box.receive(subscription: subscription)
116
+ }
117
+
118
+ @inline(__always)
119
+ @inlinable
120
+ public func receive(_ value: Input) -> Subscribers.Demand {
121
+ return box.receive(value)
122
+ }
123
+
124
+ @inline(__always)
125
+ @inlinable
126
+ public func receive(completion: Subscribers.Completion<Failure>) {
127
+ box.receive(completion: completion)
128
+ }
129
+ }
130
+
131
+ /// A type-erasing base class. Its concrete subclass is generic over the underlying
132
+ /// subscriber.
133
+ @usableFromInline
134
+ internal class AnySubscriberBase<Input, Failure: Error>: Subscriber {
135
+
136
+ @inline(__always)
137
+ @inlinable
138
+ internal init() {}
139
+
140
+ @inline(__always)
141
+ @inlinable
142
+ deinit {}
143
+
144
+ @usableFromInline
145
+ internal func receive(subscription: Subscription) {
146
+ abstractMethod()
147
+ }
148
+
149
+ @usableFromInline
150
+ internal func receive(_ input: Input) -> Subscribers.Demand {
151
+ abstractMethod()
152
+ }
153
+
154
+ @usableFromInline
155
+ internal func receive(completion: Subscribers.Completion<Failure>) {
156
+ abstractMethod()
157
+ }
158
+ }
159
+
160
+ @usableFromInline
161
+ internal final class AnySubscriberBox<Base: Subscriber>
162
+ : AnySubscriberBase<Base.Input, Base.Failure>
163
+ {
164
+ @usableFromInline
165
+ internal let base: Base
166
+
167
+ @inlinable
168
+ internal init(_ base: Base) {
169
+ self.base = base
170
+ }
171
+
172
+ @inlinable
173
+ deinit {}
174
+
175
+ @inlinable
176
+ override internal func receive(subscription: Subscription) {
177
+ base.receive(subscription: subscription)
178
+ }
179
+
180
+ @inlinable
181
+ override internal func receive(_ input: Base.Input) -> Subscribers.Demand {
182
+ return base.receive(input)
183
+ }
184
+
185
+ @inlinable
186
+ override internal func receive(completion: Subscribers.Completion<Base.Failure>) {
187
+ base.receive(completion: completion)
188
+ }
189
+ }
190
+
191
+ @usableFromInline
192
+ internal final class ClosureBasedAnySubscriber<Input, Failure: Error>
193
+ : AnySubscriberBase<Input, Failure>
194
+ {
195
+ @usableFromInline
196
+ internal let receiveSubscriptionThunk: (Subscription) -> Void
197
+
198
+ @usableFromInline
199
+ internal let receiveValueThunk: (Input) -> Subscribers.Demand
200
+
201
+ @usableFromInline
202
+ internal let receiveCompletionThunk: (Subscribers.Completion<Failure>) -> Void
203
+
204
+ @inlinable
205
+ internal init(_ rcvSubscription: @escaping (Subscription) -> Void,
206
+ _ rcvValue: @escaping (Input) -> Subscribers.Demand,
207
+ _ rcvCompletion: @escaping (Subscribers.Completion<Failure>) -> Void) {
208
+ receiveSubscriptionThunk = rcvSubscription
209
+ receiveValueThunk = rcvValue
210
+ receiveCompletionThunk = rcvCompletion
211
+ }
212
+
213
+ @inlinable
214
+ deinit {}
215
+
216
+ @inlinable
217
+ override internal func receive(subscription: Subscription) {
218
+ receiveSubscriptionThunk(subscription)
219
+ }
220
+
221
+ @inlinable
222
+ override internal func receive(_ input: Input) -> Subscribers.Demand {
223
+ return receiveValueThunk(input)
224
+ }
225
+
226
+ @inlinable
227
+ override internal func receive(completion: Subscribers.Completion<Failure>) {
228
+ receiveCompletionThunk(completion)
229
+ }
230
+ }
@@ -0,0 +1,35 @@
1
+ //
2
+ // Cancellable.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 10.06.2019.
6
+ //
7
+
8
+ /// A protocol indicating that an activity or action supports cancellation.
9
+ ///
10
+ /// Calling `cancel()` frees up any allocated resources. It also stops side effects such
11
+ /// as timers, network access, or disk I/O.
12
+ public protocol Cancellable {
13
+
14
+ /// Cancel the activity.
15
+ func cancel()
16
+ }
17
+
18
+ extension Cancellable {
19
+
20
+ /// Stores this cancellable instance in the specified collection.
21
+ ///
22
+ /// - Parameter collection: The collection in which to store this `Cancellable`.
23
+ public func store<Cancellables: RangeReplaceableCollection>(
24
+ in collection: inout Cancellables
25
+ ) where Cancellables.Element == AnyCancellable {
26
+ AnyCancellable(self).store(in: &collection)
27
+ }
28
+
29
+ /// Stores this cancellable instance in the specified set.
30
+ ///
31
+ /// - Parameter set: The set in which to store this `Cancellable`.
32
+ public func store(in set: inout Set<AnyCancellable>) {
33
+ AnyCancellable(self).store(in: &set)
34
+ }
35
+ }
@@ -0,0 +1,29 @@
1
+ //
2
+ // Codable.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 11.06.2019.
6
+ //
7
+
8
+ /// A type that defines methods for decoding.
9
+ public protocol TopLevelDecoder {
10
+
11
+ /// The type this decoder accepts.
12
+ associatedtype Input
13
+
14
+ /// Decodes an instance of the indicated type.
15
+ func decode<DecodablyType: Decodable>(_ type: DecodablyType.Type,
16
+ from: Input) throws -> DecodablyType
17
+ }
18
+
19
+ /// A type that defines methods for encoding.
20
+ public protocol TopLevelEncoder {
21
+
22
+ /// The type this encoder produces.
23
+ associatedtype Output
24
+
25
+ /// Encodes an instance of the indicated type.
26
+ ///
27
+ /// - Parameter value: The instance to encode.
28
+ func encode<EncodableType: Encodable>(_ value: EncodableType) throws -> Output
29
+ }
@@ -0,0 +1,45 @@
1
+ //
2
+ // CombineIdentifier.swift
3
+ // OpenCombine
4
+ //
5
+ // Created by Sergej Jaskiewicz on 10.06.2019.
6
+ //
7
+
8
+ #if canImport(COpenCombineHelpers)
9
+ import COpenCombineHelpers
10
+ #endif
11
+
12
+ #if WASI
13
+ private var __identifier: UInt64 = 0
14
+
15
+ internal func __nextCombineIdentifier() -> UInt64 {
16
+ defer { __identifier += 1 }
17
+ return __identifier
18
+ }
19
+ #endif // WASI
20
+
21
+ /// A unique identifier for identifying publisher streams.
22
+ ///
23
+ /// To conform to `CustomCombineIdentifierConvertible` in a
24
+ /// `Subscription` or `Subject` that you implement as a structure, create an instance of
25
+ /// `CombineIdentifier` as follows:
26
+ ///
27
+ /// let combineIdentifier = CombineIdentifier()
28
+ public struct CombineIdentifier: Hashable, CustomStringConvertible {
29
+
30
+ private let rawValue: UInt64
31
+
32
+ /// Creates a unique Combine identifier.
33
+ public init() {
34
+ rawValue = __nextCombineIdentifier()
35
+ }
36
+
37
+ /// Creates a Combine identifier, using the bit pattern of the provided object.
38
+ public init(_ obj: AnyObject) {
39
+ rawValue = UInt64(UInt(bitPattern: ObjectIdentifier(obj)))
40
+ }
41
+
42
+ public var description: String {
43
+ return "0x\(String(rawValue, radix: 16))"
44
+ }
45
+ }
@@ -0,0 +1,24 @@
1
+ //
2
+ // ConcurrencyHelpers.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 14.11.2022.
6
+ //
7
+
8
+ #if canImport(_Concurrency) && compiler(>=5.5)
9
+ import _Concurrency
10
+ #endif
11
+
12
+ #if (canImport(_Concurrency) && compiler(>=5.5) || compiler(>=5.5.1)) && swift(<5.7)
13
+ /// A polyfill for pre-5.7 Swift versions.
14
+ @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
15
+ internal func withTaskCancellationHandler<T>( // swiftlint:disable:this generic_type_name
16
+ operation: () async throws -> T,
17
+ onCancel handler: @Sendable () -> Void
18
+ ) async rethrows -> T {
19
+ return try await withTaskCancellationHandler(
20
+ handler: handler,
21
+ operation: operation
22
+ )
23
+ }
24
+ #endif
@@ -0,0 +1,136 @@
1
+ //
2
+ // Future+Concurrency.swift
3
+ //
4
+ //
5
+ // Created by Sergej Jaskiewicz on 28.08.2021.
6
+ //
7
+
8
+ #if canImport(_Concurrency) && compiler(>=5.5)
9
+ import _Concurrency
10
+ #endif
11
+
12
+ #if canImport(_Concurrency) && compiler(>=5.5) || compiler(>=5.5.1)
13
+ extension Future where Failure == Never {
14
+
15
+ /// The published value of the future, delivered asynchronously.
16
+ ///
17
+ /// This property subscribes to the `Future` and delivers the value asynchronously
18
+ /// when the `Future` publishes it. Use this property when you want to use
19
+ /// the `async`-`await` syntax with a `Future`.
20
+ @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
21
+ public var value: Output {
22
+ get async {
23
+ await ContinuationSubscriber.withUnsafeSubscription(self)
24
+ }
25
+ }
26
+ }
27
+
28
+ extension Future {
29
+
30
+ /// The published value of the future or an error, delivered asynchronously.
31
+ ///
32
+ /// This property subscribes to the `Future` and delivers the value asynchronously
33
+ /// when the `Future` publishes it. If the `Future` terminates with an error,
34
+ /// the awaiting caller receives the error instead. Use this property when you want
35
+ /// to the `async`-`await` syntax with a `Future` whose `Failure` type is not `Never`.
36
+ @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
37
+ public var value: Output {
38
+ get async throws {
39
+ try await ContinuationSubscriber.withUnsafeThrowingSubscription(self)
40
+ }
41
+ }
42
+ }
43
+
44
+ @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
45
+ private final class ContinuationSubscriber<Input,
46
+ UpstreamFailure: Error,
47
+ ErrorOrNever: Error>
48
+ : Subscriber
49
+ {
50
+ typealias Failure = UpstreamFailure
51
+
52
+ private var continuation: UnsafeContinuation<Input, ErrorOrNever>?
53
+ private var subscription: Subscription?
54
+ private let lock = UnfairLock.allocate()
55
+
56
+ private init(_ continuation: UnsafeContinuation<Input, ErrorOrNever>) {
57
+ self.continuation = continuation
58
+ }
59
+
60
+ deinit {
61
+ lock.deallocate()
62
+ }
63
+
64
+ func receive(subscription: Subscription) {
65
+ lock.lock()
66
+ guard self.subscription == nil else {
67
+ assertionFailure("Unexpected state: received subscription twice")
68
+ lock.unlock()
69
+ subscription.cancel()
70
+ return
71
+ }
72
+ self.subscription = subscription
73
+ lock.unlock()
74
+ subscription.request(.max(1))
75
+ }
76
+
77
+ func receive(_ input: Input) -> Subscribers.Demand {
78
+ lock.lock()
79
+ if let continuation = self.continuation.take() {
80
+ lock.unlock()
81
+ continuation.resume(returning: input)
82
+ } else {
83
+ assertionFailure("Unexpected state: already completed")
84
+ lock.unlock()
85
+ }
86
+ return .none
87
+ }
88
+
89
+ func receive(completion: Subscribers.Completion<Failure>) {
90
+ lock.lock()
91
+ subscription = nil
92
+ lock.unlock()
93
+ completion.failure.map(handleFailure)
94
+ }
95
+
96
+ private func handleFailure(_ error: Failure) {
97
+ lock.lock()
98
+ if let continuation = self.continuation.take() {
99
+ lock.unlock()
100
+ continuation.resume(throwing: error as! ErrorOrNever)
101
+ } else {
102
+ assertionFailure("Unexpected state: already completed")
103
+ lock.unlock()
104
+ }
105
+ }
106
+ }
107
+
108
+ @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
109
+ extension ContinuationSubscriber where ErrorOrNever == Error {
110
+ fileprivate static func withUnsafeThrowingSubscription<Upstream: Publisher>(
111
+ _ upstream: Upstream
112
+ ) async throws -> Input
113
+ where Upstream.Output == Input,
114
+ Upstream.Failure == UpstreamFailure
115
+ {
116
+ try await withUnsafeThrowingContinuation { continuation in
117
+ upstream.subscribe(ContinuationSubscriber(continuation))
118
+ }
119
+ }
120
+ }
121
+
122
+ @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
123
+ extension ContinuationSubscriber where UpstreamFailure == Never, ErrorOrNever == Never {
124
+ fileprivate static func withUnsafeSubscription<Upstream: Publisher>(
125
+ _ upstream: Upstream
126
+ ) async -> Input
127
+ where Upstream.Output == Input,
128
+ Upstream.Failure == Never
129
+ {
130
+ await withUnsafeContinuation { continuation in
131
+ upstream.subscribe(ContinuationSubscriber(continuation))
132
+ }
133
+ }
134
+ }
135
+
136
+ #endif