1
1
import sass from "node-sass" ;
2
+ import camelcase from "camelcase" ;
3
+ import paramcase from "param-case" ;
4
+
2
5
import { sourceToClassNames } from "./source-to-class-names" ;
3
6
4
7
export type ClassName = string ;
@@ -8,11 +11,16 @@ export interface Aliases {
8
11
[ index : string ] : string ;
9
12
}
10
13
14
+ export type NameFormat = "camel" | "kebab" | "param" ;
15
+
11
16
export interface Options {
12
17
includePaths ?: string [ ] ;
13
18
aliases ?: Aliases ;
19
+ nameFormat ?: NameFormat ;
14
20
}
15
21
22
+ export const NAME_FORMATS : NameFormat [ ] = [ "camel" , "kebab" , "param" ] ;
23
+
16
24
const importer = ( aliases : Aliases ) => ( url : string ) => {
17
25
if ( url in aliases ) {
18
26
return {
@@ -25,8 +33,14 @@ const importer = (aliases: Aliases) => (url: string) => {
25
33
26
34
export const fileToClassNames = (
27
35
file : string ,
28
- { includePaths = [ ] , aliases = { } } : Options = { }
36
+ {
37
+ includePaths = [ ] ,
38
+ aliases = { } ,
39
+ nameFormat = "camel"
40
+ } : Options = { } as Options
29
41
) => {
42
+ const transformer = classNameTransformer ( nameFormat ) ;
43
+
30
44
return new Promise < ClassNames > ( ( resolve , reject ) => {
31
45
sass . render (
32
46
{
@@ -41,9 +55,26 @@ export const fileToClassNames = (
41
55
}
42
56
43
57
sourceToClassNames ( result . css ) . then ( ( { exportTokens } ) => {
44
- resolve ( Object . keys ( exportTokens ) ) ;
58
+ const classNames = Object . keys ( exportTokens ) ;
59
+ const transformedClassNames = classNames . map ( transformer ) ;
60
+
61
+ resolve ( transformedClassNames ) ;
45
62
} ) ;
46
63
}
47
64
) ;
48
65
} ) ;
49
66
} ;
67
+
68
+ interface Transformer {
69
+ ( value : string ) : string ;
70
+ }
71
+
72
+ const classNameTransformer = ( nameFormat : NameFormat ) : Transformer => {
73
+ switch ( nameFormat ) {
74
+ case "kebab" :
75
+ case "param" :
76
+ return paramcase ;
77
+ case "camel" :
78
+ return camelcase ;
79
+ }
80
+ } ;
0 commit comments