@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.
- package/package.json +16 -14
- package/readme.md +40 -57
- package/src/getFileSizeReport.js +1 -1
- package/src/internal/applyTrackingConfig.js +1 -1
- package/src/internal/compareTwoFileSizeReports.js +2 -2
- package/src/internal/formatComment.js +105 -224
- package/src/internal/jsenvCommentParameters.js +73 -69
- package/src/internal/orderBySizeImpact.js +3 -14
- package/src/internal/renderImpactTable.js +158 -155
- package/src/internal/size_map.js +49 -0
- package/src/internal/worker_generating_file_size_report.js +17 -0
- package/src/logFileSizeReport.js +1 -1
- package/src/reportFileSizeImpact.js +30 -25
- package/src/internal/getSizeMaps.js +0 -43
|
@@ -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
|
-
|
|
14
|
+
maxFilesPerGroup,
|
|
15
15
|
fileRelativeUrlMaxLength,
|
|
16
16
|
formatGroupSummary,
|
|
17
|
-
formatHiddenImpactSummary,
|
|
18
17
|
formatFileRelativeUrl,
|
|
19
18
|
formatFileCell,
|
|
20
19
|
formatFileSizeImpactCell,
|
|
21
|
-
|
|
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
|
-
|
|
42
|
+
maxFilesPerGroup,
|
|
44
43
|
fileRelativeUrlMaxLength,
|
|
45
44
|
formatGroupSummary,
|
|
46
|
-
formatHiddenImpactSummary,
|
|
47
45
|
formatFileRelativeUrl,
|
|
48
46
|
formatFileCell,
|
|
49
47
|
formatFileSizeImpactCell,
|
|
50
|
-
|
|
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
|
-
|
|
71
|
+
formatEmojiCell,
|
|
75
72
|
shouldOpenGroupByDefault,
|
|
76
73
|
}) => {
|
|
77
|
-
const
|
|
74
|
+
const { groups, transformationKeys } = reportComparison
|
|
78
75
|
|
|
79
|
-
const
|
|
80
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
141
|
-
|
|
92
|
+
|
|
93
|
+
const { sizeMapBeforeMerge, sizeMapAfterMerge, sizeImpactMap } = getSizeMapsOneFile({
|
|
94
|
+
sizeNames: transformationKeys,
|
|
142
95
|
beforeMerge,
|
|
143
96
|
afterMerge,
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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,
|
|
190
|
-
fileByFileImpactHidden = orderBySizeImpact(
|
|
191
|
-
fileByFileImpactHidden,
|
|
192
|
-
reportComparison.transformationKeys,
|
|
193
|
-
)
|
|
118
|
+
fileByFileImpact = orderBySizeImpact(fileByFileImpact, transformationKeys)
|
|
194
119
|
}
|
|
195
120
|
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
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
|
|
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
|
|
271
|
-
|
|
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
|
-
|
|
299
|
-
|
|
182
|
+
\`\`\`json
|
|
183
|
+
${JSON.stringify(groupConfig, null, " ")}
|
|
184
|
+
\`\`\`
|
|
185
|
+
`
|
|
300
186
|
}
|
|
301
187
|
|
|
302
|
-
const
|
|
303
|
-
return
|
|
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,
|
|
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
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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 = (
|
|
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
|
-
|
|
348
|
-
|
|
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 = ({
|
|
4
|
-
|
|
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
|
-
|
|
8
|
-
|
|
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,
|
|
16
|
-
if (
|
|
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 = (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
59
|
-
const
|
|
60
|
-
|
|
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
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (!showDiffPercentage) {
|
|
88
|
-
return `${sizeAfterMergeFormatted} (${sizeDiffFormatted})`
|
|
79
|
+
if (sizeAfterMerge === undefined) {
|
|
80
|
+
return ""
|
|
89
81
|
}
|
|
90
82
|
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
limitDecimals(sizeDiffAsPercentage, 2),
|
|
96
|
-
)}%`
|
|
83
|
+
const delta = sizeAfterMerge - sizeBeforeMerge
|
|
84
|
+
if (delta === 0) {
|
|
85
|
+
return ":ghost:"
|
|
86
|
+
}
|
|
97
87
|
|
|
98
|
-
|
|
99
|
-
|
|
88
|
+
if (delta > 0) {
|
|
89
|
+
return ":arrow_upper_right:"
|
|
90
|
+
}
|
|
100
91
|
|
|
101
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
4
|
+
const firstSizeName = sizeNames[0]
|
|
5
5
|
files.sort((leftFile, rightFile) => {
|
|
6
|
-
const leftFileSizeImpact =
|
|
7
|
-
const rightFileSizeImpact =
|
|
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
|
-
}
|