@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,269 @@
1
+ // Core ML as a stand-in for the models Create ML makes from tables: linear
2
+ // and logistic regressions, boosted trees and random forests, and the
3
+ // pipelines around them. @swiftbrowser/cli compiles each `.mlmodel` of the
4
+ // app's target into the class Xcode would generate, with the model's
5
+ // specification embedded (packages/cli/src/coreml.ts); `MLModel` evaluates it
6
+ // in Swift, so a prediction is a few multiplications, synchronous and exact.
7
+ // Models of other kinds (neural networks, ML programs, Vision and Natural
8
+ // Language models) are refused by the CLI, by name.
9
+
10
+ import Foundation
11
+
12
+ /// Where a model may run. Every value runs on the CPU here.
13
+ public enum MLComputeUnits: Int, Sendable {
14
+ case cpuOnly = 0
15
+ case cpuAndGPU = 1
16
+ case all = 2
17
+ case cpuAndNeuralEngine = 3
18
+ }
19
+
20
+ public final class MLModelConfiguration: @unchecked Sendable {
21
+ public var computeUnits: MLComputeUnits = .all
22
+ public var allowLowPrecisionAccumulationOnGPU = false
23
+ public var modelDisplayName: String?
24
+
25
+ public init() {}
26
+ }
27
+
28
+ public final class MLPredictionOptions: @unchecked Sendable {
29
+ @available(*, deprecated, message: "Use MLModelConfiguration.computeUnits instead.")
30
+ public var usesCPUOnly = false
31
+ public var outputBackings: [String: Any] = [:]
32
+
33
+ public init() {}
34
+ }
35
+
36
+ /// Why loading or predicting failed. `code` matches Core ML's codes.
37
+ public struct MLModelError: Error, CustomStringConvertible, LocalizedError, Sendable {
38
+ public enum Code: Int, Sendable {
39
+ case generic = 0
40
+ case featureType = 1
41
+ case io = 3
42
+ case customLayer = 4
43
+ case customModel = 5
44
+ case update = 6
45
+ case parameters = 7
46
+ case modelDecryptionKeyFetch = 8
47
+ case modelDecryption = 9
48
+ case modelCollection = 10
49
+ case predictionCancelled = 11
50
+ }
51
+
52
+ public let code: Code
53
+ public let message: String
54
+
55
+ public init(_ code: Code, _ message: String = "") {
56
+ self.code = code
57
+ self.message = message
58
+ }
59
+
60
+ public static var generic: Code { .generic }
61
+ public static var featureType: Code { .featureType }
62
+ public static var io: Code { .io }
63
+
64
+ public var errorDescription: String? { message }
65
+ public var description: String { "MLModelError(\(code)): \(message)" }
66
+ }
67
+
68
+ /// Keys of `MLModelDescription.metadata`.
69
+ public struct MLModelMetadataKey: RawRepresentable, Hashable, Sendable {
70
+ public let rawValue: String
71
+ public init(rawValue: String) { self.rawValue = rawValue }
72
+
73
+ public static let author = MLModelMetadataKey(rawValue: "MLModelAuthorKey")
74
+ public static let description = MLModelMetadataKey(rawValue: "MLModelDescriptionKey")
75
+ public static let versionString = MLModelMetadataKey(rawValue: "MLModelVersionStringKey")
76
+ public static let license = MLModelMetadataKey(rawValue: "MLModelLicenseKey")
77
+ /// The creator's own key-value pairs, a `[String: String]`.
78
+ public static let creatorDefinedKey = MLModelMetadataKey(rawValue: "MLModelCreatorDefinedKey")
79
+ }
80
+
81
+ public final class MLMultiArrayConstraint: @unchecked Sendable {
82
+ public let shape: [NSNumber]
83
+ public let dataType: MLMultiArrayDataType
84
+
85
+ init(shape: [NSNumber], dataType: MLMultiArrayDataType) {
86
+ self.shape = shape
87
+ self.dataType = dataType
88
+ }
89
+ }
90
+
91
+ public final class MLDictionaryConstraint: @unchecked Sendable {
92
+ public let keyType: MLFeatureType
93
+
94
+ init(keyType: MLFeatureType) { self.keyType = keyType }
95
+ }
96
+
97
+ /// One input or output of a model.
98
+ public final class MLFeatureDescription: @unchecked Sendable, CustomStringConvertible {
99
+ public let name: String
100
+ public let type: MLFeatureType
101
+ public let isOptional: Bool
102
+ public let multiArrayConstraint: MLMultiArrayConstraint?
103
+ public let dictionaryConstraint: MLDictionaryConstraint?
104
+
105
+ init(_ feature: Specification.Feature) {
106
+ name = feature.name
107
+ type = feature.featureType
108
+ isOptional = feature.isOptional
109
+ if type == .multiArray {
110
+ let dataType: MLMultiArrayDataType = switch feature.dataType {
111
+ case "float32": .float32
112
+ case "float16": .float16
113
+ case "int32": .int32
114
+ case "int8": .int8
115
+ default: .double
116
+ }
117
+ multiArrayConstraint = MLMultiArrayConstraint(shape: (feature.shape ?? []).map { NSNumber(value: $0) }, dataType: dataType)
118
+ } else {
119
+ multiArrayConstraint = nil
120
+ }
121
+ dictionaryConstraint = type == .dictionary ? MLDictionaryConstraint(keyType: feature.keyType == "int64" ? .int64 : .string) : nil
122
+ }
123
+
124
+ /// Whether `value` can be given for this feature.
125
+ public func isAllowedValue(_ value: MLFeatureValue) -> Bool {
126
+ if value.isUndefined { return isOptional }
127
+ switch (type, value.type) {
128
+ case (.double, .int64), (.int64, .double): return true
129
+ default: return type == value.type
130
+ }
131
+ }
132
+
133
+ public var description: String { "\(name) : \(type)\(isOptional ? " (optional)" : "")" }
134
+ }
135
+
136
+ /// What a model takes and returns, and who made it.
137
+ public final class MLModelDescription: @unchecked Sendable {
138
+ public let inputDescriptionsByName: [String: MLFeatureDescription]
139
+ public let outputDescriptionsByName: [String: MLFeatureDescription]
140
+ public let predictedFeatureName: String?
141
+ public let predictedProbabilitiesName: String?
142
+ public let metadata: [MLModelMetadataKey: Any]
143
+ /// A classifier's labels (`String`s or `Int64`s), else nil.
144
+ public let classLabels: [Any]?
145
+
146
+ init(_ specification: Specification) {
147
+ let description = specification.description
148
+ inputDescriptionsByName = Dictionary(description.inputs.map { ($0.name, MLFeatureDescription($0)) }, uniquingKeysWith: { first, _ in first })
149
+ outputDescriptionsByName = Dictionary(description.outputs.map { ($0.name, MLFeatureDescription($0)) }, uniquingKeysWith: { first, _ in first })
150
+ predictedFeatureName = description.predictedFeatureName
151
+ predictedProbabilitiesName = description.predictedProbabilitiesName
152
+ var metadata: [MLModelMetadataKey: Any] = [:]
153
+ if let given = description.metadata {
154
+ if let author = given.author { metadata[.author] = author }
155
+ if let text = given.shortDescription { metadata[.description] = text }
156
+ if let version = given.versionString { metadata[.versionString] = version }
157
+ if let license = given.license { metadata[.license] = license }
158
+ if let creatorDefined = given.creatorDefined { metadata[.creatorDefinedKey] = creatorDefined }
159
+ }
160
+ self.metadata = metadata
161
+ classLabels = MLModelDescription.labels(of: specification)?.anyValues
162
+ }
163
+
164
+ /// The labels of a classifier, or of the classifier ending a pipeline.
165
+ private static func labels(of specification: Specification) -> Specification.Labels? {
166
+ switch specification.model {
167
+ case .glmClassifier(_, _, _, _, let labels), .treeEnsembleClassifier(_, let labels): labels
168
+ case .pipeline(let models): models.last.flatMap { labels(of: $0) }
169
+ default: nil
170
+ }
171
+ }
172
+ }
173
+
174
+ /// A model compiled into the app by @swiftbrowser/cli, found by the name of
175
+ /// its `.mlmodelc`.
176
+ private final class CompiledModels: @unchecked Sendable {
177
+ private let lock = NSLock()
178
+ private var specifications: [String: String] = [:]
179
+ private var decoded: [String: Specification] = [:]
180
+
181
+ func register(_ name: String, json: String) {
182
+ lock.lock()
183
+ defer { lock.unlock() }
184
+ if specifications[name] == nil { specifications[name] = json }
185
+ }
186
+
187
+ func specification(named name: String) throws -> Specification? {
188
+ lock.lock()
189
+ defer { lock.unlock() }
190
+ if let cached = decoded[name] { return cached }
191
+ guard let json = specifications[name] else { return nil }
192
+ let specification = try Specification.decode(json)
193
+ decoded[name] = specification
194
+ return specification
195
+ }
196
+ }
197
+
198
+ private let compiledModels = CompiledModels()
199
+
200
+ open class MLModel: @unchecked Sendable {
201
+ public let modelDescription: MLModelDescription
202
+ public let configuration: MLModelConfiguration
203
+ let specification: Specification
204
+
205
+ init(specification: Specification, configuration: MLModelConfiguration) {
206
+ self.specification = specification
207
+ self.configuration = configuration
208
+ modelDescription = MLModelDescription(specification)
209
+ }
210
+
211
+ /// Loads a compiled model (`<Name>.mlmodelc`): one of the app's models,
212
+ /// which the CLI compiled into its generated class.
213
+ public convenience init(contentsOf url: URL) throws {
214
+ try self.init(contentsOf: url, configuration: MLModelConfiguration())
215
+ }
216
+
217
+ public convenience init(contentsOf url: URL, configuration: MLModelConfiguration) throws {
218
+ let name = url.deletingPathExtension().lastPathComponent
219
+ guard let specification = try compiledModels.specification(named: name) else {
220
+ throw MLModelError(.io, "No compiled model at \(url.path). In the browser, the models are the .mlmodel files of the app's target, compiled by @swiftbrowser/cli.")
221
+ }
222
+ self.init(specification: specification, configuration: configuration)
223
+ }
224
+
225
+ /// The `.mlmodelc` URL of a generated model class (`urlOfModelInThisBundle`),
226
+ /// registering the model the CLI embedded in it.
227
+ public static func _compiledModelURL(named name: String, specification json: String) -> URL {
228
+ compiledModels.register(name, json: json)
229
+ return URL(fileURLWithPath: "/bundle").appendingPathComponent("\(name).mlmodelc", isDirectory: true)
230
+ }
231
+
232
+ public class func load(contentsOf url: URL, configuration: MLModelConfiguration = MLModelConfiguration()) async throws -> MLModel {
233
+ try MLModel(contentsOf: url, configuration: configuration)
234
+ }
235
+
236
+ public class func load(contentsOf url: URL, configuration: MLModelConfiguration, completionHandler handler: @escaping (Result<MLModel, any Error>) -> Void) {
237
+ handler(Result(catching: { try MLModel(contentsOf: url, configuration: configuration) }))
238
+ }
239
+
240
+ open func prediction(from input: MLFeatureProvider) throws -> MLFeatureProvider {
241
+ try prediction(from: input, options: MLPredictionOptions())
242
+ }
243
+
244
+ open func prediction(from input: MLFeatureProvider, options: MLPredictionOptions) throws -> MLFeatureProvider {
245
+ try predict(input)
246
+ }
247
+
248
+ public func prediction(from input: MLFeatureProvider, options: MLPredictionOptions = MLPredictionOptions()) async throws -> MLFeatureProvider {
249
+ try predict(input)
250
+ }
251
+
252
+ open func predictions(from inputs: MLBatchProvider, options: MLPredictionOptions = MLPredictionOptions()) throws -> MLBatchProvider {
253
+ MLArrayBatchProvider(array: try (0..<inputs.count).map { try predict(inputs.features(at: $0)) })
254
+ }
255
+
256
+ /// Checks the inputs against the description, evaluates, and returns the declared outputs.
257
+ private func predict(_ input: MLFeatureProvider) throws -> MLFeatureProvider {
258
+ var values: [String: Value] = [:]
259
+ for feature in specification.description.inputs {
260
+ guard let value = input.featureValue(for: feature.name), !value.isUndefined else {
261
+ if feature.isOptional { continue }
262
+ throw MLModelError(.featureType, "Feature \(feature.name) is required but not specified.")
263
+ }
264
+ values[feature.name] = try Value(value).converted(to: feature)
265
+ }
266
+ let outputs = try specification.evaluate(values)
267
+ return try MLDictionaryFeatureProvider(dictionary: outputs.mapValues { $0.featureValue })
268
+ }
269
+ }
@@ -0,0 +1,92 @@
1
+ // `MLMultiArray`, as far as tabular models need it: a shaped array of numbers
2
+ // (held as doubles whatever the data type) read and written by index.
3
+
4
+ import Foundation
5
+
6
+ /// The element type of a multiarray, with Core ML's raw values.
7
+ public enum MLMultiArrayDataType: Int, Sendable {
8
+ case double = 65600
9
+ case float32 = 65568
10
+ case float16 = 65552
11
+ case int32 = 131104
12
+ case int8 = 131080
13
+
14
+ public static var float64: MLMultiArrayDataType { .double }
15
+ public static var float: MLMultiArrayDataType { .float32 }
16
+ }
17
+
18
+ public final class MLMultiArray: @unchecked Sendable, CustomStringConvertible {
19
+ public let shape: [NSNumber]
20
+ public let strides: [NSNumber]
21
+ public let dataType: MLMultiArrayDataType
22
+ /// The elements in row-major order.
23
+ var values: [Double]
24
+
25
+ public init(shape: [NSNumber], dataType: MLMultiArrayDataType) throws {
26
+ let dimensions = shape.map(\.intValue)
27
+ guard dimensions.allSatisfy({ $0 >= 0 }) else { throw MLModelError(.generic, "A multiarray's shape cannot be negative: \(dimensions).") }
28
+ self.shape = shape
29
+ self.dataType = dataType
30
+ strides = MLMultiArray.strides(of: dimensions).map { NSNumber(value: $0) }
31
+ values = Array(repeating: 0, count: dimensions.reduce(1, *))
32
+ }
33
+
34
+ /// A one-dimensional array of `values`.
35
+ init(values: [Double], shape: [Int]? = nil, dataType: MLMultiArrayDataType = .double) {
36
+ let dimensions = shape ?? [values.count]
37
+ self.shape = dimensions.map { NSNumber(value: $0) }
38
+ self.dataType = dataType
39
+ strides = MLMultiArray.strides(of: dimensions).map { NSNumber(value: $0) }
40
+ self.values = values
41
+ }
42
+
43
+ private static func strides(of dimensions: [Int]) -> [Int] {
44
+ var strides = Array(repeating: 1, count: dimensions.count)
45
+ var stride = 1
46
+ for index in dimensions.indices.reversed() {
47
+ strides[index] = stride
48
+ stride *= dimensions[index]
49
+ }
50
+ return strides
51
+ }
52
+
53
+ public var count: Int { values.count }
54
+
55
+ private func number(_ value: Double) -> NSNumber {
56
+ switch dataType {
57
+ case .int32, .int8: NSNumber(value: Int32(clamping: Int64(value)))
58
+ case .float32, .float16: NSNumber(value: Float(value))
59
+ case .double: NSNumber(value: value)
60
+ }
61
+ }
62
+
63
+ private func stored(_ number: NSNumber) -> Double {
64
+ switch dataType {
65
+ case .int32: Double(number.int32Value)
66
+ case .int8: Double(number.int8Value)
67
+ case .float32, .float16: Double(number.floatValue)
68
+ case .double: number.doubleValue
69
+ }
70
+ }
71
+
72
+ /// The element at a linear (row-major) index.
73
+ public subscript(index: Int) -> NSNumber {
74
+ get { number(values[index]) }
75
+ set { values[index] = stored(newValue) }
76
+ }
77
+
78
+ /// The element at a multidimensional index.
79
+ public subscript(key: [NSNumber]) -> NSNumber {
80
+ get { self[linearIndex(key)] }
81
+ set { self[linearIndex(key)] = newValue }
82
+ }
83
+
84
+ private func linearIndex(_ key: [NSNumber]) -> Int {
85
+ precondition(key.count == strides.count, "MLMultiArray: index \(key.map(\.intValue)) has \(key.count) dimensions; the array has \(strides.count)")
86
+ return zip(key, strides).reduce(0) { $0 + $1.0.intValue * $1.1.intValue }
87
+ }
88
+
89
+ public var description: String {
90
+ "MLMultiArray(shape: \(shape.map(\.intValue)), \(values))"
91
+ }
92
+ }
@@ -0,0 +1,233 @@
1
+ // The model specification @swiftbrowser/cli embeds in each generated model
2
+ // class (packages/cli/src/coreml.ts): Core ML's protobuf, read when the app is
3
+ // built and written as JSON, decoded here once per model. The shapes mirror
4
+ // Model.proto in apple/coremltools; trees come resolved (root first, children
5
+ // as positions) and checked by the CLI.
6
+
7
+ import Foundation
8
+
9
+ struct Specification: Decodable {
10
+ var specificationVersion: Int
11
+ var description: Description
12
+ var model: Kind
13
+
14
+ struct Description: Decodable {
15
+ var inputs: [Feature]
16
+ var outputs: [Feature]
17
+ var predictedFeatureName: String?
18
+ var predictedProbabilitiesName: String?
19
+ var metadata: Metadata?
20
+ }
21
+
22
+ struct Metadata: Decodable {
23
+ var shortDescription: String?
24
+ var versionString: String?
25
+ var author: String?
26
+ var license: String?
27
+ var creatorDefined: [String: String]?
28
+ }
29
+
30
+ struct Feature: Decodable {
31
+ var name: String
32
+ var type: String
33
+ var optional: Bool?
34
+ var shape: [Int]?
35
+ var dataType: String?
36
+ var keyType: String?
37
+
38
+ var featureType: MLFeatureType {
39
+ switch type {
40
+ case "int64": .int64
41
+ case "double": .double
42
+ case "string": .string
43
+ case "multiArray": .multiArray
44
+ case "dictionary": .dictionary
45
+ default: .invalid
46
+ }
47
+ }
48
+
49
+ var isOptional: Bool { optional ?? false }
50
+ }
51
+
52
+ /// Class labels, or the categories of an encoder: strings or integers.
53
+ enum Labels: Decodable {
54
+ case strings([String])
55
+ case int64s([Int64])
56
+
57
+ private enum CodingKeys: String, CodingKey { case strings, int64s }
58
+
59
+ init(from decoder: Decoder) throws {
60
+ let container = try decoder.container(keyedBy: CodingKeys.self)
61
+ if let strings = try container.decodeIfPresent([String].self, forKey: .strings) {
62
+ self = .strings(strings)
63
+ } else {
64
+ self = .int64s(try container.decode([Int64].self, forKey: .int64s))
65
+ }
66
+ }
67
+
68
+ var count: Int {
69
+ switch self {
70
+ case .strings(let labels): labels.count
71
+ case .int64s(let labels): labels.count
72
+ }
73
+ }
74
+
75
+ func value(at index: Int) -> Value {
76
+ switch self {
77
+ case .strings(let labels): .string(labels[index])
78
+ case .int64s(let labels): .int64(labels[index])
79
+ }
80
+ }
81
+
82
+ /// The position of a string or integer value among the labels.
83
+ func index(of value: Value) -> Int? {
84
+ switch (self, value) {
85
+ case (.strings(let labels), .string(let string)): labels.firstIndex(of: string)
86
+ case (.int64s(let labels), .int64(let integer)): labels.firstIndex(of: integer)
87
+ case (.int64s(let labels), .double(let double)): Int64(exactly: double).flatMap { labels.firstIndex(of: $0) }
88
+ default: nil
89
+ }
90
+ }
91
+
92
+ var anyValues: [Any] {
93
+ switch self {
94
+ case .strings(let labels): labels
95
+ case .int64s(let labels): labels
96
+ }
97
+ }
98
+ }
99
+
100
+ struct Tree: Decodable {
101
+ /// TreeNodeBehavior: 0 ≤, 1 <, 2 ≥, 3 >, 4 ==, 5 ≠ (branches), 6 leaf.
102
+ var behaviors: [Int]
103
+ var features: [Int]
104
+ var thresholds: [Double]
105
+ var trueChildren: [Int]
106
+ var falseChildren: [Int]
107
+ var missingTrue: [Bool]
108
+ var leafStarts: [Int]
109
+ var leafIndices: [Int]
110
+ var leafValues: [Double]
111
+ }
112
+
113
+ struct TreeEnsemble: Decodable {
114
+ var dimensions: Int
115
+ var base: [Double]
116
+ var trees: [Tree]
117
+ /// "none", "softmax", "logistic" or "softmaxWithZeroClassReference".
118
+ var transform: String
119
+ }
120
+
121
+ struct Imputed: Decodable {
122
+ var double: Double?
123
+ var int64: Int64?
124
+ var string: String?
125
+ var doubles: [Double]?
126
+ var int64s: [Int64]?
127
+ var stringDictionary: [String: Double]?
128
+ /// Keys in decimal.
129
+ var int64Dictionary: [String: Double]?
130
+ }
131
+
132
+ struct Replace: Decodable {
133
+ var double: Double?
134
+ var int64: Int64?
135
+ var string: String?
136
+ }
137
+
138
+ struct CategoricalMapping: Decodable {
139
+ var stringToInt64: [String: Int64]?
140
+ /// Keys in decimal.
141
+ var int64ToString: [String: String]?
142
+ var defaultString: String?
143
+ var defaultInt64: Int64?
144
+ }
145
+
146
+ struct Column: Decodable {
147
+ var name: String
148
+ var dimensions: Int
149
+ }
150
+
151
+ indirect enum Kind: Decodable {
152
+ case pipeline([Specification])
153
+ case glmRegressor(weights: [[Double]], offsets: [Double], transform: String)
154
+ case glmClassifier(weights: [[Double]], offsets: [Double], transform: String, encoding: String, labels: Labels)
155
+ case treeEnsembleRegressor(TreeEnsemble)
156
+ case treeEnsembleClassifier(TreeEnsemble, labels: Labels)
157
+ case featureVectorizer([Column])
158
+ case oneHotEncoder(categories: Labels, sparse: Bool, ignoreUnknown: Bool)
159
+ case normalizer(String)
160
+ case imputer(Imputed, replace: Replace?)
161
+ case scaler(shift: [Double], scale: [Double])
162
+ case dictVectorizer(Labels)
163
+ case arrayFeatureExtractor([Int])
164
+ case categoricalMapping(CategoricalMapping)
165
+ case identity
166
+
167
+ private enum CodingKeys: String, CodingKey {
168
+ case kind, models, weights, offsets, transform, encoding, labels, columns, categories, sparse, ignoreUnknown
169
+ case norm, imputed, replace, shift, scale, keys, indices
170
+ }
171
+
172
+ init(from decoder: Decoder) throws {
173
+ let container = try decoder.container(keyedBy: CodingKeys.self)
174
+ let kind = try container.decode(String.self, forKey: .kind)
175
+ switch kind {
176
+ case "pipeline", "pipelineClassifier", "pipelineRegressor":
177
+ self = .pipeline(try container.decode([Specification].self, forKey: .models))
178
+ case "glmRegressor":
179
+ self = .glmRegressor(
180
+ weights: try container.decode([[Double]].self, forKey: .weights),
181
+ offsets: try container.decode([Double].self, forKey: .offsets),
182
+ transform: try container.decode(String.self, forKey: .transform))
183
+ case "glmClassifier":
184
+ self = .glmClassifier(
185
+ weights: try container.decode([[Double]].self, forKey: .weights),
186
+ offsets: try container.decode([Double].self, forKey: .offsets),
187
+ transform: try container.decode(String.self, forKey: .transform),
188
+ encoding: try container.decode(String.self, forKey: .encoding),
189
+ labels: try container.decode(Labels.self, forKey: .labels))
190
+ case "treeEnsembleRegressor":
191
+ self = .treeEnsembleRegressor(try TreeEnsemble(from: decoder))
192
+ case "treeEnsembleClassifier":
193
+ self = .treeEnsembleClassifier(try TreeEnsemble(from: decoder), labels: try container.decode(Labels.self, forKey: .labels))
194
+ case "featureVectorizer":
195
+ self = .featureVectorizer(try container.decode([Column].self, forKey: .columns))
196
+ case "oneHotEncoder":
197
+ self = .oneHotEncoder(
198
+ categories: try container.decode(Labels.self, forKey: .categories),
199
+ sparse: try container.decode(Bool.self, forKey: .sparse),
200
+ ignoreUnknown: try container.decode(Bool.self, forKey: .ignoreUnknown))
201
+ case "normalizer":
202
+ self = .normalizer(try container.decode(String.self, forKey: .norm))
203
+ case "imputer":
204
+ self = .imputer(try container.decode(Imputed.self, forKey: .imputed), replace: try container.decodeIfPresent(Replace.self, forKey: .replace))
205
+ case "scaler":
206
+ self = .scaler(shift: try container.decode([Double].self, forKey: .shift), scale: try container.decode([Double].self, forKey: .scale))
207
+ case "dictVectorizer":
208
+ self = .dictVectorizer(try container.decode(Labels.self, forKey: .keys))
209
+ case "arrayFeatureExtractor":
210
+ self = .arrayFeatureExtractor(try container.decode([Int].self, forKey: .indices))
211
+ case "categoricalMapping":
212
+ self = .categoricalMapping(try CategoricalMapping(from: decoder))
213
+ case "identity":
214
+ self = .identity
215
+ default:
216
+ throw MLModelError(.io, "Unknown model type \(kind) in the model specification.")
217
+ }
218
+ }
219
+ }
220
+
221
+ /// Decodes the JSON the CLI wrote.
222
+ static func decode(_ json: String) throws -> Specification {
223
+ let decoder = JSONDecoder()
224
+ decoder.nonConformingFloatDecodingStrategy = .convertFromString(positiveInfinity: "inf", negativeInfinity: "-inf", nan: "nan")
225
+ do {
226
+ return try decoder.decode(Specification.self, from: Data(json.utf8))
227
+ } catch let error as MLModelError {
228
+ throw error
229
+ } catch {
230
+ throw MLModelError(.io, "The model specification could not be read: \(error)")
231
+ }
232
+ }
233
+ }
@@ -0,0 +1,64 @@
1
+ // `import CoreText` for the browser: the font manager's registration, which
2
+ // packages call for the fonts they ship (`CTFontManagerRegisterFontsForURL`).
3
+ // The page lays out text with the browser's fonts and loads none of these, so
4
+ // registering a font that exists succeeds and changes nothing; a missing file
5
+ // fails with `kCTFontManagerErrorFontFileNotFound`, as on Apple platforms.
6
+ // The rest of Core Text (fonts, lines, frames) is not here.
7
+
8
+ import Foundation
9
+ @_exported import CoreFoundationTypes
10
+
11
+ /// Where a registration applies. The page has one process; every scope is it.
12
+ public enum CTFontManagerScope: UInt32, Sendable {
13
+ case none = 0
14
+ case process = 1
15
+ case persistent = 2
16
+ case session = 3
17
+
18
+ public static let user = CTFontManagerScope.persistent
19
+ }
20
+
21
+ /// The font manager's error codes, in `kCTFontManagerErrorDomain`.
22
+ public enum CTFontManagerError: CFIndex, Sendable {
23
+ case fileNotFound = 101
24
+ case insufficientPermissions = 102
25
+ case unrecognizedFormat = 103
26
+ case invalidFontData = 104
27
+ case alreadyRegistered = 105
28
+ case exceededResourceLimit = 106
29
+ case assetNotFound = 107
30
+ case notRegistered = 201
31
+ case inUse = 202
32
+ case systemRequired = 203
33
+ case registrationFailed = 301
34
+ case missingEntitlement = 302
35
+ case insufficientInfo = 303
36
+ case cancelledByUser = 304
37
+ case duplicatedName = 305
38
+ case invalidFilePath = 306
39
+ case unsupportedScope = 307
40
+ }
41
+
42
+ public let kCTFontManagerErrorDomain: CFString = "com.apple.CoreText.CTFontManagerErrorDomain"
43
+ public let kCTFontManagerErrorFontFileNotFound = CTFontManagerError.fileNotFound.rawValue
44
+
45
+ /// Registers the fonts in the file at `fontURL`: true when the file exists
46
+ /// (the page does not load it), else false with a `fileNotFound` error.
47
+ @discardableResult
48
+ public func CTFontManagerRegisterFontsForURL(_ fontURL: CFURL, _ scope: CTFontManagerScope, _ error: UnsafeMutablePointer<Unmanaged<CFError>?>?) -> Bool {
49
+ _fontFileResult(fontURL, error)
50
+ }
51
+
52
+ /// Unregisters the fonts in the file at `fontURL`: true when the file exists.
53
+ @discardableResult
54
+ public func CTFontManagerUnregisterFontsForURL(_ fontURL: CFURL, _ scope: CTFontManagerScope, _ error: UnsafeMutablePointer<Unmanaged<CFError>?>?) -> Bool {
55
+ _fontFileResult(fontURL, error)
56
+ }
57
+
58
+ func _fontFileResult(_ fontURL: URL, _ error: UnsafeMutablePointer<Unmanaged<CFError>?>?) -> Bool {
59
+ if fontURL.isFileURL, FileManager.default.fileExists(atPath: fontURL.path) { return true }
60
+ let failure = NSError(domain: kCTFontManagerErrorDomain, code: CTFontManagerError.fileNotFound.rawValue,
61
+ userInfo: [NSURLErrorKey: fontURL])
62
+ error?.pointee = Unmanaged.passRetained(failure)
63
+ return false
64
+ }