@atlaskit/dependency-version-analytics 1.1.0 → 1.2.0

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 (44) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +5 -3
  3. package/dist/cjs/cli.js +52 -17
  4. package/dist/cjs/commands/populate-historic-data/index.js +2 -2
  5. package/dist/cjs/commands/populate-historic-data/lib/dependency-store.js +227 -451
  6. package/dist/cjs/commands/populate-historic-data/package.js +30 -73
  7. package/dist/cjs/commands/populate-historic-data/product.js +129 -289
  8. package/dist/cjs/commands/populate-historic-data/util/allowed-scopes.js +15 -0
  9. package/dist/cjs/commands/populate-historic-data/util/generate-csv.js +16 -21
  10. package/dist/cjs/constants.js +2 -2
  11. package/dist/cjs/index.js +3 -3
  12. package/dist/cjs/util/analytics.js +77 -102
  13. package/dist/cjs/util/get-file-history-from-git.js +4 -4
  14. package/dist/cjs/util/get-package-version-history.js +5 -5
  15. package/dist/cjs/util/git.js +75 -205
  16. package/dist/cjs/util/statlas.js +27 -97
  17. package/dist/cjs/util/yarn.js +40 -101
  18. package/dist/cjs/version.json +1 -1
  19. package/dist/es2019/cli.js +10 -4
  20. package/dist/es2019/commands/populate-historic-data/lib/dependency-store.js +6 -4
  21. package/dist/es2019/commands/populate-historic-data/package.js +4 -2
  22. package/dist/es2019/commands/populate-historic-data/product.js +8 -6
  23. package/dist/es2019/commands/populate-historic-data/util/allowed-scopes.js +7 -0
  24. package/dist/es2019/commands/populate-historic-data/util/generate-csv.js +1 -1
  25. package/dist/es2019/version.json +1 -1
  26. package/dist/esm/cli.js +8 -3
  27. package/dist/esm/commands/populate-historic-data/lib/dependency-store.js +20 -15
  28. package/dist/esm/commands/populate-historic-data/package.js +20 -17
  29. package/dist/esm/commands/populate-historic-data/product.js +45 -42
  30. package/dist/esm/commands/populate-historic-data/util/allowed-scopes.js +11 -0
  31. package/dist/esm/commands/populate-historic-data/util/generate-csv.js +1 -1
  32. package/dist/esm/util/analytics.js +4 -3
  33. package/dist/esm/util/git.js +14 -13
  34. package/dist/esm/util/statlas.js +8 -7
  35. package/dist/esm/util/yarn.js +6 -5
  36. package/dist/esm/version.json +1 -1
  37. package/dist/types/commands/populate-historic-data/lib/dependency-store.d.ts +3 -2
  38. package/dist/types/commands/populate-historic-data/types.d.ts +3 -2
  39. package/dist/types/commands/populate-historic-data/util/allowed-scopes.d.ts +2 -0
  40. package/dist/types/commands/populate-historic-data/util/generate-csv.d.ts +2 -2
  41. package/package.json +2 -2
  42. package/report.api.md +1 -0
  43. package/tmp/api-report-tmp.d.ts +1 -0
  44. package/tokenize-arg-string.ts +0 -0
@@ -1,24 +1,19 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.generateCSV = void 0;
8
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
7
  /** Generates a CSV of product package changes over time */
10
- var generateCSV = function generateCSV(packageChanges) {
11
- var csvData = [['']];
12
- packageChanges.forEach(function (packageChange) {
13
- var firstColumn = csvData[0];
14
- var currentRow = firstColumn.push(packageChange.date) - 1;
15
- Object.entries(packageChange.akDeps).forEach(function (_ref) {
16
- var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
17
- name = _ref2[0],
18
- version = _ref2[1].version;
19
- var depColumnIndex = csvData.findIndex(function (item) {
20
- return item[0] === name;
21
- });
8
+ const generateCSV = packageChanges => {
9
+ const csvData = [['']];
10
+ packageChanges.forEach(packageChange => {
11
+ const firstColumn = csvData[0];
12
+ const currentRow = firstColumn.push(packageChange.date) - 1;
13
+ Object.entries(packageChange.deps).forEach(([name, {
14
+ version
15
+ }]) => {
16
+ let depColumnIndex = csvData.findIndex(item => item[0] === name);
22
17
  if (depColumnIndex === -1) {
23
18
  depColumnIndex = csvData.push([name]) - 1;
24
19
  }
@@ -27,8 +22,8 @@ var generateCSV = function generateCSV(packageChanges) {
27
22
  csvData[depColumnIndex][currentRow] = version;
28
23
  });
29
24
  });
30
- for (var i = 0; i < csvData.length; i++) {
31
- for (var j = 0; j < csvData.length; j++) {
25
+ for (let i = 0; i < csvData.length; i++) {
26
+ for (let j = 0; j < csvData.length; j++) {
32
27
  if (typeof csvData[i][j] !== 'string') {
33
28
  // console.log('found empty cell');
34
29
  csvData[i][j] = '';
@@ -36,17 +31,17 @@ var generateCSV = function generateCSV(packageChanges) {
36
31
  }
37
32
  if (i !== 0 && csvData[0].length < csvData[i].length) {}
38
33
  }
39
- var csvStrings = [];
40
- csvData.forEach(function (column) {
34
+ const csvStrings = [];
35
+ csvData.forEach(column => {
41
36
  if (!column) {
42
37
  return;
43
38
  }
44
- for (var rowIndex = 0; rowIndex < csvData[0].length; rowIndex++) {
45
- var rowItem = column[rowIndex] || '';
39
+ for (let rowIndex = 0; rowIndex < csvData[0].length; rowIndex++) {
40
+ const rowItem = column[rowIndex] || '';
46
41
  if (typeof csvStrings[rowIndex] !== 'string') {
47
42
  csvStrings[rowIndex] = '';
48
43
  }
49
- csvStrings[rowIndex] += "\"".concat(rowItem, "\",");
44
+ csvStrings[rowIndex] += `"${rowItem}",`;
50
45
  }
51
46
  });
52
47
  return csvStrings.join('\n');
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.DEP_TYPES = exports.DEFAULT_TAG = void 0;
7
- var DEFAULT_TAG = 'atlaskit-dependency-version-analytics-last-run';
7
+ const DEFAULT_TAG = 'atlaskit-dependency-version-analytics-last-run';
8
8
  exports.DEFAULT_TAG = DEFAULT_TAG;
9
- var DEP_TYPES = [{
9
+ const DEP_TYPES = [{
10
10
  packageJsonKey: 'devDependencies',
11
11
  depTypeName: 'devDependency'
12
12
  }, {
package/dist/cjs/index.js CHANGED
@@ -5,19 +5,19 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  Object.defineProperty(exports, "populatePackage", {
7
7
  enumerable: true,
8
- get: function get() {
8
+ get: function () {
9
9
  return _populateHistoricData.populatePackage;
10
10
  }
11
11
  });
12
12
  Object.defineProperty(exports, "populateProduct", {
13
13
  enumerable: true,
14
- get: function get() {
14
+ get: function () {
15
15
  return _populateHistoricData.populateProduct;
16
16
  }
17
17
  });
18
18
  Object.defineProperty(exports, "sendAnalytics", {
19
19
  enumerable: true,
20
- get: function get() {
20
+ get: function () {
21
21
  return _analytics.sendAnalytics;
22
22
  }
23
23
  });
@@ -6,26 +6,25 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.createUpgradeEvent = createUpgradeEvent;
8
8
  exports.sendAnalytics = sendAnalytics;
9
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
9
  var _chalk = _interopRequireDefault(require("chalk"));
13
10
  var _inquirer = _interopRequireDefault(require("inquirer"));
14
11
  var _semver = _interopRequireDefault(require("semver"));
15
12
  var _analyticsNodeClient = require("@atlassiansox/analytics-node-client");
16
13
  var _version = require("../version.json");
17
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14
+ // @ts-ignore
15
+
16
+ /* eslint-disable-next-line import/no-unresolved */
17
+
19
18
  function getUpgradeType(version, previousVersion) {
20
19
  if (previousVersion == null && version != null) {
21
20
  return 'add';
22
21
  } else if (previousVersion != null && version == null) {
23
22
  return 'remove';
24
23
  } else if (previousVersion != null && version != null && previousVersion !== version) {
25
- var coercedPrevious = _semver.default.coerce(previousVersion);
26
- var coercedNew = _semver.default.coerce(version);
24
+ const coercedPrevious = _semver.default.coerce(previousVersion);
25
+ const coercedNew = _semver.default.coerce(version);
27
26
  if (coercedNew == null) {
28
- console.error("Found invalid version \"".concat(version, "\", skipping"));
27
+ console.error(`Found invalid version "${version}", skipping`);
29
28
  return null;
30
29
  }
31
30
  if (coercedPrevious != null && _semver.default.lt(coercedNew, coercedPrevious)) {
@@ -38,123 +37,99 @@ function getUpgradeType(version, previousVersion) {
38
37
  }
39
38
  }
40
39
  function getUpgradeSubType(version, previousVersion) {
41
- var upgradeSubType = null;
40
+ let upgradeSubType = null;
42
41
  if (version == null || previousVersion == null) {
43
42
  return upgradeSubType;
44
43
  }
45
- var parsedOld = _semver.default.coerce(previousVersion);
46
- var parsedNew = _semver.default.coerce(version);
44
+ const parsedOld = _semver.default.coerce(previousVersion);
45
+ const parsedNew = _semver.default.coerce(version);
47
46
  if (parsedOld && parsedNew) {
48
47
  upgradeSubType = _semver.default.diff(parsedOld.version, parsedNew.version);
49
48
  }
50
49
  return upgradeSubType;
51
50
  }
52
- function createUpgradeEvent(name, version, previousVersion, date) {
53
- var _optionalArgs$tags, _ref, _tags$next, _tags$hotfix, _ref2;
54
- var optionalArgs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
51
+ function createUpgradeEvent(name, version, previousVersion, date, optionalArgs = {}) {
55
52
  if (Number.isNaN(Date.parse(date))) {
56
- throw new Error("Invalid date: '".concat(date, "'"));
53
+ throw new Error(`Invalid date: '${date}'`);
57
54
  }
58
- var upgradeType = getUpgradeType(version, previousVersion);
55
+ const upgradeType = getUpgradeType(version, previousVersion);
59
56
  if (!upgradeType) {
60
57
  // Not an upgrade for this dependency, return null
61
58
  return null;
62
59
  }
63
- var upgradeSubType = getUpgradeSubType(version, previousVersion);
64
- var eventVersion = upgradeType !== 'remove' ? version : previousVersion;
65
- var parsedVersion = _semver.default.coerce(eventVersion);
66
- var rcKey = null;
67
- var tags = (_optionalArgs$tags = optionalArgs === null || optionalArgs === void 0 ? void 0 : optionalArgs.tags) !== null && _optionalArgs$tags !== void 0 ? _optionalArgs$tags : {};
68
- Object.keys(tags).forEach(function (key) {
60
+ const upgradeSubType = getUpgradeSubType(version, previousVersion);
61
+ const eventVersion = upgradeType !== 'remove' ? version : previousVersion;
62
+ const parsedVersion = _semver.default.coerce(eventVersion);
63
+ let rcKey = null;
64
+ const tags = (optionalArgs === null || optionalArgs === void 0 ? void 0 : optionalArgs.tags) ?? {};
65
+ Object.keys(tags).forEach(key => {
69
66
  if (key.startsWith('rc')) {
70
67
  rcKey = key;
71
68
  return;
72
69
  }
73
70
  });
74
- return _objectSpread({
71
+ return {
75
72
  cliVersion: _version.version,
76
73
  dependencyName: name,
77
74
  versionString: eventVersion,
78
- major: parsedVersion ? "".concat(parsedVersion.major) : null,
79
- minor: parsedVersion ? "".concat(parsedVersion.minor) : null,
80
- patch: parsedVersion ? "".concat(parsedVersion.patch) : null,
75
+ major: parsedVersion ? `${parsedVersion.major}` : null,
76
+ minor: parsedVersion ? `${parsedVersion.minor}` : null,
77
+ patch: parsedVersion ? `${parsedVersion.patch}` : null,
81
78
  date: new Date(date).toISOString(),
82
- upgradeType: upgradeType,
83
- upgradeSubType: upgradeSubType,
84
- latestTag: (_ref = tags && tags['latest']) !== null && _ref !== void 0 ? _ref : null,
85
- nextTag: (_tags$next = tags['next']) !== null && _tags$next !== void 0 ? _tags$next : null,
86
- hotfixTag: (_tags$hotfix = tags['hotfix']) !== null && _tags$hotfix !== void 0 ? _tags$hotfix : null,
87
- rcTag: (_ref2 = rcKey && tags[rcKey]) !== null && _ref2 !== void 0 ? _ref2 : null
88
- }, optionalArgs);
79
+ upgradeType,
80
+ upgradeSubType,
81
+ latestTag: (tags && tags['latest']) ?? null,
82
+ nextTag: tags['next'] ?? null,
83
+ hotfixTag: tags['hotfix'] ?? null,
84
+ rcTag: (rcKey && tags[rcKey]) ?? null,
85
+ ...optionalArgs
86
+ };
89
87
  }
90
- function sendAnalytics(_x, _x2) {
91
- return _sendAnalytics.apply(this, arguments);
92
- }
93
- function _sendAnalytics() {
94
- _sendAnalytics = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(analyticsEvents, _ref3) {
95
- var dev, limit, product, skipPrompt, analyticsEnv, eventsToSend, client, answers, promises;
96
- return _regenerator.default.wrap(function _callee$(_context) {
97
- while (1) {
98
- switch (_context.prev = _context.next) {
99
- case 0:
100
- dev = _ref3.dev, limit = _ref3.limit, product = _ref3.product, skipPrompt = _ref3.skipPrompt;
101
- analyticsEnv = dev ? 'dev' : 'prod';
102
- eventsToSend = limit != null ? analyticsEvents.slice(0, limit) : analyticsEvents;
103
- client = (0, _analyticsNodeClient.analyticsClient)({
104
- env: dev ? 'dev' : 'prod',
105
- product: product
106
- });
107
- if (skipPrompt) {
108
- _context.next = 9;
109
- break;
110
- }
111
- _context.next = 7;
112
- return _inquirer.default.prompt([{
113
- type: 'confirm',
114
- name: 'continue',
115
- message: "Are you sure you want to send ".concat(eventsToSend.length, " historical analytics events to '").concat(analyticsEnv, "' env for product '").concat(product, "?"),
116
- default: false
117
- }]);
118
- case 7:
119
- answers = _context.sent;
120
- if (!answers.continue) {
121
- console.log('Aborting');
122
- process.exit(0);
123
- }
124
- case 9:
125
- _context.prev = 9;
126
- _context.next = 12;
127
- return Promise.all(eventsToSend.map(function (event) {
128
- return client.sendTrackEvent({
129
- anonymousId: 'unknown',
130
- trackEvent: {
131
- tags: ['atlaskit'],
132
- source: '@atlaskit/dependency-version-analytics',
133
- action: 'upgraded',
134
- actionSubject: 'akDependency',
135
- attributes: _objectSpread({}, event),
136
- origin: 'console',
137
- platform: 'bot'
138
- }
139
- });
140
- }));
141
- case 12:
142
- promises = _context.sent;
143
- console.log(_chalk.default.green("Sent ".concat(promises.length, " dependency version upgrade analytics events")));
144
- _context.next = 21;
145
- break;
146
- case 16:
147
- _context.prev = 16;
148
- _context.t0 = _context["catch"](9);
149
- console.error(_chalk.default.red('Sending analytics failed'));
150
- console.error(_context.t0);
151
- process.exit(1);
152
- case 21:
153
- case "end":
154
- return _context.stop();
88
+ async function sendAnalytics(analyticsEvents, {
89
+ dev,
90
+ limit,
91
+ product,
92
+ skipPrompt
93
+ }) {
94
+ const analyticsEnv = dev ? 'dev' : 'prod';
95
+ const eventsToSend = limit != null ? analyticsEvents.slice(0, limit) : analyticsEvents;
96
+ const client = (0, _analyticsNodeClient.analyticsClient)({
97
+ env: dev ? 'dev' : 'prod',
98
+ product: product
99
+ });
100
+ if (!skipPrompt) {
101
+ const answers = await _inquirer.default.prompt([{
102
+ type: 'confirm',
103
+ name: 'continue',
104
+ message: `Are you sure you want to send ${eventsToSend.length} historical analytics events to '${analyticsEnv}' env for product '${product}?`,
105
+ default: false
106
+ }]);
107
+ if (!answers.continue) {
108
+ console.log('Aborting');
109
+ process.exit(0);
110
+ }
111
+ }
112
+ try {
113
+ const promises = await Promise.all(eventsToSend.map(event => {
114
+ return client.sendTrackEvent({
115
+ anonymousId: 'unknown',
116
+ trackEvent: {
117
+ tags: ['atlaskit'],
118
+ source: '@atlaskit/dependency-version-analytics',
119
+ action: 'upgraded',
120
+ actionSubject: 'akDependency',
121
+ attributes: {
122
+ ...event
123
+ },
124
+ origin: 'console',
125
+ platform: 'bot'
155
126
  }
156
- }
157
- }, _callee, null, [[9, 16]]);
158
- }));
159
- return _sendAnalytics.apply(this, arguments);
127
+ });
128
+ }));
129
+ console.log(_chalk.default.green(`Sent ${promises.length} dependency version upgrade analytics events`));
130
+ } catch (e) {
131
+ console.error(_chalk.default.red('Sending analytics failed'));
132
+ console.error(e);
133
+ process.exit(1);
134
+ }
160
135
  }
@@ -6,12 +6,12 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = getFileHistoryFromGit;
7
7
  var _child_process = require("child_process");
8
8
  // Lock files tend to be huge
9
- var FiveMBBuffer = 1024 * 5000;
9
+ const FiveMBBuffer = 1024 * 5000;
10
10
  function getFileHistoryFromGit(fileName) {
11
- return new Promise(function (resolve, reject) {
12
- (0, _child_process.exec)("git log ".concat(fileName), {
11
+ return new Promise((resolve, reject) => {
12
+ (0, _child_process.exec)(`git log ${fileName}`, {
13
13
  maxBuffer: FiveMBBuffer
14
- }, function (error, stdout, stderr) {
14
+ }, (error, stdout, stderr) => {
15
15
  if (error) {
16
16
  reject(error);
17
17
  }
@@ -6,23 +6,23 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = getPackageVersionHistoryAndTags;
7
7
  var _child_process = require("child_process");
8
8
  function getPackageVersionHistoryAndTags(packageName) {
9
- return new Promise(function (resolve, reject) {
10
- (0, _child_process.exec)("yarn info ".concat(packageName, " --json"), function (error, stdout, stderr) {
9
+ return new Promise((resolve, reject) => {
10
+ (0, _child_process.exec)(`yarn info ${packageName} --json`, (error, stdout, stderr) => {
11
11
  if (error) {
12
12
  reject(error);
13
13
  }
14
14
  if (stderr) {
15
15
  reject(stderr);
16
16
  }
17
- var json;
17
+ let json;
18
18
  try {
19
- var parseData = JSON.parse(stdout).data;
19
+ const parseData = JSON.parse(stdout).data;
20
20
  json = {
21
21
  time: parseData['time'],
22
22
  'dist-tags': parseData['dist-tags']
23
23
  };
24
24
  } catch (e) {
25
- reject("Error parsing json output: ".concat(e));
25
+ reject(`Error parsing json output: ${e}`);
26
26
  }
27
27
  resolve(json);
28
28
  });