@tdb/web
Version:
Common condiguration for serving a web-site and testing web-based UI components.
131 lines (107 loc) • 2.92 kB
JavaScript
;
var Stylis = require('stylis');
var stylisRuleSheet = require('stylis-rule-sheet');
var stylis = new Stylis();
function disableNestingPlugin() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var context = args[0],
_args$ = args[3],
parent = _args$ === undefined ? [] : _args$,
line = args[4],
column = args[5];
if (context === 2) {
// replace null characters and trim
// eslint-disable-next-line no-control-regex
parent = (parent[0] || '').replace(/\u0000/g, '').trim();
if (parent.length > 0 && parent.charAt(0) !== '@') {
throw new Error('Nesting detected at ' + line + ':' + column + '. ' + 'Unfortunately nesting is not supported by styled-jsx.');
}
}
}
var generator = void 0;
var filename = void 0;
var offset = void 0;
function sourceMapsPlugin() {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
var context = args[0],
line = args[4],
column = args[5],
length = args[6];
// Pre-processed, init source map
if (context === -1 && generator !== undefined) {
generator.addMapping({
generated: {
line: 1,
column: 0
},
source: filename,
original: offset
});
return;
}
// Post-processed
if (context === -2 && generator !== undefined) {
generator = undefined;
offset = undefined;
filename = undefined;
return;
}
// Selector/property, update source map
if ((context === 1 || context === 2) && generator !== undefined) {
generator.addMapping({
generated: {
line: 1,
column: length
},
source: filename,
original: {
line: line + offset.line,
column: column + offset.column
}
});
}
}
/**
* splitRulesPlugin
* Used to split a blob of css into an array of rules
* that can inserted via sheet.insertRule
*/
var splitRules = [];
var splitRulesPlugin = stylisRuleSheet(function (rule) {
splitRules.push(rule);
});
stylis.use(disableNestingPlugin);
stylis.use(sourceMapsPlugin);
stylis.use(splitRulesPlugin);
stylis.set({
cascade: false,
compress: true
});
/**
* Public transform function
*
* @param {String} hash
* @param {String} styles
* @param {Object} settings
* @return {string}
*/
function transform(hash, styles) {
var settings = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
generator = settings.generator;
offset = settings.offset;
filename = settings.filename;
splitRules = [];
stylis.set({
prefix: typeof settings.vendorPrefixes === 'boolean' ? settings.vendorPrefixes : true
});
stylis(hash, styles);
if (settings.splitRules) {
return splitRules;
}
return splitRules.join('');
}
module.exports = transform;