@jsenv/file-size-impact 10.0.1 → 11.0.0

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.
@@ -1,35 +1,41 @@
1
- export const renderImpactTable = (
1
+ import { getSizeMapsForManyFiles } from "./size_map.js"
2
+
3
+ export const renderImpactTable = ({
2
4
  fileByFileImpact,
3
- {
4
- groupFileImpactMap,
5
- transformationKeys,
6
- fileRelativeUrlMaxLength,
7
- maxRowsPerTable,
8
- formatFileRelativeUrl,
9
- formatFileCell,
10
- formatFileSizeImpactCell,
11
- formatGroupSizeImpactCell,
12
- },
13
- ) => {
5
+ transformationKeys,
6
+ fileRelativeUrlMaxLength,
7
+ maxFilesPerGroup,
8
+ formatFileRelativeUrl,
9
+ formatFileCell,
10
+ formatFileSizeImpactCell,
11
+ formatEmojiCell,
12
+ groupSizeMapBeforeMerge,
13
+ groupSizeMapAfterMerge,
14
+ }) => {
14
15
  const table = `<table>
15
16
  <thead>
16
17
  ${renderSizeImpactTableHeader(transformationKeys)}
17
18
  </thead>
18
19
  <tbody>
19
- ${renderSizeImpactTableBody(fileByFileImpact, {
20
+ ${renderSizeImpactTableBody({
21
+ fileByFileImpact,
20
22
  transformationKeys,
21
- maxRowsPerTable,
23
+ maxFilesPerGroup,
22
24
  fileRelativeUrlMaxLength,
23
25
  formatFileRelativeUrl,
24
26
  formatFileCell,
25
27
  formatFileSizeImpactCell,
28
+ formatEmojiCell,
26
29
  })}
27
30
  </tbody>
28
31
  <tfoot>
29
- ${renderSizeImpactTableFooter(fileByFileImpact, {
30
- groupFileImpactMap,
32
+ ${renderSizeImpactTableFooter({
33
+ fileByFileImpact,
31
34
  transformationKeys,
32
- formatGroupSizeImpactCell,
35
+ formatFileSizeImpactCell,
36
+ formatEmojiCell,
37
+ groupSizeMapBeforeMerge,
38
+ groupSizeMapAfterMerge,
33
39
  })}
34
40
  </tfoot>
35
41
  </table>`
@@ -40,7 +46,7 @@ export const renderImpactTable = (
40
46
  const renderSizeImpactTableHeader = (transformationKeys) => {
41
47
  const lines = []
42
48
  const headerLine = [
43
- `<th nowrap>File</th>`,
49
+ `<th nowrap>Files</th>`,
44
50
  ...transformationKeys.map(
45
51
  (sizeName) => `<th nowrap>${sizeName === "raw" ? `new size` : `new ${sizeName} size`}</th>`,
46
52
  ),
@@ -51,35 +57,37 @@ const renderSizeImpactTableHeader = (transformationKeys) => {
51
57
  return renderTableLines(lines)
52
58
  }
53
59
 
54
- const renderSizeImpactTableBody = (
60
+ const renderSizeImpactTableBody = ({
55
61
  fileByFileImpact,
56
- {
57
- transformationKeys,
58
- maxRowsPerTable,
59
- fileRelativeUrlMaxLength,
60
- formatFileRelativeUrl,
61
- formatFileCell,
62
- formatFileSizeImpactCell,
63
- },
64
- ) => {
62
+ transformationKeys,
63
+ maxFilesPerGroup,
64
+ fileRelativeUrlMaxLength,
65
+ formatFileRelativeUrl,
66
+ formatFileCell,
67
+ formatFileSizeImpactCell,
68
+ formatEmojiCell,
69
+ }) => {
65
70
  const lines = []
66
71
  const sizeNames = transformationKeys
72
+ const firstSizeName = sizeNames[0]
67
73
 
68
- const renderDiffCell = (fileImpact, sizeName) => {
69
- const fileSizeImpactCellFormatted = formatFileSizeImpactCell(fileImpact, sizeName)
70
- return fileSizeImpactCellFormatted
71
- }
72
-
73
- const files = Object.keys(fileByFileImpact)
74
- const fileCount = files.length
75
- let filesShown
76
- if (fileCount > maxRowsPerTable) {
77
- filesShown = files.slice(0, maxRowsPerTable)
78
- } else {
79
- filesShown = files
80
- }
81
- filesShown.forEach((fileRelativeUrl) => {
74
+ let remainingFilesToDisplay = maxFilesPerGroup
75
+ const truncateds = []
76
+ const unmodifieds = []
77
+ Object.keys(fileByFileImpact).forEach((fileRelativeUrl) => {
82
78
  const fileImpact = fileByFileImpact[fileRelativeUrl]
79
+
80
+ if (fileImpact.event === "none") {
81
+ unmodifieds.push(fileRelativeUrl)
82
+ return
83
+ }
84
+
85
+ if (remainingFilesToDisplay === 0) {
86
+ truncateds.push(fileRelativeUrl)
87
+ return
88
+ }
89
+
90
+ remainingFilesToDisplay--
83
91
  const fileAbstractRelativeUrl = fileAbstractRelativeUrlFromFileImpact(fileImpact)
84
92
  const fileRelativeUrlFormatted = (fileImpact.formatFileRelativeUrl || formatFileRelativeUrl)(
85
93
  fileAbstractRelativeUrl,
@@ -88,151 +96,146 @@ const renderSizeImpactTableBody = (
88
96
  fileRelativeUrlFormatted,
89
97
  fileRelativeUrlMaxLength,
90
98
  )
99
+ const { sizeMapBeforeMerge, sizeMapAfterMerge } = fileByFileImpact[fileRelativeUrl]
91
100
  const fileCellFormatted = formatFileCell({
92
101
  fileRelativeUrl,
93
102
  fileRelativeUrlDisplayed,
94
- ...fileImpact,
103
+ sizeBeforeMerge: sizeMapBeforeMerge[firstSizeName],
104
+ sizeAfterMerge: sizeMapAfterMerge[firstSizeName],
95
105
  })
106
+
96
107
  const line = [
97
108
  `<td nowrap>${fileCellFormatted}</td>`,
98
- ...sizeNames.map((sizeName) => `<td nowrap>${renderDiffCell(fileImpact, sizeName)}</td>`),
99
- `<td>${renderEmojiCellContent(fileImpact)}</td>`,
109
+ ...sizeNames.map((sizeName) => {
110
+ return `<td nowrap>${formatFileSizeImpactCell({
111
+ sizeBeforeMerge: sizeMapBeforeMerge[sizeName],
112
+ sizeAfterMerge: sizeMapAfterMerge[sizeName],
113
+ sizeName,
114
+ })}</td>`
115
+ }),
116
+ ...(formatEmojiCell
117
+ ? [
118
+ `<td>${formatEmojiCell({
119
+ sizeBeforeMerge: sizeMapBeforeMerge[firstSizeName],
120
+ sizeAfterMerge: sizeMapAfterMerge[firstSizeName],
121
+ })}</td>`,
122
+ ]
123
+ : []),
100
124
  ]
101
125
  lines.push(line)
102
126
  })
103
- if (filesShown !== files) {
104
- const columnCount =
105
- // file name
106
- 1 +
107
- // all sizes
108
- sizeNames.length +
109
- // emoji column
110
- 1
111
- lines.push([
112
- `<td colspan="${columnCount}" align="center">... ${
113
- fileCount - maxRowsPerTable
114
- } more ...</td>`,
115
- ])
116
- }
117
127
 
118
- return renderTableLines(lines)
119
- }
120
-
121
- const renderEmojiCellContent = (fileImpact) => {
122
- const { event } = fileImpact
123
-
124
- if (event === "added") {
125
- return ":baby:"
126
- }
127
-
128
- if (event === "deleted") {
129
- return ""
130
- }
131
-
132
- const { afterMerge, beforeMerge } = fileImpact
133
- const afterMergeSizeMap = afterMerge.sizeMap
134
- const beforeMergeSizeMap = beforeMerge.sizeMap
135
- const sizeNames = Object.keys(afterMergeSizeMap)
136
- const sizeName = sizeNames[sizeNames.length - 1]
137
- const afterMergeSize = afterMergeSizeMap[sizeName]
138
- const beforeMergeSize = beforeMergeSizeMap[sizeName]
139
- const delta = afterMergeSize - beforeMergeSize
140
- if (delta === 0) {
141
- return ":ghost:"
142
- }
143
-
144
- if (delta > 0) {
145
- return ":arrow_upper_right:"
146
- }
147
-
148
- return ":arrow_lower_right:"
149
- }
150
-
151
- const renderGroupEmojiCellContent = ({ groupSizeAfterMerge, groupSizeBeforeMerge }) => {
152
- const delta = groupSizeAfterMerge - groupSizeBeforeMerge
153
- if (delta === 0) {
154
- return ":ghost:"
128
+ const truncatedCount = truncateds.length
129
+ if (truncatedCount > 0) {
130
+ const { sizeMapBeforeMerge, sizeMapAfterMerge } = getSizeMapsForManyFiles({
131
+ sizeNames,
132
+ fileByFileImpact,
133
+ files: truncateds,
134
+ })
135
+ const lineForTruncatedFiles = [
136
+ `<td nowrap><i>Truncated (${truncatedCount})</i></td>`,
137
+ ...sizeNames.map((sizeName) => {
138
+ return `<td nowrap>${formatFileSizeImpactCell({
139
+ sizeBeforeMerge: sizeMapBeforeMerge[sizeName],
140
+ sizeAfterMerge: sizeMapAfterMerge[sizeName],
141
+ sizeName,
142
+ })}</td>`
143
+ }),
144
+ ...(formatEmojiCell
145
+ ? [
146
+ `<td>${formatEmojiCell({
147
+ sizeBeforeMerge: sizeMapBeforeMerge[firstSizeName],
148
+ sizeAfterMerge: sizeMapAfterMerge[firstSizeName],
149
+ })}</td>`,
150
+ ]
151
+ : []),
152
+ ]
153
+ lines.push(lineForTruncatedFiles)
155
154
  }
156
155
 
157
- if (delta > 0) {
158
- return ":arrow_upper_right:"
156
+ const unmodifiedCount = unmodifieds.length
157
+ if (unmodifiedCount > 0) {
158
+ const { sizeMapBeforeMerge, sizeMapAfterMerge } = getSizeMapsForManyFiles({
159
+ sizeNames,
160
+ fileByFileImpact,
161
+ files: unmodifieds,
162
+ })
163
+ const lineForUnmodifiedFiles = [
164
+ `<td nowrap><i>Unmodified (${unmodifiedCount})</i></td>`,
165
+ ...sizeNames.map((sizeName) => {
166
+ return `<td nowrap>${formatFileSizeImpactCell({
167
+ sizeBeforeMerge: sizeMapBeforeMerge[sizeName],
168
+ sizeAfterMerge: sizeMapAfterMerge[sizeName],
169
+ sizeName,
170
+ })}</td>`
171
+ }),
172
+ ...(formatEmojiCell
173
+ ? [
174
+ `<td>${formatEmojiCell({
175
+ sizeBeforeMerge: sizeMapBeforeMerge[firstSizeName],
176
+ sizeAfterMerge: sizeMapAfterMerge[firstSizeName],
177
+ })}</td>`,
178
+ ]
179
+ : []),
180
+ ]
181
+ lines.push(lineForUnmodifiedFiles)
159
182
  }
160
183
 
161
- return ":arrow_lower_right:"
184
+ return renderTableLines(lines)
162
185
  }
163
186
 
164
- const fileAbstractRelativeUrlFromFileImpact = ({ beforeMerge, afterMerge }) => {
165
- if (afterMerge) {
166
- return afterMerge.manifestKey || afterMerge.relativeUrl
167
- }
168
- return beforeMerge.manifestKey || beforeMerge.relativeUrl
187
+ const fileAbstractRelativeUrlFromFileImpact = ({
188
+ manifestKeyBeforeMerge,
189
+ relativeUrlBeforeMerge,
190
+ manifestKeyAfterMerge,
191
+ relativeUrlAfterMerge,
192
+ }) => {
193
+ return (
194
+ manifestKeyAfterMerge ||
195
+ relativeUrlAfterMerge ||
196
+ manifestKeyBeforeMerge ||
197
+ relativeUrlBeforeMerge
198
+ )
169
199
  }
170
200
 
171
- const renderSizeImpactTableFooter = (
201
+ const renderSizeImpactTableFooter = ({
172
202
  fileByFileImpact,
173
- { groupFileImpactMap, transformationKeys, formatGroupSizeImpactCell },
174
- ) => {
203
+ transformationKeys,
204
+ formatFileSizeImpactCell,
205
+ formatEmojiCell,
206
+ groupSizeMapBeforeMerge,
207
+ groupSizeMapAfterMerge,
208
+ }) => {
175
209
  const footerLines = []
176
210
 
211
+ const fileCount = Object.keys(fileByFileImpact).length
177
212
  const sizeNames = transformationKeys
178
- const lastSizeName = sizeNames[sizeNames.length - 1]
179
-
180
- const groupImpacts = {}
181
- sizeNames.forEach((sizeName) => {
182
- groupImpacts[sizeName] = computeGroupImpact(groupFileImpactMap, sizeName)
183
- })
213
+ const firstSizeName = sizeNames[0]
184
214
 
185
215
  const groupSizeImpactLine = [
186
- `<td nowrap><strong>Whole group</strong></td>`,
216
+ `<td nowrap><strong>Total (${fileCount})</strong></td>`,
187
217
  ...sizeNames.map(
188
- (sizeName) => `<td nowrap>${formatGroupSizeImpactCell(groupImpacts[sizeName])}</td>`,
218
+ (sizeName) =>
219
+ `<td nowrap>${formatFileSizeImpactCell({
220
+ sizeBeforeMerge: groupSizeMapBeforeMerge[sizeName],
221
+ sizeAfterMerge: groupSizeMapAfterMerge[sizeName],
222
+ sizeName,
223
+ })}</td>`,
189
224
  ),
190
- `<td>${renderGroupEmojiCellContent(groupImpacts[lastSizeName])}</td>`,
225
+ ...(formatEmojiCell
226
+ ? [
227
+ `<td>${formatEmojiCell({
228
+ sizeBeforeMerge: groupSizeMapBeforeMerge[firstSizeName],
229
+ sizeAfterMerge: groupSizeMapAfterMerge[firstSizeName],
230
+ })}</td>`,
231
+ ]
232
+ : []),
191
233
  ]
192
234
  footerLines.push(groupSizeImpactLine)
193
235
 
194
236
  return renderTableLines(footerLines)
195
237
  }
196
238
 
197
- const computeGroupImpact = (groupFileImpactMap, sizeName) => {
198
- const groupImpact = Object.keys(groupFileImpactMap).reduce(
199
- (previous, fileRelativeUrl) => {
200
- const fileImpact = groupFileImpactMap[fileRelativeUrl]
201
- const { beforeMerge, afterMerge } = fileImpact
202
- // added
203
- if (!beforeMerge) {
204
- const sizeAfterMerge = afterMerge.sizeMap[sizeName]
205
- return {
206
- groupSizeBeforeMerge: previous.groupSizeBeforeMerge,
207
- groupSizeAfterMerge: previous.groupSizeAfterMerge + sizeAfterMerge,
208
- }
209
- }
210
-
211
- // removed
212
- if (!afterMerge) {
213
- const sizeBeforeMerge = beforeMerge.sizeMap[sizeName]
214
- return {
215
- groupSizeBeforeMerge: previous.groupSizeBeforeMerge + sizeBeforeMerge,
216
- groupSizeAfterMerge: previous.groupSizeAfterMerge,
217
- }
218
- }
219
-
220
- // modified or not, does not matter
221
- const sizeBeforeMerge = beforeMerge.sizeMap[sizeName]
222
- const sizeAfterMerge = afterMerge.sizeMap[sizeName]
223
- return {
224
- groupSizeBeforeMerge: previous.groupSizeBeforeMerge + sizeBeforeMerge,
225
- groupSizeAfterMerge: previous.groupSizeAfterMerge + sizeAfterMerge,
226
- }
227
- },
228
- {
229
- groupSizeBeforeMerge: 0,
230
- groupSizeAfterMerge: 0,
231
- },
232
- )
233
- return groupImpact
234
- }
235
-
236
239
  const truncateFileRelativeUrl = (fileRelativeUrl, fileRelativeUrlMaxLength) => {
237
240
  const length = fileRelativeUrl.length
238
241
  const extraLength = length - fileRelativeUrlMaxLength
@@ -0,0 +1,49 @@
1
+ export const getSizeMapsOneFile = ({ sizeNames, beforeMerge, afterMerge }) => {
2
+ const sizeMapBeforeMerge = {}
3
+ const sizeMapAfterMerge = {}
4
+ const sizeImpactMap = {}
5
+
6
+ sizeNames.forEach((sizeName) => {
7
+ if (beforeMerge === null) {
8
+ sizeMapBeforeMerge[sizeName] = undefined
9
+ sizeMapAfterMerge[sizeName] = afterMerge.sizeMap[sizeName]
10
+ sizeImpactMap[sizeName] = afterMerge.sizeMap[sizeName]
11
+ } else if (afterMerge === null) {
12
+ sizeMapBeforeMerge[sizeName] = beforeMerge.sizeMap[sizeName]
13
+ sizeMapAfterMerge[sizeName] = undefined
14
+ sizeImpactMap[sizeName] = -beforeMerge.sizeMap[sizeName]
15
+ } else {
16
+ sizeMapBeforeMerge[sizeName] = beforeMerge.sizeMap[sizeName]
17
+ sizeMapAfterMerge[sizeName] = afterMerge.sizeMap[sizeName]
18
+ sizeImpactMap[sizeName] = afterMerge.sizeMap[sizeName] - beforeMerge.sizeMap[sizeName]
19
+ }
20
+ })
21
+
22
+ return {
23
+ sizeMapBeforeMerge,
24
+ sizeMapAfterMerge,
25
+ sizeImpactMap,
26
+ }
27
+ }
28
+
29
+ export const getSizeMapsForManyFiles = ({ sizeNames, fileByFileImpact, files }) => {
30
+ const sizeMapBeforeMerge = {}
31
+ const sizeMapAfterMerge = {}
32
+
33
+ sizeNames.forEach((sizeName) => {
34
+ let sizeBeforeMerge = 0
35
+ let sizeAfterMerge = 0
36
+ files.forEach((fileRelativeUrl) => {
37
+ const { sizeMapBeforeMerge, sizeMapAfterMerge } = fileByFileImpact[fileRelativeUrl]
38
+ sizeBeforeMerge += sizeMapBeforeMerge[sizeName] || 0
39
+ sizeAfterMerge += sizeMapAfterMerge[sizeName] || 0
40
+ })
41
+ sizeMapBeforeMerge[sizeName] = sizeBeforeMerge
42
+ sizeMapAfterMerge[sizeName] = sizeAfterMerge
43
+ })
44
+
45
+ return {
46
+ sizeMapBeforeMerge,
47
+ sizeMapAfterMerge,
48
+ }
49
+ }
@@ -0,0 +1,17 @@
1
+ import { parentPort } from "node:worker_threads"
2
+
3
+ parentPort.on("message", async ({ fileSizeModuleUrl }) => {
4
+ const { generateFileSizeReport } = await import(fileSizeModuleUrl)
5
+
6
+ if (typeof generateFileSizeReport !== "function") {
7
+ throw new TypeError(
8
+ `generateFileSizeReport export must be a function, got ${generateFileSizeReport}`,
9
+ )
10
+ }
11
+
12
+ const fileSizeReport = await generateFileSizeReport()
13
+
14
+ parentPort.postMessage({
15
+ fileSizeReport,
16
+ })
17
+ })
@@ -17,7 +17,7 @@ export const logFileSizeReport = (fileSizeReport) => {
17
17
  const sizesFormatted = sizeNames.map((sizeName) => {
18
18
  return `${sizeName}: ${formatSize(sizeMap[sizeName])}`
19
19
  })
20
- return `${fileRelativeUrl}: { ${sizesFormatted.join(`,`)} }`
20
+ return `${fileRelativeUrl}: { ${sizesFormatted.join(`, `)} }`
21
21
  })
22
22
 
23
23
  return `${groupName}
@@ -1,9 +1,21 @@
1
- import { assertAndNormalizeDirectoryUrl, resolveUrl } from "@jsenv/util"
1
+ import { Worker } from "node:worker_threads"
2
+ import {
3
+ assertAndNormalizeDirectoryUrl,
4
+ fileSystemPathToUrl,
5
+ isFileSystemPath,
6
+ resolveUrl,
7
+ urlToFileSystemPath,
8
+ } from "@jsenv/filesystem"
2
9
  import { commentGitHubPullRequestImpact } from "@jsenv/github-pull-request-impact"
3
10
 
4
11
  import { formatComment } from "./internal/formatComment.js"
5
12
  import { jsenvCommentParameters } from "./internal/jsenvCommentParameters.js"
6
13
 
14
+ const workerFileUrl = resolveUrl(
15
+ "./internal/worker_generating_file_size_report.js",
16
+ import.meta.url,
17
+ )
18
+
7
19
  export const reportFileSizeImpact = async ({
8
20
  logLevel,
9
21
  commandLogs,
@@ -17,19 +29,18 @@ export const reportFileSizeImpact = async ({
17
29
  pullRequestNumber,
18
30
  installCommand = "npm install",
19
31
  buildCommand = "npm run-script build",
20
- moduleGeneratingFileSizeReportRelativeUrl,
32
+ fileSizeModulePath,
21
33
 
22
34
  // We could just to ...jsenvCommentParameters but explicitely passing params
23
35
  // helps autocompletion in vscode for dev using the function.
24
36
  filesOrdering = jsenvCommentParameters.filesOrdering,
25
- maxRowsPerTable = jsenvCommentParameters.maxRowsPerTable,
37
+ maxFilesPerGroup = jsenvCommentParameters.maxFilesPerGroup,
26
38
  fileRelativeUrlMaxLength = jsenvCommentParameters.fileRelativeUrlMaxLength,
27
39
  formatGroupSummary = jsenvCommentParameters.formatGroupSummary,
28
- formatHiddenImpactSummary = jsenvCommentParameters.formatHiddenImpactSummary,
29
40
  formatFileRelativeUrl = jsenvCommentParameters.formatFileRelativeUrl,
30
41
  formatFileCell = jsenvCommentParameters.formatFileCell,
31
42
  formatFileSizeImpactCell = jsenvCommentParameters.formatFileSizeImpactCell,
32
- formatGroupSizeImpactCell = jsenvCommentParameters.formatGroupSizeImpactCell,
43
+ formatEmojiCell = jsenvCommentParameters.formatEmojiCell,
33
44
  shouldOpenGroupByDefault = jsenvCommentParameters.shouldOpenGroupByDefault,
34
45
 
35
46
  catchError,
@@ -48,16 +59,14 @@ export const reportFileSizeImpact = async ({
48
59
  throw new TypeError(`buildCommand must be a string but received ${buildCommand}`)
49
60
  }
50
61
 
51
- if (typeof moduleGeneratingFileSizeReportRelativeUrl !== "string") {
52
- throw new TypeError(
53
- `moduleGeneratingFileSizeReportRelativeUrl must be a string but received ${moduleGeneratingFileSizeReportRelativeUrl}`,
54
- )
62
+ if (typeof fileSizeModulePath !== "string") {
63
+ throw new TypeError(`fileSizeModulePath must be a string but received ${fileSizeModulePath}`)
55
64
  }
56
65
  projectDirectoryUrl = assertAndNormalizeDirectoryUrl(projectDirectoryUrl)
57
- const moduleGeneratingFileSizeReportUrl = resolveUrl(
58
- moduleGeneratingFileSizeReportRelativeUrl,
59
- projectDirectoryUrl,
60
- )
66
+ const fileSizeModuleUrl = isFileSystemPath(fileSizeModulePath)
67
+ ? fileSystemPathToUrl(fileSizeModulePath)
68
+ : resolveUrl(fileSizeModulePath, projectDirectoryUrl)
69
+ const workerFilePath = urlToFileSystemPath(workerFileUrl)
61
70
 
62
71
  return commentGitHubPullRequestImpact({
63
72
  logLevel,
@@ -75,15 +84,12 @@ export const reportFileSizeImpact = async ({
75
84
  if (installCommand) await execCommandInProjectDirectory(installCommand)
76
85
  if (buildCommand) await execCommandInProjectDirectory(buildCommand)
77
86
 
78
- const { generateFileSizeReport } = await import(
79
- `${moduleGeneratingFileSizeReportUrl}?cache_busting=${Date.now()}`
80
- )
81
- if (typeof generateFileSizeReport !== "function") {
82
- throw new TypeError(
83
- `generateFileSizeReport export must be a function, got ${generateFileSizeReport}`,
84
- )
85
- }
86
- const fileSizeReport = await generateFileSizeReport()
87
+ const worker = new Worker(workerFilePath)
88
+ const { fileSizeReport } = await new Promise((resolve, reject) => {
89
+ worker.postMessage({ fileSizeModuleUrl })
90
+ worker.on("message", resolve)
91
+ worker.on("error", reject)
92
+ })
87
93
 
88
94
  return { version: 1, data: fileSizeReport }
89
95
  },
@@ -102,14 +108,13 @@ export const reportFileSizeImpact = async ({
102
108
  afterMergeFileSizeReport: afterMergeData,
103
109
 
104
110
  filesOrdering,
105
- maxRowsPerTable,
111
+ maxFilesPerGroup,
106
112
  fileRelativeUrlMaxLength,
107
113
  formatGroupSummary,
108
- formatHiddenImpactSummary,
109
114
  formatFileRelativeUrl,
110
115
  formatFileCell,
111
116
  formatFileSizeImpactCell,
112
- formatGroupSizeImpactCell,
117
+ formatEmojiCell,
113
118
  shouldOpenGroupByDefault,
114
119
  })
115
120
  },
@@ -1,43 +0,0 @@
1
- export const getSizeMaps = ({ beforeMerge, afterMerge }) => {
2
- // added
3
- if (!beforeMerge) {
4
- const sizeMapBeforeMerge = null
5
- const sizeMapAfterMerge = afterMerge.sizeMap
6
- const sizeImpactMap = {}
7
- Object.keys(sizeMapAfterMerge).forEach((sizeName) => {
8
- sizeImpactMap[sizeName] = sizeMapAfterMerge[sizeName]
9
- })
10
- return {
11
- sizeMapBeforeMerge,
12
- sizeMapAfterMerge,
13
- sizeImpactMap,
14
- }
15
- }
16
-
17
- // deleted
18
- if (!afterMerge) {
19
- const sizeMapBeforeMerge = beforeMerge.sizeMap
20
- const sizeMapAfterMerge = null
21
- const sizeImpactMap = {}
22
- Object.keys(sizeMapBeforeMerge).forEach((sizeName) => {
23
- sizeImpactMap[sizeName] = -sizeMapBeforeMerge[sizeName]
24
- })
25
- return {
26
- sizeMapBeforeMerge,
27
- sizeMapAfterMerge,
28
- sizeImpactMap,
29
- }
30
- }
31
-
32
- const sizeMapBeforeMerge = beforeMerge.sizeMap
33
- const sizeMapAfterMerge = afterMerge.sizeMap
34
- const sizeImpactMap = {}
35
- Object.keys(sizeMapAfterMerge).forEach((sizeName) => {
36
- sizeImpactMap[sizeName] = sizeMapAfterMerge[sizeName] - sizeMapBeforeMerge[sizeName]
37
- })
38
- return {
39
- sizeMapBeforeMerge,
40
- sizeMapAfterMerge,
41
- sizeImpactMap,
42
- }
43
- }