tasks.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. var
  2. browserslist = require('browserslist'),
  3. console = require('better-console'),
  4. config = require('./user'),
  5. release = require('./project/release')
  6. ;
  7. var defaultBrowsers = browserslist(browserslist.defaults)
  8. var userBrowsers = browserslist()
  9. var hasBrowserslistConfig = JSON.stringify(defaultBrowsers) !== JSON.stringify(userBrowsers)
  10. var overrideBrowserslist = hasBrowserslistConfig ? undefined : [
  11. 'last 2 versions',
  12. '> 1%',
  13. 'opera 12.1',
  14. 'bb 10',
  15. 'android 4'
  16. ]
  17. module.exports = {
  18. banner : release.banner,
  19. log: {
  20. created: function(file) {
  21. return 'Created: ' + file;
  22. },
  23. modified: function(file) {
  24. return 'Modified: ' + file;
  25. }
  26. },
  27. filenames: {
  28. concatenatedCSS : 'semantic.css',
  29. concatenatedJS : 'semantic.js',
  30. concatenatedMinifiedCSS : 'semantic.min.css',
  31. concatenatedMinifiedJS : 'semantic.min.js',
  32. concatenatedRTLCSS : 'semantic.rtl.css',
  33. concatenatedMinifiedRTLCSS : 'semantic.rtl.min.css'
  34. },
  35. regExp: {
  36. comments: {
  37. // remove all comments from config files (.variable)
  38. variables : {
  39. in : /(\/\*[\s\S]+?\*\/+)[\s\S]+?\/\* End Config \*\//,
  40. out : '$1',
  41. },
  42. // add version to first comment
  43. license: {
  44. in : /(^\/\*[\s\S]+)(# Semantic UI )([\s\S]+?\*\/)/,
  45. out : '$1$2' + release.version + ' $3'
  46. },
  47. // adds uniform spacing around comments
  48. large: {
  49. in : /(\/\*\*\*\*[\s\S]+?\*\/)/mg,
  50. out : '\n\n$1\n'
  51. },
  52. small: {
  53. in : /(\/\*---[\s\S]+?\*\/)/mg,
  54. out : '\n$1\n'
  55. },
  56. tiny: {
  57. in : /(\/\* [\s\S]+? \*\/)/mg,
  58. out : '\n$1'
  59. }
  60. },
  61. theme: /.*(\/|\\)themes(\/|\\).*?(?=(\/|\\))/mg
  62. },
  63. settings: {
  64. /* Remove Files in Clean */
  65. del: {
  66. silent : true
  67. },
  68. concatCSS: {
  69. rebaseUrls: false
  70. },
  71. /* Comment Banners */
  72. header: {
  73. title : release.title,
  74. version : release.version,
  75. repository : release.repository,
  76. url : release.url
  77. },
  78. plumber: {
  79. less: {
  80. errorHandler: function(error) {
  81. var
  82. regExp = {
  83. variable : /@(\S.*?)\s/,
  84. theme : /themes[\/\\]+(.*?)[\/\\].*/,
  85. element : /[\/\\]([^\/\\*]*)\.overrides/
  86. },
  87. theme,
  88. element
  89. ;
  90. if(error.filename.match(/theme.less/)) {
  91. if (error.line == 9) {
  92. element = regExp.variable.exec(error.message)[1];
  93. if (element) {
  94. console.error('Missing theme.config value for ', element);
  95. }
  96. console.error('Most likely new UI was added in an update. You will need to add missing elements from theme.config.example');
  97. } else if (error.line == 73) {
  98. element = regExp.element.exec(error.message)[1];
  99. theme = regExp.theme.exec(error.message)[1];
  100. console.error(theme + ' is not an available theme for ' + element);
  101. } else {
  102. console.error(error);
  103. }
  104. }
  105. else {
  106. throw new Error(error);
  107. }
  108. this.emit('end');
  109. }
  110. }
  111. },
  112. /* What Browsers to Prefix */
  113. prefix: {
  114. overrideBrowserslist
  115. },
  116. /* File Renames */
  117. rename: {
  118. minJS : { extname : '.min.js' },
  119. minCSS : { extname : '.min.css' },
  120. rtlCSS : { extname : '.rtl.css' },
  121. rtlMinCSS : { extname : '.rtl.min.css' }
  122. },
  123. /* Minified CSS Concat */
  124. minify: {
  125. processImport : false,
  126. restructuring : false,
  127. keepSpecialComments : 1,
  128. roundingPrecision : -1,
  129. },
  130. /* Minified JS Settings */
  131. uglify: {
  132. mangle : true,
  133. output: {
  134. comments: 'some'
  135. }
  136. },
  137. /* Minified Concat CSS Settings */
  138. concatMinify: {
  139. processImport : false,
  140. restructuring : false,
  141. keepSpecialComments : false,
  142. roundingPrecision : -1,
  143. },
  144. /* Minified Concat JS */
  145. concatUglify: {
  146. mangle : true,
  147. output: {
  148. comments: 'some'
  149. }
  150. }
  151. }
  152. };