@jsenv/file-size-impact 14.1.1 → 14.1.2
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/bin/filesize.mjs +6 -6
- package/package.json +4 -4
- package/readme.md +28 -28
- package/src/brotliTransformation.js +7 -7
- package/src/generateFileSizeReport.js +58 -58
- package/src/gzipTransformation.js +7 -7
- package/src/internal/applyTrackingConfig.js +29 -29
- package/src/internal/compareTwoFileSizeReports.js +56 -52
- package/src/internal/formatComment.js +64 -58
- package/src/internal/formatFileSizeReportForLog.js +20 -19
- package/src/internal/formatSize.js +7 -7
- package/src/internal/format_percentage.js +3 -3
- package/src/internal/helper.js +5 -5
- package/src/internal/jsenvCommentParameters.js +38 -38
- package/src/internal/manifest.js +18 -18
- package/src/internal/orderBySizeImpact.js +15 -15
- package/src/internal/renderImpactTable.js +63 -63
- package/src/internal/size_map.js +28 -28
- package/src/jsenvTrackingConfig.js +1 -1
- package/src/main.js +7 -7
- package/src/rawTransformation.js +2 -2
- package/src/report_file_size_impact_in_github_pr.js +17 -17
|
@@ -1,39 +1,42 @@
|
|
|
1
|
-
import { comparePathnames } from "@jsenv/filesystem"
|
|
1
|
+
import { comparePathnames } from "@jsenv/filesystem";
|
|
2
2
|
|
|
3
|
-
import { manifestToMappings, manifestKeyFromRelativeUrl } from "./manifest.js"
|
|
3
|
+
import { manifestToMappings, manifestKeyFromRelativeUrl } from "./manifest.js";
|
|
4
4
|
|
|
5
5
|
export const compareTwoFileSizeReports = ({
|
|
6
6
|
afterMergeFileSizeReport,
|
|
7
7
|
beforeMergeFileSizeReport,
|
|
8
8
|
}) => {
|
|
9
|
-
const groupComparison = {}
|
|
10
|
-
const afterMergeGroups = afterMergeFileSizeReport.groups
|
|
11
|
-
const beforeMergeGroups = beforeMergeFileSizeReport.groups
|
|
9
|
+
const groupComparison = {};
|
|
10
|
+
const afterMergeGroups = afterMergeFileSizeReport.groups;
|
|
11
|
+
const beforeMergeGroups = beforeMergeFileSizeReport.groups;
|
|
12
12
|
Object.keys(afterMergeGroups).forEach((group) => {
|
|
13
13
|
// || {} exists in case group was not tracked in base branch
|
|
14
14
|
// and is now tracked in head branch.
|
|
15
15
|
// compareTwoGroups will handle the empty object and consider everything as added
|
|
16
|
-
const beforeMergeGroup = beforeMergeGroups[group] || {}
|
|
17
|
-
const afterMergeGroup = afterMergeGroups[group]
|
|
18
|
-
groupComparison[group] = compareTwoGroups(
|
|
19
|
-
|
|
16
|
+
const beforeMergeGroup = beforeMergeGroups[group] || {};
|
|
17
|
+
const afterMergeGroup = afterMergeGroups[group];
|
|
18
|
+
groupComparison[group] = compareTwoGroups(
|
|
19
|
+
beforeMergeGroup,
|
|
20
|
+
afterMergeGroup,
|
|
21
|
+
);
|
|
22
|
+
});
|
|
20
23
|
|
|
21
24
|
const comparison = {
|
|
22
25
|
transformationKeys: afterMergeFileSizeReport.transformationKeys,
|
|
23
26
|
groups: groupComparison,
|
|
24
|
-
}
|
|
27
|
+
};
|
|
25
28
|
|
|
26
|
-
return comparison
|
|
27
|
-
}
|
|
29
|
+
return comparison;
|
|
30
|
+
};
|
|
28
31
|
|
|
29
32
|
const compareTwoGroups = (beforeMergeGroup, afterMergeGroup) => {
|
|
30
|
-
const groupComparison = {}
|
|
31
|
-
const beforeMergeManifestMap = beforeMergeGroup.manifestMap || {}
|
|
32
|
-
const beforeMergeFileMap = beforeMergeGroup.fileMap || {}
|
|
33
|
-
const beforeMergeMappings = manifestToMappings(beforeMergeManifestMap)
|
|
34
|
-
const afterMergeManifestMap = afterMergeGroup.manifestMap || {}
|
|
35
|
-
const afterMergeFileMap = afterMergeGroup.fileMap || {}
|
|
36
|
-
const afterMergeMappings = manifestToMappings(afterMergeManifestMap)
|
|
33
|
+
const groupComparison = {};
|
|
34
|
+
const beforeMergeManifestMap = beforeMergeGroup.manifestMap || {};
|
|
35
|
+
const beforeMergeFileMap = beforeMergeGroup.fileMap || {};
|
|
36
|
+
const beforeMergeMappings = manifestToMappings(beforeMergeManifestMap);
|
|
37
|
+
const afterMergeManifestMap = afterMergeGroup.manifestMap || {};
|
|
38
|
+
const afterMergeFileMap = afterMergeGroup.fileMap || {};
|
|
39
|
+
const afterMergeMappings = manifestToMappings(afterMergeManifestMap);
|
|
37
40
|
|
|
38
41
|
const getAddInfo = ({ afterMergeRelativeUrl }) => {
|
|
39
42
|
return {
|
|
@@ -47,8 +50,8 @@ const compareTwoGroups = (beforeMergeGroup, afterMergeGroup) => {
|
|
|
47
50
|
) || null,
|
|
48
51
|
...afterMergeFileMap[afterMergeRelativeUrl],
|
|
49
52
|
},
|
|
50
|
-
}
|
|
51
|
-
}
|
|
53
|
+
};
|
|
54
|
+
};
|
|
52
55
|
const getUpdateInfo = ({ beforeMergeRelativeUrl, afterMergeRelativeUrl }) => {
|
|
53
56
|
return {
|
|
54
57
|
beforeMerge: {
|
|
@@ -69,8 +72,8 @@ const compareTwoGroups = (beforeMergeGroup, afterMergeGroup) => {
|
|
|
69
72
|
) || null,
|
|
70
73
|
...afterMergeFileMap[afterMergeRelativeUrl],
|
|
71
74
|
},
|
|
72
|
-
}
|
|
73
|
-
}
|
|
75
|
+
};
|
|
76
|
+
};
|
|
74
77
|
const getRemoveInfo = ({ beforeMergeRelativeUrl }) => {
|
|
75
78
|
return {
|
|
76
79
|
beforeMerge: {
|
|
@@ -82,73 +85,74 @@ const compareTwoGroups = (beforeMergeGroup, afterMergeGroup) => {
|
|
|
82
85
|
...beforeMergeFileMap[beforeMergeRelativeUrl],
|
|
83
86
|
},
|
|
84
87
|
afterMerge: null,
|
|
85
|
-
}
|
|
86
|
-
}
|
|
88
|
+
};
|
|
89
|
+
};
|
|
87
90
|
|
|
88
91
|
Object.keys(afterMergeFileMap).forEach((afterMergeRelativeUrl) => {
|
|
89
92
|
const afterMergeManifestKey = manifestKeyFromRelativeUrl(
|
|
90
93
|
afterMergeRelativeUrl,
|
|
91
94
|
afterMergeMappings,
|
|
92
|
-
)
|
|
95
|
+
);
|
|
93
96
|
|
|
94
97
|
if (afterMergeManifestKey) {
|
|
95
98
|
const existsInBeforeMergeManifest = Object.keys(
|
|
96
99
|
beforeMergeMappings,
|
|
97
|
-
).includes(afterMergeManifestKey)
|
|
100
|
+
).includes(afterMergeManifestKey);
|
|
98
101
|
if (existsInBeforeMergeManifest) {
|
|
99
102
|
// the manifest key also appears in the manifest before merge.
|
|
100
103
|
// It means that even if both file have different relative urls,
|
|
101
104
|
// they are considered the same.
|
|
102
105
|
// This is to support file generated with a dynamic name
|
|
103
106
|
const beforeMergeRelativeUrl =
|
|
104
|
-
beforeMergeMappings[afterMergeManifestKey]
|
|
105
|
-
const beforeMerge = beforeMergeFileMap[beforeMergeRelativeUrl]
|
|
107
|
+
beforeMergeMappings[afterMergeManifestKey];
|
|
108
|
+
const beforeMerge = beforeMergeFileMap[beforeMergeRelativeUrl];
|
|
106
109
|
if (beforeMerge) {
|
|
107
110
|
groupComparison[afterMergeRelativeUrl] = getUpdateInfo({
|
|
108
111
|
beforeMergeRelativeUrl,
|
|
109
112
|
afterMergeRelativeUrl,
|
|
110
|
-
})
|
|
111
|
-
return
|
|
113
|
+
});
|
|
114
|
+
return;
|
|
112
115
|
}
|
|
113
116
|
}
|
|
114
117
|
}
|
|
115
118
|
|
|
116
|
-
const beforeMerge = beforeMergeFileMap[afterMergeRelativeUrl]
|
|
119
|
+
const beforeMerge = beforeMergeFileMap[afterMergeRelativeUrl];
|
|
117
120
|
groupComparison[afterMergeRelativeUrl] = beforeMerge
|
|
118
121
|
? getUpdateInfo({
|
|
119
122
|
beforeMergeRelativeUrl: afterMergeRelativeUrl,
|
|
120
123
|
afterMergeRelativeUrl,
|
|
121
124
|
})
|
|
122
|
-
: getAddInfo({ afterMergeRelativeUrl })
|
|
123
|
-
})
|
|
125
|
+
: getAddInfo({ afterMergeRelativeUrl });
|
|
126
|
+
});
|
|
124
127
|
Object.keys(beforeMergeFileMap).forEach((beforeMergeRelativeUrl) => {
|
|
125
128
|
// if the file is not in the after merge, it got deleted
|
|
126
129
|
// except if it is remapped, in this case it can be ignored
|
|
127
130
|
const beforeMergeManifestKey = manifestKeyFromRelativeUrl(
|
|
128
131
|
beforeMergeRelativeUrl,
|
|
129
132
|
beforeMergeMappings,
|
|
130
|
-
)
|
|
133
|
+
);
|
|
131
134
|
if (beforeMergeManifestKey) {
|
|
132
135
|
const existsInAfterMergeManifest = Object.keys(
|
|
133
136
|
afterMergeMappings,
|
|
134
|
-
).includes(beforeMergeManifestKey)
|
|
137
|
+
).includes(beforeMergeManifestKey);
|
|
135
138
|
if (existsInAfterMergeManifest) {
|
|
136
139
|
// file also referenced in after merge manifest
|
|
137
140
|
// let's first see if the file still exists
|
|
138
|
-
const afterMergeRelativeUrl =
|
|
139
|
-
|
|
141
|
+
const afterMergeRelativeUrl =
|
|
142
|
+
afterMergeMappings[beforeMergeManifestKey];
|
|
143
|
+
const afterMerge = afterMergeFileMap[afterMergeRelativeUrl];
|
|
140
144
|
if (afterMerge) {
|
|
141
145
|
// there is a file for this mapping, file was already
|
|
142
146
|
// detected and considered as an update during afterMergeFileMap loop above
|
|
143
|
-
return
|
|
147
|
+
return;
|
|
144
148
|
}
|
|
145
149
|
}
|
|
146
150
|
}
|
|
147
151
|
|
|
148
|
-
const afterMerge = afterMergeFileMap[beforeMergeRelativeUrl]
|
|
152
|
+
const afterMerge = afterMergeFileMap[beforeMergeRelativeUrl];
|
|
149
153
|
if (afterMerge) {
|
|
150
154
|
// there is a file
|
|
151
|
-
return
|
|
155
|
+
return;
|
|
152
156
|
}
|
|
153
157
|
|
|
154
158
|
// at this point there is no file for an eventual file mapping from manifest
|
|
@@ -156,23 +160,23 @@ const compareTwoGroups = (beforeMergeGroup, afterMergeGroup) => {
|
|
|
156
160
|
// -> the file is gone
|
|
157
161
|
groupComparison[beforeMergeRelativeUrl] = getRemoveInfo({
|
|
158
162
|
beforeMergeRelativeUrl,
|
|
159
|
-
})
|
|
160
|
-
})
|
|
163
|
+
});
|
|
164
|
+
});
|
|
161
165
|
|
|
162
|
-
const fileImpactMap = sortFileStructure(groupComparison)
|
|
166
|
+
const fileImpactMap = sortFileStructure(groupComparison);
|
|
163
167
|
|
|
164
168
|
return {
|
|
165
169
|
tracking: afterMergeGroup.tracking,
|
|
166
170
|
fileImpactMap,
|
|
167
|
-
}
|
|
168
|
-
}
|
|
171
|
+
};
|
|
172
|
+
};
|
|
169
173
|
|
|
170
174
|
const sortFileStructure = (fileStructure) => {
|
|
171
175
|
const relativeUrlSortedArray =
|
|
172
|
-
Object.keys(fileStructure).sort(comparePathnames)
|
|
173
|
-
const fileStructureSorted = {}
|
|
176
|
+
Object.keys(fileStructure).sort(comparePathnames);
|
|
177
|
+
const fileStructureSorted = {};
|
|
174
178
|
relativeUrlSortedArray.forEach((relativeUrl) => {
|
|
175
|
-
fileStructureSorted[relativeUrl] = fileStructure[relativeUrl]
|
|
176
|
-
})
|
|
177
|
-
return fileStructureSorted
|
|
178
|
-
}
|
|
179
|
+
fileStructureSorted[relativeUrl] = fileStructure[relativeUrl];
|
|
180
|
+
});
|
|
181
|
+
return fileStructureSorted;
|
|
182
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { compareTwoFileSizeReports } from "./compareTwoFileSizeReports.js"
|
|
2
|
-
import { isAdded, isModified, isDeleted } from "./helper.js"
|
|
3
|
-
import { renderImpactTable } from "./renderImpactTable.js"
|
|
4
|
-
import { orderBySizeImpact } from "./orderBySizeImpact.js"
|
|
5
|
-
import { getSizeMapsOneFile, getSizeMapsForManyFiles } from "./size_map.js"
|
|
1
|
+
import { compareTwoFileSizeReports } from "./compareTwoFileSizeReports.js";
|
|
2
|
+
import { isAdded, isModified, isDeleted } from "./helper.js";
|
|
3
|
+
import { renderImpactTable } from "./renderImpactTable.js";
|
|
4
|
+
import { orderBySizeImpact } from "./orderBySizeImpact.js";
|
|
5
|
+
import { getSizeMapsOneFile, getSizeMapsForManyFiles } from "./size_map.js";
|
|
6
6
|
|
|
7
7
|
export const formatComment = ({
|
|
8
8
|
pullRequestBase,
|
|
@@ -20,17 +20,17 @@ export const formatComment = ({
|
|
|
20
20
|
formatEmojiCell,
|
|
21
21
|
shouldOpenGroupByDefault,
|
|
22
22
|
}) => {
|
|
23
|
-
const warnings = []
|
|
23
|
+
const warnings = [];
|
|
24
24
|
const reportComparison = compareTwoFileSizeReports({
|
|
25
25
|
afterMergeFileSizeReport,
|
|
26
26
|
beforeMergeFileSizeReport,
|
|
27
|
-
})
|
|
28
|
-
const groupCount = Object.keys(reportComparison.groups).length
|
|
27
|
+
});
|
|
28
|
+
const groupCount = Object.keys(reportComparison.groups).length;
|
|
29
29
|
|
|
30
30
|
if (groupCount === 0) {
|
|
31
31
|
warnings.push(
|
|
32
32
|
`**Warning:** Nothing is tracked. It happens when tracking config is an empty object.`,
|
|
33
|
-
)
|
|
33
|
+
);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
let body = renderCommentBody({
|
|
@@ -47,14 +47,14 @@ export const formatComment = ({
|
|
|
47
47
|
formatFileSizeImpactCell,
|
|
48
48
|
formatEmojiCell,
|
|
49
49
|
shouldOpenGroupByDefault,
|
|
50
|
-
})
|
|
50
|
+
});
|
|
51
51
|
|
|
52
52
|
body = `<h4 id="file-size-impact">File size impact</h4>
|
|
53
53
|
|
|
54
|
-
${body}
|
|
54
|
+
${body}`;
|
|
55
55
|
|
|
56
|
-
return { warnings, body }
|
|
57
|
-
}
|
|
56
|
+
return { warnings, body };
|
|
57
|
+
};
|
|
58
58
|
|
|
59
59
|
const renderCommentBody = ({
|
|
60
60
|
pullRequestBase,
|
|
@@ -71,37 +71,37 @@ const renderCommentBody = ({
|
|
|
71
71
|
formatEmojiCell,
|
|
72
72
|
shouldOpenGroupByDefault,
|
|
73
73
|
}) => {
|
|
74
|
-
const { groups, transformationKeys } = reportComparison
|
|
74
|
+
const { groups, transformationKeys } = reportComparison;
|
|
75
75
|
|
|
76
76
|
const groupMessages = Object.keys(groups).map((groupName) => {
|
|
77
|
-
const groupComparison = groups[groupName]
|
|
78
|
-
const groupFileImpactMap = groupComparison.fileImpactMap
|
|
79
|
-
let fileByFileImpact = {}
|
|
80
|
-
const files = Object.keys(groupFileImpactMap)
|
|
77
|
+
const groupComparison = groups[groupName];
|
|
78
|
+
const groupFileImpactMap = groupComparison.fileImpactMap;
|
|
79
|
+
let fileByFileImpact = {};
|
|
80
|
+
const files = Object.keys(groupFileImpactMap);
|
|
81
81
|
|
|
82
82
|
files.forEach((fileRelativeUrl) => {
|
|
83
|
-
const { beforeMerge, afterMerge } = groupFileImpactMap[fileRelativeUrl]
|
|
83
|
+
const { beforeMerge, afterMerge } = groupFileImpactMap[fileRelativeUrl];
|
|
84
84
|
const event = isAdded({ beforeMerge, afterMerge })
|
|
85
85
|
? "added"
|
|
86
86
|
: isDeleted({ beforeMerge, afterMerge })
|
|
87
87
|
? "deleted"
|
|
88
88
|
: isModified({ beforeMerge, afterMerge })
|
|
89
89
|
? "modified"
|
|
90
|
-
: "none"
|
|
91
|
-
const meta = event === "deleted" ? beforeMerge.meta : afterMerge.meta
|
|
90
|
+
: "none";
|
|
91
|
+
const meta = event === "deleted" ? beforeMerge.meta : afterMerge.meta;
|
|
92
92
|
|
|
93
93
|
const { sizeMapBeforeMerge, sizeMapAfterMerge, sizeImpactMap } =
|
|
94
94
|
getSizeMapsOneFile({
|
|
95
95
|
sizeNames: transformationKeys,
|
|
96
96
|
beforeMerge,
|
|
97
97
|
afterMerge,
|
|
98
|
-
})
|
|
98
|
+
});
|
|
99
99
|
const { showSizeImpact, formatFileRelativeUrl } = metaToData(meta, {
|
|
100
100
|
fileRelativeUrl,
|
|
101
101
|
sizeBeforeMerge: sizeMapBeforeMerge[0],
|
|
102
102
|
sizeAfterMerge: sizeMapAfterMerge[0],
|
|
103
103
|
sizeImpactMap,
|
|
104
|
-
})
|
|
104
|
+
});
|
|
105
105
|
fileByFileImpact[fileRelativeUrl] = {
|
|
106
106
|
event,
|
|
107
107
|
manifestKeyBeforeMerge: beforeMerge
|
|
@@ -117,20 +117,23 @@ const renderCommentBody = ({
|
|
|
117
117
|
sizeImpactMap,
|
|
118
118
|
showSizeImpact,
|
|
119
119
|
formatFileRelativeUrl,
|
|
120
|
-
}
|
|
121
|
-
})
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
122
|
if (filesOrdering === "size_impact") {
|
|
123
|
-
fileByFileImpact = orderBySizeImpact(
|
|
123
|
+
fileByFileImpact = orderBySizeImpact(
|
|
124
|
+
fileByFileImpact,
|
|
125
|
+
transformationKeys,
|
|
126
|
+
);
|
|
124
127
|
}
|
|
125
128
|
|
|
126
129
|
const groupSizeMaps = getSizeMapsForManyFiles({
|
|
127
130
|
sizeNames: transformationKeys,
|
|
128
131
|
fileByFileImpact,
|
|
129
132
|
files,
|
|
130
|
-
})
|
|
131
|
-
const groupSizeMapBeforeMerge = groupSizeMaps.sizeMapBeforeMerge
|
|
132
|
-
const groupSizeMapAfterMerge = groupSizeMaps.sizeMapAfterMerge
|
|
133
|
-
const groupIsEmpty = Object.keys(fileByFileImpact).length === 0
|
|
133
|
+
});
|
|
134
|
+
const groupSizeMapBeforeMerge = groupSizeMaps.sizeMapBeforeMerge;
|
|
135
|
+
const groupSizeMapAfterMerge = groupSizeMaps.sizeMapAfterMerge;
|
|
136
|
+
const groupIsEmpty = Object.keys(fileByFileImpact).length === 0;
|
|
134
137
|
|
|
135
138
|
const groupSummary = formatGroupSummary({
|
|
136
139
|
groupName,
|
|
@@ -138,14 +141,14 @@ const renderCommentBody = ({
|
|
|
138
141
|
groupSizeMapAfterMerge,
|
|
139
142
|
sizeNames: transformationKeys,
|
|
140
143
|
fileByFileImpact,
|
|
141
|
-
})
|
|
144
|
+
});
|
|
142
145
|
const groupShouldBeOpenByDefault = shouldOpenGroupByDefault({
|
|
143
146
|
groupName,
|
|
144
147
|
groupSizeMapBeforeMerge,
|
|
145
148
|
groupSizeMapAfterMerge,
|
|
146
149
|
sizeNames: transformationKeys,
|
|
147
150
|
fileByFileImpact,
|
|
148
|
-
})
|
|
151
|
+
});
|
|
149
152
|
|
|
150
153
|
return renderDetails({
|
|
151
154
|
open: groupShouldBeOpenByDefault,
|
|
@@ -167,19 +170,22 @@ const renderCommentBody = ({
|
|
|
167
170
|
groupSizeMapBeforeMerge,
|
|
168
171
|
groupSizeMapAfterMerge,
|
|
169
172
|
}),
|
|
170
|
-
})
|
|
171
|
-
})
|
|
173
|
+
});
|
|
174
|
+
});
|
|
172
175
|
|
|
173
|
-
const mergeImpact = formulateMergeImpact({
|
|
176
|
+
const mergeImpact = formulateMergeImpact({
|
|
177
|
+
pullRequestHead,
|
|
178
|
+
pullRequestBase,
|
|
179
|
+
});
|
|
174
180
|
if (groupMessages.length === 0) {
|
|
175
|
-
return mergeImpact
|
|
181
|
+
return mergeImpact;
|
|
176
182
|
}
|
|
177
183
|
|
|
178
184
|
return `${mergeImpact}
|
|
179
185
|
${groupMessages.join(`
|
|
180
186
|
|
|
181
|
-
`)}
|
|
182
|
-
}
|
|
187
|
+
`)}`;
|
|
188
|
+
};
|
|
183
189
|
|
|
184
190
|
const renderEmptyGroupContent = ({ groupName, groupConfig }) => {
|
|
185
191
|
return `<p>No file in ${groupName} group (see config below).</p>
|
|
@@ -187,12 +193,12 @@ const renderEmptyGroupContent = ({ groupName, groupConfig }) => {
|
|
|
187
193
|
\`\`\`json
|
|
188
194
|
${JSON.stringify(groupConfig, null, " ")}
|
|
189
195
|
\`\`\`
|
|
190
|
-
|
|
191
|
-
}
|
|
196
|
+
`;
|
|
197
|
+
};
|
|
192
198
|
|
|
193
199
|
const formulateMergeImpact = ({ pullRequestBase, pullRequestHead }) => {
|
|
194
|
-
return `<p>Impact on file sizes when merging <em>${pullRequestHead}</em> into <em>${pullRequestBase}</em>.</p
|
|
195
|
-
}
|
|
200
|
+
return `<p>Impact on file sizes when merging <em>${pullRequestHead}</em> into <em>${pullRequestBase}</em>.</p>`;
|
|
201
|
+
};
|
|
196
202
|
|
|
197
203
|
const metaToData = (
|
|
198
204
|
meta,
|
|
@@ -201,7 +207,7 @@ const metaToData = (
|
|
|
201
207
|
if (typeof meta === "boolean") {
|
|
202
208
|
return {
|
|
203
209
|
showSizeImpact: true,
|
|
204
|
-
}
|
|
210
|
+
};
|
|
205
211
|
}
|
|
206
212
|
|
|
207
213
|
if (typeof meta === "object") {
|
|
@@ -210,34 +216,34 @@ const metaToData = (
|
|
|
210
216
|
sizeBeforeMerge,
|
|
211
217
|
sizeAfterMerge,
|
|
212
218
|
sizeImpactMap,
|
|
213
|
-
})
|
|
214
|
-
const { formatFileRelativeUrl } = meta
|
|
219
|
+
});
|
|
220
|
+
const { formatFileRelativeUrl } = meta;
|
|
215
221
|
return {
|
|
216
222
|
showSizeImpact,
|
|
217
223
|
formatFileRelativeUrl,
|
|
218
|
-
}
|
|
224
|
+
};
|
|
219
225
|
}
|
|
220
226
|
|
|
221
227
|
console.warn(
|
|
222
228
|
`meta must be a boolean or an object, received ${meta} for ${fileRelativeUrl}`,
|
|
223
|
-
)
|
|
229
|
+
);
|
|
224
230
|
return {
|
|
225
231
|
showSizeImpact: Boolean(meta),
|
|
226
|
-
}
|
|
227
|
-
}
|
|
232
|
+
};
|
|
233
|
+
};
|
|
228
234
|
|
|
229
235
|
const showSizeImpactGetter = (
|
|
230
236
|
meta,
|
|
231
237
|
{ fileRelativeUrl, sizeBeforeMerge, sizeAfterMerge, sizeImpactMap },
|
|
232
238
|
) => {
|
|
233
|
-
const { showSizeImpact } = meta
|
|
239
|
+
const { showSizeImpact } = meta;
|
|
234
240
|
|
|
235
241
|
if (typeof showSizeImpact === "undefined") {
|
|
236
|
-
return true
|
|
242
|
+
return true;
|
|
237
243
|
}
|
|
238
244
|
|
|
239
245
|
if (typeof showSizeImpact === "boolean") {
|
|
240
|
-
return showSizeImpact
|
|
246
|
+
return showSizeImpact;
|
|
241
247
|
}
|
|
242
248
|
|
|
243
249
|
if (typeof showSizeImpact === "function") {
|
|
@@ -246,18 +252,18 @@ const showSizeImpactGetter = (
|
|
|
246
252
|
sizeBeforeMerge,
|
|
247
253
|
sizeAfterMerge,
|
|
248
254
|
sizeImpactMap,
|
|
249
|
-
})
|
|
255
|
+
});
|
|
250
256
|
}
|
|
251
257
|
|
|
252
258
|
console.warn(
|
|
253
259
|
`showSizeImpact must be a boolean or a function, received ${showSizeImpact} for ${fileRelativeUrl}`,
|
|
254
|
-
)
|
|
255
|
-
return true
|
|
256
|
-
}
|
|
260
|
+
);
|
|
261
|
+
return true;
|
|
262
|
+
};
|
|
257
263
|
|
|
258
264
|
const renderDetails = ({ summary, content, open = false, indent = 0 }) => {
|
|
259
265
|
return `${" ".repeat(indent)}<details${open ? " open" : ""}>
|
|
260
266
|
${" ".repeat(indent + 2)}<summary>${summary}</summary>
|
|
261
267
|
${" ".repeat(indent + 2)}${content}
|
|
262
|
-
${" ".repeat(indent)}</details
|
|
263
|
-
}
|
|
268
|
+
${" ".repeat(indent)}</details>`;
|
|
269
|
+
};
|
|
@@ -1,40 +1,41 @@
|
|
|
1
|
-
import { formatSize } from "./formatSize.js"
|
|
2
|
-
import { manifestToMappings, manifestKeyFromRelativeUrl } from "./manifest.js"
|
|
1
|
+
import { formatSize } from "./formatSize.js";
|
|
2
|
+
import { manifestToMappings, manifestKeyFromRelativeUrl } from "./manifest.js";
|
|
3
3
|
|
|
4
4
|
export const formatFileSizeReportForLog = (fileSizeReport) => {
|
|
5
|
-
const { groups } = fileSizeReport
|
|
5
|
+
const { groups } = fileSizeReport;
|
|
6
6
|
|
|
7
7
|
const groupMessages = Object.keys(groups).map((groupName) => {
|
|
8
|
-
const { fileMap, manifestMap } = groups[groupName]
|
|
8
|
+
const { fileMap, manifestMap } = groups[groupName];
|
|
9
9
|
|
|
10
|
-
const mappings = manifestToMappings(manifestMap)
|
|
10
|
+
const mappings = manifestToMappings(manifestMap);
|
|
11
11
|
const fileMessages = Object.keys(fileMap).map((fileRelativeUrl) => {
|
|
12
12
|
const fileDisplayed =
|
|
13
|
-
manifestKeyFromRelativeUrl(fileRelativeUrl, mappings) ||
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
const
|
|
13
|
+
manifestKeyFromRelativeUrl(fileRelativeUrl, mappings) ||
|
|
14
|
+
fileRelativeUrl;
|
|
15
|
+
const file = fileMap[fileRelativeUrl];
|
|
16
|
+
const { sizeMap } = file;
|
|
17
|
+
const sizeNames = Object.keys(sizeMap);
|
|
17
18
|
if (sizeNames.length === 1) {
|
|
18
|
-
return `${fileDisplayed}: ${formatSize(sizeMap[sizeNames[0]])}
|
|
19
|
+
return `${fileDisplayed}: ${formatSize(sizeMap[sizeNames[0]])}`;
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
const sizesFormatted = sizeNames.map((sizeName) => {
|
|
22
|
-
return `${sizeName}: ${formatSize(sizeMap[sizeName])}
|
|
23
|
-
})
|
|
24
|
-
return `${fileDisplayed}: { ${sizesFormatted.join(`, `)} }
|
|
25
|
-
})
|
|
23
|
+
return `${sizeName}: ${formatSize(sizeMap[sizeName])}`;
|
|
24
|
+
});
|
|
25
|
+
return `${fileDisplayed}: { ${sizesFormatted.join(`, `)} }`;
|
|
26
|
+
});
|
|
26
27
|
|
|
27
28
|
return `${groupName}
|
|
28
29
|
---------------------
|
|
29
30
|
${fileMessages.join(`
|
|
30
|
-
`)}
|
|
31
|
-
})
|
|
31
|
+
`)}`;
|
|
32
|
+
});
|
|
32
33
|
|
|
33
34
|
const message = `
|
|
34
35
|
${groupMessages.join(`
|
|
35
36
|
|
|
36
37
|
`)}
|
|
37
|
-
|
|
38
|
+
`;
|
|
38
39
|
|
|
39
|
-
return message
|
|
40
|
-
}
|
|
40
|
+
return message;
|
|
41
|
+
};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { byteAsFileSize } from "@jsenv/log"
|
|
1
|
+
import { byteAsFileSize } from "@jsenv/log";
|
|
2
2
|
|
|
3
3
|
export const formatSize = (sizeNumber, { diff = false } = {}) => {
|
|
4
|
-
const sizeNumberAbsolute = Math.abs(sizeNumber)
|
|
5
|
-
let sizeString = byteAsFileSize(sizeNumberAbsolute)
|
|
4
|
+
const sizeNumberAbsolute = Math.abs(sizeNumber);
|
|
5
|
+
let sizeString = byteAsFileSize(sizeNumberAbsolute);
|
|
6
6
|
if (diff) {
|
|
7
7
|
if (sizeNumber < 0) {
|
|
8
|
-
sizeString = `-${sizeString}
|
|
8
|
+
sizeString = `-${sizeString}`;
|
|
9
9
|
} else if (sizeNumber > 0) {
|
|
10
|
-
sizeString = `+${sizeString}
|
|
10
|
+
sizeString = `+${sizeString}`;
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
return sizeString
|
|
14
|
-
}
|
|
13
|
+
return sizeString;
|
|
14
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { setRoundedPrecision } from "@jsenv/log"
|
|
1
|
+
import { setRoundedPrecision } from "@jsenv/log";
|
|
2
2
|
|
|
3
3
|
export const formatPercentage = (number) => {
|
|
4
4
|
return `${number < 0 ? `-` : "+"}${setRoundedPrecision(Math.abs(number), {
|
|
5
5
|
decimals: 0,
|
|
6
6
|
decimalsWhenSmall: 1,
|
|
7
|
-
})}
|
|
8
|
-
}
|
|
7
|
+
})}%`;
|
|
8
|
+
};
|
package/src/internal/helper.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// https://gist.github.com/borekb/f83e48479aceaafa43108e021600f7e3
|
|
2
2
|
export const anchor = (text, id) => {
|
|
3
|
-
return `<a href="#user-content-${id.replace()}">${text}<a
|
|
4
|
-
}
|
|
3
|
+
return `<a href="#user-content-${id.replace()}">${text}<a>`;
|
|
4
|
+
};
|
|
5
5
|
|
|
6
|
-
export const isAdded = ({ beforeMerge }) => !beforeMerge
|
|
6
|
+
export const isAdded = ({ beforeMerge }) => !beforeMerge;
|
|
7
7
|
|
|
8
8
|
export const isDeleted = ({ beforeMerge, afterMerge }) =>
|
|
9
|
-
beforeMerge && !afterMerge
|
|
9
|
+
beforeMerge && !afterMerge;
|
|
10
10
|
|
|
11
11
|
export const isModified = ({ beforeMerge, afterMerge }) =>
|
|
12
|
-
beforeMerge && afterMerge && beforeMerge.hash !== afterMerge.hash
|
|
12
|
+
beforeMerge && afterMerge && beforeMerge.hash !== afterMerge.hash;
|