UNPKG

2.34 kBJavaScriptView Raw
1'use strict';
2
3var assign = require('object-assign');
4var babel = require('babel-core');
5var loaderUtils = require('loader-utils');
6var cache = require('./lib/fs-cache.js');
7var exists = require('./lib/helpers/exists')();
8var read = require('./lib/helpers/read')();
9var resolveRc = require('./lib/resolve-rc.js');
10var pkg = require('./package.json');
11var path = require('path');
12
13var transpile = function(source, options) {
14 var result = babel.transform(source, options);
15 var code = result.code;
16 var map = result.map;
17
18 if (map && (!map.sourcesContent || !map.sourcesContent.length)) {
19 map.sourcesContent = [source];
20 }
21
22 return {
23 code: code,
24 map: map,
25 };
26};
27
28module.exports = function(source, inputSourceMap) {
29 var result = {};
30
31 // Handle options
32 var globalOptions = this.options.babel || {};
33 var loaderOptions = loaderUtils.parseQuery(this.query);
34 var userOptions = assign({}, globalOptions, loaderOptions);
35 var defaultOptions = {
36 inputSourceMap: inputSourceMap,
37 sourceRoot: process.cwd(),
38 filename: loaderUtils.getRemainingRequest(this),
39 cacheIdentifier: JSON.stringify({
40 'babel-loader': pkg.version,
41 'babel-core': babel.version,
42 babelrc: exists(userOptions.babelrc) ?
43 read(userOptions.babelrc) :
44 resolveRc(process.cwd()),
45 env: process.env.BABEL_ENV || process.env.NODE_ENV,
46 }),
47 };
48
49 var options = assign({}, defaultOptions, userOptions);
50
51 if (userOptions.sourceMap === undefined) {
52 options.sourceMap = this.sourceMap;
53 }
54
55 if (options.sourceFileName === undefined) {
56 options.sourceFileName = path.relative(
57 options.sourceRoot,
58 options.filename
59 );
60 }
61
62 var cacheDirectory = options.cacheDirectory;
63 var cacheIdentifier = options.cacheIdentifier;
64
65 delete options.cacheDirectory;
66 delete options.cacheIdentifier;
67
68 this.cacheable();
69
70 if (cacheDirectory) {
71 var callback = this.async();
72 return cache({
73 directory: cacheDirectory,
74 identifier: cacheIdentifier,
75 source: source,
76 options: options,
77 transform: transpile,
78 }, function(err, result) {
79 if (err) { return callback(err); }
80 return callback(null, result.code, result.map);
81 });
82 } else {
83 result = transpile(source, options);
84 this.callback(null, result.code, result.map);
85 }
86};