| var extractImportUrlAndMedia = require('./extract-import-url-and-media'); | 
| var restoreImport = require('./restore-import'); | 
| var rewriteUrl = require('./rewrite-url'); | 
|   | 
| var Token = require('../tokenizer/token'); | 
| var isImport = require('../utils/is-import'); | 
|   | 
| var SOURCE_MAP_COMMENT_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/; | 
|   | 
| function rebase(tokens, rebaseAll, validator, rebaseConfig) { | 
|   return rebaseAll ? | 
|     rebaseEverything(tokens, validator, rebaseConfig) : | 
|     rebaseAtRules(tokens, validator, rebaseConfig); | 
| } | 
|   | 
| function rebaseEverything(tokens, validator, rebaseConfig) { | 
|   var token; | 
|   var i, l; | 
|   | 
|   for (i = 0, l = tokens.length; i < l; i++) { | 
|     token = tokens[i]; | 
|   | 
|     switch (token[0]) { | 
|       case Token.AT_RULE: | 
|         rebaseAtRule(token, validator, rebaseConfig); | 
|         break; | 
|       case Token.AT_RULE_BLOCK: | 
|         rebaseProperties(token[2], validator, rebaseConfig); | 
|         break; | 
|       case Token.COMMENT: | 
|         rebaseSourceMapComment(token, rebaseConfig); | 
|         break; | 
|       case Token.NESTED_BLOCK: | 
|         rebaseEverything(token[2], validator, rebaseConfig); | 
|         break; | 
|       case Token.RULE: | 
|         rebaseProperties(token[2], validator, rebaseConfig); | 
|         break; | 
|     } | 
|   } | 
|   | 
|   return tokens; | 
| } | 
|   | 
| function rebaseAtRules(tokens, validator, rebaseConfig) { | 
|   var token; | 
|   var i, l; | 
|   | 
|   for (i = 0, l = tokens.length; i < l; i++) { | 
|     token = tokens[i]; | 
|   | 
|     switch (token[0]) { | 
|       case Token.AT_RULE: | 
|         rebaseAtRule(token, validator, rebaseConfig); | 
|         break; | 
|     } | 
|   } | 
|   | 
|   return tokens; | 
| } | 
|   | 
| function rebaseAtRule(token, validator, rebaseConfig) { | 
|   if (!isImport(token[1])) { | 
|     return; | 
|   } | 
|   | 
|   var uriAndMediaQuery = extractImportUrlAndMedia(token[1]); | 
|   var newUrl = rewriteUrl(uriAndMediaQuery[0], rebaseConfig); | 
|   var mediaQuery = uriAndMediaQuery[1]; | 
|   | 
|   token[1] = restoreImport(newUrl, mediaQuery); | 
| } | 
|   | 
| function rebaseSourceMapComment(token, rebaseConfig) { | 
|   var matches = SOURCE_MAP_COMMENT_PATTERN.exec(token[1]); | 
|   | 
|   if (matches && matches[1].indexOf('data:') === -1) { | 
|     token[1] = token[1].replace(matches[1], rewriteUrl(matches[1], rebaseConfig, true)); | 
|   } | 
| } | 
|   | 
| function rebaseProperties(properties, validator, rebaseConfig) { | 
|   var property; | 
|   var value; | 
|   var i, l; | 
|   var j, m; | 
|   | 
|   for (i = 0, l = properties.length; i < l; i++) { | 
|     property = properties[i]; | 
|   | 
|     for (j = 2 /* 0 is Token.PROPERTY, 1 is name */, m = property.length; j < m; j++) { | 
|       value = property[j][1]; | 
|   | 
|       if (validator.isUrl(value)) { | 
|         property[j][1] = rewriteUrl(value, rebaseConfig); | 
|       } | 
|     } | 
|   } | 
| } | 
|   | 
| module.exports = rebase; |