@bundle-stats/ui 3.2.0-beta.1 → 3.2.1-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/.babelrc.js +3 -3
  2. package/CHANGELOG.md +20 -4
  3. package/lib/assets/icons/arrow.svg +1 -0
  4. package/lib/assets/icons/cancel.svg +1 -0
  5. package/lib/assets/icons/clock.svg +1 -0
  6. package/lib/assets/icons/close.svg +1 -0
  7. package/lib/assets/icons/commit.svg +1 -0
  8. package/lib/assets/icons/filter.svg +1 -0
  9. package/lib/assets/icons/help.svg +1 -0
  10. package/lib/assets/icons/menu.svg +1 -0
  11. package/lib/{ui/icon/assets → assets/icons}/sort.svg +0 -0
  12. package/lib/assets/icons/warning.svg +1 -0
  13. package/lib/assets/icons.svg +1 -0
  14. package/lib/components/bundle-assets/bundle-assets.js +3 -3
  15. package/lib/components/bundle-assets/bundle-assets.stories.js +19 -7
  16. package/lib/components/bundle-assets/bundle-assets.utils.js +95 -28
  17. package/lib/components/bundle-assets/index.js +115 -4
  18. package/lib/components/bundle-modules/bundle-modules.js +3 -3
  19. package/lib/components/bundle-modules/bundle-modules.utils.js +152 -0
  20. package/lib/components/bundle-modules/index.js +135 -4
  21. package/lib/components/bundle-packages/bundle-packages.js +3 -3
  22. package/lib/components/bundle-packages/{bundle-packages.container.js → bundle-packages.utils.js} +8 -42
  23. package/lib/components/bundle-packages/index.js +111 -3
  24. package/lib/components/metrics-table/metrics-table.js +3 -7
  25. package/lib/components/metrics-table-search/metrics-table-search.js +2 -1
  26. package/lib/components/metrics-table-search/metrics-table-search.module.css +2 -1
  27. package/lib/hooks/rows-filter.js +28 -0
  28. package/lib/hooks/rows-sort.js +54 -0
  29. package/lib/{hocs/with-search.js → hooks/search-params.js} +15 -64
  30. package/lib/ui/icon/icon.js +4 -191
  31. package/lib/ui/sort-dropdown/sort-dropdown.js +12 -13
  32. package/lib/ui/sort-dropdown/sort-dropdown.stories.js +2 -2
  33. package/lib/utils.js +6 -3
  34. package/lib-esm/app/app.js +60 -70
  35. package/lib-esm/app/app.stories.js +50 -71
  36. package/lib-esm/app/header/header.js +5 -3
  37. package/lib-esm/assets/icons/arrow.svg +1 -0
  38. package/lib-esm/assets/icons/cancel.svg +1 -0
  39. package/lib-esm/assets/icons/clock.svg +1 -0
  40. package/lib-esm/assets/icons/close.svg +1 -0
  41. package/lib-esm/assets/icons/commit.svg +1 -0
  42. package/lib-esm/assets/icons/filter.svg +1 -0
  43. package/lib-esm/assets/icons/help.svg +1 -0
  44. package/lib-esm/assets/icons/menu.svg +1 -0
  45. package/lib-esm/{ui/icon/assets → assets/icons}/sort.svg +0 -0
  46. package/lib-esm/assets/icons/warning.svg +1 -0
  47. package/lib-esm/assets/icons.svg +1 -0
  48. package/lib-esm/components/asset-info/asset-info.js +21 -17
  49. package/lib-esm/components/asset-info/asset-info.stories.js +29 -33
  50. package/lib-esm/components/browsertime-table/browsertime-table.js +6 -4
  51. package/lib-esm/components/browsertime-table/browsertime-table.stories.js +9 -13
  52. package/lib-esm/components/bundle-assets/bundle-assets.constants.js +17 -15
  53. package/lib-esm/components/bundle-assets/bundle-assets.js +107 -97
  54. package/lib-esm/components/bundle-assets/bundle-assets.stories.js +58 -63
  55. package/lib-esm/components/bundle-assets/bundle-assets.utils.js +65 -21
  56. package/lib-esm/components/bundle-assets/index.js +89 -2
  57. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +49 -51
  58. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.stories.js +9 -13
  59. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +14 -13
  60. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.stories.js +13 -19
  61. package/lib-esm/components/bundle-modules/bundle-modules.constants.js +17 -15
  62. package/lib-esm/components/bundle-modules/bundle-modules.js +112 -110
  63. package/lib-esm/components/bundle-modules/bundle-modules.stories.js +46 -58
  64. package/lib-esm/components/bundle-modules/bundle-modules.utils.js +98 -0
  65. package/lib-esm/components/bundle-modules/index.js +114 -3
  66. package/lib-esm/components/bundle-packages/bundle-packages.constants.js +17 -15
  67. package/lib-esm/components/bundle-packages/bundle-packages.js +71 -69
  68. package/lib-esm/components/bundle-packages/bundle-packages.stories.js +34 -46
  69. package/lib-esm/components/bundle-packages/bundle-packages.utils.js +44 -0
  70. package/lib-esm/components/bundle-packages/index.js +87 -2
  71. package/lib-esm/components/component-link.js +10 -13
  72. package/lib-esm/components/delta/delta.js +8 -6
  73. package/lib-esm/components/delta/delta.stories.js +26 -38
  74. package/lib-esm/components/duplicate-packages-warning/duplicate-packages-warning.js +11 -9
  75. package/lib-esm/components/duplicate-packages-warning/duplicate-packages-warning.stories.js +20 -26
  76. package/lib-esm/components/job-header/job-header.js +14 -11
  77. package/lib-esm/components/job-header/job-header.stories.js +12 -18
  78. package/lib-esm/components/job-meta/job-meta.js +15 -18
  79. package/lib-esm/components/job-meta/job-meta.stories.js +10 -12
  80. package/lib-esm/components/job-name/job-name.js +9 -12
  81. package/lib-esm/components/job-name/job-name.stories.js +15 -23
  82. package/lib-esm/components/jobs-header/jobs-header.js +12 -12
  83. package/lib-esm/components/jobs-header/jobs-header.stories.js +80 -86
  84. package/lib-esm/components/lighthouse-table/lighthouse-table.js +6 -4
  85. package/lib-esm/components/lighthouse-table/lighthouse-table.stories.js +10 -14
  86. package/lib-esm/components/metric/metric.js +15 -19
  87. package/lib-esm/components/metric/metric.stories.js +36 -58
  88. package/lib-esm/components/metrics-table/metrics-table.js +128 -139
  89. package/lib-esm/components/metrics-table/metrics-table.stories.js +27 -35
  90. package/lib-esm/components/metrics-table-options/metrics-table-options.js +16 -19
  91. package/lib-esm/components/metrics-table-options/metrics-table-options.stories.js +6 -12
  92. package/lib-esm/components/metrics-table-search/metrics-table-search.js +17 -18
  93. package/lib-esm/components/metrics-table-search/metrics-table-search.module.css +2 -1
  94. package/lib-esm/components/metrics-table-search/metrics-table-search.stories.js +4 -9
  95. package/lib-esm/components/metrics-table-title/metrics-table-title.js +9 -7
  96. package/lib-esm/components/module-info/module-info.js +15 -13
  97. package/lib-esm/components/module-info/module-info.stories.js +20 -22
  98. package/lib-esm/components/summary/summary.js +25 -27
  99. package/lib-esm/components/summary/summary.stories.js +31 -46
  100. package/lib-esm/components/summary-item/summary-item.js +27 -28
  101. package/lib-esm/components/summary-item/summary-item.stories.js +40 -50
  102. package/lib-esm/components/total-size-type-title/total-size-type-title.js +4 -2
  103. package/lib-esm/constants.js +25 -30
  104. package/lib-esm/hooks/rows-filter.js +20 -0
  105. package/lib-esm/hooks/rows-sort.js +22 -0
  106. package/lib-esm/hooks/search-params.js +170 -0
  107. package/lib-esm/layout/box/box.js +12 -19
  108. package/lib-esm/layout/box/box.stories.js +34 -46
  109. package/lib-esm/layout/flex-stack/flex-stack.js +9 -12
  110. package/lib-esm/layout/flex-stack/flex-stack.stories.js +39 -49
  111. package/lib-esm/layout/footer/footer.js +11 -11
  112. package/lib-esm/layout/footer/footer.stories.js +7 -11
  113. package/lib-esm/layout/header/header.js +10 -14
  114. package/lib-esm/layout/header/header.stories.js +50 -44
  115. package/lib-esm/layout/stack/stack.js +8 -6
  116. package/lib-esm/layout/stack/stack.stories.js +39 -49
  117. package/lib-esm/layout/sub-header/sub-header.js +14 -12
  118. package/lib-esm/layout/sub-header/sub-header.stories.js +57 -69
  119. package/lib-esm/prototypes/typography.stories.js +49 -58
  120. package/lib-esm/query-state.js +13 -16
  121. package/lib-esm/stories/wrapper.js +6 -12
  122. package/lib-esm/ui/alert/alert.js +6 -4
  123. package/lib-esm/ui/alert/alert.stories.js +14 -24
  124. package/lib-esm/ui/container/container.js +6 -9
  125. package/lib-esm/ui/container/container.stories.js +15 -17
  126. package/lib-esm/ui/dropdown/dropdown.js +13 -11
  127. package/lib-esm/ui/dropdown/dropdown.stories.js +22 -26
  128. package/lib-esm/ui/empty-set/empty-set.js +12 -12
  129. package/lib-esm/ui/empty-set/empty-set.stories.js +11 -19
  130. package/lib-esm/ui/file-name/file-name.js +6 -4
  131. package/lib-esm/ui/file-name/file-name.stories.js +12 -16
  132. package/lib-esm/ui/filters/filters.container.js +57 -76
  133. package/lib-esm/ui/filters/filters.js +71 -77
  134. package/lib-esm/ui/filters/filters.stories.js +82 -100
  135. package/lib-esm/ui/filters/filters.utils.js +26 -24
  136. package/lib-esm/ui/filters/index.js +1 -1
  137. package/lib-esm/ui/horizontal-bar-chart/horizontal-bar-chart.js +68 -78
  138. package/lib-esm/ui/horizontal-bar-chart/horizontal-bar-chart.stories.js +67 -77
  139. package/lib-esm/ui/icon/icon.js +13 -202
  140. package/lib-esm/ui/icon/icon.stories.js +16 -24
  141. package/lib-esm/ui/input/input.js +7 -10
  142. package/lib-esm/ui/input/input.stories.js +8 -12
  143. package/lib-esm/ui/loader/loader.js +6 -9
  144. package/lib-esm/ui/loader/loader.stories.js +5 -9
  145. package/lib-esm/ui/logo/logo.constants.js +6 -6
  146. package/lib-esm/ui/logo/logo.js +15 -15
  147. package/lib-esm/ui/logo/logo.stories.js +14 -22
  148. package/lib-esm/ui/panels/panels.js +13 -23
  149. package/lib-esm/ui/panels/panels.stories.js +14 -16
  150. package/lib-esm/ui/popover/popover.js +11 -9
  151. package/lib-esm/ui/popover/popover.stories.js +7 -11
  152. package/lib-esm/ui/skeleton/skeleton.js +6 -9
  153. package/lib-esm/ui/skeleton/skeleton.stories.js +2 -4
  154. package/lib-esm/ui/sort-dropdown/sort-dropdown.js +38 -38
  155. package/lib-esm/ui/sort-dropdown/sort-dropdown.stories.js +14 -16
  156. package/lib-esm/ui/table/table.js +26 -31
  157. package/lib-esm/ui/table/table.stories.js +84 -102
  158. package/lib-esm/ui/tabs/tabs.js +13 -21
  159. package/lib-esm/ui/tabs/tabs.stories.js +4 -6
  160. package/lib-esm/ui/toolbar/toolbar.js +7 -5
  161. package/lib-esm/ui/toolbar/toolbar.stories.js +14 -16
  162. package/lib-esm/ui/tooltip/tooltip.js +13 -16
  163. package/lib-esm/ui/tooltip/tooltip.stories.js +8 -12
  164. package/lib-esm/utils.js +20 -24
  165. package/package.json +25 -33
  166. package/src/assets/icons/arrow.svg +1 -0
  167. package/src/assets/icons/cancel.svg +1 -0
  168. package/src/assets/icons/clock.svg +1 -0
  169. package/src/assets/icons/close.svg +1 -0
  170. package/src/assets/icons/commit.svg +1 -0
  171. package/src/assets/icons/filter.svg +1 -0
  172. package/src/assets/icons/help.svg +1 -0
  173. package/src/assets/icons/menu.svg +1 -0
  174. package/src/{ui/icon/assets → assets/icons}/sort.svg +0 -0
  175. package/src/assets/icons/warning.svg +1 -0
  176. package/src/assets/icons.svg +1 -0
  177. package/src/components/bundle-assets/bundle-assets.jsx +3 -3
  178. package/src/components/bundle-assets/bundle-assets.utils.js +96 -17
  179. package/src/components/bundle-assets/index.jsx +89 -0
  180. package/src/components/bundle-modules/bundle-modules.jsx +3 -3
  181. package/src/components/bundle-modules/bundle-modules.utils.js +101 -0
  182. package/src/components/bundle-modules/index.jsx +107 -0
  183. package/src/components/bundle-packages/bundle-packages.jsx +3 -3
  184. package/src/components/bundle-packages/bundle-packages.utils.js +47 -0
  185. package/src/components/bundle-packages/index.jsx +84 -0
  186. package/src/components/metrics-table/metrics-table.jsx +2 -7
  187. package/src/components/metrics-table-search/metrics-table-search.jsx +1 -0
  188. package/src/components/metrics-table-search/metrics-table-search.module.css +2 -1
  189. package/src/hooks/rows-filter.js +16 -0
  190. package/src/hooks/rows-sort.js +24 -0
  191. package/src/hooks/search-params.js +153 -0
  192. package/src/ui/icon/icon.jsx +7 -42
  193. package/src/ui/sort-dropdown/sort-dropdown.jsx +11 -11
  194. package/src/utils.jsx +5 -3
  195. package/lib/components/bundle-assets/bundle-assets.container.js +0 -140
  196. package/lib/components/bundle-modules/bundle-modules.container.js +0 -222
  197. package/lib/hocs/with-custom-sort.js +0 -75
  198. package/lib/hocs/with-filtered-items.js +0 -54
  199. package/lib/ui/icon/assets/arrow.svg +0 -4
  200. package/lib/ui/icon/assets/branch.svg +0 -3
  201. package/lib/ui/icon/assets/cancel.svg +0 -4
  202. package/lib/ui/icon/assets/clock.svg +0 -3
  203. package/lib/ui/icon/assets/close.svg +0 -4
  204. package/lib/ui/icon/assets/commit.svg +0 -3
  205. package/lib/ui/icon/assets/filter.svg +0 -4
  206. package/lib/ui/icon/assets/help.svg +0 -4
  207. package/lib/ui/icon/assets/job.svg +0 -3
  208. package/lib/ui/icon/assets/menu.svg +0 -4
  209. package/lib/ui/icon/assets/package.svg +0 -3
  210. package/lib/ui/icon/assets/pull-request.svg +0 -3
  211. package/lib/ui/icon/assets/repository.svg +0 -3
  212. package/lib/ui/icon/assets/warning.svg +0 -4
  213. package/lib-esm/components/bundle-assets/bundle-assets.container.js +0 -119
  214. package/lib-esm/components/bundle-modules/bundle-modules.container.js +0 -175
  215. package/lib-esm/components/bundle-packages/bundle-packages.container.js +0 -91
  216. package/lib-esm/hocs/with-custom-sort.js +0 -43
  217. package/lib-esm/hocs/with-filtered-items.js +0 -35
  218. package/lib-esm/hocs/with-search.js +0 -214
  219. package/lib-esm/ui/icon/assets/arrow.svg +0 -4
  220. package/lib-esm/ui/icon/assets/branch.svg +0 -3
  221. package/lib-esm/ui/icon/assets/cancel.svg +0 -4
  222. package/lib-esm/ui/icon/assets/clock.svg +0 -3
  223. package/lib-esm/ui/icon/assets/close.svg +0 -4
  224. package/lib-esm/ui/icon/assets/commit.svg +0 -3
  225. package/lib-esm/ui/icon/assets/filter.svg +0 -4
  226. package/lib-esm/ui/icon/assets/help.svg +0 -4
  227. package/lib-esm/ui/icon/assets/job.svg +0 -3
  228. package/lib-esm/ui/icon/assets/menu.svg +0 -4
  229. package/lib-esm/ui/icon/assets/package.svg +0 -3
  230. package/lib-esm/ui/icon/assets/pull-request.svg +0 -3
  231. package/lib-esm/ui/icon/assets/repository.svg +0 -3
  232. package/lib-esm/ui/icon/assets/warning.svg +0 -4
  233. package/src/components/bundle-assets/bundle-assets.container.js +0 -146
  234. package/src/components/bundle-assets/index.js +0 -4
  235. package/src/components/bundle-modules/bundle-modules.container.js +0 -158
  236. package/src/components/bundle-modules/index.js +0 -4
  237. package/src/components/bundle-packages/bundle-packages.container.js +0 -93
  238. package/src/components/bundle-packages/index.js +0 -4
  239. package/src/hocs/with-custom-sort.jsx +0 -35
  240. package/src/hocs/with-filtered-items.jsx +0 -34
  241. package/src/hocs/with-search.jsx +0 -184
  242. package/src/ui/icon/assets/arrow.svg +0 -4
  243. package/src/ui/icon/assets/branch.svg +0 -3
  244. package/src/ui/icon/assets/cancel.svg +0 -4
  245. package/src/ui/icon/assets/clock.svg +0 -3
  246. package/src/ui/icon/assets/close.svg +0 -4
  247. package/src/ui/icon/assets/commit.svg +0 -3
  248. package/src/ui/icon/assets/filter.svg +0 -4
  249. package/src/ui/icon/assets/help.svg +0 -4
  250. package/src/ui/icon/assets/job.svg +0 -3
  251. package/src/ui/icon/assets/menu.svg +0 -4
  252. package/src/ui/icon/assets/package.svg +0 -3
  253. package/src/ui/icon/assets/pull-request.svg +0 -3
  254. package/src/ui/icon/assets/repository.svg +0 -3
  255. package/src/ui/icon/assets/warning.svg +0 -4
@@ -6,7 +6,10 @@ import currentStatsFixtures from '../../../__mocks__/webpack-stats.current.json'
6
6
  import { getWrapperDecorator } from '../../stories';
7
7
  import { BundleModules } from '.'; // Limit the side of the modules when not in dev mode (chromatic limit, snapshot too large)
8
8
 
9
- var _ref = process.env.NODE_ENV !== 'development' ? {
9
+ const {
10
+ baselineStats,
11
+ currentStats
12
+ } = process.env.NODE_ENV !== 'development' ? {
10
13
  // eslint-disable-next-line prefer-object-spread
11
14
  baselineStats: Object.assign({}, baselineStatsFixtures, {
12
15
  modules: baselineStatsFixtures.modules.slice(0, 100)
@@ -18,37 +21,28 @@ var _ref = process.env.NODE_ENV !== 'development' ? {
18
21
  } : {
19
22
  baselineStats: baselineStatsFixtures,
20
23
  currentStats: currentStatsFixtures
21
- },
22
- baselineStats = _ref.baselineStats,
23
- currentStats = _ref.currentStats;
24
-
25
- var JOBS = createJobs([{
24
+ };
25
+ const JOBS = createJobs([{
26
26
  webpack: currentStats
27
27
  }, {
28
28
  webpack: baselineStats
29
29
  }]);
30
- var stories = storiesOf('Components/BundleModules', module);
30
+ const stories = storiesOf('Components/BundleModules', module);
31
31
  stories.addDecorator(getWrapperDecorator());
32
- stories.add('default', function () {
33
- return /*#__PURE__*/React.createElement(BundleModules, {
34
- jobs: [JOBS[1]]
35
- });
36
- });
37
- stories.add('multiple jobs', function () {
38
- return /*#__PURE__*/React.createElement(BundleModules, {
39
- jobs: JOBS
40
- });
41
- });
42
- var JOBS_EMPTY_BASELINE = createJobs([{
32
+ stories.add('default', () => /*#__PURE__*/React.createElement(BundleModules, {
33
+ jobs: [JOBS[1]]
34
+ }));
35
+ stories.add('multiple jobs', () => /*#__PURE__*/React.createElement(BundleModules, {
36
+ jobs: JOBS
37
+ }));
38
+ const JOBS_EMPTY_BASELINE = createJobs([{
43
39
  webpack: currentStats
44
40
  }, null]);
45
- stories.add('empty baseline', function () {
46
- return /*#__PURE__*/React.createElement(BundleModules, {
47
- jobs: JOBS_EMPTY_BASELINE
48
- });
49
- }); // Module moved between chunks
41
+ stories.add('empty baseline', () => /*#__PURE__*/React.createElement(BundleModules, {
42
+ jobs: JOBS_EMPTY_BASELINE
43
+ })); // Module moved between chunks
50
44
 
51
- var JOBS_MOVED_MODULE = createJobs([{
45
+ const JOBS_MOVED_MODULE = createJobs([{
52
46
  webpack: {
53
47
  chunks: [{
54
48
  id: 1,
@@ -118,38 +112,32 @@ var JOBS_MOVED_MODULE = createJobs([{
118
112
  }]
119
113
  }
120
114
  }]);
121
- var chunkFiltersStories = storiesOf('Components/BundleModules/chunk filters', module);
115
+ const chunkFiltersStories = storiesOf('Components/BundleModules/chunk filters', module);
122
116
  chunkFiltersStories.addDecorator(getWrapperDecorator());
123
- chunkFiltersStories.add('chunk with module moved in', function () {
124
- return /*#__PURE__*/React.createElement(BundleModules, {
125
- filters: {
126
- changed: false,
127
- 'c.1': true,
128
- 'c.2': false,
129
- 'c.3': false
130
- },
131
- jobs: [].concat(JOBS_MOVED_MODULE)
132
- });
133
- });
134
- chunkFiltersStories.add('chunk with module moved out', function () {
135
- return /*#__PURE__*/React.createElement(BundleModules, {
136
- filters: {
137
- changed: false,
138
- 'c.1': false,
139
- 'c.2': true,
140
- 'c.3': false
141
- },
142
- jobs: [].concat(JOBS_MOVED_MODULE)
143
- });
144
- });
145
- chunkFiltersStories.add('removed chunk', function () {
146
- return /*#__PURE__*/React.createElement(BundleModules, {
147
- filters: {
148
- changed: false,
149
- 'c.1': false,
150
- 'c.2': false,
151
- 'c.3': true
152
- },
153
- jobs: [].concat(JOBS_MOVED_MODULE)
154
- });
155
- });
117
+ chunkFiltersStories.add('chunk with module moved in', () => /*#__PURE__*/React.createElement(BundleModules, {
118
+ filters: {
119
+ changed: false,
120
+ 'c.1': true,
121
+ 'c.2': false,
122
+ 'c.3': false
123
+ },
124
+ jobs: [...JOBS_MOVED_MODULE]
125
+ }));
126
+ chunkFiltersStories.add('chunk with module moved out', () => /*#__PURE__*/React.createElement(BundleModules, {
127
+ filters: {
128
+ changed: false,
129
+ 'c.1': false,
130
+ 'c.2': true,
131
+ 'c.3': false
132
+ },
133
+ jobs: [...JOBS_MOVED_MODULE]
134
+ }));
135
+ chunkFiltersStories.add('removed chunk', () => /*#__PURE__*/React.createElement(BundleModules, {
136
+ filters: {
137
+ changed: false,
138
+ 'c.1': false,
139
+ 'c.2': false,
140
+ 'c.3': true
141
+ },
142
+ jobs: [...JOBS_MOVED_MODULE]
143
+ }));
@@ -0,0 +1,98 @@
1
+ import _merge from "lodash/merge";
2
+ import _intersection from "lodash/intersection";
3
+ import _get from "lodash/get";
4
+ import { useMemo } from 'react';
5
+ import { MODULE_PATH_PACKAGES } from '@bundle-stats/utils/lib-esm/webpack';
6
+ import { MODULE_CHUNK, MODULE_FILTERS, MODULE_FILE_TYPE, MODULE_SOURCE_TYPE, getModuleSourceFileType } from '@bundle-stats/utils';
7
+ import { SORT_BY_NAME, SORT_BY_SIZE, SORT_BY_DELTA } from './bundle-modules.constants';
8
+ export const addRowSourceFlag = row => {
9
+ const {
10
+ key
11
+ } = row;
12
+ const thirdParty = Boolean(key.match(MODULE_PATH_PACKAGES));
13
+ return { ...row,
14
+ thirdParty
15
+ };
16
+ };
17
+ export const getCustomSort = sortBy => item => {
18
+ if (sortBy === SORT_BY_NAME) {
19
+ return item.key;
20
+ }
21
+
22
+ if (sortBy === SORT_BY_SIZE) {
23
+ return _get(item, 'runs[0].value', 0);
24
+ }
25
+
26
+ if (sortBy === SORT_BY_DELTA) {
27
+ return _get(item, 'runs[0].deltaPercentage', 0);
28
+ }
29
+
30
+ return [!item.changed, item.key];
31
+ };
32
+ export const getRowFilter = filters => row => {
33
+ // Skip not changed rows
34
+ if (filters[MODULE_FILTERS.CHANGED] && !row.changed) {
35
+ return false;
36
+ } // Skip not matching source type
37
+
38
+
39
+ if (!(filters[`${MODULE_SOURCE_TYPE}.${MODULE_FILTERS.FIRST_PARTY}`] && row.thirdParty === false || filters[`${MODULE_SOURCE_TYPE}.${MODULE_FILTERS.THIRD_PARTY}`] && row.thirdParty === true)) {
40
+ return false;
41
+ } // Skip not matching source file types
42
+
43
+
44
+ const fileType = getModuleSourceFileType(row.key);
45
+
46
+ if (!filters[`${MODULE_FILE_TYPE}.${fileType}`]) {
47
+ return false;
48
+ }
49
+
50
+ return true;
51
+ };
52
+ export const useModuleFilterByChunk = _ref => {
53
+ let {
54
+ jobs,
55
+ filters,
56
+ chunkIds
57
+ } = _ref;
58
+ const filteredJobs = useMemo(() => {
59
+ // List of chunkIds with filter value set to `true`
60
+ const includedChunkIds = chunkIds.reduce((agg, chunkId) => {
61
+ if (_get(filters, `${MODULE_CHUNK}.${chunkId}`)) {
62
+ return [...agg, chunkId];
63
+ }
64
+
65
+ return agg;
66
+ }, []); // If all the filters are included, return jobs as they are
67
+
68
+ if (includedChunkIds.length === chunkIds.length) {
69
+ return jobs;
70
+ }
71
+
72
+ const jobsWithFilteredData = jobs.map(job => {
73
+ var _job$metrics;
74
+
75
+ const {
76
+ modules
77
+ } = (job == null ? void 0 : (_job$metrics = job.metrics) == null ? void 0 : _job$metrics.webpack) || {};
78
+ const filteredModules = Object.entries(modules).reduce((agg, _ref2) => {
79
+ let [moduleId, moduleEntry] = _ref2;
80
+
81
+ const match = _intersection(moduleEntry.chunkIds, includedChunkIds);
82
+
83
+ if (match.length > 0) {
84
+ agg[moduleId] = moduleEntry; // eslint-disable-line no-param-reassign
85
+ }
86
+
87
+ return agg;
88
+ }, {}); // Copy job data into a new object to prevent mutations of the original data
89
+
90
+ const newJob = _merge({}, job);
91
+
92
+ newJob.metrics.webpack.modules = filteredModules;
93
+ return newJob;
94
+ });
95
+ return jobsWithFilteredData;
96
+ }, [jobs, filters, chunkIds]);
97
+ return filteredJobs;
98
+ };
@@ -1,3 +1,114 @@
1
- import enhance from './bundle-modules.container';
2
- import { BundleModules as Component } from './bundle-modules';
3
- export var BundleModules = enhance(Component);
1
+ import _map from "lodash/map";
2
+ import _uniqBy from "lodash/uniqBy";
3
+
4
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
5
+
6
+ import React, { useMemo } from 'react';
7
+ import PropTypes from 'prop-types';
8
+ import { getModuleChunkFilters, getModuleSourceTypeFilters, getModuleFileTypeFilters } from '@bundle-stats/utils';
9
+ import * as webpack from '@bundle-stats/utils/lib-esm/webpack';
10
+ import { useRowsFilter } from '../../hooks/rows-filter';
11
+ import { useRowsSort } from '../../hooks/rows-sort';
12
+ import { useSearchParams } from '../../hooks/search-params';
13
+ import { BundleModules as BundleModulesComponent } from './bundle-modules';
14
+ import { addRowSourceFlag, getRowFilter, getCustomSort, useModuleFilterByChunk } from './bundle-modules.utils';
15
+ import { SORT_BY } from './bundle-modules.constants';
16
+ export const BundleModules = props => {
17
+ const {
18
+ jobs,
19
+ filters,
20
+ search,
21
+ setState,
22
+ sortBy,
23
+ direction,
24
+ ...restProps
25
+ } = props;
26
+
27
+ const chunks = _uniqBy(jobs.map(job => {
28
+ var _job$meta, _job$meta$webpack;
29
+
30
+ return (job == null ? void 0 : (_job$meta = job.meta) == null ? void 0 : (_job$meta$webpack = _job$meta.webpack) == null ? void 0 : _job$meta$webpack.chunks) || [];
31
+ }).flat(), _ref => {
32
+ let {
33
+ id
34
+ } = _ref;
35
+ return id;
36
+ });
37
+
38
+ const chunkIds = _map(chunks, 'id');
39
+
40
+ const {
41
+ defaultFilters,
42
+ allEntriesFilters
43
+ } = useMemo(() => ({
44
+ defaultFilters: {
45
+ changed: (jobs == null ? void 0 : jobs.length) > 1,
46
+ ...getModuleSourceTypeFilters(true),
47
+ ...getModuleChunkFilters(chunkIds, true),
48
+ ...getModuleFileTypeFilters(true)
49
+ },
50
+ allEntriesFilters: {
51
+ changed: false,
52
+ ...getModuleSourceTypeFilters(true),
53
+ ...getModuleChunkFilters(chunkIds, true),
54
+ ...getModuleFileTypeFilters(true)
55
+ }
56
+ }), [jobs]);
57
+ const searchParams = useSearchParams({
58
+ search,
59
+ filters,
60
+ defaultFilters,
61
+ allEntriesFilters,
62
+ setState
63
+ });
64
+ const filteredJobsByChunkIds = useModuleFilterByChunk({
65
+ jobs,
66
+ filters: searchParams.filters,
67
+ chunkIds
68
+ });
69
+ const {
70
+ rows,
71
+ totalRowCount
72
+ } = useMemo(() => {
73
+ const result = webpack.compareBySection.modules(filteredJobsByChunkIds, [addRowSourceFlag]);
74
+ return {
75
+ rows: result,
76
+ totalRowCount: result.length
77
+ };
78
+ }, [filteredJobsByChunkIds]);
79
+ const filteredRows = useRowsFilter({
80
+ rows,
81
+ searchPattern: searchParams.searchPattern,
82
+ filters: searchParams.filters,
83
+ getRowFilter
84
+ });
85
+ const sortParams = useRowsSort({
86
+ rows: filteredRows,
87
+ sortFields: SORT_BY,
88
+ sortBy,
89
+ sortDirection: direction,
90
+ getCustomSort
91
+ });
92
+ return /*#__PURE__*/React.createElement(BundleModulesComponent, _extends({
93
+ jobs: jobs,
94
+ chunks: chunks
95
+ }, restProps, searchParams, sortParams, {
96
+ totalRowCount: totalRowCount
97
+ }));
98
+ };
99
+ BundleModules.propTypes = {
100
+ jobs: PropTypes.arrayOf(PropTypes.object).isRequired,
101
+ // eslint-disable-line react/forbid-prop-types
102
+ filters: PropTypes.object,
103
+ // eslint-disable-line react/forbid-prop-types
104
+ search: PropTypes.string,
105
+ sortBy: PropTypes.string,
106
+ direction: PropTypes.string,
107
+ setState: PropTypes.func.isRequired
108
+ };
109
+ BundleModules.defaultProps = {
110
+ filters: undefined,
111
+ search: undefined,
112
+ sortBy: undefined,
113
+ direction: undefined
114
+ };
@@ -1,15 +1,17 @@
1
- var _SORT_BY;
2
-
3
- export var SORT_BY_NAME = 'name';
4
- export var SORT_BY_SIZE = 'size';
5
- export var SORT_BY_DELTA = 'delta';
6
- export var SORT_BY = (_SORT_BY = {}, _SORT_BY[SORT_BY_NAME] = {
7
- label: 'Name',
8
- defaultDirection: 'asc'
9
- }, _SORT_BY[SORT_BY_DELTA] = {
10
- label: 'Delta',
11
- defaultDirection: 'desc'
12
- }, _SORT_BY[SORT_BY_SIZE] = {
13
- label: 'Size',
14
- defaultDirection: 'desc'
15
- }, _SORT_BY);
1
+ export const SORT_BY_NAME = 'name';
2
+ export const SORT_BY_SIZE = 'size';
3
+ export const SORT_BY_DELTA = 'delta';
4
+ export const SORT_BY = {
5
+ [SORT_BY_NAME]: {
6
+ label: 'Name',
7
+ defaultDirection: 'asc'
8
+ },
9
+ [SORT_BY_DELTA]: {
10
+ label: 'Delta',
11
+ defaultDirection: 'desc'
12
+ },
13
+ [SORT_BY_SIZE]: {
14
+ label: 'Size',
15
+ defaultDirection: 'desc'
16
+ }
17
+ };
@@ -1,5 +1,3 @@
1
- var _PropTypes$shape;
2
-
3
1
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4
2
 
5
3
  import React, { useCallback } from 'react';
@@ -23,18 +21,16 @@ import { MetricsTableOptions } from '../metrics-table-options';
23
21
  import { MetricsTableTitle } from '../metrics-table-title';
24
22
  import css from './bundle-packages.module.css';
25
23
 
26
- var PackagePopoverContent = function PackagePopoverContent(_ref) {
27
- var name = _ref.name,
28
- fullName = _ref.fullName,
29
- path = _ref.path,
30
- duplicate = _ref.duplicate,
31
- CustomComponentLink = _ref.CustomComponentLink;
32
- var normalizedPackagePath = path || "node_modules/" + fullName.split(PACKAGES_SEPARATOR).join('/node_modules/') + "/";
33
-
34
- var _name$split = name.split(PACKAGE_ID_SEPARATOR),
35
- normalizedName = _name$split[0],
36
- packageId = _name$split[1];
37
-
24
+ const PackagePopoverContent = _ref => {
25
+ let {
26
+ name,
27
+ fullName,
28
+ path,
29
+ duplicate,
30
+ CustomComponentLink
31
+ } = _ref;
32
+ const normalizedPackagePath = path || `node_modules/${fullName.split(PACKAGES_SEPARATOR).join('/node_modules/')}/`;
33
+ const [normalizedName, packageId] = name.split(PACKAGE_ID_SEPARATOR);
38
34
  return /*#__PURE__*/React.createElement(Stack, {
39
35
  space: "xxsmall",
40
36
  className: css.packagePopover
@@ -44,7 +40,7 @@ var PackagePopoverContent = function PackagePopoverContent(_ref) {
44
40
  className: css.packagePopoverTitle
45
41
  }, normalizedName, packageId && /*#__PURE__*/React.createElement("span", {
46
42
  className: css.packagePopoverTitleIndex
47
- }, "" + PACKAGE_ID_SEPARATOR + packageId)), /*#__PURE__*/React.createElement("p", {
43
+ }, `${PACKAGE_ID_SEPARATOR}${packageId}`)), /*#__PURE__*/React.createElement("p", {
48
44
  className: css.packagePopoverPath
49
45
  }, /*#__PURE__*/React.createElement(FileName, {
50
46
  className: css.packagePopoverPathValue,
@@ -54,13 +50,13 @@ var PackagePopoverContent = function PackagePopoverContent(_ref) {
54
50
  }, /*#__PURE__*/React.createElement("li", {
55
51
  className: css.packagePopoverItem
56
52
  }, /*#__PURE__*/React.createElement("a", {
57
- href: "https://www.npmjs.com/package/" + normalizedName,
53
+ href: `https://www.npmjs.com/package/${normalizedName}`,
58
54
  target: "_blank",
59
55
  rel: "noreferrer"
60
56
  }, "npmjs.com")), /*#__PURE__*/React.createElement("li", {
61
57
  className: css.packagePopoverItem
62
58
  }, /*#__PURE__*/React.createElement("a", {
63
- href: "https://bundlephobia.com/result?p=" + normalizedName,
59
+ href: `https://bundlephobia.com/result?p=${normalizedName}`,
64
60
  target: "_blank",
65
61
  rel: "noreferrer"
66
62
  }, "bundlephobia.com"))), /*#__PURE__*/React.createElement(Stack, {
@@ -80,19 +76,20 @@ PackagePopoverContent.defaultProps = {
80
76
  path: ''
81
77
  };
82
78
 
83
- var PackageRowHeader = function PackageRowHeader(_ref2) {
84
- var item = _ref2.item,
85
- CustomComponentLink = _ref2.CustomComponentLink;
86
- var packageNames = item.label.split(PACKAGES_SEPARATOR);
87
-
88
- var _ref3 = item.runs[0] || {},
89
- path = _ref3.path;
90
-
79
+ const PackageRowHeader = _ref2 => {
80
+ let {
81
+ item,
82
+ CustomComponentLink
83
+ } = _ref2;
84
+ const packageNames = item.label.split(PACKAGES_SEPARATOR);
85
+ const {
86
+ path
87
+ } = item.runs[0] || {};
91
88
  return /*#__PURE__*/React.createElement("span", {
92
89
  className: css.packageNames
93
- }, packageNames.map(function (packageName, index) {
90
+ }, packageNames.map((packageName, index) => {
94
91
  // Render duplicate flag only for the last entry
95
- var duplicateFlag = index === packageNames.length - 1 && item.duplicate && /*#__PURE__*/React.createElement("span", {
92
+ const duplicateFlag = index === packageNames.length - 1 && item.duplicate && /*#__PURE__*/React.createElement("span", {
96
93
  className: css.duplicate,
97
94
  title: "Duplicate package"
98
95
  }, "D");
@@ -120,47 +117,47 @@ PackageRowHeader.propTypes = {
120
117
  }).isRequired,
121
118
  CustomComponentLink: PropTypes.elementType.isRequired
122
119
  };
123
- export var BundlePackages = function BundlePackages(props) {
124
- var _ref5;
125
-
126
- var className = props.className,
127
- jobs = props.jobs,
128
- items = props.items,
129
- updateFilters = props.updateFilters,
130
- resetFilters = props.resetFilters,
131
- resetAllFilters = props.resetAllFilters,
132
- totalRowCount = props.totalRowCount,
133
- filters = props.filters,
134
- sortItems = props.sortItems,
135
- sort = props.sort,
136
- updateSort = props.updateSort,
137
- search = props.search,
138
- updateSearch = props.updateSearch,
139
- hasActiveFilters = props.hasActiveFilters,
140
- CustomComponentLink = props.customComponentLink;
141
- var emptyMessage = /*#__PURE__*/React.createElement(EmptySet, {
120
+ export const BundlePackages = props => {
121
+ const {
122
+ className,
123
+ jobs,
124
+ items,
125
+ updateFilters,
126
+ resetFilters,
127
+ resetAllFilters,
128
+ totalRowCount,
129
+ filters,
130
+ sortFields,
131
+ sort,
132
+ updateSort,
133
+ search,
134
+ updateSearch,
135
+ hasActiveFilters,
136
+ customComponentLink: CustomComponentLink
137
+ } = props;
138
+ const emptyMessage = /*#__PURE__*/React.createElement(EmptySet, {
142
139
  resources: "packages",
143
140
  filtered: totalRowCount !== 0,
144
141
  handleResetFilters: resetFilters,
145
142
  handleViewAll: resetAllFilters
146
143
  });
147
- var renderRowHeader = useCallback(function (item) {
148
- return /*#__PURE__*/React.createElement(PackageRowHeader, {
149
- item: item,
150
- CustomComponentLink: CustomComponentLink
151
- });
152
- }, [CustomComponentLink]);
144
+ const renderRowHeader = useCallback(item => /*#__PURE__*/React.createElement(PackageRowHeader, {
145
+ item: item,
146
+ CustomComponentLink: CustomComponentLink
147
+ }), [CustomComponentLink]);
153
148
  return /*#__PURE__*/React.createElement("section", {
154
149
  className: cx(css.root, className)
155
150
  }, /*#__PURE__*/React.createElement(Toolbar, {
156
151
  className: css.toolbar,
157
- renderActions: function renderActions(_ref4) {
158
- var actionClassName = _ref4.actionClassName;
152
+ renderActions: _ref3 => {
153
+ let {
154
+ actionClassName
155
+ } = _ref3;
159
156
  return /*#__PURE__*/React.createElement(FlexStack, {
160
157
  space: "xxsmall",
161
158
  className: cx(css.dropdown, actionClassName)
162
159
  }, /*#__PURE__*/React.createElement(SortDropdown, _extends({
163
- items: sortItems
160
+ fields: sortFields
164
161
  }, sort, {
165
162
  onChange: updateSort
166
163
  })), /*#__PURE__*/React.createElement(MetricsTableOptions, {
@@ -174,15 +171,18 @@ export var BundlePackages = function BundlePackages(props) {
174
171
  search: search,
175
172
  updateSearch: updateSearch
176
173
  }), /*#__PURE__*/React.createElement(Filters, {
177
- filters: (_ref5 = {}, _ref5[PACKAGE_FILTERS.CHANGED] = {
178
- label: 'Changed',
179
- defaultValue: filters[PACKAGE_FILTERS.CHANGED],
180
- disabled: jobs.length <= 1
181
- }, _ref5[PACKAGE_FILTERS.DUPLICATE] = {
182
- label: 'Duplicate',
183
- defaultValue: filters[PACKAGE_FILTERS.DUPLICATE]
184
- }, _ref5),
185
- label: "Filters (" + items.length + "/" + totalRowCount + ")",
174
+ filters: {
175
+ [PACKAGE_FILTERS.CHANGED]: {
176
+ label: 'Changed',
177
+ defaultValue: filters[PACKAGE_FILTERS.CHANGED],
178
+ disabled: jobs.length <= 1
179
+ },
180
+ [PACKAGE_FILTERS.DUPLICATE]: {
181
+ label: 'Duplicate',
182
+ defaultValue: filters[PACKAGE_FILTERS.DUPLICATE]
183
+ }
184
+ },
185
+ label: `Filters (${items.length}/${totalRowCount})`,
186
186
  onChange: updateFilters,
187
187
  hasActiveFilters: hasActiveFilters
188
188
  }))), /*#__PURE__*/React.createElement("main", null, /*#__PURE__*/React.createElement(MetricsTable, {
@@ -193,7 +193,7 @@ export var BundlePackages = function BundlePackages(props) {
193
193
  showHeaderSum: true,
194
194
  title: /*#__PURE__*/React.createElement(MetricsTableTitle, {
195
195
  title: I18N.PACKAGES,
196
- info: "(" + items.length + "/" + totalRowCount + ")",
196
+ info: `(${items.length}/${totalRowCount})`,
197
197
  popoverInfo: I18N.PACKAGES_INFO,
198
198
  popoverHref: config.documentation.packages
199
199
  })
@@ -226,10 +226,12 @@ BundlePackages.propTypes = {
226
226
  changed: PropTypes.bool
227
227
  }).isRequired,
228
228
  hasActiveFilters: PropTypes.bool,
229
- sortItems: PropTypes.shape((_PropTypes$shape = {}, _PropTypes$shape[PropTypes.string] = PropTypes.shape({
230
- label: PropTypes.string,
231
- defaultDirection: PropTypes.bool
232
- }), _PropTypes$shape)).isRequired,
229
+ sortFields: PropTypes.shape({
230
+ [PropTypes.string]: PropTypes.shape({
231
+ label: PropTypes.string,
232
+ defaultDirection: PropTypes.bool
233
+ })
234
+ }).isRequired,
233
235
  sort: PropTypes.shape({
234
236
  sortBy: PropTypes.string,
235
237
  direction: PropTypes.string