@bundle-stats/utils 4.3.0-beta.0 → 4.3.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.
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.SOURCE_PATHS = exports.SOURCE_PATH_BROWSERTIME = exports.SOURCE_PATH_LIGHTHOUSE = exports.SOURCE_PATH_WEBPACK_STATS = exports.PACKAGE_ID_SEPARATOR = exports.PACKAGES_SEPARATOR = void 0;
17
+ exports.PACKAGE_ID_SEPARATOR = exports.PACKAGES_SEPARATOR = void 0;
18
18
  __exportStar(require("./component-links"), exports);
19
19
  __exportStar(require("./file-types"), exports);
20
20
  __exportStar(require("./insights"), exports);
@@ -22,12 +22,4 @@ __exportStar(require("./metrics"), exports);
22
22
  __exportStar(require("./delta"), exports);
23
23
  exports.PACKAGES_SEPARATOR = ':';
24
24
  exports.PACKAGE_ID_SEPARATOR = '~';
25
- exports.SOURCE_PATH_WEBPACK_STATS = 'webpack';
26
- exports.SOURCE_PATH_LIGHTHOUSE = 'lighthouse';
27
- exports.SOURCE_PATH_BROWSERTIME = 'browsertime';
28
- exports.SOURCE_PATHS = [
29
- exports.SOURCE_PATH_WEBPACK_STATS,
30
- exports.SOURCE_PATH_LIGHTHOUSE,
31
- exports.SOURCE_PATH_BROWSERTIME,
32
- ];
33
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,+CAA6B;AAC7B,6CAA2B;AAC3B,4CAA0B;AAC1B,0CAAwB;AAEX,QAAA,kBAAkB,GAAG,GAAG,CAAC;AACzB,QAAA,oBAAoB,GAAG,GAAG,CAAC;AAE3B,QAAA,yBAAyB,GAAG,SAAS,CAAC;AACtC,QAAA,sBAAsB,GAAG,YAAY,CAAC;AACtC,QAAA,uBAAuB,GAAG,aAAa,CAAC;AACxC,QAAA,YAAY,GAAG;IAC1B,iCAAyB;IACzB,8BAAsB;IACtB,+BAAuB;CACxB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,+CAA6B;AAC7B,6CAA2B;AAC3B,4CAA0B;AAC1B,0CAAwB;AAEX,QAAA,kBAAkB,GAAG,GAAG,CAAC;AACzB,QAAA,oBAAoB,GAAG,GAAG,CAAC"}
package/lib/constants.js CHANGED
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MetricRunInfoDeltaType = exports.MetricTypeType = void 0;
3
+ exports.JobSectionId = exports.MetricRunInfoDeltaType = exports.MetricTypeType = exports.Source = void 0;
4
+ var Source;
5
+ (function (Source) {
6
+ Source["webpack"] = "webpack";
7
+ Source["lighthouse"] = "lighthouse";
8
+ Source["browsertime"] = "browsertime";
9
+ })(Source = exports.Source || (exports.Source = {}));
4
10
  var MetricTypeType;
5
11
  (function (MetricTypeType) {
6
12
  MetricTypeType["METRIC_TYPE_NUMERIC"] = "METRIC_TYPE_NUMERIC";
@@ -19,4 +25,12 @@ var MetricRunInfoDeltaType;
19
25
  MetricRunInfoDeltaType["POSITIVE"] = "POSITIVE";
20
26
  MetricRunInfoDeltaType["HIGH_POSITIVE"] = "HIGH_POSITIVE";
21
27
  })(MetricRunInfoDeltaType = exports.MetricRunInfoDeltaType || (exports.MetricRunInfoDeltaType = {}));
28
+ var JobSectionId;
29
+ (function (JobSectionId) {
30
+ JobSectionId["meta"] = "meta";
31
+ JobSectionId["insights"] = "insights";
32
+ JobSectionId["summary"] = "summary";
33
+ JobSectionId["metrics"] = "metrics";
34
+ JobSectionId["rawData"] = "rawData";
35
+ })(JobSectionId = exports.JobSectionId || (exports.JobSectionId = {}));
22
36
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAEA,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,6DAA6C,CAAA;IAC7C,yDAAyC,CAAA;IACzC,iEAAiD,CAAA;IACjD,+DAA+C,CAAA;IAC/C,mEAAmD,CAAA;AACrD,CAAC,EANW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAMzB;AAaD,IAAY,sBAQX;AARD,WAAY,sBAAsB;IAChC,yDAAiC,CAAA;IACjC,+CAAuB,CAAA;IACvB,uDAA+B,CAAA;IAC/B,iDAAyB,CAAA;IACzB,uDAA+B,CAAA;IAC/B,+CAAuB,CAAA;IACvB,yDAAiC,CAAA;AACnC,CAAC,EARW,sBAAsB,GAAtB,8BAAsB,KAAtB,8BAAsB,QAQjC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAEA,IAAY,MAIX;AAJD,WAAY,MAAM;IAChB,6BAAmB,CAAA;IACnB,mCAAyB,CAAA;IACzB,qCAA2B,CAAA;AAC7B,CAAC,EAJW,MAAM,GAAN,cAAM,KAAN,cAAM,QAIjB;AAID,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,6DAA6C,CAAA;IAC7C,yDAAyC,CAAA;IACzC,iEAAiD,CAAA;IACjD,+DAA+C,CAAA;IAC/C,mEAAmD,CAAA;AACrD,CAAC,EANW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAMzB;AAaD,IAAY,sBAQX;AARD,WAAY,sBAAsB;IAChC,yDAAiC,CAAA;IACjC,+CAAuB,CAAA;IACvB,uDAA+B,CAAA;IAC/B,iDAAyB,CAAA;IACzB,uDAA+B,CAAA;IAC/B,+CAAuB,CAAA;IACvB,yDAAiC,CAAA;AACnC,CAAC,EARW,sBAAsB,GAAtB,8BAAsB,KAAtB,8BAAsB,QAQjC;AAkBD,IAAY,YAMX;AAND,WAAY,YAAY;IACtB,6BAAa,CAAA;IACb,qCAAqB,CAAA;IACrB,mCAAmB,CAAA;IACnB,mCAAmB,CAAA;IACnB,mCAAmB,CAAA;AACrB,CAAC,EANW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAMvB"}
@@ -28,13 +28,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.createJob = void 0;
30
30
  const merge_1 = __importDefault(require("lodash/merge"));
31
- const config_1 = require("../config");
32
31
  const create_summary_1 = require("./create-summary");
33
32
  const webpack = __importStar(require("../webpack"));
34
33
  const lighthouse = __importStar(require("../lighthouse"));
35
34
  const browsertime = __importStar(require("../browsertime"));
35
+ const constants_1 = require("../constants");
36
36
  const SOURCE_MODULES = { webpack, lighthouse, browsertime };
37
- const createJob = (source, baseline) => config_1.SOURCE_PATHS.reduce((agg, sourcePath) => {
37
+ const createJob = (source, baseline) => Object.values(constants_1.Source).reduce((agg, sourcePath) => {
38
38
  const rawData = source[sourcePath];
39
39
  if (!rawData) {
40
40
  return agg;
@@ -1 +1 @@
1
- {"version":3,"file":"create-job.js","sourceRoot":"","sources":["../../src/jobs/create-job.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAiC;AAEjC,sCAAyC;AACzC,qDAAiD;AACjD,oDAAsC;AACtC,0DAA4C;AAC5C,4DAA8C;AAc9C,MAAM,cAAc,GAAiC,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAEnF,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAE,QAAkB,EAAW,EAAE,CAC3E,qBAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEnC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAEhD,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,aAAa,GAAiB,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,IAAA,8BAAa,EAC3B,cAAc,CAAC,UAAU,CAAC,CAAC,oBAAoB,EAC/C,QAAQ,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAC/B,aAAa,EAAE,OAAO,CACvB,CAAC;IAEF,OAAO,IAAA,eAAK,EAAC,EAAE,EAAE,GAAG,EAAE;QACpB,IAAI,EAAE;YACJ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,IAAI;SACjC;QACD,QAAQ,EAAE;YACR,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,QAAQ;SACrC;QACD,OAAO,EAAE;YACP,CAAC,UAAU,CAAC,EAAE,OAAO;SACtB;QACD,OAAO,EAAE;YACP,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO;SACpC;QACD,OAAO,EAAE;YACP,CAAC,UAAU,CAAC,EAAE,OAAO;SACtB;KACF,CAAC,CAAC;AACL,CAAC,EAAE,EAAE,CAAC,CAAC;AAvCI,QAAA,SAAS,aAuCb"}
1
+ {"version":3,"file":"create-job.js","sourceRoot":"","sources":["../../src/jobs/create-job.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAiC;AAEjC,qDAAiD;AACjD,oDAAsC;AACtC,0DAA4C;AAC5C,4DAA8C;AAC9C,4CAA6E;AAa7E,MAAM,cAAc,GAAiC,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAEnF,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAE,QAAkB,EAAW,EAAE,CAC3E,MAAM,CAAC,MAAM,CAAC,kBAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEnC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAEhD,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,aAAa,GAAiB,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,IAAA,8BAAa,EAC3B,cAAc,CAAC,UAAU,CAAC,CAAC,oBAAoB,EAC/C,QAAQ,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAC/B,aAAa,EAAE,OAAO,CACvB,CAAC;IAEF,OAAO,IAAA,eAAK,EAAC,EAAE,EAAE,GAAG,EAAE;QACpB,IAAI,EAAE;YACJ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,IAAI;SACjC;QACD,QAAQ,EAAE;YACR,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,QAAQ;SACrC;QACD,OAAO,EAAE;YACP,CAAC,UAAU,CAAC,EAAE,OAAO;SACtB;QACD,OAAO,EAAE;YACP,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO;SACpC;QACD,OAAO,EAAE;YACP,CAAC,UAAU,CAAC,EAAE,OAAO;SACtB;KACF,CAAC,CAAC;AACL,CAAC,EAAE,EAAE,CAAC,CAAC;AAvCI,QAAA,SAAS,aAuCb"}
@@ -28,14 +28,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.createReport = void 0;
30
30
  const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
31
- const config_1 = require("../config");
31
+ const constants_1 = require("../constants");
32
32
  const metrics_1 = require("../utils/metrics");
33
33
  const webpack = __importStar(require("../webpack"));
34
34
  const package_json_1 = require("../../package.json");
35
35
  const createReport = (jobs) => {
36
36
  const insights = jobs[0]?.insights;
37
37
  const summary = {};
38
- config_1.SOURCE_PATHS.forEach((sourceId) => {
38
+ Object.values(constants_1.Source).forEach((sourceId) => {
39
39
  const sourceSummary = jobs[0]?.summary?.[sourceId];
40
40
  if (!sourceSummary) {
41
41
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/report/create.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6DAAqC;AAErC,sCAAyC;AAEzC,8CAAyE;AACzE,oDAAsC;AAEtC,qDAA6C;AAmBtC,MAAM,YAAY,GAAG,CAAC,IAAgB,EAAU,EAAE;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;IAGnC,MAAM,OAAO,GAA+C,EAAE,CAAC;IAE/D,qBAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAqB,CAAC;QAEvE,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO;SACR;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE;YACnF,MAAM,MAAM,GAAG,IAAA,6BAAmB,EAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC;YAC9D,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,WAAW,CAAC;YAClD,MAAM,IAAI,GAAG,IAAA,0BAAgB,EAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAEzD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;QACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO,EAAP,sBAAO;QAEP,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,GAAG,IAAI;YACP,mBAAmB;SACpB,CAAC,CAAC;QAEH,OAAO;QAGP,GAAG,CAAC,CAAC,IAAA,iBAAO,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC,CAAC;AAxCW,QAAA,YAAY,gBAwCvB"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/report/create.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6DAAqC;AAErC,4CAA4E;AAC5E,8CAAyE;AACzE,oDAAsC;AAEtC,qDAA6C;AAmBtC,MAAM,YAAY,GAAG,CAAC,IAAgB,EAAU,EAAE;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;IAGnC,MAAM,OAAO,GAA+C,EAAE,CAAC;IAE/D,MAAM,CAAC,MAAM,CAAC,kBAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QACzC,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAqB,CAAC;QAEvE,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO;SACR;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE;YACnF,MAAM,MAAM,GAAG,IAAA,6BAAmB,EAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC;YAC9D,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,WAAW,CAAC;YAClD,MAAM,IAAI,GAAG,IAAA,0BAAgB,EAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAEzD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;QACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO,EAAP,sBAAO;QAEP,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,GAAG,IAAI;YACP,mBAAmB;SACpB,CAAC,CAAC;QAEH,OAAO;QAGP,GAAG,CAAC,CAAC,IAAA,iBAAO,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC,CAAC;AAxCW,QAAA,YAAY,gBAwCvB"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.METRIC_COMPONENT_LINKS = exports.getComponentStateQueryString = exports.getBundlePackagesByNameComponentLink = exports.getBundleAssetsFileTypeComponentLink = exports.BUNDLE_PACKAGES_DUPLICATE = exports.BUNLDE_PACKAGES_COUNT = exports.getBundleModulesByChunk = exports.getBundleModulesBySearch = exports.BUNDLE_MODULES_DUPLICATE = exports.BUNDLE_MODULES = exports.BUNDLE_ASSETS_CHUNK_COUNT = exports.BUNDLE_ASSETS_COUNT = exports.BUNDLE_ASSETS_CACHE_INVALIDATION = exports.BUNDLE_ASSETS_INITIAL_CSS = exports.BUNDLE_ASSETS_INITIAL_JS = exports.TOTALS = exports.getModuleFileTypeFilters = exports.getModuleChunkFilters = exports.getModuleSourceTypeFilters = exports.getAssetEntryTypeFilters = exports.getAssetFileTypeFilters = void 0;
6
+ exports.METRIC_COMPONENT_LINKS = exports.getComponentStateQueryString = exports.getBundlePackagesByNameComponentLink = exports.getBundleAssetsFileTypeComponentLink = exports.BUNDLE_PACKAGES_DUPLICATE = exports.BUNDLE_PACKAGES_COUNT = exports.getBundleModulesByChunk = exports.getBundleModulesBySearch = exports.BUNDLE_MODULES_DUPLICATE = exports.BUNDLE_MODULES = exports.BUNDLE_ASSETS_CHUNK_COUNT = exports.BUNDLE_ASSETS_COUNT = exports.BUNDLE_ASSETS_CACHE_INVALIDATION = exports.BUNDLE_ASSETS_INITIAL_CSS = exports.BUNDLE_ASSETS_INITIAL_JS = exports.TOTALS = exports.getModuleFileTypeFilters = exports.getModuleChunkFilters = exports.getModuleSourceTypeFilters = exports.getAssetEntryTypeFilters = exports.getAssetFileTypeFilters = void 0;
7
7
  const query_string_1 = require("query-string");
8
8
  const serialize_query_params_1 = require("serialize-query-params");
9
9
  const file_types_1 = require("../config/file-types");
@@ -166,7 +166,7 @@ const getBundleModulesByChunk = (chunkIds, chunkId, fileType = '') => ({
166
166
  },
167
167
  });
168
168
  exports.getBundleModulesByChunk = getBundleModulesByChunk;
169
- exports.BUNLDE_PACKAGES_COUNT = {
169
+ exports.BUNDLE_PACKAGES_COUNT = {
170
170
  section: component_links_1.SECTIONS.PACKAGES,
171
171
  title: i18n_1.default.COMPONENT_LINK_PACKAGES_COUNT,
172
172
  params: {
@@ -238,7 +238,7 @@ exports.METRIC_COMPONENT_LINKS = new Map([
238
238
  ['webpack.moduleCount', { link: exports.BUNDLE_MODULES }],
239
239
  ['webpack.duplicateModulesCount', { link: exports.BUNDLE_MODULES_DUPLICATE }],
240
240
  ['webpack.duplicateCode', { link: exports.BUNDLE_MODULES_DUPLICATE }],
241
- ['webpack.packageCount', { link: exports.BUNLDE_PACKAGES_COUNT }],
241
+ ['webpack.packageCount', { link: exports.BUNDLE_PACKAGES_COUNT }],
242
242
  ['webpack.duplicatePackagesCount', { link: exports.BUNDLE_PACKAGES_DUPLICATE }],
243
243
  ]);
244
244
  //# sourceMappingURL=component-links.js.map
@@ -3,12 +3,88 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.extractModulesPackagesDuplicate = void 0;
6
+ exports.extractModulesPackagesDuplicate = exports.getDuplicatePackagesInsight = void 0;
7
7
  const map_1 = __importDefault(require("lodash/map"));
8
8
  const orderBy_1 = __importDefault(require("lodash/orderBy"));
9
9
  const sum_1 = __importDefault(require("lodash/sum"));
10
10
  const config_1 = require("../../config");
11
- const extractModulesPackagesDuplicate = (_, currentExtractedData) => {
11
+ const getDuplicatePackagesInsight = (duplicatePackagesMap, baselineDuplicatePackagesMap) => {
12
+ const duplicateInstances = [];
13
+ const baselineDuplicateInstances = [];
14
+ const newDuplicateInstances = [];
15
+ const removedDuplicateInstances = [];
16
+ Object.entries(duplicatePackagesMap).forEach(([id, instances]) => {
17
+ instances.forEach((duplicateInstance) => {
18
+ if (duplicateInstance === id) {
19
+ return;
20
+ }
21
+ duplicateInstances.push(duplicateInstance);
22
+ if (baselineDuplicatePackagesMap?.[id]?.includes(duplicateInstance)) {
23
+ return;
24
+ }
25
+ newDuplicateInstances.push(duplicateInstance);
26
+ });
27
+ });
28
+ if (baselineDuplicatePackagesMap) {
29
+ Object.entries(baselineDuplicatePackagesMap).forEach(([id, instances]) => {
30
+ instances.forEach((duplicateInstance) => {
31
+ if (duplicateInstance === id) {
32
+ return;
33
+ }
34
+ baselineDuplicateInstances.push(duplicateInstance);
35
+ if (duplicatePackagesMap?.[id]?.includes(duplicateInstance)) {
36
+ return;
37
+ }
38
+ removedDuplicateInstances.push(duplicateInstance);
39
+ });
40
+ });
41
+ }
42
+ const duplicateInstancesCount = duplicateInstances.length;
43
+ const newDuplicateInstancesCount = newDuplicateInstances.length;
44
+ const removedDuplicateInstancesCount = removedDuplicateInstances.length;
45
+ let text;
46
+ let insightType;
47
+ if (newDuplicateInstancesCount > 0 && removedDuplicateInstancesCount > 0) {
48
+ const item = newDuplicateInstancesCount > 1 || removedDuplicateInstancesCount > 1 ? 'packages' : 'package';
49
+ text = `Bundle introduced ${newDuplicateInstancesCount} and removed ${removedDuplicateInstancesCount} duplicate ${item}`;
50
+ insightType = config_1.InsightType.ERROR;
51
+ }
52
+ else if (newDuplicateInstancesCount > 0 && baselineDuplicatePackagesMap) {
53
+ const item = newDuplicateInstancesCount > 1 ? 'packages' : 'package';
54
+ text = `Bundle introduced ${newDuplicateInstancesCount} duplicate ${item}`;
55
+ insightType = config_1.InsightType.ERROR;
56
+ }
57
+ else if (newDuplicateInstancesCount > 0) {
58
+ const item = newDuplicateInstancesCount > 1 ? 'packages' : 'package';
59
+ text = `Bundle contains ${newDuplicateInstancesCount} duplicate ${item}`;
60
+ insightType = config_1.InsightType.WARNING;
61
+ }
62
+ else if (removedDuplicateInstancesCount > 0) {
63
+ const item = removedDuplicateInstancesCount > 1 ? 'packages' : 'package';
64
+ text = `Bundle removed ${removedDuplicateInstancesCount} duplicate ${item}`;
65
+ insightType = config_1.InsightType.INFO;
66
+ }
67
+ else if (newDuplicateInstancesCount === 0 &&
68
+ removedDuplicateInstancesCount === 0 &&
69
+ duplicateInstancesCount > 0) {
70
+ const item = duplicateInstancesCount > 1 ? 'packages' : 'package';
71
+ text = `Bundle contains ${duplicateInstancesCount} duplicate ${item}`;
72
+ insightType = config_1.InsightType.WARNING;
73
+ }
74
+ else {
75
+ text = 'Bundle does not contain duplicate packages';
76
+ insightType = config_1.InsightType.INFO;
77
+ }
78
+ return {
79
+ type: insightType,
80
+ data: {
81
+ text,
82
+ packages: duplicatePackagesMap,
83
+ },
84
+ };
85
+ };
86
+ exports.getDuplicatePackagesInsight = getDuplicatePackagesInsight;
87
+ const extractModulesPackagesDuplicate = (_, currentExtractedData, baselineJob) => {
12
88
  const source = currentExtractedData?.metrics?.packages || {};
13
89
  const packagesByName = {};
14
90
  Object.entries(source).forEach(([packageId, packageData]) => {
@@ -35,8 +111,14 @@ const extractModulesPackagesDuplicate = (_, currentExtractedData) => {
35
111
  children: packageGroupData.children,
36
112
  });
37
113
  });
114
+ const baselineDuplicatePackages = baselineJob?.insights?.webpack?.duplicatePackagesV3?.data?.packages ||
115
+ baselineJob?.insights?.webpack?.duplicatePackages?.data ||
116
+ {};
38
117
  if (!count) {
39
118
  return {
119
+ insights: {
120
+ duplicatePackagesV3: (0, exports.getDuplicatePackagesInsight)({}, baselineDuplicatePackages),
121
+ },
40
122
  metrics: {
41
123
  duplicatePackagesCount: {
42
124
  value: count,
@@ -51,16 +133,20 @@ const extractModulesPackagesDuplicate = (_, currentExtractedData) => {
51
133
  children: (0, orderBy_1.default)(duplicatePackageData.children, 'value', 'desc'),
52
134
  },
53
135
  }), {});
54
- const data = Object.entries(duplicatePackagesByName).reduce((agg, [packageName, duplicatePackageData]) => ({
55
- ...agg,
56
- [packageName]: duplicatePackageData.children.map(({ id }) => id),
57
- }), {});
136
+ const duplicatePackagesData = {};
137
+ Object.entries(duplicatePackagesByName).forEach(([packageName, packageData]) => {
138
+ if (!duplicatePackagesData[packageName]) {
139
+ duplicatePackagesData[packageName] = [];
140
+ }
141
+ duplicatePackagesData[packageName] = packageData.children.map(({ id }) => id);
142
+ });
58
143
  return {
59
144
  insights: {
60
145
  duplicatePackages: {
61
146
  type: config_1.InsightType.WARNING,
62
- data,
147
+ data: duplicatePackagesData,
63
148
  },
149
+ duplicatePackagesV3: (0, exports.getDuplicatePackagesInsight)(duplicatePackagesData, baselineDuplicatePackages),
64
150
  },
65
151
  metrics: {
66
152
  duplicatePackagesCount: {
@@ -1 +1 @@
1
- {"version":3,"file":"modules-packages-duplicate.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules-packages-duplicate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modules-packages-duplicate.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules-packages-duplicate.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,4 @@ export * from './metrics';
5
5
  export * from './delta';
6
6
  export const PACKAGES_SEPARATOR = ':';
7
7
  export const PACKAGE_ID_SEPARATOR = '~';
8
- export const SOURCE_PATH_WEBPACK_STATS = 'webpack';
9
- export const SOURCE_PATH_LIGHTHOUSE = 'lighthouse';
10
- export const SOURCE_PATH_BROWSERTIME = 'browsertime';
11
- export const SOURCE_PATHS = [
12
- SOURCE_PATH_WEBPACK_STATS,
13
- SOURCE_PATH_LIGHTHOUSE,
14
- SOURCE_PATH_BROWSERTIME,
15
- ];
16
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.js"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAC;AACnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,YAAY,CAAC;AACnD,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,yBAAyB;IACzB,sBAAsB;IACtB,uBAAuB;CACxB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.js"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC"}
@@ -1,3 +1,9 @@
1
+ export var Source;
2
+ (function (Source) {
3
+ Source["webpack"] = "webpack";
4
+ Source["lighthouse"] = "lighthouse";
5
+ Source["browsertime"] = "browsertime";
6
+ })(Source || (Source = {}));
1
7
  export var MetricTypeType;
2
8
  (function (MetricTypeType) {
3
9
  MetricTypeType["METRIC_TYPE_NUMERIC"] = "METRIC_TYPE_NUMERIC";
@@ -16,4 +22,12 @@ export var MetricRunInfoDeltaType;
16
22
  MetricRunInfoDeltaType["POSITIVE"] = "POSITIVE";
17
23
  MetricRunInfoDeltaType["HIGH_POSITIVE"] = "HIGH_POSITIVE";
18
24
  })(MetricRunInfoDeltaType || (MetricRunInfoDeltaType = {}));
25
+ export var JobSectionId;
26
+ (function (JobSectionId) {
27
+ JobSectionId["meta"] = "meta";
28
+ JobSectionId["insights"] = "insights";
29
+ JobSectionId["summary"] = "summary";
30
+ JobSectionId["metrics"] = "metrics";
31
+ JobSectionId["rawData"] = "rawData";
32
+ })(JobSectionId || (JobSectionId = {}));
19
33
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,6DAA6C,CAAA;IAC7C,yDAAyC,CAAA;IACzC,iEAAiD,CAAA;IACjD,+DAA+C,CAAA;IAC/C,mEAAmD,CAAA;AACrD,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB;AAaD,MAAM,CAAN,IAAY,sBAQX;AARD,WAAY,sBAAsB;IAChC,yDAAiC,CAAA;IACjC,+CAAuB,CAAA;IACvB,uDAA+B,CAAA;IAC/B,iDAAyB,CAAA;IACzB,uDAA+B,CAAA;IAC/B,+CAAuB,CAAA;IACvB,yDAAiC,CAAA;AACnC,CAAC,EARW,sBAAsB,KAAtB,sBAAsB,QAQjC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,MAIX;AAJD,WAAY,MAAM;IAChB,6BAAmB,CAAA;IACnB,mCAAyB,CAAA;IACzB,qCAA2B,CAAA;AAC7B,CAAC,EAJW,MAAM,KAAN,MAAM,QAIjB;AAID,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,6DAA6C,CAAA;IAC7C,yDAAyC,CAAA;IACzC,iEAAiD,CAAA;IACjD,+DAA+C,CAAA;IAC/C,mEAAmD,CAAA;AACrD,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB;AAaD,MAAM,CAAN,IAAY,sBAQX;AARD,WAAY,sBAAsB;IAChC,yDAAiC,CAAA;IACjC,+CAAuB,CAAA;IACvB,uDAA+B,CAAA;IAC/B,iDAAyB,CAAA;IACzB,uDAA+B,CAAA;IAC/B,+CAAuB,CAAA;IACvB,yDAAiC,CAAA;AACnC,CAAC,EARW,sBAAsB,KAAtB,sBAAsB,QAQjC;AAkBD,MAAM,CAAN,IAAY,YAMX;AAND,WAAY,YAAY;IACtB,6BAAa,CAAA;IACb,qCAAqB,CAAA;IACrB,mCAAmB,CAAA;IACnB,mCAAmB,CAAA;IACnB,mCAAmB,CAAA;AACrB,CAAC,EANW,YAAY,KAAZ,YAAY,QAMvB"}
@@ -1,11 +1,11 @@
1
1
  import merge from 'lodash/merge';
2
- import { SOURCE_PATHS } from '../config';
3
2
  import { createSummary } from './create-summary';
4
3
  import * as webpack from '../webpack';
5
4
  import * as lighthouse from '../lighthouse';
6
5
  import * as browsertime from '../browsertime';
6
+ import { Source } from '../constants';
7
7
  const SOURCE_MODULES = { webpack, lighthouse, browsertime };
8
- export const createJob = (source, baseline) => SOURCE_PATHS.reduce((agg, sourcePath) => {
8
+ export const createJob = (source, baseline) => Object.values(Source).reduce((agg, sourcePath) => {
9
9
  var _a;
10
10
  const rawData = source[sourcePath];
11
11
  if (!rawData) {
@@ -1 +1 @@
1
- {"version":3,"file":"create-job.js","sourceRoot":"","sources":["../../src/jobs/create-job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAc9C,MAAM,cAAc,GAAiC,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAE1F,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAE,QAAkB,EAAW,EAAE,CAC3E,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE;;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEnC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAEhD,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,aAAa,GAAiB,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,aAAa,CAC3B,cAAc,CAAC,UAAU,CAAC,CAAC,oBAAoB,EAC/C,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,0CAAG,UAAU,CAAC,EAC/B,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,CACvB,CAAC;IAEF,OAAO,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE;QACpB,IAAI,EAAE;YACJ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,IAAI;SACjC;QACD,QAAQ,EAAE;YACR,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,QAAQ;SACrC;QACD,OAAO,EAAE;YACP,CAAC,UAAU,CAAC,EAAE,OAAO;SACtB;QACD,OAAO,EAAE;YACP,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO;SACpC;QACD,OAAO,EAAE;YACP,CAAC,UAAU,CAAC,EAAE,OAAO;SACtB;KACF,CAAC,CAAC;AACL,CAAC,EAAE,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"create-job.js","sourceRoot":"","sources":["../../src/jobs/create-job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAA6B,MAAM,EAAc,MAAM,cAAc,CAAC;AAa7E,MAAM,cAAc,GAAiC,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAE1F,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAE,QAAkB,EAAW,EAAE,CAC3E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE;;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEnC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAEhD,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,aAAa,GAAiB,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,aAAa,CAC3B,cAAc,CAAC,UAAU,CAAC,CAAC,oBAAoB,EAC/C,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,0CAAG,UAAU,CAAC,EAC/B,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,CACvB,CAAC;IAEF,OAAO,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE;QACpB,IAAI,EAAE;YACJ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,IAAI;SACjC;QACD,QAAQ,EAAE;YACR,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,QAAQ;SACrC;QACD,OAAO,EAAE;YACP,CAAC,UAAU,CAAC,EAAE,OAAO;SACtB;QACD,OAAO,EAAE;YACP,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO;SACpC;QACD,OAAO,EAAE;YACP,CAAC,UAAU,CAAC,EAAE,OAAO;SACtB;KACF,CAAC,CAAC;AACL,CAAC,EAAE,EAAE,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import isEmpty from 'lodash/isEmpty';
2
- import { SOURCE_PATHS } from '../config';
2
+ import { Source } from '../constants';
3
3
  import { getGlobalMetricType, getMetricRunInfo } from '../utils/metrics';
4
4
  import * as webpack from '../webpack';
5
5
  import { version } from '../../package.json';
@@ -7,7 +7,7 @@ export const createReport = (jobs) => {
7
7
  var _a;
8
8
  const insights = (_a = jobs[0]) === null || _a === void 0 ? void 0 : _a.insights;
9
9
  const summary = {};
10
- SOURCE_PATHS.forEach((sourceId) => {
10
+ Object.values(Source).forEach((sourceId) => {
11
11
  var _a, _b;
12
12
  const sourceSummary = (_b = (_a = jobs[0]) === null || _a === void 0 ? void 0 : _a.summary) === null || _b === void 0 ? void 0 : _b[sourceId];
13
13
  if (!sourceSummary) {
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/report/create.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAmB7C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAgB,EAAU,EAAE;;IACvD,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,CAAC,CAAC,0CAAE,QAAQ,CAAC;IAGnC,MAAM,OAAO,GAA+C,EAAE,CAAC;IAE/D,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;;QAChC,MAAM,aAAa,GAAG,MAAA,MAAA,IAAI,CAAC,CAAC,CAAC,0CAAE,OAAO,0CAAG,QAAQ,CAAqB,CAAC;QAEvE,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO;SACR;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE;YACnF,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC;YAC9D,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,WAAW,CAAC;YAClD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAEzD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;QACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO;QAEP,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,GAAG,IAAI;YACP,mBAAmB;SACpB,CAAC,CAAC;QAEH,OAAO;QAGP,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/report/create.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAwC,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAmB7C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAgB,EAAU,EAAE;;IACvD,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,CAAC,CAAC,0CAAE,QAAQ,CAAC;IAGnC,MAAM,OAAO,GAA+C,EAAE,CAAC;IAE/D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;;QACzC,MAAM,aAAa,GAAG,MAAA,MAAA,IAAI,CAAC,CAAC,CAAC,0CAAE,OAAO,0CAAG,QAAQ,CAAqB,CAAC;QAEvE,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO;SACR;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE;YACnF,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC;YAC9D,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,WAAW,CAAC;YAClD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAEzD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;QACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO;QAEP,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,GAAG,IAAI;YACP,mBAAmB;SACpB,CAAC,CAAC;QAEH,OAAO;QAGP,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -153,7 +153,7 @@ export const getBundleModulesByChunk = (chunkIds, chunkId, fileType = '') => ({
153
153
  },
154
154
  },
155
155
  });
156
- export const BUNLDE_PACKAGES_COUNT = {
156
+ export const BUNDLE_PACKAGES_COUNT = {
157
157
  section: SECTIONS.PACKAGES,
158
158
  title: I18N.COMPONENT_LINK_PACKAGES_COUNT,
159
159
  params: {
@@ -222,7 +222,7 @@ export const METRIC_COMPONENT_LINKS = new Map([
222
222
  ['webpack.moduleCount', { link: BUNDLE_MODULES }],
223
223
  ['webpack.duplicateModulesCount', { link: BUNDLE_MODULES_DUPLICATE }],
224
224
  ['webpack.duplicateCode', { link: BUNDLE_MODULES_DUPLICATE }],
225
- ['webpack.packageCount', { link: BUNLDE_PACKAGES_COUNT }],
225
+ ['webpack.packageCount', { link: BUNDLE_PACKAGES_COUNT }],
226
226
  ['webpack.duplicatePackagesCount', { link: BUNDLE_PACKAGES_DUPLICATE }],
227
227
  ]);
228
228
  //# sourceMappingURL=component-links.js.map
@@ -2,8 +2,85 @@ import map from 'lodash/map';
2
2
  import orderBy from 'lodash/orderBy';
3
3
  import sum from 'lodash/sum';
4
4
  import { InsightType } from '../../config';
5
- export const extractModulesPackagesDuplicate = (_, currentExtractedData) => {
6
- var _a;
5
+ export const getDuplicatePackagesInsight = (duplicatePackagesMap, baselineDuplicatePackagesMap) => {
6
+ const duplicateInstances = [];
7
+ const baselineDuplicateInstances = [];
8
+ const newDuplicateInstances = [];
9
+ const removedDuplicateInstances = [];
10
+ Object.entries(duplicatePackagesMap).forEach(([id, instances]) => {
11
+ instances.forEach((duplicateInstance) => {
12
+ var _a;
13
+ if (duplicateInstance === id) {
14
+ return;
15
+ }
16
+ duplicateInstances.push(duplicateInstance);
17
+ if ((_a = baselineDuplicatePackagesMap === null || baselineDuplicatePackagesMap === void 0 ? void 0 : baselineDuplicatePackagesMap[id]) === null || _a === void 0 ? void 0 : _a.includes(duplicateInstance)) {
18
+ return;
19
+ }
20
+ newDuplicateInstances.push(duplicateInstance);
21
+ });
22
+ });
23
+ if (baselineDuplicatePackagesMap) {
24
+ Object.entries(baselineDuplicatePackagesMap).forEach(([id, instances]) => {
25
+ instances.forEach((duplicateInstance) => {
26
+ var _a;
27
+ if (duplicateInstance === id) {
28
+ return;
29
+ }
30
+ baselineDuplicateInstances.push(duplicateInstance);
31
+ if ((_a = duplicatePackagesMap === null || duplicatePackagesMap === void 0 ? void 0 : duplicatePackagesMap[id]) === null || _a === void 0 ? void 0 : _a.includes(duplicateInstance)) {
32
+ return;
33
+ }
34
+ removedDuplicateInstances.push(duplicateInstance);
35
+ });
36
+ });
37
+ }
38
+ const duplicateInstancesCount = duplicateInstances.length;
39
+ const newDuplicateInstancesCount = newDuplicateInstances.length;
40
+ const removedDuplicateInstancesCount = removedDuplicateInstances.length;
41
+ let text;
42
+ let insightType;
43
+ if (newDuplicateInstancesCount > 0 && removedDuplicateInstancesCount > 0) {
44
+ const item = newDuplicateInstancesCount > 1 || removedDuplicateInstancesCount > 1 ? 'packages' : 'package';
45
+ text = `Bundle introduced ${newDuplicateInstancesCount} and removed ${removedDuplicateInstancesCount} duplicate ${item}`;
46
+ insightType = InsightType.ERROR;
47
+ }
48
+ else if (newDuplicateInstancesCount > 0 && baselineDuplicatePackagesMap) {
49
+ const item = newDuplicateInstancesCount > 1 ? 'packages' : 'package';
50
+ text = `Bundle introduced ${newDuplicateInstancesCount} duplicate ${item}`;
51
+ insightType = InsightType.ERROR;
52
+ }
53
+ else if (newDuplicateInstancesCount > 0) {
54
+ const item = newDuplicateInstancesCount > 1 ? 'packages' : 'package';
55
+ text = `Bundle contains ${newDuplicateInstancesCount} duplicate ${item}`;
56
+ insightType = InsightType.WARNING;
57
+ }
58
+ else if (removedDuplicateInstancesCount > 0) {
59
+ const item = removedDuplicateInstancesCount > 1 ? 'packages' : 'package';
60
+ text = `Bundle removed ${removedDuplicateInstancesCount} duplicate ${item}`;
61
+ insightType = InsightType.INFO;
62
+ }
63
+ else if (newDuplicateInstancesCount === 0 &&
64
+ removedDuplicateInstancesCount === 0 &&
65
+ duplicateInstancesCount > 0) {
66
+ const item = duplicateInstancesCount > 1 ? 'packages' : 'package';
67
+ text = `Bundle contains ${duplicateInstancesCount} duplicate ${item}`;
68
+ insightType = InsightType.WARNING;
69
+ }
70
+ else {
71
+ text = 'Bundle does not contain duplicate packages';
72
+ insightType = InsightType.INFO;
73
+ }
74
+ return {
75
+ type: insightType,
76
+ data: {
77
+ text,
78
+ packages: duplicatePackagesMap,
79
+ },
80
+ };
81
+ };
82
+ export const extractModulesPackagesDuplicate = (_, currentExtractedData, baselineJob) => {
83
+ var _a, _b, _c, _d, _e, _f, _g, _h;
7
84
  const source = ((_a = currentExtractedData === null || currentExtractedData === void 0 ? void 0 : currentExtractedData.metrics) === null || _a === void 0 ? void 0 : _a.packages) || {};
8
85
  const packagesByName = {};
9
86
  Object.entries(source).forEach(([packageId, packageData]) => {
@@ -30,8 +107,14 @@ export const extractModulesPackagesDuplicate = (_, currentExtractedData) => {
30
107
  children: packageGroupData.children,
31
108
  });
32
109
  });
110
+ const baselineDuplicatePackages = ((_e = (_d = (_c = (_b = baselineJob === null || baselineJob === void 0 ? void 0 : baselineJob.insights) === null || _b === void 0 ? void 0 : _b.webpack) === null || _c === void 0 ? void 0 : _c.duplicatePackagesV3) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.packages) ||
111
+ ((_h = (_g = (_f = baselineJob === null || baselineJob === void 0 ? void 0 : baselineJob.insights) === null || _f === void 0 ? void 0 : _f.webpack) === null || _g === void 0 ? void 0 : _g.duplicatePackages) === null || _h === void 0 ? void 0 : _h.data) ||
112
+ {};
33
113
  if (!count) {
34
114
  return {
115
+ insights: {
116
+ duplicatePackagesV3: getDuplicatePackagesInsight({}, baselineDuplicatePackages),
117
+ },
35
118
  metrics: {
36
119
  duplicatePackagesCount: {
37
120
  value: count,
@@ -46,16 +129,20 @@ export const extractModulesPackagesDuplicate = (_, currentExtractedData) => {
46
129
  children: orderBy(duplicatePackageData.children, 'value', 'desc'),
47
130
  },
48
131
  }), {});
49
- const data = Object.entries(duplicatePackagesByName).reduce((agg, [packageName, duplicatePackageData]) => ({
50
- ...agg,
51
- [packageName]: duplicatePackageData.children.map(({ id }) => id),
52
- }), {});
132
+ const duplicatePackagesData = {};
133
+ Object.entries(duplicatePackagesByName).forEach(([packageName, packageData]) => {
134
+ if (!duplicatePackagesData[packageName]) {
135
+ duplicatePackagesData[packageName] = [];
136
+ }
137
+ duplicatePackagesData[packageName] = packageData.children.map(({ id }) => id);
138
+ });
53
139
  return {
54
140
  insights: {
55
141
  duplicatePackages: {
56
142
  type: InsightType.WARNING,
57
- data,
143
+ data: duplicatePackagesData,
58
144
  },
145
+ duplicatePackagesV3: getDuplicatePackagesInsight(duplicatePackagesData, baselineDuplicatePackages),
59
146
  },
60
147
  metrics: {
61
148
  duplicatePackagesCount: {
@@ -1 +1 @@
1
- {"version":3,"file":"modules-packages-duplicate.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules-packages-duplicate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modules-packages-duplicate.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules-packages-duplicate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bundle-stats/utils",
3
- "version": "4.3.0-beta.0",
3
+ "version": "4.3.0-beta.2",
4
4
  "description": "BundleStats utils",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -35,22 +35,22 @@
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": "^4.3.0-beta.0",
39
- "@bundle-stats/plugin-webpack-validate": "^4.3.0-beta.0",
38
+ "@bundle-stats/plugin-webpack-filter": "^4.3.0-beta.2",
39
+ "@bundle-stats/plugin-webpack-validate": "^4.3.0-beta.2",
40
40
  "query-string": "7.1.3",
41
41
  "serialize-query-params": "2.0.2",
42
42
  "use-query-params": "2.1.2"
43
43
  },
44
44
  "devDependencies": {
45
- "@types/jest": "29.2.6",
45
+ "@types/jest": "29.4.0",
46
46
  "@types/lodash": "4.14.191",
47
47
  "core-js": "3.27.2",
48
- "jest": "29.3.1",
49
- "jest-cli": "29.3.1",
48
+ "jest": "29.4.0",
49
+ "jest-cli": "29.4.0",
50
50
  "jest-date-mock": "1.0.8",
51
51
  "lodash": "4.17.21",
52
52
  "regenerator-runtime": "0.13.11",
53
- "rimraf": "4.1.1",
53
+ "rimraf": "4.1.2",
54
54
  "ts-jest": "29.0.5",
55
55
  "typescript": "4.9.4"
56
56
  },
@@ -58,5 +58,5 @@
58
58
  "core-js": "^3.0.0",
59
59
  "lodash": "^4.0.0"
60
60
  },
61
- "gitHead": "0dee5190df0098690d34ee9da7f471058fe8deed"
61
+ "gitHead": "a4732cf9ed55fb8d8c31bee857ba3ac16c04de1d"
62
62
  }
@@ -6,12 +6,3 @@ export * from './delta';
6
6
 
7
7
  export const PACKAGES_SEPARATOR = ':';
8
8
  export const PACKAGE_ID_SEPARATOR = '~';
9
-
10
- export const SOURCE_PATH_WEBPACK_STATS = 'webpack';
11
- export const SOURCE_PATH_LIGHTHOUSE = 'lighthouse';
12
- export const SOURCE_PATH_BROWSERTIME = 'browsertime';
13
- export const SOURCE_PATHS = [
14
- SOURCE_PATH_WEBPACK_STATS,
15
- SOURCE_PATH_LIGHTHOUSE,
16
- SOURCE_PATH_BROWSERTIME,
17
- ];
package/src/constants.ts CHANGED
@@ -1,3 +1,11 @@
1
+ import { InsightType } from './config/insights';
2
+
3
+ export enum Source {
4
+ webpack = 'webpack',
5
+ lighthouse = 'lighthouse',
6
+ browsertime = 'browsertime',
7
+ }
8
+
1
9
  export type SourceData = Record<string, unknown>;
2
10
 
3
11
  export enum MetricTypeType {
@@ -43,22 +51,58 @@ export interface MetricRunInfo {
43
51
  displayDeltaPercentage?: string;
44
52
  }
45
53
 
54
+ export type JobSection<T = object> = Record<Source, T>;
55
+
56
+ export enum JobSectionId {
57
+ meta = 'meta',
58
+ insights = 'insights',
59
+ summary = 'summary',
60
+ metrics = 'metrics',
61
+ rawData = 'rawData',
62
+ }
63
+
46
64
  export interface JobSummaryItem {
47
65
  baseline: number;
48
66
  current: number;
49
67
  }
68
+
69
+ export interface JobInsight<T = object> {
70
+ type: InsightType;
71
+ data: T;
72
+ }
73
+
74
+ export interface JobInsightAssetsSizeTotalData {
75
+ text: string;
76
+ md: string;
77
+ info: MetricRunInfo;
78
+ }
79
+ export type JobInsightDuplicatePackagesData = Record<string, Array<string>>;
80
+
81
+ export interface JobInsightDuplicatePackagesV3Data {
82
+ text: string;
83
+ packages: Record<string, Array<string>>;
84
+ }
85
+
50
86
  export type JobSummarySource = Record<string, JobSummaryItem>;
51
- export type JobSummary = Record<string, JobSummarySource>;
87
+ export type JobSummary = JobSection<JobSummarySource>;
88
+
89
+ export interface JobInsights {
90
+ [Source.webpack]: {
91
+ assetsSizeTotal: JobInsight<JobInsightAssetsSizeTotalData>;
92
+ duplicatePackages?: JobInsight<JobInsightDuplicatePackagesData>;
93
+ duplicatePackagesV3?: JobInsight<JobInsightDuplicatePackagesV3Data>;
94
+ };
95
+ }
52
96
 
53
97
  export type JobMetricsSource = Record<string, MetricRun | Record<string, MetricRun>>;
54
- export type JobMetrics = Record<string, JobMetricsSource>;
98
+ export type JobMetrics = JobSection<JobMetricsSource>;
55
99
 
56
100
  export interface JobData {
57
- meta?: any;
58
- insights?: any;
59
- summary?: JobSummary;
60
- metrics?: JobMetrics;
61
- rawData?: any;
101
+ [JobSectionId.meta]?: JobSection;
102
+ [JobSectionId.insights]?: JobInsights;
103
+ [JobSectionId.summary]?: JobSummary;
104
+ [JobSectionId.metrics]?: JobMetrics;
105
+ [JobSectionId.rawData]?: JobSection;
62
106
  }
63
107
 
64
108
  export interface Job extends JobData {
@@ -1,11 +1,10 @@
1
1
  import merge from 'lodash/merge';
2
2
 
3
- import { SOURCE_PATHS } from '../config';
4
3
  import { createSummary } from './create-summary';
5
4
  import * as webpack from '../webpack';
6
5
  import * as lighthouse from '../lighthouse';
7
6
  import * as browsertime from '../browsertime';
8
- import { JobData, JobMetricsSource, SourceData } from '../constants';
7
+ import { JobData, JobMetricsSource, Source, SourceData } from '../constants';
9
8
 
10
9
  interface SourceResult {
11
10
  meta: {};
@@ -21,7 +20,7 @@ interface SourceModule {
21
20
  const SOURCE_MODULES: Record<string, SourceModule> = { webpack, lighthouse, browsertime };
22
21
 
23
22
  export const createJob = (source: SourceData, baseline?: JobData): JobData =>
24
- SOURCE_PATHS.reduce((agg, sourcePath) => {
23
+ Object.values(Source).reduce((agg, sourcePath) => {
25
24
  const rawData = source[sourcePath];
26
25
 
27
26
  if (!rawData) {
@@ -1,7 +1,6 @@
1
1
  import isEmpty from 'lodash/isEmpty';
2
2
 
3
- import { SOURCE_PATHS } from '../config';
4
- import { MetricRunInfo, Job, JobSummarySource } from '../constants';
3
+ import { MetricRunInfo, Job, JobSummarySource, Source } from '../constants';
5
4
  import { getGlobalMetricType, getMetricRunInfo } from '../utils/metrics';
6
5
  import * as webpack from '../webpack';
7
6
  /* @ts-ignore */
@@ -30,7 +29,7 @@ export const createReport = (jobs: Array<Job>): Report => {
30
29
  // Add summary report data
31
30
  const summary: Record<string, Array<ReportMetricRunInfo>> = {};
32
31
 
33
- SOURCE_PATHS.forEach((sourceId) => {
32
+ Object.values(Source).forEach((sourceId) => {
34
33
  const sourceSummary = jobs[0]?.summary?.[sourceId] as JobSummarySource;
35
34
 
36
35
  if (!sourceSummary) {
@@ -221,7 +221,7 @@ export const getBundleModulesByChunk = (
221
221
  },
222
222
  });
223
223
 
224
- export const BUNLDE_PACKAGES_COUNT: ComponentLink = {
224
+ export const BUNDLE_PACKAGES_COUNT: ComponentLink = {
225
225
  section: SECTIONS.PACKAGES,
226
226
  title: I18N.COMPONENT_LINK_PACKAGES_COUNT,
227
227
  params: {
@@ -303,6 +303,6 @@ export const METRIC_COMPONENT_LINKS = new Map([
303
303
  ['webpack.moduleCount', { link: BUNDLE_MODULES }],
304
304
  ['webpack.duplicateModulesCount', { link: BUNDLE_MODULES_DUPLICATE }],
305
305
  ['webpack.duplicateCode', { link: BUNDLE_MODULES_DUPLICATE }],
306
- ['webpack.packageCount', { link: BUNLDE_PACKAGES_COUNT }],
306
+ ['webpack.packageCount', { link: BUNDLE_PACKAGES_COUNT }],
307
307
  ['webpack.duplicatePackagesCount', { link: BUNDLE_PACKAGES_DUPLICATE }],
308
308
  ]);
@@ -3,6 +3,14 @@ import orderBy from 'lodash/orderBy';
3
3
  import sum from 'lodash/sum';
4
4
 
5
5
  import { InsightType } from '../../config';
6
+ import {
7
+ Job,
8
+ JobInsight,
9
+ JobInsightDuplicatePackagesData,
10
+ JobInsightDuplicatePackagesV3Data,
11
+ JobInsights,
12
+ MetricRun,
13
+ } from '../../constants';
6
14
  import { Packages } from '../types';
7
15
 
8
16
  interface DuplicatePackage {
@@ -16,7 +24,116 @@ interface DuplicatePackageGroup {
16
24
  children: Array<DuplicatePackage>;
17
25
  }
18
26
 
19
- export const extractModulesPackagesDuplicate = (_: any, currentExtractedData: any) => {
27
+ interface ModulesPackagesDuplicateData {
28
+ insights: {
29
+ duplicatePackages?: JobInsights['webpack']['duplicatePackages'];
30
+ duplicatePackagesV3: JobInsights['webpack']['duplicatePackagesV3'];
31
+ };
32
+ metrics: {
33
+ duplicatePackagesCount: MetricRun;
34
+ };
35
+ }
36
+
37
+ export const getDuplicatePackagesInsight = (
38
+ duplicatePackagesMap: Record<string, Array<string>>,
39
+ baselineDuplicatePackagesMap?: Record<string, Array<string>>,
40
+ ): JobInsight<JobInsightDuplicatePackagesV3Data> => {
41
+ const duplicateInstances: Array<string> = [];
42
+ const baselineDuplicateInstances: Array<string> = [];
43
+ const newDuplicateInstances: Array<string> = [];
44
+ const removedDuplicateInstances: Array<string> = [];
45
+
46
+ Object.entries(duplicatePackagesMap).forEach(([id, instances]) => {
47
+ instances.forEach((duplicateInstance) => {
48
+ if (duplicateInstance === id) {
49
+ return;
50
+ }
51
+
52
+ duplicateInstances.push(duplicateInstance);
53
+
54
+ if (baselineDuplicatePackagesMap?.[id]?.includes(duplicateInstance)) {
55
+ return;
56
+ }
57
+
58
+ newDuplicateInstances.push(duplicateInstance);
59
+ });
60
+ });
61
+
62
+ if (baselineDuplicatePackagesMap) {
63
+ Object.entries(baselineDuplicatePackagesMap).forEach(([id, instances]) => {
64
+ instances.forEach((duplicateInstance) => {
65
+ if (duplicateInstance === id) {
66
+ return;
67
+ }
68
+
69
+ baselineDuplicateInstances.push(duplicateInstance);
70
+
71
+ if (duplicatePackagesMap?.[id]?.includes(duplicateInstance)) {
72
+ return;
73
+ }
74
+
75
+ removedDuplicateInstances.push(duplicateInstance);
76
+ });
77
+ });
78
+ }
79
+
80
+ const duplicateInstancesCount = duplicateInstances.length;
81
+ const newDuplicateInstancesCount = newDuplicateInstances.length;
82
+ const removedDuplicateInstancesCount = removedDuplicateInstances.length;
83
+
84
+ let text: string;
85
+ let insightType: InsightType;
86
+
87
+ if (newDuplicateInstancesCount > 0 && removedDuplicateInstancesCount > 0) {
88
+ // New duplicate packages and removed duplicates
89
+ const item =
90
+ newDuplicateInstancesCount > 1 || removedDuplicateInstancesCount > 1 ? 'packages' : 'package';
91
+ text = `Bundle introduced ${newDuplicateInstancesCount} and removed ${removedDuplicateInstancesCount} duplicate ${item}`;
92
+ insightType = InsightType.ERROR;
93
+ } else if (newDuplicateInstancesCount > 0 && baselineDuplicatePackagesMap) {
94
+ // New duplicate packages and baseline comparison
95
+ const item = newDuplicateInstancesCount > 1 ? 'packages' : 'package';
96
+ text = `Bundle introduced ${newDuplicateInstancesCount} duplicate ${item}`;
97
+ insightType = InsightType.ERROR;
98
+ } else if (newDuplicateInstancesCount > 0) {
99
+ // New duplicate packages and no baseline
100
+ const item = newDuplicateInstancesCount > 1 ? 'packages' : 'package';
101
+ text = `Bundle contains ${newDuplicateInstancesCount} duplicate ${item}`;
102
+ insightType = InsightType.WARNING;
103
+ } else if (removedDuplicateInstancesCount > 0) {
104
+ // Removed duplicate packages
105
+ const item = removedDuplicateInstancesCount > 1 ? 'packages' : 'package';
106
+ text = `Bundle removed ${removedDuplicateInstancesCount} duplicate ${item}`;
107
+ insightType = InsightType.INFO;
108
+ } else if (
109
+ newDuplicateInstancesCount === 0 &&
110
+ removedDuplicateInstancesCount === 0 &&
111
+ duplicateInstancesCount > 0
112
+ ) {
113
+ // No change comparred with the baseline
114
+ const item = duplicateInstancesCount > 1 ? 'packages' : 'package';
115
+ text = `Bundle contains ${duplicateInstancesCount} duplicate ${item}`;
116
+ insightType = InsightType.WARNING;
117
+ } else {
118
+ // No change
119
+ text = 'Bundle does not contain duplicate packages';
120
+ insightType = InsightType.INFO;
121
+ }
122
+
123
+ return {
124
+ type: insightType,
125
+ data: {
126
+ text,
127
+ packages: duplicatePackagesMap,
128
+ },
129
+ };
130
+ };
131
+
132
+ export const extractModulesPackagesDuplicate = (
133
+ _: any,
134
+ currentExtractedData: any,
135
+ baselineJob?: Job,
136
+ ): ModulesPackagesDuplicateData => {
20
137
  const source: Packages = currentExtractedData?.metrics?.packages || {};
21
138
 
22
139
  // Group packages by name(uniq)
@@ -58,8 +175,16 @@ export const extractModulesPackagesDuplicate = (_: any, currentExtractedData: an
58
175
  });
59
176
  });
60
177
 
178
+ const baselineDuplicatePackages =
179
+ baselineJob?.insights?.webpack?.duplicatePackagesV3?.data?.packages ||
180
+ baselineJob?.insights?.webpack?.duplicatePackages?.data ||
181
+ {};
182
+
61
183
  if (!count) {
62
184
  return {
185
+ insights: {
186
+ duplicatePackagesV3: getDuplicatePackagesInsight({}, baselineDuplicatePackages),
187
+ },
63
188
  metrics: {
64
189
  duplicatePackagesCount: {
65
190
  value: count,
@@ -68,7 +193,12 @@ export const extractModulesPackagesDuplicate = (_: any, currentExtractedData: an
68
193
  };
69
194
  }
70
195
 
71
- const duplicatePackagesByName = orderBy(duplicatePackages, 'value', 'desc').reduce(
196
+ // Group duplicate packages by name and order children by value
197
+ const duplicatePackagesByName: Record<string, DuplicatePackageGroup> = orderBy(
198
+ duplicatePackages,
199
+ 'value',
200
+ 'desc',
201
+ ).reduce(
72
202
  (agg, { name, ...duplicatePackageData }: DuplicatePackageGroup) => ({
73
203
  ...agg,
74
204
  [name]: {
@@ -80,21 +210,27 @@ export const extractModulesPackagesDuplicate = (_: any, currentExtractedData: an
80
210
  );
81
211
 
82
212
  // Generate v2 data structure
83
- // @TODO remove in v4.0
84
- const data = Object.entries(duplicatePackagesByName).reduce(
85
- (agg, [packageName, duplicatePackageData]) => ({
86
- ...agg,
87
- [packageName]: (duplicatePackageData as DuplicatePackageGroup).children.map(({ id }) => id),
88
- }),
89
- {},
90
- );
213
+ // @TODO remove in v5.0
214
+ const duplicatePackagesData: JobInsightDuplicatePackagesData = {};
215
+
216
+ Object.entries(duplicatePackagesByName).forEach(([packageName, packageData]) => {
217
+ if (!duplicatePackagesData[packageName]) {
218
+ duplicatePackagesData[packageName] = [];
219
+ }
220
+
221
+ duplicatePackagesData[packageName] = packageData.children.map(({ id }) => id);
222
+ });
91
223
 
92
224
  return {
93
225
  insights: {
94
226
  duplicatePackages: {
95
227
  type: InsightType.WARNING,
96
- data,
228
+ data: duplicatePackagesData,
97
229
  },
230
+ duplicatePackagesV3: getDuplicatePackagesInsight(
231
+ duplicatePackagesData,
232
+ baselineDuplicatePackages,
233
+ ),
98
234
  },
99
235
  metrics: {
100
236
  duplicatePackagesCount: {
@@ -5,7 +5,3 @@ export * from "./metrics";
5
5
  export * from "./delta";
6
6
  export const PACKAGES_SEPARATOR: ":";
7
7
  export const PACKAGE_ID_SEPARATOR: "~";
8
- export const SOURCE_PATH_WEBPACK_STATS: "webpack";
9
- export const SOURCE_PATH_LIGHTHOUSE: "lighthouse";
10
- export const SOURCE_PATH_BROWSERTIME: "browsertime";
11
- export const SOURCE_PATHS: string[];
@@ -1,3 +1,9 @@
1
+ import { InsightType } from './config/insights';
2
+ export declare enum Source {
3
+ webpack = "webpack",
4
+ lighthouse = "lighthouse",
5
+ browsertime = "browsertime"
6
+ }
1
7
  export type SourceData = Record<string, unknown>;
2
8
  export declare enum MetricTypeType {
3
9
  'METRIC_TYPE_NUMERIC' = "METRIC_TYPE_NUMERIC",
@@ -36,20 +42,49 @@ export interface MetricRunInfo {
36
42
  displayDelta?: string;
37
43
  displayDeltaPercentage?: string;
38
44
  }
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
+ }
39
53
  export interface JobSummaryItem {
40
54
  baseline: number;
41
55
  current: number;
42
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
+ }
43
71
  export type JobSummarySource = Record<string, JobSummaryItem>;
44
- export type JobSummary = Record<string, JobSummarySource>;
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
+ }
45
80
  export type JobMetricsSource = Record<string, MetricRun | Record<string, MetricRun>>;
46
- export type JobMetrics = Record<string, JobMetricsSource>;
81
+ export type JobMetrics = JobSection<JobMetricsSource>;
47
82
  export interface JobData {
48
- meta?: any;
49
- insights?: any;
50
- summary?: JobSummary;
51
- metrics?: JobMetrics;
52
- rawData?: any;
83
+ [JobSectionId.meta]?: JobSection;
84
+ [JobSectionId.insights]?: JobInsights;
85
+ [JobSectionId.summary]?: JobSummary;
86
+ [JobSectionId.metrics]?: JobMetrics;
87
+ [JobSectionId.rawData]?: JobSection;
53
88
  }
54
89
  export interface Job extends JobData {
55
90
  internalBuildNumber: number;
@@ -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,21 +1,13 @@
1
- import { InsightType } from '../../config';
2
- export declare const extractModulesPackagesDuplicate: (_: any, currentExtractedData: any) => {
3
- metrics: {
4
- duplicatePackagesCount: {
5
- value: number;
6
- };
7
- };
8
- insights?: undefined;
9
- } | {
1
+ import { Job, JobInsight, JobInsightDuplicatePackagesV3Data, JobInsights, MetricRun } from '../../constants';
2
+ interface ModulesPackagesDuplicateData {
10
3
  insights: {
11
- duplicatePackages: {
12
- type: InsightType;
13
- data: {};
14
- };
4
+ duplicatePackages?: JobInsights['webpack']['duplicatePackages'];
5
+ duplicatePackagesV3: JobInsights['webpack']['duplicatePackagesV3'];
15
6
  };
16
7
  metrics: {
17
- duplicatePackagesCount: {
18
- value: number;
19
- };
8
+ duplicatePackagesCount: MetricRun;
20
9
  };
21
- };
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 {};