1 | 'use strict';
|
2 |
|
3 | var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
|
4 |
|
5 | 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"); }); }; }
|
6 |
|
7 | const fs = require('./utils/fs');
|
8 | const Resolver = require('./Resolver');
|
9 | const Parser = require('./Parser');
|
10 | const WorkerFarm = require('./WorkerFarm');
|
11 | const Path = require('path');
|
12 | const Bundle = require('./Bundle');
|
13 |
|
14 | var _require = require('chokidar');
|
15 |
|
16 | const FSWatcher = _require.FSWatcher;
|
17 |
|
18 | const FSCache = require('./FSCache');
|
19 | const HMRServer = require('./HMRServer');
|
20 | const Server = require('./Server');
|
21 |
|
22 | var _require2 = require('events');
|
23 |
|
24 | const EventEmitter = _require2.EventEmitter;
|
25 |
|
26 | const logger = require('./Logger');
|
27 | const PackagerRegistry = require('./packagers');
|
28 | const localRequire = require('./utils/localRequire');
|
29 | const config = require('./utils/config');
|
30 | const emoji = require('./utils/emoji');
|
31 | const loadEnv = require('./utils/env');
|
32 | const PromiseQueue = require('./utils/PromiseQueue');
|
33 | const installPackage = require('./utils/installPackage');
|
34 | const bundleReport = require('./utils/bundleReport');
|
35 | const prettifyTime = require('./utils/prettifyTime');
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 | class Bundler extends EventEmitter {
|
42 | constructor(main, options = {}) {
|
43 | super();
|
44 | this.mainFile = Path.resolve(main || '');
|
45 | this.options = this.normalizeOptions(options);
|
46 |
|
47 | this.resolver = new Resolver(this.options);
|
48 | this.parser = new Parser(this.options);
|
49 | this.packagers = new PackagerRegistry();
|
50 | this.cache = this.options.cache ? new FSCache(this.options) : null;
|
51 | this.delegate = options.delegate || {};
|
52 | this.bundleLoaders = {};
|
53 |
|
54 | const loadersPath = `./builtins/loaders/${options.target === 'node' ? 'node' : 'browser'}/`;
|
55 |
|
56 | this.addBundleLoader('wasm', require.resolve(loadersPath + 'wasm-loader'));
|
57 | this.addBundleLoader('css', require.resolve(loadersPath + 'css-loader'));
|
58 | this.addBundleLoader('js', require.resolve(loadersPath + 'js-loader'));
|
59 |
|
60 | this.pending = false;
|
61 | this.loadedAssets = new Map();
|
62 | this.watchedAssets = new Map();
|
63 | this.farm = null;
|
64 | this.watcher = null;
|
65 | this.hmr = null;
|
66 | this.bundleHashes = null;
|
67 | this.errored = false;
|
68 | this.buildQueue = new PromiseQueue(this.processAsset.bind(this));
|
69 | this.rebuildTimeout = null;
|
70 |
|
71 | logger.setOptions(this.options);
|
72 | }
|
73 |
|
74 | normalizeOptions(options) {
|
75 | const isProduction = options.production || process.env.NODE_ENV === 'production';
|
76 | const publicURL = options.publicUrl || options.publicURL || '/';
|
77 | const watch = typeof options.watch === 'boolean' ? options.watch : !isProduction;
|
78 | const target = options.target || 'browser';
|
79 | return {
|
80 | production: isProduction,
|
81 | outDir: Path.resolve(options.outDir || 'dist'),
|
82 | outFile: options.outFile || '',
|
83 | publicURL: publicURL,
|
84 | watch: watch,
|
85 | cache: typeof options.cache === 'boolean' ? options.cache : true,
|
86 | cacheDir: Path.resolve(options.cacheDir || '.cache'),
|
87 | killWorkers: typeof options.killWorkers === 'boolean' ? options.killWorkers : true,
|
88 | minify: typeof options.minify === 'boolean' ? options.minify : isProduction,
|
89 | target: target,
|
90 | hmr: target === 'node' ? false : typeof options.hmr === 'boolean' ? options.hmr : watch,
|
91 | https: options.https || false,
|
92 | logLevel: isNaN(options.logLevel) ? 3 : options.logLevel,
|
93 | mainFile: this.mainFile,
|
94 | hmrPort: options.hmrPort || 0,
|
95 | rootDir: Path.dirname(this.mainFile),
|
96 | sourceMaps: typeof options.sourceMaps === 'boolean' ? options.sourceMaps : true,
|
97 | hmrHostname: options.hmrHostname || (options.target === 'electron' ? 'localhost' : ''),
|
98 | detailedReport: options.detailedReport || false,
|
99 | autoinstall: (options.autoinstall || false) && !isProduction,
|
100 | contentHash: typeof options.contentHash === 'boolean' ? options.contentHash : isProduction
|
101 | };
|
102 | }
|
103 |
|
104 | addAssetType(extension, path) {
|
105 | if (typeof path !== 'string') {
|
106 | throw new Error('Asset type should be a module path.');
|
107 | }
|
108 |
|
109 | if (this.farm) {
|
110 | throw new Error('Asset types must be added before bundling.');
|
111 | }
|
112 |
|
113 | this.parser.registerExtension(extension, path);
|
114 | }
|
115 |
|
116 | addPackager(type, packager) {
|
117 | if (this.farm) {
|
118 | throw new Error('Packagers must be added before bundling.');
|
119 | }
|
120 |
|
121 | this.packagers.add(type, packager);
|
122 | }
|
123 |
|
124 | addBundleLoader(type, path) {
|
125 | if (typeof path !== 'string') {
|
126 | throw new Error('Bundle loader should be a module path.');
|
127 | }
|
128 |
|
129 | if (this.farm) {
|
130 | throw new Error('Bundle loaders must be added before bundling.');
|
131 | }
|
132 |
|
133 | this.bundleLoaders[type] = path;
|
134 | }
|
135 |
|
136 | loadPlugins() {
|
137 | var _this = this;
|
138 |
|
139 | return _asyncToGenerator(function* () {
|
140 | let pkg = yield config.load(_this.mainFile, ['package.json']);
|
141 | if (!pkg) {
|
142 | return;
|
143 | }
|
144 |
|
145 | try {
|
146 | let deps = Object.assign({}, pkg.dependencies, pkg.devDependencies);
|
147 | for (let dep in deps) {
|
148 | if (dep.startsWith('parcel-plugin-')) {
|
149 | let plugin = yield localRequire(dep, _this.mainFile);
|
150 | yield plugin(_this);
|
151 | }
|
152 | }
|
153 | } catch (err) {
|
154 | logger.warn(err);
|
155 | }
|
156 | })();
|
157 | }
|
158 |
|
159 | bundle() {
|
160 | var _this2 = this;
|
161 |
|
162 | return _asyncToGenerator(function* () {
|
163 |
|
164 | if (_this2.pending) {
|
165 | return new Promise(function (resolve, reject) {
|
166 | _this2.once('buildEnd', function () {
|
167 | _this2.bundle().then(resolve, reject);
|
168 | });
|
169 | });
|
170 | }
|
171 |
|
172 | let isInitialBundle = !_this2.mainAsset;
|
173 | let startTime = Date.now();
|
174 | _this2.pending = true;
|
175 | _this2.errored = false;
|
176 |
|
177 | logger.clear();
|
178 | logger.status(emoji.progress, 'Building...');
|
179 |
|
180 | try {
|
181 |
|
182 | yield _this2.start();
|
183 |
|
184 |
|
185 | if (isInitialBundle) {
|
186 | yield fs.mkdirp(_this2.options.outDir);
|
187 |
|
188 | _this2.mainAsset = yield _this2.resolveAsset(_this2.mainFile);
|
189 | _this2.buildQueue.add(_this2.mainAsset);
|
190 | }
|
191 |
|
192 |
|
193 | let loadedAssets = yield _this2.buildQueue.run();
|
194 |
|
195 |
|
196 |
|
197 | let changedAssets = [..._this2.findOrphanAssets(), ...loadedAssets];
|
198 |
|
199 |
|
200 | var _iteratorNormalCompletion = true;
|
201 | var _didIteratorError = false;
|
202 | var _iteratorError = undefined;
|
203 |
|
204 | try {
|
205 | for (var _iterator = _this2.loadedAssets.values()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
206 | let asset = _step.value;
|
207 |
|
208 | asset.invalidateBundle();
|
209 | }
|
210 |
|
211 |
|
212 | } catch (err) {
|
213 | _didIteratorError = true;
|
214 | _iteratorError = err;
|
215 | } finally {
|
216 | try {
|
217 | if (!_iteratorNormalCompletion && _iterator.return) {
|
218 | _iterator.return();
|
219 | }
|
220 | } finally {
|
221 | if (_didIteratorError) {
|
222 | throw _iteratorError;
|
223 | }
|
224 | }
|
225 | }
|
226 |
|
227 | _this2.mainBundle = _this2.createBundleTree(_this2.mainAsset);
|
228 |
|
229 |
|
230 | _this2.bundleNameMap = _this2.mainBundle.getBundleNameMap(_this2.options.contentHash);
|
231 |
|
232 | var _iteratorNormalCompletion2 = true;
|
233 | var _didIteratorError2 = false;
|
234 | var _iteratorError2 = undefined;
|
235 |
|
236 | try {
|
237 | for (var _iterator2 = changedAssets[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
238 | let asset = _step2.value;
|
239 |
|
240 | asset.replaceBundleNames(_this2.bundleNameMap);
|
241 | }
|
242 |
|
243 |
|
244 | } catch (err) {
|
245 | _didIteratorError2 = true;
|
246 | _iteratorError2 = err;
|
247 | } finally {
|
248 | try {
|
249 | if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
250 | _iterator2.return();
|
251 | }
|
252 | } finally {
|
253 | if (_didIteratorError2) {
|
254 | throw _iteratorError2;
|
255 | }
|
256 | }
|
257 | }
|
258 |
|
259 | if (_this2.hmr && !isInitialBundle) {
|
260 | _this2.hmr.emitUpdate(changedAssets);
|
261 | }
|
262 |
|
263 |
|
264 | _this2.bundleHashes = yield _this2.mainBundle.package(_this2, _this2.bundleHashes);
|
265 |
|
266 |
|
267 | _this2.unloadOrphanedAssets();
|
268 |
|
269 | let buildTime = Date.now() - startTime;
|
270 | let time = prettifyTime(buildTime);
|
271 | logger.status(emoji.success, `Built in ${time}.`, 'green');
|
272 | if (!_this2.watcher) {
|
273 | bundleReport(_this2.mainBundle, _this2.options.detailedReport);
|
274 | }
|
275 |
|
276 | _this2.emit('bundled', _this2.mainBundle);
|
277 | return _this2.mainBundle;
|
278 | } catch (err) {
|
279 | _this2.errored = true;
|
280 | logger.error(err);
|
281 | if (_this2.hmr) {
|
282 | _this2.hmr.emitError(err);
|
283 | }
|
284 |
|
285 | if (process.env.NODE_ENV === 'production') {
|
286 | process.exitCode = 1;
|
287 | } else if (process.env.NODE_ENV === 'test' && !_this2.hmr) {
|
288 | throw err;
|
289 | }
|
290 | } finally {
|
291 | _this2.pending = false;
|
292 | _this2.emit('buildEnd');
|
293 |
|
294 |
|
295 | if (!_this2.watcher && _this2.options.killWorkers) {
|
296 | _this2.stop();
|
297 | }
|
298 | }
|
299 | })();
|
300 | }
|
301 |
|
302 | start() {
|
303 | var _this3 = this;
|
304 |
|
305 | return _asyncToGenerator(function* () {
|
306 | if (_this3.farm) {
|
307 | return;
|
308 | }
|
309 |
|
310 | yield _this3.loadPlugins();
|
311 | yield loadEnv(_this3.mainFile);
|
312 |
|
313 | _this3.options.extensions = Object.assign({}, _this3.parser.extensions);
|
314 | _this3.options.bundleLoaders = _this3.bundleLoaders;
|
315 | _this3.options.env = process.env;
|
316 |
|
317 | if (_this3.options.watch) {
|
318 |
|
319 |
|
320 | _this3.watcher = new FSWatcher({
|
321 | useFsEvents: process.env.NODE_ENV !== 'test'
|
322 | });
|
323 |
|
324 | _this3.watcher.on('change', _this3.onChange.bind(_this3));
|
325 | }
|
326 |
|
327 | if (_this3.options.hmr) {
|
328 | _this3.hmr = new HMRServer();
|
329 | _this3.options.hmrPort = yield _this3.hmr.start(_this3.options);
|
330 | }
|
331 |
|
332 | _this3.farm = WorkerFarm.getShared(_this3.options);
|
333 | })();
|
334 | }
|
335 |
|
336 | stop() {
|
337 | if (this.farm) {
|
338 | this.farm.end();
|
339 | }
|
340 |
|
341 | if (this.watcher) {
|
342 | this.watcher.close();
|
343 | }
|
344 |
|
345 | if (this.hmr) {
|
346 | this.hmr.stop();
|
347 | }
|
348 | }
|
349 |
|
350 | getAsset(name, parent) {
|
351 | var _this4 = this;
|
352 |
|
353 | return _asyncToGenerator(function* () {
|
354 | let asset = yield _this4.resolveAsset(name, parent);
|
355 | _this4.buildQueue.add(asset);
|
356 | yield _this4.buildQueue.run();
|
357 | return asset;
|
358 | })();
|
359 | }
|
360 |
|
361 | resolveAsset(name, parent) {
|
362 | var _this5 = this;
|
363 |
|
364 | return _asyncToGenerator(function* () {
|
365 | var _ref = yield _this5.resolver.resolve(name, parent);
|
366 |
|
367 | let path = _ref.path,
|
368 | pkg = _ref.pkg;
|
369 |
|
370 | if (_this5.loadedAssets.has(path)) {
|
371 | return _this5.loadedAssets.get(path);
|
372 | }
|
373 |
|
374 | let asset = _this5.parser.getAsset(path, pkg, _this5.options);
|
375 | _this5.loadedAssets.set(path, asset);
|
376 |
|
377 | _this5.watch(path, asset);
|
378 | return asset;
|
379 | })();
|
380 | }
|
381 |
|
382 | watch(path, asset) {
|
383 | if (!this.watcher) {
|
384 | return;
|
385 | }
|
386 |
|
387 | if (!this.watchedAssets.has(path)) {
|
388 | this.watcher.add(path);
|
389 | this.watchedAssets.set(path, new Set());
|
390 | }
|
391 |
|
392 | this.watchedAssets.get(path).add(asset);
|
393 | }
|
394 |
|
395 | unwatch(path, asset) {
|
396 | if (!this.watchedAssets.has(path)) {
|
397 | return;
|
398 | }
|
399 |
|
400 | let watched = this.watchedAssets.get(path);
|
401 | watched.delete(asset);
|
402 |
|
403 | if (watched.size === 0) {
|
404 | this.watchedAssets.delete(path);
|
405 | this.watcher.unwatch(path);
|
406 | }
|
407 | }
|
408 |
|
409 | resolveDep(asset, dep, install = true) {
|
410 | var _this6 = this;
|
411 |
|
412 | return _asyncToGenerator(function* () {
|
413 | try {
|
414 | return yield _this6.resolveAsset(dep.name, asset.name);
|
415 | } catch (err) {
|
416 | let thrown = err;
|
417 |
|
418 | if (thrown.message.indexOf(`Cannot find module '${dep.name}'`) === 0) {
|
419 |
|
420 | let isLocalFile = /^[/~.]/.test(dep.name);
|
421 | let fromNodeModules = asset.name.includes(`${Path.sep}node_modules${Path.sep}`);
|
422 |
|
423 |
|
424 | if (!isLocalFile && !fromNodeModules && _this6.options.autoinstall && install) {
|
425 | return yield _this6.installDep(asset, dep);
|
426 | }
|
427 |
|
428 |
|
429 | if (dep.optional) {
|
430 | return;
|
431 | }
|
432 |
|
433 | thrown.message = `Cannot resolve dependency '${dep.name}'`;
|
434 | if (isLocalFile) {
|
435 | const absPath = Path.resolve(Path.dirname(asset.name), dep.name);
|
436 | thrown.message += ` at '${absPath}'`;
|
437 | }
|
438 |
|
439 | yield _this6.throwDepError(asset, dep, thrown);
|
440 | }
|
441 |
|
442 | throw thrown;
|
443 | }
|
444 | })();
|
445 | }
|
446 |
|
447 | installDep(asset, dep) {
|
448 | var _this7 = this;
|
449 |
|
450 | return _asyncToGenerator(function* () {
|
451 | var _resolver$getModulePa = _this7.resolver.getModuleParts(dep.name),
|
452 | _resolver$getModulePa2 = _slicedToArray(_resolver$getModulePa, 1);
|
453 |
|
454 | let moduleName = _resolver$getModulePa2[0];
|
455 |
|
456 | try {
|
457 | yield installPackage([moduleName], asset.name, { saveDev: false });
|
458 | } catch (err) {
|
459 | yield _this7.throwDepError(asset, dep, err);
|
460 | }
|
461 |
|
462 | return yield _this7.resolveDep(asset, dep, false);
|
463 | })();
|
464 | }
|
465 |
|
466 | throwDepError(asset, dep, err) {
|
467 | return _asyncToGenerator(function* () {
|
468 |
|
469 | if (dep.loc) {
|
470 | yield asset.loadIfNeeded();
|
471 | err.loc = dep.loc;
|
472 | err = asset.generateErrorMessage(err);
|
473 | }
|
474 |
|
475 | err.fileName = asset.name;
|
476 | throw err;
|
477 | })();
|
478 | }
|
479 |
|
480 | processAsset(asset, isRebuild) {
|
481 | var _this8 = this;
|
482 |
|
483 | return _asyncToGenerator(function* () {
|
484 | if (isRebuild) {
|
485 | asset.invalidate();
|
486 | if (_this8.cache) {
|
487 | _this8.cache.invalidate(asset.name);
|
488 | }
|
489 | }
|
490 |
|
491 | yield _this8.loadAsset(asset);
|
492 | })();
|
493 | }
|
494 |
|
495 | loadAsset(asset) {
|
496 | var _this9 = this;
|
497 |
|
498 | return _asyncToGenerator(function* () {
|
499 | if (asset.processed) {
|
500 | return;
|
501 | }
|
502 |
|
503 | if (!_this9.errored) {
|
504 | logger.status(emoji.progress, `Building ${asset.basename}...`);
|
505 | }
|
506 |
|
507 |
|
508 | asset.processed = true;
|
509 |
|
510 |
|
511 | let startTime = Date.now();
|
512 | let processed = _this9.cache && (yield _this9.cache.read(asset.name));
|
513 | if (!processed || asset.shouldInvalidate(processed.cacheData)) {
|
514 | processed = yield _this9.farm.run(asset.name, asset.package, _this9.options);
|
515 | if (_this9.cache) {
|
516 | _this9.cache.write(asset.name, processed);
|
517 | }
|
518 | }
|
519 |
|
520 | asset.buildTime = Date.now() - startTime;
|
521 | asset.generated = processed.generated;
|
522 | asset.hash = processed.hash;
|
523 |
|
524 |
|
525 | let dependencies = processed.dependencies;
|
526 | if (_this9.delegate.getImplicitDependencies) {
|
527 | let implicitDeps = yield _this9.delegate.getImplicitDependencies(asset);
|
528 | if (implicitDeps) {
|
529 | dependencies = dependencies.concat(implicitDeps);
|
530 | }
|
531 | }
|
532 |
|
533 |
|
534 | let assetDeps = yield Promise.all(dependencies.map((() => {
|
535 | var _ref2 = _asyncToGenerator(function* (dep) {
|
536 | if (dep.includedInParent) {
|
537 |
|
538 |
|
539 |
|
540 | _this9.watch(dep.name, asset);
|
541 | } else {
|
542 | let assetDep = yield _this9.resolveDep(asset, dep);
|
543 | if (assetDep) {
|
544 | yield _this9.loadAsset(assetDep);
|
545 | }
|
546 |
|
547 | return assetDep;
|
548 | }
|
549 | });
|
550 |
|
551 | return function (_x) {
|
552 | return _ref2.apply(this, arguments);
|
553 | };
|
554 | })()));
|
555 |
|
556 |
|
557 | dependencies.forEach(function (dep, i) {
|
558 | asset.dependencies.set(dep.name, dep);
|
559 | let assetDep = assetDeps[i];
|
560 | if (assetDep) {
|
561 | asset.depAssets.set(dep, assetDep);
|
562 | }
|
563 | });
|
564 | })();
|
565 | }
|
566 |
|
567 | createBundleTree(asset, dep, bundle, parentBundles = new Set()) {
|
568 | if (dep) {
|
569 | asset.parentDeps.add(dep);
|
570 | }
|
571 |
|
572 | if (asset.parentBundle) {
|
573 |
|
574 | if (asset.parentBundle !== bundle) {
|
575 | let commonBundle = bundle.findCommonAncestor(asset.parentBundle);
|
576 | if (asset.parentBundle !== commonBundle && asset.parentBundle.type === commonBundle.type) {
|
577 | this.moveAssetToBundle(asset, commonBundle);
|
578 | return;
|
579 | }
|
580 | } else {
|
581 | return;
|
582 | }
|
583 |
|
584 |
|
585 | if (parentBundles.has(asset.parentBundle)) {
|
586 | return;
|
587 | }
|
588 | }
|
589 |
|
590 | if (!bundle) {
|
591 |
|
592 | bundle = Bundle.createWithAsset(asset);
|
593 | } else if (dep && dep.dynamic) {
|
594 |
|
595 | bundle = bundle.createChildBundle(asset);
|
596 | } else if (asset.type && !this.packagers.has(asset.type)) {
|
597 |
|
598 | bundle.createSiblingBundle(asset);
|
599 | } else {
|
600 |
|
601 | bundle.getSiblingBundle(asset.type).addAsset(asset);
|
602 | }
|
603 |
|
604 |
|
605 | if (asset.generated[bundle.type] != null) {
|
606 | bundle.addAsset(asset);
|
607 | }
|
608 |
|
609 |
|
610 | if (asset.type && asset.generated[asset.type]) {
|
611 | for (let t in asset.generated) {
|
612 | if (asset.generated[t]) {
|
613 | bundle.getSiblingBundle(t).addAsset(asset);
|
614 | }
|
615 | }
|
616 | }
|
617 |
|
618 | asset.parentBundle = bundle;
|
619 | parentBundles.add(bundle);
|
620 |
|
621 | var _iteratorNormalCompletion3 = true;
|
622 | var _didIteratorError3 = false;
|
623 | var _iteratorError3 = undefined;
|
624 |
|
625 | try {
|
626 | for (var _iterator3 = asset.depAssets[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
627 | let _ref3 = _step3.value;
|
628 |
|
629 | var _ref4 = _slicedToArray(_ref3, 2);
|
630 |
|
631 | let dep = _ref4[0];
|
632 | let assetDep = _ref4[1];
|
633 |
|
634 | this.createBundleTree(assetDep, dep, bundle, parentBundles);
|
635 | }
|
636 | } catch (err) {
|
637 | _didIteratorError3 = true;
|
638 | _iteratorError3 = err;
|
639 | } finally {
|
640 | try {
|
641 | if (!_iteratorNormalCompletion3 && _iterator3.return) {
|
642 | _iterator3.return();
|
643 | }
|
644 | } finally {
|
645 | if (_didIteratorError3) {
|
646 | throw _iteratorError3;
|
647 | }
|
648 | }
|
649 | }
|
650 |
|
651 | parentBundles.delete(bundle);
|
652 | return bundle;
|
653 | }
|
654 |
|
655 | moveAssetToBundle(asset, commonBundle) {
|
656 |
|
657 | if (asset.parentBundle.entryAsset === asset) {
|
658 | return;
|
659 | }
|
660 |
|
661 | var _iteratorNormalCompletion4 = true;
|
662 | var _didIteratorError4 = false;
|
663 | var _iteratorError4 = undefined;
|
664 |
|
665 | try {
|
666 | for (var _iterator4 = Array.from(asset.bundles)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
667 | let bundle = _step4.value;
|
668 |
|
669 | bundle.removeAsset(asset);
|
670 | commonBundle.getSiblingBundle(bundle.type).addAsset(asset);
|
671 | }
|
672 | } catch (err) {
|
673 | _didIteratorError4 = true;
|
674 | _iteratorError4 = err;
|
675 | } finally {
|
676 | try {
|
677 | if (!_iteratorNormalCompletion4 && _iterator4.return) {
|
678 | _iterator4.return();
|
679 | }
|
680 | } finally {
|
681 | if (_didIteratorError4) {
|
682 | throw _iteratorError4;
|
683 | }
|
684 | }
|
685 | }
|
686 |
|
687 | let oldBundle = asset.parentBundle;
|
688 | asset.parentBundle = commonBundle;
|
689 |
|
690 |
|
691 | var _iteratorNormalCompletion5 = true;
|
692 | var _didIteratorError5 = false;
|
693 | var _iteratorError5 = undefined;
|
694 |
|
695 | try {
|
696 | for (var _iterator5 = asset.depAssets.values()[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
|
697 | let child = _step5.value;
|
698 |
|
699 | if (child.parentBundle === oldBundle) {
|
700 | this.moveAssetToBundle(child, commonBundle);
|
701 | }
|
702 | }
|
703 | } catch (err) {
|
704 | _didIteratorError5 = true;
|
705 | _iteratorError5 = err;
|
706 | } finally {
|
707 | try {
|
708 | if (!_iteratorNormalCompletion5 && _iterator5.return) {
|
709 | _iterator5.return();
|
710 | }
|
711 | } finally {
|
712 | if (_didIteratorError5) {
|
713 | throw _iteratorError5;
|
714 | }
|
715 | }
|
716 | }
|
717 | }
|
718 |
|
719 | *findOrphanAssets() {
|
720 | var _iteratorNormalCompletion6 = true;
|
721 | var _didIteratorError6 = false;
|
722 | var _iteratorError6 = undefined;
|
723 |
|
724 | try {
|
725 | for (var _iterator6 = this.loadedAssets.values()[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
|
726 | let asset = _step6.value;
|
727 |
|
728 | if (!asset.parentBundle) {
|
729 | yield asset;
|
730 | }
|
731 | }
|
732 | } catch (err) {
|
733 | _didIteratorError6 = true;
|
734 | _iteratorError6 = err;
|
735 | } finally {
|
736 | try {
|
737 | if (!_iteratorNormalCompletion6 && _iterator6.return) {
|
738 | _iterator6.return();
|
739 | }
|
740 | } finally {
|
741 | if (_didIteratorError6) {
|
742 | throw _iteratorError6;
|
743 | }
|
744 | }
|
745 | }
|
746 | }
|
747 |
|
748 | unloadOrphanedAssets() {
|
749 | var _iteratorNormalCompletion7 = true;
|
750 | var _didIteratorError7 = false;
|
751 | var _iteratorError7 = undefined;
|
752 |
|
753 | try {
|
754 | for (var _iterator7 = this.findOrphanAssets()[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {
|
755 | let asset = _step7.value;
|
756 |
|
757 | this.unloadAsset(asset);
|
758 | }
|
759 | } catch (err) {
|
760 | _didIteratorError7 = true;
|
761 | _iteratorError7 = err;
|
762 | } finally {
|
763 | try {
|
764 | if (!_iteratorNormalCompletion7 && _iterator7.return) {
|
765 | _iterator7.return();
|
766 | }
|
767 | } finally {
|
768 | if (_didIteratorError7) {
|
769 | throw _iteratorError7;
|
770 | }
|
771 | }
|
772 | }
|
773 | }
|
774 |
|
775 | unloadAsset(asset) {
|
776 | this.loadedAssets.delete(asset.name);
|
777 | if (this.watcher) {
|
778 | this.unwatch(asset.name, asset);
|
779 |
|
780 |
|
781 | var _iteratorNormalCompletion8 = true;
|
782 | var _didIteratorError8 = false;
|
783 | var _iteratorError8 = undefined;
|
784 |
|
785 | try {
|
786 | for (var _iterator8 = asset.dependencies.values()[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
|
787 | let dep = _step8.value;
|
788 |
|
789 | if (dep.includedInParent) {
|
790 | this.unwatch(dep.name, asset);
|
791 | }
|
792 | }
|
793 | } catch (err) {
|
794 | _didIteratorError8 = true;
|
795 | _iteratorError8 = err;
|
796 | } finally {
|
797 | try {
|
798 | if (!_iteratorNormalCompletion8 && _iterator8.return) {
|
799 | _iterator8.return();
|
800 | }
|
801 | } finally {
|
802 | if (_didIteratorError8) {
|
803 | throw _iteratorError8;
|
804 | }
|
805 | }
|
806 | }
|
807 | }
|
808 | }
|
809 |
|
810 | onChange(path) {
|
811 | var _this10 = this;
|
812 |
|
813 | return _asyncToGenerator(function* () {
|
814 | let assets = _this10.watchedAssets.get(path);
|
815 | if (!assets || !assets.size) {
|
816 | return;
|
817 | }
|
818 |
|
819 | logger.clear();
|
820 | logger.status(emoji.progress, `Building ${Path.basename(path)}...`);
|
821 |
|
822 |
|
823 | var _iteratorNormalCompletion9 = true;
|
824 | var _didIteratorError9 = false;
|
825 | var _iteratorError9 = undefined;
|
826 |
|
827 | try {
|
828 | for (var _iterator9 = assets[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {
|
829 | let asset = _step9.value;
|
830 |
|
831 | _this10.buildQueue.add(asset, true);
|
832 | }
|
833 | } catch (err) {
|
834 | _didIteratorError9 = true;
|
835 | _iteratorError9 = err;
|
836 | } finally {
|
837 | try {
|
838 | if (!_iteratorNormalCompletion9 && _iterator9.return) {
|
839 | _iterator9.return();
|
840 | }
|
841 | } finally {
|
842 | if (_didIteratorError9) {
|
843 | throw _iteratorError9;
|
844 | }
|
845 | }
|
846 | }
|
847 |
|
848 | clearTimeout(_this10.rebuildTimeout);
|
849 |
|
850 | _this10.rebuildTimeout = setTimeout(_asyncToGenerator(function* () {
|
851 | yield _this10.bundle();
|
852 | }), 100);
|
853 | })();
|
854 | }
|
855 |
|
856 | middleware() {
|
857 | this.bundle();
|
858 | return Server.middleware(this);
|
859 | }
|
860 |
|
861 | serve(port = 1234, https = false) {
|
862 | var _this11 = this;
|
863 |
|
864 | return _asyncToGenerator(function* () {
|
865 | _this11.server = yield Server.serve(_this11, port, https);
|
866 | _this11.bundle();
|
867 | return _this11.server;
|
868 | })();
|
869 | }
|
870 | }
|
871 |
|
872 | module.exports = Bundler;
|
873 | Bundler.Asset = require('./Asset');
|
874 | Bundler.Packager = require('./packagers/Packager'); |
\ | No newline at end of file |