1
const path = require('node:path')
2
const sass = require('sass')
3
const rtl = require('postcss-rtlcss')
4
const postcss = require('postcss')
5
const cssnano = require('cssnano')
6
const autoprefixer = require('autoprefixer')
8
const buildConf = require('./build.conf')
9
const buildUtils = require('./build.utils')
10
const prepareDiff = require('./prepare-diff')
14
preset: [ 'default', {
17
cssDeclarationSorter: false,
18
reduceTransforms: false
23
const sassUseRE = /@use\s+['"][^'"]+['"]/g
25
function moveUseStatementsToTop (code) {
26
const useStatements = code.match(sassUseRE)
28
return useStatements === null
30
: Array.from(new Set(useStatements)).join('\n')
32
+ code.replace(sassUseRE, '')
35
function getConcatenatedContent (src, noBanner) {
36
return new Promise(resolve => {
38
const banner = noBanner !== true
43
code += buildUtils.readFile(file) + '\n'
48
.replace(/@import\s+'[^']+'[\s\r\n]+/g, '')
50
.replace(/(\/\*[\w'-.,`\s\r\n*@]*\*\/)|(\/\/[^\r\n]*)/g, '')
52
.replace(/[\r\n]+/g, '\r\n')
55
banner + moveUseStatementsToTop(code)
60
function generateUMD (code, middleName, ext = '') {
61
return buildUtils.writeFile(`dist/quasar${ middleName }${ ext }.css`, code, true)
62
.then(code => nano.process(code, { from: void 0 }))
63
.then(code => buildUtils.writeFile(`dist/quasar${ middleName }${ ext }.prod.css`, code.css, true))
66
function renderAsset (cssCode, middleName = '') {
67
return postcss([ autoprefixer ]).process(cssCode, { from: void 0 })
69
code.warnings().forEach(warn => {
70
console.warn(warn.toString())
74
.then(code => Promise.all([
75
generateUMD(code, middleName),
76
postcss([ rtl({}) ]).process(code, { from: void 0 })
77
.then(code => generateUMD(code.css, middleName, '.rtl'))
81
function generateBase (source) {
82
const src = path.join(__dirname, '..', source)
83
const sassDistDest = path.join(__dirname, '../dist/quasar.sass')
85
const result = sass.renderSync({ file: src })
88
const cssCode = result.css.toString().replace('@charset "UTF-8";', '')
89
const depsList = result.stats.includedFiles
94
getConcatenatedContent(depsList)
95
.then(code => buildUtils.writeFile(sassDistDest, code))
99
function generateAddon (source) {
100
const src = path.join(__dirname, '..', source)
102
const result = sass.renderSync({ file: src })
103
const cssCode = result.css.toString()
105
return renderAsset(cssCode, '.addon')
108
module.exports = function (withDiff) {
109
if (withDiff === true) {
110
prepareDiff('dist/quasar.sass')
115
generateBase('src/css/index.sass'),
116
generateAddon('src/css/flex-addon.sass')