@bundle-stats/utils 3.4.0-beta.0 → 4.0.0-alpha.14

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 (94) hide show
  1. package/lib/constants.js +1 -8
  2. package/lib/constants.js.map +1 -1
  3. package/lib/index.js +0 -15
  4. package/lib/index.js.map +1 -1
  5. package/lib/jobs/create-job.js +2 -2
  6. package/lib/jobs/create-job.js.map +1 -1
  7. package/lib/jobs/create-jobs.js +2 -2
  8. package/lib/jobs/create-jobs.js.map +1 -1
  9. package/lib/report/create.js +2 -4
  10. package/lib/report/create.js.map +1 -1
  11. package/lib/utils/format.js +12 -4
  12. package/lib/utils/format.js.map +1 -1
  13. package/lib/webpack/constants.js +14 -28
  14. package/lib/webpack/constants.js.map +1 -1
  15. package/lib/webpack/extract/assets-size-total-insight.js +4 -4
  16. package/lib/webpack/extract/assets-size-total-insight.js.map +1 -1
  17. package/lib/webpack/extract/assets-size.js +4 -3
  18. package/lib/webpack/extract/assets-size.js.map +1 -1
  19. package/lib/webpack/extract/assets.js +4 -4
  20. package/lib/webpack/extract/assets.js.map +1 -1
  21. package/lib/webpack/extract/index.js +1 -26
  22. package/lib/webpack/extract/index.js.map +1 -1
  23. package/lib/webpack/extract/modules-packages-duplicate.js +3 -3
  24. package/lib/webpack/extract/modules-packages-duplicate.js.map +1 -1
  25. package/lib/webpack/extract/modules-packages.js +1 -2
  26. package/lib/webpack/extract/modules-packages.js.map +1 -1
  27. package/lib/webpack/extract/modules.js +1 -1
  28. package/lib/webpack/extract/modules.js.map +1 -1
  29. package/lib/webpack/metrics.js +18 -29
  30. package/lib/webpack/metrics.js.map +1 -1
  31. package/lib/webpack/utils.js +1 -1
  32. package/lib/webpack/utils.js.map +1 -1
  33. package/lib-esm/constants.js +0 -7
  34. package/lib-esm/constants.js.map +1 -1
  35. package/lib-esm/index.js +0 -3
  36. package/lib-esm/index.js.map +1 -1
  37. package/lib-esm/jobs/create-job.js +2 -2
  38. package/lib-esm/jobs/create-job.js.map +1 -1
  39. package/lib-esm/jobs/create-jobs.js +2 -2
  40. package/lib-esm/jobs/create-jobs.js.map +1 -1
  41. package/lib-esm/utils/format.js +12 -4
  42. package/lib-esm/utils/format.js.map +1 -1
  43. package/lib-esm/webpack/constants.js +13 -27
  44. package/lib-esm/webpack/constants.js.map +1 -1
  45. package/lib-esm/webpack/extract/assets-size-total-insight.js +4 -4
  46. package/lib-esm/webpack/extract/assets-size-total-insight.js.map +1 -1
  47. package/lib-esm/webpack/extract/assets-size.js +4 -3
  48. package/lib-esm/webpack/extract/assets-size.js.map +1 -1
  49. package/lib-esm/webpack/extract/index.js +1 -3
  50. package/lib-esm/webpack/extract/index.js.map +1 -1
  51. package/lib-esm/webpack/extract/modules-packages-duplicate.js +2 -2
  52. package/lib-esm/webpack/extract/modules-packages-duplicate.js.map +1 -1
  53. package/lib-esm/webpack/metrics.js +18 -29
  54. package/lib-esm/webpack/metrics.js.map +1 -1
  55. package/package.json +12 -12
  56. package/src/constants.ts +0 -7
  57. package/src/index.js +0 -2
  58. package/src/jobs/create-job.js +2 -2
  59. package/src/jobs/create-jobs.js +2 -2
  60. package/src/utils/format.js +17 -4
  61. package/src/webpack/{constants.ts → constants.js} +13 -28
  62. package/src/webpack/extract/assets-size-total-insight.js +4 -4
  63. package/src/webpack/extract/assets-size.js +5 -3
  64. package/src/webpack/extract/index.js +5 -7
  65. package/src/webpack/extract/modules-packages-duplicate.js +2 -2
  66. package/src/webpack/{metrics.ts → metrics.js} +18 -29
  67. package/types/constants.d.ts +0 -6
  68. package/types/index.d.ts +0 -2
  69. package/types/jobs/create-job.d.ts +1 -1
  70. package/types/jobs/create-jobs.d.ts +1 -1
  71. package/types/report/add-row-metric-data.d.ts +1 -1
  72. package/types/webpack/constants.d.ts +9 -33
  73. package/types/webpack/extract/index.d.ts +1 -1
  74. package/types/webpack/extract/modules-packages-duplicate.d.ts +1 -2
  75. package/types/webpack/extract/modules-packages.d.ts +1 -1
  76. package/types/webpack/metrics.d.ts +153 -116
  77. package/lib/transformers/budgets-insights.js +0 -133
  78. package/lib/transformers/budgets-insights.js.map +0 -1
  79. package/lib/transformers/index.js +0 -28
  80. package/lib/transformers/index.js.map +0 -1
  81. package/lib/types.js +0 -3
  82. package/lib/types.js.map +0 -1
  83. package/lib-esm/transformers/budgets-insights.js +0 -126
  84. package/lib-esm/transformers/budgets-insights.js.map +0 -1
  85. package/lib-esm/transformers/index.js +0 -3
  86. package/lib-esm/transformers/index.js.map +0 -1
  87. package/lib-esm/types.js +0 -2
  88. package/lib-esm/types.js.map +0 -1
  89. package/src/transformers/budgets-insights.ts +0 -212
  90. package/src/transformers/index.ts +0 -1
  91. package/src/types.ts +0 -14
  92. package/types/transformers/budgets-insights.d.ts +0 -34
  93. package/types/transformers/index.d.ts +0 -1
  94. package/types/types.d.ts +0 -9
@@ -1,212 +0,0 @@
1
- import get from 'lodash/get';
2
- import template from 'lodash/template';
3
-
4
- import * as types from '../types';
5
- import { InsightType } from '../constants';
6
- import { getGlobalMetricType } from '../utils';
7
-
8
- interface OptionBudgetMetric {
9
- metric: string;
10
- value: number;
11
- }
12
-
13
- interface Options {
14
- budgets?: Array<OptionBudgetMetric>;
15
- }
16
-
17
- interface BudgetInsightMetricData {
18
- currentValue: number;
19
- budgetValue: number;
20
- failed: boolean;
21
- }
22
-
23
- interface BudgetInsightMetric {
24
- /** Metric budget insight type */
25
- type: InsightType;
26
- message: {
27
- text: string;
28
- md: string;
29
- };
30
- /** Metric budget check data */
31
- data: BudgetInsightMetricData;
32
- }
33
-
34
- interface BudgetInsight extends types.Insight {
35
- data: {
36
- [metricId: string]: BudgetInsightMetric;
37
- };
38
- }
39
-
40
- interface BudgetsInsightsOutput {
41
- insights: {
42
- budgets: BudgetInsight;
43
- };
44
- }
45
-
46
- const resolveType = (insights: Array<[string, BudgetInsightMetric]>): InsightType => {
47
- if (insights.find(([_, { type }]) => type === InsightType.ERROR)) {
48
- return InsightType.ERROR;
49
- }
50
-
51
- if (insights.find(([_, { type }]) => type === InsightType.WARNING)) {
52
- return InsightType.WARNING;
53
- }
54
-
55
- return InsightType.SUCCESS;
56
- };
57
-
58
- // 3/3 budget checks passed
59
- // 2/3 budget checks failed
60
- // 1 failed, 1 warning, 2 success
61
-
62
- const budgetInsightTemplate = template(
63
- '<%= count %>/<%= total %> budget checks <%= status %>'
64
- );
65
-
66
- const resolveStatus = (failedCount: number, warningCount: number): string => {
67
- if (failedCount) {
68
- return 'failed';
69
- }
70
-
71
- if (warningCount) {
72
- return 'warned';
73
- }
74
-
75
- return 'passed';
76
- };
77
-
78
- const getMessage = (insights: Array<[string, BudgetInsightMetric]>) => {
79
- const total = insights.length;
80
- const failedCount = insights.filter(([___, insight]) => insight.type === InsightType.ERROR).length;
81
- const warningCount = insights.filter(([___, insight]) => insight.type === InsightType.WARNING).length;
82
- const count = failedCount || warningCount || total;
83
- const status = resolveStatus(failedCount, warningCount);
84
-
85
- return {
86
- text: budgetInsightTemplate({
87
- count,
88
- total,
89
- status,
90
- }),
91
- md: budgetInsightTemplate({
92
- count: `**${count}**`,
93
- total: `**${total}**`,
94
- status,
95
- }),
96
- };
97
- };
98
-
99
- const budgetInsightMetricTemplate = template(
100
- // Add escapes for (|) to avoid lodash.template syntax errors
101
- // eslint-disable-next-line no-useless-escape
102
- '<%= metricLabel %> is <%= diffLabel %> budget \(<%= currentValue %> / <%= budgetValue %>\)',
103
- );
104
-
105
- const resolveDiffLabel = (metricBudgetInsight: BudgetInsightMetricData): string => {
106
- const { currentValue, budgetValue } = metricBudgetInsight;
107
-
108
- if (currentValue > budgetValue) {
109
- return 'above';
110
- }
111
-
112
- if (currentValue < budgetValue) {
113
- return 'below';
114
- }
115
-
116
- return 'equal with';
117
- };
118
-
119
- const resolveBudgetInsightMetricType = (metricBudgetInsight: BudgetInsightMetricData): InsightType => {
120
- if (metricBudgetInsight.failed) {
121
- return InsightType.ERROR;
122
- }
123
-
124
- if (metricBudgetInsight.currentValue === metricBudgetInsight.budgetValue) {
125
- return InsightType.WARNING;
126
- }
127
-
128
- return InsightType.SUCCESS;
129
- };
130
-
131
- export const getExtract =
132
- (source: string) => (
133
- _: unknown,
134
- currentExtractedData: any,
135
- __: unknown,
136
- options: Options = {},
137
- ): BudgetsInsightsOutput | null => {
138
- const { budgets: budgetsOptions } = options;
139
-
140
- if (!budgetsOptions) {
141
- return null;
142
- }
143
-
144
- const insights: Array<[string, BudgetInsightMetric]> = [];
145
-
146
- budgetsOptions.forEach((budgetOption) => {
147
- const { metric: sourceMetricId, value: budgetValue } = budgetOption;
148
- const currentValue = get(currentExtractedData, `metrics.${sourceMetricId}.value`);
149
- const metricData = getGlobalMetricType(`${source}.${sourceMetricId}`);
150
-
151
- if (!currentValue) {
152
- return;
153
- }
154
-
155
- const isValueOverBudget = currentValue > budgetValue;
156
- const failed = metricData.biggerIsBetter ? !isValueOverBudget : isValueOverBudget;
157
-
158
- const budgetInsightMetricData = {
159
- currentValue,
160
- budgetValue,
161
- failed,
162
- };
163
-
164
- // Message template data
165
- const diffLabel = resolveDiffLabel(budgetInsightMetricData);
166
- const type = resolveBudgetInsightMetricType(budgetInsightMetricData);
167
- const currentFormattedValue = metricData.formatter(currentValue);
168
- const budgetFormattedValue = metricData.formatter(budgetValue);
169
-
170
- const messageText = budgetInsightMetricTemplate({
171
- metricLabel: metricData.label,
172
- currentValue: currentFormattedValue,
173
- diffLabel,
174
- budgetValue: budgetFormattedValue,
175
- });
176
- const messageMd = budgetInsightMetricTemplate({
177
- metricLabel: `**${metricData.label}**`,
178
- currentValue: `**${currentFormattedValue}**`,
179
- diffLabel,
180
- budgetValue: `**${budgetFormattedValue}**`,
181
- });
182
-
183
- insights.push([
184
- sourceMetricId,
185
- {
186
- type,
187
- message: {
188
- text: messageText,
189
- md: messageMd,
190
- },
191
- data: budgetInsightMetricData,
192
- },
193
- ]);
194
- });
195
-
196
- if (insights.length === 0) {
197
- return null;
198
- }
199
-
200
- const type = resolveType(insights);
201
- const message = getMessage(insights);
202
-
203
- return {
204
- insights: {
205
- budgets: {
206
- type,
207
- message,
208
- data: Object.fromEntries(insights),
209
- },
210
- },
211
- };
212
- };
@@ -1 +0,0 @@
1
- export * as budgetInsights from './budgets-insights';
package/src/types.ts DELETED
@@ -1,14 +0,0 @@
1
- import * as constants from './constants';
2
-
3
- /** Insight v2 structure */
4
- export interface Insight {
5
- type: constants.InsightType;
6
- message: {
7
- /** Insight message text format */
8
- text: string;
9
- /** Insight message markdown format */
10
- md: string;
11
- };
12
- /** Insight specific data */
13
- data: unknown;
14
- }
@@ -1,34 +0,0 @@
1
- import * as types from '../types';
2
- import { InsightType } from '../constants';
3
- interface OptionBudgetMetric {
4
- metric: string;
5
- value: number;
6
- }
7
- interface Options {
8
- budgets?: Array<OptionBudgetMetric>;
9
- }
10
- interface BudgetInsightMetricData {
11
- currentValue: number;
12
- budgetValue: number;
13
- failed: boolean;
14
- }
15
- interface BudgetInsightMetric {
16
- type: InsightType;
17
- message: {
18
- text: string;
19
- md: string;
20
- };
21
- data: BudgetInsightMetricData;
22
- }
23
- interface BudgetInsight extends types.Insight {
24
- data: {
25
- [metricId: string]: BudgetInsightMetric;
26
- };
27
- }
28
- interface BudgetsInsightsOutput {
29
- insights: {
30
- budgets: BudgetInsight;
31
- };
32
- }
33
- export declare const getExtract: (source: string) => (_: unknown, currentExtractedData: any, __: unknown, options?: Options) => BudgetsInsightsOutput | null;
34
- export {};
@@ -1 +0,0 @@
1
- export * as budgetInsights from './budgets-insights';
package/types/types.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import * as constants from './constants';
2
- export interface Insight {
3
- type: constants.InsightType;
4
- message: {
5
- text: string;
6
- md: string;
7
- };
8
- data: unknown;
9
- }