forked from RocketCommunicationsInc/astro-design-tokens
-
Notifications
You must be signed in to change notification settings - Fork 0
/
iosbuild.js
154 lines (124 loc) · 3.38 KB
/
iosbuild.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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
const StyleDictionary = require("style-dictionary");
const baseConfig = require("./config.js");
const fs = require('fs-extra');
const iosPath = `dist/ios/dist/`;
const transforms = require('./transforms')
const filters = require('./filters')
// Register transforms
for (const key of Object.keys(transforms)) {
const transform = transforms[key]
StyleDictionary.registerTransform(transform)
}
// Register filters
for (const key of Object.keys(filters)) {
const filter = filters[key]
StyleDictionary.registerFilter(filter)
}
StyleDictionary.registerFilter({
name: "color/light",
matcher: function (token) {
return (
token.attributes.type === "color" && token.filePath.includes('light')
);
},
});
const isTypographyToken = (token) => {
const typographyCategories = [
'heading',
'body',
'monospace',
'display'
]
return typographyCategories.includes(token.attributes.category)
}
const getComponent = (token) => {
let component = null
if (token.attributes.category !== 'radius' && token.type === 'borderRadius') {
component = token.attributes.category
}
if (token.attributes.category !== 'color' && token.type === 'color') {
component = token.attributes.category
}
if (token.type === 'boxShadow') {
component = token.attributes.category
}
return component
}
const getTokenLevel = (token) => {
if (getComponent(token)) {
return 'component'
}
if (token.attributes.type === 'palette') {
return 'reference'
}
if (token.original.rawValue && typeof token.original.rawValue !== 'object' && token.original.rawValue.includes('.')) {
return 'system'
}
if (isTypographyToken(token)) {
return 'system'
}
return 'reference'
}
StyleDictionary.registerTransformGroup({
name: "custom/json",
transforms: StyleDictionary.transformGroup["web"].concat([
"size/pxToRem",
"letterSpacing/percentToEm",
"fontFamily/fallback",
"typography/name",
"fontWeight/css",
"shadow/css"
]),
});
// before this runs we should clean the directories we are generating files in
// to make sure they are ✨clean✨
console.log(`cleaning ${iosPath}...`);
fs.removeSync(iosPath);
const styleDictionary = StyleDictionary.extend({
// custom actions
action: {
generateColorsets: require('./actions/ios/foundations')
},
format: {
swiftColor: require('./formats/swiftColor'),
swiftImage: require('./formats/swiftImage'),
},
});
const modes = [`light`, `dark`];
const iosColors = {
buildPath: iosPath,
transforms: [`attribute/cti`,`colorRGB`,`name/ti/camel`],
actions: [`generateColorsets`],
};
console.log(`\n\n🌙 Building dark mode...`);
styleDictionary.extend({
source: [
// this is saying find any files in the tokens folder
// that does not have .dark or .light, but ends in .json5
`ios/tokens/ios.json`
],
platforms: {
iosColors: Object.assign(iosColors, {
mode: `dark`,
library: 'foo'
}),
}
}).buildAllPlatforms()
console.log(`☀️ Building light mode...`);
styleDictionary.extend({
include: [
// this is the same as the source in light/default above
`ios/tokens/ios-light.json`
],
source: [
// Kind of the opposite of above, this will find any files
// that have the file extension .dark.json5
`tokens/**/*.light.json`
],
platforms: {
iosColors: Object.assign(iosColors, {
mode: `light`
}),
}
})
.buildAllPlatforms();