From 355d7e8944bb7ea68054dfd5b5f1506d96f07479 Mon Sep 17 00:00:00 2001 From: Slava Kim Date: Fri, 3 Jan 2014 15:40:58 -0800 Subject: [PATCH] Ignore @charset rules and comments, then pull up @import rules from the top of every file. --- tools/bundler.js | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/tools/bundler.js b/tools/bundler.js index ec95852051..97bf3291ca 100644 --- a/tools/bundler.js +++ b/tools/bundler.js @@ -776,14 +776,30 @@ _.extend(ClientTarget.prototype, { return { type: "stylesheet", stylesheet: { rules: [] } }; } - function isImportRule (node) { - return node.type === 'import'; + function rulePredicate (rule) { + return function (node) { + return node.type === rule; + } } - var imports = _.filter(ast.stylesheet.rules, isImportRule); + // Get rid of comments + ast.stylesheet.rules = _.reject(ast.stylesheet.rules, + rulePredicate("comment")); + + // Pick only the imports from the begginning of file ignoring @charset + // rules as Meteor assumes every file is in utf-8. + ast.stylesheet.rules = _.reject(ast.stylesheet.rules, + rulePredicate("charset")); + var importsNumber = 0; + for (var i = 0; i < ast.stylesheet.rules.length; i++) + if (!rulePredicate("import")(ast.stylesheet.rules[i])) { + importsNumber = i; + break; + } + + var imports = ast.stylesheet.rules.splice(0, importsNumber); importsAst.stylesheet.rules = importsAst.stylesheet.rules.concat(imports); - ast.stylesheet.rules = _.reject(ast.stylesheet.rules, isImportRule); return ast; });