@bundle-stats/utils 4.1.7 → 4.1.8

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 (99) hide show
  1. package/lib/config/insights.js +7 -5
  2. package/lib/config/insights.js.map +1 -1
  3. package/lib/constants.js +12 -12
  4. package/lib/constants.js.map +1 -1
  5. package/lib/index.js +1 -0
  6. package/lib/index.js.map +1 -1
  7. package/lib/jobs/create-job.js +21 -10
  8. package/lib/jobs/create-job.js.map +1 -1
  9. package/lib/jobs/create-jobs.js +13 -17
  10. package/lib/jobs/create-jobs.js.map +1 -1
  11. package/lib/jobs/create-summary.js +10 -11
  12. package/lib/jobs/create-summary.js.map +1 -1
  13. package/lib/jobs/index.js.map +1 -1
  14. package/lib/lighthouse/filter.js.map +1 -1
  15. package/lib/report/create.js +10 -15
  16. package/lib/report/create.js.map +1 -1
  17. package/lib/utils/metrics.js.map +1 -1
  18. package/lib/webpack/constants.js +12 -11
  19. package/lib/webpack/constants.js.map +1 -1
  20. package/lib/webpack/extract/assets-size-total-insight.js +5 -5
  21. package/lib/webpack/extract/assets-size-total-insight.js.map +1 -1
  22. package/lib/webpack/extract/assets-size.js +3 -4
  23. package/lib/webpack/extract/assets-size.js.map +1 -1
  24. package/lib/webpack/extract/modules-packages-duplicate.js +26 -36
  25. package/lib/webpack/extract/modules-packages-duplicate.js.map +1 -1
  26. package/lib/webpack/extract/modules-packages.js.map +1 -1
  27. package/lib/webpack/metrics.js +27 -25
  28. package/lib/webpack/metrics.js.map +1 -1
  29. package/lib/webpack/types.js +24 -0
  30. package/lib/webpack/types.js.map +1 -1
  31. package/lib-esm/config/insights.js +6 -4
  32. package/lib-esm/config/insights.js.map +1 -1
  33. package/lib-esm/constants.js +12 -12
  34. package/lib-esm/constants.js.map +1 -1
  35. package/lib-esm/index.js +1 -0
  36. package/lib-esm/index.js.map +1 -1
  37. package/lib-esm/jobs/create-job.js +22 -10
  38. package/lib-esm/jobs/create-job.js.map +1 -1
  39. package/lib-esm/jobs/create-jobs.js +13 -14
  40. package/lib-esm/jobs/create-jobs.js.map +1 -1
  41. package/lib-esm/jobs/create-summary.js +10 -11
  42. package/lib-esm/jobs/create-summary.js.map +1 -1
  43. package/lib-esm/jobs/index.js.map +1 -1
  44. package/lib-esm/lighthouse/filter.js.map +1 -1
  45. package/lib-esm/report/create.js +10 -15
  46. package/lib-esm/report/create.js.map +1 -1
  47. package/lib-esm/utils/metrics.js.map +1 -1
  48. package/lib-esm/webpack/constants.js +12 -11
  49. package/lib-esm/webpack/constants.js.map +1 -1
  50. package/lib-esm/webpack/extract/assets-size-total-insight.js +6 -6
  51. package/lib-esm/webpack/extract/assets-size-total-insight.js.map +1 -1
  52. package/lib-esm/webpack/extract/assets-size.js +3 -4
  53. package/lib-esm/webpack/extract/assets-size.js.map +1 -1
  54. package/lib-esm/webpack/extract/modules-packages-duplicate.js +28 -37
  55. package/lib-esm/webpack/extract/modules-packages-duplicate.js.map +1 -1
  56. package/lib-esm/webpack/extract/modules-packages.js.map +1 -1
  57. package/lib-esm/webpack/metrics.js +27 -25
  58. package/lib-esm/webpack/metrics.js.map +1 -1
  59. package/lib-esm/webpack/types.js +23 -1
  60. package/lib-esm/webpack/types.js.map +1 -1
  61. package/package.json +11 -10
  62. package/src/config/insights.ts +5 -0
  63. package/src/constants.ts +38 -15
  64. package/src/index.js +1 -0
  65. package/src/jobs/create-job.ts +62 -0
  66. package/src/jobs/create-jobs.ts +28 -0
  67. package/src/jobs/create-summary.ts +22 -0
  68. package/src/jobs/{index.js → index.ts} +0 -0
  69. package/src/lighthouse/filter.js +8 -5
  70. package/src/report/create.ts +31 -23
  71. package/src/utils/metrics.js +8 -7
  72. package/src/webpack/constants.js +13 -11
  73. package/src/webpack/extract/assets-size-total-insight.js +6 -7
  74. package/src/webpack/extract/assets-size.js +29 -24
  75. package/src/webpack/extract/modules-packages-duplicate.ts +105 -0
  76. package/src/webpack/extract/modules-packages.ts +1 -1
  77. package/src/webpack/metrics.js +27 -25
  78. package/src/webpack/types.ts +30 -5
  79. package/types/config/insights.d.ts +5 -4
  80. package/types/constants.d.ts +33 -15
  81. package/types/index.d.ts +1 -0
  82. package/types/jobs/create-job.d.ts +2 -1
  83. package/types/jobs/create-jobs.d.ts +2 -1
  84. package/types/jobs/create-summary.d.ts +4 -1
  85. package/types/jobs/index.d.ts +2 -2
  86. package/types/lighthouse/filter.d.ts +1 -1
  87. package/types/report/add-row-metric-data.d.ts +10 -1
  88. package/types/report/create.d.ts +14 -12
  89. package/types/utils/metrics.d.ts +1 -1
  90. package/types/webpack/constants.d.ts +2 -1
  91. package/types/webpack/extract/assets-size-total-insight.d.ts +3 -2
  92. package/types/webpack/extract/modules-packages-duplicate.d.ts +5 -4
  93. package/types/webpack/extract/modules-packages.d.ts +1 -1
  94. package/types/webpack/types.d.ts +28 -6
  95. package/src/config/insights.js +0 -5
  96. package/src/jobs/create-job.js +0 -46
  97. package/src/jobs/create-jobs.js +0 -26
  98. package/src/jobs/create-summary.js +0 -16
  99. package/src/webpack/extract/modules-packages-duplicate.js +0 -102
@@ -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 {};
@@ -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,21 @@
1
- export function extractModulesPackagesDuplicate(webpackStats: any, currentExtractedData: any): {
1
+ import { InsightType } from '../../config';
2
+ export declare const extractModulesPackagesDuplicate: (_: any, currentExtractedData: any) => {
2
3
  metrics: {
3
4
  duplicatePackagesCount: {
4
- value: any;
5
+ value: number;
5
6
  };
6
7
  };
7
8
  insights?: undefined;
8
9
  } | {
9
10
  insights: {
10
11
  duplicatePackages: {
11
- type: string;
12
+ type: InsightType;
12
13
  data: {};
13
14
  };
14
15
  };
15
16
  metrics: {
16
17
  duplicatePackagesCount: {
17
- value: any;
18
+ value: number;
18
19
  };
19
20
  };
20
21
  };
@@ -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,7 +41,7 @@ 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
46
  chunkIds: Array<String>;
25
47
  duplicated: boolean;
@@ -33,7 +55,8 @@ export interface MetricsModules {
33
55
  moduleCount: MetricRun;
34
56
  };
35
57
  }
36
- export interface Package extends Metric {
58
+ export interface Package extends MetricRun {
59
+ name: string;
37
60
  path: string;
38
61
  }
39
62
  export type Packages = Record<string, Package>;
@@ -42,4 +65,3 @@ export interface MetricsPackages {
42
65
  packages: Packages;
43
66
  };
44
67
  }
45
- 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
- };