@jsenv/file-size-impact 12.1.13 → 13.0.1

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsenv/file-size-impact",
3
- "version": "12.1.13",
3
+ "version": "13.0.1",
4
4
  "description": "Add files size impact into pull requests",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -12,34 +12,29 @@
12
12
  "node": ">=16.13.0"
13
13
  },
14
14
  "publishConfig": {
15
- "access": "public",
16
- "registry": "https://registry.npmjs.org"
15
+ "access": "public"
17
16
  },
18
17
  "type": "module",
19
18
  "exports": {
20
19
  ".": {
21
- "import": "./main.js"
20
+ "import": "./src/main.js"
22
21
  },
23
22
  "./*": "./*"
24
23
  },
25
- "main": "./main.js",
24
+ "main": "./src/main.js",
26
25
  "files": [
27
- "/src/",
28
- "/main.js"
26
+ "/src/"
29
27
  ],
30
28
  "scripts": {
31
- "eslint": "npx eslint . --ext=.js,.mjs",
32
- "snapshot": "node ./test/comment/generate_comment_snapshot_file.mjs",
33
- "test": "node ./script/test/test.mjs",
34
- "test-with-coverage": "npm run test -- --coverage",
35
- "file-size": "node ./script/file_size/file_size.mjs --log",
36
- "prettier": "prettier --write ."
29
+ "snapshot": "node ./tests/comment/generate_comment_snapshot_file.mjs",
30
+ "test": "node ./scripts/test.mjs",
31
+ "file-size": "node ./scripts/file_size.mjs --log"
37
32
  },
38
33
  "dependencies": {
39
- "@jsenv/dynamic-import-worker": "1.0.1",
40
- "@jsenv/filesystem": "3.1.0",
41
- "@jsenv/github-pull-request-impact": "1.6.11",
42
- "@jsenv/logger": "4.0.1",
43
- "pretty-bytes": "6.0.0"
34
+ "@jsenv/dynamic-import-worker": "1.1.0",
35
+ "@jsenv/filesystem": "4.1.0",
36
+ "@jsenv/github-pull-request-impact": "1.7.0",
37
+ "@jsenv/log": "3.0.0",
38
+ "@jsenv/urls": "1.2.6"
44
39
  }
45
- }
40
+ }
package/readme.md CHANGED
@@ -28,7 +28,7 @@ The first thing you need is a script capable to generate a file size report.
28
28
  npm install --save-dev @jsenv/file-size-impact
29
29
  ```
30
30
 
31
- _generate_file_size_report.mjs_
31
+ _file_size.mjs_
32
32
 
33
33
  ```js
34
34
  import { generateFileSizeReport } from "@jsenv/file-size-impact"
@@ -48,7 +48,7 @@ export const fileSizeReport = await generateFileSizeReport({
48
48
  At this stage, you could generate a file size report on your machine with the following command.
49
49
 
50
50
  ```console
51
- node ./generate_file_size_report.mjs --log
51
+ node ./file_size.mjs --log
52
52
  ```
53
53
 
54
54
  Now it's time to configure a workflow to compare file size reports before and after merging a pull request.
@@ -85,7 +85,7 @@ jobs:
85
85
  - name: Setup npm
86
86
  run: npm install
87
87
  - name: Report file size impact
88
- run: node ./report_file_size_impact.mjs
88
+ run: node ./file_size.mjs
89
89
  env:
90
90
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
91
91
  ```
@@ -108,11 +108,13 @@ import {
108
108
  await reportFileSizeImpact({
109
109
  ...readGitHubWorkflowEnv(),
110
110
  buildCommand: "npm run dist",
111
- fileSizeReportModulePath: "./generate_file_size_report.mjs#fileSizeReport",
111
+ fileSizeReportUrl: new URL("./file_size.mjs#fileSizeReport", import.meta.url),
112
112
  })
113
113
  ```
114
114
 
115
- where `fileSizeReport` is the name of the export from _generate_file_size_report.mjs_.
115
+ **Notes**:
116
+
117
+ - "#fileSizeReport" is the name of the export from _file_size.mjs_.
116
118
 
117
119
  ## Other tools
118
120
 
@@ -164,12 +166,13 @@ In order to analyse the impact of a pull request on file size the following step
164
166
 
165
167
  1. Checkout pull request base branch
166
168
  2. Execute an install command (_npm install_ by default)
167
- 3. Get a file size report (dynamic import of a js module exporting `generateFileSizeReport`)
168
- 4. Merge pull request into its base
169
- 5. Execute command to generate files again
170
- 6. Get a second file size report
171
- 7. Analyse differences between the two file size reports
172
- 8. Post or update comment in the pull request
169
+ 3. Run a build command (nom build by default)
170
+ 4. Get a file size report (dynamic import of a js module exporting `generateFileSizeReport`)
171
+ 5. Merge pull request into its base
172
+ 6. Execute command to generate files again
173
+ 7. Get a second file size report
174
+ 8. Analyse differences between the two file size reports
175
+ 9. Post or update comment in the pull request
173
176
 
174
177
  # generateFileSizeReport
175
178
 
@@ -322,8 +325,7 @@ await reportFileSizeImpact({
322
325
 
323
326
  installCommand: "npm install",
324
327
  buildCommand: "npm run build",
325
- fileSizeReportModulePath: "./generate_file_size_report.mjs#fileSizeReport",
326
-
328
+ fileSizeReportUrl: new URL("./file_size.mjs#fileSizeReport", import.meta.url),
327
329
  filesOrdering: "size_impact",
328
330
  })
329
331
  ```
@@ -346,9 +348,9 @@ _installCommand_ parameter is a string representing the command to run in order
346
348
 
347
349
  _buildCommand_ parameter is a string representing the command to run in order to generate files. This parameter is optional with a default value of `"npm run-script build"`. You can pass `null` if you don't need to run a build command before computing file sizes.
348
350
 
349
- ## fileSizeModulePath
351
+ ## fileSizeReportUrl
350
352
 
351
- _fileSizeModulePath_ is a string parameter representing an url relative to [rootDirectoryUrl](#rootDirectoryUrl) leading a module file. This file must contain a _generateFileSizeReport_ export.
353
+ _fileSizeReportUrl_ is a string or an url parameter representing an url leading a module file. This file must export a fileSizeReport produced by _generateFileSizeReport_.
352
354
 
353
355
  ## filesOrdering
354
356
 
@@ -1,11 +1,10 @@
1
+ import { fileURLToPath } from "node:url"
1
2
  import {
2
3
  assertAndNormalizeDirectoryUrl,
3
4
  bufferToEtag,
4
- resolveUrl,
5
5
  readFile,
6
- urlToFileSystemPath,
7
6
  } from "@jsenv/filesystem"
8
- import { createDetailedMessage, createLogger } from "@jsenv/logger"
7
+ import { createDetailedMessage, createLogger } from "@jsenv/log"
9
8
 
10
9
  import { transform as rawTransform } from "./rawTransformation.js"
11
10
  import { jsenvTrackingConfig } from "./jsenvTrackingConfig.js"
@@ -81,7 +80,8 @@ const groupTrackingResultToGroupReport = async (
81
80
  const manifestRelativeUrls = Object.keys(manifestMetaMap)
82
81
  await Promise.all(
83
82
  manifestRelativeUrls.map(async (manifestRelativeUrl) => {
84
- const manifestFileUrl = resolveUrl(manifestRelativeUrl, rootDirectoryUrl)
83
+ const manifestFileUrl = new URL(manifestRelativeUrl, rootDirectoryUrl)
84
+ .href
85
85
  const manifestFileContent = await readFile(manifestFileUrl, {
86
86
  as: "string",
87
87
  })
@@ -95,7 +95,7 @@ const groupTrackingResultToGroupReport = async (
95
95
  `JSON.parse error while trying to parse a manifest file`,
96
96
  {
97
97
  "error stack": e.stack,
98
- "manifest file": urlToFileSystemPath(manifestFileUrl),
98
+ "manifest file": fileURLToPath(manifestFileUrl),
99
99
  },
100
100
  ),
101
101
  )
@@ -114,7 +114,7 @@ const groupTrackingResultToGroupReport = async (
114
114
  // so we won't benefit from concurrency (it might even make things worse)
115
115
  await trackedRelativeUrls.reduce(async (previous, fileRelativeUrl) => {
116
116
  await previous
117
- const fileUrl = resolveUrl(fileRelativeUrl, rootDirectoryUrl)
117
+ const fileUrl = new URL(fileRelativeUrl, rootDirectoryUrl).href
118
118
  const fileBuffer = await readFile(fileUrl, { as: "buffer" })
119
119
  const sizeMap = await getFileSizeMap(fileBuffer, {
120
120
  transformations,
@@ -1,7 +1,5 @@
1
- import {
2
- urlToFileSystemPath,
3
- collectDirectoryMatchReport,
4
- } from "@jsenv/filesystem"
1
+ import { fileURLToPath } from "node:url"
2
+ import { collectDirectoryMatchReport } from "@jsenv/filesystem"
5
3
 
6
4
  export const applyTrackingConfig = async (
7
5
  trackingConfig,
@@ -30,21 +28,18 @@ const applyTracking = async (
30
28
  tracking,
31
29
  { rootDirectoryUrl, manifestConfig },
32
30
  ) => {
33
- const structuredMetaMap = {
34
- track: tracking,
35
- ...(manifestConfig ? { manifest: manifestConfig } : {}),
36
- }
37
-
38
31
  let directoryMatchReport
39
-
40
32
  try {
41
33
  directoryMatchReport = await collectDirectoryMatchReport({
42
34
  directoryUrl: rootDirectoryUrl,
43
- structuredMetaMap,
35
+ associations: {
36
+ track: tracking,
37
+ ...(manifestConfig ? { manifest: manifestConfig } : {}),
38
+ },
44
39
  predicate: (meta) => Boolean(meta.track) || Boolean(meta.manifest),
45
40
  })
46
41
  } catch (e) {
47
- const directoryPath = urlToFileSystemPath(rootDirectoryUrl)
42
+ const directoryPath = fileURLToPath(rootDirectoryUrl)
48
43
  if (e.code === "ENOENT" && e.path === directoryPath) {
49
44
  console.warn(`${directoryPath} does not exists`)
50
45
  return []
@@ -40,7 +40,11 @@ const compareTwoGroups = (beforeMergeGroup, afterMergeGroup) => {
40
40
  beforeMerge: null,
41
41
  afterMerge: {
42
42
  relativeUrl: afterMergeRelativeUrl,
43
- manifestKey: manifestKeyFromRelativeUrl(afterMergeRelativeUrl, afterMergeMappings) || null,
43
+ manifestKey:
44
+ manifestKeyFromRelativeUrl(
45
+ afterMergeRelativeUrl,
46
+ afterMergeMappings,
47
+ ) || null,
44
48
  ...afterMergeFileMap[afterMergeRelativeUrl],
45
49
  },
46
50
  }
@@ -50,12 +54,19 @@ const compareTwoGroups = (beforeMergeGroup, afterMergeGroup) => {
50
54
  beforeMerge: {
51
55
  relativeUrl: beforeMergeRelativeUrl,
52
56
  manifestKey:
53
- manifestKeyFromRelativeUrl(beforeMergeRelativeUrl, beforeMergeMappings) || null,
57
+ manifestKeyFromRelativeUrl(
58
+ beforeMergeRelativeUrl,
59
+ beforeMergeMappings,
60
+ ) || null,
54
61
  ...beforeMergeFileMap[beforeMergeRelativeUrl],
55
62
  },
56
63
  afterMerge: {
57
64
  relativeUrl: afterMergeRelativeUrl,
58
- manifestKey: manifestKeyFromRelativeUrl(afterMergeRelativeUrl, afterMergeMappings) || null,
65
+ manifestKey:
66
+ manifestKeyFromRelativeUrl(
67
+ afterMergeRelativeUrl,
68
+ afterMergeMappings,
69
+ ) || null,
59
70
  ...afterMergeFileMap[afterMergeRelativeUrl],
60
71
  },
61
72
  }
@@ -64,7 +75,10 @@ const compareTwoGroups = (beforeMergeGroup, afterMergeGroup) => {
64
75
  return {
65
76
  beforeMerge: {
66
77
  relativeUrl: beforeMergeRelativeUrl,
67
- manifestKey: manifestKeyFromRelativeUrl(beforeMergeRelativeUrl, beforeMergeMappings),
78
+ manifestKey: manifestKeyFromRelativeUrl(
79
+ beforeMergeRelativeUrl,
80
+ beforeMergeMappings,
81
+ ),
68
82
  ...beforeMergeFileMap[beforeMergeRelativeUrl],
69
83
  },
70
84
  afterMerge: null,
@@ -78,14 +92,16 @@ const compareTwoGroups = (beforeMergeGroup, afterMergeGroup) => {
78
92
  )
79
93
 
80
94
  if (afterMergeManifestKey) {
81
- const existsInBeforeMergeManifest =
82
- Object.keys(beforeMergeMappings).includes(afterMergeManifestKey)
95
+ const existsInBeforeMergeManifest = Object.keys(
96
+ beforeMergeMappings,
97
+ ).includes(afterMergeManifestKey)
83
98
  if (existsInBeforeMergeManifest) {
84
99
  // the manifest key also appears in the manifest before merge.
85
100
  // It means that even if both file have different relative urls,
86
101
  // they are considered the same.
87
102
  // This is to support file generated with a dynamic name
88
- const beforeMergeRelativeUrl = beforeMergeMappings[afterMergeManifestKey]
103
+ const beforeMergeRelativeUrl =
104
+ beforeMergeMappings[afterMergeManifestKey]
89
105
  const beforeMerge = beforeMergeFileMap[beforeMergeRelativeUrl]
90
106
  if (beforeMerge) {
91
107
  groupComparison[afterMergeRelativeUrl] = getUpdateInfo({
@@ -113,8 +129,9 @@ const compareTwoGroups = (beforeMergeGroup, afterMergeGroup) => {
113
129
  beforeMergeMappings,
114
130
  )
115
131
  if (beforeMergeManifestKey) {
116
- const existsInAfterMergeManifest =
117
- Object.keys(afterMergeMappings).includes(beforeMergeManifestKey)
132
+ const existsInAfterMergeManifest = Object.keys(
133
+ afterMergeMappings,
134
+ ).includes(beforeMergeManifestKey)
118
135
  if (existsInAfterMergeManifest) {
119
136
  // file also referenced in after merge manifest
120
137
  // let's first see if the file still exists
@@ -137,7 +154,9 @@ const compareTwoGroups = (beforeMergeGroup, afterMergeGroup) => {
137
154
  // at this point there is no file for an eventual file mapping from manifest
138
155
  // AND no file for the real relative url after merge
139
156
  // -> the file is gone
140
- groupComparison[beforeMergeRelativeUrl] = getRemoveInfo({ beforeMergeRelativeUrl })
157
+ groupComparison[beforeMergeRelativeUrl] = getRemoveInfo({
158
+ beforeMergeRelativeUrl,
159
+ })
141
160
  })
142
161
 
143
162
  const fileImpactMap = sortFileStructure(groupComparison)
@@ -149,7 +168,8 @@ const compareTwoGroups = (beforeMergeGroup, afterMergeGroup) => {
149
168
  }
150
169
 
151
170
  const sortFileStructure = (fileStructure) => {
152
- const relativeUrlSortedArray = Object.keys(fileStructure).sort(comparePathnames)
171
+ const relativeUrlSortedArray =
172
+ Object.keys(fileStructure).sort(comparePathnames)
153
173
  const fileStructureSorted = {}
154
174
  relativeUrlSortedArray.forEach((relativeUrl) => {
155
175
  fileStructureSorted[relativeUrl] = fileStructure[relativeUrl]
@@ -9,7 +9,8 @@ export const formatFileSizeReportForLog = (fileSizeReport) => {
9
9
 
10
10
  const mappings = manifestToMappings(manifestMap)
11
11
  const fileMessages = Object.keys(fileMap).map((fileRelativeUrl) => {
12
- const fileDisplayed = manifestKeyFromRelativeUrl(fileRelativeUrl, mappings) || fileRelativeUrl
12
+ const fileDisplayed =
13
+ manifestKeyFromRelativeUrl(fileRelativeUrl, mappings) || fileRelativeUrl
13
14
  const file = fileMap[fileRelativeUrl]
14
15
  const { sizeMap } = file
15
16
  const sizeNames = Object.keys(sizeMap)
@@ -1,8 +1,8 @@
1
- import bytes from "pretty-bytes"
1
+ import { byteAsFileSize } from "@jsenv/log"
2
2
 
3
3
  export const formatSize = (sizeNumber, { diff = false } = {}) => {
4
4
  const sizeNumberAbsolute = Math.abs(sizeNumber)
5
- let sizeString = bytes(sizeNumberAbsolute)
5
+ let sizeString = byteAsFileSize(sizeNumberAbsolute)
6
6
  if (diff) {
7
7
  if (sizeNumber < 0) {
8
8
  sizeString = `-${sizeString}`
@@ -1,31 +1,8 @@
1
- export const formatPercentage = (number) => {
2
- const absoluteValue = Math.abs(number)
3
- const valueRounded = roundNumber(
4
- absoluteValue,
5
- determineDecimals(absoluteValue),
6
- )
7
- return `${number < 0 ? `-` : "+"}${valueRounded}%`
8
- }
1
+ import { setRoundedPrecision } from "@jsenv/log"
9
2
 
10
- const determineDecimals = (number) => {
11
- if (number < 0.001) {
12
- return 4
13
- }
14
- if (number < 0.01) {
15
- return 3
16
- }
17
- if (number < 0.1) {
18
- return 2
19
- }
20
- if (number < 1) {
21
- return 1
22
- }
23
- return 0
24
- }
25
-
26
- const roundNumber = (value, maxDecimals) => {
27
- const expValue = Math.pow(10, maxDecimals)
28
- const roundedValue = Math.round(expValue * value) / expValue
29
- const valueAsString = roundedValue.toFixed(maxDecimals)
30
- return parseFloat(valueAsString)
3
+ export const formatPercentage = (number) => {
4
+ return `${number < 0 ? `-` : "+"}${setRoundedPrecision(Math.abs(number), {
5
+ decimals: 0,
6
+ decimalsWhenSmall: 1,
7
+ })}%`
31
8
  }
@@ -5,7 +5,8 @@ export const anchor = (text, id) => {
5
5
 
6
6
  export const isAdded = ({ beforeMerge }) => !beforeMerge
7
7
 
8
- export const isDeleted = ({ beforeMerge, afterMerge }) => beforeMerge && !afterMerge
8
+ export const isDeleted = ({ beforeMerge, afterMerge }) =>
9
+ beforeMerge && !afterMerge
9
10
 
10
11
  export const isModified = ({ beforeMerge, afterMerge }) =>
11
12
  beforeMerge && afterMerge && beforeMerge.hash !== afterMerge.hash
@@ -1,14 +1,21 @@
1
- import { resolveUrl, urlToRelativeUrl } from "@jsenv/filesystem"
1
+ import { urlToRelativeUrl } from "@jsenv/urls"
2
2
 
3
3
  export const manifestToMappings = (manifestMap) => {
4
4
  const mappings = {}
5
5
  Object.keys(manifestMap).forEach((manifestRelativeUrl) => {
6
6
  const manifest = manifestMap[manifestRelativeUrl]
7
- const manifestAbstractUrl = resolveUrl(manifestRelativeUrl, ABSTRACT_DIRECTORY_URL)
7
+ const manifestAbstractUrl = new URL(
8
+ manifestRelativeUrl,
9
+ ABSTRACT_DIRECTORY_URL,
10
+ ).href
8
11
  Object.keys(manifest).forEach((manifestKey) => {
9
12
  const manifestValue = manifest[manifestKey]
10
- const manifestKeyAsAbstractUrl = resolveUrl(manifestKey, manifestAbstractUrl)
11
- const manifestValueAsAbstractUrl = resolveUrl(manifestValue, manifestAbstractUrl)
13
+ const manifestKeyAsAbstractUrl = new URL(manifestKey, manifestAbstractUrl)
14
+ .href
15
+ const manifestValueAsAbstractUrl = new URL(
16
+ manifestValue,
17
+ manifestAbstractUrl,
18
+ ).href
12
19
  const manifestKeyAsRelativeUrl = urlToRelativeUrl(
13
20
  manifestKeyAsAbstractUrl,
14
21
  ABSTRACT_DIRECTORY_URL,
@@ -3,8 +3,10 @@ export const orderBySizeImpact = (fileByFileImpact, sizeNames) => {
3
3
  const files = Object.keys(fileByFileImpact)
4
4
  const firstSizeName = sizeNames[0]
5
5
  files.sort((leftFile, rightFile) => {
6
- const leftFileSizeImpact = fileByFileImpact[leftFile].sizeImpactMap[firstSizeName]
7
- const rightFileSizeImpact = fileByFileImpact[rightFile].sizeImpactMap[firstSizeName]
6
+ const leftFileSizeImpact =
7
+ fileByFileImpact[leftFile].sizeImpactMap[firstSizeName]
8
+ const rightFileSizeImpact =
9
+ fileByFileImpact[rightFile].sizeImpactMap[firstSizeName]
8
10
  if (leftFileSizeImpact === 0) {
9
11
  return 1
10
12
  }
@@ -48,7 +48,10 @@ const renderSizeImpactTableHeader = (transformationKeys) => {
48
48
  const headerLine = [
49
49
  `<th nowrap>Files</th>`,
50
50
  ...transformationKeys.map(
51
- (sizeName) => `<th nowrap>${sizeName === "raw" ? `new size` : `new ${sizeName} size`}</th>`,
51
+ (sizeName) =>
52
+ `<th nowrap>${
53
+ sizeName === "raw" ? `new size` : `new ${sizeName} size`
54
+ }</th>`,
52
55
  ),
53
56
  `<th></th>`,
54
57
  ]
@@ -88,15 +91,17 @@ const renderSizeImpactTableBody = ({
88
91
  }
89
92
 
90
93
  remainingFilesToDisplay--
91
- const fileAbstractRelativeUrl = fileAbstractRelativeUrlFromFileImpact(fileImpact)
92
- const fileRelativeUrlFormatted = (fileImpact.formatFileRelativeUrl || formatFileRelativeUrl)(
93
- fileAbstractRelativeUrl,
94
- )
94
+ const fileAbstractRelativeUrl =
95
+ fileAbstractRelativeUrlFromFileImpact(fileImpact)
96
+ const fileRelativeUrlFormatted = (
97
+ fileImpact.formatFileRelativeUrl || formatFileRelativeUrl
98
+ )(fileAbstractRelativeUrl)
95
99
  const fileRelativeUrlDisplayed = truncateFileRelativeUrl(
96
100
  fileRelativeUrlFormatted,
97
101
  fileRelativeUrlMaxLength,
98
102
  )
99
- const { sizeMapBeforeMerge, sizeMapAfterMerge } = fileByFileImpact[fileRelativeUrl]
103
+ const { sizeMapBeforeMerge, sizeMapAfterMerge } =
104
+ fileByFileImpact[fileRelativeUrl]
100
105
  const fileCellFormatted = formatFileCell({
101
106
  fileRelativeUrl,
102
107
  fileRelativeUrlDisplayed,
@@ -15,7 +15,8 @@ export const getSizeMapsOneFile = ({ sizeNames, beforeMerge, afterMerge }) => {
15
15
  } else {
16
16
  sizeMapBeforeMerge[sizeName] = beforeMerge.sizeMap[sizeName]
17
17
  sizeMapAfterMerge[sizeName] = afterMerge.sizeMap[sizeName]
18
- sizeImpactMap[sizeName] = afterMerge.sizeMap[sizeName] - beforeMerge.sizeMap[sizeName]
18
+ sizeImpactMap[sizeName] =
19
+ afterMerge.sizeMap[sizeName] - beforeMerge.sizeMap[sizeName]
19
20
  }
20
21
  })
21
22
 
@@ -26,7 +27,11 @@ export const getSizeMapsOneFile = ({ sizeNames, beforeMerge, afterMerge }) => {
26
27
  }
27
28
  }
28
29
 
29
- export const getSizeMapsForManyFiles = ({ sizeNames, fileByFileImpact, files }) => {
30
+ export const getSizeMapsForManyFiles = ({
31
+ sizeNames,
32
+ fileByFileImpact,
33
+ files,
34
+ }) => {
30
35
  const sizeMapBeforeMerge = {}
31
36
  const sizeMapAfterMerge = {}
32
37
 
@@ -34,7 +39,8 @@ export const getSizeMapsForManyFiles = ({ sizeNames, fileByFileImpact, files })
34
39
  let sizeBeforeMerge = 0
35
40
  let sizeAfterMerge = 0
36
41
  files.forEach((fileRelativeUrl) => {
37
- const { sizeMapBeforeMerge, sizeMapAfterMerge } = fileByFileImpact[fileRelativeUrl]
42
+ const { sizeMapBeforeMerge, sizeMapAfterMerge } =
43
+ fileByFileImpact[fileRelativeUrl]
38
44
  sizeBeforeMerge += sizeMapBeforeMerge[sizeName] || 0
39
45
  sizeAfterMerge += sizeMapAfterMerge[sizeName] || 0
40
46
  })
package/src/main.js ADDED
@@ -0,0 +1,8 @@
1
+ export { readGitHubWorkflowEnv } from "@jsenv/github-pull-request-impact"
2
+
3
+ export { jsenvTrackingConfig } from "./jsenvTrackingConfig.js"
4
+ export { transform as raw } from "./rawTransformation.js"
5
+ export { transform as gzip } from "./gzipTransformation.js"
6
+ export { transform as brotli } from "./brotliTransformation.js"
7
+ export { generateFileSizeReport } from "./generateFileSizeReport.js"
8
+ export { reportFileSizeImpact } from "./reportFileSizeImpact.js"
@@ -1,7 +1,7 @@
1
+ import { assertAndNormalizeDirectoryUrl } from "@jsenv/filesystem"
1
2
  import { commentGitHubPullRequestImpact } from "@jsenv/github-pull-request-impact"
2
- import { assertAndNormalizeDirectoryUrl, resolveUrl } from "@jsenv/filesystem"
3
-
4
3
  import { importOneExportFromFile } from "@jsenv/dynamic-import-worker"
4
+
5
5
  import { formatComment } from "./internal/formatComment.js"
6
6
  import { jsenvCommentParameters } from "./internal/jsenvCommentParameters.js"
7
7
 
@@ -18,7 +18,7 @@ export const reportFileSizeImpact = async ({
18
18
  pullRequestNumber,
19
19
  installCommand = "npm install",
20
20
  buildCommand = "npm run-script build",
21
- fileSizeReportModulePath,
21
+ fileSizeReportUrl,
22
22
 
23
23
  // We could just to ...jsenvCommentParameters but explicitely passing params
24
24
  // helps autocompletion in vscode for dev using the function.
@@ -36,6 +36,16 @@ export const reportFileSizeImpact = async ({
36
36
  runLink,
37
37
  commitInGeneratedByInfo,
38
38
  }) => {
39
+ rootDirectoryUrl = assertAndNormalizeDirectoryUrl(rootDirectoryUrl)
40
+ if (fileSizeReportUrl === "string") {
41
+ fileSizeReportUrl = new URL(fileSizeReportUrl, rootDirectoryUrl).href
42
+ } else if (fileSizeReportUrl instanceof URL) {
43
+ } else {
44
+ throw new TypeError(
45
+ `fileSizeReportUrl must be a string or an url but received ${fileSizeReportUrl}`,
46
+ )
47
+ }
48
+
39
49
  if (installCommand === null) {
40
50
  // a null installCommand means there is no need to install anything
41
51
  } else if (typeof installCommand !== "string") {
@@ -52,17 +62,6 @@ export const reportFileSizeImpact = async ({
52
62
  )
53
63
  }
54
64
 
55
- if (typeof fileSizeReportModulePath !== "string") {
56
- throw new TypeError(
57
- `fileSizeReportModulePath must be a string but received ${fileSizeReportModulePath}`,
58
- )
59
- }
60
- rootDirectoryUrl = assertAndNormalizeDirectoryUrl(rootDirectoryUrl)
61
- const fileSizeReportModuleUrl = resolveUrl(
62
- fileSizeReportModulePath,
63
- rootDirectoryUrl,
64
- )
65
-
66
65
  return commentGitHubPullRequestImpact({
67
66
  logLevel,
68
67
  commandLogs,
@@ -78,9 +77,7 @@ export const reportFileSizeImpact = async ({
78
77
  collectInfo: async ({ execCommandInRootDirectory }) => {
79
78
  if (installCommand) await execCommandInRootDirectory(installCommand)
80
79
  if (buildCommand) await execCommandInRootDirectory(buildCommand)
81
- const fileSizeReport = await importOneExportFromFile(
82
- fileSizeReportModuleUrl,
83
- )
80
+ const fileSizeReport = await importOneExportFromFile(fileSizeReportUrl)
84
81
  return { version: 1, data: fileSizeReport }
85
82
  },
86
83
  commentIdentifier: `<!-- Generated by @jsenv/file-size-impact -->`,
package/main.js DELETED
@@ -1,8 +0,0 @@
1
- export { jsenvTrackingConfig } from "./src/jsenvTrackingConfig.js"
2
- export { transform as raw } from "./src/rawTransformation.js"
3
- export { transform as gzip } from "./src/gzipTransformation.js"
4
- export { transform as brotli } from "./src/brotliTransformation.js"
5
- export { generateFileSizeReport } from "./src/generateFileSizeReport.js"
6
-
7
- export { readGitHubWorkflowEnv } from "@jsenv/github-pull-request-impact"
8
- export { reportFileSizeImpact } from "./src/reportFileSizeImpact.js"