@bundle-stats/utils 3.3.0-alpha.0 → 3.3.0-alpha.1

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 (37) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/lib/constants.js +8 -1
  3. package/lib/constants.js.map +1 -1
  4. package/lib/index.js +15 -0
  5. package/lib/index.js.map +1 -1
  6. package/lib/transformers/budgets-insights.js +85 -0
  7. package/lib/transformers/budgets-insights.js.map +1 -0
  8. package/lib/transformers/index.js +24 -0
  9. package/lib/transformers/index.js.map +1 -0
  10. package/lib/webpack/extract/index.js +21 -2
  11. package/lib/webpack/extract/index.js.map +1 -1
  12. package/lib/webpack/extract/modules-packages-duplicate.js +2 -2
  13. package/lib/webpack/extract/modules-packages-duplicate.js.map +1 -1
  14. package/lib-esm/constants.js +7 -0
  15. package/lib-esm/constants.js.map +1 -1
  16. package/lib-esm/index.js +3 -0
  17. package/lib-esm/index.js.map +1 -1
  18. package/lib-esm/transformers/budgets-insights.js +77 -0
  19. package/lib-esm/transformers/budgets-insights.js.map +1 -0
  20. package/lib-esm/transformers/index.js +3 -0
  21. package/lib-esm/transformers/index.js.map +1 -0
  22. package/lib-esm/webpack/extract/index.js +2 -2
  23. package/lib-esm/webpack/extract/index.js.map +1 -1
  24. package/lib-esm/webpack/extract/modules-packages-duplicate.js +2 -2
  25. package/lib-esm/webpack/extract/modules-packages-duplicate.js.map +1 -1
  26. package/package.json +4 -4
  27. package/src/constants.ts +7 -0
  28. package/src/index.js +2 -0
  29. package/src/transformers/budgets-insights.ts +143 -0
  30. package/src/transformers/index.ts +1 -0
  31. package/src/webpack/extract/index.js +6 -9
  32. package/src/webpack/extract/modules-packages-duplicate.js +2 -2
  33. package/types/constants.d.ts +6 -0
  34. package/types/index.d.ts +2 -0
  35. package/types/transformers/budgets-insights.d.ts +36 -0
  36. package/types/transformers/index.d.ts +1 -0
  37. package/types/webpack/extract/modules-packages-duplicate.d.ts +2 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.3.0-alpha.1](https://github.com/relative-ci/bundle-stats/compare/v3.3.0-alpha.0...v3.3.0-alpha.1) (2021-12-19)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **utils:** Budgets - take biggerIsBetter in consideration ([3df8abc](https://github.com/relative-ci/bundle-stats/commit/3df8abc2bcd27c8e56d62412749c6c9f2c02feba))
12
+ * **utils:** Export constants ([e65ecc1](https://github.com/relative-ci/bundle-stats/commit/e65ecc1df145af0b292f4a1104c69a03fe89b902))
13
+
14
+
15
+ ### Features
16
+
17
+ * **utils:** BudgetsInsights - add getInfo ([7bd6763](https://github.com/relative-ci/bundle-stats/commit/7bd6763263e209de6c85e7b0e37ccdd36aa52080))
18
+
19
+
20
+
21
+
22
+
6
23
  # [3.3.0-alpha.0](https://github.com/relative-ci/bundle-stats/compare/v3.2.2...v3.3.0-alpha.0) (2021-12-17)
7
24
 
8
25
 
package/lib/constants.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MetricRunInfoDeltaType = exports.MetricTypeType = void 0;
3
+ exports.InsightType = exports.MetricRunInfoDeltaType = exports.MetricTypeType = void 0;
4
4
  var MetricTypeType;
5
5
  (function (MetricTypeType) {
6
6
  MetricTypeType[MetricTypeType["METRIC_TYPE_NUMERIC"] = 0] = "METRIC_TYPE_NUMERIC";
@@ -19,4 +19,11 @@ var MetricRunInfoDeltaType;
19
19
  MetricRunInfoDeltaType[MetricRunInfoDeltaType["POSITIVE"] = 5] = "POSITIVE";
20
20
  MetricRunInfoDeltaType[MetricRunInfoDeltaType["HIGH_POSITIVE"] = 6] = "HIGH_POSITIVE";
21
21
  })(MetricRunInfoDeltaType = exports.MetricRunInfoDeltaType || (exports.MetricRunInfoDeltaType = {}));
22
+ var InsightType;
23
+ (function (InsightType) {
24
+ InsightType["ERROR"] = "ERROR";
25
+ InsightType["WARNING"] = "WARNING";
26
+ InsightType["INFO"] = "INFO";
27
+ InsightType["SUCCESS"] = "SUCCESS";
28
+ })(InsightType = exports.InsightType || (exports.InsightType = {}));
22
29
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,iFAAqB,CAAA;IACrB,6EAAmB,CAAA;IACnB,qFAAuB,CAAA;IACvB,mFAAsB,CAAA;IACtB,uFAAwB,CAAA;AAC1B,CAAC,EANW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAMzB;AAaD,IAAY,sBAQX;AARD,WAAY,sBAAsB;IAChC,qFAAe,CAAA;IACf,2EAAU,CAAA;IACV,mFAAc,CAAA;IACd,6EAAW,CAAA;IACX,mFAAc,CAAA;IACd,2EAAU,CAAA;IACV,qFAAe,CAAA;AACjB,CAAC,EARW,sBAAsB,GAAtB,8BAAsB,KAAtB,8BAAsB,QAQjC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,iFAAqB,CAAA;IACrB,6EAAmB,CAAA;IACnB,qFAAuB,CAAA;IACvB,mFAAsB,CAAA;IACtB,uFAAwB,CAAA;AAC1B,CAAC,EANW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAMzB;AAaD,IAAY,sBAQX;AARD,WAAY,sBAAsB;IAChC,qFAAe,CAAA;IACf,2EAAU,CAAA;IACV,mFAAc,CAAA;IACd,6EAAW,CAAA;IACX,mFAAc,CAAA;IACd,2EAAU,CAAA;IACV,qFAAe,CAAA;AACjB,CAAC,EARW,sBAAsB,GAAtB,8BAAsB,KAAtB,8BAAsB,QAQjC;AA0ID,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,kCAAmB,CAAA;IACnB,4BAAa,CAAA;IACb,kCAAmB,CAAA;AACrB,CAAC,EALW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAKtB"}
package/lib/index.js CHANGED
@@ -6,13 +6,28 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
6
6
  if (k2 === undefined) k2 = k;
7
7
  o[k2] = m[k];
8
8
  }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
9
14
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
15
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
16
  };
17
+ var __importStar = (this && this.__importStar) || function (mod) {
18
+ if (mod && mod.__esModule) return mod;
19
+ var result = {};
20
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
21
+ __setModuleDefault(result, mod);
22
+ return result;
23
+ };
12
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.transformers = void 0;
13
26
  __exportStar(require("./browsertime"), exports);
14
27
  __exportStar(require("./config"), exports);
28
+ __exportStar(require("./constants"), exports);
15
29
  __exportStar(require("./jobs"), exports);
16
30
  __exportStar(require("./report"), exports);
17
31
  __exportStar(require("./utils"), exports);
32
+ exports.transformers = __importStar(require("./transformers"));
18
33
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gDAA8B;AAC9B,2CAAyB;AAEzB,yCAAuB;AACvB,2CAAyB;AACzB,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,2CAAyB;AACzB,8CAA4B;AAE5B,yCAAuB;AACvB,2CAAyB;AACzB,0CAAwB;AACxB,+DAA+C"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getInfo = exports.INFO_MESSAGE_TEMPLATE = exports.getExtract = void 0;
7
+ const get_1 = __importDefault(require("lodash/get"));
8
+ const constants_1 = require("../constants");
9
+ const utils_1 = require("../utils");
10
+ const getExtract = (source) => (_, currentExtractedData, __, options = {}) => {
11
+ const { budgets: budgetsOptions } = options;
12
+ if (!budgetsOptions) {
13
+ return null;
14
+ }
15
+ const insights = [];
16
+ budgetsOptions.forEach((budgetOption) => {
17
+ const { metric: budgetMetricId, value: budgetValue } = budgetOption;
18
+ const currentValue = (0, get_1.default)(currentExtractedData, `metrics.${budgetMetricId}.value`);
19
+ const metric = (0, utils_1.getGlobalMetricType)(`${source}.${budgetMetricId}`);
20
+ if (!currentValue) {
21
+ return;
22
+ }
23
+ const isValueOverBudget = currentValue > budgetValue;
24
+ const budgetInsight = {
25
+ currentValue,
26
+ budgetValue,
27
+ failed: metric.biggerIsBetter ? !isValueOverBudget : isValueOverBudget,
28
+ };
29
+ insights.push([budgetMetricId, budgetInsight]);
30
+ });
31
+ if (insights.length === 0) {
32
+ return null;
33
+ }
34
+ return {
35
+ insights: {
36
+ budgets: Object.fromEntries(insights),
37
+ },
38
+ };
39
+ };
40
+ exports.getExtract = getExtract;
41
+ const resolveDiffLabel = (budgetInsight) => {
42
+ const { currentValue, budgetValue } = budgetInsight;
43
+ if (currentValue > budgetValue) {
44
+ return 'over';
45
+ }
46
+ if (currentValue < budgetValue) {
47
+ return 'under';
48
+ }
49
+ return 'equal with';
50
+ };
51
+ const resolveType = (budgetInsight) => {
52
+ if (budgetInsight.failed) {
53
+ return constants_1.InsightType.ERROR;
54
+ }
55
+ if (budgetInsight.currentValue === budgetInsight.budgetValue) {
56
+ return constants_1.InsightType.WARNING;
57
+ }
58
+ return constants_1.InsightType.SUCCESS;
59
+ };
60
+ exports.INFO_MESSAGE_TEMPLATE = '<%= metricLabel %> value \(<%= currentValue %>\) is <%= diffLabel %> <%= budgetValue %> budget';
61
+ const getInfo = (globalMetricId, budgetInsight) => {
62
+ const metric = (0, utils_1.getGlobalMetricType)(globalMetricId);
63
+ const diffLabel = resolveDiffLabel(budgetInsight);
64
+ const type = resolveType(budgetInsight);
65
+ const currentValue = metric.formatter(budgetInsight.currentValue);
66
+ const budgetValue = metric.formatter(budgetInsight.budgetValue);
67
+ return {
68
+ type,
69
+ message: {
70
+ template: exports.INFO_MESSAGE_TEMPLATE,
71
+ data: {
72
+ metricLabel: metric.label,
73
+ diffLabel,
74
+ currentValue,
75
+ budgetValue,
76
+ },
77
+ },
78
+ source: {
79
+ metricId: globalMetricId,
80
+ budgetInsight,
81
+ },
82
+ };
83
+ };
84
+ exports.getInfo = getInfo;
85
+ //# sourceMappingURL=budgets-insights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budgets-insights.js","sourceRoot":"","sources":["../../src/transformers/budgets-insights.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.budgetInsights = void 0;
23
+ exports.budgetInsights = __importStar(require("./budgets-insights"));
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transformers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,qEAAqD"}
@@ -1,10 +1,30 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
2
21
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
23
  };
5
24
  Object.defineProperty(exports, "__esModule", { value: true });
6
25
  exports.extract = void 0;
7
26
  const merge_1 = __importDefault(require("lodash/merge"));
27
+ const budgetsInsights = __importStar(require("../../transformers/budgets-insights"));
8
28
  const assets_1 = require("./assets");
9
29
  const assets_cache_invalidation_1 = require("./assets-cache-invalidation");
10
30
  const assets_chunk_count_1 = require("./assets-chunk-count");
@@ -17,7 +37,6 @@ const modules_count_1 = require("./modules-count");
17
37
  const modules_packages_1 = require("./modules-packages");
18
38
  const modules_packages_count_1 = require("./modules-packages-count");
19
39
  const modules_packages_duplicate_1 = require("./modules-packages-duplicate");
20
- const budgets_insights_1 = __importDefault(require("./budgets-insights"));
21
40
  const extractFns = [
22
41
  assets_1.extractAssets,
23
42
  assets_cache_invalidation_1.extractAssetsCacheInvalidation,
@@ -31,7 +50,7 @@ const extractFns = [
31
50
  modules_packages_1.extractModulesPackages,
32
51
  modules_packages_count_1.extractModulesPackagesCount,
33
52
  modules_packages_duplicate_1.extractModulesPackagesDuplicate,
34
- budgets_insights_1.default,
53
+ budgetsInsights.getExtract('webpack'),
35
54
  ];
36
55
  const extract = (webpackStats, baseline, options) => extractFns.reduce((agg, extractFn) => (0, merge_1.default)({}, agg, extractFn(webpackStats, agg, baseline, options)), {});
37
56
  exports.extract = extract;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webpack/extract/index.js"],"names":[],"mappings":";;;;;;AAAA,yDAAiC;AAEjC,qCAAyC;AACzC,2EAA6E;AAC7E,6DAA+D;AAC/D,iDAAoD;AACpD,+CAAkD;AAClD,2EAA4E;AAC5E,iCAAqC;AACrC,uCAA2C;AAC3C,mDAAsD;AACtD,yDAA4D;AAC5D,qEAAuE;AACvE,6EAA+E;AAC/E,0EAAwD;AAExD,MAAM,UAAU,GAAG;IACjB,sBAAa;IACb,0DAA8B;IAC9B,4CAAuB;IACvB,iCAAkB;IAClB,+BAAiB;IACjB,yDAA6B;IAC7B,kBAAW;IACX,wBAAc;IACd,mCAAmB;IACnB,yCAAsB;IACtB,oDAA2B;IAC3B,4DAA+B;IAC/B,0BAAsB;CACvB,CAAC;AAEK,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAC3E,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,IAAA,eAAK,EACvB,EAAE,EACF,GAAG,EACH,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAChD,EACD,EAAE,CACH,CAAC;AAPW,QAAA,OAAO,WAOlB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webpack/extract/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAiC;AAEjC,qFAAuE;AACvE,qCAAyC;AACzC,2EAA6E;AAC7E,6DAA+D;AAC/D,iDAAoD;AACpD,+CAAkD;AAClD,2EAA4E;AAC5E,iCAAqC;AACrC,uCAA2C;AAC3C,mDAAsD;AACtD,yDAA4D;AAC5D,qEAAuE;AACvE,6EAA+E;AAE/E,MAAM,UAAU,GAAG;IACjB,sBAAa;IACb,0DAA8B;IAC9B,4CAAuB;IACvB,iCAAkB;IAClB,+BAAiB;IACjB,yDAA6B;IAC7B,kBAAW;IACX,wBAAc;IACd,mCAAmB;IACnB,yCAAsB;IACtB,oDAA2B;IAC3B,4DAA+B;IAC/B,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC;CACtC,CAAC;AAEK,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CACzD,UAAU,CAAC,MAAM,CACf,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,IAAA,eAAK,EAAC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,EACnF,EAAE,CACH,CAAC;AAJS,QAAA,OAAO,WAIhB"}
@@ -8,7 +8,7 @@ const get_1 = __importDefault(require("lodash/get"));
8
8
  const map_1 = __importDefault(require("lodash/map"));
9
9
  const orderBy_1 = __importDefault(require("lodash/orderBy"));
10
10
  const sum_1 = __importDefault(require("lodash/sum"));
11
- const config_1 = require("../../config");
11
+ const constants_1 = require("../../constants");
12
12
  const extractModulesPackagesDuplicate = (webpackStats, currentExtractedData) => {
13
13
  const source = (0, get_1.default)(currentExtractedData, 'metrics.packages', {});
14
14
  const packagesByName = Object.entries(source).reduce((agg, [packageId, packageData]) => {
@@ -68,7 +68,7 @@ const extractModulesPackagesDuplicate = (webpackStats, currentExtractedData) =>
68
68
  return {
69
69
  insights: {
70
70
  duplicatePackages: {
71
- type: config_1.INSIGHT_WARNING,
71
+ type: constants_1.InsightType.WARNING,
72
72
  data,
73
73
  },
74
74
  },
@@ -1 +1 @@
1
- {"version":3,"file":"modules-packages-duplicate.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules-packages-duplicate.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modules-packages-duplicate.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules-packages-duplicate.js"],"names":[],"mappings":"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"}
@@ -16,4 +16,11 @@ export var MetricRunInfoDeltaType;
16
16
  MetricRunInfoDeltaType[MetricRunInfoDeltaType["POSITIVE"] = 5] = "POSITIVE";
17
17
  MetricRunInfoDeltaType[MetricRunInfoDeltaType["HIGH_POSITIVE"] = 6] = "HIGH_POSITIVE";
18
18
  })(MetricRunInfoDeltaType || (MetricRunInfoDeltaType = {}));
19
+ export var InsightType;
20
+ (function (InsightType) {
21
+ InsightType["ERROR"] = "ERROR";
22
+ InsightType["WARNING"] = "WARNING";
23
+ InsightType["INFO"] = "INFO";
24
+ InsightType["SUCCESS"] = "SUCCESS";
25
+ })(InsightType || (InsightType = {}));
19
26
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,iFAAqB,CAAA;IACrB,6EAAmB,CAAA;IACnB,qFAAuB,CAAA;IACvB,mFAAsB,CAAA;IACtB,uFAAwB,CAAA;AAC1B,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB;AAaD,MAAM,CAAN,IAAY,sBAQX;AARD,WAAY,sBAAsB;IAChC,qFAAe,CAAA;IACf,2EAAU,CAAA;IACV,mFAAc,CAAA;IACd,6EAAW,CAAA;IACX,mFAAc,CAAA;IACd,2EAAU,CAAA;IACV,qFAAe,CAAA;AACjB,CAAC,EARW,sBAAsB,KAAtB,sBAAsB,QAQjC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,iFAAqB,CAAA;IACrB,6EAAmB,CAAA;IACnB,qFAAuB,CAAA;IACvB,mFAAsB,CAAA;IACtB,uFAAwB,CAAA;AAC1B,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB;AAaD,MAAM,CAAN,IAAY,sBAQX;AARD,WAAY,sBAAsB;IAChC,qFAAe,CAAA;IACf,2EAAU,CAAA;IACV,mFAAc,CAAA;IACd,6EAAW,CAAA;IACX,mFAAc,CAAA;IACd,2EAAU,CAAA;IACV,qFAAe,CAAA;AACjB,CAAC,EARW,sBAAsB,KAAtB,sBAAsB,QAQjC;AA0ID,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,kCAAmB,CAAA;IACnB,4BAAa,CAAA;IACb,kCAAmB,CAAA;AACrB,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB"}
package/lib-esm/index.js CHANGED
@@ -1,6 +1,9 @@
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';
7
+ import * as transformers_1 from './transformers';
8
+ export { transformers_1 as transformers };
6
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AAEzB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAE5B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;gCACM,gBAAgB;2BAAlC,YAAY"}
@@ -0,0 +1,77 @@
1
+ import get from 'lodash/get';
2
+ import { InsightType } from '../constants';
3
+ import { getGlobalMetricType } from '../utils';
4
+ export const getExtract = (source) => (_, currentExtractedData, __, options = {}) => {
5
+ const { budgets: budgetsOptions } = options;
6
+ if (!budgetsOptions) {
7
+ return null;
8
+ }
9
+ const insights = [];
10
+ budgetsOptions.forEach((budgetOption) => {
11
+ const { metric: budgetMetricId, value: budgetValue } = budgetOption;
12
+ const currentValue = get(currentExtractedData, `metrics.${budgetMetricId}.value`);
13
+ const metric = getGlobalMetricType(`${source}.${budgetMetricId}`);
14
+ if (!currentValue) {
15
+ return;
16
+ }
17
+ const isValueOverBudget = currentValue > budgetValue;
18
+ const budgetInsight = {
19
+ currentValue,
20
+ budgetValue,
21
+ failed: metric.biggerIsBetter ? !isValueOverBudget : isValueOverBudget,
22
+ };
23
+ insights.push([budgetMetricId, budgetInsight]);
24
+ });
25
+ if (insights.length === 0) {
26
+ return null;
27
+ }
28
+ return {
29
+ insights: {
30
+ budgets: Object.fromEntries(insights),
31
+ },
32
+ };
33
+ };
34
+ const resolveDiffLabel = (budgetInsight) => {
35
+ const { currentValue, budgetValue } = budgetInsight;
36
+ if (currentValue > budgetValue) {
37
+ return 'over';
38
+ }
39
+ if (currentValue < budgetValue) {
40
+ return 'under';
41
+ }
42
+ return 'equal with';
43
+ };
44
+ const resolveType = (budgetInsight) => {
45
+ if (budgetInsight.failed) {
46
+ return InsightType.ERROR;
47
+ }
48
+ if (budgetInsight.currentValue === budgetInsight.budgetValue) {
49
+ return InsightType.WARNING;
50
+ }
51
+ return InsightType.SUCCESS;
52
+ };
53
+ export const INFO_MESSAGE_TEMPLATE = '<%= metricLabel %> value \(<%= currentValue %>\) is <%= diffLabel %> <%= budgetValue %> budget';
54
+ export const getInfo = (globalMetricId, budgetInsight) => {
55
+ const metric = getGlobalMetricType(globalMetricId);
56
+ const diffLabel = resolveDiffLabel(budgetInsight);
57
+ const type = resolveType(budgetInsight);
58
+ const currentValue = metric.formatter(budgetInsight.currentValue);
59
+ const budgetValue = metric.formatter(budgetInsight.budgetValue);
60
+ return {
61
+ type,
62
+ message: {
63
+ template: INFO_MESSAGE_TEMPLATE,
64
+ data: {
65
+ metricLabel: metric.label,
66
+ diffLabel,
67
+ currentValue,
68
+ budgetValue,
69
+ },
70
+ },
71
+ source: {
72
+ metricId: globalMetricId,
73
+ budgetInsight,
74
+ },
75
+ };
76
+ };
77
+ //# sourceMappingURL=budgets-insights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budgets-insights.js","sourceRoot":"","sources":["../../src/transformers/budgets-insights.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import * as budgetInsights_1 from './budgets-insights';
2
+ export { budgetInsights_1 as budgetInsights };
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transformers/index.ts"],"names":[],"mappings":"kCAAgC,oBAAoB;6BAAxC,cAAc"}
@@ -1,4 +1,5 @@
1
1
  import merge from 'lodash/merge';
2
+ import * as budgetsInsights from '../../transformers/budgets-insights';
2
3
  import { extractAssets } from './assets';
3
4
  import { extractAssetsCacheInvalidation } from './assets-cache-invalidation';
4
5
  import { extractAssetsChunkCount } from './assets-chunk-count';
@@ -11,7 +12,6 @@ import { extractModulesCount } from './modules-count';
11
12
  import { extractModulesPackages } from './modules-packages';
12
13
  import { extractModulesPackagesCount } from './modules-packages-count';
13
14
  import { extractModulesPackagesDuplicate } from './modules-packages-duplicate';
14
- import extractBudgetsInsights from './budgets-insights';
15
15
  const extractFns = [
16
16
  extractAssets,
17
17
  extractAssetsCacheInvalidation,
@@ -25,7 +25,7 @@ const extractFns = [
25
25
  extractModulesPackages,
26
26
  extractModulesPackagesCount,
27
27
  extractModulesPackagesDuplicate,
28
- extractBudgetsInsights,
28
+ budgetsInsights.getExtract('webpack'),
29
29
  ];
30
30
  export const extract = (webpackStats, baseline, options) => extractFns.reduce((agg, extractFn) => merge({}, agg, extractFn(webpackStats, agg, baseline, options)), {});
31
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webpack/extract/index.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,sBAAsB,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,GAAG;IACjB,aAAa;IACb,8BAA8B;IAC9B,uBAAuB;IACvB,kBAAkB;IAClB,iBAAiB;IACjB,6BAA6B;IAC7B,WAAW;IACX,cAAc;IACd,mBAAmB;IACnB,sBAAsB;IACtB,2BAA2B;IAC3B,+BAA+B;IAC/B,sBAAsB;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAC3E,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,CACvB,EAAE,EACF,GAAG,EACH,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAChD,EACD,EAAE,CACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webpack/extract/index.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,OAAO,KAAK,eAAe,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAE/E,MAAM,UAAU,GAAG;IACjB,aAAa;IACb,8BAA8B;IAC9B,uBAAuB;IACvB,kBAAkB;IAClB,iBAAiB;IACjB,6BAA6B;IAC7B,WAAW;IACX,cAAc;IACd,mBAAmB;IACnB,sBAAsB;IACtB,2BAA2B;IAC3B,+BAA+B;IAC/B,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC;CACtC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CACzD,UAAU,CAAC,MAAM,CACf,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,EACnF,EAAE,CACH,CAAC"}
@@ -2,7 +2,7 @@ import get from 'lodash/get';
2
2
  import map from 'lodash/map';
3
3
  import orderBy from 'lodash/orderBy';
4
4
  import sum from 'lodash/sum';
5
- import { INSIGHT_WARNING } from '../../config';
5
+ import { InsightType } from '../../constants';
6
6
  export const extractModulesPackagesDuplicate = (webpackStats, currentExtractedData) => {
7
7
  const source = get(currentExtractedData, 'metrics.packages', {});
8
8
  const packagesByName = Object.entries(source).reduce((agg, [packageId, packageData]) => {
@@ -62,7 +62,7 @@ export const extractModulesPackagesDuplicate = (webpackStats, currentExtractedDa
62
62
  return {
63
63
  insights: {
64
64
  duplicatePackages: {
65
- type: INSIGHT_WARNING,
65
+ type: InsightType.WARNING,
66
66
  data,
67
67
  },
68
68
  },
@@ -1 +1 @@
1
- {"version":3,"file":"modules-packages-duplicate.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules-packages-duplicate.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modules-packages-duplicate.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules-packages-duplicate.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bundle-stats/utils",
3
- "version": "3.3.0-alpha.0",
3
+ "version": "3.3.0-alpha.1",
4
4
  "description": "BundleStats utils",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -35,8 +35,8 @@
35
35
  },
36
36
  "homepage": "https://github.com/relative-ci/bundle-stats/blob/master/packages/utils#readme",
37
37
  "dependencies": {
38
- "@bundle-stats/plugin-webpack-filter": "^3.2.2",
39
- "@bundle-stats/plugin-webpack-validate": "^3.2.2",
38
+ "@bundle-stats/plugin-webpack-filter": "^3.3.0-alpha.1",
39
+ "@bundle-stats/plugin-webpack-validate": "^3.3.0-alpha.1",
40
40
  "convert-units": "^3.0.0-beta.2",
41
41
  "query-string": "^7.0.0",
42
42
  "serialize-query-params": "^1.3.3"
@@ -58,5 +58,5 @@
58
58
  "core-js": "^3.16.2",
59
59
  "lodash": "^4.17.21"
60
60
  },
61
- "gitHead": "7c7e664296ad7aed38a6972f4421d754098119eb"
61
+ "gitHead": "b510975b373ee38b66899a990c7341d1a29a69e2"
62
62
  }
package/src/constants.ts CHANGED
@@ -162,3 +162,10 @@ export interface BrowsertimeMetrics {
162
162
  visualComplete95: MetricRun;
163
163
  visualComplete99: MetricRun;
164
164
  }
165
+
166
+ export enum InsightType {
167
+ ERROR = 'ERROR',
168
+ WARNING = 'WARNING',
169
+ INFO = 'INFO',
170
+ SUCCESS = 'SUCCESS',
171
+ }
package/src/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  export * from './browsertime';
2
2
  export * from './config';
3
+ export * from './constants';
3
4
  // export * as I18N from './i18n';
4
5
  export * from './jobs';
5
6
  export * from './report';
6
7
  export * from './utils';
8
+ export * as transformers from './transformers';
@@ -0,0 +1,143 @@
1
+ import get from 'lodash/get';
2
+
3
+ import { InsightType } from '../constants';
4
+ import { getGlobalMetricType } from '../utils';
5
+
6
+ interface OptionBudgetMetric {
7
+ metric: string;
8
+ value: number;
9
+ }
10
+
11
+ interface Options {
12
+ budgets?: Array<OptionBudgetMetric>;
13
+ }
14
+
15
+ interface BudgetInsight {
16
+ currentValue: number;
17
+ budgetValue: number;
18
+ failed: boolean;
19
+ }
20
+
21
+ interface BudgetInsightInfo {
22
+ type: InsightType;
23
+ message: {
24
+ template: string;
25
+ data: Record<string, unknown>;
26
+ };
27
+ source: {
28
+ metricId: string;
29
+ budgetInsight: BudgetInsight;
30
+ };
31
+ }
32
+
33
+ interface BudgetInsights {
34
+ [metricId: string]: BudgetInsight;
35
+ }
36
+
37
+ interface BudgetsInsightsOutput {
38
+ insights: {
39
+ budgets: BudgetInsights;
40
+ };
41
+ }
42
+
43
+ export const getExtract =
44
+ (source: string) => (
45
+ _: unknown,
46
+ currentExtractedData: any,
47
+ __: unknown,
48
+ options: Options = {},
49
+ ): BudgetsInsightsOutput | null => {
50
+ const { budgets: budgetsOptions } = options;
51
+
52
+ if (!budgetsOptions) {
53
+ return null;
54
+ }
55
+
56
+ const insights: Array<[string, BudgetInsight]> = [];
57
+
58
+ budgetsOptions.forEach((budgetOption) => {
59
+ const { metric: budgetMetricId, value: budgetValue } = budgetOption;
60
+ const currentValue = get(currentExtractedData, `metrics.${budgetMetricId}.value`);
61
+ const metric = getGlobalMetricType(`${source}.${budgetMetricId}`);
62
+
63
+ if (!currentValue) {
64
+ return;
65
+ }
66
+
67
+ const isValueOverBudget = currentValue > budgetValue;
68
+
69
+ const budgetInsight = {
70
+ currentValue,
71
+ budgetValue,
72
+ failed: metric.biggerIsBetter ? !isValueOverBudget : isValueOverBudget,
73
+ };
74
+
75
+ insights.push([budgetMetricId, budgetInsight]);
76
+ });
77
+
78
+ if (insights.length === 0) {
79
+ return null;
80
+ }
81
+
82
+ return {
83
+ insights: {
84
+ budgets: Object.fromEntries(insights),
85
+ },
86
+ };
87
+ };
88
+
89
+ const resolveDiffLabel = (budgetInsight: BudgetInsight): string => {
90
+ const { currentValue, budgetValue } = budgetInsight;
91
+
92
+ if (currentValue > budgetValue) {
93
+ return 'over';
94
+ }
95
+
96
+ if (currentValue < budgetValue) {
97
+ return 'under';
98
+ }
99
+
100
+ return 'equal with';
101
+ };
102
+
103
+ const resolveType = (budgetInsight: BudgetInsight): InsightType => {
104
+ if (budgetInsight.failed) {
105
+ return InsightType.ERROR;
106
+ }
107
+
108
+ if (budgetInsight.currentValue === budgetInsight.budgetValue) {
109
+ return InsightType.WARNING;
110
+ }
111
+
112
+ return InsightType.SUCCESS;
113
+ };
114
+
115
+ // Add escapes for (|) to avoid lodash.template syntax errors
116
+ // eslint-disable-next-line no-useless-escape
117
+ export const INFO_MESSAGE_TEMPLATE = '<%= metricLabel %> value \(<%= currentValue %>\) is <%= diffLabel %> <%= budgetValue %> budget';
118
+
119
+ export const getInfo = (globalMetricId: string, budgetInsight: BudgetInsight): BudgetInsightInfo => {
120
+ const metric = getGlobalMetricType(globalMetricId);
121
+
122
+ const diffLabel = resolveDiffLabel(budgetInsight);
123
+ const type = resolveType(budgetInsight);
124
+ const currentValue = metric.formatter(budgetInsight.currentValue);
125
+ const budgetValue = metric.formatter(budgetInsight.budgetValue);
126
+
127
+ return {
128
+ type,
129
+ message: {
130
+ template: INFO_MESSAGE_TEMPLATE,
131
+ data: {
132
+ metricLabel: metric.label,
133
+ diffLabel,
134
+ currentValue,
135
+ budgetValue,
136
+ },
137
+ },
138
+ source: {
139
+ metricId: globalMetricId,
140
+ budgetInsight,
141
+ },
142
+ };
143
+ };
@@ -0,0 +1 @@
1
+ export * as budgetInsights from './budgets-insights';
@@ -1,5 +1,6 @@
1
1
  import merge from 'lodash/merge';
2
2
 
3
+ import * as budgetsInsights from '../../transformers/budgets-insights';
3
4
  import { extractAssets } from './assets';
4
5
  import { extractAssetsCacheInvalidation } from './assets-cache-invalidation';
5
6
  import { extractAssetsChunkCount } from './assets-chunk-count';
@@ -12,7 +13,6 @@ import { extractModulesCount } from './modules-count';
12
13
  import { extractModulesPackages } from './modules-packages';
13
14
  import { extractModulesPackagesCount } from './modules-packages-count';
14
15
  import { extractModulesPackagesDuplicate } from './modules-packages-duplicate';
15
- import extractBudgetsInsights from './budgets-insights';
16
16
 
17
17
  const extractFns = [
18
18
  extractAssets,
@@ -27,14 +27,11 @@ const extractFns = [
27
27
  extractModulesPackages,
28
28
  extractModulesPackagesCount,
29
29
  extractModulesPackagesDuplicate,
30
- extractBudgetsInsights,
30
+ budgetsInsights.getExtract('webpack'),
31
31
  ];
32
32
 
33
- export const extract = (webpackStats, baseline, options) => extractFns.reduce(
34
- (agg, extractFn) => merge(
33
+ export const extract = (webpackStats, baseline, options) =>
34
+ extractFns.reduce(
35
+ (agg, extractFn) => merge({}, agg, extractFn(webpackStats, agg, baseline, options)),
35
36
  {},
36
- agg,
37
- extractFn(webpackStats, agg, baseline, options),
38
- ),
39
- {}
40
- );
37
+ );
@@ -3,7 +3,7 @@ import map from 'lodash/map';
3
3
  import orderBy from 'lodash/orderBy';
4
4
  import sum from 'lodash/sum';
5
5
 
6
- import { INSIGHT_WARNING } from '../../config';
6
+ import { InsightType } from '../../constants';
7
7
 
8
8
  export const extractModulesPackagesDuplicate = (webpackStats, currentExtractedData) => {
9
9
  const source = get(currentExtractedData, 'metrics.packages', {});
@@ -89,7 +89,7 @@ export const extractModulesPackagesDuplicate = (webpackStats, currentExtractedDa
89
89
  return {
90
90
  insights: {
91
91
  duplicatePackages: {
92
- type: INSIGHT_WARNING,
92
+ type: InsightType.WARNING,
93
93
  data,
94
94
  },
95
95
  },
@@ -154,3 +154,9 @@ export interface BrowsertimeMetrics {
154
154
  visualComplete95: MetricRun;
155
155
  visualComplete99: MetricRun;
156
156
  }
157
+ export declare enum InsightType {
158
+ ERROR = "ERROR",
159
+ WARNING = "WARNING",
160
+ INFO = "INFO",
161
+ SUCCESS = "SUCCESS"
162
+ }
package/types/index.d.ts CHANGED
@@ -1,5 +1,7 @@
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";
7
+ export * as transformers from "./transformers";
@@ -0,0 +1,36 @@
1
+ import { InsightType } from '../constants';
2
+ interface OptionBudgetMetric {
3
+ metric: string;
4
+ value: number;
5
+ }
6
+ interface Options {
7
+ budgets?: Array<OptionBudgetMetric>;
8
+ }
9
+ interface BudgetInsight {
10
+ currentValue: number;
11
+ budgetValue: number;
12
+ failed: boolean;
13
+ }
14
+ interface BudgetInsightInfo {
15
+ type: InsightType;
16
+ message: {
17
+ template: string;
18
+ data: Record<string, unknown>;
19
+ };
20
+ source: {
21
+ metricId: string;
22
+ budgetInsight: BudgetInsight;
23
+ };
24
+ }
25
+ interface BudgetInsights {
26
+ [metricId: string]: BudgetInsight;
27
+ }
28
+ interface BudgetsInsightsOutput {
29
+ insights: {
30
+ budgets: BudgetInsights;
31
+ };
32
+ }
33
+ export declare const getExtract: (source: string) => (_: unknown, currentExtractedData: any, __: unknown, options?: Options) => BudgetsInsightsOutput | null;
34
+ export declare const INFO_MESSAGE_TEMPLATE = "<%= metricLabel %> value (<%= currentValue %>) is <%= diffLabel %> <%= budgetValue %> budget";
35
+ export declare const getInfo: (globalMetricId: string, budgetInsight: BudgetInsight) => BudgetInsightInfo;
36
+ export {};
@@ -0,0 +1 @@
1
+ export * as budgetInsights from './budgets-insights';
@@ -8,7 +8,7 @@ export function extractModulesPackagesDuplicate(webpackStats: any, currentExtrac
8
8
  } | {
9
9
  insights: {
10
10
  duplicatePackages: {
11
- type: string;
11
+ type: InsightType;
12
12
  data: {};
13
13
  };
14
14
  };
@@ -18,3 +18,4 @@ export function extractModulesPackagesDuplicate(webpackStats: any, currentExtrac
18
18
  };
19
19
  };
20
20
  };
21
+ import { InsightType } from "../../constants";