Passed
Push — main ( 8f901a...3322df )
by Andrii
02:33
created

src/map.ts   A

Complexity

Total Complexity 3
Complexity/F 1.5

Size

Lines of Code 50
Function Count 2

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 35
dl 0
loc 50
rs 10
c 0
b 0
f 0
wmc 3
mnd 1
bc 1
fnc 2
bpm 0.5
cpm 1.5
noi 0

2 Functions

Rating   Name   Duplication   Size   Complexity  
A map.ts ➔ classNamesMap 0 13 1
A map.ts ➔ mapping 0 19 2
1
import {
2
  CssModule,
3
} from "./defs";
4
import type {
5
  ClassNamesMapping, ClassNamesMap,
6
} from "./index.types";
7
import {resolver} from "./core"
8
import { AnyObject } from "./ts-swiss";
9
10
const {keys: $keys} = Object
11
12
export default classNamesMap
13
export {
14
  classNamesMap
15
}
16
17
/**
18
 * Set up mapping classnames function
19
 * @example
20
 * ```typescript
21
 * const mapping = classNamesMap(classnames)
22
 * ```
23
 */
24
function classNamesMap<
25
  Source extends CssModule,
26
>(classnames: Source){
27
  const mapper: ClassNamesMapping<Source> = map => mapping(classnames, map)
28
  return mapper
29
}
30
31
function mapping<
32
  Source extends CssModule,
33
  Target extends AnyObject = CssModule,
34
  Map extends ClassNamesMap<Target, Source> = ClassNamesMap<Target, Source>
35
>(
36
  source: Source,
37
  map: Map
38
): {[T in keyof Map]: string} {
39
  const keys = $keys(map) as (keyof Map)[]
40
  , classnames = {} as {[T in keyof Map]: string}
41
42
  for (let i = keys.length; i--;) {
43
    const key = keys[i]
44
    
45
    classnames[key] = resolver(source, map[key]!).join(" ")
46
  }
47
48
  return classnames
49
}
50
51