forked from quasarframework/quasar
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.build.stylus.js
More file actions
99 lines (84 loc) · 2.5 KB
/
script.build.stylus.js
File metadata and controls
99 lines (84 loc) · 2.5 KB
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
var
fs = require('fs'),
path = require('path'),
stylus = require('stylus'),
postcss = require('postcss'),
cssnano = require('cssnano'),
autoprefixer = require('autoprefixer'),
themes = ['ios', 'mat'],
nonStandalone = process.argv[2] === 'simple' || process.argv[3] === 'simple',
version = process.env.VERSION || require('../package.json').version,
pathList = [path.join(__dirname, '../src/themes/')],
banner =
'/*!\n' +
' * Quasar Framework v' + version + '\n' +
' * (c) ' + new Date().getFullYear() + ' Razvan Stoenescu\n' +
' * Released under the MIT License.\n' +
' */\n'
themes.forEach(function (theme) {
var
src = 'src/themes/quasar.' + theme + '.styl',
deps,
data
deps = stylus(readFile(src))
.set('paths', pathList)
.deps()
data = compile([src].concat(deps))
// write Stylus file
writeFile('dist/quasar.' + theme + '.styl', data)
// write compiled CSS file
stylus(data)
.set('paths', pathList)
.render(function (err, css) {
if (err) {
logError('Stylus could not compile ' + src.gray + ' file...')
throw err
}
// write unprefixed non-standalone version
writeFile('dist/quasar.' + theme + '.css', css)
if (nonStandalone) {
return
}
// write auto-prefixed standalone version
postcss([autoprefixer]).process(css).then(function (result) {
result.warnings().forEach(function (warn) {
console.warn(warn.toString())
})
writeFile('dist/quasar.' + theme + '.standalone.css', result.css)
cssnano.process(result.css).then(function (result) {
writeFile('dist/quasar.' + theme + '.standalone.min.css', result.css)
})
})
})
})
function logError (err) {
console.error('[Error]'.red, err)
}
function readFile (file) {
return fs.readFileSync(file, 'utf-8')
}
function writeFile (file, data) {
fs.writeFile(file, data, 'utf-8', function (err) {
if (err) {
logError('Could not write ' + file.gray + ' file...')
return
}
console.log(file.bold + ' ' + getSize(data).gray)
})
}
function compile (src) {
var data = banner
src.forEach(function (file) {
data += readFile(file) + '\n'
})
return data
// remove imports
.replace(/@import '[^']+'\n/g, '')
// remove comments
.replace(/(\/\*[\w'-\.,`\s\r\n\*@]*\*\/)|(\/\/[^\n]*)/g, '')
// remove unnecessary newlines
.replace(/\n[\n]+/g, '\n')
}
function getSize (code) {
return (code.length / 1024).toFixed(2) + 'kb'
}