@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.
@@ -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
- }