@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,407 @@
1
+ // DEFLATE (RFC 1951), the format behind `COMPRESSION_ZLIB` and zlib's
2
+ // `inflate`, computed in Swift: a complete decoder (stored, fixed and dynamic
3
+ // Huffman blocks) and an encoder that writes one fixed-Huffman block over a
4
+ // hash-chain LZ77 search (or stored blocks when that would be larger). The
5
+ // encoder's output is valid DEFLATE that any inflater reads; it is not as
6
+ // small as zlib's, which also builds dynamic Huffman tables. The zlib (RFC
7
+ // 1950) and gzip (RFC 1952) wrappers and their checksums are here too.
8
+
9
+ enum _Deflate {
10
+ enum Failure: Error, Equatable {
11
+ /// The input ended before the stream did: more input may complete it.
12
+ case truncated
13
+ /// The input is not a valid stream (or its checksum does not match).
14
+ case invalid
15
+ }
16
+
17
+ /// The wrapper around the DEFLATE data.
18
+ enum Format: Equatable {
19
+ /// Bare DEFLATE, as Apple's `COMPRESSION_ZLIB` and zlib's negative window bits.
20
+ case raw
21
+ /// RFC 1950: a two-byte header and an Adler-32 trailer.
22
+ case zlib
23
+ /// RFC 1952: a gzip member header and a CRC-32 and length trailer.
24
+ case gzip
25
+ /// zlib or gzip, whichever the header says (zlib's window bits + 32).
26
+ case automatic
27
+ }
28
+
29
+ // MARK: Decoding
30
+
31
+ /// Decodes one stream at the start of `input`; returns the output and the
32
+ /// index of the first byte after the stream (its trailer included).
33
+ static func inflate(_ input: [UInt8], format: Format = .raw) throws(Failure) -> (output: [UInt8], end: Int) {
34
+ var format = format
35
+ var start = 0
36
+ if format == .automatic {
37
+ guard input.count >= 2 else { throw .truncated }
38
+ format = input[0] == 0x1f && input[1] == 0x8b ? .gzip : .zlib
39
+ }
40
+ switch format {
41
+ case .zlib:
42
+ guard input.count >= 2 else { throw .truncated }
43
+ let cmf = Int(input[0]), flg = Int(input[1])
44
+ // Method 8 (deflate), a window of at most 32K, a valid check, no preset dictionary.
45
+ guard cmf & 0x0f == 8, cmf >> 4 <= 7, (cmf << 8 | flg) % 31 == 0, flg & 0x20 == 0 else { throw .invalid }
46
+ start = 2
47
+ case .gzip:
48
+ start = try gzipHeaderLength(input)
49
+ case .raw, .automatic:
50
+ break
51
+ }
52
+ var inflater = Inflater(input: input, position: start)
53
+ try inflater.run()
54
+ var end = inflater.position
55
+ let output = inflater.output
56
+ switch format {
57
+ case .zlib:
58
+ guard end + 4 <= input.count else { throw .truncated }
59
+ let expected = input[end..<end + 4].reduce(UInt32(0)) { $0 << 8 | UInt32($1) }
60
+ guard expected == adler32(output) else { throw .invalid }
61
+ end += 4
62
+ case .gzip:
63
+ guard end + 8 <= input.count else { throw .truncated }
64
+ let crc = littleEndian32(input, end), size = littleEndian32(input, end + 4)
65
+ guard crc == crc32(output), size == UInt32(truncatingIfNeeded: output.count) else { throw .invalid }
66
+ end += 8
67
+ case .raw, .automatic:
68
+ break
69
+ }
70
+ return (output, end)
71
+ }
72
+
73
+ static func littleEndian32(_ bytes: [UInt8], _ at: Int) -> UInt32 {
74
+ UInt32(bytes[at]) | UInt32(bytes[at + 1]) << 8 | UInt32(bytes[at + 2]) << 16 | UInt32(bytes[at + 3]) << 24
75
+ }
76
+
77
+ /// The length of the gzip member header at the start of `input`.
78
+ static func gzipHeaderLength(_ input: [UInt8]) throws(Failure) -> Int {
79
+ func need(_ count: Int) throws(Failure) { if count > input.count { throw .truncated } }
80
+ try need(10)
81
+ guard input[0] == 0x1f, input[1] == 0x8b, input[2] == 8 else { throw .invalid }
82
+ let flags = input[3]
83
+ var position = 10
84
+ if flags & 0x04 != 0 { // FEXTRA
85
+ try need(position + 2)
86
+ position += 2 + (Int(input[position]) | Int(input[position + 1]) << 8)
87
+ }
88
+ for flag: UInt8 in [0x08, 0x10] where flags & flag != 0 { // FNAME, FCOMMENT: zero-terminated
89
+ while true {
90
+ try need(position + 1)
91
+ position += 1
92
+ if input[position - 1] == 0 { break }
93
+ }
94
+ }
95
+ if flags & 0x02 != 0 { position += 2 } // FHCRC
96
+ try need(position)
97
+ return position
98
+ }
99
+
100
+ /// Length and distance bases and extra bits (RFC 1951, 3.2.5).
101
+ static let lengthBase: [Int] = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258]
102
+ static let lengthExtra: [Int] = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0]
103
+ static let distanceBase: [Int] = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577]
104
+ static let distanceExtra: [Int] = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13]
105
+ /// The order code length code lengths come in (RFC 1951, 3.2.7).
106
+ static let codeLengthOrder: [Int] = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]
107
+
108
+ /// A canonical Huffman code: how many codes each length has, and the
109
+ /// symbols in code order.
110
+ struct Huffman {
111
+ var counts = [Int](repeating: 0, count: 16)
112
+ var symbols: [Int]
113
+
114
+ init(lengths: ArraySlice<Int>) throws(Failure) {
115
+ for length in lengths { counts[length] += 1 }
116
+ counts[0] = 0
117
+ var left = 1
118
+ for length in 1...15 {
119
+ left = left << 1 - counts[length]
120
+ if left < 0 { throw .invalid } // over-subscribed
121
+ }
122
+ var offsets = [Int](repeating: 0, count: 16)
123
+ for length in 1..<15 { offsets[length + 1] = offsets[length] + counts[length] }
124
+ symbols = [Int](repeating: 0, count: lengths.count)
125
+ for (symbol, length) in lengths.enumerated() where length != 0 {
126
+ symbols[offsets[length]] = symbol
127
+ offsets[length] += 1
128
+ }
129
+ }
130
+
131
+ static let fixedLiterals = try! Huffman(lengths: ArraySlice((0..<288).map { $0 < 144 ? 8 : $0 < 256 ? 9 : $0 < 280 ? 7 : 8 }))
132
+ static let fixedDistances = try! Huffman(lengths: ArraySlice([Int](repeating: 5, count: 30)))
133
+ }
134
+
135
+ struct Inflater {
136
+ let input: [UInt8]
137
+ var position: Int
138
+ var bitBuffer = 0
139
+ var bitCount = 0
140
+ var output: [UInt8] = []
141
+
142
+ init(input: [UInt8], position: Int) {
143
+ self.input = input
144
+ self.position = position
145
+ output.reserveCapacity(input.count * 3)
146
+ }
147
+
148
+ mutating func bits(_ count: Int) throws(Failure) -> Int {
149
+ while bitCount < count {
150
+ guard position < input.count else { throw .truncated }
151
+ bitBuffer |= Int(input[position]) << bitCount
152
+ position += 1
153
+ bitCount += 8
154
+ }
155
+ let value = bitBuffer & (1 << count - 1)
156
+ bitBuffer >>= count
157
+ bitCount -= count
158
+ return value
159
+ }
160
+
161
+ /// Reads one symbol, a bit at a time (codes are stored most significant bit first).
162
+ mutating func decode(_ huffman: Huffman) throws(Failure) -> Int {
163
+ var code = 0, first = 0, index = 0
164
+ for length in 1...15 {
165
+ code |= try bits(1)
166
+ let count = huffman.counts[length]
167
+ if code - first < count { return huffman.symbols[index + code - first] }
168
+ index += count
169
+ first = (first + count) << 1
170
+ code <<= 1
171
+ }
172
+ throw .invalid
173
+ }
174
+
175
+ mutating func run() throws(Failure) {
176
+ var last = false
177
+ while !last {
178
+ last = try bits(1) == 1
179
+ switch try bits(2) {
180
+ case 0: try stored()
181
+ case 1: try codes(Huffman.fixedLiterals, Huffman.fixedDistances)
182
+ case 2: try dynamic()
183
+ default: throw .invalid
184
+ }
185
+ }
186
+ // The stream ends on a byte boundary; unread whole bytes go back to the input.
187
+ position -= bitCount / 8
188
+ }
189
+
190
+ mutating func stored() throws(Failure) {
191
+ bitBuffer = 0
192
+ bitCount = 0
193
+ guard position + 4 <= input.count else { throw .truncated }
194
+ let length = Int(input[position]) | Int(input[position + 1]) << 8
195
+ let complement = Int(input[position + 2]) | Int(input[position + 3]) << 8
196
+ guard length == ~complement & 0xffff else { throw .invalid }
197
+ position += 4
198
+ guard position + length <= input.count else { throw .truncated }
199
+ output.append(contentsOf: input[position..<position + length])
200
+ position += length
201
+ }
202
+
203
+ mutating func dynamic() throws(Failure) {
204
+ let literalCount = try bits(5) + 257
205
+ let distanceCount = try bits(5) + 1
206
+ let codeLengthCount = try bits(4) + 4
207
+ guard literalCount <= 286, distanceCount <= 30 else { throw .invalid }
208
+ var lengths = [Int](repeating: 0, count: 19)
209
+ for index in 0..<codeLengthCount { lengths[_Deflate.codeLengthOrder[index]] = try bits(3) }
210
+ let lengthCode = try Huffman(lengths: lengths[...])
211
+ lengths = []
212
+ lengths.reserveCapacity(literalCount + distanceCount)
213
+ while lengths.count < literalCount + distanceCount {
214
+ let symbol = try decode(lengthCode)
215
+ if symbol < 16 {
216
+ lengths.append(symbol)
217
+ continue
218
+ }
219
+ var value = 0, repeats: Int
220
+ switch symbol {
221
+ case 16:
222
+ guard let previous = lengths.last else { throw .invalid }
223
+ value = previous
224
+ repeats = try 3 + bits(2)
225
+ case 17: repeats = try 3 + bits(3)
226
+ default: repeats = try 11 + bits(7)
227
+ }
228
+ guard lengths.count + repeats <= literalCount + distanceCount else { throw .invalid }
229
+ lengths.append(contentsOf: repeatElement(value, count: repeats))
230
+ }
231
+ guard lengths[256] != 0 else { throw .invalid } // no end-of-block code
232
+ try codes(Huffman(lengths: lengths[0..<literalCount]), Huffman(lengths: lengths[literalCount...]))
233
+ }
234
+
235
+ mutating func codes(_ literals: Huffman, _ distances: Huffman) throws(Failure) {
236
+ while true {
237
+ let symbol = try decode(literals)
238
+ if symbol < 256 {
239
+ output.append(UInt8(symbol))
240
+ continue
241
+ }
242
+ if symbol == 256 { return }
243
+ let lengthIndex = symbol - 257
244
+ guard lengthIndex < 29 else { throw .invalid }
245
+ let length = try _Deflate.lengthBase[lengthIndex] + bits(_Deflate.lengthExtra[lengthIndex])
246
+ let distanceIndex = try decode(distances)
247
+ guard distanceIndex < 30 else { throw .invalid }
248
+ let distance = try _Deflate.distanceBase[distanceIndex] + bits(_Deflate.distanceExtra[distanceIndex])
249
+ guard distance <= output.count else { throw .invalid }
250
+ let from = output.count - distance
251
+ for offset in 0..<length { output.append(output[from + offset]) }
252
+ }
253
+ }
254
+ }
255
+
256
+ // MARK: Encoding
257
+
258
+ /// Encodes `input` as raw DEFLATE.
259
+ static func deflate(_ input: [UInt8]) -> [UInt8] {
260
+ var writer = BitWriter()
261
+ writer.write(1, 1) // final block
262
+ writer.write(1, 2) // fixed Huffman codes
263
+ let count = input.count
264
+ var head = [Int](repeating: -1, count: 1 << 15)
265
+ var previous = [Int](repeating: -1, count: count)
266
+ func hash(_ at: Int) -> Int {
267
+ (Int(input[at]) << 10 ^ Int(input[at + 1]) << 5 ^ Int(input[at + 2])) & 0x7fff
268
+ }
269
+ func insert(_ at: Int) {
270
+ guard at + 2 < count else { return }
271
+ let key = hash(at)
272
+ previous[at] = head[key]
273
+ head[key] = at
274
+ }
275
+ var position = 0
276
+ while position < count {
277
+ var bestLength = 0, bestDistance = 0
278
+ if position + 2 < count {
279
+ var candidate = head[hash(position)]
280
+ var chain = 64
281
+ let limit = min(258, count - position)
282
+ while candidate >= 0, position - candidate <= 32768, chain > 0 {
283
+ var length = 0
284
+ while length < limit, input[candidate + length] == input[position + length] { length += 1 }
285
+ if length > bestLength {
286
+ bestLength = length
287
+ bestDistance = position - candidate
288
+ if length == limit { break }
289
+ }
290
+ candidate = previous[candidate]
291
+ chain -= 1
292
+ }
293
+ }
294
+ if bestLength >= 3 {
295
+ writer.writeLength(bestLength)
296
+ writer.writeDistance(bestDistance)
297
+ for at in position..<position + bestLength { insert(at) }
298
+ position += bestLength
299
+ } else {
300
+ writer.writeLiteral(Int(input[position]))
301
+ insert(position)
302
+ position += 1
303
+ }
304
+ }
305
+ writer.writeLiteral(256)
306
+ writer.flush()
307
+ // Incompressible input: stored blocks are at most 5 bytes per 64K larger than the input.
308
+ if writer.bytes.count > count + 5 * (count / 65535 + 1) { return stored(input) }
309
+ return writer.bytes
310
+ }
311
+
312
+ /// `input` in stored (uncompressed) blocks.
313
+ static func stored(_ input: [UInt8]) -> [UInt8] {
314
+ var output: [UInt8] = []
315
+ output.reserveCapacity(input.count + 5 * (input.count / 65535 + 1))
316
+ var position = 0
317
+ repeat {
318
+ let length = min(65535, input.count - position)
319
+ let final: UInt8 = position + length == input.count ? 1 : 0
320
+ output += [final, UInt8(length & 0xff), UInt8(length >> 8), UInt8(~length & 0xff), UInt8(~length >> 8 & 0xff)]
321
+ output += input[position..<position + length]
322
+ position += length
323
+ } while position < input.count
324
+ return output
325
+ }
326
+
327
+ struct BitWriter {
328
+ var bytes: [UInt8] = []
329
+ var buffer = 0
330
+ var count = 0
331
+
332
+ mutating func write(_ value: Int, _ bits: Int) {
333
+ buffer |= value << count
334
+ count += bits
335
+ while count >= 8 {
336
+ bytes.append(UInt8(buffer & 0xff))
337
+ buffer >>= 8
338
+ count -= 8
339
+ }
340
+ }
341
+
342
+ /// Writes a Huffman code, most significant bit first.
343
+ mutating func writeCode(_ code: Int, _ bits: Int) {
344
+ var reversed = 0
345
+ for bit in 0..<bits { reversed |= (code >> bit & 1) << (bits - 1 - bit) }
346
+ write(reversed, bits)
347
+ }
348
+
349
+ mutating func writeLiteral(_ symbol: Int) {
350
+ switch symbol {
351
+ case 0..<144: writeCode(0x30 + symbol, 8)
352
+ case 144..<256: writeCode(0x190 + symbol - 144, 9)
353
+ case 256..<280: writeCode(symbol - 256, 7)
354
+ default: writeCode(0xc0 + symbol - 280, 8)
355
+ }
356
+ }
357
+
358
+ mutating func writeLength(_ length: Int) {
359
+ var index = 28
360
+ while _Deflate.lengthBase[index] > length { index -= 1 }
361
+ writeLiteral(257 + index)
362
+ write(length - _Deflate.lengthBase[index], _Deflate.lengthExtra[index])
363
+ }
364
+
365
+ mutating func writeDistance(_ distance: Int) {
366
+ var index = 29
367
+ while _Deflate.distanceBase[index] > distance { index -= 1 }
368
+ writeCode(index, 5)
369
+ write(distance - _Deflate.distanceBase[index], _Deflate.distanceExtra[index])
370
+ }
371
+
372
+ mutating func flush() {
373
+ if count > 0 { write(0, 8 - count) }
374
+ }
375
+ }
376
+
377
+ // MARK: Checksums
378
+
379
+ static func adler32(_ bytes: [UInt8], _ start: UInt32 = 1) -> UInt32 {
380
+ var a = start & 0xffff, b = start >> 16
381
+ var index = 0
382
+ while index < bytes.count {
383
+ // 5552 bytes is the most that cannot overflow before the modulo.
384
+ let end = min(index + 5552, bytes.count)
385
+ while index < end {
386
+ a += UInt32(bytes[index])
387
+ b += a
388
+ index += 1
389
+ }
390
+ a %= 65521
391
+ b %= 65521
392
+ }
393
+ return b << 16 | a
394
+ }
395
+
396
+ static let crcTable: [UInt32] = (0..<256).map { (n: UInt32) in
397
+ var c = n
398
+ for _ in 0..<8 { c = c & 1 != 0 ? 0xedb8_8320 ^ c >> 1 : c >> 1 }
399
+ return c
400
+ }
401
+
402
+ static func crc32(_ bytes: [UInt8], _ start: UInt32 = 0) -> UInt32 {
403
+ var crc = ~start
404
+ for byte in bytes { crc = crcTable[Int((crc ^ UInt32(byte)) & 0xff)] ^ crc >> 8 }
405
+ return ~crc
406
+ }
407
+ }
@@ -0,0 +1,179 @@
1
+ // zlib's decompression API (zlib.h), as Swift code calls it after
2
+ // `import zlib`: `inflateInit2_` / `inflate` / `inflateEnd` over a
3
+ // `z_stream`, decoding zlib, gzip and raw DEFLATE streams for real with the
4
+ // decoder in Deflate.swift. RevenueCat gunzips its container elements this
5
+ // way. As with Compression's streams, the output comes once the input holds
6
+ // the whole stream (Swift has no partial-block state to resume from), then
7
+ // in as many pieces as the caller's buffers need. There is no `deflate`:
8
+ // nothing that builds for the browser compresses through zlib yet.
9
+
10
+ /// zlib's byte and size types.
11
+ public typealias Bytef = UInt8
12
+ public typealias uInt = UInt32
13
+ public typealias uLong = UInt
14
+ public typealias voidpf = UnsafeMutableRawPointer
15
+ public typealias alloc_func = @convention(c) (voidpf?, uInt, uInt) -> voidpf?
16
+ public typealias free_func = @convention(c) (voidpf?, voidpf?) -> Void
17
+
18
+ /// The version the API is declared after (Apple's SDKs ship 1.2.12).
19
+ public let ZLIB_VERSION = "1.2.12"
20
+ public let ZLIB_VERNUM: Int32 = 0x12c0
21
+ /// The largest window, 32K: `MAX_WBITS + 16` asks for gzip, `+ 32` for
22
+ /// either header, a negative value for raw DEFLATE.
23
+ public let MAX_WBITS: Int32 = 15
24
+ public let MAX_MEM_LEVEL: Int32 = 9
25
+ public let Z_DEFLATED: Int32 = 8
26
+
27
+ public let Z_NO_FLUSH: Int32 = 0
28
+ public let Z_PARTIAL_FLUSH: Int32 = 1
29
+ public let Z_SYNC_FLUSH: Int32 = 2
30
+ public let Z_FULL_FLUSH: Int32 = 3
31
+ public let Z_FINISH: Int32 = 4
32
+ public let Z_BLOCK: Int32 = 5
33
+ public let Z_TREES: Int32 = 6
34
+
35
+ public let Z_OK: Int32 = 0
36
+ public let Z_STREAM_END: Int32 = 1
37
+ public let Z_NEED_DICT: Int32 = 2
38
+ public let Z_ERRNO: Int32 = -1
39
+ public let Z_STREAM_ERROR: Int32 = -2
40
+ public let Z_DATA_ERROR: Int32 = -3
41
+ public let Z_MEM_ERROR: Int32 = -4
42
+ public let Z_BUF_ERROR: Int32 = -5
43
+ public let Z_VERSION_ERROR: Int32 = -6
44
+
45
+ /// A stream in progress, as zlib.h declares it. The allocator fields are
46
+ /// accepted and unused: Swift manages the memory.
47
+ public struct z_stream {
48
+ public var next_in: UnsafeMutablePointer<Bytef>!
49
+ public var avail_in: uInt
50
+ public var total_in: uLong
51
+ public var next_out: UnsafeMutablePointer<Bytef>!
52
+ public var avail_out: uInt
53
+ public var total_out: uLong
54
+ public var msg: UnsafeMutablePointer<CChar>!
55
+ public var state: OpaquePointer!
56
+ public var zalloc: alloc_func!
57
+ public var zfree: free_func!
58
+ public var opaque: voidpf!
59
+ public var data_type: Int32
60
+ public var adler: uLong
61
+ public var reserved: uLong
62
+
63
+ public init() {
64
+ next_in = nil
65
+ avail_in = 0
66
+ total_in = 0
67
+ next_out = nil
68
+ avail_out = 0
69
+ total_out = 0
70
+ msg = nil
71
+ state = nil
72
+ zalloc = nil
73
+ zfree = nil
74
+ opaque = nil
75
+ data_type = 0
76
+ adler = 0
77
+ reserved = 0
78
+ }
79
+ }
80
+
81
+ public typealias z_streamp = UnsafeMutablePointer<z_stream>
82
+
83
+ /// Starts decoding. `windowBits` 8...15 reads a zlib stream, 24...31 a gzip
84
+ /// one, 40...47 either, and -15...-8 raw DEFLATE.
85
+ public func inflateInit2_(_ strm: z_streamp!, _ windowBits: Int32, _ version: UnsafePointer<CChar>!, _ stream_size: Int32) -> Int32 {
86
+ guard let strm else { return Z_STREAM_ERROR }
87
+ guard let version, version.pointee == CChar(UInt8(ascii: "1")) else { return Z_VERSION_ERROR }
88
+ let format: _Deflate.Format
89
+ switch windowBits {
90
+ case 0, 8...15: format = .zlib
91
+ case -15 ... -8: format = .raw
92
+ case 24...31: format = .gzip
93
+ case 32, 40...47: format = .automatic
94
+ default: return Z_STREAM_ERROR
95
+ }
96
+ strm.pointee.state = OpaquePointer(Unmanaged.passRetained(_StreamCodec(encoding: false, format: format)).toOpaque())
97
+ strm.pointee.total_in = 0
98
+ strm.pointee.total_out = 0
99
+ strm.pointee.msg = nil
100
+ strm.pointee.adler = format == .raw || format == .gzip ? 0 : 1
101
+ return Z_OK
102
+ }
103
+
104
+ /// Starts decoding a zlib stream.
105
+ public func inflateInit_(_ strm: z_streamp!, _ version: UnsafePointer<CChar>!, _ stream_size: Int32) -> Int32 {
106
+ inflateInit2_(strm, MAX_WBITS, version, stream_size)
107
+ }
108
+
109
+ /// Takes the input at `next_in` and writes output to `next_out`, advancing
110
+ /// both. Returns `Z_STREAM_END` once the whole stream has been written out,
111
+ /// `Z_OK` after progress, `Z_BUF_ERROR` when no progress was possible (the
112
+ /// stream needs more input or more output space) and `Z_DATA_ERROR` for
113
+ /// input that is not a valid stream.
114
+ public func inflate(_ strm: z_streamp!, _ flush: Int32) -> Int32 {
115
+ guard let strm, let state = strm.pointee.state else { return Z_STREAM_ERROR }
116
+ let codec = Unmanaged<_StreamCodec>.fromOpaque(UnsafeRawPointer(state)).takeUnretainedValue()
117
+ if codec.isDone { return Z_STREAM_END }
118
+ let available = Int(strm.pointee.avail_in)
119
+ let input = available > 0 ? UnsafeRawBufferPointer(start: strm.pointee.next_in, count: available) : UnsafeRawBufferPointer(start: nil, count: 0)
120
+ let consumed: Int
121
+ do {
122
+ consumed = try codec.consume(input, finish: flush == Z_FINISH)
123
+ } catch {
124
+ strm.pointee.msg = _invalidStreamMessage
125
+ return Z_DATA_ERROR
126
+ }
127
+ strm.pointee.next_in = strm.pointee.next_in.map { $0 + consumed }
128
+ strm.pointee.avail_in -= uInt(consumed)
129
+ strm.pointee.total_in += uLong(consumed)
130
+ let written = codec.drain(into: strm.pointee.next_out, capacity: Int(strm.pointee.avail_out))
131
+ strm.pointee.next_out = strm.pointee.next_out.map { $0 + written }
132
+ strm.pointee.avail_out -= uInt(written)
133
+ strm.pointee.total_out += uLong(written)
134
+ if codec.finished { strm.pointee.adler = uLong(codec.checksum) }
135
+ if codec.isDone { return Z_STREAM_END }
136
+ return consumed > 0 || written > 0 ? Z_OK : Z_BUF_ERROR
137
+ }
138
+
139
+ /// Frees what `inflateInit2_` allocated.
140
+ public func inflateEnd(_ strm: z_streamp!) -> Int32 {
141
+ guard let strm, let state = strm.pointee.state else { return Z_STREAM_ERROR }
142
+ Unmanaged<_StreamCodec>.fromOpaque(UnsafeRawPointer(state)).release()
143
+ strm.pointee.state = nil
144
+ return Z_OK
145
+ }
146
+
147
+ /// Starts the next stream with the same settings.
148
+ public func inflateReset(_ strm: z_streamp!) -> Int32 {
149
+ guard let strm, let state = strm.pointee.state else { return Z_STREAM_ERROR }
150
+ let old = Unmanaged<_StreamCodec>.fromOpaque(UnsafeRawPointer(state))
151
+ let format = old.takeUnretainedValue().format
152
+ old.release()
153
+ strm.pointee.state = OpaquePointer(Unmanaged.passRetained(_StreamCodec(encoding: false, format: format)).toOpaque())
154
+ strm.pointee.total_in = 0
155
+ strm.pointee.total_out = 0
156
+ strm.pointee.msg = nil
157
+ return Z_OK
158
+ }
159
+
160
+ /// The running Adler-32 of `buf` after `adler` (pass 1 to start, or nil
161
+ /// `buf` to get the initial value).
162
+ public func adler32(_ adler: uLong, _ buf: UnsafePointer<Bytef>!, _ len: uInt) -> uLong {
163
+ guard let buf else { return 1 }
164
+ return uLong(_Deflate.adler32(Array(UnsafeBufferPointer(start: buf, count: Int(len))), UInt32(truncatingIfNeeded: adler)))
165
+ }
166
+
167
+ /// The running CRC-32 of `buf` after `crc` (pass 0 to start).
168
+ public func crc32(_ crc: uLong, _ buf: UnsafePointer<Bytef>!, _ len: uInt) -> uLong {
169
+ guard let buf else { return 0 }
170
+ return uLong(_Deflate.crc32(Array(UnsafeBufferPointer(start: buf, count: Int(len))), UInt32(truncatingIfNeeded: crc)))
171
+ }
172
+
173
+ /// `z_stream.msg` for invalid input: a C string that lives as long as the process.
174
+ nonisolated(unsafe) let _invalidStreamMessage: UnsafeMutablePointer<CChar> = {
175
+ let text = Array("invalid stream".utf8CString)
176
+ let message = UnsafeMutablePointer<CChar>.allocate(capacity: text.count)
177
+ message.initialize(from: text, count: text.count)
178
+ return message
179
+ }()
@@ -0,0 +1,101 @@
1
+ // Core Foundation's types, as the frameworks over it take them: on Apple
2
+ // platforms `CFString`, `CFURL`, `CFDictionary`… come from CoreFoundation,
3
+ // which Foundation, Security, Image I/O and Audio Toolbox all bring along.
4
+ // Here they are plain Swift values (`data as CFData`, `options as
5
+ // CFDictionary`), declared once in this module and re-exported by each of
6
+ // those, so a file that imports several sees one `CFString`. (The name
7
+ // CoreFoundation is taken: Linux toolchains ship corelibs' own.)
8
+
9
+ import Foundation
10
+
11
+ public typealias CFTypeRef = AnyObject
12
+ public typealias CFString = String
13
+ public typealias CFURL = URL
14
+ public typealias CFData = Data
15
+ public typealias CFMutableData = NSMutableData
16
+ public typealias CFDictionary = [String: Any]
17
+ public typealias CFTypeID = UInt
18
+ public typealias CFIndex = Int
19
+ public typealias CFAllocator = AnyObject
20
+ public typealias OSStatus = Int32
21
+ /// Toll-free bridged with `NSError` on Apple platforms (`error as NSError`,
22
+ /// `Unmanaged<CFError>` out-parameters).
23
+ public typealias CFError = NSError
24
+
25
+ /// Core Foundation's booleans, as options dictionaries take them
26
+ /// (`[kCGImageSourceShouldCache: kCFBooleanFalse]`, `kSecReturnData: kCFBooleanTrue`).
27
+ public let kCFBooleanTrue: Bool = true
28
+ public let kCFBooleanFalse: Bool = false
29
+
30
+ /// The type of a Core Foundation object, as `CFGetTypeID` answers it and the
31
+ /// `…GetTypeID()` functions name it (Apple's values). A boolean `NSNumber`
32
+ /// is a `CFBoolean`, as `JSONSerialization` makes them: the usual way to tell
33
+ /// `true` from `1`.
34
+ public func CFGetTypeID(_ cf: CFTypeRef?) -> CFTypeID {
35
+ switch cf {
36
+ case let number as NSNumber:
37
+ String(cString: number.objCType) == "c" ? CFBooleanGetTypeID() : CFNumberGetTypeID()
38
+ case is NSString, is String: CFStringGetTypeID()
39
+ case is NSData, is Data: CFDataGetTypeID()
40
+ case is NSArray: CFArrayGetTypeID()
41
+ case is NSDictionary: CFDictionaryGetTypeID()
42
+ case is NSDate, is Date: CFDateGetTypeID()
43
+ case is NSNull: CFNullGetTypeID()
44
+ default: 1
45
+ }
46
+ }
47
+
48
+ public func CFStringGetTypeID() -> CFTypeID { 7 }
49
+ public func CFNullGetTypeID() -> CFTypeID { 16 }
50
+ public func CFDictionaryGetTypeID() -> CFTypeID { 18 }
51
+ public func CFArrayGetTypeID() -> CFTypeID { 19 }
52
+ public func CFDataGetTypeID() -> CFTypeID { 20 }
53
+ public func CFBooleanGetTypeID() -> CFTypeID { 21 }
54
+ public func CFNumberGetTypeID() -> CFTypeID { 22 }
55
+ public func CFDateGetTypeID() -> CFTypeID { 42 }
56
+
57
+ public func CFDataCreateMutable(_ allocator: CFAllocator?, _ capacity: CFIndex) -> CFMutableData? { NSMutableData() }
58
+
59
+ /// A URL from a string, as Core Foundation parses one: characters that may
60
+ /// not appear in a URL are percent-encoded, and escapes already in the string
61
+ /// (`%20`) are kept rather than encoded again, which `URL(string:)` does to
62
+ /// every `%` once anything in the string needs encoding. Square brackets are
63
+ /// kept in the host (`[::1]`) and encoded elsewhere. Nil when the result is
64
+ /// still no URL.
65
+ public func CFURLCreateWithString(_ allocator: CFAllocator?, _ urlString: CFString, _ baseURL: CFURL?) -> CFURL? {
66
+ let escaped = _escapingInvalidURLCharacters(urlString)
67
+ if let baseURL { return URL(string: escaped, relativeTo: baseURL) }
68
+ return URL(string: escaped)
69
+ }
70
+
71
+ /// `urlString` with the characters a URL may not contain percent-encoded (UTF-8).
72
+ func _escapingInvalidURLCharacters(_ urlString: String) -> String {
73
+ let scalars = Array(urlString.unicodeScalars)
74
+ // The authority (`//host:port`), where `[` and `]` delimit an IPv6 address.
75
+ var authority = 0..<0
76
+ if let colon = scalars.firstIndex(of: ":"), scalars.count > colon + 2, scalars[colon + 1] == "/", scalars[colon + 2] == "/" {
77
+ let start = colon + 3
78
+ let end = scalars[start...].firstIndex { $0 == "/" || $0 == "?" || $0 == "#" } ?? scalars.count
79
+ authority = start..<end
80
+ }
81
+ var out = ""
82
+ for (index, scalar) in scalars.enumerated() {
83
+ let isHexEscape = scalar == "%" && index + 2 < scalars.count && scalars[index + 1].properties.isASCIIHexDigit && scalars[index + 2].properties.isASCIIHexDigit
84
+ if isHexEscape || _urlLegal(scalar) || ((scalar == "[" || scalar == "]") && authority.contains(index)) {
85
+ out.unicodeScalars.append(scalar)
86
+ } else {
87
+ for byte in String(scalar).utf8 { out += String(format: "%%%02X", byte) }
88
+ }
89
+ }
90
+ return out
91
+ }
92
+
93
+ /// RFC 3986's unreserved and reserved characters, but the brackets.
94
+ private func _urlLegal(_ scalar: Unicode.Scalar) -> Bool {
95
+ guard scalar.isASCII else { return false }
96
+ switch scalar {
97
+ case "a"..."z", "A"..."Z", "0"..."9": return true
98
+ case "-", ".", "_", "~", ":", "/", "?", "#", "@", "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=": return true
99
+ default: return false
100
+ }
101
+ }