UNPKG

4.82 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.waitChunks = undefined;
7
8var _regenerator = require('babel-runtime/regenerator');
9
10var _regenerator2 = _interopRequireDefault(_regenerator);
11
12var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
13
14var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
15
16var _promise = require('babel-runtime/core-js/promise');
17
18var _promise2 = _interopRequireDefault(_promise);
19
20var waitChunks = exports.waitChunks = function () {
21 var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(chunksPath, timeout) {
22 var chunksStatsJson;
23 return _regenerator2.default.wrap(function _callee$(_context) {
24 while (1) {
25 switch (_context.prev = _context.next) {
26 case 0:
27 _context.next = 2;
28 return waitWatchFile({
29 path: chunksPath,
30 onChange: function onChange(err, stats) {
31 if (err) {
32 throw new Error('Unable to load chunks');
33 }
34 chunksStats = parse(stats);
35 },
36
37 timeout: timeout
38 });
39
40 case 2:
41 chunksStatsJson = _context.sent;
42
43
44 chunksStats = parse(chunksStatsJson);
45
46 return _context.abrupt('return', chunksStats);
47
48 case 5:
49 case 'end':
50 return _context.stop();
51 }
52 }
53 }, _callee, this);
54 }));
55
56 return function waitChunks(_x2, _x3) {
57 return _ref2.apply(this, arguments);
58 };
59}();
60
61exports.default = getChunks;
62exports.waitWatchFile = waitWatchFile;
63
64var _fs = require('fs');
65
66var _fs2 = _interopRequireDefault(_fs);
67
68function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
69
70(function () {
71 var enterModule = require('react-hot-loader').enterModule;
72
73 enterModule && enterModule(module);
74})();
75
76var chunksStats = [];
77
78function getChunks() {
79 return chunksStats;
80}
81
82function waitWatchFile() {
83 var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
84 path = _ref.path,
85 onChange = _ref.onChange,
86 _ref$timeout = _ref.timeout,
87 timeout = _ref$timeout === undefined ? 60000 : _ref$timeout;
88
89 function watch(loaded, timeleft) {
90 return new _promise2.default(function (resolve, reject) {
91 if (timeleft < 0) {
92 loaded = true;
93 return reject(new Error('waitFile: timeout (' + timeout + 'ms): ' + path));
94 }
95
96 // Simple first read for production
97 if (!loaded) {
98 _fs2.default.access(path, _fs2.default.constants.R_OK, function (err) {
99 if (!err && !loaded) {
100 _fs2.default.readFile(path, 'utf8', function (err2, data) {
101 if (err2) return reject(err2);
102 loaded = true;
103 resolve(data);
104 });
105 }
106 });
107 }
108
109 if (!__DEVELOPMENT__) {
110 return;
111 }
112
113 try {
114 var watcher = _fs2.default.watch(path, 'utf8', function (eventType) {
115 if (eventType !== 'change') return;
116 _fs2.default.readFile(path, 'utf8', function (err2, data) {
117 if (err2) return onChange(err2);
118 loaded = true;
119 onChange(null, data);
120 });
121 });
122
123 setTimeout(function () {
124 watcher.close();
125 if (!loaded) {
126 loaded = true;
127 reject(new Error('waitFile: timeout (' + timeout + 'ms): ' + path));
128 }
129 }, timeleft);
130 } catch (err) {
131 if (err.code === 'ENOENT') {
132 return setTimeout(function () {
133 return resolve(watch(loaded, timeleft - 100));
134 }, 100);
135 }
136 loaded = true;
137 reject(err);
138 }
139 });
140 }
141
142 return watch(false, timeout);
143}
144
145function parse(json) {
146 try {
147 return JSON.parse(json);
148 } catch (e) {
149 return chunksStats;
150 }
151}
152
153;
154
155(function () {
156 var reactHotLoader = require('react-hot-loader').default;
157
158 var leaveModule = require('react-hot-loader').leaveModule;
159
160 if (!reactHotLoader) {
161 return;
162 }
163
164 reactHotLoader.register(chunksStats, 'chunksStats', '../../src/helpers/getChunks.js');
165 reactHotLoader.register(getChunks, 'getChunks', '../../src/helpers/getChunks.js');
166 reactHotLoader.register(waitWatchFile, 'waitWatchFile', '../../src/helpers/getChunks.js');
167 reactHotLoader.register(parse, 'parse', '../../src/helpers/getChunks.js');
168 reactHotLoader.register(waitChunks, 'waitChunks', '../../src/helpers/getChunks.js');
169 leaveModule(module);
170})();
171
172;
173//# sourceMappingURL=getChunks.js.map
\No newline at end of file