Files
babaevmm 6797545374 update paths
commit_hash:8ab26a6d1a605474126fdbc3cc4314923edbc77f
2025-03-19 17:28:58 +03:00

41 lines
1.0 KiB
Swift

import LayoutKit
import VGSL
extension [Div] {
func makeBlocks<T>(
context: DivBlockModelingContext,
sizeModifier: DivSizeModifier? = nil,
mappedBy modificator: (Div, Block, DivBlockModelingContext) -> T
) -> [T] {
iterativeFlatMap { div, index in
let itemContext = context.modifying(
pathSuffix: String(index),
sizeModifier: sizeModifier
)
do {
return try modifyError({
DivBlockModelingError($0.message, path: itemContext.path)
}) {
let block = try div.value.makeBlock(context: itemContext)
return modificator(div, block, itemContext)
}
} catch {
context.addError(error: error)
return nil
}
}
}
func makeBlocks(context: DivBlockModelingContext) -> [Block] {
makeBlocks(context: context, mappedBy: { _, block, _ in block })
}
}
extension Array where Element: Hashable {
var nonUniqueElements: [Element] {
countElements()
.filter { $0.value > 1 }
.map(\.key)
}
}