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.

83 lines
1.4 KiB

/**
* 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 + ' */';
}