regions.ts 637 B

123456789101112131415161718
  1. export type VisualRegionDefinition = {
  2. selector: string
  3. closest?: string
  4. opacitySelectors?: readonly string[]
  5. }
  6. export function defineVisualRegions<const Regions extends Record<string, VisualRegionDefinition>>(regions: Regions) {
  7. return regions
  8. }
  9. export function mapVisualRegions<const Regions extends Record<string, VisualRegionDefinition>, Result>(
  10. regions: Regions,
  11. map: (region: Regions[keyof Regions], name: keyof Regions) => Result,
  12. ) {
  13. return Object.fromEntries(
  14. Object.entries(regions).map(([name, region]) => [name, map(region as Regions[keyof Regions], name)]),
  15. ) as { [Name in keyof Regions]: Result }
  16. }