You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							101 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							101 lines
						
					
					
						
							2.5 KiB
						
					
					
				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;
 | 
						|
 |