@swiftbrowser/swift 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/Package.swift +200 -9
  2. package/README.md +7 -9
  3. package/Sources/AVFoundation/AVFoundation.swift +131 -0
  4. package/Sources/AVFoundation/Asset.swift +487 -0
  5. package/Sources/AVFoundation/AudioSession.swift +144 -0
  6. package/Sources/AVFoundation/CMTime.swift +303 -0
  7. package/Sources/AVFoundation/Capture.swift +688 -0
  8. package/Sources/AVFoundation/Player.swift +749 -0
  9. package/Sources/AVFoundation/PlayerView.swift +117 -0
  10. package/Sources/AVKit/AVKit.swift +132 -0
  11. package/Sources/Accelerate/Accelerate.swift +122 -0
  12. package/Sources/AppIntents/AppIntents.swift +144 -0
  13. package/Sources/AppIntents/Parameters.swift +220 -0
  14. package/Sources/AppIntents/Shortcuts.swift +159 -0
  15. package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
  16. package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
  17. package/Sources/AuthenticationServices/Authorization.swift +251 -0
  18. package/Sources/Charts/Charts.swift +0 -4
  19. package/Sources/Combine/AnyCancellable.swift +65 -0
  20. package/Sources/Combine/AnyPublisher.swift +148 -0
  21. package/Sources/Combine/AnySubscriber.swift +230 -0
  22. package/Sources/Combine/Cancellable.swift +35 -0
  23. package/Sources/Combine/Codable.swift +29 -0
  24. package/Sources/Combine/CombineIdentifier.swift +45 -0
  25. package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
  26. package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
  27. package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
  28. package/Sources/Combine/CurrentValueSubject.swift +252 -0
  29. package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
  30. package/Sources/Combine/Future.swift +228 -0
  31. package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
  32. package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
  33. package/Sources/Combine/Helpers/ConduitList.swift +59 -0
  34. package/Sources/Combine/Helpers/DebugHook.swift +177 -0
  35. package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
  36. package/Sources/Combine/Helpers/Locking.swift +30 -0
  37. package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
  38. package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
  39. package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
  40. package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
  41. package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
  42. package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
  43. package/Sources/Combine/Helpers/Utils.swift +30 -0
  44. package/Sources/Combine/Helpers/Violations.swift +33 -0
  45. package/Sources/Combine/ImmediateScheduler.swift +178 -0
  46. package/Sources/Combine/LICENSE +21 -0
  47. package/Sources/Combine/NotificationPublisher.swift +48 -0
  48. package/Sources/Combine/ObjectWillChange.swift +46 -0
  49. package/Sources/Combine/PassthroughSubject.swift +222 -0
  50. package/Sources/Combine/Publisher+Subscribe.swift +53 -0
  51. package/Sources/Combine/Publishers/Deferred.swift +48 -0
  52. package/Sources/Combine/Publishers/Empty.swift +54 -0
  53. package/Sources/Combine/Publishers/Fail.swift +42 -0
  54. package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
  55. package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
  56. package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
  57. package/Sources/Combine/Publishers/Just.swift +313 -0
  58. package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
  59. package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
  60. package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
  61. package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
  62. package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
  63. package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
  64. package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
  65. package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
  66. package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
  67. package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
  68. package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
  69. package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
  70. package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
  71. package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
  72. package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
  73. package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
  74. package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
  75. package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
  76. package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
  77. package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
  78. package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
  79. package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
  80. package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
  81. package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
  82. package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
  83. package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
  84. package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
  85. package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
  86. package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
  87. package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
  88. package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
  89. package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
  90. package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
  91. package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
  92. package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
  93. package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
  94. package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
  95. package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
  96. package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
  97. package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
  98. package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
  99. package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
  100. package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
  101. package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
  102. package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
  103. package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
  104. package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
  105. package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
  106. package/Sources/Combine/Publishers/Publishers.swift +13 -0
  107. package/Sources/Combine/Publishers/Record.swift +237 -0
  108. package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
  109. package/Sources/Combine/Result.swift +46 -0
  110. package/Sources/Combine/Scheduler.swift +89 -0
  111. package/Sources/Combine/Schedulers.swift +211 -0
  112. package/Sources/Combine/Subject+Void.swift +17 -0
  113. package/Sources/Combine/Subscriber+Void.swift +20 -0
  114. package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
  115. package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
  116. package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
  117. package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
  118. package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
  119. package/Sources/Combine/Subscription.swift +22 -0
  120. package/Sources/Combine/Subscriptions.swift +42 -0
  121. package/Sources/Combine/SwiftUIObservation.swift +10 -0
  122. package/Sources/Combine/_Introspection.swift +107 -0
  123. package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
  124. package/Sources/Compression/Compression.swift +365 -0
  125. package/Sources/Compression/Deflate.swift +407 -0
  126. package/Sources/Compression/Zlib.swift +179 -0
  127. package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
  128. package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
  129. package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
  130. package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
  131. package/Sources/CoreImage/CIColor.swift +41 -0
  132. package/Sources/CoreImage/CIContext.swift +31 -0
  133. package/Sources/CoreImage/CIDetector.swift +57 -0
  134. package/Sources/CoreImage/CIFilter.swift +243 -0
  135. package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
  136. package/Sources/CoreImage/CIImage.swift +162 -0
  137. package/Sources/CoreImage/QRCode.swift +393 -0
  138. package/Sources/CoreLocation/Coordinate.swift +30 -0
  139. package/Sources/CoreLocation/Location.swift +65 -0
  140. package/Sources/CoreML/Evaluation.swift +414 -0
  141. package/Sources/CoreML/FeatureValue.swift +266 -0
  142. package/Sources/CoreML/Model.swift +269 -0
  143. package/Sources/CoreML/MultiArray.swift +92 -0
  144. package/Sources/CoreML/Specification.swift +233 -0
  145. package/Sources/CoreText/CoreText.swift +64 -0
  146. package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
  147. package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
  148. package/Sources/CryptoKit/CryptoKit.swift +375 -0
  149. package/Sources/CryptoKit/Curve25519.swift +317 -0
  150. package/Sources/CryptoKit/P256.swift +321 -0
  151. package/Sources/FoundationBridge/AppStorage.swift +165 -0
  152. package/Sources/FoundationBridge/AssetResources.swift +90 -0
  153. package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
  154. package/Sources/FoundationBridge/AsyncImage.swift +116 -0
  155. package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
  156. package/Sources/{_FoundationCommon → FoundationBridge}/Bundle.swift +41 -4
  157. package/Sources/FoundationBridge/CombineExports.swift +8 -0
  158. package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
  159. package/Sources/FoundationBridge/Dispatch.swift +458 -0
  160. package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
  161. package/Sources/FoundationBridge/FileImporter.swift +128 -0
  162. package/Sources/FoundationBridge/FileSystem.swift +68 -0
  163. package/Sources/FoundationBridge/FoundationBridge.swift +24 -72
  164. package/Sources/FoundationBridge/HostResolution.swift +31 -0
  165. package/Sources/FoundationBridge/ItemProvider.swift +655 -0
  166. package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
  167. package/Sources/FoundationBridge/Links.swift +127 -0
  168. package/Sources/FoundationBridge/ListFormatter.swift +32 -0
  169. package/Sources/FoundationBridge/Localization.swift +149 -0
  170. package/Sources/FoundationBridge/Locks.swift +50 -0
  171. package/Sources/FoundationBridge/Markdown.swift +527 -0
  172. package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
  173. package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
  174. package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
  175. package/Sources/FoundationBridge/Operation.swift +195 -0
  176. package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
  177. package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
  178. package/Sources/FoundationBridge/SceneStorage.swift +78 -0
  179. package/Sources/FoundationBridge/SecurityExports.swift +8 -0
  180. package/Sources/FoundationBridge/Selector.swift +226 -0
  181. package/Sources/FoundationBridge/StringComparators.swift +17 -0
  182. package/Sources/FoundationBridge/Table.swift +211 -0
  183. package/Sources/FoundationBridge/TextAttributes.swift +42 -0
  184. package/Sources/FoundationBridge/Timer.swift +6 -1
  185. package/Sources/FoundationBridge/URLSession.swift +718 -0
  186. package/Sources/{_FoundationCommon → FoundationBridge}/UserDefaults.swift +17 -4
  187. package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
  188. package/Sources/FoundationBridge/WebSocket.swift +187 -0
  189. package/Sources/FoundationModels/FoundationModels.swift +1098 -0
  190. package/Sources/ImageIO/GIF.swift +72 -0
  191. package/Sources/ImageIO/ImageIO.swift +248 -0
  192. package/Sources/ImageIO/ImageTypes.swift +28 -0
  193. package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
  194. package/Sources/LocalAuthentication/LAContext.swift +86 -0
  195. package/Sources/MapKit/Geometry.swift +223 -0
  196. package/Sources/MapKit/Map.swift +638 -0
  197. package/Sources/MapKit/MapView.swift +229 -0
  198. package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
  199. package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
  200. package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
  201. package/Sources/OSLog/OSLog.swift +6 -0
  202. package/Sources/Photos/Photos.swift +572 -0
  203. package/Sources/PhotosUI/PhotosPicker.swift +248 -0
  204. package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
  205. package/Sources/QuickLook/QuickLook.swift +168 -0
  206. package/Sources/SafariServices/SafariServices.swift +106 -0
  207. package/Sources/Security/Security.swift +332 -0
  208. package/Sources/StoreKit/AppStore.swift +207 -0
  209. package/Sources/StoreKit/Products.swift +280 -0
  210. package/Sources/StoreKit/RequestReview.swift +28 -0
  211. package/Sources/StoreKit/StoreKit1.swift +486 -0
  212. package/Sources/StoreKit/StoreViews.swift +428 -0
  213. package/Sources/StoreKit/Transactions.swift +197 -0
  214. package/Sources/SwiftData/Macros.swift +58 -0
  215. package/Sources/SwiftData/ModelActor.swift +38 -0
  216. package/Sources/SwiftData/ModelContainer.swift +129 -0
  217. package/Sources/SwiftData/ModelContext.swift +451 -0
  218. package/Sources/SwiftData/PersistentModel.swift +238 -0
  219. package/Sources/SwiftData/Properties.swift +261 -0
  220. package/Sources/SwiftData/Query.swift +256 -0
  221. package/Sources/SwiftData/Schema.swift +192 -0
  222. package/Sources/SwiftData/Store.swift +146 -0
  223. package/Sources/SwiftData/StringPredicates.swift +125 -0
  224. package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
  225. package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
  226. package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
  227. package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
  228. package/Sources/SwiftDataMacros/Plugin.swift +18 -0
  229. package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
  230. package/Sources/SwiftUI/API/Accessibility.swift +55 -6
  231. package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
  232. package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
  233. package/Sources/SwiftUI/API/Alert.swift +1 -1
  234. package/Sources/SwiftUI/API/AlignmentGuides.swift +68 -0
  235. package/Sources/SwiftUI/API/Animation.swift +37 -5
  236. package/Sources/SwiftUI/API/App.swift +31 -1
  237. package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
  238. package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
  239. package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
  240. package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
  241. package/Sources/SwiftUI/API/Canvas.swift +337 -0
  242. package/Sources/SwiftUI/API/Color.swift +104 -28
  243. package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
  244. package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
  245. package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
  246. package/Sources/SwiftUI/API/Commands.swift +106 -0
  247. package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
  248. package/Sources/SwiftUI/API/ContentShape.swift +33 -0
  249. package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
  250. package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
  251. package/Sources/SwiftUI/API/Controls.swift +59 -27
  252. package/Sources/SwiftUI/API/CustomLayout.swift +49 -10
  253. package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
  254. package/Sources/SwiftUI/API/Decorations.swift +1 -1
  255. package/Sources/SwiftUI/API/EditMode.swift +25 -82
  256. package/Sources/SwiftUI/API/Effects.swift +125 -10
  257. package/Sources/SwiftUI/API/Entry.swift +8 -0
  258. package/Sources/SwiftUI/API/Environment.swift +100 -9
  259. package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
  260. package/Sources/SwiftUI/API/Focus.swift +11 -3
  261. package/Sources/SwiftUI/API/Gauge.swift +26 -10
  262. package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
  263. package/Sources/SwiftUI/API/GeometryReader.swift +13 -2
  264. package/Sources/SwiftUI/API/GestureState.swift +65 -0
  265. package/Sources/SwiftUI/API/Gestures.swift +1 -1
  266. package/Sources/SwiftUI/API/Glass.swift +127 -0
  267. package/Sources/SwiftUI/API/Grid.swift +1 -1
  268. package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
  269. package/Sources/SwiftUI/API/KeyPress.swift +54 -0
  270. package/Sources/SwiftUI/API/LabelStyle.swift +13 -6
  271. package/Sources/SwiftUI/API/Layout.swift +71 -12
  272. package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
  273. package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
  274. package/Sources/SwiftUI/API/Lists.swift +61 -6
  275. package/Sources/SwiftUI/API/Menu.swift +8 -1
  276. package/Sources/SwiftUI/API/Modifiers.swift +88 -12
  277. package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
  278. package/Sources/SwiftUI/API/Namespace.swift +44 -0
  279. package/Sources/SwiftUI/API/Navigation.swift +24 -9
  280. package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
  281. package/Sources/SwiftUI/API/ObservableObject.swift +16 -2
  282. package/Sources/SwiftUI/API/Path.swift +543 -0
  283. package/Sources/SwiftUI/API/Phase8Controls.swift +48 -31
  284. package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
  285. package/Sources/SwiftUI/API/Picker.swift +14 -4
  286. package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
  287. package/Sources/SwiftUI/API/Popover.swift +41 -0
  288. package/Sources/SwiftUI/API/Preferences.swift +262 -0
  289. package/Sources/SwiftUI/API/Presentation.swift +17 -4
  290. package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
  291. package/Sources/SwiftUI/API/Primitives.swift +168 -39
  292. package/Sources/SwiftUI/API/Publishers.swift +4 -4
  293. package/Sources/SwiftUI/API/Redaction.swift +75 -0
  294. package/Sources/SwiftUI/API/RowActions.swift +3 -2
  295. package/Sources/SwiftUI/API/Scenes.swift +131 -0
  296. package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
  297. package/Sources/SwiftUI/API/ScrollTargets.swift +3 -3
  298. package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
  299. package/Sources/SwiftUI/API/SectionSupplements.swift +86 -0
  300. package/Sources/SwiftUI/API/Shape.swift +214 -0
  301. package/Sources/SwiftUI/API/ShapeStyle.swift +187 -8
  302. package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
  303. package/Sources/SwiftUI/API/Sharing.swift +193 -0
  304. package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
  305. package/Sources/SwiftUI/API/State.swift +18 -1
  306. package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
  307. package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
  308. package/Sources/SwiftUI/API/TabContent.swift +841 -0
  309. package/Sources/SwiftUI/API/Table.swift +382 -0
  310. package/Sources/SwiftUI/API/Tabs.swift +148 -4
  311. package/Sources/SwiftUI/API/Tasks.swift +2 -2
  312. package/Sources/SwiftUI/API/Text.swift +386 -0
  313. package/Sources/SwiftUI/API/TextDates.swift +61 -0
  314. package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
  315. package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
  316. package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
  317. package/Sources/SwiftUI/API/Toolbar.swift +52 -16
  318. package/Sources/SwiftUI/API/Transfer.swift +145 -0
  319. package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
  320. package/Sources/SwiftUI/API/Video.swift +64 -0
  321. package/Sources/SwiftUI/API/View.swift +46 -2
  322. package/Sources/SwiftUI/API/ViewModifier.swift +4 -1
  323. package/Sources/SwiftUI/API/VisualEffect.swift +74 -1
  324. package/Sources/SwiftUI/API/Windows.swift +25 -0
  325. package/Sources/SwiftUI/Charts/Axis.swift +7 -1
  326. package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
  327. package/Sources/SwiftUI/Charts/Chart.swift +17 -3
  328. package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
  329. package/Sources/SwiftUI/Localization/Localization.swift +524 -0
  330. package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
  331. package/Sources/SwiftUI/Runtime/Executor.swift +2 -0
  332. package/Sources/SwiftUI/Runtime/Exports.swift +37 -1
  333. package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
  334. package/Sources/SwiftUI/Runtime/JSON.swift +76 -4
  335. package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
  336. package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
  337. package/Sources/SwiftUI/Runtime/Ops.swift +58 -12
  338. package/Sources/SwiftUI/Runtime/Reconciler.swift +10 -1
  339. package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
  340. package/Sources/SwiftUI/Runtime/Runtime.swift +977 -198
  341. package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
  342. package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
  343. package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
  344. package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
  345. package/Sources/Symbols/Symbols.swift +25 -0
  346. package/Sources/Translation/Translation.swift +423 -0
  347. package/Sources/UIKit/Activity.swift +213 -0
  348. package/Sources/UIKit/Alerts.swift +69 -0
  349. package/Sources/UIKit/AppDelegate.swift +222 -0
  350. package/Sources/UIKit/Appearance.swift +84 -0
  351. package/Sources/UIKit/ColorConversions.swift +70 -0
  352. package/Sources/UIKit/Controls.swift +225 -0
  353. package/Sources/UIKit/Device.swift +200 -0
  354. package/Sources/UIKit/Feedback.swift +65 -0
  355. package/Sources/UIKit/Font.swift +307 -0
  356. package/Sources/UIKit/Graphics.swift +204 -0
  357. package/Sources/UIKit/HostingController.swift +185 -0
  358. package/Sources/UIKit/Identity.swift +24 -0
  359. package/Sources/UIKit/Introspectable.swift +510 -0
  360. package/Sources/UIKit/Pasteboard.swift +363 -0
  361. package/Sources/UIKit/PhotoAlbum.swift +81 -0
  362. package/Sources/UIKit/RemoteNotifications.swift +15 -0
  363. package/Sources/UIKit/Representable.swift +288 -0
  364. package/Sources/UIKit/SafeArea.swift +12 -0
  365. package/Sources/UIKit/SceneDelegates.swift +132 -0
  366. package/Sources/UIKit/Scenes.swift +40 -0
  367. package/Sources/UIKit/ScrollView.swift +157 -0
  368. package/Sources/UIKit/ShortcutItems.swift +67 -0
  369. package/Sources/UIKit/SymbolConfiguration.swift +124 -0
  370. package/Sources/UIKit/TargetAction.swift +123 -0
  371. package/Sources/UIKit/TextPaste.swift +161 -0
  372. package/Sources/UIKit/TextView.swift +538 -0
  373. package/Sources/UIKit/UIKit.swift +292 -0
  374. package/Sources/UIKit/UIView.swift +855 -0
  375. package/Sources/UIKit/ViewTranslation.swift +311 -0
  376. package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
  377. package/Sources/UserNotifications/Content.swift +370 -0
  378. package/Sources/UserNotifications/NotificationCenter.swift +309 -0
  379. package/Sources/WeatherKit/WeatherKit.swift +228 -0
  380. package/Sources/WebKit/WebKit.swift +245 -0
  381. package/Sources/os/os.swift +376 -0
  382. package/Sources/zlib/zlib.swift +6 -0
  383. package/index.d.ts +1 -1
  384. package/index.mjs +2 -2
  385. package/manifest.d.mts +2 -0
  386. package/manifest.mjs +41 -0
  387. package/package.json +5 -3
  388. package/sync-sources.mjs +21 -7
  389. package/Sources/FoundationLite/Common.swift +0 -3
  390. package/Sources/FoundationLite/FoundationLite.swift +0 -171
  391. package/Sources/FoundationLite/Interaction.swift +0 -146
  392. package/Sources/FoundationLite/Timer.swift +0 -48
  393. package/Sources/_FoundationCommon/_FoundationCommon.swift +0 -10
@@ -0,0 +1,533 @@
1
+ //
2
+ // Publishers.FlatMap.swift
3
+ //
4
+ // Created by Eric Patey on 16.08.2019.
5
+ //
6
+
7
+ extension Publisher {
8
+
9
+ /// Transforms all elements from an upstream publisher into a new publisher up to
10
+ /// a maximum number of publishers you specify.
11
+ ///
12
+ /// OpenCombine‘s `flatMap(maxPublishers:_:)` operator performs a similar function
13
+ /// to the `flatMap(_:)` operator in the Swift standard library, but turns
14
+ /// the elements from one kind of publisher into a new publisher that is sent
15
+ /// to subscribers. Use `flatMap(maxPublishers:_:)` when you want to create a new
16
+ /// series of events for downstream subscribers based on the received value.
17
+ /// The closure creates the new `Publisher` based on the received value.
18
+ /// The new `Publisher` can emit more than one event, and successful completion of
19
+ /// the new `Publisher` does not complete the overall stream.
20
+ /// Failure of the new `Publisher` will fail the overall stream.
21
+ ///
22
+ /// In the example below, a `PassthroughSubject` publishes `WeatherStation` elements.
23
+ /// The `flatMap(maxPublishers:_:)` receives each element, creates a `URL` from it,
24
+ /// and produces a new `URLSession.DataTaskPublisher`, which will publish the data
25
+ /// loaded from that `URL`.
26
+ ///
27
+ /// public struct WeatherStation {
28
+ /// public let stationID: String
29
+ /// }
30
+ ///
31
+ /// var weatherPublisher = PassthroughSubject<WeatherStation, URLError>()
32
+ ///
33
+ /// cancellable = weatherPublisher
34
+ /// .flatMap { station -> URLSession.DataTaskPublisher in
35
+ /// let url = URL(string: """
36
+ /// https://weatherapi.example.com/stations/\(station.stationID)\
37
+ /// /observations/latest
38
+ /// """)!
39
+ /// return URLSession.shared.dataTaskPublisher(for: url)
40
+ /// }
41
+ /// .sink(
42
+ /// receiveCompletion: { completion in
43
+ /// // Handle publisher completion (normal or error).
44
+ /// },
45
+ /// receiveValue: {
46
+ /// // Process the received data.
47
+ /// }
48
+ /// )
49
+ ///
50
+ /// weatherPublisher.send(WeatherStation(stationID: "KSFO")) // San Francisco, CA
51
+ /// weatherPublisher.send(WeatherStation(stationID: "EGLC")) // London, UK
52
+ /// weatherPublisher.send(WeatherStation(stationID: "ZBBB")) // Beijing, CN
53
+ ///
54
+ /// - Parameters:
55
+ /// - maxPublishers: Specifies the maximum number of concurrent publisher
56
+ /// subscriptions, or `Subscribers.Demand.unlimited` if unspecified.
57
+ /// - transform: A closure that takes an element as a parameter and returns
58
+ /// a publisher that produces elements of that type.
59
+ /// - Returns: A publisher that transforms elements from an upstream publisher into
60
+ /// a publisher of that element’s type.
61
+ public func flatMap<Result, Child: Publisher>(
62
+ maxPublishers: Subscribers.Demand = .unlimited,
63
+ _ transform: @escaping (Output) -> Child
64
+ ) -> Publishers.FlatMap<Child, Self>
65
+ where Result == Child.Output, Failure == Child.Failure {
66
+ return .init(upstream: self,
67
+ maxPublishers: maxPublishers,
68
+ transform: transform)
69
+ }
70
+ }
71
+
72
+ extension Publisher where Failure == Never {
73
+
74
+ /// Transforms all elements from an upstream publisher into a new publisher up to
75
+ /// a maximum number of publishers you specify.
76
+ ///
77
+ /// - Parameters:
78
+ /// - maxPublishers: Specifies the maximum number of concurrent publisher
79
+ /// subscriptions, or `Subscribers.Demand.unlimited` if unspecified.
80
+ /// - transform: A closure that takes an element as a parameter and returns
81
+ /// a publisher that produces elements of that type.
82
+ /// - Returns: A publisher that transforms elements from an upstream publisher into
83
+ /// a publisher of that element’s type.
84
+ public func flatMap<Child: Publisher>(
85
+ maxPublishers: Subscribers.Demand = .unlimited,
86
+ _ transform: @escaping (Output) -> Child
87
+ ) -> Publishers.FlatMap<Child, Publishers.SetFailureType<Self, Child.Failure>> {
88
+ return setFailureType(to: Child.Failure.self)
89
+ .flatMap(maxPublishers: maxPublishers, transform)
90
+ }
91
+
92
+ /// Transforms all elements from an upstream publisher into a new publisher up to
93
+ /// a maximum number of publishers you specify.
94
+ ///
95
+ /// - Parameters:
96
+ /// - maxPublishers: Specifies the maximum number of concurrent publisher
97
+ /// subscriptions, or `Subscribers.Demand.unlimited` if unspecified.
98
+ /// - transform: A closure that takes an element as a parameter and returns
99
+ /// a publisher that produces elements of that type.
100
+ /// - Returns: A publisher that transforms elements from an upstream publisher
101
+ /// into a publisher of that element’s type.
102
+ public func flatMap<Child: Publisher>(
103
+ maxPublishers: Subscribers.Demand = .unlimited,
104
+ _ transform: @escaping (Output) -> Child
105
+ ) -> Publishers.FlatMap<Child, Self> where Child.Failure == Never {
106
+ return .init(upstream: self, maxPublishers: maxPublishers, transform: transform)
107
+ }
108
+ }
109
+
110
+ extension Publisher {
111
+
112
+ /// Transforms all elements from an upstream publisher into a new publisher up to
113
+ /// a maximum number of publishers you specify.
114
+ ///
115
+ /// - Parameters:
116
+ /// - maxPublishers: Specifies the maximum number of concurrent publisher
117
+ /// subscriptions, or `Subscribers.Demand.unlimited` if unspecified.
118
+ /// - transform: A closure that takes an element as a parameter and returns
119
+ /// a publisher that produces elements of that type.
120
+ /// - Returns: A publisher that transforms elements from an upstream publisher into
121
+ /// a publisher of that element’s type.
122
+ public func flatMap<Child: Publisher>(
123
+ maxPublishers: Subscribers.Demand = .unlimited,
124
+ _ transform: @escaping (Output) -> Child
125
+ ) -> Publishers.FlatMap<Publishers.SetFailureType<Child, Failure>, Self>
126
+ where Child.Failure == Never
127
+ {
128
+ return flatMap(maxPublishers: maxPublishers) {
129
+ transform($0).setFailureType(to: Failure.self)
130
+ }
131
+ }
132
+ }
133
+
134
+ extension Publishers {
135
+
136
+ /// A publisher that transforms elements from an upstream publisher into a new
137
+ /// publisher.
138
+ public struct FlatMap<Child: Publisher, Upstream: Publisher>: Publisher
139
+ where Child.Failure == Upstream.Failure
140
+ {
141
+ public typealias Output = Child.Output
142
+
143
+ public typealias Failure = Upstream.Failure
144
+
145
+ public let upstream: Upstream
146
+
147
+ public let maxPublishers: Subscribers.Demand
148
+
149
+ public let transform: (Upstream.Output) -> Child
150
+
151
+ public init(upstream: Upstream, maxPublishers: Subscribers.Demand,
152
+ transform: @escaping (Upstream.Output) -> Child) {
153
+ self.upstream = upstream
154
+ self.maxPublishers = maxPublishers
155
+ self.transform = transform
156
+ }
157
+ public func receive<Downstream: Subscriber>(subscriber: Downstream)
158
+ where Child.Output == Downstream.Input, Upstream.Failure == Downstream.Failure
159
+ {
160
+ let outer = Outer(downstream: subscriber,
161
+ maxPublishers: maxPublishers,
162
+ map: transform)
163
+ subscriber.receive(subscription: outer)
164
+ upstream.subscribe(outer)
165
+ }
166
+ }
167
+ }
168
+
169
+ extension Publishers.FlatMap {
170
+ private final class Outer<Downstream: Subscriber>
171
+ : Subscriber,
172
+ Subscription,
173
+ CustomStringConvertible,
174
+ CustomReflectable,
175
+ CustomPlaygroundDisplayConvertible
176
+ where Downstream.Input == Child.Output, Downstream.Failure == Upstream.Failure
177
+ {
178
+ typealias Input = Upstream.Output
179
+ typealias Failure = Upstream.Failure
180
+
181
+ private typealias SubscriptionIndex = Int
182
+
183
+ /// All requests to this subscription should be made with the `outerLock`
184
+ /// acquired.
185
+ private var outerSubscription: Subscription?
186
+
187
+ /// The lock for requesting from `outerSubscription`.
188
+ private let outerLock = UnfairRecursiveLock.allocate()
189
+
190
+ /// The lock for modifying the state. All mutable state here should be
191
+ /// read and modified with this lock acquired.
192
+ /// The only exception is the `downstreamRecursive` field, which is guarded
193
+ /// by the `downstreamLock`.
194
+ private let lock = UnfairLock.allocate()
195
+
196
+ /// All the calls to the downstream subscriber should be made with this lock
197
+ /// acquired.
198
+ private let downstreamLock = UnfairRecursiveLock.allocate()
199
+
200
+ private let downstream: Downstream
201
+
202
+ private var downstreamDemand = Subscribers.Demand.none
203
+
204
+ /// This variable is set to `true` whenever we call `downstream.receive(_:)`,
205
+ /// and then set back to `false`.
206
+ private var downstreamRecursive = false
207
+
208
+ private var innerRecursive = false
209
+ private var subscriptions = [SubscriptionIndex : Subscription]()
210
+ private var nextInnerIndex: SubscriptionIndex = 0
211
+ private var pendingSubscriptions = 0
212
+ private var buffer = [(SubscriptionIndex, Child.Output)]()
213
+ private let maxPublishers: Subscribers.Demand
214
+ private let map: (Input) -> Child
215
+ private var cancelledOrCompleted = false
216
+ private var outerFinished = false
217
+
218
+ init(downstream: Downstream,
219
+ maxPublishers: Subscribers.Demand,
220
+ map: @escaping (Upstream.Output) -> Child) {
221
+ self.downstream = downstream
222
+ self.maxPublishers = maxPublishers
223
+ self.map = map
224
+ }
225
+
226
+ deinit {
227
+ outerLock.deallocate()
228
+ lock.deallocate()
229
+ downstreamLock.deallocate()
230
+ }
231
+
232
+ // MARK: - Subscriber
233
+
234
+ fileprivate func receive(subscription: Subscription) {
235
+ lock.lock()
236
+ guard outerSubscription == nil, !cancelledOrCompleted else {
237
+ lock.unlock()
238
+ subscription.cancel()
239
+ return
240
+ }
241
+ outerSubscription = subscription
242
+ lock.unlock()
243
+ subscription.request(maxPublishers)
244
+ }
245
+
246
+ fileprivate func receive(_ input: Input) -> Subscribers.Demand {
247
+ lock.lock()
248
+ let cancelledOrCompleted = self.cancelledOrCompleted
249
+ lock.unlock()
250
+ if cancelledOrCompleted {
251
+ return .none
252
+ }
253
+ let child = map(input)
254
+ lock.lock()
255
+ let innerIndex = nextInnerIndex
256
+ nextInnerIndex += 1
257
+ pendingSubscriptions += 1
258
+ lock.unlock()
259
+ child.subscribe(Side(index: innerIndex, inner: self))
260
+ return .none
261
+ }
262
+
263
+ fileprivate func receive(completion: Subscribers.Completion<Failure>) {
264
+ lock.lock()
265
+ outerSubscription = nil
266
+ outerFinished = true
267
+ switch completion {
268
+ case .finished:
269
+ releaseLockThenSendCompletionDownstreamIfNeeded(outerFinished: true)
270
+ return
271
+ case .failure:
272
+ let wasAlreadyCancelledOrCompleted = cancelledOrCompleted
273
+ cancelledOrCompleted = true
274
+ for (_, subscription) in subscriptions {
275
+ // Cancelling subscriptions with the lock acquired. Not good,
276
+ // but that's what Combine does. This code path is tested.
277
+ subscription.cancel()
278
+ }
279
+ subscriptions = [:]
280
+ lock.unlock()
281
+ if wasAlreadyCancelledOrCompleted {
282
+ return
283
+ }
284
+ downstreamLock.lock()
285
+ downstream.receive(completion: completion)
286
+ downstreamLock.unlock()
287
+ }
288
+ }
289
+
290
+ // MARK: - Subscription
291
+
292
+ fileprivate func request(_ demand: Subscribers.Demand) {
293
+ demand.assertNonZero()
294
+ if downstreamRecursive {
295
+ // downstreamRecursive being true means that downstreamLock
296
+ // is already acquired.
297
+ downstreamDemand += demand
298
+ return
299
+ }
300
+ lock.lock()
301
+ if cancelledOrCompleted {
302
+ lock.unlock()
303
+ return
304
+ }
305
+ if demand == .unlimited {
306
+ downstreamDemand = .unlimited
307
+ let buffer = self.buffer.take()
308
+ let subscriptions = self.subscriptions
309
+ lock.unlock()
310
+ downstreamLock.lock()
311
+ downstreamRecursive = true
312
+ for (_, childOutput) in buffer {
313
+ _ = downstream.receive(childOutput)
314
+ }
315
+ downstreamRecursive = false
316
+ downstreamLock.unlock()
317
+ for (_, subscription) in subscriptions {
318
+ subscription.request(.unlimited)
319
+ }
320
+ lock.lock()
321
+ } else {
322
+ downstreamDemand += demand
323
+ while !buffer.isEmpty && downstreamDemand > 0 {
324
+ // FIXME: This has quadratic complexity.
325
+ // This is what Combine does.
326
+ // Can we improve perfomance by using e. g. Deque instead of Array?
327
+ // Or array's cache locality makes this solution more efficient?
328
+ // Must benchmark before optimizing!
329
+ //
330
+ // https://www.cocoawithlove.com/blog/2016/09/22/deque.html
331
+ let (index, value) = buffer.removeFirst()
332
+ downstreamDemand -= 1
333
+ let subscription = subscriptions[index]
334
+ lock.unlock()
335
+ downstreamLock.lock()
336
+ downstreamRecursive = true
337
+ let additionalDemand = downstream.receive(value)
338
+ downstreamRecursive = false
339
+ downstreamLock.unlock()
340
+ if additionalDemand != .none {
341
+ lock.lock()
342
+ downstreamDemand += additionalDemand
343
+ lock.unlock()
344
+ }
345
+ if let subscription = subscription {
346
+ innerRecursive = true
347
+ subscription.request(.max(1))
348
+ innerRecursive = false
349
+ }
350
+ lock.lock()
351
+ }
352
+ }
353
+ releaseLockThenSendCompletionDownstreamIfNeeded(outerFinished: outerFinished)
354
+ }
355
+
356
+ fileprivate func cancel() {
357
+ lock.lock()
358
+ if cancelledOrCompleted {
359
+ lock.unlock()
360
+ return
361
+ }
362
+ cancelledOrCompleted = true
363
+ let subscriptions = self.subscriptions.take()
364
+ let outerSubscription = self.outerSubscription.take()
365
+ lock.unlock()
366
+ for (_, subscription) in subscriptions {
367
+ subscription.cancel()
368
+ }
369
+ // Combine doesn't acquire outerLock here. Weird.
370
+ outerSubscription?.cancel()
371
+ }
372
+
373
+ // MARK: - Reflection
374
+
375
+ fileprivate var description: String { return "FlatMap" }
376
+
377
+ fileprivate var customMirror: Mirror {
378
+ return Mirror(self, children: EmptyCollection())
379
+ }
380
+
381
+ fileprivate var playgroundDescription: Any { return description }
382
+
383
+ // MARK: - Private
384
+
385
+ private func receiveInner(subscription: Subscription,
386
+ _ index: SubscriptionIndex) {
387
+ lock.lock()
388
+ pendingSubscriptions -= 1
389
+ subscriptions[index] = subscription
390
+
391
+ let demand = downstreamDemand == .unlimited
392
+ ? Subscribers.Demand.unlimited
393
+ : .max(1)
394
+
395
+ lock.unlock()
396
+ subscription.request(demand)
397
+ }
398
+
399
+ private func receiveInner(_ input: Child.Output,
400
+ _ index: SubscriptionIndex) -> Subscribers.Demand {
401
+ lock.lock()
402
+ if downstreamDemand == .unlimited {
403
+ lock.unlock()
404
+ downstreamLock.lock()
405
+ downstreamRecursive = true
406
+ _ = downstream.receive(input)
407
+ downstreamRecursive = false
408
+ downstreamLock.unlock()
409
+ return .none
410
+ }
411
+ if downstreamDemand == .none || innerRecursive {
412
+ buffer.append((index, input))
413
+ lock.unlock()
414
+ return .none
415
+ }
416
+ downstreamDemand -= 1
417
+ lock.unlock()
418
+ downstreamLock.lock()
419
+ downstreamRecursive = true
420
+ let newDemand = downstream.receive(input)
421
+ downstreamRecursive = false
422
+ downstreamLock.unlock()
423
+ if newDemand > 0 {
424
+ lock.lock()
425
+ downstreamDemand += newDemand
426
+ lock.unlock()
427
+ }
428
+ return .max(1)
429
+ }
430
+
431
+ private func receiveInner(completion: Subscribers.Completion<Child.Failure>,
432
+ _ index: SubscriptionIndex) {
433
+ switch completion {
434
+ case .finished:
435
+ lock.lock()
436
+ subscriptions.removeValue(forKey: index)
437
+ let downstreamCompleted = releaseLockThenSendCompletionDownstreamIfNeeded(
438
+ outerFinished: outerFinished
439
+ )
440
+ if !downstreamCompleted {
441
+ requestOneMorePublisher()
442
+ }
443
+ case .failure:
444
+ lock.lock()
445
+ if cancelledOrCompleted {
446
+ lock.unlock()
447
+ return
448
+ }
449
+ cancelledOrCompleted = true
450
+ let subscriptions = self.subscriptions.take()
451
+ lock.unlock()
452
+ for (i, subscription) in subscriptions where i != index {
453
+ subscription.cancel()
454
+ }
455
+ downstreamLock.lock()
456
+ downstream.receive(completion: completion)
457
+ downstreamLock.unlock()
458
+ }
459
+ }
460
+
461
+ private func requestOneMorePublisher() {
462
+ if maxPublishers != .unlimited {
463
+ outerLock.lock()
464
+ outerSubscription?.request(.max(1))
465
+ outerLock.unlock()
466
+ }
467
+ }
468
+
469
+ /// - Precondition: `lock` is acquired
470
+ /// - Postcondition: `lock` is released
471
+ ///
472
+ /// - Returns: `true` if a completion was sent downstream
473
+ @discardableResult
474
+ private func releaseLockThenSendCompletionDownstreamIfNeeded(
475
+ outerFinished: Bool
476
+ ) -> Bool {
477
+ #if DEBUG
478
+ lock.assertOwner() // Sanity check
479
+ #endif
480
+ if !cancelledOrCompleted && outerFinished && buffer.isEmpty &&
481
+ subscriptions.count + pendingSubscriptions == 0 {
482
+ cancelledOrCompleted = true
483
+ lock.unlock()
484
+ downstreamLock.lock()
485
+ downstream.receive(completion: .finished)
486
+ downstreamLock.unlock()
487
+ return true
488
+ }
489
+
490
+ lock.unlock()
491
+ return false
492
+ }
493
+
494
+ // MARK: - Side
495
+
496
+ private struct Side: Subscriber,
497
+ CustomStringConvertible,
498
+ CustomReflectable,
499
+ CustomPlaygroundDisplayConvertible {
500
+ private let index: SubscriptionIndex
501
+ private let inner: Outer
502
+ fileprivate let combineIdentifier = CombineIdentifier()
503
+
504
+ fileprivate init(index: SubscriptionIndex, inner: Outer) {
505
+ self.index = index
506
+ self.inner = inner
507
+ }
508
+
509
+ fileprivate func receive(subscription: Subscription) {
510
+ inner.receiveInner(subscription: subscription, index)
511
+ }
512
+
513
+ fileprivate func receive(_ input: Child.Output) -> Subscribers.Demand {
514
+ return inner.receiveInner(input, index)
515
+ }
516
+
517
+ fileprivate func receive(completion: Subscribers.Completion<Child.Failure>) {
518
+ inner.receiveInner(completion: completion, index)
519
+ }
520
+
521
+ fileprivate var description: String { return "FlatMap" }
522
+
523
+ fileprivate var customMirror: Mirror {
524
+ let children = CollectionOfOne<Mirror.Child>(
525
+ ("parentSubscription", inner.combineIdentifier)
526
+ )
527
+ return Mirror(self, children: children)
528
+ }
529
+
530
+ fileprivate var playgroundDescription: Any { return description }
531
+ }
532
+ }
533
+ }