UNPKG

2.87 kBJavaScriptView Raw
1'use strict';
2
3var _loaderUtils = require('loader-utils');
4
5var _loaderUtils2 = _interopRequireDefault(_loaderUtils);
6
7var _path = require('path');
8
9var _path2 = _interopRequireDefault(_path);
10
11var _sourceMap = require('source-map');
12
13var _sourceMap2 = _interopRequireDefault(_sourceMap);
14
15var _TraverseImport = require('./TraverseImport');
16
17var _TraverseImport2 = _interopRequireDefault(_TraverseImport);
18
19function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
21/**
22 * remove universal-env module dependencies
23 * convert to constant
24 * then use babel-plugin-minify-dead-code-elimination remove the dead code
25 *
26 * @example
27 *
28 * ../evn-loader/lib/index?isWeex=true
29 *
30 * `import { isWeex, isWeb } from 'universal-env'`;
31 *
32 * after:
33 *
34 * ```
35 * const isWeex = true;
36 * const isWeb = false
37 * ```
38 */
39
40function mergeSourceMap(map, inputMap) {
41 if (inputMap) {
42 var inputMapConsumer = new _sourceMap2.default.SourceMapConsumer(inputMap);
43 var outputMapConsumer = new _sourceMap2.default.SourceMapConsumer(map);
44
45 var mergedGenerator = new _sourceMap2.default.SourceMapGenerator({
46 file: inputMapConsumer.file,
47 sourceRoot: inputMapConsumer.sourceRoot
48 });
49
50 // This assumes the output map always has a single source, since Babel always compiles a
51 // single source file to a single output file.
52 var source = outputMapConsumer.sources[0];
53
54 inputMapConsumer.eachMapping(function (mapping) {
55 var generatedPosition = outputMapConsumer.generatedPositionFor({
56 line: mapping.generatedLine,
57 column: mapping.generatedColumn,
58 source: source
59 });
60 if (generatedPosition.column != null) {
61 mergedGenerator.addMapping({
62 source: mapping.source,
63
64 original: mapping.source == null ? null : {
65 line: mapping.originalLine,
66 column: mapping.originalColumn
67 },
68
69 generated: generatedPosition
70 });
71 }
72 });
73
74 var mergedMap = mergedGenerator.toJSON();
75 inputMap.mappings = mergedMap.mappings;
76 return inputMap;
77 } else {
78 return map;
79 }
80}
81
82module.exports = function (inputSource, inputSourceMap) {
83 this.cacheable();
84 var callback = this.async();
85
86 var loaderOptions = _loaderUtils2.default.parseQuery(this.query);
87 var resourcePath = this.resourcePath;
88 var sourceMapTarget = _path2.default.basename(resourcePath);
89
90 var options = Object.assign({ name: 'universal-env' }, loaderOptions);
91
92 if (!Array.isArray(options.name)) {
93 options.name = [options.name];
94 }
95
96 var _traverseImport = (0, _TraverseImport2.default)(options, inputSource, {
97 sourceMaps: true,
98 sourceMapTarget: sourceMapTarget,
99 sourceFileName: resourcePath
100 }),
101 code = _traverseImport.code,
102 map = _traverseImport.map;
103
104 callback(null, code, mergeSourceMap(map, inputSourceMap));
105};
\No newline at end of file