@jsenv/file-size-impact 10.0.4 → 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 +14 -12
- package/readme.md +13 -23
- package/src/getFileSizeReport.js +1 -1
- package/src/internal/applyTrackingConfig.js +1 -1
- package/src/internal/compareTwoFileSizeReports.js +1 -1
- 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,9 +1,21 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
58
|
-
|
|
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
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
111
|
+
maxFilesPerGroup,
|
|
106
112
|
fileRelativeUrlMaxLength,
|
|
107
113
|
formatGroupSummary,
|
|
108
|
-
formatHiddenImpactSummary,
|
|
109
114
|
formatFileRelativeUrl,
|
|
110
115
|
formatFileCell,
|
|
111
116
|
formatFileSizeImpactCell,
|
|
112
|
-
|
|
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
|
-
}
|