Skip to content

Commit 2d11107

Browse files
committed
feat: support gulp-dumber-css-module
closes #13
1 parent 7065d05 commit 2d11107

2 files changed

Lines changed: 31 additions & 3 deletions

File tree

lib/inject-css.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,24 @@ function injectCSS(css, id) {
8282
// dumber-module-loader plugin ext:css
8383
function load(name, req, load) {
8484
req(['text!' + name], function(text) {
85-
injectCSS(text, name);
86-
load(text);
85+
var result = splitCssModuleExports(text);
86+
injectCSS(result.css, name);
87+
// When css-module is in use, the module exports will be
88+
// a map of tokens. Otherwise, export original css string.
89+
load(result.exportTokens || result.css);
8790
});
8891
}
8992

93+
function splitCssModuleExports(text) {
94+
if (!text) return {css: ''};
95+
var m = text.match(/\/\*\s*dumber-css-module:\s*(.+)\s*\*\/\s*$/);
96+
if (!m) return {css: text};
97+
var css = text.slice(0, m.index);
98+
var exportTokens = JSON.parse(m[1]);
99+
return {css, exportTokens};
100+
}
101+
90102
exports.fixupCSSUrls = fixupCSSUrls;
91103
exports.injectCSS = injectCSS;
104+
exports.splitCssModuleExports = splitCssModuleExports;
92105
exports.load = load;

test/inject-css.spec.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const test = require('tape');
2-
const {fixupCSSUrls} = require('../lib/inject-css');
2+
const {fixupCSSUrls, splitCssModuleExports} = require('../lib/inject-css');
33

44
// tests partly copied from
55
// https://github.com/webpack-contrib/style-loader/blob/master/test/fixUrls.test.js
@@ -162,3 +162,18 @@ test("fixupCSSUrls doesn't break inline SVG with HTML comment", t => {
162162
t.equal(fixupCSSUrls('foo/bar', css), css);
163163
t.end();
164164
});
165+
166+
test('splitCssModuleExports returns original contents when css-module is not detected', t => {
167+
t.deepEqual(splitCssModuleExports(), {css: ''});
168+
t.deepEqual(splitCssModuleExports('.a { color: red; }'), {css: '.a { color: red; }'});
169+
t.end();
170+
});
171+
172+
test('splitCssModuleExports splits css-module exports', t => {
173+
const css = '._a_1vkqw_1 { color: red; }\n/* dumber-css-module: {"a":"_a_1vkqw_1"} */\n';
174+
t.deepEqual(splitCssModuleExports(css), {
175+
css: '._a_1vkqw_1 { color: red; }\n',
176+
exportTokens: {a: '_a_1vkqw_1'}
177+
});
178+
t.end();
179+
});

0 commit comments

Comments
 (0)