sortChunks.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _from = require('babel-runtime/core-js/array/from');
  6. var _from2 = _interopRequireDefault(_from);
  7. exports.default = sortChunks;
  8. var _toposort = require('toposort');
  9. var _toposort2 = _interopRequireDefault(_toposort);
  10. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  11. // see https://github.com/jantimon/html-webpack-plugin/blob/8131d8bb1dc9b185b3c1709264a3baf32ef799bc/lib/chunksorter.js
  12. function sortChunks(chunks, chunkGroups) {
  13. // We build a map (chunk-id -> chunk) for faster access during graph building.
  14. var nodeMap = {};
  15. chunks.forEach(function (chunk) {
  16. nodeMap[chunk.id] = chunk;
  17. });
  18. // Add an edge for each parent (parent -> child)
  19. var edges = chunkGroups.reduce(function (result, chunkGroup) {
  20. return result.concat((0, _from2.default)(chunkGroup.parentsIterable, function (parentGroup) {
  21. return [parentGroup, chunkGroup];
  22. }));
  23. }, []);
  24. var sortedGroups = _toposort2.default.array(chunkGroups, edges);
  25. // flatten chunkGroup into chunks
  26. var sortedChunks = sortedGroups.reduce(function (result, chunkGroup) {
  27. return result.concat(chunkGroup.chunks);
  28. }, []).map(function (chunk) {
  29. return (// use the chunk from the list passed in, since it may be a filtered list
  30. nodeMap[chunk.id]
  31. );
  32. }).filter(function (chunk, index, self) {
  33. // make sure exists (ie excluded chunks not in nodeMap)
  34. var exists = !!chunk;
  35. // make sure we have a unique list
  36. var unique = self.indexOf(chunk) === index;
  37. return exists && unique;
  38. });
  39. return sortedChunks;
  40. }