@swiftbrowser/swift 0.0.0-stage → 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 (400) hide show
  1. package/Package.swift +214 -0
  2. package/README.md +10 -2
  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 +61 -0
  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/FoundationBridge/Bundle.swift +119 -0
  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 +29 -0
  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/Locale.swift +86 -0
  170. package/Sources/FoundationBridge/Localization.swift +149 -0
  171. package/Sources/FoundationBridge/Locks.swift +50 -0
  172. package/Sources/FoundationBridge/Markdown.swift +527 -0
  173. package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
  174. package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
  175. package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
  176. package/Sources/FoundationBridge/Operation.swift +195 -0
  177. package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
  178. package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
  179. package/Sources/FoundationBridge/SceneStorage.swift +78 -0
  180. package/Sources/FoundationBridge/SecurityExports.swift +8 -0
  181. package/Sources/FoundationBridge/Selector.swift +226 -0
  182. package/Sources/FoundationBridge/StringComparators.swift +17 -0
  183. package/Sources/FoundationBridge/Table.swift +211 -0
  184. package/Sources/FoundationBridge/TextAttributes.swift +42 -0
  185. package/Sources/FoundationBridge/Timer.swift +53 -0
  186. package/Sources/FoundationBridge/UITextChecker.swift +30 -0
  187. package/Sources/FoundationBridge/URLSession.swift +718 -0
  188. package/Sources/FoundationBridge/UserDefaults.swift +183 -0
  189. package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
  190. package/Sources/FoundationBridge/WebSocket.swift +187 -0
  191. package/Sources/FoundationModels/FoundationModels.swift +1098 -0
  192. package/Sources/ImageIO/GIF.swift +72 -0
  193. package/Sources/ImageIO/ImageIO.swift +248 -0
  194. package/Sources/ImageIO/ImageTypes.swift +28 -0
  195. package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
  196. package/Sources/LocalAuthentication/LAContext.swift +86 -0
  197. package/Sources/MapKit/Geometry.swift +223 -0
  198. package/Sources/MapKit/Map.swift +638 -0
  199. package/Sources/MapKit/MapView.swift +229 -0
  200. package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
  201. package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
  202. package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
  203. package/Sources/OSLog/OSLog.swift +6 -0
  204. package/Sources/Photos/Photos.swift +572 -0
  205. package/Sources/PhotosUI/PhotosPicker.swift +248 -0
  206. package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
  207. package/Sources/QuickLook/QuickLook.swift +168 -0
  208. package/Sources/SafariServices/SafariServices.swift +106 -0
  209. package/Sources/Security/Security.swift +332 -0
  210. package/Sources/StoreKit/AppStore.swift +207 -0
  211. package/Sources/StoreKit/Products.swift +280 -0
  212. package/Sources/StoreKit/RequestReview.swift +28 -0
  213. package/Sources/StoreKit/StoreKit1.swift +486 -0
  214. package/Sources/StoreKit/StoreViews.swift +428 -0
  215. package/Sources/StoreKit/Transactions.swift +197 -0
  216. package/Sources/SwiftData/Macros.swift +58 -0
  217. package/Sources/SwiftData/ModelActor.swift +38 -0
  218. package/Sources/SwiftData/ModelContainer.swift +129 -0
  219. package/Sources/SwiftData/ModelContext.swift +451 -0
  220. package/Sources/SwiftData/PersistentModel.swift +238 -0
  221. package/Sources/SwiftData/Properties.swift +261 -0
  222. package/Sources/SwiftData/Query.swift +256 -0
  223. package/Sources/SwiftData/Schema.swift +192 -0
  224. package/Sources/SwiftData/Store.swift +146 -0
  225. package/Sources/SwiftData/StringPredicates.swift +125 -0
  226. package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
  227. package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
  228. package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
  229. package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
  230. package/Sources/SwiftDataMacros/Plugin.swift +18 -0
  231. package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
  232. package/Sources/SwiftUI/API/Accessibility.swift +181 -0
  233. package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
  234. package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
  235. package/Sources/SwiftUI/API/Alert.swift +221 -0
  236. package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
  237. package/Sources/SwiftUI/API/Animation.swift +285 -0
  238. package/Sources/SwiftUI/API/App.swift +87 -0
  239. package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
  240. package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
  241. package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
  242. package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
  243. package/Sources/SwiftUI/API/Canvas.swift +337 -0
  244. package/Sources/SwiftUI/API/Color.swift +237 -0
  245. package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
  246. package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
  247. package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
  248. package/Sources/SwiftUI/API/Commands.swift +106 -0
  249. package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
  250. package/Sources/SwiftUI/API/ContentShape.swift +33 -0
  251. package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
  252. package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
  253. package/Sources/SwiftUI/API/Controls.swift +300 -0
  254. package/Sources/SwiftUI/API/CustomLayout.swift +442 -0
  255. package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
  256. package/Sources/SwiftUI/API/Decorations.swift +92 -0
  257. package/Sources/SwiftUI/API/EditMode.swift +212 -0
  258. package/Sources/SwiftUI/API/Effects.swift +388 -0
  259. package/Sources/SwiftUI/API/Entry.swift +8 -0
  260. package/Sources/SwiftUI/API/Environment.swift +439 -0
  261. package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
  262. package/Sources/SwiftUI/API/Focus.swift +137 -0
  263. package/Sources/SwiftUI/API/Font.swift +131 -0
  264. package/Sources/SwiftUI/API/Gauge.swift +290 -0
  265. package/Sources/SwiftUI/API/Geometry.swift +89 -0
  266. package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
  267. package/Sources/SwiftUI/API/GeometryReader.swift +135 -0
  268. package/Sources/SwiftUI/API/GestureState.swift +65 -0
  269. package/Sources/SwiftUI/API/Gestures.swift +342 -0
  270. package/Sources/SwiftUI/API/Glass.swift +127 -0
  271. package/Sources/SwiftUI/API/Grid.swift +188 -0
  272. package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
  273. package/Sources/SwiftUI/API/KeyPress.swift +54 -0
  274. package/Sources/SwiftUI/API/LabelStyle.swift +124 -0
  275. package/Sources/SwiftUI/API/Layout.swift +220 -0
  276. package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
  277. package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
  278. package/Sources/SwiftUI/API/Lists.swift +331 -0
  279. package/Sources/SwiftUI/API/Menu.swift +58 -0
  280. package/Sources/SwiftUI/API/Modifiers.swift +313 -0
  281. package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
  282. package/Sources/SwiftUI/API/Namespace.swift +44 -0
  283. package/Sources/SwiftUI/API/Navigation.swift +386 -0
  284. package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
  285. package/Sources/SwiftUI/API/ObservableObject.swift +293 -0
  286. package/Sources/SwiftUI/API/OnChange.swift +48 -0
  287. package/Sources/SwiftUI/API/Path.swift +543 -0
  288. package/Sources/SwiftUI/API/Phase8Controls.swift +411 -0
  289. package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
  290. package/Sources/SwiftUI/API/Picker.swift +185 -0
  291. package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
  292. package/Sources/SwiftUI/API/Popover.swift +41 -0
  293. package/Sources/SwiftUI/API/Preferences.swift +262 -0
  294. package/Sources/SwiftUI/API/Presentation.swift +122 -0
  295. package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
  296. package/Sources/SwiftUI/API/Primitives.swift +517 -0
  297. package/Sources/SwiftUI/API/Publishers.swift +107 -0
  298. package/Sources/SwiftUI/API/Redaction.swift +75 -0
  299. package/Sources/SwiftUI/API/RowActions.swift +84 -0
  300. package/Sources/SwiftUI/API/Scenes.swift +131 -0
  301. package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
  302. package/Sources/SwiftUI/API/ScrollTargets.swift +104 -0
  303. package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
  304. package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
  305. package/Sources/SwiftUI/API/Shape.swift +214 -0
  306. package/Sources/SwiftUI/API/ShapeStyle.swift +409 -0
  307. package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
  308. package/Sources/SwiftUI/API/Sharing.swift +193 -0
  309. package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
  310. package/Sources/SwiftUI/API/State.swift +144 -0
  311. package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
  312. package/Sources/SwiftUI/API/StrokeStyle.swift +30 -0
  313. package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
  314. package/Sources/SwiftUI/API/TabContent.swift +841 -0
  315. package/Sources/SwiftUI/API/Table.swift +382 -0
  316. package/Sources/SwiftUI/API/Tabs.swift +263 -0
  317. package/Sources/SwiftUI/API/Tasks.swift +35 -0
  318. package/Sources/SwiftUI/API/Text.swift +386 -0
  319. package/Sources/SwiftUI/API/TextDates.swift +61 -0
  320. package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
  321. package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
  322. package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
  323. package/Sources/SwiftUI/API/Timeline.swift +212 -0
  324. package/Sources/SwiftUI/API/Toolbar.swift +251 -0
  325. package/Sources/SwiftUI/API/Transfer.swift +145 -0
  326. package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
  327. package/Sources/SwiftUI/API/Video.swift +64 -0
  328. package/Sources/SwiftUI/API/View.swift +215 -0
  329. package/Sources/SwiftUI/API/ViewModifier.swift +43 -0
  330. package/Sources/SwiftUI/API/VisualEffect.swift +155 -0
  331. package/Sources/SwiftUI/API/Windows.swift +25 -0
  332. package/Sources/SwiftUI/Charts/Axis.swift +325 -0
  333. package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
  334. package/Sources/SwiftUI/Charts/Chart.swift +660 -0
  335. package/Sources/SwiftUI/Charts/ChartContent.swift +376 -0
  336. package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
  337. package/Sources/SwiftUI/Charts/Marks.swift +204 -0
  338. package/Sources/SwiftUI/Charts/Plottable.swift +99 -0
  339. package/Sources/SwiftUI/Charts/Scales.swift +326 -0
  340. package/Sources/SwiftUI/Localization/Localization.swift +498 -0
  341. package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
  342. package/Sources/SwiftUI/Runtime/Executor.swift +85 -0
  343. package/Sources/SwiftUI/Runtime/Exports.swift +101 -0
  344. package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
  345. package/Sources/SwiftUI/Runtime/JSON.swift +143 -0
  346. package/Sources/SwiftUI/Runtime/JSONParser.swift +443 -0
  347. package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
  348. package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
  349. package/Sources/SwiftUI/Runtime/Ops.swift +152 -0
  350. package/Sources/SwiftUI/Runtime/Reconciler.swift +219 -0
  351. package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
  352. package/Sources/SwiftUI/Runtime/Runtime.swift +2146 -0
  353. package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
  354. package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
  355. package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
  356. package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
  357. package/Sources/Symbols/Symbols.swift +25 -0
  358. package/Sources/Translation/Translation.swift +423 -0
  359. package/Sources/UIKit/Activity.swift +213 -0
  360. package/Sources/UIKit/Alerts.swift +69 -0
  361. package/Sources/UIKit/AppDelegate.swift +222 -0
  362. package/Sources/UIKit/Appearance.swift +84 -0
  363. package/Sources/UIKit/ColorConversions.swift +70 -0
  364. package/Sources/UIKit/Controls.swift +225 -0
  365. package/Sources/UIKit/Device.swift +200 -0
  366. package/Sources/UIKit/Feedback.swift +65 -0
  367. package/Sources/UIKit/Font.swift +307 -0
  368. package/Sources/UIKit/Graphics.swift +204 -0
  369. package/Sources/UIKit/HostingController.swift +185 -0
  370. package/Sources/UIKit/Identity.swift +24 -0
  371. package/Sources/UIKit/Introspectable.swift +510 -0
  372. package/Sources/UIKit/Pasteboard.swift +363 -0
  373. package/Sources/UIKit/PhotoAlbum.swift +81 -0
  374. package/Sources/UIKit/RemoteNotifications.swift +15 -0
  375. package/Sources/UIKit/Representable.swift +288 -0
  376. package/Sources/UIKit/SafeArea.swift +12 -0
  377. package/Sources/UIKit/SceneDelegates.swift +132 -0
  378. package/Sources/UIKit/Scenes.swift +40 -0
  379. package/Sources/UIKit/ScrollView.swift +157 -0
  380. package/Sources/UIKit/ShortcutItems.swift +67 -0
  381. package/Sources/UIKit/SymbolConfiguration.swift +124 -0
  382. package/Sources/UIKit/TargetAction.swift +123 -0
  383. package/Sources/UIKit/TextPaste.swift +161 -0
  384. package/Sources/UIKit/TextView.swift +538 -0
  385. package/Sources/UIKit/UIKit.swift +292 -0
  386. package/Sources/UIKit/UIView.swift +855 -0
  387. package/Sources/UIKit/ViewTranslation.swift +311 -0
  388. package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
  389. package/Sources/UserNotifications/Content.swift +370 -0
  390. package/Sources/UserNotifications/NotificationCenter.swift +309 -0
  391. package/Sources/WeatherKit/WeatherKit.swift +228 -0
  392. package/Sources/WebKit/WebKit.swift +245 -0
  393. package/Sources/os/os.swift +376 -0
  394. package/Sources/zlib/zlib.swift +6 -0
  395. package/index.d.ts +2 -0
  396. package/index.mjs +16 -0
  397. package/manifest.d.mts +2 -0
  398. package/manifest.mjs +39 -0
  399. package/package.json +30 -4
  400. package/sync-sources.mjs +33 -0
@@ -0,0 +1,125 @@
1
+ // The string comparisons `#Predicate` accepts on Apple platforms. swift-foundation
2
+ // compiles them only into Apple's Foundation (`FOUNDATION_FRAMEWORK`), so
3
+ // corelibs Foundation on WASI and Linux lacks them; SwiftData's copy of the
4
+ // predicate macro (Sources/SwiftDataMacros/PredicateMacro.swift) builds these.
5
+ // Adapted from swift-foundation's FoundationInternationalization/Predicate/
6
+ // LocalizedString.swift and FoundationEssentials/Predicate/Expressions/
7
+ // StringComparison.swift (Apache License v2.0 with Runtime Library Exception;
8
+ // see https://swift.org/LICENSE.txt).
9
+
10
+ import Foundation
11
+
12
+ extension PredicateExpressions {
13
+ public struct StringLocalizedStandardContains<Root: PredicateExpression, Other: PredicateExpression>: PredicateExpression
14
+ where Root.Output: StringProtocol, Other.Output: StringProtocol {
15
+ public typealias Output = Bool
16
+
17
+ public let root: Root
18
+ public let other: Other
19
+
20
+ public init(root: Root, other: Other) {
21
+ self.root = root
22
+ self.other = other
23
+ }
24
+
25
+ public func evaluate(_ bindings: PredicateBindings) throws -> Bool {
26
+ try root.evaluate(bindings).localizedStandardContains(try other.evaluate(bindings))
27
+ }
28
+ }
29
+
30
+ public static func build_localizedStandardContains<Root, Other>(_ root: Root, _ other: Other) -> StringLocalizedStandardContains<Root, Other> {
31
+ StringLocalizedStandardContains(root: root, other: other)
32
+ }
33
+
34
+ public struct StringLocalizedCompare<Root: PredicateExpression, Other: PredicateExpression>: PredicateExpression
35
+ where Root.Output: StringProtocol, Other.Output: StringProtocol {
36
+ public typealias Output = ComparisonResult
37
+
38
+ public let root: Root
39
+ public let other: Other
40
+
41
+ public init(root: Root, other: Other) {
42
+ self.root = root
43
+ self.other = other
44
+ }
45
+
46
+ public func evaluate(_ bindings: PredicateBindings) throws -> ComparisonResult {
47
+ try root.evaluate(bindings).localizedCompare(other.evaluate(bindings))
48
+ }
49
+ }
50
+
51
+ public static func build_localizedCompare<Root, Other>(_ root: Root, _ other: Other) -> StringLocalizedCompare<Root, Other> {
52
+ StringLocalizedCompare(root: root, other: other)
53
+ }
54
+
55
+ public struct StringCaseInsensitiveCompare<Root: PredicateExpression, Other: PredicateExpression>: PredicateExpression
56
+ where Root.Output: StringProtocol, Other.Output: StringProtocol {
57
+ public typealias Output = ComparisonResult
58
+
59
+ public let root: Root
60
+ public let other: Other
61
+
62
+ public init(root: Root, other: Other) {
63
+ self.root = root
64
+ self.other = other
65
+ }
66
+
67
+ public func evaluate(_ bindings: PredicateBindings) throws -> ComparisonResult {
68
+ try root.evaluate(bindings).caseInsensitiveCompare(try other.evaluate(bindings))
69
+ }
70
+ }
71
+
72
+ public static func build_caseInsensitiveCompare<Root, Other>(_ root: Root, _ other: Other) -> StringCaseInsensitiveCompare<Root, Other> {
73
+ StringCaseInsensitiveCompare(root: root, other: other)
74
+ }
75
+ }
76
+
77
+ extension PredicateExpressions.StringLocalizedStandardContains: StandardPredicateExpression where Root: StandardPredicateExpression, Other: StandardPredicateExpression {}
78
+ extension PredicateExpressions.StringLocalizedCompare: StandardPredicateExpression where Root: StandardPredicateExpression, Other: StandardPredicateExpression {}
79
+ extension PredicateExpressions.StringCaseInsensitiveCompare: StandardPredicateExpression where Root: StandardPredicateExpression, Other: StandardPredicateExpression {}
80
+
81
+ extension PredicateExpressions.StringLocalizedStandardContains: Sendable where Root: Sendable, Other: Sendable {}
82
+ extension PredicateExpressions.StringLocalizedCompare: Sendable where Root: Sendable, Other: Sendable {}
83
+ extension PredicateExpressions.StringCaseInsensitiveCompare: Sendable where Root: Sendable, Other: Sendable {}
84
+
85
+ extension PredicateExpressions.StringLocalizedStandardContains: Codable where Root: Codable, Other: Codable {
86
+ public func encode(to encoder: any Encoder) throws {
87
+ var container = encoder.unkeyedContainer()
88
+ try container.encode(root)
89
+ try container.encode(other)
90
+ }
91
+
92
+ public init(from decoder: any Decoder) throws {
93
+ var container = try decoder.unkeyedContainer()
94
+ root = try container.decode(Root.self)
95
+ other = try container.decode(Other.self)
96
+ }
97
+ }
98
+
99
+ extension PredicateExpressions.StringLocalizedCompare: Codable where Root: Codable, Other: Codable {
100
+ public func encode(to encoder: any Encoder) throws {
101
+ var container = encoder.unkeyedContainer()
102
+ try container.encode(root)
103
+ try container.encode(other)
104
+ }
105
+
106
+ public init(from decoder: any Decoder) throws {
107
+ var container = try decoder.unkeyedContainer()
108
+ root = try container.decode(Root.self)
109
+ other = try container.decode(Other.self)
110
+ }
111
+ }
112
+
113
+ extension PredicateExpressions.StringCaseInsensitiveCompare: Codable where Root: Codable, Other: Codable {
114
+ public func encode(to encoder: any Encoder) throws {
115
+ var container = encoder.unkeyedContainer()
116
+ try container.encode(root)
117
+ try container.encode(other)
118
+ }
119
+
120
+ public init(from decoder: any Decoder) throws {
121
+ var container = try decoder.unkeyedContainer()
122
+ root = try container.decode(Root.self)
123
+ other = try container.decode(Other.self)
124
+ }
125
+ }
@@ -0,0 +1,82 @@
1
+ // SwiftUI's `@Entry` (Sources/SwiftUI/API/Entry.swift), expanded the way
2
+ // Apple's is: the property becomes computed over a private key type, its
3
+ // peer, whose default value is the property's initial value (nil for an
4
+ // optional without one).
5
+ //
6
+ // extension EnvironmentValues { @Entry var isCompact: Bool = false }
7
+ //
8
+ // becomes
9
+ //
10
+ // var isCompact: Bool {
11
+ // get { self[__Key_isCompact.self] }
12
+ // set { self[__Key_isCompact.self] = newValue }
13
+ // }
14
+ // private struct __Key_isCompact: SwiftUI.EnvironmentKey {
15
+ // typealias Value = Bool
16
+ // static var defaultValue: Value { false }
17
+ // }
18
+ //
19
+ // It lives in this macro target so that apps build one macro plugin.
20
+
21
+ import SwiftDiagnostics
22
+ import SwiftSyntax
23
+ import SwiftSyntaxBuilder
24
+ import SwiftSyntaxMacros
25
+
26
+ public struct EntryMacro: AccessorMacro, PeerMacro {
27
+ struct Entry {
28
+ let name: String
29
+ let type: TypeSyntax?
30
+ let initialValue: ExprSyntax?
31
+ }
32
+
33
+ static func entry(of declaration: some DeclSyntaxProtocol, in context: some MacroExpansionContext) throws -> Entry {
34
+ guard let variable = declaration.as(VariableDeclSyntax.self), variable.bindings.count == 1,
35
+ let binding = variable.bindings.first,
36
+ let identifier = binding.pattern.as(IdentifierPatternSyntax.self),
37
+ binding.accessorBlock == nil else {
38
+ throw MacroExpansionErrorMessage("@Entry applies to a single stored `var` with an initial value or an optional type")
39
+ }
40
+ let entry = Entry(name: identifier.identifier.trimmedDescription,
41
+ type: binding.typeAnnotation?.type.trimmed,
42
+ initialValue: binding.initializer?.value.trimmed)
43
+ if entry.initialValue == nil && entry.type?.is(OptionalTypeSyntax.self) != true
44
+ && entry.type?.is(ImplicitlyUnwrappedOptionalTypeSyntax.self) != true {
45
+ throw MacroExpansionErrorMessage("@Entry needs an initial value (or an optional type, whose default is nil)")
46
+ }
47
+ if entry.type == nil && entry.initialValue == nil {
48
+ throw MacroExpansionErrorMessage("@Entry needs a type or an initial value")
49
+ }
50
+ return entry
51
+ }
52
+
53
+ public static func expansion(of node: AttributeSyntax, providingAccessorsOf declaration: some DeclSyntaxProtocol,
54
+ in context: some MacroExpansionContext) throws -> [AccessorDeclSyntax] {
55
+ let entry = try entry(of: declaration, in: context)
56
+ return [
57
+ "get { self[__Key_\(raw: entry.name).self] }",
58
+ "set { self[__Key_\(raw: entry.name).self] = newValue }",
59
+ ]
60
+ }
61
+
62
+ public static func expansion(of node: AttributeSyntax, providingPeersOf declaration: some DeclSyntaxProtocol,
63
+ in context: some MacroExpansionContext) throws -> [DeclSyntax] {
64
+ let entry = try entry(of: declaration, in: context)
65
+ let key: DeclSyntax
66
+ if let type = entry.type {
67
+ key = """
68
+ private struct __Key_\(raw: entry.name): SwiftUI.EnvironmentKey {
69
+ typealias Value = \(type)
70
+ static var defaultValue: Value { \(entry.initialValue ?? "nil") }
71
+ }
72
+ """
73
+ } else {
74
+ key = """
75
+ private struct __Key_\(raw: entry.name): SwiftUI.EnvironmentKey {
76
+ nonisolated(unsafe) static let defaultValue = \(entry.initialValue!)
77
+ }
78
+ """
79
+ }
80
+ return [key]
81
+ }
82
+ }
@@ -0,0 +1,183 @@
1
+ // FoundationModels' `@Generable` and `@Guide` (Sources/FoundationModels),
2
+ // in this macro target so that apps build one macro plugin.
3
+ //
4
+ // `@Generable` makes a struct or an enum `Generable`: an extension with its
5
+ // generation schema (a struct's stored properties with their `@Guide`
6
+ // descriptions and guides, an enum's case names as choices), an
7
+ // `init(_: GeneratedContent)` that reads each property by name, and
8
+ // `generatedContent`, which writes them. The members are `nonisolated`, so
9
+ // a type in a main-actor module still conforms without isolation.
10
+ //
11
+ // @Generable struct Tags {
12
+ // @Guide(description: "Hashtags", .count(5)) let values: [String]
13
+ // }
14
+ //
15
+ // becomes, besides the struct,
16
+ //
17
+ // extension Tags: FoundationModels.Generable {
18
+ // nonisolated static var generationSchema: FoundationModels.GenerationSchema {
19
+ // FoundationModels.GenerationSchema(type: Self.self, description: nil, properties: [
20
+ // FoundationModels.GenerationSchema.Property(name: "values", description: "Hashtags",
21
+ // type: [String].self, _guides: [.count(5)])])
22
+ // }
23
+ // nonisolated init(_ generatedContent: FoundationModels.GeneratedContent) throws {
24
+ // self.values = try generatedContent.value([String].self, forProperty: "values")
25
+ // }
26
+ // nonisolated var generatedContent: FoundationModels.GeneratedContent {
27
+ // FoundationModels.GeneratedContent(properties: ["values": values])
28
+ // }
29
+ // }
30
+ //
31
+ // Apple's macro also makes a `PartiallyGenerated` type with optional
32
+ // properties for streaming; here `PartiallyGenerated` is the type itself.
33
+ // `@Guide` adds nothing of its own: `@Generable` reads it.
34
+
35
+ import SwiftDiagnostics
36
+ import SwiftSyntax
37
+ import SwiftSyntaxBuilder
38
+ import SwiftSyntaxMacros
39
+
40
+ public struct GenerableMacro: ExtensionMacro {
41
+ struct Property {
42
+ let name: String
43
+ let type: TypeSyntax
44
+ let description: ExprSyntax?
45
+ let guides: [ExprSyntax]
46
+ }
47
+
48
+ public static func expansion(
49
+ of node: AttributeSyntax,
50
+ attachedTo declaration: some DeclGroupSyntax,
51
+ providingExtensionsOf type: some TypeSyntaxProtocol,
52
+ conformingTo protocols: [TypeSyntax],
53
+ in context: some MacroExpansionContext
54
+ ) throws -> [ExtensionDeclSyntax] {
55
+ let access = ModelSyntax.accessPrefix(of: declaration)
56
+ let description = argument(named: "description", of: node)?.trimmedDescription ?? "nil"
57
+ let members: String
58
+ if let structDecl = declaration.as(StructDeclSyntax.self) {
59
+ members = try structMembers(structDecl, access: access, description: description)
60
+ } else if let enumDecl = declaration.as(EnumDeclSyntax.self) {
61
+ members = try enumMembers(enumDecl, access: access, description: description)
62
+ } else {
63
+ throw MacroExpansionErrorMessage("@Generable applies to a struct or an enum")
64
+ }
65
+ let conformance = protocols.isEmpty ? "" : ": FoundationModels.Generable"
66
+ let decl: DeclSyntax = "extension \(type.trimmed)\(raw: conformance) {\n\(raw: members)\n}"
67
+ return [decl.cast(ExtensionDeclSyntax.self)]
68
+ }
69
+
70
+ static func structMembers(_ decl: StructDeclSyntax, access: String, description: String) throws -> String {
71
+ let properties = try storedProperties(of: decl)
72
+ let schema = properties.map { property in
73
+ var arguments = "name: \(literal(property.name)), description: \(property.description?.trimmedDescription ?? "nil"), type: \(property.type.trimmedDescription).self"
74
+ if !property.guides.isEmpty {
75
+ arguments += ", _guides: [\(property.guides.map(\.trimmedDescription).joined(separator: ", "))]"
76
+ }
77
+ return "FoundationModels.GenerationSchema.Property(\(arguments))"
78
+ }
79
+ let reads = properties.map {
80
+ " self.\($0.name) = try generatedContent.value(\($0.type.trimmedDescription).self, forProperty: \(literal($0.name)))"
81
+ }
82
+ let writes = properties.map { "\(literal($0.name)): \($0.name)" }
83
+ return """
84
+ nonisolated \(access)static var generationSchema: FoundationModels.GenerationSchema {
85
+ FoundationModels.GenerationSchema(type: Self.self, description: \(description), properties: [\(schema.joined(separator: ", "))])
86
+ }
87
+ nonisolated \(access)init(_ generatedContent: FoundationModels.GeneratedContent) throws {
88
+ \(reads.joined(separator: "\n"))
89
+ }
90
+ nonisolated \(access)var generatedContent: FoundationModels.GeneratedContent {
91
+ FoundationModels.GeneratedContent(properties: [\(writes.isEmpty ? ":" : writes.joined(separator: ", "))])
92
+ }
93
+ """
94
+ }
95
+
96
+ static func enumMembers(_ decl: EnumDeclSyntax, access: String, description: String) throws -> String {
97
+ var names: [String] = []
98
+ for member in decl.memberBlock.members {
99
+ guard let cases = member.decl.as(EnumCaseDeclSyntax.self) else { continue }
100
+ for element in cases.elements {
101
+ if element.parameterClause != nil {
102
+ throw MacroExpansionErrorMessage("@Generable supports enums whose cases have no associated values")
103
+ }
104
+ names.append(element.name.trimmedDescription)
105
+ }
106
+ }
107
+ let choices = names.map { literal($0) }.joined(separator: ", ")
108
+ let reads = names.map { " case \(literal($0)): self = .\($0)" }.joined(separator: "\n")
109
+ let writes = names.map { " case .\($0): FoundationModels.GeneratedContent(kind: .string(\(literal($0))))" }.joined(separator: "\n")
110
+ return """
111
+ nonisolated \(access)static var generationSchema: FoundationModels.GenerationSchema {
112
+ FoundationModels.GenerationSchema(type: Self.self, description: \(description), anyOf: [\(choices)])
113
+ }
114
+ nonisolated \(access)init(_ generatedContent: FoundationModels.GeneratedContent) throws {
115
+ switch try generatedContent.value(String.self) {
116
+ \(reads)
117
+ default: throw FoundationModels.GeneratedContent._mismatch(generatedContent, Self.self)
118
+ }
119
+ }
120
+ nonisolated \(access)var generatedContent: FoundationModels.GeneratedContent {
121
+ switch self {
122
+ \(writes.isEmpty ? " default: FoundationModels.GeneratedContent(kind: .null)" : writes)
123
+ }
124
+ }
125
+ """
126
+ }
127
+
128
+ /// The struct's stored instance properties, in order (a `let` with an
129
+ /// initial value is left out: it cannot be set from generated content).
130
+ static func storedProperties(of decl: StructDeclSyntax) throws -> [Property] {
131
+ var properties: [Property] = []
132
+ for member in decl.memberBlock.members {
133
+ guard let variable = member.decl.as(VariableDeclSyntax.self) else { continue }
134
+ if variable.modifiers.contains(where: { [.keyword(.static), .keyword(.class), .keyword(.lazy)].contains($0.name.tokenKind) }) {
135
+ continue
136
+ }
137
+ let guide = ModelSyntax.attributes(of: variable).first { ModelSyntax.attributeName($0) == "Guide" }
138
+ for binding in variable.bindings {
139
+ guard let identifier = binding.pattern.as(IdentifierPatternSyntax.self) else { continue }
140
+ if let accessors = binding.accessorBlock {
141
+ // Computed properties are not generated; observed ones are stored.
142
+ if case .accessors(let list) = accessors.accessors,
143
+ list.allSatisfy({ ["willSet", "didSet"].contains($0.accessorSpecifier.text) }) {
144
+ } else {
145
+ continue
146
+ }
147
+ }
148
+ if variable.bindingSpecifier.tokenKind == .keyword(.let), binding.initializer != nil { continue }
149
+ guard let type = binding.typeAnnotation?.type else {
150
+ throw MacroExpansionErrorMessage("@Generable needs the type of '\(identifier.identifier.text)' written out")
151
+ }
152
+ var description: ExprSyntax?
153
+ var guides: [ExprSyntax] = []
154
+ if let guide, case .argumentList(let list)? = guide.arguments {
155
+ for argument in list {
156
+ if argument.label?.text == "description" { description = argument.expression.trimmed }
157
+ else { guides.append(argument.expression.trimmed) }
158
+ }
159
+ }
160
+ properties.append(Property(name: identifier.identifier.trimmedDescription, type: type.trimmed,
161
+ description: description, guides: guides))
162
+ }
163
+ }
164
+ return properties
165
+ }
166
+
167
+ static func argument(named label: String, of attribute: AttributeSyntax) -> ExprSyntax? {
168
+ guard case .argumentList(let list)? = attribute.arguments else { return nil }
169
+ return list.first { $0.label?.text == label }?.expression.trimmed
170
+ }
171
+
172
+ static func literal(_ text: String) -> String {
173
+ "\"" + text.filter { $0 != "`" } + "\""
174
+ }
175
+ }
176
+
177
+ /// `@Guide`: read by `@Generable`; adds nothing itself.
178
+ public struct GuideMacro: PeerMacro {
179
+ public static func expansion(of node: AttributeSyntax, providingPeersOf declaration: some DeclSyntaxProtocol,
180
+ in context: some MacroExpansionContext) throws -> [DeclSyntax] {
181
+ []
182
+ }
183
+ }
@@ -0,0 +1,46 @@
1
+ // `@ModelActor`, expanded as Apple's SwiftData expands it: the actor gains
2
+ // its container, an executor that holds a context of its own, and
3
+ // `init(modelContainer:)`; an extension makes it a `ModelActor`, whose
4
+ // `modelContext` is the executor's. It runs on the main actor's executor
5
+ // (ModelActor.swift), where Apple's runs on the model executor.
6
+
7
+ import SwiftDiagnostics
8
+ import SwiftSyntax
9
+ import SwiftSyntaxBuilder
10
+ import SwiftSyntaxMacros
11
+
12
+ public struct ModelActorMacro: MemberMacro, ExtensionMacro {
13
+ public static func expansion(
14
+ of node: AttributeSyntax,
15
+ providingMembersOf declaration: some DeclGroupSyntax,
16
+ conformingTo protocols: [TypeSyntax],
17
+ in context: some MacroExpansionContext
18
+ ) throws -> [DeclSyntax] {
19
+ guard declaration.is(ActorDeclSyntax.self) else {
20
+ context.diagnose(Diagnostic(node: Syntax(node), message: ModelDiagnostic(message: "@ModelActor can only be applied to an actor")))
21
+ return []
22
+ }
23
+ return [
24
+ "nonisolated let modelExecutor: any SwiftData.ModelExecutor",
25
+ "nonisolated let modelContainer: SwiftData.ModelContainer",
26
+ """
27
+ init(modelContainer: SwiftData.ModelContainer) {
28
+ let modelContext = SwiftData.ModelContext(modelContainer)
29
+ self.modelExecutor = SwiftData.DefaultSerialModelExecutor(modelContext: modelContext)
30
+ self.modelContainer = modelContainer
31
+ }
32
+ """,
33
+ ]
34
+ }
35
+
36
+ public static func expansion(
37
+ of node: AttributeSyntax,
38
+ attachedTo declaration: some DeclGroupSyntax,
39
+ providingExtensionsOf type: some TypeSyntaxProtocol,
40
+ conformingTo protocols: [TypeSyntax],
41
+ in context: some MacroExpansionContext
42
+ ) throws -> [ExtensionDeclSyntax] {
43
+ guard declaration.is(ActorDeclSyntax.self) else { return [] }
44
+ return [try ExtensionDeclSyntax("extension \(type.trimmed): SwiftData.ModelActor {}")]
45
+ }
46
+ }