@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,8 +1,8 @@
1
1
  import { compareTwoFileSizeReports } from "./compareTwoFileSizeReports.js"
2
- import { getSizeMaps } from "./getSizeMaps.js"
3
2
  import { isAdded, isModified, isDeleted } from "./helper.js"
4
3
  import { renderImpactTable } from "./renderImpactTable.js"
5
4
  import { orderBySizeImpact } from "./orderBySizeImpact.js"
5
+ import { getSizeMapsOneFile, getSizeMapsForManyFiles } from "./size_map.js"
6
6
 
7
7
  export const formatComment = ({
8
8
  pullRequestBase,
@@ -11,14 +11,13 @@ export const formatComment = ({
11
11
  afterMergeFileSizeReport,
12
12
 
13
13
  filesOrdering,
14
- maxRowsPerTable,
14
+ maxFilesPerGroup,
15
15
  fileRelativeUrlMaxLength,
16
16
  formatGroupSummary,
17
- formatHiddenImpactSummary,
18
17
  formatFileRelativeUrl,
19
18
  formatFileCell,
20
19
  formatFileSizeImpactCell,
21
- formatGroupSizeImpactCell,
20
+ formatEmojiCell,
22
21
  shouldOpenGroupByDefault,
23
22
  }) => {
24
23
  const warnings = []
@@ -40,14 +39,13 @@ export const formatComment = ({
40
39
  reportComparison,
41
40
 
42
41
  filesOrdering,
43
- maxRowsPerTable,
42
+ maxFilesPerGroup,
44
43
  fileRelativeUrlMaxLength,
45
44
  formatGroupSummary,
46
- formatHiddenImpactSummary,
47
45
  formatFileRelativeUrl,
48
46
  formatFileCell,
49
47
  formatFileSizeImpactCell,
50
- formatGroupSizeImpactCell,
48
+ formatEmojiCell,
51
49
  shouldOpenGroupByDefault,
52
50
  })
53
51
 
@@ -64,199 +62,110 @@ const renderCommentBody = ({
64
62
  reportComparison,
65
63
 
66
64
  filesOrdering,
65
+ maxFilesPerGroup,
67
66
  fileRelativeUrlMaxLength,
68
- maxRowsPerTable,
69
67
  formatGroupSummary,
70
- formatHiddenImpactSummary,
71
68
  formatFileRelativeUrl,
72
69
  formatFileCell,
73
70
  formatFileSizeImpactCell,
74
- formatGroupSizeImpactCell,
71
+ formatEmojiCell,
75
72
  shouldOpenGroupByDefault,
76
73
  }) => {
77
- const overallImpactInfo = {}
74
+ const { groups, transformationKeys } = reportComparison
78
75
 
79
- const renderGroup = (
80
- groupMessage,
81
- {
82
- groupName,
83
- groupComparison,
84
- groupFileCount,
85
- groupImpactCount,
86
- fileByFileImpact,
87
- groupHiddenImpactCount,
88
- fileByFileImpactHidden,
89
- },
90
- ) => {
91
- const groupSummary = formatGroupSummary({
92
- groupName,
93
- groupImpactCount,
94
- groupFileCount,
95
- })
96
- const groupShouldBeOpenByDefault = shouldOpenGroupByDefault({
97
- groupName,
98
- groupComparison,
99
- groupFileCount,
100
- groupImpactCount,
101
- fileByFileImpact,
102
- groupHiddenImpactCount,
103
- fileByFileImpactHidden,
104
- })
105
-
106
- return renderDetails({
107
- open: groupShouldBeOpenByDefault,
108
- summary: groupSummary,
109
- content: groupMessage,
110
- })
111
- }
112
-
113
- const { transformationKeys } = reportComparison
114
- const groupMessages = Object.keys(reportComparison.groups).map((groupName) => {
115
- const groupComparison = reportComparison.groups[groupName]
76
+ const groupMessages = Object.keys(groups).map((groupName) => {
77
+ const groupComparison = groups[groupName]
116
78
  const groupFileImpactMap = groupComparison.fileImpactMap
117
- const groupFileCount = Object.keys(groupFileImpactMap).length
118
79
  let fileByFileImpact = {}
119
- let fileByFileImpactHidden = {}
120
- if (groupFileCount === 0) {
121
- return renderGroup(
122
- formulateEmptyGroupContent({
123
- groupName,
124
- groupConfig: groupComparison.tracking,
125
- }),
126
- {
127
- groupName,
128
- groupComparison,
129
- groupFileCount,
130
- groupImpactCount: 0,
131
- fileByFileImpact,
132
- groupHiddenImpactCount: 0,
133
- fileByFileImpactHidden,
134
- },
135
- )
136
- }
80
+ const files = Object.keys(groupFileImpactMap)
137
81
 
138
- const addImpact = (fileRelativeUrl, { event, beforeMerge, afterMerge }) => {
82
+ files.forEach((fileRelativeUrl) => {
83
+ const { beforeMerge, afterMerge } = groupFileImpactMap[fileRelativeUrl]
84
+ const event = isAdded({ beforeMerge, afterMerge })
85
+ ? "added"
86
+ : isDeleted({ beforeMerge, afterMerge })
87
+ ? "deleted"
88
+ : isModified({ beforeMerge, afterMerge })
89
+ ? "modified"
90
+ : "none"
139
91
  const meta = event === "deleted" ? beforeMerge.meta : afterMerge.meta
140
- const impact = {
141
- event,
92
+
93
+ const { sizeMapBeforeMerge, sizeMapAfterMerge, sizeImpactMap } = getSizeMapsOneFile({
94
+ sizeNames: transformationKeys,
142
95
  beforeMerge,
143
96
  afterMerge,
144
- }
145
-
146
- const data = metaToData(meta, { fileRelativeUrl, event, beforeMerge, afterMerge })
147
- if (data.showSizeImpact) {
148
- if (!overallImpactInfo.hasOwnProperty(fileRelativeUrl)) {
149
- overallImpactInfo[fileRelativeUrl] = groupName
150
- }
151
-
152
- fileByFileImpact[fileRelativeUrl] = { ...impact, ...data }
153
- } else {
154
- fileByFileImpactHidden[fileRelativeUrl] = { ...impact, ...data }
155
- }
156
- }
157
-
158
- Object.keys(groupFileImpactMap).forEach((fileRelativeUrl) => {
159
- const { beforeMerge, afterMerge } = groupFileImpactMap[fileRelativeUrl]
160
-
161
- if (isAdded({ beforeMerge, afterMerge })) {
162
- addImpact(fileRelativeUrl, {
163
- event: "added",
164
- beforeMerge,
165
- afterMerge,
166
- })
167
- return
168
- }
169
-
170
- if (isDeleted({ beforeMerge, afterMerge })) {
171
- addImpact(fileRelativeUrl, {
172
- event: "deleted",
173
- beforeMerge,
174
- afterMerge,
175
- })
176
- return
177
- }
178
-
179
- if (isModified({ beforeMerge, afterMerge })) {
180
- addImpact(fileRelativeUrl, {
181
- event: "modified",
182
- beforeMerge,
183
- afterMerge,
184
- })
97
+ })
98
+ const { showSizeImpact, formatFileRelativeUrl } = metaToData(meta, {
99
+ fileRelativeUrl,
100
+ sizeBeforeMerge: sizeMapBeforeMerge[0],
101
+ sizeAfterMerge: sizeMapAfterMerge[0],
102
+ sizeImpactMap,
103
+ })
104
+ fileByFileImpact[fileRelativeUrl] = {
105
+ event,
106
+ manifestKeyBeforeMerge: beforeMerge ? beforeMerge.manifestKey : undefined,
107
+ manifestKeyAfterMerge: afterMerge ? afterMerge.manifestKey : undefined,
108
+ relativeUrlBeforeMerge: beforeMerge ? beforeMerge.relativeUrl : undefined,
109
+ relativeUrlAfterMerge: afterMerge ? afterMerge.relativeUrl : undefined,
110
+ sizeMapBeforeMerge,
111
+ sizeMapAfterMerge,
112
+ sizeImpactMap,
113
+ showSizeImpact,
114
+ formatFileRelativeUrl,
185
115
  }
186
116
  })
187
-
188
117
  if (filesOrdering === "size_impact") {
189
- fileByFileImpact = orderBySizeImpact(fileByFileImpact, reportComparison.transformationKeys)
190
- fileByFileImpactHidden = orderBySizeImpact(
191
- fileByFileImpactHidden,
192
- reportComparison.transformationKeys,
193
- )
118
+ fileByFileImpact = orderBySizeImpact(fileByFileImpact, transformationKeys)
194
119
  }
195
120
 
196
- const groupImpactCount = Object.keys(fileByFileImpact).length
197
- const groupHiddenImpactCount = Object.keys(fileByFileImpactHidden).length
198
- if (groupImpactCount === 0 && groupHiddenImpactCount === 0) {
199
- return renderGroup(`<p>No impact on files in ${groupName} group.</p>`, {
200
- groupName,
201
- groupComparison,
202
- groupFileCount,
203
- groupImpactCount,
204
- fileByFileImpact,
205
- groupHiddenImpactCount,
206
- fileByFileImpactHidden,
207
- })
208
- }
121
+ const groupSizeMaps = getSizeMapsForManyFiles({
122
+ sizeNames: transformationKeys,
123
+ fileByFileImpact,
124
+ files,
125
+ })
126
+ const groupSizeMapBeforeMerge = groupSizeMaps.sizeMapBeforeMerge
127
+ const groupSizeMapAfterMerge = groupSizeMaps.sizeMapAfterMerge
128
+ const groupIsEmpty = Object.keys(fileByFileImpact).length === 0
209
129
 
210
- const elements = [
211
- ...(groupImpactCount > 0
212
- ? [
213
- renderImpactTable(fileByFileImpact, {
214
- groupFileImpactMap,
215
- transformationKeys,
216
- fileRelativeUrlMaxLength,
217
- maxRowsPerTable,
218
- formatFileRelativeUrl,
219
- formatFileCell,
220
- formatFileSizeImpactCell,
221
- formatGroupSizeImpactCell,
222
- }),
223
- ]
224
- : []),
225
- ...(groupHiddenImpactCount > 0
226
- ? [
227
- renderDetails({
228
- summary: formatHiddenImpactSummary({ groupName, groupHiddenImpactCount }),
229
- content: renderImpactTable(fileByFileImpactHidden, {
230
- groupFileImpactMap,
231
- transformationKeys,
232
- fileRelativeUrlMaxLength,
233
- maxRowsPerTable,
234
- formatFileRelativeUrl,
235
- formatFileCell,
236
- formatFileSizeImpactCell,
237
- formatGroupSizeImpactCell,
238
- }),
239
- }),
240
- ]
241
- : []),
242
- ]
130
+ const groupSummary = formatGroupSummary({
131
+ groupName,
132
+ groupSizeMapBeforeMerge,
133
+ groupSizeMapAfterMerge,
134
+ sizeNames: transformationKeys,
135
+ fileByFileImpact,
136
+ })
137
+ const groupShouldBeOpenByDefault = shouldOpenGroupByDefault({
138
+ groupName,
139
+ groupSizeMapBeforeMerge,
140
+ groupSizeMapAfterMerge,
141
+ sizeNames: transformationKeys,
142
+ fileByFileImpact,
143
+ })
243
144
 
244
- return renderGroup(
245
- elements.join(`
246
- `),
247
- {
248
- groupName,
249
- groupComparison,
250
- groupFileCount,
251
- groupImpactCount,
252
- fileByFileImpact,
253
- groupHiddenImpactCount,
254
- fileByFileImpactHidden,
255
- },
256
- )
145
+ return renderDetails({
146
+ open: groupShouldBeOpenByDefault,
147
+ summary: groupSummary,
148
+ content: groupIsEmpty
149
+ ? renderEmptyGroupContent({
150
+ groupName,
151
+ groupConfig: groupComparison.tracking,
152
+ })
153
+ : renderImpactTable({
154
+ fileByFileImpact,
155
+ transformationKeys,
156
+ fileRelativeUrlMaxLength,
157
+ maxFilesPerGroup,
158
+ formatFileRelativeUrl,
159
+ formatFileCell,
160
+ formatFileSizeImpactCell,
161
+ formatEmojiCell,
162
+ groupSizeMapBeforeMerge,
163
+ groupSizeMapAfterMerge,
164
+ }),
165
+ })
257
166
  })
258
167
 
259
- const mergeImpact = formulateMergeImpact({ pullRequestHead, pullRequestBase, overallImpactInfo })
168
+ const mergeImpact = formulateMergeImpact({ pullRequestHead, pullRequestBase })
260
169
  if (groupMessages.length === 0) {
261
170
  return mergeImpact
262
171
  }
@@ -267,43 +176,20 @@ ${groupMessages.join(`
267
176
  `)}`
268
177
  }
269
178
 
270
- const formulateMergeImpact = ({ pullRequestBase, pullRequestHead, overallImpactInfo }) => {
271
- const overallImpact = formulateOverallImpact(overallImpactInfo)
272
- return `<p>Merging <em>${pullRequestHead}</em> into <em>${pullRequestBase}</em> will ${overallImpact}.</p>`
273
- }
274
-
275
- const formulateOverallImpact = (overallImpactInfo) => {
276
- let impactedFileCount = 0
277
- let impactedGroupCount = 0
278
- const impactedGroups = []
279
- Object.keys(overallImpactInfo).forEach((relativeUrl) => {
280
- const groupName = overallImpactInfo[relativeUrl]
281
- if (groupName) {
282
- impactedFileCount++
283
- if (!impactedGroups.includes(groupName)) {
284
- impactedGroups.push(groupName)
285
- impactedGroupCount++
286
- }
287
- }
288
- })
289
-
290
- if (impactedFileCount === 0) {
291
- return `not impact files in any group`
292
- }
293
- return `impact ${formulateFileQuantity(impactedFileCount)} in ${formulateGroupQuantity(
294
- impactedGroupCount,
295
- )}`
296
- }
179
+ const renderEmptyGroupContent = ({ groupName, groupConfig }) => {
180
+ return `<p>No file in ${groupName} group (see config below).</p>
297
181
 
298
- const formulateFileQuantity = (count) => {
299
- return count === 1 ? `1 file` : `${count} files`
182
+ \`\`\`json
183
+ ${JSON.stringify(groupConfig, null, " ")}
184
+ \`\`\`
185
+ `
300
186
  }
301
187
 
302
- const formulateGroupQuantity = (count) => {
303
- return count === 1 ? `1 group` : `${count} groups`
188
+ const formulateMergeImpact = ({ pullRequestBase, pullRequestHead }) => {
189
+ return `<p>Merging <em>${pullRequestHead}</em> into <em>${pullRequestBase}</em> impact files as follow:</p>`
304
190
  }
305
191
 
306
- const metaToData = (meta, { fileRelativeUrl, event, beforeMerge, afterMerge }) => {
192
+ const metaToData = (meta, { fileRelativeUrl, sizeBeforeMerge, sizeAfterMerge, sizeImpactMap }) => {
307
193
  if (typeof meta === "boolean") {
308
194
  return {
309
195
  showSizeImpact: true,
@@ -313,9 +199,9 @@ const metaToData = (meta, { fileRelativeUrl, event, beforeMerge, afterMerge }) =
313
199
  if (typeof meta === "object") {
314
200
  const showSizeImpact = showSizeImpactGetter(meta, {
315
201
  fileRelativeUrl,
316
- event,
317
- beforeMerge,
318
- afterMerge,
202
+ sizeBeforeMerge,
203
+ sizeAfterMerge,
204
+ sizeImpactMap,
319
205
  })
320
206
  const { formatFileRelativeUrl } = meta
321
207
  return {
@@ -330,7 +216,10 @@ const metaToData = (meta, { fileRelativeUrl, event, beforeMerge, afterMerge }) =
330
216
  }
331
217
  }
332
218
 
333
- const showSizeImpactGetter = (meta, { fileRelativeUrl, event, beforeMerge, afterMerge }) => {
219
+ const showSizeImpactGetter = (
220
+ meta,
221
+ { fileRelativeUrl, sizeBeforeMerge, sizeAfterMerge, sizeImpactMap },
222
+ ) => {
334
223
  const { showSizeImpact } = meta
335
224
 
336
225
  if (typeof showSizeImpact === "undefined") {
@@ -344,8 +233,9 @@ const showSizeImpactGetter = (meta, { fileRelativeUrl, event, beforeMerge, after
344
233
  if (typeof showSizeImpact === "function") {
345
234
  return showSizeImpact({
346
235
  fileRelativeUrl,
347
- event,
348
- ...getSizeMaps({ beforeMerge, afterMerge }),
236
+ sizeBeforeMerge,
237
+ sizeAfterMerge,
238
+ sizeImpactMap,
349
239
  })
350
240
  }
351
241
 
@@ -355,15 +245,6 @@ const showSizeImpactGetter = (meta, { fileRelativeUrl, event, beforeMerge, after
355
245
  return true
356
246
  }
357
247
 
358
- const formulateEmptyGroupContent = ({ groupName, groupConfig }) => {
359
- return `<p>No file in ${groupName} group (see config below).</p>
360
-
361
- \`\`\`json
362
- ${JSON.stringify(groupConfig, null, " ")}
363
- \`\`\`
364
- `
365
- }
366
-
367
248
  const renderDetails = ({ summary, content, open = false, indent = 0 }) => {
368
249
  return `${" ".repeat(indent)}<details${open ? " open" : ""}>
369
250
  ${" ".repeat(indent + 2)}<summary>${summary}</summary>
@@ -1,19 +1,31 @@
1
1
  import { formatSize } from "./formatSize.js"
2
2
 
3
- const jsenvFormatGroupSummary = ({ groupName, groupImpactCount, groupFileCount }) => {
4
- return `${groupName} (${groupImpactCount}/${groupFileCount})`
5
- }
3
+ const jsenvFormatGroupSummary = ({
4
+ groupName,
5
+ groupSizeMapBeforeMerge,
6
+ groupSizeMapAfterMerge,
7
+ sizeNames,
8
+ }) => {
9
+ const firstSizeName = sizeNames[0]
10
+ const groupSizeBeforeMerge = groupSizeMapBeforeMerge[firstSizeName]
11
+ const groupSizeAfterMerge = groupSizeMapAfterMerge[firstSizeName]
12
+
13
+ if (groupSizeBeforeMerge === groupSizeAfterMerge) {
14
+ return `${groupName} (no impact)`
15
+ }
6
16
 
7
- const jsenvFormatHiddenImpactSummary = ({ groupHiddenImpactCount }) => {
8
- return `Hidden (${groupHiddenImpactCount})`
17
+ return `${groupName} (${formatSizeImpactAsPercentage({
18
+ sizeBeforeMerge: groupSizeBeforeMerge,
19
+ sizeAfterMerge: groupSizeAfterMerge,
20
+ })})`
9
21
  }
10
22
 
11
23
  const jsenvFormatFileRelativeUrl = (fileRelativeUrl) => {
12
24
  return fileRelativeUrl
13
25
  }
14
26
 
15
- const jsenvFormatFileCell = ({ fileRelativeUrlDisplayed, event }) => {
16
- if (event === "deleted") {
27
+ const jsenvFormatFileCell = ({ fileRelativeUrlDisplayed, sizeAfterMerge }) => {
28
+ if (sizeAfterMerge === undefined) {
17
29
  return `<del>${fileRelativeUrlDisplayed}</del>`
18
30
  }
19
31
  return fileRelativeUrlDisplayed
@@ -27,92 +39,84 @@ const jsenvFormatFileCell = ({ fileRelativeUrlDisplayed, event }) => {
27
39
  * - deleted
28
40
  * 0 (-100b)
29
41
  */
30
- const jsenvFormatFileSizeImpactCell = (fileImpact, sizeName) => {
31
- const { beforeMerge, afterMerge } = fileImpact
32
-
33
- // added
34
- if (!beforeMerge) {
35
- const sizeBeforeMerge = 0
36
- const sizeAfterMerge = afterMerge.sizeMap[sizeName]
37
- return formatSizeImpact({
38
- sizeBeforeMerge,
39
- sizeAfterMerge,
40
- // +100 % of something that was not here
41
- // makes no sense
42
- showDiff: false,
43
- })
42
+ const jsenvFormatFileSizeImpactCell = ({ sizeBeforeMerge, sizeAfterMerge }) => {
43
+ // The file is new
44
+ // it makes sense to display
45
+ // "100B"
46
+ // but it would make no sense to compare with something that does not exists like
47
+ // "100 B (+100B / +100%)
48
+ if (sizeBeforeMerge === undefined) {
49
+ const sizeAfterMergeFormatted = formatSize(sizeAfterMerge)
50
+ return sizeAfterMergeFormatted
44
51
  }
45
52
 
46
- // deleted
47
- if (!afterMerge) {
48
- const sizeBeforeMerge = beforeMerge.sizeMap[sizeName]
49
- const sizeAfterMerge = 0
50
- return formatSizeImpact({
51
- sizeBeforeMerge,
52
- sizeAfterMerge,
53
- // -100% of the file kinda makes sense
54
- showDiffPercentage: false,
55
- })
53
+ // The file is deleted, it makes sense to display
54
+ // "deleted (-100 B)"
55
+ // to indicate the new file size is 0 and was 100 bytes
56
+ // but it would be redundant to add the percentage
57
+ // "deleted (-100 B / -100%)"
58
+ if (sizeAfterMerge === undefined) {
59
+ const sizeDiff = -sizeBeforeMerge
60
+ const sizeDiffFormatted = formatSize(sizeDiff, { diff: true })
61
+ return `deleted (${sizeDiffFormatted})`
56
62
  }
57
63
 
58
- const sizeBeforeMerge = beforeMerge.sizeMap[sizeName]
59
- const sizeAfterMerge = afterMerge.sizeMap[sizeName]
60
- return formatSizeImpact({
64
+ const sizeAfterMergeFormatted = formatSize(sizeAfterMerge)
65
+ const sizeDiff = sizeAfterMerge - sizeBeforeMerge
66
+ const sizeDiffFormatted = formatSize(sizeDiff, { diff: true })
67
+ const sizeDiffAsPercentageFormatted = formatSizeImpactAsPercentage({
61
68
  sizeBeforeMerge,
62
69
  sizeAfterMerge,
63
70
  })
71
+ return `${sizeAfterMergeFormatted} (${sizeDiffFormatted} / ${sizeDiffAsPercentageFormatted})`
64
72
  }
65
73
 
66
- const jsenvFormatGroupSizeImpactCell = ({ groupSizeAfterMerge, groupSizeBeforeMerge }) => {
67
- return formatSizeImpact({
68
- sizeBeforeMerge: groupSizeBeforeMerge,
69
- sizeAfterMerge: groupSizeAfterMerge,
70
- })
71
- }
72
-
73
- const formatSizeImpact = ({
74
- sizeBeforeMerge,
75
- sizeAfterMerge,
76
- showDiff = true,
77
- showDiffPercentage = true,
78
- }) => {
79
- const sizeAfterMergeFormatted = formatSize(sizeAfterMerge)
80
- if (!showDiff) {
81
- return sizeAfterMergeFormatted
74
+ export const jsenvFormatEmojiCell = ({ sizeBeforeMerge, sizeAfterMerge }) => {
75
+ if (sizeBeforeMerge === undefined) {
76
+ return ":baby:"
82
77
  }
83
78
 
84
- const sizeDiff = sizeAfterMerge - sizeBeforeMerge
85
- const sizeDiffFormatted = formatSize(sizeDiff, { diff: true })
86
-
87
- if (!showDiffPercentage) {
88
- return `${sizeAfterMergeFormatted} (${sizeDiffFormatted})`
79
+ if (sizeAfterMerge === undefined) {
80
+ return ""
89
81
  }
90
82
 
91
- const sizeDiffRatio =
92
- sizeBeforeMerge === 0 ? 1 : sizeAfterMerge === 0 ? -1 : sizeDiff / sizeBeforeMerge
93
- const sizeDiffAsPercentage = sizeDiffRatio * 100
94
- const sizeDiffAsPercentageFormatted = `${sizeDiffAsPercentage < 0 ? `-` : "+"}${Math.abs(
95
- limitDecimals(sizeDiffAsPercentage, 2),
96
- )}%`
83
+ const delta = sizeAfterMerge - sizeBeforeMerge
84
+ if (delta === 0) {
85
+ return ":ghost:"
86
+ }
97
87
 
98
- return `${sizeAfterMergeFormatted} (${sizeDiffFormatted} / ${sizeDiffAsPercentageFormatted})`
99
- }
88
+ if (delta > 0) {
89
+ return ":arrow_upper_right:"
90
+ }
100
91
 
101
- const limitDecimals = (number, decimalCount = 2) => {
102
- const multiplier = Math.pow(10, decimalCount)
103
- return Math.round(number * multiplier) / multiplier
92
+ return ":arrow_lower_right:"
104
93
  }
105
94
 
106
95
  export const jsenvCommentParameters = {
107
96
  filesOrdering: "size_impact",
108
- maxRowsPerTable: 600,
97
+ maxFilesPerGroup: 600,
109
98
  fileRelativeUrlMaxLength: 100,
110
99
  formatGroupSummary: jsenvFormatGroupSummary,
111
- formatHiddenImpactSummary: jsenvFormatHiddenImpactSummary,
112
100
  formatFileRelativeUrl: jsenvFormatFileRelativeUrl,
113
101
 
114
102
  formatFileCell: jsenvFormatFileCell,
115
103
  formatFileSizeImpactCell: jsenvFormatFileSizeImpactCell,
116
- formatGroupSizeImpactCell: jsenvFormatGroupSizeImpactCell,
104
+ formatEmojiCell: jsenvFormatEmojiCell,
117
105
  shouldOpenGroupByDefault: () => false,
118
106
  }
107
+
108
+ const formatSizeImpactAsPercentage = ({ sizeBeforeMerge, sizeAfterMerge }) => {
109
+ const sizeDiff = sizeAfterMerge - sizeBeforeMerge
110
+ const sizeDiffRatio =
111
+ sizeBeforeMerge === 0 ? 1 : sizeAfterMerge === 0 ? -1 : sizeDiff / sizeBeforeMerge
112
+ const sizeDiffAsPercentage = sizeDiffRatio * 100
113
+ const sizeDiffAsPercentageFormatted = `${sizeDiffAsPercentage < 0 ? `-` : "+"}${Math.abs(
114
+ limitDecimals(sizeDiffAsPercentage, 2),
115
+ )}%`
116
+ return sizeDiffAsPercentageFormatted
117
+ }
118
+
119
+ const limitDecimals = (number, decimalCount = 2) => {
120
+ const multiplier = Math.pow(10, decimalCount)
121
+ return Math.round(number * multiplier) / multiplier
122
+ }
@@ -1,10 +1,10 @@
1
1
  export const orderBySizeImpact = (fileByFileImpact, sizeNames) => {
2
2
  const impactOrderedBySizeImpact = {}
3
3
  const files = Object.keys(fileByFileImpact)
4
- const lastSizeName = sizeNames[sizeNames.length - 1]
4
+ const firstSizeName = sizeNames[0]
5
5
  files.sort((leftFile, rightFile) => {
6
- const leftFileSizeImpact = sizeImpactFromFileImpact(fileByFileImpact[leftFile], lastSizeName)
7
- const rightFileSizeImpact = sizeImpactFromFileImpact(fileByFileImpact[rightFile], lastSizeName)
6
+ const leftFileSizeImpact = fileByFileImpact[leftFile].sizeImpactMap[firstSizeName]
7
+ const rightFileSizeImpact = fileByFileImpact[rightFile].sizeImpactMap[firstSizeName]
8
8
  if (leftFileSizeImpact === 0) {
9
9
  return 1
10
10
  }
@@ -24,14 +24,3 @@ export const orderBySizeImpact = (fileByFileImpact, sizeNames) => {
24
24
  })
25
25
  return impactOrderedBySizeImpact
26
26
  }
27
-
28
- const sizeImpactFromFileImpact = (fileImpact, sizeName) => {
29
- const { event } = fileImpact
30
- if (event === "added") {
31
- return fileImpact.afterMerge.sizeMap[sizeName]
32
- }
33
- if (event === "modified") {
34
- return fileImpact.afterMerge.sizeMap[sizeName] - fileImpact.beforeMerge.sizeMap[sizeName]
35
- }
36
- return -fileImpact.beforeMerge.sizeMap[sizeName]
37
- }