@atlaskit/codemod-cli 0.31.1 → 0.32.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.
- package/CHANGELOG.md +16 -0
- package/dist/cjs/main.js +1 -1
- package/dist/cjs/presets/{lozenge-appearance-to-color/lozenge-appearance-to-color.js → badge-appearance-semantic-migration/badge-appearance-semantic-migration.js} +2 -2
- package/dist/cjs/presets/badge-appearance-semantic-migration/codemods/badge-appearance-semantic-migration.js +145 -0
- package/dist/cjs/presets/index.js +3 -2
- package/dist/cjs/presets/{lozenge-appearance-to-color/codemods/lozenge-appearance-to-color.js → lozenge-appearance-semantic-migration/codemods/lozenge-appearance-semantic-migration.js} +12 -15
- package/dist/cjs/presets/lozenge-appearance-semantic-migration/lozenge-appearance-semantic-migration.js +44 -0
- package/dist/es2019/presets/{lozenge-appearance-to-color/lozenge-appearance-to-color.js → badge-appearance-semantic-migration/badge-appearance-semantic-migration.js} +2 -2
- package/dist/es2019/presets/badge-appearance-semantic-migration/codemods/badge-appearance-semantic-migration.js +144 -0
- package/dist/es2019/presets/index.js +3 -2
- package/dist/es2019/presets/{lozenge-appearance-to-color/codemods/lozenge-appearance-to-color.js → lozenge-appearance-semantic-migration/codemods/lozenge-appearance-semantic-migration.js} +16 -18
- package/dist/es2019/presets/lozenge-appearance-semantic-migration/lozenge-appearance-semantic-migration.js +18 -0
- package/dist/esm/main.js +1 -1
- package/dist/esm/presets/{lozenge-appearance-to-color/lozenge-appearance-to-color.js → badge-appearance-semantic-migration/badge-appearance-semantic-migration.js} +2 -2
- package/dist/esm/presets/badge-appearance-semantic-migration/codemods/badge-appearance-semantic-migration.js +139 -0
- package/dist/esm/presets/index.js +3 -2
- package/dist/esm/presets/{lozenge-appearance-to-color/codemods/lozenge-appearance-to-color.js → lozenge-appearance-semantic-migration/codemods/lozenge-appearance-semantic-migration.js} +12 -15
- package/dist/esm/presets/lozenge-appearance-semantic-migration/lozenge-appearance-semantic-migration.js +37 -0
- package/dist/types/presets/badge-appearance-semantic-migration/badge-appearance-semantic-migration.d.ts +2 -0
- package/dist/types/presets/badge-appearance-semantic-migration/codemods/badge-appearance-semantic-migration.d.ts +10 -0
- package/dist/types/presets/index.d.ts +2 -1
- package/dist/types/presets/lozenge-appearance-semantic-migration/codemods/lozenge-appearance-semantic-migration.d.ts +10 -0
- package/dist/types/presets/lozenge-appearance-semantic-migration/lozenge-appearance-semantic-migration.d.ts +2 -0
- package/dist/types-ts4.5/presets/badge-appearance-semantic-migration/codemods/badge-appearance-semantic-migration.d.ts +10 -0
- package/dist/types-ts4.5/presets/index.d.ts +2 -1
- package/dist/types-ts4.5/presets/lozenge-appearance-semantic-migration/codemods/lozenge-appearance-semantic-migration.d.ts +10 -0
- package/package.json +1 -1
- package/dist/types/presets/lozenge-appearance-to-color/codemods/lozenge-appearance-to-color.d.ts +0 -10
- package/dist/types-ts4.5/presets/lozenge-appearance-to-color/codemods/lozenge-appearance-to-color.d.ts +0 -10
- /package/dist/types-ts4.5/presets/{lozenge-appearance-to-color/lozenge-appearance-to-color.d.ts → badge-appearance-semantic-migration/badge-appearance-semantic-migration.d.ts} +0 -0
- /package/dist/{types/presets/lozenge-appearance-to-color/lozenge-appearance-to-color.d.ts → types-ts4.5/presets/lozenge-appearance-semantic-migration/lozenge-appearance-semantic-migration.d.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @atlaskit/codemod-cli
|
|
2
2
|
|
|
3
|
+
## 0.32.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`a5b157e56828d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/a5b157e56828d) -
|
|
8
|
+
Add a new codemod `badge-appearance-semantic-migration` to migrate deprecated Badge appearances to
|
|
9
|
+
colorsas part of the Labelling System Phase 1 migration.
|
|
10
|
+
|
|
11
|
+
## 0.31.2
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [`100f9ea636d3a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/100f9ea636d3a) -
|
|
16
|
+
Updated lozenge codemod to preserve appearance prop (no color prop change), also renamed to
|
|
17
|
+
lozenge-appearance-semantic-migration
|
|
18
|
+
|
|
3
19
|
## 0.31.1
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/dist/cjs/main.js
CHANGED
|
@@ -362,7 +362,7 @@ function _main() {
|
|
|
362
362
|
case 4:
|
|
363
363
|
_yield$parseArgs = _context6.sent;
|
|
364
364
|
packages = _yield$parseArgs.packages;
|
|
365
|
-
_process$env$_PACKAGE = "0.
|
|
365
|
+
_process$env$_PACKAGE = "0.31.2", _PACKAGE_VERSION_ = _process$env$_PACKAGE === void 0 ? '0.0.0-dev' : _process$env$_PACKAGE;
|
|
366
366
|
logger.log(_chalk.default.bgBlue(_chalk.default.black("\uD83D\uDCDA Atlassian-Frontend codemod library @ ".concat(_PACKAGE_VERSION_, " \uD83D\uDCDA"))));
|
|
367
367
|
if (packages && packages.length > 0) {
|
|
368
368
|
logger.log(_chalk.default.gray("Searching for codemods for newer versions of the following packages: ".concat(packages.map(function (pkg) {
|
|
@@ -8,7 +8,7 @@ exports.default = transformer;
|
|
|
8
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
10
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
-
var
|
|
11
|
+
var _badgeAppearanceSemanticMigration = _interopRequireDefault(require("./codemods/badge-appearance-semantic-migration"));
|
|
12
12
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
13
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
14
|
function transformer(_x, _x2) {
|
|
@@ -20,7 +20,7 @@ function _transformer() {
|
|
|
20
20
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
21
21
|
while (1) switch (_context.prev = _context.next) {
|
|
22
22
|
case 0:
|
|
23
|
-
transformers = [
|
|
23
|
+
transformers = [_badgeAppearanceSemanticMigration.default];
|
|
24
24
|
src = file.source;
|
|
25
25
|
transformers.forEach(function (transformer) {
|
|
26
26
|
if (typeof src === 'undefined') {
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = transformer;
|
|
7
|
+
var _utils = require("@hypermod/utils");
|
|
8
|
+
var _codemodUtils = require("@atlaskit/codemod-utils");
|
|
9
|
+
var BADGE_ENTRY_POINT = '@atlaskit/badge';
|
|
10
|
+
var PRINT_SETTINGS = {
|
|
11
|
+
quote: 'single'
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
// Old appearance values that map to new semantic appearance values
|
|
15
|
+
var OLD_TO_NEW_APPEARANCE_MAP = {
|
|
16
|
+
added: 'success',
|
|
17
|
+
removed: 'danger',
|
|
18
|
+
default: 'neutral',
|
|
19
|
+
primary: 'information',
|
|
20
|
+
primaryInverted: 'inverse',
|
|
21
|
+
important: 'danger'
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Codemod to migrate Badge component appearance semantic values.
|
|
25
|
+
*
|
|
26
|
+
* This codemod:
|
|
27
|
+
* 1. Updates `appearance` prop values to new semantic values
|
|
28
|
+
* 2. Maps old semantic values to new semantic values (e.g. added → success, removed → danger, primary → information)
|
|
29
|
+
* 3. Adds comments for dynamic values that need manual verification
|
|
30
|
+
*/
|
|
31
|
+
function transformer(file, api) {
|
|
32
|
+
var j = api.jscodeshift;
|
|
33
|
+
var source = j(file.source);
|
|
34
|
+
|
|
35
|
+
// Find all Badge imports
|
|
36
|
+
var badgeImports = (0, _utils.getImportDeclaration)(j, source, BADGE_ENTRY_POINT);
|
|
37
|
+
|
|
38
|
+
// If no Badge imports, exit early
|
|
39
|
+
if (!badgeImports.length) {
|
|
40
|
+
return file.source;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Get all imported Badge identifiers (could be renamed)
|
|
44
|
+
var badgeIdentifiers = new Set();
|
|
45
|
+
badgeImports.forEach(function (importPath) {
|
|
46
|
+
var _importPath$value$spe;
|
|
47
|
+
(_importPath$value$spe = importPath.value.specifiers) === null || _importPath$value$spe === void 0 || _importPath$value$spe.forEach(function (specifier) {
|
|
48
|
+
var _specifier$imported;
|
|
49
|
+
if (specifier.type === 'ImportDefaultSpecifier') {
|
|
50
|
+
var _specifier$local;
|
|
51
|
+
// Handle: import Badge from '@atlaskit/badge'
|
|
52
|
+
badgeIdentifiers.add(((_specifier$local = specifier.local) === null || _specifier$local === void 0 ? void 0 : _specifier$local.name) || 'Badge');
|
|
53
|
+
} else if (specifier.type === 'ImportSpecifier' && ((_specifier$imported = specifier.imported) === null || _specifier$imported === void 0 ? void 0 : _specifier$imported.type) === 'Identifier' && specifier.imported.name === 'default') {
|
|
54
|
+
var _specifier$local2;
|
|
55
|
+
// Handle: import { default as MyBadge } from '@atlaskit/badge'
|
|
56
|
+
badgeIdentifiers.add(((_specifier$local2 = specifier.local) === null || _specifier$local2 === void 0 ? void 0 : _specifier$local2.name) || 'Badge');
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// If no Badge identifiers found, exit early
|
|
62
|
+
if (badgeIdentifiers.size === 0) {
|
|
63
|
+
return file.source;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Find all Badge JSX elements
|
|
67
|
+
var badgeElements = [];
|
|
68
|
+
source.find(j.JSXElement).forEach(function (path) {
|
|
69
|
+
var _openingElement$name;
|
|
70
|
+
var openingElement = path.value.openingElement;
|
|
71
|
+
if (((_openingElement$name = openingElement.name) === null || _openingElement$name === void 0 ? void 0 : _openingElement$name.type) === 'JSXIdentifier' && badgeIdentifiers.has(openingElement.name.name)) {
|
|
72
|
+
var _openingElement$attri;
|
|
73
|
+
var element = {
|
|
74
|
+
path: path,
|
|
75
|
+
hasAppearanceProp: false
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
// Check for appearance prop
|
|
79
|
+
(_openingElement$attri = openingElement.attributes) === null || _openingElement$attri === void 0 || _openingElement$attri.forEach(function (attr) {
|
|
80
|
+
var _attr$name;
|
|
81
|
+
if (attr.type === 'JSXAttribute' && ((_attr$name = attr.name) === null || _attr$name === void 0 ? void 0 : _attr$name.type) === 'JSXIdentifier') {
|
|
82
|
+
if (attr.name.name === 'appearance') {
|
|
83
|
+
var _attr$value, _attr$value2;
|
|
84
|
+
element.hasAppearanceProp = true;
|
|
85
|
+
if (((_attr$value = attr.value) === null || _attr$value === void 0 ? void 0 : _attr$value.type) === 'StringLiteral') {
|
|
86
|
+
element.appearanceValue = attr.value.value;
|
|
87
|
+
} else if (((_attr$value2 = attr.value) === null || _attr$value2 === void 0 ? void 0 : _attr$value2.type) === 'JSXExpressionContainer') {
|
|
88
|
+
// Handle dynamic values
|
|
89
|
+
var expression = attr.value.expression;
|
|
90
|
+
if (expression.type === 'StringLiteral') {
|
|
91
|
+
element.appearanceValue = expression.value;
|
|
92
|
+
} else {
|
|
93
|
+
element.appearanceValue = 'dynamic';
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
badgeElements.push(element);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// Process each Badge element
|
|
104
|
+
badgeElements.forEach(function (element) {
|
|
105
|
+
var path = element.path,
|
|
106
|
+
hasAppearanceProp = element.hasAppearanceProp,
|
|
107
|
+
appearanceValue = element.appearanceValue;
|
|
108
|
+
var openingElement = path.value.openingElement;
|
|
109
|
+
|
|
110
|
+
// Update appearance prop values to new semantic values
|
|
111
|
+
if (hasAppearanceProp) {
|
|
112
|
+
var _openingElement$attri2;
|
|
113
|
+
(_openingElement$attri2 = openingElement.attributes) === null || _openingElement$attri2 === void 0 || _openingElement$attri2.forEach(function (attr) {
|
|
114
|
+
var _attr$name2;
|
|
115
|
+
if (attr.type === 'JSXAttribute' && ((_attr$name2 = attr.name) === null || _attr$name2 === void 0 ? void 0 : _attr$name2.type) === 'JSXIdentifier' && attr.name.name === 'appearance') {
|
|
116
|
+
// Handle different types of appearance values
|
|
117
|
+
if (appearanceValue === 'dynamic') {
|
|
118
|
+
// For dynamic values, add a comment
|
|
119
|
+
(0, _codemodUtils.addCommentBefore)(j, j(path), "FIXME: This Badge component uses a dynamic `appearance` prop with updated semantic values.\nPlease verify that the values being passed use the new semantic values: neutral, information, inverse, danger, success.\nOld values mapping: default\u2192neutral, primary\u2192information, primaryInverted\u2192inverse, added\u2192success, removed\u2192danger, important\u2192danger.");
|
|
120
|
+
} else if (appearanceValue === 'primaryInverted') {
|
|
121
|
+
var _attr$value3;
|
|
122
|
+
// For primaryInverted, we need to add a comment since it maps to inverse
|
|
123
|
+
(0, _codemodUtils.addCommentBefore)(j, j(path), "FIXME: This Badge component used `appearance=\"primaryInverted\"` which has been migrated to `appearance=\"inverse\"`.\nPlease verify the visual appearance matches your expectations.");
|
|
124
|
+
// Update the value
|
|
125
|
+
if (((_attr$value3 = attr.value) === null || _attr$value3 === void 0 ? void 0 : _attr$value3.type) === 'StringLiteral') {
|
|
126
|
+
attr.value.value = OLD_TO_NEW_APPEARANCE_MAP[appearanceValue];
|
|
127
|
+
}
|
|
128
|
+
} else if (appearanceValue && !OLD_TO_NEW_APPEARANCE_MAP[appearanceValue]) {
|
|
129
|
+
// For invalid string values, add a warning comment
|
|
130
|
+
(0, _codemodUtils.addCommentBefore)(j, j(path), "FIXME: This Badge component uses an unknown `appearance` value \"".concat(appearanceValue, "\".\nValid new semantic appearance values are: ").concat(Object.values(OLD_TO_NEW_APPEARANCE_MAP).filter(function (v, i, arr) {
|
|
131
|
+
return arr.indexOf(v) === i;
|
|
132
|
+
}).join(', '), ".\nPlease update this value to a valid semantic appearance value."));
|
|
133
|
+
} else if (appearanceValue && OLD_TO_NEW_APPEARANCE_MAP[appearanceValue]) {
|
|
134
|
+
var _attr$value4;
|
|
135
|
+
// For valid string values, update the value to the new semantic value
|
|
136
|
+
if (((_attr$value4 = attr.value) === null || _attr$value4 === void 0 ? void 0 : _attr$value4.type) === 'StringLiteral') {
|
|
137
|
+
attr.value.value = OLD_TO_NEW_APPEARANCE_MAP[appearanceValue];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
return source.toSource(PRINT_SETTINGS);
|
|
145
|
+
}
|
|
@@ -14,14 +14,15 @@ require("./migrate-icon-object-to-object/migrate-icon-object-to-object");
|
|
|
14
14
|
require("./upgrade-pragmatic-drag-and-drop-to-stable/upgrade-pragmatic-drag-and-drop-to-stable");
|
|
15
15
|
require("./remove-dark-theme-vr-options/remove-dark-theme-vr-options");
|
|
16
16
|
require("./remove-token-fallbacks/remove-token-fallbacks");
|
|
17
|
-
require("./lozenge-appearance-
|
|
17
|
+
require("./lozenge-appearance-semantic-migration/lozenge-appearance-semantic-migration");
|
|
18
18
|
require("./lozenge-to-tag-migration/lozenge-to-tag-migration");
|
|
19
|
+
require("./badge-appearance-semantic-migration/badge-appearance-semantic-migration");
|
|
19
20
|
/**
|
|
20
21
|
* Manually import presets to make sure typescript includes them
|
|
21
22
|
* in the final bundle.
|
|
22
23
|
*/
|
|
23
24
|
|
|
24
|
-
var presets = ['styled-to-emotion', 'theme-remove-deprecated-mixins', 'migrate-to-link', 'migrate-to-new-buttons', 'migrate-icon-object-to-object', 'upgrade-pragmatic-drag-and-drop-to-stable', 'remove-dark-theme-vr-options', 'remove-token-fallbacks', 'lozenge-appearance-
|
|
25
|
+
var presets = ['styled-to-emotion', 'theme-remove-deprecated-mixins', 'migrate-to-link', 'migrate-to-new-buttons', 'migrate-icon-object-to-object', 'upgrade-pragmatic-drag-and-drop-to-stable', 'remove-dark-theme-vr-options', 'remove-token-fallbacks', 'lozenge-appearance-semantic-migration', 'lozenge-to-tag-migration', 'badge-appearance-semantic-migration'].map(function (preset) {
|
|
25
26
|
return _path.default.join(__dirname, preset, "".concat(preset, ".@(ts|js|tsx)"));
|
|
26
27
|
});
|
|
27
28
|
var _default = exports.default = presets;
|
|
@@ -11,8 +11,8 @@ var PRINT_SETTINGS = {
|
|
|
11
11
|
quote: 'single'
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
-
//
|
|
15
|
-
var
|
|
14
|
+
// Old appearance values that map to new semantic appearance values
|
|
15
|
+
var OLD_TO_NEW_APPEARANCE_MAP = {
|
|
16
16
|
default: 'neutral',
|
|
17
17
|
inprogress: 'information',
|
|
18
18
|
moved: 'warning',
|
|
@@ -21,11 +21,11 @@ var APPEARANCE_TO_COLOR_MAP = {
|
|
|
21
21
|
success: 'success'
|
|
22
22
|
};
|
|
23
23
|
/**
|
|
24
|
-
* Codemod to migrate Lozenge component
|
|
24
|
+
* Codemod to migrate Lozenge component appearance semantic values.
|
|
25
25
|
*
|
|
26
26
|
* This codemod:
|
|
27
|
-
* 1.
|
|
28
|
-
* 2. Maps
|
|
27
|
+
* 1. Updates `appearance` prop values to new semantic values
|
|
28
|
+
* 2. Maps old semantic values to new semantic values (e.g. default → neutral, inprogress → information)
|
|
29
29
|
* 3. Adds comments for dynamic values that need manual verification
|
|
30
30
|
*/
|
|
31
31
|
function transformer(file, api) {
|
|
@@ -107,27 +107,24 @@ function transformer(file, api) {
|
|
|
107
107
|
appearanceValue = element.appearanceValue;
|
|
108
108
|
var openingElement = path.value.openingElement;
|
|
109
109
|
|
|
110
|
-
//
|
|
110
|
+
// Update appearance prop values to new semantic values
|
|
111
111
|
if (hasAppearanceProp) {
|
|
112
112
|
var _openingElement$attri2;
|
|
113
113
|
(_openingElement$attri2 = openingElement.attributes) === null || _openingElement$attri2 === void 0 || _openingElement$attri2.forEach(function (attr) {
|
|
114
114
|
var _attr$name2;
|
|
115
115
|
if (attr.type === 'JSXAttribute' && ((_attr$name2 = attr.name) === null || _attr$name2 === void 0 ? void 0 : _attr$name2.type) === 'JSXIdentifier' && attr.name.name === 'appearance') {
|
|
116
|
-
// Rename appearance to color
|
|
117
|
-
attr.name.name = 'color';
|
|
118
|
-
|
|
119
116
|
// Handle different types of appearance values
|
|
120
117
|
if (appearanceValue === 'dynamic') {
|
|
121
118
|
// For dynamic values, add a comment
|
|
122
|
-
(0, _codemodUtils.addCommentBefore)(j, j(path), "FIXME: This Lozenge component uses a dynamic `appearance` prop
|
|
123
|
-
} else if (appearanceValue && !
|
|
119
|
+
(0, _codemodUtils.addCommentBefore)(j, j(path), "FIXME: This Lozenge component uses a dynamic `appearance` prop with updated semantic values.\nPlease verify that the values being passed use the new semantic values: neutral, information, warning, discovery, danger, success.\nOld values mapping: default\u2192neutral, inprogress\u2192information, moved\u2192warning, new\u2192discovery, removed\u2192danger, success\u2192success.");
|
|
120
|
+
} else if (appearanceValue && !OLD_TO_NEW_APPEARANCE_MAP[appearanceValue]) {
|
|
124
121
|
// For invalid string values, add a warning comment
|
|
125
|
-
(0, _codemodUtils.addCommentBefore)(j, j(path), "FIXME: This Lozenge component uses an
|
|
126
|
-
} else if (appearanceValue &&
|
|
122
|
+
(0, _codemodUtils.addCommentBefore)(j, j(path), "FIXME: This Lozenge component uses an unknown `appearance` value \"".concat(appearanceValue, "\".\nValid new semantic appearance values are: ").concat(Object.values(OLD_TO_NEW_APPEARANCE_MAP).join(', '), ".\nPlease update this value to a valid semantic appearance value."));
|
|
123
|
+
} else if (appearanceValue && OLD_TO_NEW_APPEARANCE_MAP[appearanceValue]) {
|
|
127
124
|
var _attr$value3;
|
|
128
|
-
// For valid string values, update the value to the
|
|
125
|
+
// For valid string values, update the value to the new semantic value
|
|
129
126
|
if (((_attr$value3 = attr.value) === null || _attr$value3 === void 0 ? void 0 : _attr$value3.type) === 'StringLiteral') {
|
|
130
|
-
attr.value.value =
|
|
127
|
+
attr.value.value = OLD_TO_NEW_APPEARANCE_MAP[appearanceValue];
|
|
131
128
|
}
|
|
132
129
|
}
|
|
133
130
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = transformer;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _lozengeAppearanceSemanticMigration = _interopRequireDefault(require("./codemods/lozenge-appearance-semantic-migration"));
|
|
12
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
|
+
function transformer(_x, _x2) {
|
|
15
|
+
return _transformer.apply(this, arguments);
|
|
16
|
+
}
|
|
17
|
+
function _transformer() {
|
|
18
|
+
_transformer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(file, api) {
|
|
19
|
+
var transformers, src;
|
|
20
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
21
|
+
while (1) switch (_context.prev = _context.next) {
|
|
22
|
+
case 0:
|
|
23
|
+
transformers = [_lozengeAppearanceSemanticMigration.default];
|
|
24
|
+
src = file.source;
|
|
25
|
+
transformers.forEach(function (transformer) {
|
|
26
|
+
if (typeof src === 'undefined') {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
var nextSrc = transformer(_objectSpread(_objectSpread({}, file), {}, {
|
|
30
|
+
source: src
|
|
31
|
+
}), api);
|
|
32
|
+
if (nextSrc) {
|
|
33
|
+
src = nextSrc;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return _context.abrupt("return", src);
|
|
37
|
+
case 4:
|
|
38
|
+
case "end":
|
|
39
|
+
return _context.stop();
|
|
40
|
+
}
|
|
41
|
+
}, _callee);
|
|
42
|
+
}));
|
|
43
|
+
return _transformer.apply(this, arguments);
|
|
44
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import badgeAppearanceSemanticMigrationTransformer from './codemods/badge-appearance-semantic-migration';
|
|
2
2
|
export default async function transformer(file, api) {
|
|
3
|
-
const transformers = [
|
|
3
|
+
const transformers = [badgeAppearanceSemanticMigrationTransformer];
|
|
4
4
|
let src = file.source;
|
|
5
5
|
transformers.forEach(transformer => {
|
|
6
6
|
if (typeof src === 'undefined') {
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { getImportDeclaration } from '@hypermod/utils';
|
|
2
|
+
import { addCommentBefore } from '@atlaskit/codemod-utils';
|
|
3
|
+
const BADGE_ENTRY_POINT = '@atlaskit/badge';
|
|
4
|
+
const PRINT_SETTINGS = {
|
|
5
|
+
quote: 'single'
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
// Old appearance values that map to new semantic appearance values
|
|
9
|
+
const OLD_TO_NEW_APPEARANCE_MAP = {
|
|
10
|
+
added: 'success',
|
|
11
|
+
removed: 'danger',
|
|
12
|
+
default: 'neutral',
|
|
13
|
+
primary: 'information',
|
|
14
|
+
primaryInverted: 'inverse',
|
|
15
|
+
important: 'danger'
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Codemod to migrate Badge component appearance semantic values.
|
|
19
|
+
*
|
|
20
|
+
* This codemod:
|
|
21
|
+
* 1. Updates `appearance` prop values to new semantic values
|
|
22
|
+
* 2. Maps old semantic values to new semantic values (e.g. added → success, removed → danger, primary → information)
|
|
23
|
+
* 3. Adds comments for dynamic values that need manual verification
|
|
24
|
+
*/
|
|
25
|
+
export default function transformer(file, api) {
|
|
26
|
+
const j = api.jscodeshift;
|
|
27
|
+
const source = j(file.source);
|
|
28
|
+
|
|
29
|
+
// Find all Badge imports
|
|
30
|
+
const badgeImports = getImportDeclaration(j, source, BADGE_ENTRY_POINT);
|
|
31
|
+
|
|
32
|
+
// If no Badge imports, exit early
|
|
33
|
+
if (!badgeImports.length) {
|
|
34
|
+
return file.source;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Get all imported Badge identifiers (could be renamed)
|
|
38
|
+
const badgeIdentifiers = new Set();
|
|
39
|
+
badgeImports.forEach(importPath => {
|
|
40
|
+
var _importPath$value$spe;
|
|
41
|
+
(_importPath$value$spe = importPath.value.specifiers) === null || _importPath$value$spe === void 0 ? void 0 : _importPath$value$spe.forEach(specifier => {
|
|
42
|
+
var _specifier$imported;
|
|
43
|
+
if (specifier.type === 'ImportDefaultSpecifier') {
|
|
44
|
+
var _specifier$local;
|
|
45
|
+
// Handle: import Badge from '@atlaskit/badge'
|
|
46
|
+
badgeIdentifiers.add(((_specifier$local = specifier.local) === null || _specifier$local === void 0 ? void 0 : _specifier$local.name) || 'Badge');
|
|
47
|
+
} else if (specifier.type === 'ImportSpecifier' && ((_specifier$imported = specifier.imported) === null || _specifier$imported === void 0 ? void 0 : _specifier$imported.type) === 'Identifier' && specifier.imported.name === 'default') {
|
|
48
|
+
var _specifier$local2;
|
|
49
|
+
// Handle: import { default as MyBadge } from '@atlaskit/badge'
|
|
50
|
+
badgeIdentifiers.add(((_specifier$local2 = specifier.local) === null || _specifier$local2 === void 0 ? void 0 : _specifier$local2.name) || 'Badge');
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// If no Badge identifiers found, exit early
|
|
56
|
+
if (badgeIdentifiers.size === 0) {
|
|
57
|
+
return file.source;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Find all Badge JSX elements
|
|
61
|
+
const badgeElements = [];
|
|
62
|
+
source.find(j.JSXElement).forEach(path => {
|
|
63
|
+
var _openingElement$name;
|
|
64
|
+
const openingElement = path.value.openingElement;
|
|
65
|
+
if (((_openingElement$name = openingElement.name) === null || _openingElement$name === void 0 ? void 0 : _openingElement$name.type) === 'JSXIdentifier' && badgeIdentifiers.has(openingElement.name.name)) {
|
|
66
|
+
var _openingElement$attri;
|
|
67
|
+
const element = {
|
|
68
|
+
path,
|
|
69
|
+
hasAppearanceProp: false
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// Check for appearance prop
|
|
73
|
+
(_openingElement$attri = openingElement.attributes) === null || _openingElement$attri === void 0 ? void 0 : _openingElement$attri.forEach(attr => {
|
|
74
|
+
var _attr$name;
|
|
75
|
+
if (attr.type === 'JSXAttribute' && ((_attr$name = attr.name) === null || _attr$name === void 0 ? void 0 : _attr$name.type) === 'JSXIdentifier') {
|
|
76
|
+
if (attr.name.name === 'appearance') {
|
|
77
|
+
var _attr$value, _attr$value2;
|
|
78
|
+
element.hasAppearanceProp = true;
|
|
79
|
+
if (((_attr$value = attr.value) === null || _attr$value === void 0 ? void 0 : _attr$value.type) === 'StringLiteral') {
|
|
80
|
+
element.appearanceValue = attr.value.value;
|
|
81
|
+
} else if (((_attr$value2 = attr.value) === null || _attr$value2 === void 0 ? void 0 : _attr$value2.type) === 'JSXExpressionContainer') {
|
|
82
|
+
// Handle dynamic values
|
|
83
|
+
const expression = attr.value.expression;
|
|
84
|
+
if (expression.type === 'StringLiteral') {
|
|
85
|
+
element.appearanceValue = expression.value;
|
|
86
|
+
} else {
|
|
87
|
+
element.appearanceValue = 'dynamic';
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
badgeElements.push(element);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// Process each Badge element
|
|
98
|
+
badgeElements.forEach(element => {
|
|
99
|
+
const {
|
|
100
|
+
path,
|
|
101
|
+
hasAppearanceProp,
|
|
102
|
+
appearanceValue
|
|
103
|
+
} = element;
|
|
104
|
+
const openingElement = path.value.openingElement;
|
|
105
|
+
|
|
106
|
+
// Update appearance prop values to new semantic values
|
|
107
|
+
if (hasAppearanceProp) {
|
|
108
|
+
var _openingElement$attri2;
|
|
109
|
+
(_openingElement$attri2 = openingElement.attributes) === null || _openingElement$attri2 === void 0 ? void 0 : _openingElement$attri2.forEach(attr => {
|
|
110
|
+
var _attr$name2;
|
|
111
|
+
if (attr.type === 'JSXAttribute' && ((_attr$name2 = attr.name) === null || _attr$name2 === void 0 ? void 0 : _attr$name2.type) === 'JSXIdentifier' && attr.name.name === 'appearance') {
|
|
112
|
+
// Handle different types of appearance values
|
|
113
|
+
if (appearanceValue === 'dynamic') {
|
|
114
|
+
// For dynamic values, add a comment
|
|
115
|
+
addCommentBefore(j, j(path), `FIXME: This Badge component uses a dynamic \`appearance\` prop with updated semantic values.
|
|
116
|
+
Please verify that the values being passed use the new semantic values: neutral, information, inverse, danger, success.
|
|
117
|
+
Old values mapping: default→neutral, primary→information, primaryInverted→inverse, added→success, removed→danger, important→danger.`);
|
|
118
|
+
} else if (appearanceValue === 'primaryInverted') {
|
|
119
|
+
var _attr$value3;
|
|
120
|
+
// For primaryInverted, we need to add a comment since it maps to inverse
|
|
121
|
+
addCommentBefore(j, j(path), `FIXME: This Badge component used \`appearance="primaryInverted"\` which has been migrated to \`appearance="inverse"\`.
|
|
122
|
+
Please verify the visual appearance matches your expectations.`);
|
|
123
|
+
// Update the value
|
|
124
|
+
if (((_attr$value3 = attr.value) === null || _attr$value3 === void 0 ? void 0 : _attr$value3.type) === 'StringLiteral') {
|
|
125
|
+
attr.value.value = OLD_TO_NEW_APPEARANCE_MAP[appearanceValue];
|
|
126
|
+
}
|
|
127
|
+
} else if (appearanceValue && !OLD_TO_NEW_APPEARANCE_MAP[appearanceValue]) {
|
|
128
|
+
// For invalid string values, add a warning comment
|
|
129
|
+
addCommentBefore(j, j(path), `FIXME: This Badge component uses an unknown \`appearance\` value "${appearanceValue}".
|
|
130
|
+
Valid new semantic appearance values are: ${Object.values(OLD_TO_NEW_APPEARANCE_MAP).filter((v, i, arr) => arr.indexOf(v) === i).join(', ')}.
|
|
131
|
+
Please update this value to a valid semantic appearance value.`);
|
|
132
|
+
} else if (appearanceValue && OLD_TO_NEW_APPEARANCE_MAP[appearanceValue]) {
|
|
133
|
+
var _attr$value4;
|
|
134
|
+
// For valid string values, update the value to the new semantic value
|
|
135
|
+
if (((_attr$value4 = attr.value) === null || _attr$value4 === void 0 ? void 0 : _attr$value4.type) === 'StringLiteral') {
|
|
136
|
+
attr.value.value = OLD_TO_NEW_APPEARANCE_MAP[appearanceValue];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
return source.toSource(PRINT_SETTINGS);
|
|
144
|
+
}
|
|
@@ -12,7 +12,8 @@ import './migrate-icon-object-to-object/migrate-icon-object-to-object';
|
|
|
12
12
|
import './upgrade-pragmatic-drag-and-drop-to-stable/upgrade-pragmatic-drag-and-drop-to-stable';
|
|
13
13
|
import './remove-dark-theme-vr-options/remove-dark-theme-vr-options';
|
|
14
14
|
import './remove-token-fallbacks/remove-token-fallbacks';
|
|
15
|
-
import './lozenge-appearance-
|
|
15
|
+
import './lozenge-appearance-semantic-migration/lozenge-appearance-semantic-migration';
|
|
16
16
|
import './lozenge-to-tag-migration/lozenge-to-tag-migration';
|
|
17
|
-
|
|
17
|
+
import './badge-appearance-semantic-migration/badge-appearance-semantic-migration';
|
|
18
|
+
const presets = ['styled-to-emotion', 'theme-remove-deprecated-mixins', 'migrate-to-link', 'migrate-to-new-buttons', 'migrate-icon-object-to-object', 'upgrade-pragmatic-drag-and-drop-to-stable', 'remove-dark-theme-vr-options', 'remove-token-fallbacks', 'lozenge-appearance-semantic-migration', 'lozenge-to-tag-migration', 'badge-appearance-semantic-migration'].map(preset => path.join(__dirname, preset, `${preset}.@(ts|js|tsx)`));
|
|
18
19
|
export default presets;
|
|
@@ -5,8 +5,8 @@ const PRINT_SETTINGS = {
|
|
|
5
5
|
quote: 'single'
|
|
6
6
|
};
|
|
7
7
|
|
|
8
|
-
//
|
|
9
|
-
const
|
|
8
|
+
// Old appearance values that map to new semantic appearance values
|
|
9
|
+
const OLD_TO_NEW_APPEARANCE_MAP = {
|
|
10
10
|
default: 'neutral',
|
|
11
11
|
inprogress: 'information',
|
|
12
12
|
moved: 'warning',
|
|
@@ -15,11 +15,11 @@ const APPEARANCE_TO_COLOR_MAP = {
|
|
|
15
15
|
success: 'success'
|
|
16
16
|
};
|
|
17
17
|
/**
|
|
18
|
-
* Codemod to migrate Lozenge component
|
|
18
|
+
* Codemod to migrate Lozenge component appearance semantic values.
|
|
19
19
|
*
|
|
20
20
|
* This codemod:
|
|
21
|
-
* 1.
|
|
22
|
-
* 2. Maps
|
|
21
|
+
* 1. Updates `appearance` prop values to new semantic values
|
|
22
|
+
* 2. Maps old semantic values to new semantic values (e.g. default → neutral, inprogress → information)
|
|
23
23
|
* 3. Adds comments for dynamic values that need manual verification
|
|
24
24
|
*/
|
|
25
25
|
export default function transformer(file, api) {
|
|
@@ -103,30 +103,28 @@ export default function transformer(file, api) {
|
|
|
103
103
|
} = element;
|
|
104
104
|
const openingElement = path.value.openingElement;
|
|
105
105
|
|
|
106
|
-
//
|
|
106
|
+
// Update appearance prop values to new semantic values
|
|
107
107
|
if (hasAppearanceProp) {
|
|
108
108
|
var _openingElement$attri2;
|
|
109
109
|
(_openingElement$attri2 = openingElement.attributes) === null || _openingElement$attri2 === void 0 ? void 0 : _openingElement$attri2.forEach(attr => {
|
|
110
110
|
var _attr$name2;
|
|
111
111
|
if (attr.type === 'JSXAttribute' && ((_attr$name2 = attr.name) === null || _attr$name2 === void 0 ? void 0 : _attr$name2.type) === 'JSXIdentifier' && attr.name.name === 'appearance') {
|
|
112
|
-
// Rename appearance to color
|
|
113
|
-
attr.name.name = 'color';
|
|
114
|
-
|
|
115
112
|
// Handle different types of appearance values
|
|
116
113
|
if (appearanceValue === 'dynamic') {
|
|
117
114
|
// For dynamic values, add a comment
|
|
118
|
-
addCommentBefore(j, j(path), `FIXME: This Lozenge component uses a dynamic \`appearance\` prop
|
|
119
|
-
Please verify that the values being passed
|
|
120
|
-
|
|
115
|
+
addCommentBefore(j, j(path), `FIXME: This Lozenge component uses a dynamic \`appearance\` prop with updated semantic values.
|
|
116
|
+
Please verify that the values being passed use the new semantic values: neutral, information, warning, discovery, danger, success.
|
|
117
|
+
Old values mapping: default→neutral, inprogress→information, moved→warning, new→discovery, removed→danger, success→success.`);
|
|
118
|
+
} else if (appearanceValue && !OLD_TO_NEW_APPEARANCE_MAP[appearanceValue]) {
|
|
121
119
|
// For invalid string values, add a warning comment
|
|
122
|
-
addCommentBefore(j, j(path), `FIXME: This Lozenge component uses an
|
|
123
|
-
Valid semantic
|
|
124
|
-
Please update this value to a valid semantic
|
|
125
|
-
} else if (appearanceValue &&
|
|
120
|
+
addCommentBefore(j, j(path), `FIXME: This Lozenge component uses an unknown \`appearance\` value "${appearanceValue}".
|
|
121
|
+
Valid new semantic appearance values are: ${Object.values(OLD_TO_NEW_APPEARANCE_MAP).join(', ')}.
|
|
122
|
+
Please update this value to a valid semantic appearance value.`);
|
|
123
|
+
} else if (appearanceValue && OLD_TO_NEW_APPEARANCE_MAP[appearanceValue]) {
|
|
126
124
|
var _attr$value3;
|
|
127
|
-
// For valid string values, update the value to the
|
|
125
|
+
// For valid string values, update the value to the new semantic value
|
|
128
126
|
if (((_attr$value3 = attr.value) === null || _attr$value3 === void 0 ? void 0 : _attr$value3.type) === 'StringLiteral') {
|
|
129
|
-
attr.value.value =
|
|
127
|
+
attr.value.value = OLD_TO_NEW_APPEARANCE_MAP[appearanceValue];
|
|
130
128
|
}
|
|
131
129
|
}
|
|
132
130
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import lozengeAppearanceSemanticMigrationTransformer from './codemods/lozenge-appearance-semantic-migration';
|
|
2
|
+
export default async function transformer(file, api) {
|
|
3
|
+
const transformers = [lozengeAppearanceSemanticMigrationTransformer];
|
|
4
|
+
let src = file.source;
|
|
5
|
+
transformers.forEach(transformer => {
|
|
6
|
+
if (typeof src === 'undefined') {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
const nextSrc = transformer({
|
|
10
|
+
...file,
|
|
11
|
+
source: src
|
|
12
|
+
}, api);
|
|
13
|
+
if (nextSrc) {
|
|
14
|
+
src = nextSrc;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return src;
|
|
18
|
+
}
|
package/dist/esm/main.js
CHANGED
|
@@ -355,7 +355,7 @@ function _main() {
|
|
|
355
355
|
case 4:
|
|
356
356
|
_yield$parseArgs = _context6.sent;
|
|
357
357
|
packages = _yield$parseArgs.packages;
|
|
358
|
-
_process$env$_PACKAGE = "0.
|
|
358
|
+
_process$env$_PACKAGE = "0.31.2", _PACKAGE_VERSION_ = _process$env$_PACKAGE === void 0 ? '0.0.0-dev' : _process$env$_PACKAGE;
|
|
359
359
|
logger.log(chalk.bgBlue(chalk.black("\uD83D\uDCDA Atlassian-Frontend codemod library @ ".concat(_PACKAGE_VERSION_, " \uD83D\uDCDA"))));
|
|
360
360
|
if (packages && packages.length > 0) {
|
|
361
361
|
logger.log(chalk.gray("Searching for codemods for newer versions of the following packages: ".concat(packages.map(function (pkg) {
|
|
@@ -3,7 +3,7 @@ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
|
3
3
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
4
4
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
5
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
|
-
import
|
|
6
|
+
import badgeAppearanceSemanticMigrationTransformer from './codemods/badge-appearance-semantic-migration';
|
|
7
7
|
export default function transformer(_x, _x2) {
|
|
8
8
|
return _transformer.apply(this, arguments);
|
|
9
9
|
}
|
|
@@ -13,7 +13,7 @@ function _transformer() {
|
|
|
13
13
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
14
14
|
while (1) switch (_context.prev = _context.next) {
|
|
15
15
|
case 0:
|
|
16
|
-
transformers = [
|
|
16
|
+
transformers = [badgeAppearanceSemanticMigrationTransformer];
|
|
17
17
|
src = file.source;
|
|
18
18
|
transformers.forEach(function (transformer) {
|
|
19
19
|
if (typeof src === 'undefined') {
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { getImportDeclaration } from '@hypermod/utils';
|
|
2
|
+
import { addCommentBefore } from '@atlaskit/codemod-utils';
|
|
3
|
+
var BADGE_ENTRY_POINT = '@atlaskit/badge';
|
|
4
|
+
var PRINT_SETTINGS = {
|
|
5
|
+
quote: 'single'
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
// Old appearance values that map to new semantic appearance values
|
|
9
|
+
var OLD_TO_NEW_APPEARANCE_MAP = {
|
|
10
|
+
added: 'success',
|
|
11
|
+
removed: 'danger',
|
|
12
|
+
default: 'neutral',
|
|
13
|
+
primary: 'information',
|
|
14
|
+
primaryInverted: 'inverse',
|
|
15
|
+
important: 'danger'
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Codemod to migrate Badge component appearance semantic values.
|
|
19
|
+
*
|
|
20
|
+
* This codemod:
|
|
21
|
+
* 1. Updates `appearance` prop values to new semantic values
|
|
22
|
+
* 2. Maps old semantic values to new semantic values (e.g. added → success, removed → danger, primary → information)
|
|
23
|
+
* 3. Adds comments for dynamic values that need manual verification
|
|
24
|
+
*/
|
|
25
|
+
export default function transformer(file, api) {
|
|
26
|
+
var j = api.jscodeshift;
|
|
27
|
+
var source = j(file.source);
|
|
28
|
+
|
|
29
|
+
// Find all Badge imports
|
|
30
|
+
var badgeImports = getImportDeclaration(j, source, BADGE_ENTRY_POINT);
|
|
31
|
+
|
|
32
|
+
// If no Badge imports, exit early
|
|
33
|
+
if (!badgeImports.length) {
|
|
34
|
+
return file.source;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Get all imported Badge identifiers (could be renamed)
|
|
38
|
+
var badgeIdentifiers = new Set();
|
|
39
|
+
badgeImports.forEach(function (importPath) {
|
|
40
|
+
var _importPath$value$spe;
|
|
41
|
+
(_importPath$value$spe = importPath.value.specifiers) === null || _importPath$value$spe === void 0 || _importPath$value$spe.forEach(function (specifier) {
|
|
42
|
+
var _specifier$imported;
|
|
43
|
+
if (specifier.type === 'ImportDefaultSpecifier') {
|
|
44
|
+
var _specifier$local;
|
|
45
|
+
// Handle: import Badge from '@atlaskit/badge'
|
|
46
|
+
badgeIdentifiers.add(((_specifier$local = specifier.local) === null || _specifier$local === void 0 ? void 0 : _specifier$local.name) || 'Badge');
|
|
47
|
+
} else if (specifier.type === 'ImportSpecifier' && ((_specifier$imported = specifier.imported) === null || _specifier$imported === void 0 ? void 0 : _specifier$imported.type) === 'Identifier' && specifier.imported.name === 'default') {
|
|
48
|
+
var _specifier$local2;
|
|
49
|
+
// Handle: import { default as MyBadge } from '@atlaskit/badge'
|
|
50
|
+
badgeIdentifiers.add(((_specifier$local2 = specifier.local) === null || _specifier$local2 === void 0 ? void 0 : _specifier$local2.name) || 'Badge');
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// If no Badge identifiers found, exit early
|
|
56
|
+
if (badgeIdentifiers.size === 0) {
|
|
57
|
+
return file.source;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Find all Badge JSX elements
|
|
61
|
+
var badgeElements = [];
|
|
62
|
+
source.find(j.JSXElement).forEach(function (path) {
|
|
63
|
+
var _openingElement$name;
|
|
64
|
+
var openingElement = path.value.openingElement;
|
|
65
|
+
if (((_openingElement$name = openingElement.name) === null || _openingElement$name === void 0 ? void 0 : _openingElement$name.type) === 'JSXIdentifier' && badgeIdentifiers.has(openingElement.name.name)) {
|
|
66
|
+
var _openingElement$attri;
|
|
67
|
+
var element = {
|
|
68
|
+
path: path,
|
|
69
|
+
hasAppearanceProp: false
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// Check for appearance prop
|
|
73
|
+
(_openingElement$attri = openingElement.attributes) === null || _openingElement$attri === void 0 || _openingElement$attri.forEach(function (attr) {
|
|
74
|
+
var _attr$name;
|
|
75
|
+
if (attr.type === 'JSXAttribute' && ((_attr$name = attr.name) === null || _attr$name === void 0 ? void 0 : _attr$name.type) === 'JSXIdentifier') {
|
|
76
|
+
if (attr.name.name === 'appearance') {
|
|
77
|
+
var _attr$value, _attr$value2;
|
|
78
|
+
element.hasAppearanceProp = true;
|
|
79
|
+
if (((_attr$value = attr.value) === null || _attr$value === void 0 ? void 0 : _attr$value.type) === 'StringLiteral') {
|
|
80
|
+
element.appearanceValue = attr.value.value;
|
|
81
|
+
} else if (((_attr$value2 = attr.value) === null || _attr$value2 === void 0 ? void 0 : _attr$value2.type) === 'JSXExpressionContainer') {
|
|
82
|
+
// Handle dynamic values
|
|
83
|
+
var expression = attr.value.expression;
|
|
84
|
+
if (expression.type === 'StringLiteral') {
|
|
85
|
+
element.appearanceValue = expression.value;
|
|
86
|
+
} else {
|
|
87
|
+
element.appearanceValue = 'dynamic';
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
badgeElements.push(element);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// Process each Badge element
|
|
98
|
+
badgeElements.forEach(function (element) {
|
|
99
|
+
var path = element.path,
|
|
100
|
+
hasAppearanceProp = element.hasAppearanceProp,
|
|
101
|
+
appearanceValue = element.appearanceValue;
|
|
102
|
+
var openingElement = path.value.openingElement;
|
|
103
|
+
|
|
104
|
+
// Update appearance prop values to new semantic values
|
|
105
|
+
if (hasAppearanceProp) {
|
|
106
|
+
var _openingElement$attri2;
|
|
107
|
+
(_openingElement$attri2 = openingElement.attributes) === null || _openingElement$attri2 === void 0 || _openingElement$attri2.forEach(function (attr) {
|
|
108
|
+
var _attr$name2;
|
|
109
|
+
if (attr.type === 'JSXAttribute' && ((_attr$name2 = attr.name) === null || _attr$name2 === void 0 ? void 0 : _attr$name2.type) === 'JSXIdentifier' && attr.name.name === 'appearance') {
|
|
110
|
+
// Handle different types of appearance values
|
|
111
|
+
if (appearanceValue === 'dynamic') {
|
|
112
|
+
// For dynamic values, add a comment
|
|
113
|
+
addCommentBefore(j, j(path), "FIXME: This Badge component uses a dynamic `appearance` prop with updated semantic values.\nPlease verify that the values being passed use the new semantic values: neutral, information, inverse, danger, success.\nOld values mapping: default\u2192neutral, primary\u2192information, primaryInverted\u2192inverse, added\u2192success, removed\u2192danger, important\u2192danger.");
|
|
114
|
+
} else if (appearanceValue === 'primaryInverted') {
|
|
115
|
+
var _attr$value3;
|
|
116
|
+
// For primaryInverted, we need to add a comment since it maps to inverse
|
|
117
|
+
addCommentBefore(j, j(path), "FIXME: This Badge component used `appearance=\"primaryInverted\"` which has been migrated to `appearance=\"inverse\"`.\nPlease verify the visual appearance matches your expectations.");
|
|
118
|
+
// Update the value
|
|
119
|
+
if (((_attr$value3 = attr.value) === null || _attr$value3 === void 0 ? void 0 : _attr$value3.type) === 'StringLiteral') {
|
|
120
|
+
attr.value.value = OLD_TO_NEW_APPEARANCE_MAP[appearanceValue];
|
|
121
|
+
}
|
|
122
|
+
} else if (appearanceValue && !OLD_TO_NEW_APPEARANCE_MAP[appearanceValue]) {
|
|
123
|
+
// For invalid string values, add a warning comment
|
|
124
|
+
addCommentBefore(j, j(path), "FIXME: This Badge component uses an unknown `appearance` value \"".concat(appearanceValue, "\".\nValid new semantic appearance values are: ").concat(Object.values(OLD_TO_NEW_APPEARANCE_MAP).filter(function (v, i, arr) {
|
|
125
|
+
return arr.indexOf(v) === i;
|
|
126
|
+
}).join(', '), ".\nPlease update this value to a valid semantic appearance value."));
|
|
127
|
+
} else if (appearanceValue && OLD_TO_NEW_APPEARANCE_MAP[appearanceValue]) {
|
|
128
|
+
var _attr$value4;
|
|
129
|
+
// For valid string values, update the value to the new semantic value
|
|
130
|
+
if (((_attr$value4 = attr.value) === null || _attr$value4 === void 0 ? void 0 : _attr$value4.type) === 'StringLiteral') {
|
|
131
|
+
attr.value.value = OLD_TO_NEW_APPEARANCE_MAP[appearanceValue];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
return source.toSource(PRINT_SETTINGS);
|
|
139
|
+
}
|
|
@@ -12,9 +12,10 @@ import './migrate-icon-object-to-object/migrate-icon-object-to-object';
|
|
|
12
12
|
import './upgrade-pragmatic-drag-and-drop-to-stable/upgrade-pragmatic-drag-and-drop-to-stable';
|
|
13
13
|
import './remove-dark-theme-vr-options/remove-dark-theme-vr-options';
|
|
14
14
|
import './remove-token-fallbacks/remove-token-fallbacks';
|
|
15
|
-
import './lozenge-appearance-
|
|
15
|
+
import './lozenge-appearance-semantic-migration/lozenge-appearance-semantic-migration';
|
|
16
16
|
import './lozenge-to-tag-migration/lozenge-to-tag-migration';
|
|
17
|
-
|
|
17
|
+
import './badge-appearance-semantic-migration/badge-appearance-semantic-migration';
|
|
18
|
+
var presets = ['styled-to-emotion', 'theme-remove-deprecated-mixins', 'migrate-to-link', 'migrate-to-new-buttons', 'migrate-icon-object-to-object', 'upgrade-pragmatic-drag-and-drop-to-stable', 'remove-dark-theme-vr-options', 'remove-token-fallbacks', 'lozenge-appearance-semantic-migration', 'lozenge-to-tag-migration', 'badge-appearance-semantic-migration'].map(function (preset) {
|
|
18
19
|
return path.join(__dirname, preset, "".concat(preset, ".@(ts|js|tsx)"));
|
|
19
20
|
});
|
|
20
21
|
export default presets;
|
|
@@ -5,8 +5,8 @@ var PRINT_SETTINGS = {
|
|
|
5
5
|
quote: 'single'
|
|
6
6
|
};
|
|
7
7
|
|
|
8
|
-
//
|
|
9
|
-
var
|
|
8
|
+
// Old appearance values that map to new semantic appearance values
|
|
9
|
+
var OLD_TO_NEW_APPEARANCE_MAP = {
|
|
10
10
|
default: 'neutral',
|
|
11
11
|
inprogress: 'information',
|
|
12
12
|
moved: 'warning',
|
|
@@ -15,11 +15,11 @@ var APPEARANCE_TO_COLOR_MAP = {
|
|
|
15
15
|
success: 'success'
|
|
16
16
|
};
|
|
17
17
|
/**
|
|
18
|
-
* Codemod to migrate Lozenge component
|
|
18
|
+
* Codemod to migrate Lozenge component appearance semantic values.
|
|
19
19
|
*
|
|
20
20
|
* This codemod:
|
|
21
|
-
* 1.
|
|
22
|
-
* 2. Maps
|
|
21
|
+
* 1. Updates `appearance` prop values to new semantic values
|
|
22
|
+
* 2. Maps old semantic values to new semantic values (e.g. default → neutral, inprogress → information)
|
|
23
23
|
* 3. Adds comments for dynamic values that need manual verification
|
|
24
24
|
*/
|
|
25
25
|
export default function transformer(file, api) {
|
|
@@ -101,27 +101,24 @@ export default function transformer(file, api) {
|
|
|
101
101
|
appearanceValue = element.appearanceValue;
|
|
102
102
|
var openingElement = path.value.openingElement;
|
|
103
103
|
|
|
104
|
-
//
|
|
104
|
+
// Update appearance prop values to new semantic values
|
|
105
105
|
if (hasAppearanceProp) {
|
|
106
106
|
var _openingElement$attri2;
|
|
107
107
|
(_openingElement$attri2 = openingElement.attributes) === null || _openingElement$attri2 === void 0 || _openingElement$attri2.forEach(function (attr) {
|
|
108
108
|
var _attr$name2;
|
|
109
109
|
if (attr.type === 'JSXAttribute' && ((_attr$name2 = attr.name) === null || _attr$name2 === void 0 ? void 0 : _attr$name2.type) === 'JSXIdentifier' && attr.name.name === 'appearance') {
|
|
110
|
-
// Rename appearance to color
|
|
111
|
-
attr.name.name = 'color';
|
|
112
|
-
|
|
113
110
|
// Handle different types of appearance values
|
|
114
111
|
if (appearanceValue === 'dynamic') {
|
|
115
112
|
// For dynamic values, add a comment
|
|
116
|
-
addCommentBefore(j, j(path), "FIXME: This Lozenge component uses a dynamic `appearance` prop
|
|
117
|
-
} else if (appearanceValue && !
|
|
113
|
+
addCommentBefore(j, j(path), "FIXME: This Lozenge component uses a dynamic `appearance` prop with updated semantic values.\nPlease verify that the values being passed use the new semantic values: neutral, information, warning, discovery, danger, success.\nOld values mapping: default\u2192neutral, inprogress\u2192information, moved\u2192warning, new\u2192discovery, removed\u2192danger, success\u2192success.");
|
|
114
|
+
} else if (appearanceValue && !OLD_TO_NEW_APPEARANCE_MAP[appearanceValue]) {
|
|
118
115
|
// For invalid string values, add a warning comment
|
|
119
|
-
addCommentBefore(j, j(path), "FIXME: This Lozenge component uses an
|
|
120
|
-
} else if (appearanceValue &&
|
|
116
|
+
addCommentBefore(j, j(path), "FIXME: This Lozenge component uses an unknown `appearance` value \"".concat(appearanceValue, "\".\nValid new semantic appearance values are: ").concat(Object.values(OLD_TO_NEW_APPEARANCE_MAP).join(', '), ".\nPlease update this value to a valid semantic appearance value."));
|
|
117
|
+
} else if (appearanceValue && OLD_TO_NEW_APPEARANCE_MAP[appearanceValue]) {
|
|
121
118
|
var _attr$value3;
|
|
122
|
-
// For valid string values, update the value to the
|
|
119
|
+
// For valid string values, update the value to the new semantic value
|
|
123
120
|
if (((_attr$value3 = attr.value) === null || _attr$value3 === void 0 ? void 0 : _attr$value3.type) === 'StringLiteral') {
|
|
124
|
-
attr.value.value =
|
|
121
|
+
attr.value.value = OLD_TO_NEW_APPEARANCE_MAP[appearanceValue];
|
|
125
122
|
}
|
|
126
123
|
}
|
|
127
124
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
4
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
|
+
import lozengeAppearanceSemanticMigrationTransformer from './codemods/lozenge-appearance-semantic-migration';
|
|
7
|
+
export default function transformer(_x, _x2) {
|
|
8
|
+
return _transformer.apply(this, arguments);
|
|
9
|
+
}
|
|
10
|
+
function _transformer() {
|
|
11
|
+
_transformer = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(file, api) {
|
|
12
|
+
var transformers, src;
|
|
13
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
14
|
+
while (1) switch (_context.prev = _context.next) {
|
|
15
|
+
case 0:
|
|
16
|
+
transformers = [lozengeAppearanceSemanticMigrationTransformer];
|
|
17
|
+
src = file.source;
|
|
18
|
+
transformers.forEach(function (transformer) {
|
|
19
|
+
if (typeof src === 'undefined') {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
var nextSrc = transformer(_objectSpread(_objectSpread({}, file), {}, {
|
|
23
|
+
source: src
|
|
24
|
+
}), api);
|
|
25
|
+
if (nextSrc) {
|
|
26
|
+
src = nextSrc;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
return _context.abrupt("return", src);
|
|
30
|
+
case 4:
|
|
31
|
+
case "end":
|
|
32
|
+
return _context.stop();
|
|
33
|
+
}
|
|
34
|
+
}, _callee);
|
|
35
|
+
}));
|
|
36
|
+
return _transformer.apply(this, arguments);
|
|
37
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type API, type FileInfo } from 'jscodeshift';
|
|
2
|
+
/**
|
|
3
|
+
* Codemod to migrate Badge component appearance semantic values.
|
|
4
|
+
*
|
|
5
|
+
* This codemod:
|
|
6
|
+
* 1. Updates `appearance` prop values to new semantic values
|
|
7
|
+
* 2. Maps old semantic values to new semantic values (e.g. added → success, removed → danger, primary → information)
|
|
8
|
+
* 3. Adds comments for dynamic values that need manual verification
|
|
9
|
+
*/
|
|
10
|
+
export default function transformer(file: FileInfo, api: API): string;
|
|
@@ -10,7 +10,8 @@ import './migrate-icon-object-to-object/migrate-icon-object-to-object';
|
|
|
10
10
|
import './upgrade-pragmatic-drag-and-drop-to-stable/upgrade-pragmatic-drag-and-drop-to-stable';
|
|
11
11
|
import './remove-dark-theme-vr-options/remove-dark-theme-vr-options';
|
|
12
12
|
import './remove-token-fallbacks/remove-token-fallbacks';
|
|
13
|
-
import './lozenge-appearance-
|
|
13
|
+
import './lozenge-appearance-semantic-migration/lozenge-appearance-semantic-migration';
|
|
14
14
|
import './lozenge-to-tag-migration/lozenge-to-tag-migration';
|
|
15
|
+
import './badge-appearance-semantic-migration/badge-appearance-semantic-migration';
|
|
15
16
|
declare const presets: string[];
|
|
16
17
|
export default presets;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type API, type FileInfo } from 'jscodeshift';
|
|
2
|
+
/**
|
|
3
|
+
* Codemod to migrate Lozenge component appearance semantic values.
|
|
4
|
+
*
|
|
5
|
+
* This codemod:
|
|
6
|
+
* 1. Updates `appearance` prop values to new semantic values
|
|
7
|
+
* 2. Maps old semantic values to new semantic values (e.g. default → neutral, inprogress → information)
|
|
8
|
+
* 3. Adds comments for dynamic values that need manual verification
|
|
9
|
+
*/
|
|
10
|
+
export default function transformer(file: FileInfo, api: API): string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type API, type FileInfo } from 'jscodeshift';
|
|
2
|
+
/**
|
|
3
|
+
* Codemod to migrate Badge component appearance semantic values.
|
|
4
|
+
*
|
|
5
|
+
* This codemod:
|
|
6
|
+
* 1. Updates `appearance` prop values to new semantic values
|
|
7
|
+
* 2. Maps old semantic values to new semantic values (e.g. added → success, removed → danger, primary → information)
|
|
8
|
+
* 3. Adds comments for dynamic values that need manual verification
|
|
9
|
+
*/
|
|
10
|
+
export default function transformer(file: FileInfo, api: API): string;
|
|
@@ -10,7 +10,8 @@ import './migrate-icon-object-to-object/migrate-icon-object-to-object';
|
|
|
10
10
|
import './upgrade-pragmatic-drag-and-drop-to-stable/upgrade-pragmatic-drag-and-drop-to-stable';
|
|
11
11
|
import './remove-dark-theme-vr-options/remove-dark-theme-vr-options';
|
|
12
12
|
import './remove-token-fallbacks/remove-token-fallbacks';
|
|
13
|
-
import './lozenge-appearance-
|
|
13
|
+
import './lozenge-appearance-semantic-migration/lozenge-appearance-semantic-migration';
|
|
14
14
|
import './lozenge-to-tag-migration/lozenge-to-tag-migration';
|
|
15
|
+
import './badge-appearance-semantic-migration/badge-appearance-semantic-migration';
|
|
15
16
|
declare const presets: string[];
|
|
16
17
|
export default presets;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type API, type FileInfo } from 'jscodeshift';
|
|
2
|
+
/**
|
|
3
|
+
* Codemod to migrate Lozenge component appearance semantic values.
|
|
4
|
+
*
|
|
5
|
+
* This codemod:
|
|
6
|
+
* 1. Updates `appearance` prop values to new semantic values
|
|
7
|
+
* 2. Maps old semantic values to new semantic values (e.g. default → neutral, inprogress → information)
|
|
8
|
+
* 3. Adds comments for dynamic values that need manual verification
|
|
9
|
+
*/
|
|
10
|
+
export default function transformer(file: FileInfo, api: API): string;
|
package/package.json
CHANGED
package/dist/types/presets/lozenge-appearance-to-color/codemods/lozenge-appearance-to-color.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { type API, type FileInfo } from 'jscodeshift';
|
|
2
|
-
/**
|
|
3
|
-
* Codemod to migrate Lozenge component from `appearance` prop to `color` prop.
|
|
4
|
-
*
|
|
5
|
-
* This codemod:
|
|
6
|
-
* 1. Renames `appearance` prop to `color` for semantic values
|
|
7
|
-
* 2. Maps existing semantic values directly (e.g. success → success)
|
|
8
|
-
* 3. Adds comments for dynamic values that need manual verification
|
|
9
|
-
*/
|
|
10
|
-
export default function transformer(file: FileInfo, api: API): string;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { type API, type FileInfo } from 'jscodeshift';
|
|
2
|
-
/**
|
|
3
|
-
* Codemod to migrate Lozenge component from `appearance` prop to `color` prop.
|
|
4
|
-
*
|
|
5
|
-
* This codemod:
|
|
6
|
-
* 1. Renames `appearance` prop to `color` for semantic values
|
|
7
|
-
* 2. Maps existing semantic values directly (e.g. success → success)
|
|
8
|
-
* 3. Adds comments for dynamic values that need manual verification
|
|
9
|
-
*/
|
|
10
|
-
export default function transformer(file: FileInfo, api: API): string;
|
|
File without changes
|