UNPKG

1.59 kBJavaScriptView Raw
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5var loaderUtils = require("loader-utils");
6var baseRegex = "\\s*[@#]\\s*sourceMappingURL=data:[^;\n]+;base64,([^\\s]*)",
7 // Matches /* ... */ comments
8 regex1 = new RegExp("/\\*"+baseRegex+"\\s*\\*/$"),
9 // Matches // .... comments
10 regex2 = new RegExp("//"+baseRegex+".*$");
11module.exports = function(input) {
12 if(!this.query) throw new Error("Pass a module name as query to the transform-loader.");
13 var query = loaderUtils.getOptions(this) || {};
14 var callback = this.async();
15 var resource = this.resource;
16 var loaderContext = this;
17 var q = Object.keys(query)[0];
18 if(/^[0-9]+$/.test(q)) {
19 next(this.options.transforms[+q]);
20 } else {
21 this.resolve(this.context, q, function(err, module) {
22 if(err) return callback(err);
23 next(require(module));
24 });
25 }
26 function next(transformFn) {
27 var stream = transformFn(resource);
28 var bufs = [];
29 var done = false;
30 stream.on("data", function(b) {
31 bufs.push(Buffer.isBuffer(b) ? b : new Buffer(b));
32 });
33 stream.on("end", function() {
34 if(done) return;
35 var b = Buffer.concat(bufs).toString();
36 var match = b.match(regex1) || b.match(regex2);
37 try {
38 var map = match && JSON.parse((new Buffer(match[1], "base64")).toString());
39 } catch(e) {
40 var map = null;
41 }
42 done = true;
43 callback(null, map ? b.replace(match[0], "") : b, map);
44 });
45 stream.on("error", function(err) {
46 if(done) return;
47 done = true;
48 callback(err);
49 });
50 stream.write(input);
51 stream.end();
52 }
53};
54module.exports.raw = true;