1 | "use strict";
|
2 |
|
3 | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
4 |
|
5 | var assign = require("object-assign");
|
6 | var babel = require("babel-core");
|
7 | var loaderUtils = require("loader-utils");
|
8 | var path = require("path");
|
9 | var cache = require("./fs-cache.js");
|
10 | var exists = require("./utils/exists")();
|
11 | var relative = require("./utils/relative");
|
12 | var read = require("./utils/read")();
|
13 | var resolveRc = require("./resolve-rc.js");
|
14 | var pkg = require("./../package.json");
|
15 |
|
16 | function BabelLoaderError(name, message, codeFrame, hideStack, error) {
|
17 | Error.call(this);
|
18 | Error.captureStackTrace(this, BabelLoaderError);
|
19 |
|
20 | this.name = "BabelLoaderError";
|
21 | this.message = formatMessage(name, message, codeFrame);
|
22 | this.hideStack = hideStack;
|
23 | this.error = error;
|
24 | }
|
25 |
|
26 | BabelLoaderError.prototype = Object.create(Error.prototype);
|
27 | BabelLoaderError.prototype.constructor = BabelLoaderError;
|
28 |
|
29 | var STRIP_FILENAME_RE = /^[^:]+: /;
|
30 |
|
31 | var formatMessage = function formatMessage(name, message, codeFrame) {
|
32 | return (name ? name + ": " : "") + message + "\n\n" + codeFrame + "\n";
|
33 | };
|
34 |
|
35 | var transpile = function transpile(source, options) {
|
36 | var result = void 0;
|
37 | try {
|
38 | result = babel.transform(source, options);
|
39 | } catch (error) {
|
40 | if (error.message && error.codeFrame) {
|
41 | var message = error.message;
|
42 | var name = void 0;
|
43 | var hideStack = void 0;
|
44 | if (error instanceof SyntaxError) {
|
45 | message = message.replace(STRIP_FILENAME_RE, "");
|
46 | name = "SyntaxError";
|
47 | hideStack = true;
|
48 | } else if (error instanceof TypeError) {
|
49 | message = message.replace(STRIP_FILENAME_RE, "");
|
50 | hideStack = true;
|
51 | }
|
52 | throw new BabelLoaderError(name, message, error.codeFrame, hideStack, error);
|
53 | } else {
|
54 | throw error;
|
55 | }
|
56 | }
|
57 | var code = result.code;
|
58 | var map = result.map;
|
59 |
|
60 | if (map && (!map.sourcesContent || !map.sourcesContent.length)) {
|
61 | map.sourcesContent = [source];
|
62 | }
|
63 |
|
64 | return {
|
65 | code: code,
|
66 | map: map
|
67 | };
|
68 | };
|
69 |
|
70 | module.exports = function (source, inputSourceMap) {
|
71 | var _this = this;
|
72 |
|
73 | var result = {};
|
74 |
|
75 | var webpackRemainingChain = loaderUtils.getRemainingRequest(this).split("!");
|
76 | var filename = webpackRemainingChain[webpackRemainingChain.length - 1];
|
77 |
|
78 | var globalOptions = this.options.babel || {};
|
79 | var loaderOptions = loaderUtils.parseQuery(this.query);
|
80 | var userOptions = assign({}, globalOptions, loaderOptions);
|
81 | var defaultOptions = {
|
82 | inputSourceMap: inputSourceMap,
|
83 | sourceRoot: process.cwd(),
|
84 | filename: filename,
|
85 | cacheIdentifier: JSON.stringify({
|
86 | "babel-loader": pkg.version,
|
87 | "babel-core": babel.version,
|
88 | babelrc: exists(userOptions.babelrc) ? read(userOptions.babelrc) : resolveRc(path.dirname(filename)),
|
89 | env: process.env.BABEL_ENV || process.env.NODE_ENV
|
90 | })
|
91 | };
|
92 |
|
93 | var options = assign({}, defaultOptions, userOptions);
|
94 |
|
95 | if (userOptions.sourceMap === undefined) {
|
96 | options.sourceMap = this.sourceMap;
|
97 | }
|
98 |
|
99 | if (options.sourceFileName === undefined) {
|
100 | options.sourceFileName = relative(options.sourceRoot, options.filename);
|
101 | }
|
102 |
|
103 | var cacheDirectory = options.cacheDirectory;
|
104 | var cacheIdentifier = options.cacheIdentifier;
|
105 |
|
106 | delete options.cacheDirectory;
|
107 | delete options.cacheIdentifier;
|
108 |
|
109 | this.cacheable();
|
110 |
|
111 | if (cacheDirectory) {
|
112 | var _ret = function () {
|
113 | var callback = _this.async();
|
114 | return {
|
115 | v: cache({
|
116 | directory: cacheDirectory,
|
117 | identifier: cacheIdentifier,
|
118 | source: source,
|
119 | options: options,
|
120 | transform: transpile
|
121 | }, function (err, result) {
|
122 | if (err) {
|
123 | return callback(err);
|
124 | }
|
125 | return callback(null, result.code, result.map);
|
126 | })
|
127 | };
|
128 | }();
|
129 |
|
130 | if ((typeof _ret === "undefined" ? "undefined" : _typeof(_ret)) === "object") return _ret.v;
|
131 | }
|
132 |
|
133 | result = transpile(source, options);
|
134 | this.callback(null, result.code, result.map);
|
135 | }; |
\ | No newline at end of file |