@atlaskit/codemod-cli 0.11.4 → 0.12.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 (60) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/cli.js +72 -75
  3. package/dist/cjs/filepath.js +29 -83
  4. package/dist/cjs/index.js +3 -6
  5. package/dist/cjs/main.js +165 -441
  6. package/dist/cjs/presets/css-to-design-tokens/css-to-design-tokens.js +44 -135
  7. package/dist/cjs/presets/css-to-design-tokens/utils/legacy-colors.js +3 -4
  8. package/dist/cjs/presets/css-to-design-tokens/utils/meta.js +6 -29
  9. package/dist/cjs/presets/index.js +2 -9
  10. package/dist/cjs/presets/styled-to-emotion/styled-to-emotion.js +13 -25
  11. package/dist/cjs/presets/theme-to-design-tokens/theme-to-design-tokens.js +34 -82
  12. package/dist/cjs/presets/theme-to-design-tokens/utils/ast-meta.js +14 -41
  13. package/dist/cjs/presets/theme-to-design-tokens/utils/ast.js +0 -2
  14. package/dist/cjs/presets/theme-to-design-tokens/utils/color.js +9 -28
  15. package/dist/cjs/presets/theme-to-design-tokens/utils/fuzzy-search.js +44 -106
  16. package/dist/cjs/presets/theme-to-design-tokens/utils/legacy-colors.js +3 -3
  17. package/dist/cjs/presets/theme-to-design-tokens/utils/named-colors.js +1 -1
  18. package/dist/cjs/presets/theme-to-design-tokens/utils/tokens.js +2 -22
  19. package/dist/cjs/sinceRef.js +36 -92
  20. package/dist/cjs/transforms.js +27 -72
  21. package/dist/cjs/types.js +2 -45
  22. package/dist/cjs/utils.js +7 -20
  23. package/dist/cjs/version.json +1 -1
  24. package/dist/es2019/filepath.js +7 -5
  25. package/dist/es2019/main.js +17 -51
  26. package/dist/es2019/presets/css-to-design-tokens/css-to-design-tokens.js +19 -51
  27. package/dist/es2019/presets/css-to-design-tokens/utils/legacy-colors.js +0 -1
  28. package/dist/es2019/presets/css-to-design-tokens/utils/meta.js +0 -6
  29. package/dist/es2019/presets/index.js +1 -1
  30. package/dist/es2019/presets/styled-to-emotion/styled-to-emotion.js +1 -4
  31. package/dist/es2019/presets/theme-to-design-tokens/theme-to-design-tokens.js +4 -14
  32. package/dist/es2019/presets/theme-to-design-tokens/utils/ast-meta.js +2 -11
  33. package/dist/es2019/presets/theme-to-design-tokens/utils/color.js +2 -7
  34. package/dist/es2019/presets/theme-to-design-tokens/utils/fuzzy-search.js +38 -95
  35. package/dist/es2019/presets/theme-to-design-tokens/utils/tokens.js +0 -1
  36. package/dist/es2019/sinceRef.js +2 -11
  37. package/dist/es2019/transforms.js +3 -13
  38. package/dist/es2019/types.js +1 -0
  39. package/dist/es2019/utils.js +1 -12
  40. package/dist/es2019/version.json +1 -1
  41. package/dist/esm/cli.js +53 -57
  42. package/dist/esm/filepath.js +51 -63
  43. package/dist/esm/main.js +221 -322
  44. package/dist/esm/presets/css-to-design-tokens/css-to-design-tokens.js +33 -71
  45. package/dist/esm/presets/css-to-design-tokens/utils/legacy-colors.js +0 -1
  46. package/dist/esm/presets/css-to-design-tokens/utils/meta.js +0 -6
  47. package/dist/esm/presets/index.js +1 -1
  48. package/dist/esm/presets/styled-to-emotion/styled-to-emotion.js +1 -4
  49. package/dist/esm/presets/theme-to-design-tokens/theme-to-design-tokens.js +4 -15
  50. package/dist/esm/presets/theme-to-design-tokens/utils/ast-meta.js +2 -11
  51. package/dist/esm/presets/theme-to-design-tokens/utils/color.js +2 -7
  52. package/dist/esm/presets/theme-to-design-tokens/utils/fuzzy-search.js +38 -95
  53. package/dist/esm/presets/theme-to-design-tokens/utils/tokens.js +0 -1
  54. package/dist/esm/sinceRef.js +49 -65
  55. package/dist/esm/transforms.js +4 -14
  56. package/dist/esm/types.js +1 -11
  57. package/dist/esm/utils.js +1 -12
  58. package/dist/esm/version.json +1 -1
  59. package/package.json +2 -2
  60. package/tmp/api-report-tmp.d.ts +0 -66
@@ -1,109 +1,64 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.parseTransformPath = exports.hasTransform = exports.getTransforms = exports.getTransformVersion = exports.getTransformPath = exports.getTransformModule = void 0;
9
-
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
8
  var _path = _interopRequireDefault(require("path"));
13
-
14
9
  var _glob = _interopRequireDefault(require("glob"));
15
-
16
10
  var _semver = _interopRequireDefault(require("semver"));
17
-
18
11
  var _presets = _interopRequireDefault(require("./presets"));
19
-
20
- var basePath = function basePath(packages) {
21
- var packageDirectory = packages && packages.length > 0 ? ["{".concat(packages.map(function (pkg) {
22
- return pkg.name;
23
- }).join(','), ",}")] : ['@{atlaskit,atlassian,atlassiansox}', '*'];
24
- return _path.default.join.apply(_path.default, [process.cwd(), 'node_modules'].concat(packageDirectory, ['codemods']));
12
+ const basePath = packages => {
13
+ const packageDirectory = packages && packages.length > 0 ? [`{${packages.map(pkg => pkg.name).join(',')},}`] : ['@{atlaskit,atlassian,atlassiansox}', '*'];
14
+ return _path.default.join(process.cwd(), 'node_modules', ...packageDirectory, 'codemods');
25
15
  };
16
+ const hasTransform = transformPath => _glob.default.sync(transformPath).length > 0;
26
17
 
27
- var hasTransform = function hasTransform(transformPath) {
28
- return _glob.default.sync(transformPath).length > 0;
29
- };
30
18
  /** Retrieves transforms for `packages` if provided, otherwise all transforms including presets */
31
-
32
-
33
19
  exports.hasTransform = hasTransform;
34
-
35
- var getTransforms = function getTransforms(packages) {
36
- var transforms = [_path.default.join(basePath(packages), '*.@(ts|tsx|js)'), _path.default.join(basePath(packages), '*', 'index.@(ts|tsx|js)')];
37
-
20
+ const getTransforms = packages => {
21
+ const transforms = [_path.default.join(basePath(packages), '*.@(ts|tsx|js)'), _path.default.join(basePath(packages), '*', 'index.@(ts|tsx|js)')];
38
22
  if (!packages) {
39
- transforms.unshift.apply(transforms, (0, _toConsumableArray2.default)(_presets.default));
23
+ transforms.unshift(..._presets.default);
40
24
  }
41
-
42
- return transforms.map(function (transform) {
43
- return _glob.default.sync(transform);
44
- }).reduce(function (acc, val) {
45
- return acc.concat(val);
46
- }, []).map(function (transform) {
47
- return parseTransformPath(transform);
48
- }).filter(filterTransforms(packages)).sort();
25
+ return transforms.map(transform => _glob.default.sync(transform)).reduce((acc, val) => acc.concat(val), []).map(transform => parseTransformPath(transform)).filter(filterTransforms(packages)).sort();
49
26
  };
50
-
51
27
  exports.getTransforms = getTransforms;
52
-
53
- var parseTransformPath = function parseTransformPath(transformPath) {
54
- return _path.default.parse(transformPath);
55
- };
56
-
28
+ const parseTransformPath = transformPath => _path.default.parse(transformPath);
57
29
  exports.parseTransformPath = parseTransformPath;
58
-
59
- var getTransformPath = function getTransformPath(_ref) {
60
- var dir = _ref.dir,
61
- base = _ref.base;
62
- return "".concat(dir, "/").concat(base);
63
- };
64
-
30
+ const getTransformPath = ({
31
+ dir,
32
+ base
33
+ }) => `${dir}/${base}`;
65
34
  exports.getTransformPath = getTransformPath;
66
-
67
- var getTransformModule = function getTransformModule(transform) {
68
- var pathSegments = transform.dir.split(_path.default.sep);
69
- var nodeModulesIdx = pathSegments.indexOf('node_modules'); // pathSegments will be of the form [node_modules, '@atlaskit', 'avatar', 'codemods']
70
-
35
+ const getTransformModule = transform => {
36
+ const pathSegments = transform.dir.split(_path.default.sep);
37
+ const nodeModulesIdx = pathSegments.indexOf('node_modules');
38
+ // pathSegments will be of the form [node_modules, '@atlaskit', 'avatar', 'codemods']
71
39
  return pathSegments.slice(nodeModulesIdx + 1, nodeModulesIdx + 3).join('/');
72
40
  };
73
-
74
41
  exports.getTransformModule = getTransformModule;
75
-
76
- var getTransformVersion = function getTransformVersion(transform) {
77
- var transformName = transform.base;
78
-
42
+ const getTransformVersion = transform => {
43
+ let transformName = transform.base;
79
44
  if (transformName.startsWith('index.')) {
80
- var pathSegments = transform.dir.split(_path.default.sep);
45
+ const pathSegments = transform.dir.split(_path.default.sep);
81
46
  transformName = pathSegments[pathSegments.length - 1];
82
47
  }
83
-
84
48
  return transformName.split('-')[0];
85
49
  };
86
-
87
50
  exports.getTransformVersion = getTransformVersion;
88
-
89
- var filterTransforms = function filterTransforms(packages) {
51
+ const filterTransforms = packages => {
90
52
  if (!packages || packages.length === 0) {
91
- return function () {
92
- return true;
93
- };
53
+ return () => true;
94
54
  }
95
-
96
- var packageMap = new Map(packages.map(function (pkg) {
97
- return [pkg.name, pkg.version];
98
- }));
99
- return function (transform) {
100
- var transformVersion = getTransformVersion(transform);
101
- var pkgVersion = packageMap.get(getTransformModule(transform));
102
-
55
+ const packageMap = new Map(packages.map(pkg => [pkg.name, pkg.version]));
56
+ return transform => {
57
+ const transformVersion = getTransformVersion(transform);
58
+ const pkgVersion = packageMap.get(getTransformModule(transform));
103
59
  if (pkgVersion === undefined) {
104
- throw Error("No corresponding package found for transform \"".concat(transform.dir, "/").concat(transform.base));
60
+ throw Error(`No corresponding package found for transform "${transform.dir}/${transform.base}`);
105
61
  }
106
-
107
62
  if (transformVersion === 'next' || pkgVersion === null) {
108
63
  return true;
109
64
  } else if (_semver.default.valid(transformVersion)) {
package/dist/cjs/types.js CHANGED
@@ -1,57 +1,14 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports.ValidationError = exports.NoTransformsExistError = void 0;
9
-
10
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
-
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
-
16
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
17
-
18
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
19
-
20
- var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
21
-
22
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
23
-
24
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
25
-
26
7
  /** Converts required args to optional if they have a default
27
8
  * Example: export type UserFlags = Default<Flags, keyof typeof defaultFlags>;
28
9
  */
29
- var ValidationError = /*#__PURE__*/function (_Error) {
30
- (0, _inherits2.default)(ValidationError, _Error);
31
-
32
- var _super = _createSuper(ValidationError);
33
-
34
- function ValidationError() {
35
- (0, _classCallCheck2.default)(this, ValidationError);
36
- return _super.apply(this, arguments);
37
- }
38
-
39
- return (0, _createClass2.default)(ValidationError);
40
- }( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
41
10
 
11
+ class ValidationError extends Error {}
42
12
  exports.ValidationError = ValidationError;
43
-
44
- var NoTransformsExistError = /*#__PURE__*/function (_Error2) {
45
- (0, _inherits2.default)(NoTransformsExistError, _Error2);
46
-
47
- var _super2 = _createSuper(NoTransformsExistError);
48
-
49
- function NoTransformsExistError() {
50
- (0, _classCallCheck2.default)(this, NoTransformsExistError);
51
- return _super2.apply(this, arguments);
52
- }
53
-
54
- return (0, _createClass2.default)(NoTransformsExistError);
55
- }( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
56
-
13
+ class NoTransformsExistError extends Error {}
57
14
  exports.NoTransformsExistError = NoTransformsExistError;
package/dist/cjs/utils.js CHANGED
@@ -4,61 +4,48 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.fixLineEnding = void 0;
7
-
8
7
  /* Utility functions to be used in codemod-cli. */
9
- var returnLineEnding = function returnLineEnding(source) {
8
+
9
+ const returnLineEnding = source => {
10
10
  var cr = source.split('\r').length;
11
11
  var lf = source.split('\n').length;
12
12
  var crlf = source.split('\r\n').length;
13
-
14
13
  if (cr + lf === 0) {
15
14
  return 'NONE';
16
15
  }
17
-
18
16
  if (crlf === cr && crlf === lf) {
19
17
  return 'CRLF';
20
18
  }
21
-
22
19
  if (cr > lf) {
23
20
  return 'CR';
24
21
  } else {
25
22
  return 'LF';
26
23
  }
27
24
  };
28
-
29
- var getLineEndingRegex = function getLineEndingRegex(type) {
25
+ const getLineEndingRegex = type => {
30
26
  if (['CR', 'LF', 'CRLF'].indexOf(type) === -1) {
31
27
  throw new Error("Line ending '" + type + "' is not supported, use CR, LF or CRLF");
32
28
  }
33
-
34
29
  if (type === 'LF') {
35
30
  return '\n';
36
31
  }
37
-
38
32
  if (type === 'CR') {
39
33
  return '\r';
40
34
  }
41
-
42
35
  if (type === 'CRLF') {
43
36
  return '\r\n';
44
37
  }
45
38
  };
46
-
47
- var fixLineEnding = function fixLineEnding(source, lineEnding) {
48
- var current = returnLineEnding(source);
49
-
39
+ const fixLineEnding = (source, lineEnding) => {
40
+ const current = returnLineEnding(source);
50
41
  if (current === lineEnding) {
51
42
  return source;
52
43
  }
53
-
54
- var regexCurrentLineEnding = getLineEndingRegex(current);
55
- var regexLineEnding = getLineEndingRegex(lineEnding);
56
-
44
+ const regexCurrentLineEnding = getLineEndingRegex(current);
45
+ const regexLineEnding = getLineEndingRegex(lineEnding);
57
46
  if (current && regexLineEnding && regexCurrentLineEnding) {
58
47
  return source.replace(new RegExp(regexCurrentLineEnding, 'g'), regexLineEnding);
59
48
  }
60
-
61
49
  return source;
62
50
  };
63
-
64
51
  exports.fixLineEnding = fixLineEnding;
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/codemod-cli",
3
- "version": "0.11.4"
3
+ "version": "0.12.0"
4
4
  }
@@ -3,30 +3,32 @@ import { promises } from 'fs';
3
3
  const {
4
4
  readFile
5
5
  } = promises;
6
- /** Return products packages filePaths for running codemods from specified dependent package */
7
6
 
7
+ /** Return products packages filePaths for running codemods from specified dependent package */
8
8
  export async function findDependentPackagePaths(crawlPaths, dependencyPackage) {
9
9
  // Get file paths leading to package.jsons
10
10
  const searchStrings = crawlPaths.map(crawlPath => {
11
11
  //Replace leading './' due to bug with node-glob not properly ignoring files https://github.com/isaacs/node-glob/issues/309
12
12
  return `${crawlPath.replace(/^\.\//, '')}/**/package.json`;
13
- }); // Convert array into glob string
13
+ });
14
14
 
15
+ // Convert array into glob string
15
16
  const globString = searchStrings.length > 1 ? `{${searchStrings.join(',')}}` : searchStrings[0];
16
17
  const packageJsonPaths = glob.sync(globString, {
17
18
  ignore: '**/node_modules/**',
18
19
  nodir: true
19
20
  });
20
21
  let productPackageJsonPathPromises = packageJsonPaths.map(async filePath => {
21
- const fileContents = readFile(filePath, 'utf8'); // Grep for installedPackage
22
-
22
+ const fileContents = readFile(filePath, 'utf8');
23
+ // Grep for installedPackage
23
24
  const isMatch = (await fileContents).toString().split(/\n/).some(function (line) {
24
25
  return line.match(dependencyPackage);
25
26
  });
26
27
  return isMatch && filePath;
27
28
  });
28
- const productPackageJsonPaths = (await Promise.all(productPackageJsonPathPromises)).filter(path => path !== false); // Get directory
29
+ const productPackageJsonPaths = (await Promise.all(productPackageJsonPathPromises)).filter(path => path !== false);
29
30
 
31
+ // Get directory
30
32
  const productPackagePaths = productPackageJsonPaths.map(line => line.replace('/package.json', ''));
31
33
  return productPackagePaths;
32
34
  }
@@ -3,40 +3,35 @@ import fs from 'fs';
3
3
  import spawn from 'projector-spawn';
4
4
  import { AutoComplete } from 'enquirer';
5
5
  import semver from 'semver';
6
-
7
6
  const jscodeshift = require.resolve('.bin/jscodeshift');
8
-
9
7
  import { fixLineEnding } from './utils';
10
8
  import { getTransforms, getTransformPath, hasTransform, parseTransformPath, getTransformModule } from './transforms';
11
9
  import { ValidationError, NoTransformsExistError } from './types';
12
10
  import { getPackagesSinceRef } from './sinceRef';
13
11
  import { findDependentPackagePaths } from './filepath';
14
-
15
12
  const applyTransformMeta = transforms => transforms.map(transform => {
16
13
  const moduleMatch = transform.dir.match(/\/@atlaskit\/[^\/]+\//);
17
-
18
14
  if (moduleMatch) {
19
15
  const moduleName = moduleMatch[0].substring(1, moduleMatch[0].length - 1);
20
16
  const transformName = transform.name === 'index' ? transform.dir.slice(transform.dir.lastIndexOf('/') + 1) : transform.name;
21
- return { ...transform,
17
+ return {
18
+ ...transform,
22
19
  id: `${moduleName}: ${transformName}`
23
20
  };
24
21
  }
25
-
26
22
  const presetMatch = transform.dir.match(/\/codemod-cli\/.+\/presets/);
27
-
28
23
  if (presetMatch) {
29
24
  const transformName = transform.name === 'index' ? transform.dir.slice(transform.dir.lastIndexOf('/') + 1) : transform.name;
30
- return { ...transform,
25
+ return {
26
+ ...transform,
31
27
  id: `@atlaskit/codemod-cli: ${transformName}`
32
28
  };
33
29
  }
34
-
35
- return { ...transform,
30
+ return {
31
+ ...transform,
36
32
  id: `${transform.dir}/${transform.name}`
37
33
  };
38
34
  });
39
-
40
35
  const getTransformPrompt = async transforms => {
41
36
  const transformMeta = applyTransformMeta(transforms);
42
37
  return await new AutoComplete({
@@ -53,13 +48,11 @@ const getTransformPrompt = async transforms => {
53
48
  }) => id === choice || dir === choice)
54
49
  }).run();
55
50
  };
56
-
57
51
  const resolveTransform = async (flags, transforms) => {
58
52
  if (flags.preset) {
59
53
  const transform = transforms.find(({
60
54
  name
61
55
  }) => name === flags.preset);
62
-
63
56
  if (!transform) {
64
57
  console.warn(`No preset found for: ${chalk.bgRed(flags.preset)}`);
65
58
  } else {
@@ -70,25 +63,20 @@ const resolveTransform = async (flags, transforms) => {
70
63
  if (flags.transform && hasTransform(flags.transform)) {
71
64
  return parseTransformPath(flags.transform);
72
65
  }
73
-
74
66
  if (flags.transform && !hasTransform(flags.transform)) {
75
67
  console.warn(`No available transform found for: ${chalk.bgRed(flags.transform)}`);
76
68
  }
77
-
78
69
  return await getTransformPrompt(transforms);
79
70
  };
80
-
81
71
  const runTransform = async (filePaths, transform, flags) => {
82
72
  const {
83
73
  logger
84
74
  } = flags;
85
75
  logger.log(chalk.green(`Running transform '${chalk.bold(transform.name)}' over ${chalk.bold(filePaths.join(', '))}...`));
86
76
  let codemodDirs = filePaths;
87
-
88
77
  if (flags.filterPaths) {
89
78
  logger.log(chalk.green(`Running filtering logic for module ${transform.module}...`));
90
79
  codemodDirs = await findDependentPackagePaths(filePaths, transform.module);
91
-
92
80
  if (codemodDirs.length === 0) {
93
81
  // Fallback to non-filter logic if filtering returns no directories
94
82
  logger.log(chalk.yellow(`Could not filter source paths for ${transform.module}, falling back to running over all specified paths. (See --no-filter-paths flag)`));
@@ -97,19 +85,18 @@ const runTransform = async (filePaths, transform, flags) => {
97
85
  logger.log(chalk.green(`Running transform '${chalk.bold(transform.name)}' over filtered dirs ${chalk.bold(codemodDirs.join(', '))}...`));
98
86
  }
99
87
  }
100
-
101
88
  logger.log(chalk.green(`Transforming files matching these extensions '${chalk.bold(flags.extensions)}'...`));
102
- const transformPath = getTransformPath(transform); // Limit CPUs to 8 to prevent issues when running on CI with a large amount of cpus
89
+ const transformPath = getTransformPath(transform);
103
90
 
91
+ // Limit CPUs to 8 to prevent issues when running on CI with a large amount of cpus
104
92
  const args = [`--transform=${transformPath}`, `--ignore-pattern=${flags.ignorePattern}`, `--parser=${flags.parser}`, `--extensions=${flags.extensions}`, '--cpus=8', ...codemodDirs];
105
-
106
93
  if (flags.failOnError) {
107
94
  args.unshift('--fail-on-error');
108
- } // To avoid https://github.com/facebook/jscodeshift/issues/424 where the jscodeshift.js file is `CRLF` ending.
95
+ }
96
+
97
+ // To avoid https://github.com/facebook/jscodeshift/issues/424 where the jscodeshift.js file is `CRLF` ending.
109
98
  // The workaround to use only the `node_modules` indicated in this ticket will not work as we run this code as CLI in products repository
110
99
  // that may not have jscodeshift installed.
111
-
112
-
113
100
  const jscodeshiftContent = fs.readFileSync(jscodeshift, 'utf8');
114
101
  const jscodeshiftContentNew = fixLineEnding(jscodeshiftContent, 'LF');
115
102
  fs.writeFileSync(jscodeshift, jscodeshiftContentNew);
@@ -117,40 +104,32 @@ const runTransform = async (filePaths, transform, flags) => {
117
104
  stdio: 'inherit'
118
105
  });
119
106
  };
120
-
121
107
  const parsePkg = pkg => {
122
108
  if (!pkg.startsWith('@')) {
123
109
  throw new ValidationError('Package names must be fully qualified and begin with "@"');
124
110
  }
125
-
126
111
  let name = pkg;
127
112
  let version = null;
128
113
  const parts = pkg.split('@');
129
-
130
114
  if (parts.length > 2) {
131
115
  name = `@${parts[1]}`;
132
116
  version = parts[parts.length - 1];
133
117
  }
134
-
135
118
  return {
136
119
  name,
137
120
  version
138
121
  };
139
122
  };
140
-
141
123
  const parsePackagesFlag = packages => {
142
124
  return packages.split(',').map(parsePkg);
143
125
  };
144
-
145
126
  const validatePackages = (packages, errorCallback) => {
146
127
  if (!packages) {
147
128
  return;
148
129
  }
149
-
150
130
  const errors = [];
151
131
  const transformedPackages = packages.map(pkg => {
152
132
  let version = null;
153
-
154
133
  if (pkg.version != null) {
155
134
  if (semver.validRange(pkg.version)) {
156
135
  version = semver.valid(semver.minVersion(pkg.version));
@@ -158,26 +137,21 @@ const validatePackages = (packages, errorCallback) => {
158
137
  errors.push(`Invalid version "${pkg.version}" for package "${pkg.name}"`);
159
138
  }
160
139
  }
161
-
162
- return { ...pkg,
140
+ return {
141
+ ...pkg,
163
142
  version
164
143
  };
165
144
  });
166
-
167
145
  if (errors.length > 0) {
168
146
  errorCallback && errorCallback(errors);
169
147
  }
170
-
171
148
  return transformedPackages;
172
149
  };
173
-
174
150
  const parseArgs = async (input, flags) => {
175
151
  let packages;
176
-
177
152
  if (!input[0]) {
178
153
  throw new ValidationError('Please supply a path to the source files you wish to modify');
179
154
  }
180
-
181
155
  if (flags.packages) {
182
156
  const unvalidatedPackages = parsePackagesFlag(flags.packages);
183
157
  packages = validatePackages(unvalidatedPackages, errors => {
@@ -189,12 +163,10 @@ const parseArgs = async (input, flags) => {
189
163
  throw new Error(`Detected invalid previous versions of packages upgraded since "${flags.sinceRef}". Previous versions must be valid semver.\n${errors.join('\n')}`);
190
164
  });
191
165
  }
192
-
193
166
  return {
194
167
  packages
195
168
  };
196
169
  };
197
-
198
170
  const defaultFlags = {
199
171
  parser: 'babel',
200
172
  extensions: 'js',
@@ -202,7 +174,8 @@ const defaultFlags = {
202
174
  logger: console
203
175
  };
204
176
  export default async function main(input, userFlags) {
205
- const flags = { ...defaultFlags,
177
+ const flags = {
178
+ ...defaultFlags,
206
179
  ...userFlags
207
180
  };
208
181
  const logger = flags.logger;
@@ -213,36 +186,29 @@ export default async function main(input, userFlags) {
213
186
  _PACKAGE_VERSION_ = '0.0.0-dev'
214
187
  } = process.env;
215
188
  logger.log(chalk.bgBlue(chalk.black(`📚 Atlassian-Frontend codemod library @ ${_PACKAGE_VERSION_} 📚`)));
216
-
217
189
  if (packages && packages.length > 0) {
218
190
  logger.log(chalk.gray(`Searching for codemods for newer versions of the following packages: ${packages.map(pkg => `${pkg.name}${pkg.version ? '@' + pkg.version : ''}`)}`));
219
191
  }
220
-
221
192
  const shouldHavePackages = flags.sinceRef || flags.packages && flags.packages.length > 0;
222
-
223
193
  if (shouldHavePackages && (packages === null || packages === void 0 ? void 0 : packages.length) === 0) {
224
194
  logger.log(chalk.gray(`Did not find updated packages, exiting`));
225
195
  return {
226
196
  transforms: []
227
197
  };
228
198
  }
229
-
230
199
  const availableTransforms = getTransforms(packages);
231
-
232
200
  if (availableTransforms.length === 0) {
233
201
  throw new NoTransformsExistError('No codemods available. Please make sure you have the latest version of the packages you are trying to upgrade before running the codemod');
234
202
  }
235
-
236
203
  const transforms = packages ? availableTransforms : [await resolveTransform(flags, availableTransforms)];
237
- const transformsWithModule = transforms.map(transform => ({ ...transform,
204
+ const transformsWithModule = transforms.map(transform => ({
205
+ ...transform,
238
206
  module: getTransformModule(transform)
239
207
  }));
240
208
  logger.log(chalk.cyan(`Running the following transforms \n${chalk.bold(transformsWithModule.map(transform => `${transform.module}: ${transform.name}`).join('\n'))}`));
241
-
242
209
  for (const transform of transformsWithModule) {
243
210
  await runTransform(input, transform, flags);
244
211
  }
245
-
246
212
  return {
247
213
  transforms: transformsWithModule
248
214
  };