@swiftbrowser/swift 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Package.swift +200 -9
- package/README.md +7 -9
- 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 +0 -4
- 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/{_FoundationCommon → FoundationBridge}/Bundle.swift +41 -4
- 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 +24 -72
- 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/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 +6 -1
- package/Sources/FoundationBridge/URLSession.swift +718 -0
- package/Sources/{_FoundationCommon → FoundationBridge}/UserDefaults.swift +17 -4
- 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 +55 -6
- package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
- package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
- package/Sources/SwiftUI/API/Alert.swift +1 -1
- package/Sources/SwiftUI/API/AlignmentGuides.swift +68 -0
- package/Sources/SwiftUI/API/Animation.swift +37 -5
- package/Sources/SwiftUI/API/App.swift +31 -1
- 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 +104 -28
- 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 +59 -27
- package/Sources/SwiftUI/API/CustomLayout.swift +49 -10
- package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
- package/Sources/SwiftUI/API/Decorations.swift +1 -1
- package/Sources/SwiftUI/API/EditMode.swift +25 -82
- package/Sources/SwiftUI/API/Effects.swift +125 -10
- package/Sources/SwiftUI/API/Entry.swift +8 -0
- package/Sources/SwiftUI/API/Environment.swift +100 -9
- package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
- package/Sources/SwiftUI/API/Focus.swift +11 -3
- package/Sources/SwiftUI/API/Gauge.swift +26 -10
- package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
- package/Sources/SwiftUI/API/GeometryReader.swift +13 -2
- package/Sources/SwiftUI/API/GestureState.swift +65 -0
- package/Sources/SwiftUI/API/Gestures.swift +1 -1
- package/Sources/SwiftUI/API/Glass.swift +127 -0
- package/Sources/SwiftUI/API/Grid.swift +1 -1
- package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
- package/Sources/SwiftUI/API/KeyPress.swift +54 -0
- package/Sources/SwiftUI/API/LabelStyle.swift +13 -6
- package/Sources/SwiftUI/API/Layout.swift +71 -12
- package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
- package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
- package/Sources/SwiftUI/API/Lists.swift +61 -6
- package/Sources/SwiftUI/API/Menu.swift +8 -1
- package/Sources/SwiftUI/API/Modifiers.swift +88 -12
- package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
- package/Sources/SwiftUI/API/Namespace.swift +44 -0
- package/Sources/SwiftUI/API/Navigation.swift +24 -9
- package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
- package/Sources/SwiftUI/API/ObservableObject.swift +16 -2
- package/Sources/SwiftUI/API/Path.swift +543 -0
- package/Sources/SwiftUI/API/Phase8Controls.swift +48 -31
- package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
- package/Sources/SwiftUI/API/Picker.swift +14 -4
- 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 +17 -4
- package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
- package/Sources/SwiftUI/API/Primitives.swift +168 -39
- package/Sources/SwiftUI/API/Publishers.swift +4 -4
- package/Sources/SwiftUI/API/Redaction.swift +75 -0
- package/Sources/SwiftUI/API/RowActions.swift +3 -2
- package/Sources/SwiftUI/API/Scenes.swift +131 -0
- package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
- package/Sources/SwiftUI/API/ScrollTargets.swift +3 -3
- package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
- package/Sources/SwiftUI/API/SectionSupplements.swift +86 -0
- package/Sources/SwiftUI/API/Shape.swift +214 -0
- package/Sources/SwiftUI/API/ShapeStyle.swift +187 -8
- 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 +18 -1
- package/Sources/SwiftUI/API/StatusGaps.swift +121 -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 +148 -4
- package/Sources/SwiftUI/API/Tasks.swift +2 -2
- 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/Toolbar.swift +52 -16
- 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 +46 -2
- package/Sources/SwiftUI/API/ViewModifier.swift +4 -1
- package/Sources/SwiftUI/API/VisualEffect.swift +74 -1
- package/Sources/SwiftUI/API/Windows.swift +25 -0
- package/Sources/SwiftUI/Charts/Axis.swift +7 -1
- package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
- package/Sources/SwiftUI/Charts/Chart.swift +17 -3
- package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
- package/Sources/SwiftUI/Localization/Localization.swift +524 -0
- package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
- package/Sources/SwiftUI/Runtime/Executor.swift +2 -0
- package/Sources/SwiftUI/Runtime/Exports.swift +37 -1
- package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
- package/Sources/SwiftUI/Runtime/JSON.swift +76 -4
- package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
- package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
- package/Sources/SwiftUI/Runtime/Ops.swift +58 -12
- package/Sources/SwiftUI/Runtime/Reconciler.swift +10 -1
- package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
- package/Sources/SwiftUI/Runtime/Runtime.swift +977 -198
- 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 +1 -1
- package/index.mjs +2 -2
- package/manifest.d.mts +2 -0
- package/manifest.mjs +41 -0
- package/package.json +5 -3
- package/sync-sources.mjs +21 -7
- package/Sources/FoundationLite/Common.swift +0 -3
- package/Sources/FoundationLite/FoundationLite.swift +0 -171
- package/Sources/FoundationLite/Interaction.swift +0 -146
- package/Sources/FoundationLite/Timer.swift +0 -48
- package/Sources/_FoundationCommon/_FoundationCommon.swift +0 -10
package/Package.swift
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
// swift-tools-version: 6.0
|
|
2
|
-
// The SwiftBrowser Swift package as @swiftbrowser/cli ships it:
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
2
|
+
// The SwiftBrowser Swift package as @swiftbrowser/cli ships it: every library
|
|
3
|
+
// of the repository's Package.swift (the SwiftUI shim, Charts, SwiftData,
|
|
4
|
+
// FoundationBridge and the framework and package stand-ins), library products
|
|
5
|
+
// only. Generated from that manifest by sync-sources.mjs (manifest.mjs), which
|
|
6
|
+
// also copies the targets' Sources/ in at `npm pack` time; in a repository
|
|
7
|
+
// checkout the CLI uses the repository's own Package.swift.
|
|
8
|
+
import CompilerPluginSupport
|
|
6
9
|
import PackageDescription
|
|
7
10
|
|
|
8
11
|
let package = Package(
|
|
@@ -10,14 +13,202 @@ let package = Package(
|
|
|
10
13
|
products: [
|
|
11
14
|
.library(name: "SwiftUI", targets: ["SwiftUI"]),
|
|
12
15
|
.library(name: "Charts", targets: ["Charts"]),
|
|
13
|
-
.library(name: "FoundationLite", targets: ["FoundationLite"]),
|
|
14
16
|
.library(name: "FoundationBridge", targets: ["FoundationBridge"]),
|
|
17
|
+
.library(name: "SwiftData", targets: ["SwiftData"]),
|
|
18
|
+
.library(name: "StoreKit", targets: ["StoreKit"]),
|
|
19
|
+
.library(name: "CoreLocation", targets: ["CoreLocation"]),
|
|
20
|
+
.library(name: "MapKit", targets: ["MapKit"]),
|
|
21
|
+
.library(name: "WeatherKit", targets: ["WeatherKit"]),
|
|
22
|
+
.library(name: "LocalAuthentication", targets: ["LocalAuthentication"]),
|
|
23
|
+
.library(name: "CoreML", targets: ["CoreML"]),
|
|
24
|
+
.library(name: "PhotosUI", targets: ["PhotosUI"]),
|
|
25
|
+
.library(name: "UniformTypeIdentifiers", targets: ["UniformTypeIdentifiers"]),
|
|
26
|
+
.library(name: "CoreImage", targets: ["CoreImage"]),
|
|
27
|
+
.library(name: "UserNotifications", targets: ["UserNotifications"]),
|
|
28
|
+
.library(name: "UIKit", targets: ["UIKit"]),
|
|
29
|
+
.library(name: "CoreGraphics", targets: ["CoreGraphics"]),
|
|
30
|
+
.library(name: "ImageIO", targets: ["ImageIO"]),
|
|
31
|
+
.library(name: "CryptoKit", targets: ["CryptoKit"]),
|
|
32
|
+
.library(name: "os", targets: ["os"]),
|
|
33
|
+
.library(name: "OSLog", targets: ["OSLog"]),
|
|
34
|
+
.library(name: "Security", targets: ["Security"]),
|
|
35
|
+
.library(name: "Accelerate", targets: ["Accelerate"]),
|
|
36
|
+
.library(name: "CommonCrypto", targets: ["CommonCrypto"]),
|
|
37
|
+
.library(name: "MobileCoreServices", targets: ["MobileCoreServices"]),
|
|
38
|
+
.library(name: "Combine", targets: ["Combine"]),
|
|
39
|
+
.library(name: "AppIntents", targets: ["AppIntents"]),
|
|
40
|
+
.library(name: "CoreHaptics", targets: ["CoreHaptics"]),
|
|
41
|
+
.library(name: "NaturalLanguage", targets: ["NaturalLanguage"]),
|
|
42
|
+
.library(name: "Compression", targets: ["Compression"]),
|
|
43
|
+
.library(name: "zlib", targets: ["zlib"]),
|
|
44
|
+
.library(name: "CoreText", targets: ["CoreText"]),
|
|
45
|
+
.library(name: "AVFoundation", targets: ["AVFoundation"]),
|
|
46
|
+
.library(name: "AudioToolbox", targets: ["AudioToolbox"]),
|
|
47
|
+
.library(name: "Symbols", targets: ["Symbols"]),
|
|
48
|
+
.library(name: "QuickLook", targets: ["QuickLook"]),
|
|
49
|
+
.library(name: "AVKit", targets: ["AVKit"]),
|
|
50
|
+
.library(name: "AuthenticationServices", targets: ["AuthenticationServices"]),
|
|
51
|
+
.library(name: "SafariServices", targets: ["SafariServices"]),
|
|
52
|
+
.library(name: "WebKit", targets: ["WebKit"]),
|
|
53
|
+
.library(name: "CoreTransferable", targets: ["CoreTransferable"]),
|
|
54
|
+
.library(name: "Photos", targets: ["Photos"]),
|
|
55
|
+
.library(name: "LinkPresentation", targets: ["LinkPresentation"]),
|
|
56
|
+
.library(name: "Translation", targets: ["Translation"]),
|
|
57
|
+
.library(name: "FoundationModels", targets: ["FoundationModels"]),
|
|
58
|
+
],
|
|
59
|
+
// SwiftData's macros (`@Model`, `#Predicate`) build against swift-syntax.
|
|
60
|
+
// 604.0.0 is the release SwiftPM has prebuilt for Swift 6.4, so a macro
|
|
61
|
+
// build takes seconds instead of compiling swift-syntax (minutes). SwiftPM
|
|
62
|
+
// uses the prebuilt only for a macro that depends on swift-syntax alone.
|
|
63
|
+
// SwiftUI links the macros too, for `@Entry`.
|
|
64
|
+
dependencies: [
|
|
65
|
+
.package(url: "https://github.com/swiftlang/swift-syntax.git", "604.0.0"..<"605.0.0"),
|
|
15
66
|
],
|
|
16
67
|
targets: [
|
|
17
|
-
|
|
18
|
-
.
|
|
19
|
-
|
|
20
|
-
|
|
68
|
+
// API-compatible subset of SwiftUI plus the runtime that turns a view
|
|
69
|
+
// tree into render ops. Builds for Wasm and natively on Linux.
|
|
70
|
+
// SwiftDataMacros also expands SwiftUI's `@Entry`. It re-exports
|
|
71
|
+
// CoreTransferable (`Transferable`, `ShareLink`'s items), as on iOS.
|
|
72
|
+
.target(name: "SwiftUI", dependencies: ["SwiftDataMacros", "CoreTransferable"], path: "Sources/SwiftUI"),
|
|
73
|
+
|
|
74
|
+
// What apps need from Foundation that swift-corelibs Foundation does
|
|
75
|
+
// not have on WASI: Timer and RunLoop, a persisting UserDefaults, a
|
|
76
|
+
// Bundle over the staged resources, URLSession over fetch, AsyncImage,
|
|
77
|
+
// the viewer's Locale. Staged in by the CLI next to `import SwiftUI`.
|
|
78
|
+
.target(name: "FoundationBridge", dependencies: ["SwiftUI", "Security", "os", "CoreFoundationTypes"], path: "Sources/FoundationBridge"),
|
|
79
|
+
|
|
80
|
+
// Swift Charts. The chart types live in the SwiftUI target (they use
|
|
81
|
+
// its internal runtime protocols); this target re-exports SwiftUI and
|
|
82
|
+
// adds `Date: Plottable` and `DateBins`.
|
|
21
83
|
.target(name: "Charts", dependencies: ["SwiftUI"], path: "Sources/Charts"),
|
|
84
|
+
|
|
85
|
+
// SwiftData over the browser's IndexedDB: `@Model`, `ModelContainer`,
|
|
86
|
+
// `ModelContext`, `@Query`. Models live in memory; the store is handed
|
|
87
|
+
// in at launch and every save goes back to the page as a `swiftdata`
|
|
88
|
+
// op (docs/ops-protocol.md, "Phase 18").
|
|
89
|
+
.target(name: "SwiftData", dependencies: ["SwiftUI", "SwiftDataMacros"], path: "Sources/SwiftData"),
|
|
90
|
+
.macro(
|
|
91
|
+
name: "SwiftDataMacros",
|
|
92
|
+
dependencies: [
|
|
93
|
+
.product(name: "SwiftSyntax", package: "swift-syntax"),
|
|
94
|
+
.product(name: "SwiftSyntaxMacros", package: "swift-syntax"),
|
|
95
|
+
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
|
|
96
|
+
.product(name: "SwiftDiagnostics", package: "swift-syntax"),
|
|
97
|
+
.product(name: "SwiftCompilerPlugin", package: "swift-syntax"),
|
|
98
|
+
// Nothing else in the published manifest (packages/swift, what
|
|
99
|
+
// apps build), or SwiftPM compiles swift-syntax there instead
|
|
100
|
+
// of using its prebuilt. Compiled from source after this
|
|
101
|
+
// package's OSLog module, swift-syntax logs through it
|
|
102
|
+
// (`canImport(OSLog)`) and the macro must link it: the CLI sets
|
|
103
|
+
// SWIFT_BUILD_SCRIPT_ENVIRONMENT, which turns that logging off
|
|
104
|
+
// (toolchain.ts). This repository's own builds always compile
|
|
105
|
+
// swift-syntax (SwiftDataTests links the macro target): without
|
|
106
|
+
// that variable, the end of its Package.swift has the macro link
|
|
107
|
+
// os too (lines manifest.mjs leaves out of the published one).
|
|
108
|
+
],
|
|
109
|
+
path: "Sources/SwiftDataMacros"
|
|
110
|
+
),
|
|
111
|
+
|
|
112
|
+
// Stand-ins for Apple frameworks apps import for one or two calls:
|
|
113
|
+
// StoreKit's review request (a no-op), Core Location's coordinate type
|
|
114
|
+
// and a LocalAuthentication context that always succeeds. Linked only
|
|
115
|
+
// into apps that import them (packages/cli/src/stage.ts).
|
|
116
|
+
.target(name: "StoreKit", dependencies: ["SwiftUI", "UIKit"], path: "Sources/StoreKit"),
|
|
117
|
+
.target(name: "CoreLocation", path: "Sources/CoreLocation"),
|
|
118
|
+
// MapKit's SwiftUI map and value types, drawn without map data, and
|
|
119
|
+
// UIKit's `MKMapView`, which draws that map at its region (Sources/MapKit).
|
|
120
|
+
.target(name: "MapKit", dependencies: ["SwiftUI", "UIKit", "CoreLocation"], path: "Sources/MapKit"),
|
|
121
|
+
// WeatherKit's service and types; every request throws, as for an app
|
|
122
|
+
// without the capability (Sources/WeatherKit).
|
|
123
|
+
.target(name: "WeatherKit", dependencies: ["CoreLocation"], path: "Sources/WeatherKit"),
|
|
124
|
+
.target(name: "LocalAuthentication", path: "Sources/LocalAuthentication"),
|
|
125
|
+
// PhotosUI's `PhotosPicker` over the page's file chooser (a `pickFiles`
|
|
126
|
+
// host request; docs/ops-protocol.md, "Photos picker"), and the
|
|
127
|
+
// `UTType`s its items report.
|
|
128
|
+
.target(name: "PhotosUI", dependencies: ["SwiftUI", "UniformTypeIdentifiers", "Photos"], path: "Sources/PhotosUI"),
|
|
129
|
+
.target(name: "UniformTypeIdentifiers", path: "Sources/UniformTypeIdentifiers"),
|
|
130
|
+
|
|
131
|
+
// Core ML for the models Create ML makes from tables (linear and
|
|
132
|
+
// logistic regressions, boosted trees, their pipelines): the CLI
|
|
133
|
+
// compiles each .mlmodel into the class Xcode generates, with the model
|
|
134
|
+
// embedded, and this target evaluates it. Linked only into apps that
|
|
135
|
+
// have a model or import CoreML (packages/cli/src/coreml.ts).
|
|
136
|
+
.target(name: "CoreML", path: "Sources/CoreML"),
|
|
137
|
+
|
|
138
|
+
// Core Image's built-in filters and QR code generator as recipes the
|
|
139
|
+
// page runs on the decoded pixels (`UIImage` and `CGImage` are the
|
|
140
|
+
// shim's, as SwiftUI re-exports them on iOS). Linked only into apps
|
|
141
|
+
// that import it, like the stand-ins above.
|
|
142
|
+
.target(name: "CoreImage", dependencies: ["SwiftUI"], path: "Sources/CoreImage"),
|
|
143
|
+
|
|
144
|
+
// UserNotifications over the browser's Notification API, scheduled with
|
|
145
|
+
// the executor's timers while the page is open; it talks to the page
|
|
146
|
+
// through host requests (docs/ops-protocol.md, "Notifications").
|
|
147
|
+
.target(name: "UserNotifications", dependencies: ["SwiftUI"], path: "Sources/UserNotifications"),
|
|
148
|
+
|
|
149
|
+
// The Apple frameworks under SwiftUI that packages build on, as far as
|
|
150
|
+
// image and utility code uses them: UIKit's UIImage and UIColor, Core
|
|
151
|
+
// Graphics contexts and Image I/O sources over the shim's image
|
|
152
|
+
// recipes, CryptoKit's hashes, and os's locks and logs
|
|
153
|
+
// (docs/ops-protocol.md, "Core Graphics and Image I/O").
|
|
154
|
+
.target(name: "CoreGraphics", dependencies: ["SwiftUI"], path: "Sources/CoreGraphics"),
|
|
155
|
+
.target(name: "ImageIO", dependencies: ["CoreGraphics", "SwiftUI", "CoreFoundationTypes"], path: "Sources/ImageIO"),
|
|
156
|
+
// UIKit re-exports UserNotifications, as iOS's does (`UNUserNotificationCenter` with `import UIKit`).
|
|
157
|
+
.target(name: "UIKit", dependencies: ["CoreGraphics", "ImageIO", "CoreImage", "SwiftUI", "FoundationBridge", "UserNotifications"], path: "Sources/UIKit"),
|
|
158
|
+
.target(name: "CryptoKit", path: "Sources/CryptoKit"),
|
|
159
|
+
.target(name: "os", path: "Sources/os"),
|
|
160
|
+
.target(name: "OSLog", dependencies: ["os"], path: "Sources/OSLog"),
|
|
161
|
+
// The keychain's SecItem functions over a file in the app's home.
|
|
162
|
+
// Core Foundation's types, which Security, Image I/O, Audio Toolbox and
|
|
163
|
+
// FoundationBridge re-export (the name CoreFoundation is the Linux toolchain's).
|
|
164
|
+
.target(name: "CoreFoundationTypes", path: "Sources/CoreFoundationTypes"),
|
|
165
|
+
.target(name: "Security", dependencies: ["CoreFoundationTypes"], path: "Sources/Security"),
|
|
166
|
+
// Frameworks Ice Cubes' packages import: App Intents' types (Shortcuts
|
|
167
|
+
// has nothing to run them), haptics and sound (the browser has neither
|
|
168
|
+
// engine), natural-language detection, and zlib-style compression.
|
|
169
|
+
.target(name: "AppIntents", dependencies: ["SwiftUI", "FoundationBridge", "UIKit", "UniformTypeIdentifiers"], path: "Sources/AppIntents"),
|
|
170
|
+
.target(name: "CoreHaptics", dependencies: ["FoundationBridge"], path: "Sources/CoreHaptics"),
|
|
171
|
+
.target(name: "NaturalLanguage", dependencies: ["FoundationBridge"], path: "Sources/NaturalLanguage"),
|
|
172
|
+
.target(name: "Compression", path: "Sources/Compression"),
|
|
173
|
+
// `import zlib` re-exports Compression, where zlib's inflate API lives;
|
|
174
|
+
// Core Text has the font manager's registration (which loads nothing).
|
|
175
|
+
.target(name: "zlib", dependencies: ["Compression"], path: "Sources/zlib"),
|
|
176
|
+
.target(name: "CoreText", dependencies: ["CoreFoundationTypes"], path: "Sources/CoreText"),
|
|
177
|
+
// vImage's box convolutions: a recipe step for Core Graphics contexts, computed for real memory.
|
|
178
|
+
.target(name: "Accelerate", dependencies: ["CoreGraphics", "SwiftUI"], path: "Sources/Accelerate"),
|
|
179
|
+
// CommonCrypto's digest functions over CryptoKit's hashes; MobileCoreServices
|
|
180
|
+
// re-exports UniformTypeIdentifiers with the old kUTType constants.
|
|
181
|
+
.target(name: "CommonCrypto", dependencies: ["CryptoKit"], path: "Sources/CommonCrypto"),
|
|
182
|
+
.target(name: "MobileCoreServices", dependencies: ["UniformTypeIdentifiers"], path: "Sources/MobileCoreServices"),
|
|
183
|
+
// OpenCombine as the module Combine, with the SwiftUI shim's ObservableObject (Sources/Combine/SwiftUIObservation.swift);
|
|
184
|
+
// FoundationBridge's DispatchQueue and RunLoop are its schedulers (Sources/Combine/Schedulers.swift).
|
|
185
|
+
.target(name: "Combine", dependencies: ["SwiftUI", "FoundationBridge"], path: "Sources/Combine", exclude: ["LICENSE"],
|
|
186
|
+
swiftSettings: [.define("WASI"), .swiftLanguageMode(.v5)]),
|
|
187
|
+
// Video and audio over the page's media elements (docs/ops-protocol.md,
|
|
188
|
+
// "Video and audio"): players, assets and Core Media's times, and the
|
|
189
|
+
// `video` element their views draw (`AVPlayerLayer` is a UIKit layer).
|
|
190
|
+
.target(name: "AVFoundation", dependencies: ["AudioToolbox", "FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/AVFoundation"),
|
|
191
|
+
// System sounds: registered, never played (no page-side audio yet).
|
|
192
|
+
.target(name: "AudioToolbox", dependencies: ["CoreFoundationTypes"], path: "Sources/AudioToolbox"),
|
|
193
|
+
// SF Symbols' effect types, declared in SwiftUI (which re-exports them on iOS).
|
|
194
|
+
.target(name: "Symbols", dependencies: ["SwiftUI"], path: "Sources/Symbols"),
|
|
195
|
+
// Quick Look previews open the file in a new tab (a `media` host request).
|
|
196
|
+
.target(name: "QuickLook", dependencies: ["FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/QuickLook"),
|
|
197
|
+
.target(name: "AVKit", dependencies: ["AVFoundation", "UIKit", "SwiftUI"], path: "Sources/AVKit"),
|
|
198
|
+
// Signing in and web pages: the sign-in window is a popup whose
|
|
199
|
+
// redirect comes back through the page's callback page (docs/ops-protocol.md,
|
|
200
|
+
// "Signing in"), Safari's sheet a new tab, and a web view keeps its state.
|
|
201
|
+
.target(name: "AuthenticationServices", dependencies: ["FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/AuthenticationServices"),
|
|
202
|
+
.target(name: "SafariServices", dependencies: ["FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/SafariServices"),
|
|
203
|
+
.target(name: "WebKit", dependencies: ["FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/WebKit"),
|
|
204
|
+
// Sharing and media: `Transferable` and its representations (under
|
|
205
|
+
// SwiftUI, which re-exports it), the photo library (which PhotosUI
|
|
206
|
+
// re-exports), link previews.
|
|
207
|
+
.target(name: "CoreTransferable", dependencies: ["UniformTypeIdentifiers"], path: "Sources/CoreTransferable"),
|
|
208
|
+
.target(name: "Photos", dependencies: ["FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/Photos"),
|
|
209
|
+
.target(name: "LinkPresentation", dependencies: ["FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/LinkPresentation"),
|
|
210
|
+
// Apple Intelligence: translation and the on-device language model.
|
|
211
|
+
.target(name: "Translation", dependencies: ["FoundationBridge", "SwiftUI"], path: "Sources/Translation"),
|
|
212
|
+
.target(name: "FoundationModels", dependencies: ["FoundationBridge", "SwiftUI"], path: "Sources/FoundationModels"),
|
|
22
213
|
]
|
|
23
214
|
)
|
package/README.md
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
# @swiftbrowser/swift
|
|
2
2
|
|
|
3
|
-
The SwiftBrowser Swift package (the `SwiftUI` shim, `Charts`, `
|
|
4
|
-
|
|
5
|
-
`
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
The SwiftBrowser Swift package (the `SwiftUI` shim, `Charts`, `SwiftData` and
|
|
4
|
+
`FoundationBridge`, the browser's Foundation glue) packaged for npm, so that
|
|
5
|
+
`@swiftbrowser/cli` builds apps against exactly the shim version it was
|
|
6
|
+
released with. The CLI's generated staging package depends on it by path
|
|
7
|
+
(`swiftPackagePath()`).
|
|
8
8
|
|
|
9
9
|
In a repository checkout `Sources/` is not here; `swiftPackagePath()` then
|
|
10
|
-
points at the repository root, whose package
|
|
11
|
-
|
|
12
|
-
package synced: `node packages/swift/sync-sources.mjs`). `npm pack` copies the
|
|
13
|
-
sources in (`prepack`).
|
|
10
|
+
points at the repository root, whose package declares the same libraries.
|
|
11
|
+
`npm pack` copies the sources in (`prepack`).
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// `import AVFoundation` for the browser: playback over the page's media
|
|
2
|
+
// elements (docs/ops-protocol.md, "Video and audio").
|
|
3
|
+
//
|
|
4
|
+
// - `AVPlayer` (and `AVQueuePlayer`, `AVPlayerLooper`) is state that outlives
|
|
5
|
+
// views: the item, the rate, mute and volume, the last seek, the position
|
|
6
|
+
// the page last reported. The views that show it (AVKit's `VideoPlayer`,
|
|
7
|
+
// an `AVPlayerLayer` in a UIKit view, `AVPlayerViewController`) each draw a
|
|
8
|
+
// `video` element whose props are worked out from that state, and the
|
|
9
|
+
// page's `video` events (ready, time, status, ended, error, and what the
|
|
10
|
+
// viewer did with the native controls) come back to the player, which
|
|
11
|
+
// updates itself, calls its time observers and posts AVFoundation's
|
|
12
|
+
// notifications through the bridge's `NotificationCenter`.
|
|
13
|
+
// - A player plays only while a view shows it: the newest view attached to a
|
|
14
|
+
// player plays it, the others show it paused and muted. A player shown
|
|
15
|
+
// nowhere keeps its rate and position and plays nothing.
|
|
16
|
+
// - Assets are URLs. Remote, data and blob URLs go to the page as they are;
|
|
17
|
+
// a file URL (the app's bundle, home or temporary directory) is read and
|
|
18
|
+
// handed to the page as a blob (a `media` host request). `load(.duration)`
|
|
19
|
+
// asks the page to read the file's metadata (a `media` probe).
|
|
20
|
+
// - `AVAudioSession` keeps its category and mode and succeeds: the browser
|
|
21
|
+
// mixes audio as it does. `AVAssetImageGenerator` fails (Swift holds no
|
|
22
|
+
// decoded frames), and `AVAssetExportSession` copies the file as it is,
|
|
23
|
+
// as `AVAssetExportPresetPassthrough` does, whatever the preset.
|
|
24
|
+
//
|
|
25
|
+
// As on iOS, it brings AudioToolbox (System Sound Services) and Core Media's
|
|
26
|
+
// time types (CMTime.swift) along.
|
|
27
|
+
@_exported import AudioToolbox
|
|
28
|
+
@_exported import Foundation
|
|
29
|
+
import FoundationBridge
|
|
30
|
+
import SwiftUI
|
|
31
|
+
import struct SwiftUI.CGSize
|
|
32
|
+
import struct SwiftUI.CGRect
|
|
33
|
+
import UIKit
|
|
34
|
+
|
|
35
|
+
/// AVFoundation's error domain, for the errors this module reports as `NSError`.
|
|
36
|
+
public let AVFoundationErrorDomain = "AVFoundationErrorDomain"
|
|
37
|
+
|
|
38
|
+
/// AVFoundation's errors (the codes the shim reports).
|
|
39
|
+
public struct AVError: Error, Hashable, Sendable, CustomStringConvertible {
|
|
40
|
+
public enum Code: Int, Sendable {
|
|
41
|
+
case unknown = -11800
|
|
42
|
+
case outOfMemory = -11801
|
|
43
|
+
case decodeFailed = -11821
|
|
44
|
+
case fileFormatNotRecognized = -11828
|
|
45
|
+
case fileFailedToParse = -11829
|
|
46
|
+
case noDataCaptured = -11805
|
|
47
|
+
case operationNotSupportedForAsset = -11838
|
|
48
|
+
case failedToLoadMediaData = -11849
|
|
49
|
+
case contentIsUnavailable = -11863
|
|
50
|
+
case exportFailed = -11820
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public let code: Code
|
|
54
|
+
/// What the page or the shim said went wrong.
|
|
55
|
+
public let message: String
|
|
56
|
+
|
|
57
|
+
public init(_ code: Code, message: String = "") {
|
|
58
|
+
self.code = code
|
|
59
|
+
self.message = message
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public static var unknown: Code { .unknown }
|
|
63
|
+
public static var decodeFailed: Code { .decodeFailed }
|
|
64
|
+
public static var fileFormatNotRecognized: Code { .fileFormatNotRecognized }
|
|
65
|
+
public static var operationNotSupportedForAsset: Code { .operationNotSupportedForAsset }
|
|
66
|
+
public static var failedToLoadMediaData: Code { .failedToLoadMediaData }
|
|
67
|
+
public static var contentIsUnavailable: Code { .contentIsUnavailable }
|
|
68
|
+
|
|
69
|
+
public var errorCode: Int { code.rawValue }
|
|
70
|
+
public var localizedDescription: String { message.isEmpty ? "The operation could not be completed" : message }
|
|
71
|
+
public var description: String { "AVError(\(code), \"\(message)\")" }
|
|
72
|
+
|
|
73
|
+
public static func == (lhs: AVError, rhs: AVError) -> Bool { lhs.code == rhs.code && lhs.message == rhs.message }
|
|
74
|
+
public func hash(into hasher: inout Hasher) { hasher.combine(code) }
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/// `catch AVError.decodeFailed`-style matching on the code.
|
|
78
|
+
public func ~= (code: AVError.Code, error: any Error) -> Bool {
|
|
79
|
+
(error as? AVError)?.code == code
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/// A media type of a track.
|
|
83
|
+
public struct AVMediaType: RawRepresentable, Hashable, Sendable {
|
|
84
|
+
public let rawValue: String
|
|
85
|
+
public init(rawValue: String) { self.rawValue = rawValue }
|
|
86
|
+
public init(_ rawValue: String) { self.rawValue = rawValue }
|
|
87
|
+
public static let video = AVMediaType("vide")
|
|
88
|
+
public static let audio = AVMediaType("soun")
|
|
89
|
+
public static let text = AVMediaType("text")
|
|
90
|
+
public static let closedCaption = AVMediaType("clcp")
|
|
91
|
+
public static let subtitle = AVMediaType("sbtl")
|
|
92
|
+
public static let timecode = AVMediaType("tmcd")
|
|
93
|
+
public static let metadata = AVMediaType("meta")
|
|
94
|
+
public static let muxed = AVMediaType("muxx")
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/// A container format, by its uniform type identifier.
|
|
98
|
+
public struct AVFileType: RawRepresentable, Hashable, Sendable {
|
|
99
|
+
public let rawValue: String
|
|
100
|
+
public init(rawValue: String) { self.rawValue = rawValue }
|
|
101
|
+
public init(_ rawValue: String) { self.rawValue = rawValue }
|
|
102
|
+
public static let mov = AVFileType("com.apple.quicktime-movie")
|
|
103
|
+
public static let mp4 = AVFileType("public.mpeg-4")
|
|
104
|
+
public static let m4v = AVFileType("com.apple.m4v-video")
|
|
105
|
+
public static let m4a = AVFileType("com.apple.m4a-audio")
|
|
106
|
+
public static let mp3 = AVFileType("public.mp3")
|
|
107
|
+
public static let wav = AVFileType("com.microsoft.waveform-audio")
|
|
108
|
+
public static let aiff = AVFileType("public.aiff-audio")
|
|
109
|
+
public static let caf = AVFileType("com.apple.coreaudio-format")
|
|
110
|
+
public static let heic = AVFileType("public.heic")
|
|
111
|
+
public static let jpg = AVFileType("public.jpeg")
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/// The media type the page should be told for a file, from its extension.
|
|
115
|
+
func _mimeType(forPathExtension pathExtension: String) -> String {
|
|
116
|
+
switch pathExtension.lowercased() {
|
|
117
|
+
case "mp4", "mpeg4": "video/mp4"
|
|
118
|
+
case "m4v": "video/x-m4v"
|
|
119
|
+
case "mov", "qt": "video/quicktime"
|
|
120
|
+
case "webm": "video/webm"
|
|
121
|
+
case "ogv": "video/ogg"
|
|
122
|
+
case "mp3": "audio/mpeg"
|
|
123
|
+
case "m4a", "aac": "audio/mp4"
|
|
124
|
+
case "wav": "audio/wav"
|
|
125
|
+
case "aif", "aiff": "audio/aiff"
|
|
126
|
+
case "caf": "audio/x-caf"
|
|
127
|
+
case "oga", "ogg", "opus": "audio/ogg"
|
|
128
|
+
case "gif": "image/gif"
|
|
129
|
+
default: "application/octet-stream"
|
|
130
|
+
}
|
|
131
|
+
}
|