@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.
- package/Package.swift +214 -0
- package/README.md +10 -2
- package/Sources/AVFoundation/AVFoundation.swift +131 -0
- package/Sources/AVFoundation/Asset.swift +487 -0
- package/Sources/AVFoundation/AudioSession.swift +144 -0
- package/Sources/AVFoundation/CMTime.swift +303 -0
- package/Sources/AVFoundation/Capture.swift +688 -0
- package/Sources/AVFoundation/Player.swift +749 -0
- package/Sources/AVFoundation/PlayerView.swift +117 -0
- package/Sources/AVKit/AVKit.swift +132 -0
- package/Sources/Accelerate/Accelerate.swift +122 -0
- package/Sources/AppIntents/AppIntents.swift +144 -0
- package/Sources/AppIntents/Parameters.swift +220 -0
- package/Sources/AppIntents/Shortcuts.swift +159 -0
- package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
- package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
- package/Sources/AuthenticationServices/Authorization.swift +251 -0
- package/Sources/Charts/Charts.swift +61 -0
- package/Sources/Combine/AnyCancellable.swift +65 -0
- package/Sources/Combine/AnyPublisher.swift +148 -0
- package/Sources/Combine/AnySubscriber.swift +230 -0
- package/Sources/Combine/Cancellable.swift +35 -0
- package/Sources/Combine/Codable.swift +29 -0
- package/Sources/Combine/CombineIdentifier.swift +45 -0
- package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
- package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
- package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
- package/Sources/Combine/CurrentValueSubject.swift +252 -0
- package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
- package/Sources/Combine/Future.swift +228 -0
- package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
- package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
- package/Sources/Combine/Helpers/ConduitList.swift +59 -0
- package/Sources/Combine/Helpers/DebugHook.swift +177 -0
- package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
- package/Sources/Combine/Helpers/Locking.swift +30 -0
- package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
- package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
- package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
- package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
- package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
- package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
- package/Sources/Combine/Helpers/Utils.swift +30 -0
- package/Sources/Combine/Helpers/Violations.swift +33 -0
- package/Sources/Combine/ImmediateScheduler.swift +178 -0
- package/Sources/Combine/LICENSE +21 -0
- package/Sources/Combine/NotificationPublisher.swift +48 -0
- package/Sources/Combine/ObjectWillChange.swift +46 -0
- package/Sources/Combine/PassthroughSubject.swift +222 -0
- package/Sources/Combine/Publisher+Subscribe.swift +53 -0
- package/Sources/Combine/Publishers/Deferred.swift +48 -0
- package/Sources/Combine/Publishers/Empty.swift +54 -0
- package/Sources/Combine/Publishers/Fail.swift +42 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
- package/Sources/Combine/Publishers/Just.swift +313 -0
- package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
- package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
- package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
- package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
- package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
- package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
- package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
- package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
- package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
- package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
- package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
- package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
- package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
- package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
- package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
- package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
- package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
- package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
- package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
- package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
- package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
- package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
- package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
- package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
- package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
- package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
- package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
- package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
- package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
- package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
- package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
- package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
- package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
- package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
- package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
- package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
- package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
- package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
- package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
- package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
- package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
- package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
- package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
- package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
- package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
- package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
- package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
- package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
- package/Sources/Combine/Publishers/Publishers.swift +13 -0
- package/Sources/Combine/Publishers/Record.swift +237 -0
- package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
- package/Sources/Combine/Result.swift +46 -0
- package/Sources/Combine/Scheduler.swift +89 -0
- package/Sources/Combine/Schedulers.swift +211 -0
- package/Sources/Combine/Subject+Void.swift +17 -0
- package/Sources/Combine/Subscriber+Void.swift +20 -0
- package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
- package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
- package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
- package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
- package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
- package/Sources/Combine/Subscription.swift +22 -0
- package/Sources/Combine/Subscriptions.swift +42 -0
- package/Sources/Combine/SwiftUIObservation.swift +10 -0
- package/Sources/Combine/_Introspection.swift +107 -0
- package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
- package/Sources/Compression/Compression.swift +365 -0
- package/Sources/Compression/Deflate.swift +407 -0
- package/Sources/Compression/Zlib.swift +179 -0
- package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
- package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
- package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
- package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
- package/Sources/CoreImage/CIColor.swift +41 -0
- package/Sources/CoreImage/CIContext.swift +31 -0
- package/Sources/CoreImage/CIDetector.swift +57 -0
- package/Sources/CoreImage/CIFilter.swift +243 -0
- package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
- package/Sources/CoreImage/CIImage.swift +162 -0
- package/Sources/CoreImage/QRCode.swift +393 -0
- package/Sources/CoreLocation/Coordinate.swift +30 -0
- package/Sources/CoreLocation/Location.swift +65 -0
- package/Sources/CoreML/Evaluation.swift +414 -0
- package/Sources/CoreML/FeatureValue.swift +266 -0
- package/Sources/CoreML/Model.swift +269 -0
- package/Sources/CoreML/MultiArray.swift +92 -0
- package/Sources/CoreML/Specification.swift +233 -0
- package/Sources/CoreText/CoreText.swift +64 -0
- package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
- package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
- package/Sources/CryptoKit/CryptoKit.swift +375 -0
- package/Sources/CryptoKit/Curve25519.swift +317 -0
- package/Sources/CryptoKit/P256.swift +321 -0
- package/Sources/FoundationBridge/AppStorage.swift +165 -0
- package/Sources/FoundationBridge/AssetResources.swift +90 -0
- package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
- package/Sources/FoundationBridge/AsyncImage.swift +116 -0
- package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
- package/Sources/FoundationBridge/Bundle.swift +119 -0
- package/Sources/FoundationBridge/CombineExports.swift +8 -0
- package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
- package/Sources/FoundationBridge/Dispatch.swift +458 -0
- package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
- package/Sources/FoundationBridge/FileImporter.swift +128 -0
- package/Sources/FoundationBridge/FileSystem.swift +68 -0
- package/Sources/FoundationBridge/FoundationBridge.swift +29 -0
- package/Sources/FoundationBridge/HostResolution.swift +31 -0
- package/Sources/FoundationBridge/ItemProvider.swift +655 -0
- package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
- package/Sources/FoundationBridge/Links.swift +127 -0
- package/Sources/FoundationBridge/ListFormatter.swift +32 -0
- package/Sources/FoundationBridge/Locale.swift +86 -0
- package/Sources/FoundationBridge/Localization.swift +149 -0
- package/Sources/FoundationBridge/Locks.swift +50 -0
- package/Sources/FoundationBridge/Markdown.swift +527 -0
- package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
- package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
- package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
- package/Sources/FoundationBridge/Operation.swift +195 -0
- package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
- package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
- package/Sources/FoundationBridge/SceneStorage.swift +78 -0
- package/Sources/FoundationBridge/SecurityExports.swift +8 -0
- package/Sources/FoundationBridge/Selector.swift +226 -0
- package/Sources/FoundationBridge/StringComparators.swift +17 -0
- package/Sources/FoundationBridge/Table.swift +211 -0
- package/Sources/FoundationBridge/TextAttributes.swift +42 -0
- package/Sources/FoundationBridge/Timer.swift +53 -0
- package/Sources/FoundationBridge/UITextChecker.swift +30 -0
- package/Sources/FoundationBridge/URLSession.swift +718 -0
- package/Sources/FoundationBridge/UserDefaults.swift +183 -0
- package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
- package/Sources/FoundationBridge/WebSocket.swift +187 -0
- package/Sources/FoundationModels/FoundationModels.swift +1098 -0
- package/Sources/ImageIO/GIF.swift +72 -0
- package/Sources/ImageIO/ImageIO.swift +248 -0
- package/Sources/ImageIO/ImageTypes.swift +28 -0
- package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
- package/Sources/LocalAuthentication/LAContext.swift +86 -0
- package/Sources/MapKit/Geometry.swift +223 -0
- package/Sources/MapKit/Map.swift +638 -0
- package/Sources/MapKit/MapView.swift +229 -0
- package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
- package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
- package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
- package/Sources/OSLog/OSLog.swift +6 -0
- package/Sources/Photos/Photos.swift +572 -0
- package/Sources/PhotosUI/PhotosPicker.swift +248 -0
- package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
- package/Sources/QuickLook/QuickLook.swift +168 -0
- package/Sources/SafariServices/SafariServices.swift +106 -0
- package/Sources/Security/Security.swift +332 -0
- package/Sources/StoreKit/AppStore.swift +207 -0
- package/Sources/StoreKit/Products.swift +280 -0
- package/Sources/StoreKit/RequestReview.swift +28 -0
- package/Sources/StoreKit/StoreKit1.swift +486 -0
- package/Sources/StoreKit/StoreViews.swift +428 -0
- package/Sources/StoreKit/Transactions.swift +197 -0
- package/Sources/SwiftData/Macros.swift +58 -0
- package/Sources/SwiftData/ModelActor.swift +38 -0
- package/Sources/SwiftData/ModelContainer.swift +129 -0
- package/Sources/SwiftData/ModelContext.swift +451 -0
- package/Sources/SwiftData/PersistentModel.swift +238 -0
- package/Sources/SwiftData/Properties.swift +261 -0
- package/Sources/SwiftData/Query.swift +256 -0
- package/Sources/SwiftData/Schema.swift +192 -0
- package/Sources/SwiftData/Store.swift +146 -0
- package/Sources/SwiftData/StringPredicates.swift +125 -0
- package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
- package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
- package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
- package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
- package/Sources/SwiftDataMacros/Plugin.swift +18 -0
- package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
- package/Sources/SwiftUI/API/Accessibility.swift +181 -0
- package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
- package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
- package/Sources/SwiftUI/API/Alert.swift +221 -0
- package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
- package/Sources/SwiftUI/API/Animation.swift +285 -0
- package/Sources/SwiftUI/API/App.swift +87 -0
- package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
- package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
- package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
- package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
- package/Sources/SwiftUI/API/Canvas.swift +337 -0
- package/Sources/SwiftUI/API/Color.swift +237 -0
- package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
- package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
- package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
- package/Sources/SwiftUI/API/Commands.swift +106 -0
- package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
- package/Sources/SwiftUI/API/ContentShape.swift +33 -0
- package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
- package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
- package/Sources/SwiftUI/API/Controls.swift +300 -0
- package/Sources/SwiftUI/API/CustomLayout.swift +442 -0
- package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
- package/Sources/SwiftUI/API/Decorations.swift +92 -0
- package/Sources/SwiftUI/API/EditMode.swift +212 -0
- package/Sources/SwiftUI/API/Effects.swift +388 -0
- package/Sources/SwiftUI/API/Entry.swift +8 -0
- package/Sources/SwiftUI/API/Environment.swift +439 -0
- package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
- package/Sources/SwiftUI/API/Focus.swift +137 -0
- package/Sources/SwiftUI/API/Font.swift +131 -0
- package/Sources/SwiftUI/API/Gauge.swift +290 -0
- package/Sources/SwiftUI/API/Geometry.swift +89 -0
- package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
- package/Sources/SwiftUI/API/GeometryReader.swift +135 -0
- package/Sources/SwiftUI/API/GestureState.swift +65 -0
- package/Sources/SwiftUI/API/Gestures.swift +342 -0
- package/Sources/SwiftUI/API/Glass.swift +127 -0
- package/Sources/SwiftUI/API/Grid.swift +188 -0
- package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
- package/Sources/SwiftUI/API/KeyPress.swift +54 -0
- package/Sources/SwiftUI/API/LabelStyle.swift +124 -0
- package/Sources/SwiftUI/API/Layout.swift +220 -0
- package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
- package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
- package/Sources/SwiftUI/API/Lists.swift +331 -0
- package/Sources/SwiftUI/API/Menu.swift +58 -0
- package/Sources/SwiftUI/API/Modifiers.swift +313 -0
- package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
- package/Sources/SwiftUI/API/Namespace.swift +44 -0
- package/Sources/SwiftUI/API/Navigation.swift +386 -0
- package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
- package/Sources/SwiftUI/API/ObservableObject.swift +293 -0
- package/Sources/SwiftUI/API/OnChange.swift +48 -0
- package/Sources/SwiftUI/API/Path.swift +543 -0
- package/Sources/SwiftUI/API/Phase8Controls.swift +411 -0
- package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
- package/Sources/SwiftUI/API/Picker.swift +185 -0
- package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
- package/Sources/SwiftUI/API/Popover.swift +41 -0
- package/Sources/SwiftUI/API/Preferences.swift +262 -0
- package/Sources/SwiftUI/API/Presentation.swift +122 -0
- package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
- package/Sources/SwiftUI/API/Primitives.swift +517 -0
- package/Sources/SwiftUI/API/Publishers.swift +107 -0
- package/Sources/SwiftUI/API/Redaction.swift +75 -0
- package/Sources/SwiftUI/API/RowActions.swift +84 -0
- package/Sources/SwiftUI/API/Scenes.swift +131 -0
- package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
- package/Sources/SwiftUI/API/ScrollTargets.swift +104 -0
- package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
- package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
- package/Sources/SwiftUI/API/Shape.swift +214 -0
- package/Sources/SwiftUI/API/ShapeStyle.swift +409 -0
- package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
- package/Sources/SwiftUI/API/Sharing.swift +193 -0
- package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
- package/Sources/SwiftUI/API/State.swift +144 -0
- package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
- package/Sources/SwiftUI/API/StrokeStyle.swift +30 -0
- package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
- package/Sources/SwiftUI/API/TabContent.swift +841 -0
- package/Sources/SwiftUI/API/Table.swift +382 -0
- package/Sources/SwiftUI/API/Tabs.swift +263 -0
- package/Sources/SwiftUI/API/Tasks.swift +35 -0
- package/Sources/SwiftUI/API/Text.swift +386 -0
- package/Sources/SwiftUI/API/TextDates.swift +61 -0
- package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
- package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
- package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
- package/Sources/SwiftUI/API/Timeline.swift +212 -0
- package/Sources/SwiftUI/API/Toolbar.swift +251 -0
- package/Sources/SwiftUI/API/Transfer.swift +145 -0
- package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
- package/Sources/SwiftUI/API/Video.swift +64 -0
- package/Sources/SwiftUI/API/View.swift +215 -0
- package/Sources/SwiftUI/API/ViewModifier.swift +43 -0
- package/Sources/SwiftUI/API/VisualEffect.swift +155 -0
- package/Sources/SwiftUI/API/Windows.swift +25 -0
- package/Sources/SwiftUI/Charts/Axis.swift +325 -0
- package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
- package/Sources/SwiftUI/Charts/Chart.swift +660 -0
- package/Sources/SwiftUI/Charts/ChartContent.swift +376 -0
- package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
- package/Sources/SwiftUI/Charts/Marks.swift +204 -0
- package/Sources/SwiftUI/Charts/Plottable.swift +99 -0
- package/Sources/SwiftUI/Charts/Scales.swift +326 -0
- package/Sources/SwiftUI/Localization/Localization.swift +498 -0
- package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
- package/Sources/SwiftUI/Runtime/Executor.swift +85 -0
- package/Sources/SwiftUI/Runtime/Exports.swift +101 -0
- package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
- package/Sources/SwiftUI/Runtime/JSON.swift +143 -0
- package/Sources/SwiftUI/Runtime/JSONParser.swift +443 -0
- package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
- package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
- package/Sources/SwiftUI/Runtime/Ops.swift +152 -0
- package/Sources/SwiftUI/Runtime/Reconciler.swift +219 -0
- package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
- package/Sources/SwiftUI/Runtime/Runtime.swift +2146 -0
- package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
- package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
- package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
- package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
- package/Sources/Symbols/Symbols.swift +25 -0
- package/Sources/Translation/Translation.swift +423 -0
- package/Sources/UIKit/Activity.swift +213 -0
- package/Sources/UIKit/Alerts.swift +69 -0
- package/Sources/UIKit/AppDelegate.swift +222 -0
- package/Sources/UIKit/Appearance.swift +84 -0
- package/Sources/UIKit/ColorConversions.swift +70 -0
- package/Sources/UIKit/Controls.swift +225 -0
- package/Sources/UIKit/Device.swift +200 -0
- package/Sources/UIKit/Feedback.swift +65 -0
- package/Sources/UIKit/Font.swift +307 -0
- package/Sources/UIKit/Graphics.swift +204 -0
- package/Sources/UIKit/HostingController.swift +185 -0
- package/Sources/UIKit/Identity.swift +24 -0
- package/Sources/UIKit/Introspectable.swift +510 -0
- package/Sources/UIKit/Pasteboard.swift +363 -0
- package/Sources/UIKit/PhotoAlbum.swift +81 -0
- package/Sources/UIKit/RemoteNotifications.swift +15 -0
- package/Sources/UIKit/Representable.swift +288 -0
- package/Sources/UIKit/SafeArea.swift +12 -0
- package/Sources/UIKit/SceneDelegates.swift +132 -0
- package/Sources/UIKit/Scenes.swift +40 -0
- package/Sources/UIKit/ScrollView.swift +157 -0
- package/Sources/UIKit/ShortcutItems.swift +67 -0
- package/Sources/UIKit/SymbolConfiguration.swift +124 -0
- package/Sources/UIKit/TargetAction.swift +123 -0
- package/Sources/UIKit/TextPaste.swift +161 -0
- package/Sources/UIKit/TextView.swift +538 -0
- package/Sources/UIKit/UIKit.swift +292 -0
- package/Sources/UIKit/UIView.swift +855 -0
- package/Sources/UIKit/ViewTranslation.swift +311 -0
- package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
- package/Sources/UserNotifications/Content.swift +370 -0
- package/Sources/UserNotifications/NotificationCenter.swift +309 -0
- package/Sources/WeatherKit/WeatherKit.swift +228 -0
- package/Sources/WebKit/WebKit.swift +245 -0
- package/Sources/os/os.swift +376 -0
- package/Sources/zlib/zlib.swift +6 -0
- package/index.d.ts +2 -0
- package/index.mjs +16 -0
- package/manifest.d.mts +2 -0
- package/manifest.mjs +39 -0
- package/package.json +30 -4
- 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
|
+
}
|