@bundle-stats/utils 4.2.0-beta.0 → 4.2.0-beta.2
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/config/index.js +1 -9
- package/lib/config/index.js.map +1 -1
- package/lib/config/insights.js +7 -5
- package/lib/config/insights.js.map +1 -1
- package/lib/constants.js +27 -13
- package/lib/constants.js.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/jobs/create-job.js +23 -12
- package/lib/jobs/create-job.js.map +1 -1
- package/lib/jobs/create-jobs.js +13 -17
- package/lib/jobs/create-jobs.js.map +1 -1
- package/lib/jobs/create-summary.js +10 -11
- package/lib/jobs/create-summary.js.map +1 -1
- package/lib/jobs/index.js.map +1 -1
- package/lib/lighthouse/filter.js.map +1 -1
- package/lib/report/create.js +11 -16
- package/lib/report/create.js.map +1 -1
- package/lib/utils/component-links.js +3 -3
- package/lib/utils/metrics.js.map +1 -1
- package/lib/webpack/constants.js +12 -11
- package/lib/webpack/constants.js.map +1 -1
- package/lib/webpack/extract/assets-size-total-insight.js +5 -5
- package/lib/webpack/extract/assets-size-total-insight.js.map +1 -1
- package/lib/webpack/extract/assets-size.js +3 -4
- package/lib/webpack/extract/assets-size.js.map +1 -1
- package/lib/webpack/extract/modules-packages-duplicate.js +117 -41
- package/lib/webpack/extract/modules-packages-duplicate.js.map +1 -1
- package/lib/webpack/extract/modules-packages.js.map +1 -1
- package/lib/webpack/extract/modules.js +0 -2
- package/lib/webpack/extract/modules.js.map +1 -1
- package/lib/webpack/metrics.js +27 -25
- package/lib/webpack/metrics.js.map +1 -1
- package/lib/webpack/types.js +24 -0
- package/lib/webpack/types.js.map +1 -1
- package/lib-esm/config/index.js +0 -8
- package/lib-esm/config/index.js.map +1 -1
- package/lib-esm/config/insights.js +6 -4
- package/lib-esm/config/insights.js.map +1 -1
- package/lib-esm/constants.js +26 -12
- package/lib-esm/constants.js.map +1 -1
- package/lib-esm/index.js +1 -0
- package/lib-esm/index.js.map +1 -1
- package/lib-esm/jobs/create-job.js +24 -12
- package/lib-esm/jobs/create-job.js.map +1 -1
- package/lib-esm/jobs/create-jobs.js +13 -14
- package/lib-esm/jobs/create-jobs.js.map +1 -1
- package/lib-esm/jobs/create-summary.js +10 -11
- package/lib-esm/jobs/create-summary.js.map +1 -1
- package/lib-esm/jobs/index.js.map +1 -1
- package/lib-esm/lighthouse/filter.js.map +1 -1
- package/lib-esm/report/create.js +11 -16
- package/lib-esm/report/create.js.map +1 -1
- package/lib-esm/utils/component-links.js +2 -2
- package/lib-esm/utils/metrics.js.map +1 -1
- package/lib-esm/webpack/constants.js +12 -11
- package/lib-esm/webpack/constants.js.map +1 -1
- package/lib-esm/webpack/extract/assets-size-total-insight.js +6 -6
- package/lib-esm/webpack/extract/assets-size-total-insight.js.map +1 -1
- package/lib-esm/webpack/extract/assets-size.js +3 -4
- package/lib-esm/webpack/extract/assets-size.js.map +1 -1
- package/lib-esm/webpack/extract/modules-packages-duplicate.js +119 -41
- package/lib-esm/webpack/extract/modules-packages-duplicate.js.map +1 -1
- package/lib-esm/webpack/extract/modules-packages.js.map +1 -1
- package/lib-esm/webpack/extract/modules.js +0 -3
- package/lib-esm/webpack/extract/modules.js.map +1 -1
- package/lib-esm/webpack/metrics.js +27 -25
- package/lib-esm/webpack/metrics.js.map +1 -1
- package/lib-esm/webpack/types.js +23 -1
- package/lib-esm/webpack/types.js.map +1 -1
- package/package.json +13 -12
- package/src/config/index.js +0 -9
- package/src/config/insights.ts +5 -0
- package/src/constants.ts +82 -15
- package/src/index.js +1 -0
- package/src/jobs/create-job.ts +61 -0
- package/src/jobs/create-jobs.ts +28 -0
- package/src/jobs/create-summary.ts +22 -0
- package/src/jobs/{index.js → index.ts} +0 -0
- package/src/lighthouse/filter.js +8 -5
- package/src/report/create.ts +31 -24
- package/src/utils/component-links.ts +2 -2
- package/src/utils/metrics.js +8 -7
- package/src/webpack/constants.js +13 -11
- package/src/webpack/extract/assets-size-total-insight.js +6 -7
- package/src/webpack/extract/assets-size.js +29 -24
- package/src/webpack/extract/modules-packages-duplicate.ts +241 -0
- package/src/webpack/extract/modules-packages.ts +1 -1
- package/src/webpack/extract/modules.ts +1 -4
- package/src/webpack/metrics.js +27 -25
- package/src/webpack/types.ts +31 -7
- package/types/config/index.d.ts +0 -4
- package/types/config/insights.d.ts +5 -4
- package/types/constants.d.ts +68 -15
- package/types/index.d.ts +1 -0
- package/types/jobs/create-job.d.ts +2 -1
- package/types/jobs/create-jobs.d.ts +2 -1
- package/types/jobs/create-summary.d.ts +4 -1
- package/types/jobs/index.d.ts +2 -2
- package/types/lighthouse/filter.d.ts +1 -1
- package/types/report/add-row-metric-data.d.ts +10 -1
- package/types/report/create.d.ts +14 -12
- package/types/utils/component-links.d.ts +1 -1
- package/types/utils/metrics.d.ts +1 -1
- package/types/webpack/constants.d.ts +2 -1
- package/types/webpack/extract/assets-size-total-insight.d.ts +3 -2
- package/types/webpack/extract/modules-packages-duplicate.d.ts +9 -16
- package/types/webpack/extract/modules-packages.d.ts +1 -1
- package/types/webpack/types.d.ts +29 -8
- package/src/config/insights.js +0 -5
- package/src/jobs/create-job.js +0 -46
- package/src/jobs/create-jobs.js +0 -26
- package/src/jobs/create-summary.js +0 -16
- package/src/webpack/extract/modules-packages-duplicate.js +0 -102
package/types/constants.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
import { InsightType } from './config/insights';
|
|
2
|
+
export declare enum Source {
|
|
3
|
+
webpack = "webpack",
|
|
4
|
+
lighthouse = "lighthouse",
|
|
5
|
+
browsertime = "browsertime"
|
|
6
|
+
}
|
|
7
|
+
export type SourceData = Record<string, unknown>;
|
|
1
8
|
export declare enum MetricTypeType {
|
|
2
|
-
'METRIC_TYPE_NUMERIC' =
|
|
3
|
-
'METRIC_TYPE_SCORE' =
|
|
4
|
-
'METRIC_TYPE_FILE_SIZE' =
|
|
5
|
-
'METRIC_TYPE_DURATION' =
|
|
6
|
-
'METRIC_TYPE_PERCENTAGE' =
|
|
9
|
+
'METRIC_TYPE_NUMERIC' = "METRIC_TYPE_NUMERIC",
|
|
10
|
+
'METRIC_TYPE_SCORE' = "METRIC_TYPE_SCORE",
|
|
11
|
+
'METRIC_TYPE_FILE_SIZE' = "METRIC_TYPE_FILE_SIZE",
|
|
12
|
+
'METRIC_TYPE_DURATION' = "METRIC_TYPE_DURATION",
|
|
13
|
+
'METRIC_TYPE_PERCENTAGE' = "METRIC_TYPE_PERCENTAGE"
|
|
7
14
|
}
|
|
8
15
|
export interface MetricTypeConfig {
|
|
9
16
|
label: string;
|
|
@@ -15,13 +22,13 @@ export interface MetricType extends MetricTypeConfig {
|
|
|
15
22
|
biggerIsBetter: boolean;
|
|
16
23
|
}
|
|
17
24
|
export declare enum MetricRunInfoDeltaType {
|
|
18
|
-
'HIGH_NEGATIVE' =
|
|
19
|
-
'NEGATIVE' =
|
|
20
|
-
'LOW_NEGATIVE' =
|
|
21
|
-
'NO_CHANGE' =
|
|
22
|
-
'LOW_POSITIVE' =
|
|
23
|
-
'POSITIVE' =
|
|
24
|
-
'HIGH_POSITIVE' =
|
|
25
|
+
'HIGH_NEGATIVE' = "HIGH_NEGATIVE",
|
|
26
|
+
'NEGATIVE' = "NEGATIVE",
|
|
27
|
+
'LOW_NEGATIVE' = "LOW_NEGATIVE",
|
|
28
|
+
'NO_CHANGE' = "NO_CHANGE",
|
|
29
|
+
'LOW_POSITIVE' = "LOW_POSITIVE",
|
|
30
|
+
'POSITIVE' = "POSITIVE",
|
|
31
|
+
'HIGH_POSITIVE' = "HIGH_POSITIVE"
|
|
25
32
|
}
|
|
26
33
|
export interface MetricRun {
|
|
27
34
|
value: number;
|
|
@@ -30,12 +37,58 @@ export interface MetricRunInfo {
|
|
|
30
37
|
value: number;
|
|
31
38
|
displayValue: string;
|
|
32
39
|
delta?: number;
|
|
40
|
+
deltaPercentage?: number;
|
|
41
|
+
deltaType?: MetricRunInfoDeltaType;
|
|
33
42
|
displayDelta?: string;
|
|
34
43
|
displayDeltaPercentage?: string;
|
|
35
|
-
deltaType?: MetricRunInfoDeltaType;
|
|
36
44
|
}
|
|
37
|
-
export
|
|
38
|
-
|
|
45
|
+
export type JobSection<T = object> = Record<Source, T>;
|
|
46
|
+
export declare enum JobSectionId {
|
|
47
|
+
meta = "meta",
|
|
48
|
+
insights = "insights",
|
|
49
|
+
summary = "summary",
|
|
50
|
+
metrics = "metrics",
|
|
51
|
+
rawData = "rawData"
|
|
52
|
+
}
|
|
53
|
+
export interface JobSummaryItem {
|
|
54
|
+
baseline: number;
|
|
55
|
+
current: number;
|
|
56
|
+
}
|
|
57
|
+
export interface JobInsight<T = object> {
|
|
58
|
+
type: InsightType;
|
|
59
|
+
data: T;
|
|
60
|
+
}
|
|
61
|
+
export interface JobInsightAssetsSizeTotalData {
|
|
62
|
+
text: string;
|
|
63
|
+
md: string;
|
|
64
|
+
info: MetricRunInfo;
|
|
65
|
+
}
|
|
66
|
+
export type JobInsightDuplicatePackagesData = Record<string, Array<string>>;
|
|
67
|
+
export interface JobInsightDuplicatePackagesV3Data {
|
|
68
|
+
text: string;
|
|
69
|
+
packages: Record<string, Array<string>>;
|
|
70
|
+
}
|
|
71
|
+
export type JobSummarySource = Record<string, JobSummaryItem>;
|
|
72
|
+
export type JobSummary = JobSection<JobSummarySource>;
|
|
73
|
+
export interface JobInsights {
|
|
74
|
+
[Source.webpack]: {
|
|
75
|
+
assetsSizeTotal: JobInsight<JobInsightAssetsSizeTotalData>;
|
|
76
|
+
duplicatePackages?: JobInsight<JobInsightDuplicatePackagesData>;
|
|
77
|
+
duplicatePackagesV3?: JobInsight<JobInsightDuplicatePackagesV3Data>;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export type JobMetricsSource = Record<string, MetricRun | Record<string, MetricRun>>;
|
|
81
|
+
export type JobMetrics = JobSection<JobMetricsSource>;
|
|
82
|
+
export interface JobData {
|
|
83
|
+
[JobSectionId.meta]?: JobSection;
|
|
84
|
+
[JobSectionId.insights]?: JobInsights;
|
|
85
|
+
[JobSectionId.summary]?: JobSummary;
|
|
86
|
+
[JobSectionId.metrics]?: JobMetrics;
|
|
87
|
+
[JobSectionId.rawData]?: JobSection;
|
|
88
|
+
}
|
|
89
|
+
export interface Job extends JobData {
|
|
90
|
+
internalBuildNumber: number;
|
|
91
|
+
label: string;
|
|
39
92
|
}
|
|
40
93
|
export interface LighthouseSource {
|
|
41
94
|
lighthouseVersion: string;
|
package/types/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { JobData, SourceData } from '../constants';
|
|
2
|
+
export declare const createJob: (source: SourceData, baseline?: JobData) => JobData;
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { Job, SourceData } from '../constants';
|
|
2
|
+
export declare const createJobs: (sources: Array<SourceData>) => Array<Job>;
|
|
@@ -1 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { JobMetricsSource, JobSummaryItem } from '../constants';
|
|
2
|
+
type JobSummary = Record<string, JobSummaryItem>;
|
|
3
|
+
export declare const createSummary: (metricPaths: Array<string>, baselineMetricsSource: JobMetricsSource | null | undefined, currentMetricsSource: JobMetricsSource) => JobSummary;
|
|
4
|
+
export {};
|
package/types/jobs/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
1
|
+
export * from './create-job';
|
|
2
|
+
export * from './create-jobs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function filter(source: Object):
|
|
1
|
+
export function filter(source: Object): import('../constants').LighthouseSource;
|
|
@@ -3,6 +3,15 @@ export declare const getAddRowMetricData: (metricType?: string) => (row: types.R
|
|
|
3
3
|
biggerIsBetter: any;
|
|
4
4
|
label: any;
|
|
5
5
|
changed: boolean;
|
|
6
|
-
runs:
|
|
6
|
+
runs: ({
|
|
7
|
+
value: number;
|
|
8
|
+
displayValue: string;
|
|
9
|
+
delta?: number | undefined;
|
|
10
|
+
deltaPercentage?: number | undefined;
|
|
11
|
+
deltaType?: import("..").MetricRunInfoDeltaType | undefined;
|
|
12
|
+
displayDelta?: string | undefined;
|
|
13
|
+
displayDeltaPercentage?: string | undefined;
|
|
14
|
+
name?: string | undefined;
|
|
15
|
+
} | null)[];
|
|
7
16
|
key: string;
|
|
8
17
|
};
|
package/types/report/create.d.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { MetricRunInfo, Job } from '../constants';
|
|
2
|
+
interface ReportMetricRunInfo extends MetricRunInfo {
|
|
3
|
+
label: string;
|
|
4
|
+
}
|
|
5
|
+
type ReportSummary = Record<string, Array<ReportMetricRunInfo>>;
|
|
6
|
+
interface JobRun {
|
|
7
|
+
internalBuildNumber: number;
|
|
8
|
+
}
|
|
9
|
+
interface Report {
|
|
10
10
|
createdAt: string;
|
|
11
11
|
version: string;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
12
|
+
summary: ReportSummary;
|
|
13
|
+
runs: Array<JobRun>;
|
|
14
|
+
}
|
|
15
|
+
export declare const createReport: (jobs: Array<Job>) => Report;
|
|
16
|
+
export {};
|
|
@@ -25,7 +25,7 @@ export declare const BUNDLE_MODULES: ComponentLink;
|
|
|
25
25
|
export declare const BUNDLE_MODULES_DUPLICATE: ComponentLink;
|
|
26
26
|
export declare const getBundleModulesBySearch: (search: string) => ComponentLink;
|
|
27
27
|
export declare const getBundleModulesByChunk: (chunkIds: Array<string>, chunkId: string, fileType?: string) => ComponentLink;
|
|
28
|
-
export declare const
|
|
28
|
+
export declare const BUNDLE_PACKAGES_COUNT: ComponentLink;
|
|
29
29
|
export declare const BUNDLE_PACKAGES_DUPLICATE: ComponentLink;
|
|
30
30
|
export declare const getBundleAssetsFileTypeComponentLink: (fileType: string, label: string) => ComponentLink;
|
|
31
31
|
export declare const getBundlePackagesByNameComponentLink: (search: string) => ComponentLink;
|
package/types/utils/metrics.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export function createGetMetricType(metrics: Object): Function;
|
|
2
2
|
export const getGlobalMetricType: Function;
|
|
3
|
-
export function getMetricRunInfo(metric:
|
|
3
|
+
export function getMetricRunInfo(metric: import('../constants').MetricType, currentValue: number, baselineValue: number): import('../constants').MetricRunInfo;
|
|
@@ -4,6 +4,7 @@ export const SECTION_WEBPACK_ASSETS: "assets";
|
|
|
4
4
|
export const SECTION_WEBPACK_MODULES: "modules";
|
|
5
5
|
export const SECTION_WEBPACK_PACKAGES: "packages";
|
|
6
6
|
export const SECTIONS: string[];
|
|
7
|
-
export const SUMMARY_METRIC_PATHS:
|
|
7
|
+
export const SUMMARY_METRIC_PATHS: Metric[];
|
|
8
8
|
export const MODULE_PATH_PACKAGES: RegExp;
|
|
9
9
|
export const PACKAGE_PATH_NAME: RegExp;
|
|
10
|
+
import { Metric } from "./types";
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
export function extractAssetsSizeTotalInsight(_: any, currentExtractedData: any, baselineBundleStats: any): {
|
|
2
2
|
insights: {
|
|
3
3
|
assetsSizeTotal: {
|
|
4
|
-
type:
|
|
4
|
+
type: InsightType;
|
|
5
5
|
data: {
|
|
6
6
|
text: string;
|
|
7
7
|
md: string;
|
|
8
|
-
info:
|
|
8
|
+
info: import("../..").MetricRunInfo;
|
|
9
9
|
};
|
|
10
10
|
};
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
|
+
import { InsightType } from "../../config/insights";
|
|
@@ -1,20 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
duplicatePackagesCount: {
|
|
4
|
-
value: any;
|
|
5
|
-
};
|
|
6
|
-
};
|
|
7
|
-
insights?: undefined;
|
|
8
|
-
} | {
|
|
1
|
+
import { Job, JobInsight, JobInsightDuplicatePackagesV3Data, JobInsights, MetricRun } from '../../constants';
|
|
2
|
+
interface ModulesPackagesDuplicateData {
|
|
9
3
|
insights: {
|
|
10
|
-
duplicatePackages
|
|
11
|
-
|
|
12
|
-
data: {};
|
|
13
|
-
};
|
|
4
|
+
duplicatePackages?: JobInsights['webpack']['duplicatePackages'];
|
|
5
|
+
duplicatePackagesV3: JobInsights['webpack']['duplicatePackagesV3'];
|
|
14
6
|
};
|
|
15
7
|
metrics: {
|
|
16
|
-
duplicatePackagesCount:
|
|
17
|
-
value: any;
|
|
18
|
-
};
|
|
8
|
+
duplicatePackagesCount: MetricRun;
|
|
19
9
|
};
|
|
20
|
-
}
|
|
10
|
+
}
|
|
11
|
+
export declare const getDuplicatePackagesInsight: (duplicatePackagesMap: Record<string, Array<string>>, baselineDuplicatePackagesMap?: Record<string, Array<string>>) => JobInsight<JobInsightDuplicatePackagesV3Data>;
|
|
12
|
+
export declare const extractModulesPackagesDuplicate: (_: any, currentExtractedData: any, baselineJob?: Job) => ModulesPackagesDuplicateData;
|
|
13
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MetricsModules, MetricsPackages } from '../types';
|
|
2
2
|
export declare const getPackageMetaFromModulePath: (modulePath: string) => {
|
|
3
3
|
id: string;
|
|
4
|
-
name:
|
|
4
|
+
name: string;
|
|
5
5
|
path: string;
|
|
6
6
|
} | null;
|
|
7
7
|
export declare const extractModulesPackages: (_?: unknown, currentExtractedData?: MetricsModules) => MetricsPackages;
|
package/types/webpack/types.d.ts
CHANGED
|
@@ -1,9 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { MetricRun } from '../constants';
|
|
2
|
+
export declare const METRIC_TOTALS_SUFIX_ALL = "ALL";
|
|
3
|
+
export declare const METRIC_TOTALS_PREFIX = "totalSizeByType";
|
|
4
|
+
export declare enum Metric {
|
|
5
|
+
BUNDLE_SIZE = "totalSizeByTypeALL",
|
|
6
|
+
INITIAL_SIZE_JS = "totalInitialSizeJS",
|
|
7
|
+
INITIAL_SIZE_CSS = "totalInitialSizeCSS",
|
|
8
|
+
CACHE_INVALIDATION = "cacheInvalidation",
|
|
9
|
+
ASSET_COUNT = "assetCount",
|
|
10
|
+
CHUNK_COUNT = "chunkCount",
|
|
11
|
+
MODULE_COUNT = "moduleCount",
|
|
12
|
+
DUPLICATE_MODULES_COUNT = "duplicateModulesCount",
|
|
13
|
+
DUPLICATE_CODE = "duplicateCode",
|
|
14
|
+
PACKAGE_COUNT = "packageCount",
|
|
15
|
+
DUPLICATE_PACKAGES_COUNT = "duplicatePackagesCount",
|
|
16
|
+
TOTAL_SIZE_JS = "totalSizeByTypeJS",
|
|
17
|
+
TOTAL_SIZE_CSS = "totalSizeByTypeCSS",
|
|
18
|
+
TOTAL_SIZE_IMG = "totalSizeByTypeIMG",
|
|
19
|
+
TOTAL_SIZE_MEDIA = "totalSizeByTypeMEDIA",
|
|
20
|
+
TOTAL_SIZE_FONT = "totalSizeByTypeFONT",
|
|
21
|
+
TOTAL_SIZE_HTML = "totalSizeByTypeHTML",
|
|
22
|
+
TOTAL_SIZE_OTHER = "totalSizeByTypeOTHER"
|
|
23
|
+
}
|
|
24
|
+
export interface MetaChunk {
|
|
3
25
|
id: string;
|
|
4
26
|
name: string;
|
|
5
27
|
}
|
|
6
|
-
export interface Asset extends
|
|
28
|
+
export interface Asset extends MetricRun {
|
|
7
29
|
name: string;
|
|
8
30
|
isEntry: boolean;
|
|
9
31
|
isInitial: boolean;
|
|
@@ -19,11 +41,10 @@ export interface MetricsAssets {
|
|
|
19
41
|
chunks: Array<MetaChunk>;
|
|
20
42
|
};
|
|
21
43
|
}
|
|
22
|
-
export interface Module extends
|
|
44
|
+
export interface Module extends MetricRun {
|
|
23
45
|
name: string;
|
|
24
|
-
chunkIds: Array<
|
|
46
|
+
chunkIds: Array<String>;
|
|
25
47
|
duplicated: boolean;
|
|
26
|
-
reasons?: Array<string>;
|
|
27
48
|
}
|
|
28
49
|
export type Modules = Record<string, Module>;
|
|
29
50
|
export interface MetricsModules {
|
|
@@ -34,7 +55,8 @@ export interface MetricsModules {
|
|
|
34
55
|
moduleCount: MetricRun;
|
|
35
56
|
};
|
|
36
57
|
}
|
|
37
|
-
export interface Package extends
|
|
58
|
+
export interface Package extends MetricRun {
|
|
59
|
+
name: string;
|
|
38
60
|
path: string;
|
|
39
61
|
}
|
|
40
62
|
export type Packages = Record<string, Package>;
|
|
@@ -43,4 +65,3 @@ export interface MetricsPackages {
|
|
|
43
65
|
packages: Packages;
|
|
44
66
|
};
|
|
45
67
|
}
|
|
46
|
-
export {};
|
package/src/config/insights.js
DELETED
package/src/jobs/create-job.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import get from 'lodash/get';
|
|
2
|
-
import merge from 'lodash/merge';
|
|
3
|
-
import set from 'lodash/set';
|
|
4
|
-
|
|
5
|
-
import { SOURCE_PATHS } from '../config';
|
|
6
|
-
import { createSummary } from './create-summary';
|
|
7
|
-
import * as webpack from '../webpack';
|
|
8
|
-
import * as lighthouse from '../lighthouse';
|
|
9
|
-
import * as browsertime from '../browsertime';
|
|
10
|
-
|
|
11
|
-
const SOURCE_FNS = { webpack, lighthouse, browsertime };
|
|
12
|
-
const GENERIC_PROPS = ['meta', 'insights', 'metrics'];
|
|
13
|
-
|
|
14
|
-
/*
|
|
15
|
-
* Create job from stats
|
|
16
|
-
*/
|
|
17
|
-
export const createJob = (source, baseline) => SOURCE_PATHS.reduce((agg, sourcePath) => {
|
|
18
|
-
const rawData = get(source, sourcePath);
|
|
19
|
-
|
|
20
|
-
if (!rawData) {
|
|
21
|
-
return agg;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const sourceModule = SOURCE_FNS[sourcePath];
|
|
25
|
-
|
|
26
|
-
if (!sourceModule) {
|
|
27
|
-
return agg;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const extractedData = sourceModule.extract(rawData, baseline);
|
|
31
|
-
const summary = createSummary(
|
|
32
|
-
SOURCE_FNS[sourcePath].SUMMARY_METRIC_PATHS,
|
|
33
|
-
get(baseline, `metrics.${sourcePath}`, {}),
|
|
34
|
-
get(extractedData, 'metrics', {}),
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
return merge(
|
|
38
|
-
{},
|
|
39
|
-
agg,
|
|
40
|
-
{ rawData: set({}, sourcePath, rawData) },
|
|
41
|
-
{ summary: set({}, sourcePath, summary) },
|
|
42
|
-
...GENERIC_PROPS.map((genericPropName) => ({
|
|
43
|
-
[genericPropName]: set({}, sourcePath, extractedData[genericPropName]),
|
|
44
|
-
})),
|
|
45
|
-
);
|
|
46
|
-
}, {});
|
package/src/jobs/create-jobs.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import last from 'lodash/last';
|
|
2
|
-
import reverse from 'lodash/reverse';
|
|
3
|
-
|
|
4
|
-
import { createJob } from './create-job';
|
|
5
|
-
|
|
6
|
-
/*
|
|
7
|
-
* Create jobs from sources
|
|
8
|
-
*/
|
|
9
|
-
export const createJobs = (sources) => {
|
|
10
|
-
const jobs = reverse([...sources]).reduce((agg, source, idx) => {
|
|
11
|
-
const job = createJob(source, last(agg));
|
|
12
|
-
const internalBuildNumber = job.internalBuildNumber || idx + 1;
|
|
13
|
-
const label = `Job #${internalBuildNumber}`;
|
|
14
|
-
|
|
15
|
-
return [
|
|
16
|
-
{
|
|
17
|
-
...job,
|
|
18
|
-
internalBuildNumber,
|
|
19
|
-
label,
|
|
20
|
-
},
|
|
21
|
-
...agg,
|
|
22
|
-
];
|
|
23
|
-
}, []);
|
|
24
|
-
|
|
25
|
-
return jobs;
|
|
26
|
-
};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import get from 'lodash/get';
|
|
2
|
-
import merge from 'lodash/merge';
|
|
3
|
-
|
|
4
|
-
export const createSummary = (
|
|
5
|
-
metricPaths, baselineSourceMetrics, currentSourceMetrics,
|
|
6
|
-
) => metricPaths.map((metric) => {
|
|
7
|
-
const baselineValue = get(baselineSourceMetrics, `${metric}.value`, 0);
|
|
8
|
-
const currentValue = get(currentSourceMetrics, `${metric}.value`, 0);
|
|
9
|
-
|
|
10
|
-
return {
|
|
11
|
-
[metric]: {
|
|
12
|
-
baseline: baselineValue,
|
|
13
|
-
current: currentValue,
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
}).reduce((agg, current) => merge({}, agg, current), {});
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import get from 'lodash/get';
|
|
2
|
-
import map from 'lodash/map';
|
|
3
|
-
import orderBy from 'lodash/orderBy';
|
|
4
|
-
import sum from 'lodash/sum';
|
|
5
|
-
|
|
6
|
-
import { INSIGHT_WARNING } from '../../config';
|
|
7
|
-
|
|
8
|
-
export const extractModulesPackagesDuplicate = (webpackStats, currentExtractedData) => {
|
|
9
|
-
const source = get(currentExtractedData, 'metrics.packages', {});
|
|
10
|
-
|
|
11
|
-
// Group packages by the public name
|
|
12
|
-
const packagesByName = Object.entries(source).reduce((agg, [packageId, packageData]) => {
|
|
13
|
-
const { name } = packageData;
|
|
14
|
-
const existingPackageData = agg[name];
|
|
15
|
-
|
|
16
|
-
return {
|
|
17
|
-
...agg,
|
|
18
|
-
[name]: {
|
|
19
|
-
...existingPackageData,
|
|
20
|
-
children: [
|
|
21
|
-
...(existingPackageData?.children || []),
|
|
22
|
-
{
|
|
23
|
-
name: packageId,
|
|
24
|
-
value: packageData.value,
|
|
25
|
-
},
|
|
26
|
-
],
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
}, {});
|
|
30
|
-
|
|
31
|
-
// Filter, sum and count duplicate packages
|
|
32
|
-
const { count, duplicatePackages } = Object.entries(packagesByName).reduce(
|
|
33
|
-
(agg, [name, data]) => {
|
|
34
|
-
// Count duplicate instances (substract the initial instance)
|
|
35
|
-
// example: package-a, package-b:package-a -> duplicateInstances = 1
|
|
36
|
-
const duplicateInstances = data.children.length - 1;
|
|
37
|
-
|
|
38
|
-
// No duplicates, skip
|
|
39
|
-
if (duplicateInstances === 0) {
|
|
40
|
-
return agg;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return {
|
|
44
|
-
count: agg.count + duplicateInstances,
|
|
45
|
-
duplicatePackages: [
|
|
46
|
-
...(agg.duplicatePackages || []),
|
|
47
|
-
{
|
|
48
|
-
name,
|
|
49
|
-
value: sum(map(data.children, 'value')),
|
|
50
|
-
...data,
|
|
51
|
-
},
|
|
52
|
-
],
|
|
53
|
-
};
|
|
54
|
-
},
|
|
55
|
-
{ count: 0, duplicatePackages: [] },
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
if (!count) {
|
|
59
|
-
return {
|
|
60
|
-
metrics: {
|
|
61
|
-
duplicatePackagesCount: {
|
|
62
|
-
value: count,
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const duplicatePackagesByName = orderBy(duplicatePackages, 'value', 'desc').reduce(
|
|
69
|
-
(agg, { name, ...duplicatePackageData }) => ({
|
|
70
|
-
...agg,
|
|
71
|
-
[name]: {
|
|
72
|
-
...duplicatePackageData,
|
|
73
|
-
children: orderBy(duplicatePackageData.children, 'value', 'desc'),
|
|
74
|
-
},
|
|
75
|
-
}),
|
|
76
|
-
{},
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
// Generate v2 data structure
|
|
80
|
-
// @TODO remove in v3.0
|
|
81
|
-
const data = Object.entries(duplicatePackagesByName).reduce(
|
|
82
|
-
(agg, [packageName, duplicatePackageData]) => ({
|
|
83
|
-
...agg,
|
|
84
|
-
[packageName]: duplicatePackageData.children.map(({ name }) => name),
|
|
85
|
-
}),
|
|
86
|
-
{},
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
return {
|
|
90
|
-
insights: {
|
|
91
|
-
duplicatePackages: {
|
|
92
|
-
type: INSIGHT_WARNING,
|
|
93
|
-
data,
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
metrics: {
|
|
97
|
-
duplicatePackagesCount: {
|
|
98
|
-
value: count,
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
};
|