@license
Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
'use strict';
const path = require('path').posix;
const url = require('url');
const URL = /url\([^)]*\)/g;
const ABS_URL = /(^\/)|(^#)|(^[\w-\d]*:)/;
module.exports = {
* @param {string} importUrl
* @param {string} mainDocUrl
* @param {string} relUrl
* @return {string}
*/
rewriteRelPath: function rewriteRelPath(importUrl, mainDocUrl, relUrl) {
if (ABS_URL.test(relUrl)) {
return relUrl;
}
const absUrl = url.resolve(importUrl, relUrl);
const parsedFrom = url.parse(mainDocUrl);
const parsedTo = url.parse(absUrl);
if (parsedFrom.protocol === parsedTo.protocol
&& parsedFrom.host === parsedTo.host) {
const pathname = path.relative(
path.dirname(parsedFrom.pathname), parsedTo.pathname);
return url.format({
pathname,
search: parsedTo.search,
hash: parsedTo.hash
});
}
return absUrl;
},
* @param {string} importUrl
* @param {string} mainDocUrl
* @param {string} cssText
* @return {string}
*/
rewriteURL: function rewriteURL(importUrl, mainDocUrl, cssText) {
return cssText.replace(URL, (match) => {
let path = match.replace(/["']/g, "").slice(4, -1);
path = this.rewriteRelPath(importUrl, mainDocUrl, path);
return 'url("' + path + '")';
});
}
}