UNPKG

4.16 kBJavaScriptView Raw
1import fs from 'fs'
2
3import Animations from '../src/props.animations.js'
4import Sizes from '../src/props.sizes.js'
5import * as Colors from '../src/props.colors.js'
6import * as ColorsHSL from '../src/props.colors-hsl.js'
7import Fonts from '../src/props.fonts.js'
8import Borders from '../src/props.borders.js'
9import Aspects from '../src/props.aspects.js'
10import Easings from '../src/props.easing.js'
11import Gradients from '../src/props.gradients.js'
12import Shadows from '../src/props.shadows.js'
13import SVG from '../src/props.svg.js'
14import Zindex from '../src/props.zindex.js'
15import MaskEdges from '../src/props.masks.edges.js'
16import MaskCornerCuts from '../src/props.masks.corner-cuts.js'
17
18import {buildPropsStylesheet} from './to-stylesheet.js'
19import {toTokens} from './to-tokens.js'
20import {toObject} from './to-object.js'
21import {toFigmaTokens} from './to-figmatokens.js'
22
23const [,,prefix='',useWhere,customSubject='',filePrefix=''] = process.argv
24
25const subject = customSubject === '' ? 'html' : customSubject
26const selector = useWhere === 'true' ? `:where(${subject})` : subject
27const pfx = filePrefix ? filePrefix + '.' : ''
28
29const mainbundle = {
30 [`${pfx}props.fonts.css`]: Fonts,
31 [`${pfx}props.sizes.css`]: Sizes,
32 [`${pfx}props.easing.css`]: Easings,
33 [`${pfx}props.zindex.css`]: Zindex,
34 [`${pfx}props.shadows.css`]: Shadows,
35 [`${pfx}props.aspects.css`]: Aspects,
36 [`${pfx}props.colors.css`]: Colors.default,
37 // [`${pfx}props.svg.css`]: SVG,
38 [`${pfx}props.gradients.css`]: Gradients,
39 [`${pfx}props.animations.css`]: Animations,
40 [`${pfx}props.borders.css`]: Borders,
41}
42
43const individual_colors = Object.keys(Colors)
44 .filter(exportName => exportName !== "default")
45 .reduce((root, hueName) => ({
46 ...root,
47 [`${pfx}props.${hueName.toLowerCase()}.css`]: Colors[hueName]
48 }), {})
49
50const individual_colors_hsl = Object.keys(ColorsHSL)
51 .filter(exportName => exportName !== "default")
52 .reduce((root, hueName) => ({
53 ...root,
54 [`${pfx}props.${hueName.toLowerCase()}-hsl.css`]: ColorsHSL[hueName]
55 }), {})
56
57// const individuals = {
58// 'props.masks.edges.css': MaskEdges,
59// 'props.masks.corner-cuts.css': MaskCornerCuts,
60// }
61
62// gen design tokens
63const jsonbundle = Object.entries({
64 ...Object.assign({}, ...Object.values(individual_colors)),
65 ...Sizes,
66 ...Easings,
67 ...Zindex,
68 ...Aspects,
69 ...Gradients,
70 ...Borders,
71}).reverse()
72
73const designtokens = toTokens(jsonbundle)
74const JSONtokens = fs.createWriteStream('../open-props.tokens.json')
75JSONtokens.end(JSON.stringify(Object.fromEntries(designtokens), null, 2))
76
77// gen figma tokens
78const figmatokens = toFigmaTokens(jsonbundle)
79const FigmaTokens = fs.createWriteStream('../open-props.figma-tokens.json')
80FigmaTokens.end(JSON.stringify(figmatokens, null, 2))
81
82const figmatokensSYNC = { 'open-props': { ...figmatokens } }
83const FigmaTokensSync = fs.createWriteStream('../open-props.figma-tokens.sync.json')
84FigmaTokensSync.end(JSON.stringify(figmatokensSYNC, null, 2))
85
86if (!fs.existsSync('../dist'))
87 fs.mkdirSync('../dist')
88
89const JS = fs.createWriteStream('../dist/open-props.js')
90JS.end(`var OpenProps = ${JSON.stringify(toObject(), null, 2)}`)
91
92const ES = fs.createWriteStream('../dist/open-props.module.js')
93ES.end(`export default ${JSON.stringify(toObject(), null, 2)}`)
94
95const CJS = fs.createWriteStream('../dist/open-props.cjs')
96CJS.end(`module.exports = ${JSON.stringify(toObject(), null, 2)}`)
97
98// const UMD = fs.createWriteStream('../dist/open-props.umd.js')
99// UMD.end(`module.exports = ${JSON.stringify(toObject(), null, 2)}`)
100
101
102// gen prop variants
103Object.entries({
104 ...mainbundle,
105 ...individual_colors,
106 ...individual_colors_hsl,
107 // ...individuals,
108}).forEach(([filename, props]) => {
109 buildPropsStylesheet({filename, props}, {selector, prefix})
110})
111
112// gen color hsl main file
113buildPropsStylesheet({
114 filename: pfx + 'props.colors-hsl.css',
115 props: ColorsHSL.default},
116 {selector, prefix}
117)
118
119// gen index.css
120const entry = fs.createWriteStream(`../src/${pfx}index.css`)
121entry.write(`@import 'props.media.css';
122`)
123Object.keys(mainbundle).forEach(filename => {
124 entry.write(`@import '${filename}';\n`)
125})
126entry.end()
\No newline at end of file