mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
87 lines
2.9 KiB
Swift
87 lines
2.9 KiB
Swift
import DivKit
|
|
import Foundation
|
|
@_spi(Legacy) import DivKitExtensions
|
|
import DivKitMarkdownExtension
|
|
import DivKitSVG
|
|
import LayoutKit
|
|
import VGSL
|
|
|
|
enum AppComponents {
|
|
static let fontProvider = YSFontProvider()
|
|
|
|
static var debugParams: DebugParams {
|
|
DebugParams(
|
|
isDebugInfoEnabled: true
|
|
)
|
|
}
|
|
|
|
static func makeDivKitComponents(
|
|
layoutDirection: UserInterfaceLayoutDirection = .system,
|
|
reporter: DivReporter = PlaygroundReporter(),
|
|
urlHandler: DivUrlHandler = DivUrlHandlerDelegate { _, _ in },
|
|
variableStorage: DivVariableStorage? = nil
|
|
) -> DivKitComponents {
|
|
let cache = CacheFactory.makeLRUDiskCache(
|
|
name: "divkit.common.cache-queue",
|
|
ioQueue: OperationQueue.serialQueue(
|
|
name: "DivKitCommonResourcesCache",
|
|
qos: .userInitiated
|
|
),
|
|
maxCapacity: 100 * 1024 * 1024, // 100MB
|
|
fileManager: FileManager.default,
|
|
reportError: { error in
|
|
print("Cache error: \(error)")
|
|
}
|
|
)
|
|
let requestPerformer = URLRequestPerformer(urlTransform: nil)
|
|
let networkRequester = NetworkURLResourceRequester(performer: requestPerformer)
|
|
let cachedRequester = CachedURLResourceRequester(
|
|
cache: cache,
|
|
cachemissRequester: networkRequester
|
|
)
|
|
let lottieExtensionHanlder = LottieExtensionHandler(
|
|
factory: LottieAnimationFactory(),
|
|
requester: cachedRequester
|
|
)
|
|
let variablesStorage = DivVariablesStorage(outerStorage: variableStorage)
|
|
let sizeProviderExtensionHandler = SizeProviderExtensionHandler(
|
|
variablesStorage: variablesStorage
|
|
)
|
|
|
|
let holderFactory = SVGImageHolderFactory(requester: cachedRequester)
|
|
|
|
return DivKitComponents(
|
|
divCustomBlockFactory: PlaygroundDivCustomBlockFactory(requester: networkRequester),
|
|
extensionHandlers: [
|
|
lottieExtensionHanlder,
|
|
sizeProviderExtensionHandler,
|
|
InputAccessoryViewExtensionHandler(viewProvider: AccessoryViewProvider()),
|
|
ShimmerImagePreviewExtension(),
|
|
VideoDurationExtensionHandler(),
|
|
GestureExtensionHandler(),
|
|
MarkdownExtensionHandler(),
|
|
ShineExtensionHandler(),
|
|
InputAutocorrectionExtensionHandler(),
|
|
InputPropertiesExtensionHandler(),
|
|
RasterizeExtensionHandler(),
|
|
],
|
|
flagsInfo: DivFlagsInfo(
|
|
initializeTriggerOnSet: false,
|
|
useUntypedTemplateResolver: true
|
|
),
|
|
fontProvider: fontProvider,
|
|
imageHolderFactory: holderFactory
|
|
.withInMemoryCache(imageCountLimit: 20),
|
|
layoutDirection: layoutDirection,
|
|
patchProvider: PlaygroundPatchProvider(requestPerformer: requestPerformer),
|
|
reporter: reporter,
|
|
resourcesPreloader: DivDataResourcesPreloader(resourceRequester: cachedRequester),
|
|
playerFactory: PlaygroundPlayerFactory(itemsProvider: cachedRequester),
|
|
urlHandler: urlHandler,
|
|
variablesStorage: variablesStorage
|
|
)
|
|
}
|
|
}
|
|
|
|
extension FileManager: @retroactive @unchecked Sendable {}
|