@bundle-stats/utils 4.7.8 → 4.8.0-beta.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/lib/webpack/utils.js
CHANGED
|
@@ -4,36 +4,33 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.normalizeChunkId = exports.getPackagePublicName = exports.getMetricType = exports.getMetricDeleted = exports.getMetricAdded = exports.calculateCacheInvalidation = exports.getModuleName = exports.getAssetName = void 0;
|
|
7
|
-
const last_1 = __importDefault(require("lodash/last"));
|
|
8
|
-
const map_1 = __importDefault(require("lodash/map"));
|
|
9
7
|
const round_1 = __importDefault(require("lodash/round"));
|
|
10
8
|
const config_1 = require("../config");
|
|
11
9
|
const metrics_1 = require("../utils/metrics");
|
|
12
10
|
const metrics_2 = require("./metrics");
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
11
|
+
const HEX_HASH_PATTERN = '[a-f0-9]{5,32}';
|
|
12
|
+
const HEX_HASH_SEPARATOR_PATTERN = '[-_.~]';
|
|
13
|
+
const BASE64URL_HASH_PATTERN = '[A-Za-z0-9_-]{4,}';
|
|
14
|
+
const BASE64URL_SEPARATOR_PATTERN = '[.~]';
|
|
15
|
+
const EXTENSION_PATTERN = /(?:\.[a-z0-9]{2,}){1,}/;
|
|
16
16
|
const PATTERNS = [
|
|
17
|
-
`(.*)${
|
|
18
|
-
`(
|
|
17
|
+
`(.*)${HEX_HASH_SEPARATOR_PATTERN}${HEX_HASH_PATTERN}(${EXTENSION_PATTERN.source})$`,
|
|
18
|
+
`(.*)${BASE64URL_SEPARATOR_PATTERN}${BASE64URL_HASH_PATTERN}(${EXTENSION_PATTERN.source})$`,
|
|
19
|
+
`(static)/${HEX_HASH_PATTERN}(.*${EXTENSION_PATTERN.source})$`,
|
|
19
20
|
].map((pattern) => new RegExp(pattern));
|
|
20
21
|
const NO_BASENAME = /(^|.*\/)\..*$/;
|
|
21
|
-
const getAssetName = (
|
|
22
|
-
if (!
|
|
22
|
+
const getAssetName = (statsAssetPath) => {
|
|
23
|
+
if (!statsAssetPath) {
|
|
23
24
|
return '';
|
|
24
25
|
}
|
|
25
|
-
let
|
|
26
|
-
for (let i = 0; i < PATTERNS.length && !result; i += 1) {
|
|
26
|
+
for (let i = 0; i < PATTERNS.length; i += 1) {
|
|
27
27
|
const pattern = PATTERNS[i];
|
|
28
|
-
const extracted =
|
|
29
|
-
if (extracted && extracted !==
|
|
30
|
-
|
|
28
|
+
const extracted = statsAssetPath.replace(pattern, '$1$2');
|
|
29
|
+
if (extracted && extracted !== statsAssetPath && !NO_BASENAME.test(extracted)) {
|
|
30
|
+
return extracted;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
return assetFilepath;
|
|
35
|
-
}
|
|
36
|
-
return result;
|
|
33
|
+
return statsAssetPath;
|
|
37
34
|
};
|
|
38
35
|
exports.getAssetName = getAssetName;
|
|
39
36
|
const NAME_WITH_LOADERS = /!/;
|
|
@@ -44,7 +41,8 @@ const getModuleName = (name) => {
|
|
|
44
41
|
return '';
|
|
45
42
|
}
|
|
46
43
|
if (NAME_WITH_LOADERS.test(name)) {
|
|
47
|
-
const
|
|
44
|
+
const segments = name.split(NAME_WITH_LOADERS);
|
|
45
|
+
const normalizedName = segments[segments.length - 1];
|
|
48
46
|
if (normalizedName?.trim()) {
|
|
49
47
|
return normalizedName;
|
|
50
48
|
}
|
|
@@ -77,18 +75,19 @@ const calculateCacheInvalidation = (rows) => {
|
|
|
77
75
|
};
|
|
78
76
|
exports.calculateCacheInvalidation = calculateCacheInvalidation;
|
|
79
77
|
const getMetricAdded = (runs) => {
|
|
80
|
-
const [current, baseline] = (
|
|
78
|
+
const [current, baseline] = runs?.map((run) => run?.value) || [];
|
|
81
79
|
return Boolean(current !== null && !baseline);
|
|
82
80
|
};
|
|
83
81
|
exports.getMetricAdded = getMetricAdded;
|
|
84
82
|
const getMetricDeleted = (runs) => {
|
|
85
|
-
const [current, baseline] = (
|
|
83
|
+
const [current, baseline] = runs?.map((run) => run?.value) || [];
|
|
86
84
|
return Boolean(baseline !== null && !current);
|
|
87
85
|
};
|
|
88
86
|
exports.getMetricDeleted = getMetricDeleted;
|
|
89
87
|
exports.getMetricType = (0, metrics_1.createGetMetricType)(metrics_2.metrics);
|
|
90
88
|
const getPackagePublicName = (packageId) => {
|
|
91
|
-
const
|
|
89
|
+
const packageNames = packageId.split(config_1.PACKAGES_SEPARATOR);
|
|
90
|
+
const name = packageNames[packageNames.length - 1];
|
|
92
91
|
return name.split(config_1.PACKAGE_ID_SEPARATOR)[0];
|
|
93
92
|
};
|
|
94
93
|
exports.getPackagePublicName = getPackagePublicName;
|
package/lib/webpack/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/webpack/utils.
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/webpack/utils.ts"],"names":[],"mappings":"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"}
|
package/lib-esm/webpack/utils.js
CHANGED
|
@@ -1,33 +1,30 @@
|
|
|
1
|
-
import last from 'lodash/last';
|
|
2
|
-
import map from 'lodash/map';
|
|
3
1
|
import round from 'lodash/round';
|
|
4
2
|
import { PACKAGES_SEPARATOR, PACKAGE_ID_SEPARATOR } from '../config';
|
|
5
3
|
import { createGetMetricType } from '../utils/metrics';
|
|
6
4
|
import { metrics } from './metrics';
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
5
|
+
const HEX_HASH_PATTERN = '[a-f0-9]{5,32}';
|
|
6
|
+
const HEX_HASH_SEPARATOR_PATTERN = '[-_.~]';
|
|
7
|
+
const BASE64URL_HASH_PATTERN = '[A-Za-z0-9_-]{4,}';
|
|
8
|
+
const BASE64URL_SEPARATOR_PATTERN = '[.~]';
|
|
9
|
+
const EXTENSION_PATTERN = /(?:\.[a-z0-9]{2,}){1,}/;
|
|
10
10
|
const PATTERNS = [
|
|
11
|
-
`(.*)${
|
|
12
|
-
`(
|
|
11
|
+
`(.*)${HEX_HASH_SEPARATOR_PATTERN}${HEX_HASH_PATTERN}(${EXTENSION_PATTERN.source})$`,
|
|
12
|
+
`(.*)${BASE64URL_SEPARATOR_PATTERN}${BASE64URL_HASH_PATTERN}(${EXTENSION_PATTERN.source})$`,
|
|
13
|
+
`(static)/${HEX_HASH_PATTERN}(.*${EXTENSION_PATTERN.source})$`,
|
|
13
14
|
].map((pattern) => new RegExp(pattern));
|
|
14
15
|
const NO_BASENAME = /(^|.*\/)\..*$/;
|
|
15
|
-
export const getAssetName = (
|
|
16
|
-
if (!
|
|
16
|
+
export const getAssetName = (statsAssetPath) => {
|
|
17
|
+
if (!statsAssetPath) {
|
|
17
18
|
return '';
|
|
18
19
|
}
|
|
19
|
-
let
|
|
20
|
-
for (let i = 0; i < PATTERNS.length && !result; i += 1) {
|
|
20
|
+
for (let i = 0; i < PATTERNS.length; i += 1) {
|
|
21
21
|
const pattern = PATTERNS[i];
|
|
22
|
-
const extracted =
|
|
23
|
-
if (extracted && extracted !==
|
|
24
|
-
|
|
22
|
+
const extracted = statsAssetPath.replace(pattern, '$1$2');
|
|
23
|
+
if (extracted && extracted !== statsAssetPath && !NO_BASENAME.test(extracted)) {
|
|
24
|
+
return extracted;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
return assetFilepath;
|
|
29
|
-
}
|
|
30
|
-
return result;
|
|
27
|
+
return statsAssetPath;
|
|
31
28
|
};
|
|
32
29
|
const NAME_WITH_LOADERS = /!/;
|
|
33
30
|
const NAME_WITH_MODULES = /\s?\+\s?\d*\s?modules$/;
|
|
@@ -37,7 +34,8 @@ export const getModuleName = (name) => {
|
|
|
37
34
|
return '';
|
|
38
35
|
}
|
|
39
36
|
if (NAME_WITH_LOADERS.test(name)) {
|
|
40
|
-
const
|
|
37
|
+
const segments = name.split(NAME_WITH_LOADERS);
|
|
38
|
+
const normalizedName = segments[segments.length - 1];
|
|
41
39
|
if (normalizedName === null || normalizedName === void 0 ? void 0 : normalizedName.trim()) {
|
|
42
40
|
return normalizedName;
|
|
43
41
|
}
|
|
@@ -68,16 +66,17 @@ export const calculateCacheInvalidation = (rows) => {
|
|
|
68
66
|
return round((invalidated / cached) * 100, 2);
|
|
69
67
|
};
|
|
70
68
|
export const getMetricAdded = (runs) => {
|
|
71
|
-
const [current, baseline] =
|
|
69
|
+
const [current, baseline] = (runs === null || runs === void 0 ? void 0 : runs.map((run) => run === null || run === void 0 ? void 0 : run.value)) || [];
|
|
72
70
|
return Boolean(current !== null && !baseline);
|
|
73
71
|
};
|
|
74
72
|
export const getMetricDeleted = (runs) => {
|
|
75
|
-
const [current, baseline] =
|
|
73
|
+
const [current, baseline] = (runs === null || runs === void 0 ? void 0 : runs.map((run) => run === null || run === void 0 ? void 0 : run.value)) || [];
|
|
76
74
|
return Boolean(baseline !== null && !current);
|
|
77
75
|
};
|
|
78
76
|
export const getMetricType = createGetMetricType(metrics);
|
|
79
77
|
export const getPackagePublicName = (packageId) => {
|
|
80
|
-
const
|
|
78
|
+
const packageNames = packageId.split(PACKAGES_SEPARATOR);
|
|
79
|
+
const name = packageNames[packageNames.length - 1];
|
|
81
80
|
return name.split(PACKAGE_ID_SEPARATOR)[0];
|
|
82
81
|
};
|
|
83
82
|
export const normalizeChunkId = (chunkId) => chunkId.toString();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/webpack/utils.
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/webpack/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bundle-stats/utils",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.8.0-beta.0",
|
|
4
4
|
"description": "BundleStats utils",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib-esm/index.js",
|
|
@@ -35,15 +35,15 @@
|
|
|
35
35
|
},
|
|
36
36
|
"homepage": "https://github.com/relative-ci/bundle-stats/blob/master/packages/utils#readme",
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@bundle-stats/plugin-webpack-filter": "
|
|
39
|
-
"@bundle-stats/plugin-webpack-validate": "
|
|
38
|
+
"@bundle-stats/plugin-webpack-filter": "4.8.0-beta.0",
|
|
39
|
+
"@bundle-stats/plugin-webpack-validate": "4.8.0-beta.0",
|
|
40
40
|
"query-string": "7.1.3",
|
|
41
41
|
"serialize-query-params": "2.0.2"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@types/jest": "29.5.
|
|
45
|
-
"@types/lodash": "4.14.
|
|
46
|
-
"core-js": "3.33.
|
|
44
|
+
"@types/jest": "29.5.8",
|
|
45
|
+
"@types/lodash": "4.14.201",
|
|
46
|
+
"core-js": "3.33.2",
|
|
47
47
|
"jest": "29.7.0",
|
|
48
48
|
"jest-cli": "29.7.0",
|
|
49
49
|
"jest-date-mock": "1.0.8",
|
|
@@ -57,5 +57,5 @@
|
|
|
57
57
|
"core-js": "^3.0.0",
|
|
58
58
|
"lodash": "^4.0.0"
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "6258f0ed988b422476efdd0045b6f2fcf39477f3"
|
|
61
61
|
}
|
|
@@ -1,26 +1,29 @@
|
|
|
1
|
-
import last from 'lodash/last';
|
|
2
|
-
import map from 'lodash/map';
|
|
3
1
|
import round from 'lodash/round';
|
|
4
2
|
|
|
5
3
|
import { PACKAGES_SEPARATOR, PACKAGE_ID_SEPARATOR } from '../config';
|
|
6
4
|
import { createGetMetricType } from '../utils/metrics';
|
|
7
5
|
import { metrics } from './metrics';
|
|
8
6
|
|
|
9
|
-
//
|
|
10
|
-
const
|
|
7
|
+
// Hex patterns
|
|
8
|
+
const HEX_HASH_PATTERN = '[a-f0-9]{5,32}';
|
|
9
|
+
const HEX_HASH_SEPARATOR_PATTERN = '[-_.~]';
|
|
11
10
|
|
|
12
|
-
//
|
|
13
|
-
const
|
|
11
|
+
// Base64URL patterns
|
|
12
|
+
const BASE64URL_HASH_PATTERN = '[A-Za-z0-9_-]{4,}';
|
|
13
|
+
const BASE64URL_SEPARATOR_PATTERN = '[.~]';
|
|
14
14
|
|
|
15
15
|
// Match multiple extensions: .js, .js.gz, .min.js, .chunk.js
|
|
16
|
-
const EXTENSION_PATTERN = /(?:\.[a-
|
|
16
|
+
const EXTENSION_PATTERN = /(?:\.[a-z0-9]{2,}){1,}/;
|
|
17
17
|
|
|
18
18
|
const PATTERNS = [
|
|
19
|
-
// Match path/name-
|
|
20
|
-
`(.*)${
|
|
19
|
+
// Match path/name-HEXHASH.EXT, path/name.HEXHASH.EXT, path/name_HEXHASH.EXT, path/name-HEXHASH.chunk.EXT
|
|
20
|
+
`(.*)${HEX_HASH_SEPARATOR_PATTERN}${HEX_HASH_PATTERN}(${EXTENSION_PATTERN.source})$`,
|
|
21
|
+
|
|
22
|
+
// Match path/name-BASE64URLHASH.EXT, path/name.BASE64URLHASH.EXT, path/name_BASE64URLHASH.EXT, path/name-BASE64URLHASH.chunk.EXT
|
|
23
|
+
`(.*)${BASE64URL_SEPARATOR_PATTERN}${BASE64URL_HASH_PATTERN}(${EXTENSION_PATTERN.source})$`,
|
|
21
24
|
|
|
22
25
|
// Match static/HASH.ext
|
|
23
|
-
`(static)/${
|
|
26
|
+
`(static)/${HEX_HASH_PATTERN}(.*${EXTENSION_PATTERN.source})$`,
|
|
24
27
|
].map((pattern) => new RegExp(pattern));
|
|
25
28
|
|
|
26
29
|
const NO_BASENAME = /(^|.*\/)\..*$/;
|
|
@@ -28,27 +31,21 @@ const NO_BASENAME = /(^|.*\/)\..*$/;
|
|
|
28
31
|
/**
|
|
29
32
|
* Extract (guess) filename from a hashed filename
|
|
30
33
|
*/
|
|
31
|
-
export const getAssetName = (
|
|
32
|
-
if (!
|
|
34
|
+
export const getAssetName = (statsAssetPath?: string | null): string => {
|
|
35
|
+
if (!statsAssetPath) {
|
|
33
36
|
return '';
|
|
34
37
|
}
|
|
35
38
|
|
|
36
|
-
let
|
|
37
|
-
|
|
38
|
-
for (let i = 0; i < PATTERNS.length && !result; i += 1) {
|
|
39
|
+
for (let i = 0; i < PATTERNS.length; i += 1) {
|
|
39
40
|
const pattern = PATTERNS[i];
|
|
40
|
-
const extracted =
|
|
41
|
+
const extracted: string = statsAssetPath.replace(pattern, '$1$2');
|
|
41
42
|
|
|
42
|
-
if (extracted && extracted !==
|
|
43
|
-
|
|
43
|
+
if (extracted && extracted !== statsAssetPath && !NO_BASENAME.test(extracted)) {
|
|
44
|
+
return extracted;
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
return assetFilepath;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return result;
|
|
48
|
+
return statsAssetPath;
|
|
52
49
|
};
|
|
53
50
|
|
|
54
51
|
// css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./src/assets/styles/default.styl
|
|
@@ -60,13 +57,17 @@ const NAME_WITH_MODULES = /\s?\+\s?\d*\s?modules$/;
|
|
|
60
57
|
// css ../node_modules../node_modules/package-a
|
|
61
58
|
const INVALID_CSS_PREFIX = /^css\s.*node_modules(?!\/)/;
|
|
62
59
|
|
|
63
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Extract normalize module name
|
|
62
|
+
*/
|
|
63
|
+
export const getModuleName = (name?: string | null) => {
|
|
64
64
|
if (!name) {
|
|
65
65
|
return '';
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
if (NAME_WITH_LOADERS.test(name)) {
|
|
69
|
-
const
|
|
69
|
+
const segments = name.split(NAME_WITH_LOADERS);
|
|
70
|
+
const normalizedName = segments[segments.length - 1];
|
|
70
71
|
|
|
71
72
|
if (normalizedName?.trim()) {
|
|
72
73
|
return normalizedName;
|
|
@@ -90,7 +91,7 @@ export const getModuleName = (name) => {
|
|
|
90
91
|
* The metric is the ratio between the total file size of the files that have changed (exclude
|
|
91
92
|
* deleted, added) and the total file size
|
|
92
93
|
*/
|
|
93
|
-
export const calculateCacheInvalidation = (rows) => {
|
|
94
|
+
export const calculateCacheInvalidation = (rows: Array<any>): number => {
|
|
94
95
|
let cached = 0;
|
|
95
96
|
let invalidated = 0;
|
|
96
97
|
|
|
@@ -114,42 +115,33 @@ export const calculateCacheInvalidation = (rows) => {
|
|
|
114
115
|
return round((invalidated / cached) * 100, 2);
|
|
115
116
|
};
|
|
116
117
|
|
|
117
|
-
export const getMetricAdded = (runs) => {
|
|
118
|
-
const [current, baseline] = map(
|
|
118
|
+
export const getMetricAdded = (runs: Array<any>): boolean => {
|
|
119
|
+
const [current, baseline] = runs?.map((run) => run?.value) || [];
|
|
119
120
|
|
|
120
121
|
return Boolean(current !== null && !baseline);
|
|
121
122
|
};
|
|
122
123
|
|
|
123
|
-
export const getMetricDeleted = (runs) => {
|
|
124
|
-
const [current, baseline] = map(
|
|
124
|
+
export const getMetricDeleted = (runs: Array<any>) => {
|
|
125
|
+
const [current, baseline] = runs?.map((run) => run?.value) || [];
|
|
125
126
|
|
|
126
127
|
return Boolean(baseline !== null && !current);
|
|
127
128
|
};
|
|
128
129
|
|
|
129
130
|
/**
|
|
130
131
|
* Get webpack metric data
|
|
131
|
-
*
|
|
132
|
-
* @param {String} key - Webpack metric key
|
|
133
|
-
* @return {Object} Metric data
|
|
134
132
|
*/
|
|
135
133
|
export const getMetricType = createGetMetricType(metrics);
|
|
136
134
|
|
|
137
135
|
/**
|
|
138
136
|
* Get public package name from package id
|
|
139
|
-
*
|
|
140
|
-
* @param {String} packageId
|
|
141
|
-
* @return {String} public package name
|
|
142
137
|
*/
|
|
143
|
-
export const getPackagePublicName = (packageId) => {
|
|
138
|
+
export const getPackagePublicName = (packageId: string): string => {
|
|
144
139
|
// Split packages
|
|
145
|
-
const
|
|
140
|
+
const packageNames = packageId.split(PACKAGES_SEPARATOR);
|
|
141
|
+
const name = packageNames[packageNames.length - 1];
|
|
146
142
|
|
|
147
143
|
// Strip package suffix (eg: ~1)
|
|
148
144
|
return name.split(PACKAGE_ID_SEPARATOR)[0];
|
|
149
145
|
};
|
|
150
146
|
|
|
151
|
-
|
|
152
|
-
* @param {String|Number} chunkId
|
|
153
|
-
* @return {String}
|
|
154
|
-
*/
|
|
155
|
-
export const normalizeChunkId = (chunkId) => chunkId.toString();
|
|
147
|
+
export const normalizeChunkId = (chunkId: string | number): string => chunkId.toString();
|
package/types/webpack/utils.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export const getMetricType: (key: string, type?: import("..").MetricTypes | undefined) => import("..").Metric;
|
|
7
|
-
export
|
|
8
|
-
export
|
|
1
|
+
export declare const getAssetName: (statsAssetPath?: string | null) => string;
|
|
2
|
+
export declare const getModuleName: (name?: string | null) => string;
|
|
3
|
+
export declare const calculateCacheInvalidation: (rows: Array<any>) => number;
|
|
4
|
+
export declare const getMetricAdded: (runs: Array<any>) => boolean;
|
|
5
|
+
export declare const getMetricDeleted: (runs: Array<any>) => boolean;
|
|
6
|
+
export declare const getMetricType: (key: string, type?: import("..").MetricTypes | undefined) => import("..").Metric;
|
|
7
|
+
export declare const getPackagePublicName: (packageId: string) => string;
|
|
8
|
+
export declare const normalizeChunkId: (chunkId: string | number) => string;
|