@bundle-stats/cli-utils 4.7.0-rc.1 → 4.7.0-rc.5
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/__mocks__/fs/promises.ts +3 -0
- package/__mocks__/fs.ts +1 -0
- package/lib/baseline.js +23 -15
- package/lib/baseline.js.map +1 -1
- package/lib/reports.js +29 -25
- package/lib/reports.js.map +1 -1
- package/lib/text.js +3 -3
- package/lib/text.js.map +1 -1
- package/lib-esm/baseline.js +20 -13
- package/lib-esm/baseline.js.map +1 -1
- package/lib-esm/reports.js +30 -26
- package/lib-esm/reports.js.map +1 -1
- package/lib-esm/text.js +2 -2
- package/lib-esm/text.js.map +1 -1
- package/package.json +11 -14
- package/types/baseline.d.ts +6 -3
- package/types/reports.d.ts +7 -2
- package/types/text.d.ts +2 -2
package/__mocks__/fs.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { fs } from 'memfs';
|
package/lib/baseline.js
CHANGED
|
@@ -3,26 +3,34 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.writeBaseline = exports.readBaseline = exports.
|
|
6
|
+
exports.writeBaseline = exports.readBaseline = exports.getBaselineRelativePath = exports.getBaselinePath = exports.BASELINE_STATS_BASE = exports.BASELINE_STATS_DIR = void 0;
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const
|
|
8
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
9
|
const find_cache_dir_1 = __importDefault(require("find-cache-dir"));
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return absoluteFilepath;
|
|
10
|
+
exports.BASELINE_STATS_DIR = (0, find_cache_dir_1.default)({ name: 'bundle-stats' }) || path_1.default.join(process.cwd(), './node_modules/.cache');
|
|
11
|
+
exports.BASELINE_STATS_BASE = 'baseline.json';
|
|
12
|
+
const getBaselinePath = (outputPath = process.cwd(), outputDir = '', filepath = '') => {
|
|
13
|
+
if (!filepath) {
|
|
14
|
+
return path_1.default.join(exports.BASELINE_STATS_DIR, exports.BASELINE_STATS_BASE);
|
|
16
15
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
if (path_1.default.isAbsolute(filepath)) {
|
|
17
|
+
return filepath;
|
|
18
|
+
}
|
|
19
|
+
return path_1.default.join(outputPath, outputDir, filepath);
|
|
20
|
+
};
|
|
21
|
+
exports.getBaselinePath = getBaselinePath;
|
|
22
|
+
const getBaselineRelativePath = (outputPath = process.cwd(), outputDir = '', filepath = '') => {
|
|
23
|
+
const absoluteFilepath = (0, exports.getBaselinePath)(outputPath, outputDir, filepath);
|
|
24
|
+
return path_1.default.relative(path_1.default.join(outputPath, outputDir), absoluteFilepath);
|
|
25
|
+
};
|
|
26
|
+
exports.getBaselineRelativePath = getBaselineRelativePath;
|
|
27
|
+
async function readBaseline(baselineFilepath) {
|
|
28
|
+
const file = await promises_1.default.readFile(baselineFilepath, 'utf-8');
|
|
29
|
+
return JSON.parse(file);
|
|
22
30
|
}
|
|
23
31
|
exports.readBaseline = readBaseline;
|
|
24
|
-
async function writeBaseline(data,
|
|
25
|
-
return (
|
|
32
|
+
async function writeBaseline(data, baselineFilepath) {
|
|
33
|
+
return promises_1.default.writeFile(baselineFilepath, JSON.stringify(data));
|
|
26
34
|
}
|
|
27
35
|
exports.writeBaseline = writeBaseline;
|
|
28
36
|
//# sourceMappingURL=baseline.js.map
|
package/lib/baseline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,2DAA6B;AAC7B,oEAA0C;AAE7B,QAAA,kBAAkB,GAC7B,IAAA,wBAAY,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,IAAI,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;AACjF,QAAA,mBAAmB,GAAG,eAAe,CAAC;AAK5C,MAAM,eAAe,GAAG,CAC7B,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,EAC1B,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,EAAE,EACL,EAAE;IACV,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,cAAI,CAAC,IAAI,CAAC,0BAAkB,EAAE,2BAAmB,CAAC,CAAC;KAC3D;IAED,IAAI,cAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,QAAQ,CAAC;KACjB;IAED,OAAO,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC,CAAC;AAdW,QAAA,eAAe,mBAc1B;AAKK,MAAM,uBAAuB,GAAG,CACrC,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,EAC1B,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,EAAE,EACL,EAAE;IACV,MAAM,gBAAgB,GAAG,IAAA,uBAAe,EAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1E,OAAO,cAAI,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,gBAAgB,CAAC,CAAC;AAC3E,CAAC,CAAC;AAPW,QAAA,uBAAuB,2BAOlC;AAEK,KAAK,UAAU,YAAY,CAAC,gBAAwB;IACzD,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAHD,oCAGC;AAEM,KAAK,UAAU,aAAa,CAAC,IAAU,EAAE,gBAAwB;IACtE,OAAO,kBAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC;AAFD,sCAEC"}
|
package/lib/reports.js
CHANGED
|
@@ -31,7 +31,6 @@ const path_1 = __importDefault(require("path"));
|
|
|
31
31
|
const merge_1 = __importDefault(require("lodash/merge"));
|
|
32
32
|
const utils_1 = require("@bundle-stats/utils");
|
|
33
33
|
const plugin_webpack_filter_1 = __importDefault(require("@bundle-stats/plugin-webpack-filter"));
|
|
34
|
-
const plugin_webpack_validate_1 = __importDefault(require("@bundle-stats/plugin-webpack-validate"));
|
|
35
34
|
const TEXT = __importStar(require("./text"));
|
|
36
35
|
const create_artifacts_1 = require("./create-artifacts");
|
|
37
36
|
const baseline_1 = require("./baseline");
|
|
@@ -40,52 +39,57 @@ function getReportInfo(report) {
|
|
|
40
39
|
}
|
|
41
40
|
exports.getReportInfo = getReportInfo;
|
|
42
41
|
const DEFAULT_OPTIONS = {
|
|
43
|
-
compare: true,
|
|
44
|
-
baseline: Boolean(process.env.BUNDLE_STATS_BASELINE),
|
|
45
42
|
html: true,
|
|
46
43
|
json: false,
|
|
44
|
+
compare: true,
|
|
45
|
+
baseline: Boolean(process.env.BUNDLE_STATS_BASELINE),
|
|
47
46
|
outDir: '',
|
|
48
47
|
silent: false,
|
|
49
48
|
};
|
|
50
49
|
const generateReports = async (source, options, pluginOptions = {}) => {
|
|
51
50
|
const { compare, baseline, html, json, outDir } = (0, merge_1.default)({}, DEFAULT_OPTIONS, options);
|
|
52
|
-
const {
|
|
51
|
+
const { outputPath = process.cwd(), logger = console } = pluginOptions;
|
|
53
52
|
const newAssets = {};
|
|
54
|
-
const invalid = (0, plugin_webpack_validate_1.default)(source);
|
|
55
|
-
if (invalid) {
|
|
56
|
-
logger.warn([invalid, invalidParamsUrl].join('\n'));
|
|
57
|
-
}
|
|
58
53
|
const data = (0, plugin_webpack_filter_1.default)(source);
|
|
59
54
|
if (!data.builtAt) {
|
|
60
55
|
data.builtAt = Date.now();
|
|
61
56
|
}
|
|
62
|
-
const
|
|
57
|
+
const baselineAbsolutePath = (0, baseline_1.getBaselinePath)(outputPath, outDir, options.baselineFilepath);
|
|
58
|
+
const baselinePath = (0, baseline_1.getBaselineRelativePath)(outputPath, outDir, baselineAbsolutePath);
|
|
63
59
|
let baselineStats = null;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const baselineStatsData = await (0, baseline_1.readBaseline)(
|
|
60
|
+
if (compare) {
|
|
61
|
+
try {
|
|
62
|
+
const baselineStatsData = await (0, baseline_1.readBaseline)(baselineAbsolutePath);
|
|
67
63
|
baselineStats = (0, plugin_webpack_filter_1.default)(baselineStatsData);
|
|
68
|
-
if (!options.silent)
|
|
69
|
-
logger.info(
|
|
64
|
+
if (!options.silent) {
|
|
65
|
+
logger.info(`${TEXT.BASELINE_READING} ${baselinePath}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
logger.warn(TEXT.BASELINE_MISSING);
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
const sources = [{ webpack: data }];
|
|
73
|
+
if (baselineStats) {
|
|
74
|
+
sources.push({ webpack: baselineStats });
|
|
74
75
|
}
|
|
75
|
-
const jobs = (0, utils_1.createJobs)(
|
|
76
|
-
{ webpack: data },
|
|
77
|
-
...(compare && baselineStats ? [{ webpack: baselineStats }] : []),
|
|
78
|
-
]);
|
|
76
|
+
const jobs = (0, utils_1.createJobs)(sources);
|
|
79
77
|
const report = (0, utils_1.createReport)(jobs);
|
|
80
78
|
const artifacts = (0, create_artifacts_1.createArtifacts)(jobs, report, { html, json });
|
|
81
79
|
Object.values(artifacts).forEach(({ filename, output }) => {
|
|
82
|
-
const
|
|
83
|
-
newAssets[
|
|
80
|
+
const relativeFilepath = path_1.default.join(outDir, filename);
|
|
81
|
+
newAssets[relativeFilepath] = {
|
|
82
|
+
type: 'report',
|
|
83
|
+
source: output,
|
|
84
|
+
filepath: path_1.default.join(outputPath, relativeFilepath),
|
|
85
|
+
};
|
|
84
86
|
});
|
|
85
87
|
if (baseline) {
|
|
86
|
-
newAssets[
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
newAssets[baselinePath] = {
|
|
89
|
+
type: 'baseline',
|
|
90
|
+
source: JSON.stringify(data),
|
|
91
|
+
filepath: baselineAbsolutePath,
|
|
92
|
+
};
|
|
89
93
|
}
|
|
90
94
|
const info = getReportInfo(report);
|
|
91
95
|
if (info && !options.silent) {
|
package/lib/reports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reports.js","sourceRoot":"","sources":["../src/reports.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,yDAAiC;AACjC,+CAA+D;AAC/D,gGAAyD;
|
|
1
|
+
{"version":3,"file":"reports.js","sourceRoot":"","sources":["../src/reports.ts"],"names":[],"mappings":"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"}
|
package/lib/text.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CLI_NO_BASELINE = exports.CLI_MULTIPLE_STATS = exports.CLI_NO_COMPARE_MODE = exports.
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
3
|
+
exports.CLI_NO_BASELINE = exports.CLI_MULTIPLE_STATS = exports.CLI_NO_COMPARE_MODE = exports.BASELINE_READING = exports.BASELINE_MISSING = void 0;
|
|
4
|
+
exports.BASELINE_MISSING = 'Baseline stats file is missing, see "baseline" option.';
|
|
5
|
+
exports.BASELINE_READING = 'Reading baseline data from';
|
|
6
6
|
exports.CLI_NO_COMPARE_MODE = 'Not in compare mode (see --compare).';
|
|
7
7
|
exports.CLI_MULTIPLE_STATS = 'Multiple stat files already set.';
|
|
8
8
|
exports.CLI_NO_BASELINE = 'Not a baseline job (see --baseline).';
|
package/lib/text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":";;;AAAa,QAAA,
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":";;;AAAa,QAAA,gBAAgB,GAAG,wDAAwD,CAAC;AAC5E,QAAA,gBAAgB,GAAG,4BAA4B,CAAC;AAEhD,QAAA,mBAAmB,GAAG,sCAAsC,CAAC;AAC7D,QAAA,kBAAkB,GAAG,kCAAkC,CAAC;AACxD,QAAA,eAAe,GAAG,sCAAsC,CAAC"}
|
package/lib-esm/baseline.js
CHANGED
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
|
-
import
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
3
|
import findCacheDir from 'find-cache-dir';
|
|
4
|
-
const BASELINE_STATS_DIR = findCacheDir({ name: 'bundle-stats' }) || path.join(process.cwd(), './node_modules/.cache');
|
|
5
|
-
const BASELINE_STATS_BASE = 'baseline.json';
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return absoluteFilepath;
|
|
4
|
+
export const BASELINE_STATS_DIR = findCacheDir({ name: 'bundle-stats' }) || path.join(process.cwd(), './node_modules/.cache');
|
|
5
|
+
export const BASELINE_STATS_BASE = 'baseline.json';
|
|
6
|
+
export const getBaselinePath = (outputPath = process.cwd(), outputDir = '', filepath = '') => {
|
|
7
|
+
if (!filepath) {
|
|
8
|
+
return path.join(BASELINE_STATS_DIR, BASELINE_STATS_BASE);
|
|
10
9
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return
|
|
10
|
+
if (path.isAbsolute(filepath)) {
|
|
11
|
+
return filepath;
|
|
12
|
+
}
|
|
13
|
+
return path.join(outputPath, outputDir, filepath);
|
|
14
|
+
};
|
|
15
|
+
export const getBaselineRelativePath = (outputPath = process.cwd(), outputDir = '', filepath = '') => {
|
|
16
|
+
const absoluteFilepath = getBaselinePath(outputPath, outputDir, filepath);
|
|
17
|
+
return path.relative(path.join(outputPath, outputDir), absoluteFilepath);
|
|
18
|
+
};
|
|
19
|
+
export async function readBaseline(baselineFilepath) {
|
|
20
|
+
const file = await fs.readFile(baselineFilepath, 'utf-8');
|
|
21
|
+
return JSON.parse(file);
|
|
15
22
|
}
|
|
16
|
-
export async function writeBaseline(data,
|
|
17
|
-
return
|
|
23
|
+
export async function writeBaseline(data, baselineFilepath) {
|
|
24
|
+
return fs.writeFile(baselineFilepath, JSON.stringify(data));
|
|
18
25
|
}
|
|
19
26
|
//# sourceMappingURL=baseline.js.map
|
package/lib-esm/baseline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,MAAM,CAAC,MAAM,kBAAkB,GAC7B,YAAY,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;AAC9F,MAAM,CAAC,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAKnD,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,EAC1B,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,EAAE,EACL,EAAE;IACV,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;KAC3D;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,QAAQ,CAAC;KACjB;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,EAC1B,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,EAAE,EACL,EAAE;IACV,MAAM,gBAAgB,GAAG,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,gBAAgB,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,gBAAwB;IACzD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAU,EAAE,gBAAwB;IACtE,OAAO,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC"}
|
package/lib-esm/reports.js
CHANGED
|
@@ -2,61 +2,65 @@ import path from 'path';
|
|
|
2
2
|
import merge from 'lodash/merge';
|
|
3
3
|
import { createJobs, createReport } from '@bundle-stats/utils';
|
|
4
4
|
import filter from '@bundle-stats/plugin-webpack-filter';
|
|
5
|
-
import validate from '@bundle-stats/plugin-webpack-validate';
|
|
6
5
|
import * as TEXT from './text';
|
|
7
6
|
import { createArtifacts } from './create-artifacts';
|
|
8
|
-
import {
|
|
7
|
+
import { getBaselinePath, getBaselineRelativePath, readBaseline } from './baseline';
|
|
9
8
|
export function getReportInfo(report) {
|
|
10
9
|
var _a, _b, _c;
|
|
11
10
|
return (_c = (_b = (_a = report === null || report === void 0 ? void 0 : report.insights) === null || _a === void 0 ? void 0 : _a.webpack) === null || _b === void 0 ? void 0 : _b.assetsSizeTotal) === null || _c === void 0 ? void 0 : _c.data;
|
|
12
11
|
}
|
|
13
12
|
const DEFAULT_OPTIONS = {
|
|
14
|
-
compare: true,
|
|
15
|
-
baseline: Boolean(process.env.BUNDLE_STATS_BASELINE),
|
|
16
13
|
html: true,
|
|
17
14
|
json: false,
|
|
15
|
+
compare: true,
|
|
16
|
+
baseline: Boolean(process.env.BUNDLE_STATS_BASELINE),
|
|
18
17
|
outDir: '',
|
|
19
18
|
silent: false,
|
|
20
19
|
};
|
|
21
20
|
export const generateReports = async (source, options, pluginOptions = {}) => {
|
|
22
21
|
const { compare, baseline, html, json, outDir } = merge({}, DEFAULT_OPTIONS, options);
|
|
23
|
-
const {
|
|
22
|
+
const { outputPath = process.cwd(), logger = console } = pluginOptions;
|
|
24
23
|
const newAssets = {};
|
|
25
|
-
const invalid = validate(source);
|
|
26
|
-
if (invalid) {
|
|
27
|
-
logger.warn([invalid, invalidParamsUrl].join('\n'));
|
|
28
|
-
}
|
|
29
24
|
const data = filter(source);
|
|
30
25
|
if (!data.builtAt) {
|
|
31
26
|
data.builtAt = Date.now();
|
|
32
27
|
}
|
|
33
|
-
const
|
|
28
|
+
const baselineAbsolutePath = getBaselinePath(outputPath, outDir, options.baselineFilepath);
|
|
29
|
+
const baselinePath = getBaselineRelativePath(outputPath, outDir, baselineAbsolutePath);
|
|
34
30
|
let baselineStats = null;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const baselineStatsData = await readBaseline(
|
|
31
|
+
if (compare) {
|
|
32
|
+
try {
|
|
33
|
+
const baselineStatsData = await readBaseline(baselineAbsolutePath);
|
|
38
34
|
baselineStats = filter(baselineStatsData);
|
|
39
|
-
if (!options.silent)
|
|
40
|
-
logger.info(
|
|
35
|
+
if (!options.silent) {
|
|
36
|
+
logger.info(`${TEXT.BASELINE_READING} ${baselinePath}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
logger.warn(TEXT.BASELINE_MISSING);
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
const sources = [{ webpack: data }];
|
|
44
|
+
if (baselineStats) {
|
|
45
|
+
sources.push({ webpack: baselineStats });
|
|
45
46
|
}
|
|
46
|
-
const jobs = createJobs(
|
|
47
|
-
{ webpack: data },
|
|
48
|
-
...(compare && baselineStats ? [{ webpack: baselineStats }] : []),
|
|
49
|
-
]);
|
|
47
|
+
const jobs = createJobs(sources);
|
|
50
48
|
const report = createReport(jobs);
|
|
51
49
|
const artifacts = createArtifacts(jobs, report, { html, json });
|
|
52
50
|
Object.values(artifacts).forEach(({ filename, output }) => {
|
|
53
|
-
const
|
|
54
|
-
newAssets[
|
|
51
|
+
const relativeFilepath = path.join(outDir, filename);
|
|
52
|
+
newAssets[relativeFilepath] = {
|
|
53
|
+
type: 'report',
|
|
54
|
+
source: output,
|
|
55
|
+
filepath: path.join(outputPath, relativeFilepath),
|
|
56
|
+
};
|
|
55
57
|
});
|
|
56
58
|
if (baseline) {
|
|
57
|
-
newAssets[
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
newAssets[baselinePath] = {
|
|
60
|
+
type: 'baseline',
|
|
61
|
+
source: JSON.stringify(data),
|
|
62
|
+
filepath: baselineAbsolutePath,
|
|
63
|
+
};
|
|
60
64
|
}
|
|
61
65
|
const info = getReportInfo(report);
|
|
62
66
|
if (info && !options.silent) {
|
package/lib-esm/reports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reports.js","sourceRoot":"","sources":["../src/reports.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,MAAM,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"reports.js","sourceRoot":"","sources":["../src/reports.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,MAAM,MAAM,qCAAqC,CAAC;AAEzD,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEpF,MAAM,UAAU,aAAa,CAAC,MAAW;;IACvC,OAAO,MAAA,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,0CAAE,OAAO,0CAAE,eAAe,0CAAE,IAAI,CAAC;AAC1D,CAAC;AAoED,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACpD,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,MAAc,EACd,OAAsB,EACtB,gBAAqC,EAAE,EAChB,EAAE;IACzB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IACtF,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,aAAa,CAAC;IAEvE,MAAM,SAAS,GAAiB,EAAE,CAAC;IAEnC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAG5B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;KAC3B;IAED,MAAM,oBAAoB,GAAG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3F,MAAM,YAAY,GAAG,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAEvF,IAAI,aAAa,GAAG,IAAI,CAAC;IAEzB,IAAI,OAAO,EAAE;QACX,IAAI;YACF,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,oBAAoB,CAAC,CAAC;YACnE,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAE1C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACnB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,IAAI,YAAY,EAAE,CAAC,CAAC;aACzD;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACpC;KACF;IAED,MAAM,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpC,IAAI,aAAa,EAAE;QACjB,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;KAC1C;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QACxD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAErD,SAAS,CAAC,gBAAgB,CAAC,GAAG;YAC5B,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC;SAClD,CAAC;IACJ,CAAC,CAAC,CAAC;IAGH,IAAI,QAAQ,EAAE;QAEZ,SAAS,CAAC,YAAY,CAAC,GAAG;YACxB,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC5B,QAAQ,EAAE,oBAAoB;SAC/B,CAAC;KACH;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAC3B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxB;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
|
package/lib-esm/text.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export const
|
|
2
|
-
export const
|
|
1
|
+
export const BASELINE_MISSING = 'Baseline stats file is missing, see "baseline" option.';
|
|
2
|
+
export const BASELINE_READING = 'Reading baseline data from';
|
|
3
3
|
export const CLI_NO_COMPARE_MODE = 'Not in compare mode (see --compare).';
|
|
4
4
|
export const CLI_MULTIPLE_STATS = 'Multiple stat files already set.';
|
|
5
5
|
export const CLI_NO_BASELINE = 'Not a baseline job (see --baseline).';
|
package/lib-esm/text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,wDAAwD,CAAC;AACzF,MAAM,CAAC,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;AAE7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,sCAAsC,CAAC;AAC1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,kCAAkC,CAAC;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,sCAAsC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bundle-stats/cli-utils",
|
|
3
|
-
"version": "4.7.0-rc.
|
|
3
|
+
"version": "4.7.0-rc.5",
|
|
4
4
|
"description": "BundleStats CLI utilities",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib-esm/index.js",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"clean-lib": "rimraf lib",
|
|
20
20
|
"clean-esm": "rimraf lib-esm types",
|
|
21
21
|
"lint": "eslint",
|
|
22
|
-
"test": "jest --passWithNoTests src
|
|
22
|
+
"test": "jest --passWithNoTests src"
|
|
23
23
|
},
|
|
24
24
|
"keywords": [],
|
|
25
25
|
"author": {
|
|
@@ -37,28 +37,25 @@
|
|
|
37
37
|
},
|
|
38
38
|
"homepage": "https://github.com/relative-ci/bundle-stats/blob/master/packages/cli-utils#readme",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@bundle-stats/html-templates": "^4.7.0-rc.
|
|
41
|
-
"@bundle-stats/plugin-webpack-filter": "^4.7.0-rc.
|
|
42
|
-
"@bundle-stats/
|
|
43
|
-
"@bundle-stats/utils": "^4.7.0-rc.1",
|
|
44
|
-
"@types/lodash": "4.14.197",
|
|
45
|
-
"core-js": "^3.21.0",
|
|
40
|
+
"@bundle-stats/html-templates": "^4.7.0-rc.5",
|
|
41
|
+
"@bundle-stats/plugin-webpack-filter": "^4.7.0-rc.5",
|
|
42
|
+
"@bundle-stats/utils": "^4.7.0-rc.5",
|
|
46
43
|
"find-cache-dir": "^3.1.0",
|
|
47
|
-
"fs-extra": "^11.0.0",
|
|
48
44
|
"lodash": "^4.17.21",
|
|
49
45
|
"stream-chain": "^2.2.5",
|
|
50
46
|
"stream-json": "^1.8.0"
|
|
51
47
|
},
|
|
52
48
|
"devDependencies": {
|
|
53
49
|
"@types/find-cache-dir": "^3.2.1",
|
|
50
|
+
"@types/lodash": "4.14.198",
|
|
54
51
|
"@types/stream-chain": "^2.0.1",
|
|
55
52
|
"@types/stream-json": "^1.7.3",
|
|
56
|
-
"jest": "29.
|
|
53
|
+
"jest": "29.7.0",
|
|
54
|
+
"jest-cli": "29.7.0",
|
|
55
|
+
"memfs": "4.3.0",
|
|
57
56
|
"rimraf": "5.0.1",
|
|
57
|
+
"ts-jest": "29.1.1",
|
|
58
58
|
"typescript": "5.1.6"
|
|
59
59
|
},
|
|
60
|
-
"
|
|
61
|
-
"lodash": "^4.0.0"
|
|
62
|
-
},
|
|
63
|
-
"gitHead": "9d70faaf31cb3c27db662f7d3ec968cd4e855e67"
|
|
60
|
+
"gitHead": "d873b12d8d852f650060fb0e2a6519db773c71db"
|
|
64
61
|
}
|
package/types/baseline.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
export declare
|
|
2
|
-
export declare
|
|
3
|
-
export declare
|
|
1
|
+
export declare const BASELINE_STATS_DIR: string;
|
|
2
|
+
export declare const BASELINE_STATS_BASE = "baseline.json";
|
|
3
|
+
export declare const getBaselinePath: (outputPath?: string, outputDir?: string, filepath?: string) => string;
|
|
4
|
+
export declare const getBaselineRelativePath: (outputPath?: string, outputDir?: string, filepath?: string) => string;
|
|
5
|
+
export declare function readBaseline(baselineFilepath: string): Promise<object>;
|
|
6
|
+
export declare function writeBaseline(data: JSON, baselineFilepath: string): Promise<void>;
|
package/types/reports.d.ts
CHANGED
|
@@ -11,8 +11,13 @@ export interface ReportOptions {
|
|
|
11
11
|
interface ReportPluginOptions {
|
|
12
12
|
outputPath?: string;
|
|
13
13
|
logger?: Console;
|
|
14
|
-
invalidOptionsUrl?: string;
|
|
15
14
|
}
|
|
16
|
-
|
|
15
|
+
interface ReportAssets {
|
|
16
|
+
[filepath: string]: {
|
|
17
|
+
type: 'report' | 'baseline';
|
|
18
|
+
source: string;
|
|
19
|
+
filepath: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
17
22
|
export declare const generateReports: (source: object, options: ReportOptions, pluginOptions?: ReportPluginOptions) => Promise<ReportAssets>;
|
|
18
23
|
export {};
|
package/types/text.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
export declare const
|
|
1
|
+
export declare const BASELINE_MISSING = "Baseline stats file is missing, see \"baseline\" option.";
|
|
2
|
+
export declare const BASELINE_READING = "Reading baseline data from";
|
|
3
3
|
export declare const CLI_NO_COMPARE_MODE = "Not in compare mode (see --compare).";
|
|
4
4
|
export declare const CLI_MULTIPLE_STATS = "Multiple stat files already set.";
|
|
5
5
|
export declare const CLI_NO_BASELINE = "Not a baseline job (see --baseline).";
|