@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.
Files changed (114) hide show
  1. package/lib/config/index.js +1 -9
  2. package/lib/config/index.js.map +1 -1
  3. package/lib/config/insights.js +7 -5
  4. package/lib/config/insights.js.map +1 -1
  5. package/lib/constants.js +27 -13
  6. package/lib/constants.js.map +1 -1
  7. package/lib/index.js +1 -0
  8. package/lib/index.js.map +1 -1
  9. package/lib/jobs/create-job.js +23 -12
  10. package/lib/jobs/create-job.js.map +1 -1
  11. package/lib/jobs/create-jobs.js +13 -17
  12. package/lib/jobs/create-jobs.js.map +1 -1
  13. package/lib/jobs/create-summary.js +10 -11
  14. package/lib/jobs/create-summary.js.map +1 -1
  15. package/lib/jobs/index.js.map +1 -1
  16. package/lib/lighthouse/filter.js.map +1 -1
  17. package/lib/report/create.js +11 -16
  18. package/lib/report/create.js.map +1 -1
  19. package/lib/utils/component-links.js +3 -3
  20. package/lib/utils/metrics.js.map +1 -1
  21. package/lib/webpack/constants.js +12 -11
  22. package/lib/webpack/constants.js.map +1 -1
  23. package/lib/webpack/extract/assets-size-total-insight.js +5 -5
  24. package/lib/webpack/extract/assets-size-total-insight.js.map +1 -1
  25. package/lib/webpack/extract/assets-size.js +3 -4
  26. package/lib/webpack/extract/assets-size.js.map +1 -1
  27. package/lib/webpack/extract/modules-packages-duplicate.js +117 -41
  28. package/lib/webpack/extract/modules-packages-duplicate.js.map +1 -1
  29. package/lib/webpack/extract/modules-packages.js.map +1 -1
  30. package/lib/webpack/extract/modules.js +0 -2
  31. package/lib/webpack/extract/modules.js.map +1 -1
  32. package/lib/webpack/metrics.js +27 -25
  33. package/lib/webpack/metrics.js.map +1 -1
  34. package/lib/webpack/types.js +24 -0
  35. package/lib/webpack/types.js.map +1 -1
  36. package/lib-esm/config/index.js +0 -8
  37. package/lib-esm/config/index.js.map +1 -1
  38. package/lib-esm/config/insights.js +6 -4
  39. package/lib-esm/config/insights.js.map +1 -1
  40. package/lib-esm/constants.js +26 -12
  41. package/lib-esm/constants.js.map +1 -1
  42. package/lib-esm/index.js +1 -0
  43. package/lib-esm/index.js.map +1 -1
  44. package/lib-esm/jobs/create-job.js +24 -12
  45. package/lib-esm/jobs/create-job.js.map +1 -1
  46. package/lib-esm/jobs/create-jobs.js +13 -14
  47. package/lib-esm/jobs/create-jobs.js.map +1 -1
  48. package/lib-esm/jobs/create-summary.js +10 -11
  49. package/lib-esm/jobs/create-summary.js.map +1 -1
  50. package/lib-esm/jobs/index.js.map +1 -1
  51. package/lib-esm/lighthouse/filter.js.map +1 -1
  52. package/lib-esm/report/create.js +11 -16
  53. package/lib-esm/report/create.js.map +1 -1
  54. package/lib-esm/utils/component-links.js +2 -2
  55. package/lib-esm/utils/metrics.js.map +1 -1
  56. package/lib-esm/webpack/constants.js +12 -11
  57. package/lib-esm/webpack/constants.js.map +1 -1
  58. package/lib-esm/webpack/extract/assets-size-total-insight.js +6 -6
  59. package/lib-esm/webpack/extract/assets-size-total-insight.js.map +1 -1
  60. package/lib-esm/webpack/extract/assets-size.js +3 -4
  61. package/lib-esm/webpack/extract/assets-size.js.map +1 -1
  62. package/lib-esm/webpack/extract/modules-packages-duplicate.js +119 -41
  63. package/lib-esm/webpack/extract/modules-packages-duplicate.js.map +1 -1
  64. package/lib-esm/webpack/extract/modules-packages.js.map +1 -1
  65. package/lib-esm/webpack/extract/modules.js +0 -3
  66. package/lib-esm/webpack/extract/modules.js.map +1 -1
  67. package/lib-esm/webpack/metrics.js +27 -25
  68. package/lib-esm/webpack/metrics.js.map +1 -1
  69. package/lib-esm/webpack/types.js +23 -1
  70. package/lib-esm/webpack/types.js.map +1 -1
  71. package/package.json +13 -12
  72. package/src/config/index.js +0 -9
  73. package/src/config/insights.ts +5 -0
  74. package/src/constants.ts +82 -15
  75. package/src/index.js +1 -0
  76. package/src/jobs/create-job.ts +61 -0
  77. package/src/jobs/create-jobs.ts +28 -0
  78. package/src/jobs/create-summary.ts +22 -0
  79. package/src/jobs/{index.js → index.ts} +0 -0
  80. package/src/lighthouse/filter.js +8 -5
  81. package/src/report/create.ts +31 -24
  82. package/src/utils/component-links.ts +2 -2
  83. package/src/utils/metrics.js +8 -7
  84. package/src/webpack/constants.js +13 -11
  85. package/src/webpack/extract/assets-size-total-insight.js +6 -7
  86. package/src/webpack/extract/assets-size.js +29 -24
  87. package/src/webpack/extract/modules-packages-duplicate.ts +241 -0
  88. package/src/webpack/extract/modules-packages.ts +1 -1
  89. package/src/webpack/extract/modules.ts +1 -4
  90. package/src/webpack/metrics.js +27 -25
  91. package/src/webpack/types.ts +31 -7
  92. package/types/config/index.d.ts +0 -4
  93. package/types/config/insights.d.ts +5 -4
  94. package/types/constants.d.ts +68 -15
  95. package/types/index.d.ts +1 -0
  96. package/types/jobs/create-job.d.ts +2 -1
  97. package/types/jobs/create-jobs.d.ts +2 -1
  98. package/types/jobs/create-summary.d.ts +4 -1
  99. package/types/jobs/index.d.ts +2 -2
  100. package/types/lighthouse/filter.d.ts +1 -1
  101. package/types/report/add-row-metric-data.d.ts +10 -1
  102. package/types/report/create.d.ts +14 -12
  103. package/types/utils/component-links.d.ts +1 -1
  104. package/types/utils/metrics.d.ts +1 -1
  105. package/types/webpack/constants.d.ts +2 -1
  106. package/types/webpack/extract/assets-size-total-insight.d.ts +3 -2
  107. package/types/webpack/extract/modules-packages-duplicate.d.ts +9 -16
  108. package/types/webpack/extract/modules-packages.d.ts +1 -1
  109. package/types/webpack/types.d.ts +29 -8
  110. package/src/config/insights.js +0 -5
  111. package/src/jobs/create-job.js +0 -46
  112. package/src/jobs/create-jobs.js +0 -26
  113. package/src/jobs/create-summary.js +0 -16
  114. package/src/webpack/extract/modules-packages-duplicate.js +0 -102
@@ -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' = 0,
3
- 'METRIC_TYPE_SCORE' = 1,
4
- 'METRIC_TYPE_FILE_SIZE' = 2,
5
- 'METRIC_TYPE_DURATION' = 3,
6
- 'METRIC_TYPE_PERCENTAGE' = 4
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' = 0,
19
- 'NEGATIVE' = 1,
20
- 'LOW_NEGATIVE' = 2,
21
- 'NO_CHANGE' = 3,
22
- 'LOW_POSITIVE' = 4,
23
- 'POSITIVE' = 5,
24
- 'HIGH_POSITIVE' = 6
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 interface Metric {
38
- value: number;
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,5 +1,6 @@
1
1
  export * from "./browsertime";
2
2
  export * from "./config";
3
+ export * from "./constants";
3
4
  export * from "./jobs";
4
5
  export * from "./report";
5
6
  export * from "./utils";
@@ -1 +1,2 @@
1
- export function createJob(source: any, baseline: any): {};
1
+ import { JobData, SourceData } from '../constants';
2
+ export declare const createJob: (source: SourceData, baseline?: JobData) => JobData;
@@ -1 +1,2 @@
1
- export function createJobs(sources: any): any;
1
+ import { Job, SourceData } from '../constants';
2
+ export declare const createJobs: (sources: Array<SourceData>) => Array<Job>;
@@ -1 +1,4 @@
1
- export function createSummary(metricPaths: any, baselineSourceMetrics: any, currentSourceMetrics: any): any;
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 {};
@@ -1,2 +1,2 @@
1
- export * from "./create-job";
2
- export * from "./create-jobs";
1
+ export * from './create-job';
2
+ export * from './create-jobs';
@@ -1 +1 @@
1
- export function filter(source: Object): any;
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: any[];
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
  };
@@ -1,14 +1,16 @@
1
- export declare const createReport: (jobs: Array<any>) => {
2
- constructor: Function;
3
- toString(): string;
4
- toLocaleString(): string;
5
- valueOf(): Object;
6
- hasOwnProperty(v: PropertyKey): boolean;
7
- isPrototypeOf(v: Object): boolean;
8
- propertyIsEnumerable(v: PropertyKey): boolean;
9
- insights?: any;
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
- runs: any[];
13
- summary: {};
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 BUNLDE_PACKAGES_COUNT: ComponentLink;
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;
@@ -1,3 +1,3 @@
1
1
  export function createGetMetricType(metrics: Object): Function;
2
2
  export const getGlobalMetricType: Function;
3
- export function getMetricRunInfo(metric: any, currentValue: number, baselineValue: number): any;
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: string[];
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: string;
4
+ type: InsightType;
5
5
  data: {
6
6
  text: string;
7
7
  md: string;
8
- info: any;
8
+ info: import("../..").MetricRunInfo;
9
9
  };
10
10
  };
11
11
  };
12
12
  };
13
+ import { InsightType } from "../../config/insights";
@@ -1,20 +1,13 @@
1
- export function extractModulesPackagesDuplicate(webpackStats: any, currentExtractedData: any): {
2
- metrics: {
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
- type: string;
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: unknown;
4
+ name: string;
5
5
  path: string;
6
6
  } | null;
7
7
  export declare const extractModulesPackages: (_?: unknown, currentExtractedData?: MetricsModules) => MetricsPackages;
@@ -1,9 +1,31 @@
1
- import { Metric, MetricRun } from '../constants';
2
- interface MetaChunk {
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 Metric {
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 Metric {
44
+ export interface Module extends MetricRun {
23
45
  name: string;
24
- chunkIds: Array<string>;
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 Metric {
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 {};
@@ -1,5 +0,0 @@
1
- export const INSIGHT_ERROR = 'ERROR';
2
- export const INSIGHT_INFO = 'INFO';
3
- export const INSIGHT_WARNING = 'WARNING';
4
-
5
- export const INSIGHTS = [INSIGHT_ERROR, INSIGHT_INFO, INSIGHT_WARNING];
@@ -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
- }, {});
@@ -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
- };