Files
babaevmm 6eeb70a71b add rasterize extension
commit_hash:3627f4693042fef98d9561b23f709361b8f9b6e6
2026-04-21 10:51:34 +03:00

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 {}