|
|
/**
|
|
* Module dependencies.
|
|
*/
|
|
|
|
var css = require('css');
|
|
var convertSourceMap = require('convert-source-map');
|
|
var parse = css.parse;
|
|
var stringify = css.stringify;
|
|
|
|
/**
|
|
* Expose `rework`.
|
|
*/
|
|
|
|
exports = module.exports = rework;
|
|
|
|
/**
|
|
* Initialize a new stylesheet `Rework` with `str`.
|
|
*
|
|
* @param {String} str
|
|
* @param {Object} options
|
|
* @return {Rework}
|
|
* @api public
|
|
*/
|
|
|
|
function rework(str, options) {
|
|
return new Rework(parse(str, options));
|
|
}
|
|
|
|
/**
|
|
* Initialize a new stylesheet `Rework` with `obj`.
|
|
*
|
|
* @param {Object} obj
|
|
* @api private
|
|
*/
|
|
|
|
function Rework(obj) {
|
|
this.obj = obj;
|
|
}
|
|
|
|
/**
|
|
* Use the given plugin `fn(style, rework)`.
|
|
*
|
|
* @param {Function} fn
|
|
* @return {Rework}
|
|
* @api public
|
|
*/
|
|
|
|
Rework.prototype.use = function(fn){
|
|
fn(this.obj.stylesheet, this);
|
|
return this;
|
|
};
|
|
|
|
/**
|
|
* Stringify the stylesheet.
|
|
*
|
|
* @param {Object} options
|
|
* @return {String}
|
|
* @api public
|
|
*/
|
|
|
|
Rework.prototype.toString = function(options){
|
|
options = options || {};
|
|
var result = stringify(this.obj, options);
|
|
if (options.sourcemap && !options.sourcemapAsObject) {
|
|
result = result.code + '\n' + sourcemapToComment(result.map);
|
|
}
|
|
return result;
|
|
};
|
|
|
|
/**
|
|
* Convert sourcemap to base64-encoded comment
|
|
*
|
|
* @param {Object} map
|
|
* @return {String}
|
|
* @api private
|
|
*/
|
|
|
|
function sourcemapToComment(map) {
|
|
var content = convertSourceMap.fromObject(map).toBase64();
|
|
return '/*# sourceMappingURL=data:application/json;base64,' + content + ' */';
|
|
}
|