1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _babylon = require('babylon');
|
8 |
|
9 | var _babelTraverse = require('babel-traverse');
|
10 |
|
11 | var _babelTraverse2 = _interopRequireDefault(_babelTraverse);
|
12 |
|
13 | var _babelGenerator = require('babel-generator');
|
14 |
|
15 | var _babelGenerator2 = _interopRequireDefault(_babelGenerator);
|
16 |
|
17 | var _pundleApi = require('pundle-api');
|
18 |
|
19 | var _helpers = require('./helpers');
|
20 |
|
21 | var Helpers = _interopRequireWildcard(_helpers);
|
22 |
|
23 | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
24 |
|
25 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
26 |
|
27 | function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
|
28 |
|
29 | var RESOLVE_NAMES = new Set(['require', 'require.ensure', 'require.resolve', 'module.hot.accept', 'module.hot.decline']);
|
30 | var RESOLVE_NAMES_SENSITIVE = new Set(['require', 'require.resolve']);
|
31 |
|
32 | exports.default = (0, _pundleApi.createLoader)(function () {
|
33 | var _ref = _asyncToGenerator(function* (context, config, file) {
|
34 | if (!(0, _pundleApi.shouldProcess)(context.config.rootDirectory, file.filePath, config)) {
|
35 | return null;
|
36 | }
|
37 |
|
38 | var chunks = [];
|
39 | var imports = [];
|
40 |
|
41 | var ast = void 0;
|
42 | try {
|
43 | ast = (0, _babylon.parse)(file.getContents(), {
|
44 | sourceType: 'module',
|
45 | sourceFilename: file.filePath,
|
46 | plugins: ['jsx', 'flow', '*']
|
47 | });
|
48 | } catch (error) {
|
49 | if (error.loc) {
|
50 | throw new _pundleApi.FileIssue(file.getFilePath(), file.getContents(), error.loc.line, error.loc.column + 1, error.message, 'error');
|
51 | } else {
|
52 | throw new _pundleApi.FileMessageIssue(file.getFilePath(), error.message);
|
53 | }
|
54 | }
|
55 |
|
56 | var processResolve = function processResolve(node) {
|
57 | var request = context.getImportRequest(node.value, file.filePath, node.loc);
|
58 | imports.push(request);
|
59 | node.value = request.id.toString();
|
60 | };
|
61 | var processReplaceable = function processReplaceable(path) {
|
62 | var name = Helpers.getName(path.node);
|
63 | if ({}.hasOwnProperty.call(context.config.replaceVariables, name)) {
|
64 | path.replaceWith(Helpers.getParsedReplacement(context.config.replaceVariables[name]));
|
65 | }
|
66 | };
|
67 | (0, _babelTraverse2.default)(ast, {
|
68 | ImportDeclaration: function ImportDeclaration(path) {
|
69 | processResolve(path.node.source);
|
70 | },
|
71 | CallExpression: function CallExpression(path) {
|
72 | if (path.node.callee.type === 'Import') {
|
73 | Helpers.processImport(context, file, chunks, path);
|
74 | return;
|
75 | }
|
76 | var name = Helpers.getName(path.node.callee);
|
77 | if (!RESOLVE_NAMES.has(name)) {
|
78 | return;
|
79 | }
|
80 | var parameter = path.node.arguments && path.node.arguments[0];
|
81 | if (!parameter || parameter.type !== (name === 'require.ensure' ? 'ArrayExpression' : 'StringLiteral')) {
|
82 | return;
|
83 | }
|
84 | if (RESOLVE_NAMES_SENSITIVE.has(name) && path.scope.hasBinding('require')) {
|
85 | return;
|
86 | }
|
87 | if (name === 'require.ensure') {
|
88 | Helpers.processEnsure(context, file, chunks, path);
|
89 | } else {
|
90 | processResolve(parameter);
|
91 | }
|
92 | },
|
93 | Identifier: processReplaceable,
|
94 | MemberExpression: processReplaceable
|
95 | });
|
96 |
|
97 | var compiled = (0, _babelGenerator2.default)(ast, {
|
98 | quotes: 'single',
|
99 | compact: true,
|
100 | comments: false,
|
101 | filename: file.filePath,
|
102 | sourceMaps: true,
|
103 | sourceFileName: file.filePath
|
104 | });
|
105 |
|
106 | return {
|
107 | chunks: chunks,
|
108 | imports: imports,
|
109 | contents: compiled.code,
|
110 | sourceMap: compiled.map
|
111 | };
|
112 | });
|
113 |
|
114 | return function (_x, _x2, _x3) {
|
115 | return _ref.apply(this, arguments);
|
116 | };
|
117 | }(), {
|
118 | extensions: ['js', 'jsx']
|
119 | }); |
\ | No newline at end of file |