wishthis/semantic/tasks/config/tasks.js

182 lines
4.1 KiB
JavaScript
Raw Normal View History

2022-01-13 13:00:31 +00:00
var
browserslist = require('browserslist'),
console = require('better-console'),
config = require('./user'),
release = require('./project/release')
;
var defaultBrowsers = browserslist(browserslist.defaults)
var userBrowsers = browserslist()
var hasBrowserslistConfig = JSON.stringify(defaultBrowsers) !== JSON.stringify(userBrowsers)
var overrideBrowserslist = hasBrowserslistConfig ? undefined : [
'last 2 versions',
'> 1%',
'opera 12.1',
'bb 10',
'android 4'
]
module.exports = {
banner : release.banner,
log: {
created: function(file) {
return 'Created: ' + file;
},
modified: function(file) {
return 'Modified: ' + file;
}
},
filenames: {
concatenatedCSS : 'semantic.css',
concatenatedJS : 'semantic.js',
concatenatedMinifiedCSS : 'semantic.min.css',
concatenatedMinifiedJS : 'semantic.min.js',
concatenatedRTLCSS : 'semantic.rtl.css',
concatenatedMinifiedRTLCSS : 'semantic.rtl.min.css'
},
regExp: {
comments: {
// remove all comments from config files (.variable)
variables : {
in : /(\/\*[\s\S]+?\*\/+)[\s\S]+?\/\* End Config \*\//,
out : '$1',
},
// add version to first comment
license: {
in : /(^\/\*[\s\S]+)(# Fomantic-UI )([\s\S]+?\*\/)/,
out : '$1$2' + release.version + ' $3'
},
// adds uniform spacing around comments
large: {
in : /(\/\*\*\*\*[\s\S]+?\*\/)/mg,
out : '\n\n$1\n'
},
small: {
in : /(\/\*---[\s\S]+?\*\/)/mg,
out : '\n$1\n'
},
tiny: {
in : /(\/\* [\s\S]+? \*\/)/mg,
out : '\n$1'
}
},
theme: /.*(\/|\\)themes(\/|\\).*?(?=(\/|\\))/mg
},
settings: {
/* Remove Files in Clean */
del: {
silent : true
},
concatCSS: {
rebaseUrls: false
},
/* Comment Banners */
header: {
year : (new Date()).getFullYear(),
title : release.title,
version : release.version,
repository : release.repository,
url : release.url
},
plumber: {
less: {
errorHandler: function(error) {
var
regExp = {
variable : /@(\S.*?)\s/,
theme : /themes[\/\\]+(.*?)[\/\\].*/,
element : /[\/\\]([^\/\\*]*)\.overrides/
},
theme,
element
;
if(error && error.filename && error.filename.match(/theme.less/)) {
if (error.line == 9) {
element = regExp.variable.exec(error.message)[1];
if (element) {
console.error('Missing theme.config value for ', element);
}
console.error('Most likely new UI was added in an update. You will need to add missing elements from theme.config.example');
} else if (error.line == 73) {
element = regExp.element.exec(error.message)[1];
theme = regExp.theme.exec(error.message)[1];
console.error(theme + ' is not an available theme for ' + element);
} else {
console.error(error);
}
}
else {
throw new Error(error);
}
this.emit('end');
}
}
},
/* What Browsers to Prefix */
prefix: {
overrideBrowserslist
},
/* File Renames */
rename: {
minJS : { extname : '.min.js' },
minCSS : { extname : '.min.css' },
rtlCSS : { extname : '.rtl.css' },
rtlMinCSS : { extname : '.rtl.min.css' }
},
/* Minified CSS Concat */
minify: {
level: {
1: {
inline : false
}
}
},
/* Minified JS Settings */
uglify: {
mangle : true,
output: {
comments: 'some'
}
},
/* Minified Concat CSS Settings */
concatMinify: {
level: {
1: {
inline : false,
specialComments : false
}
}
},
/* Minified Concat JS */
concatUglify: {
mangle : true,
output: {
comments: 'some'
}
}
}
};