UNPKG

3 kBJavaScriptView Raw
1"use strict";
2
3var Stylis = require('stylis');
4
5var stylisRuleSheet = require('stylis-rule-sheet');
6
7var stylis = new Stylis();
8
9function disableNestingPlugin() {
10 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
11 args[_key] = arguments[_key];
12 }
13
14 // eslint-disable-next-line unicorn/no-unreadable-array-destructuring
15 var context = args[0],
16 _args$ = args[3],
17 parent = _args$ === void 0 ? [] : _args$,
18 line = args[4],
19 column = args[5];
20
21 if (context === 2) {
22 // replace null characters and trim
23 // eslint-disable-next-line no-control-regex
24 parent = (parent[0] || '').replace(/\u0000/g, '').trim();
25
26 if (parent.length > 0 && parent.charAt(0) !== '@') {
27 throw new Error("Nesting detected at " + line + ":" + column + ". " + 'Unfortunately nesting is not supported by styled-jsx.');
28 }
29 }
30}
31
32var generator;
33var filename;
34var offset;
35
36function sourceMapsPlugin() {
37 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
38 args[_key2] = arguments[_key2];
39 }
40
41 // eslint-disable-next-line unicorn/no-unreadable-array-destructuring
42 var context = args[0],
43 line = args[4],
44 column = args[5],
45 length = args[6]; // Pre-processed, init source map
46
47 if (context === -1 && generator !== undefined) {
48 generator.addMapping({
49 generated: {
50 line: 1,
51 column: 0
52 },
53 source: filename,
54 original: offset
55 });
56 return;
57 } // Post-processed
58
59
60 if (context === -2 && generator !== undefined) {
61 generator = undefined;
62 offset = undefined;
63 filename = undefined;
64 return;
65 } // Selector/property, update source map
66
67
68 if ((context === 1 || context === 2) && generator !== undefined) {
69 generator.addMapping({
70 generated: {
71 line: 1,
72 column: length
73 },
74 source: filename,
75 original: {
76 line: line + offset.line,
77 column: column + offset.column
78 }
79 });
80 }
81}
82/**
83 * splitRulesPlugin
84 * Used to split a blob of css into an array of rules
85 * that can inserted via sheet.insertRule
86 */
87
88
89var splitRules = [];
90var splitRulesPlugin = stylisRuleSheet(function (rule) {
91 splitRules.push(rule);
92});
93stylis.use(disableNestingPlugin);
94stylis.use(sourceMapsPlugin);
95stylis.use(splitRulesPlugin);
96stylis.set({
97 cascade: false,
98 compress: true
99});
100/**
101 * Public transform function
102 *
103 * @param {String} hash
104 * @param {String} styles
105 * @param {Object} settings
106 * @return {string}
107 */
108
109function transform(hash, styles, settings) {
110 if (settings === void 0) {
111 settings = {};
112 }
113
114 generator = settings.generator;
115 offset = settings.offset;
116 filename = settings.filename;
117 splitRules = [];
118 stylis.set({
119 prefix: typeof settings.vendorPrefixes === 'boolean' ? settings.vendorPrefixes : true
120 });
121 stylis(hash, styles);
122
123 if (settings.splitRules) {
124 return splitRules;
125 }
126
127 return splitRules.join('');
128}
129
130module.exports = transform;
\No newline at end of file