1 | "use strict";
|
2 |
|
3 | var _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 |
|
5 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
6 |
|
7 | var babel = require("babel-core");
|
8 | var babiliPreset = require("babel-preset-babili");
|
9 |
|
10 | var _require = require("webpack-sources"),
|
11 | SourceMapSource = _require.SourceMapSource,
|
12 | RawSource = _require.RawSource;
|
13 |
|
14 | module.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 |
|
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 |
|
109 | function 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 |