UNPKG

4.14 kBJavaScriptView Raw
1"use strict";
2
3var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
4
5function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6
7var babel = require("babel-core");
8var babiliPreset = require("babel-preset-babili");
9
10var _require = require("webpack-sources"),
11 SourceMapSource = _require.SourceMapSource,
12 RawSource = _require.RawSource;
13
14module.exports = function () {
15 function BabiliPlugin() {
16 var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
17
18 _classCallCheck(this, BabiliPlugin);
19
20 this.options = options;
21 }
22
23 _createClass(BabiliPlugin, [{
24 key: "apply",
25 value: function apply(compiler) {
26 var options = this.options;
27
28 var jsregex = options.test || /\.js($|\?)/i;
29 var commentsRegex = typeof options.comments === "undefined" ? /@preserve|@license/ : options.comments;
30
31 var useSourceMap = typeof options.sourceMap === "undefined" ? !!compiler.options.devtool : options.sourceMap;
32
33 var _babel = this.options.babel || babel;
34 var _babili = this.options.babili || babiliPreset;
35
36 compiler.plugin("compilation", function (compilation) {
37 if (useSourceMap) {
38 compilation.plugin("build-module", function (module) {
39 module.useSourceMap = true;
40 });
41 }
42
43 compilation.plugin("optimize-chunk-assets", function (chunks, callback) {
44 var files = [];
45
46 chunks.forEach(function (chunk) {
47 chunk.files.forEach(function (file) {
48 return files.push(file);
49 });
50 });
51
52 compilation.additionalChunkAssets.forEach(function (file) {
53 return files.push(file);
54 });
55
56 files.filter(function (file) {
57 return jsregex.test(file);
58 }).forEach(function (file) {
59 try {
60 var asset = compilation.assets[file];
61
62 if (asset.__babilified) {
63 compilation.assets[file] = asset.__babilified;
64 return;
65 }
66
67 var input = void 0,
68 inputSourceMap = void 0;
69
70 if (useSourceMap) {
71 if (asset.sourceAndMap) {
72 var sourceAndMap = asset.sourceAndMap();
73 inputSourceMap = sourceAndMap.map;
74 input = sourceAndMap.source;
75 } else {
76 inputSourceMap = asset.map();
77 input = asset.source();
78 }
79 } else {
80 input = asset.source();
81 }
82
83 // do the transformation
84 var result = _babel.transform(input, {
85 presets: [_babili],
86 sourceMaps: useSourceMap,
87 babelrc: false,
88 inputSourceMap,
89 shouldPrintComment(contents) {
90 return shouldPrintComment(contents, commentsRegex);
91 }
92 });
93
94 asset.__babilified = compilation.assets[file] = result.map ? new SourceMapSource(result.code, file, result.map, input, inputSourceMap) : new RawSource(result.code);
95 } catch (e) {
96 compilation.errors.push(e);
97 }
98 });
99
100 callback();
101 });
102 });
103 }
104 }]);
105
106 return BabiliPlugin;
107}();
108
109function shouldPrintComment(contents, checker) {
110 switch (typeof checker) {
111 case "function":
112 return checker(contents);
113 case "object":
114 return checker.test(contents);
115 default:
116 return !!checker;
117 }
118}
\No newline at end of file