-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
95 lines (89 loc) · 2.59 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
const { parseCSSColor } = require("csscolorparser");
exports.convertColors = function convertColors({ colors = [] }) {
return (
"# Colors\n\n" +
colors
.map(
({ id, value = "black" }) =>
`let ${id}: Color = #color(css: "${value}")`
)
.map(code => ["```tokens", code, "```"].join("\n"))
.join("\n\n")
);
};
exports.convertShadows = function convertShadows({ shadows = [] }) {
return (
"# Shadows\n\n" +
shadows
.map(
({ id, x = 0, y = 0, blur = 0, color = "black" }) =>
`let ${id}: Shadow = Shadow(x: ${x}, y: ${y}, blur: ${blur}, color: #color(css: "${color}"))`
)
.map(code => ["```tokens", code, "```"].join("\n"))
.join("\n\n")
);
};
exports.convertTextStyles = function convertTextStyles({
styles: textStyles = []
}) {
function resolve(textStyle) {
const { extends: _extends } = textStyle;
if (_extends) {
const resolved = textStyles.find(ts => ts.id === _extends);
if (!resolved) {
console.warn(`Failed to resolve textStyle: ${textStyle.id}`);
}
return Object.assign({}, resolve(resolved), textStyle);
}
return textStyle;
}
return (
"# TextStyles\n\n" +
textStyles
.map(resolve)
.map(
({
id,
fontName,
fontFamily,
fontWeight,
fontSize,
lineHeight,
letterSpacing,
color
}) => {
const parameters = [
["fontName", fontName ? `Optional.value("${fontName}")` : null],
[
"fontFamily",
fontFamily ? `Optional.value("${fontFamily}")` : null
],
["fontWeight", fontWeight ? `FontWeight.w${fontWeight}` : null],
["fontSize", fontSize ? `Optional.value(${fontSize})` : null],
[
"lineHeight",
lineHeight ? `Optional.value("${lineHeight}")` : null
],
[
"letterSpacing",
letterSpacing ? `Optional.value("${letterSpacing}")` : null
],
[
"color",
color
? `Optional.value(${
parseCSSColor(color) ? `#color(css: "${color}")` : color
})`
: null
]
]
.filter(([name, value]) => !!value)
.map(([name, value]) => `${name}: ${value}`)
.join(", ");
return `let ${id}: TextStyle = TextStyle(${parameters})`;
}
)
.map(code => ["```tokens", code, "```"].join("\n"))
.join("\n\n")
);
};